Форум программистов, компьютерный форум CyberForum.ru

Двуязычие приложения - C++

Восстановить пароль Регистрация
 
flasher167
4 / 4 / 0
Регистрация: 17.10.2012
Сообщений: 174
11.05.2013, 14:19     Двуязычие приложения #1
Есть собственно С++ код работает все в консоли
Не пойму как сделать что бы пользователь мог выбрать на каком языке будет отображаться текст программы на русском или на английском..
Выбор между ними, как создавать код, какие файлы применять!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2013, 14:19     Двуязычие приложения
Посмотрите здесь:

C++ Windows приложения на С++
C++ Запуск приложения из приложения
DOS приложения и C++ C++
C++ многопоточность приложения
C++ оконные приложения
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
11.05.2013, 14:29     Двуязычие приложения #2
flasher167,

C++
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
 
    string language;
    cout << "Выберите язык: ru en ch:\n" << endl;
    cin >> language;
 
    if          ( language == "ru") cout << "Выбран русский язык" << endl;
    else if     ( language == "en") cout << "Выбран английский язык" << endl;
    else if     ( language == "ch") cout << "Выбран китайский язык" << endl;
    else                            cout << "Вы будете гореть в аду :)" << endl;
 
    return 0;
}
flasher167
4 / 4 / 0
Регистрация: 17.10.2012
Сообщений: 174
11.05.2013, 14:36  [ТС]     Двуязычие приложения #3
и когда я выберу язык английский то весь текст который есть в коде поменяется на английский?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.05.2013, 14:49     Двуязычие приложения #4
Нет конечно. Чтоб текст был английским, его надо и вывести по-английски.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
int main()
{
 std::string lang;
 double x, y;
 std::cout<<"выбери язык: рус, eng"<<std::endl;
 std::cin>>lang;
 std::cout<<std::endl;
 if (lang=="rus")
 {
  std::cout<<"введи x"<<std::endl;;
 }
 if (lang=="eng")
 {
  std::cout<<"input x"<<std::endl;;
 }
 std::cin>>x;
 y=x*x;
 if (lang=="rus")
 {
  std::cout<<"x в квадрате равен "<<y<<std::endl;;
 }
 if (lang=="eng")
 {
  std::cout<<"x at square is "<<y<<std::endl;;
 }
 retrun 0;
}
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
11.05.2013, 14:52     Двуязычие приложения #5
Смотрите, как это сделано в Qt:
1. Любая переводимая строка оборачивается в вызов глобальной функции: tr("Hello").
2. Эта функция возвращает переведённую строку с учётом глобального установленного языка (или исходную, если не получилось перевести).
3. Перед началом работы программа считывает специальные файлики с переводами. В результате создаётся и устанавливается какой-то глобальный map<string, string> для каждого языка.
4. Есть специальная статическая приблуда, которая пробегается по всем исходникам, выдирает все вызовы tr() и позволяет удобно создавать файлики с переводами.

Естессно, есть ещё вагон других тонкостей.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.05.2013, 14:53     Двуязычие приложения #6
Можно полностью продублировать вывод, можно выводить только переменные, а в зависимости от языка подгружать их из файла, из ресурсов приложения, из ресурсной библиотеки, или каждый раз запрашивать строку в библиотечной функции.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
11.05.2013, 14:53     Двуязычие приложения #7
flasher167,

C++
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
 
    string language;
 
    cout << "Выберите язык: ru en ch:\n" << endl;
    cin >> language;
 
    if ( language == "ru")
    {
        // здесь русский код
    }
    else if ( language == "en")
    {
        // здесь английский код
    }
    else if ( language == "ch")
    {
        // здесь китайский код
    }
    else { cout << "Моя твоя не понимать..." << endl; }
 
    return 0;
}
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.05.2013, 14:55     Двуязычие приложения #8
Можно передавать строку в другую программу, или в статическую библиотеку на перевод, передавая язык параметром.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
11.05.2013, 14:57     Двуязычие приложения #9
Лучше всего хранить в ini файле.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.05.2013, 15:01     Двуязычие приложения #10
Цитата Сообщение от programina Посмотреть сообщение
Лучше всего хранить в ini файле.
Согласен. Переврав фактический тип на xml в utf8 без BOM с отрезанной декларацией и бессмысленно-кириллическими тегами.
flasher167
4 / 4 / 0
Регистрация: 17.10.2012
Сообщений: 174
11.05.2013, 15:02  [ТС]     Двуязычие приложения #11
у меня 800 строк кода...
и все пока что на русском
везде писать строки по английском .... нельзя как то это автономно что ли сделать?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.05.2013, 15:05     Двуязычие приложения #12
Цитата Сообщение от flasher167 Посмотреть сообщение
у меня 800 строк кода...
и все пока что на русском
везде писать строки по английском
ну сами то они не переведутся.
flasher167
4 / 4 / 0
Регистрация: 17.10.2012
Сообщений: 174
11.05.2013, 15:11  [ТС]     Двуязычие приложения #13
ну мне сказали можно через массив как-то вызывать файл eng.txt или rus.txt и тогда будет все меня русское или английское
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#define NUM_OF_STR 44
#define LEN_OF_STR 81
 
using namespace std;
 
char* menu [NUM_OF_STR]; // массив указателей, в котором хранится меню
short lang = 0; //0 - русский язык, 1 - английский
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    /* прототипы функций */
    int language_menu(int);
    int main_menu();
    /* действие программы */
    language_menu(lang); //загружаем при запуске программы русский язык по умолчанию
    cout << menu[0] << endl;//загрузиться на русском языке
    language_menu(!lang); //тут уже английский
    cout << menu[0] << endl;//загрузиться на английском языке
    /* просто даёшь пользователю возможность нажать какую-то клавишу и по ней запускаешь !язык */
    return 0;
 
int language_menu (int language)
{
    ifstream fin;
    bool err = true;
    do
    {
        switch (language)
        {
        case 0: //русский язык
            {
                fin.open("menu_rus.txt"); //открыли файл с текстовым меню для чтения
                err = false;
                lang = 0;
                break;
            }
        case 1: //английский язык
            {
                fin.open("menu_eng.txt"); //открыли файл с текстовым меню для чтения
                err = false;
                lang = 1;
                break;
            }
        default: //когда не 1 и не 2
                err = true;
        }
    }
    while (err);
    if (fin == NULL) return 0;
    else
    {   /* считываем из файла строки в массив указателей */
        char buffer[100]; //буфер, в которые считываем строки
        for (register int i = 0; i < NUM_OF_STR; i++)
        {
            fin.getline(buffer,LEN_OF_STR);
            menu[i] = new char [strlen(buffer) + 1];
            strcpy(menu[i],buffer);
        }
        return 1;
    }
    fin.close(); //закрываем файл меню, оно теперь есть в массиве литерных указателей
}

но я не могу понять... ничего из этого.. что то по проще типо
Hello worda
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.05.2013, 15:25     Двуязычие приложения #14
Цитата Сообщение от flasher167 Посмотреть сообщение
ну мне сказали можно через массив как-то вызывать файл eng.txt или rus.txt и тогда будет все меня русское или английское
Текстовые файлы не вызываются, надо грузить данные в переменные.

Добавлено через 57 секунд
Цитата Сообщение от flasher167 Посмотреть сообщение
проще типо Hello worda
ты уж определись: по проще, или зашкаливающе сложно.
flasher167
4 / 4 / 0
Регистрация: 17.10.2012
Сообщений: 174
11.05.2013, 15:26  [ТС]     Двуязычие приложения #15
Цитата Сообщение от taras atavin Посмотреть сообщение
Текстовые файлы не вызываются, надо грузить данные в переменные.

Добавлено через 57 секунд
ты уж определись: по проще, или зашкаливающе сложно.
расскажите как и покажите !
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.05.2013, 15:32     Двуязычие приложения #16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <string>
#include <fstream>
int main()
{
 std::string lang;
 std::ifstream flang;
 std::string ask;
 std::string answer;
 double x, y;
 std::cout<<"выбери язык: рус, eng"<<std::endl;
 std::cin>>lang;
 std::cout<<std::endl;
 if (s=="рус")
 {
  flang.open("rus.txt");
 }
 if (s=="eng")
 {
  flang.open("eng.txt");
 }
 flang>>ask; 
 flang>>answer;
 flang.close();
 std::cout<<ask<<std::endl;
 std::cin>>x;
 y=x*x; 
 std::cout<<answer<<y<<std::endl;
 retrun 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2013, 15:45     Двуязычие приложения
Еще ссылки по теме:

Ошибка приложения C++
C++ Запустить параллельного приложения / Запуск приложения в новом консольном окне
Оконные приложения C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
flasher167
4 / 4 / 0
Регистрация: 17.10.2012
Сообщений: 174
11.05.2013, 15:45  [ТС]     Двуязычие приложения #17
не понятно....
у меня очень много прототипов функций... как сними то работать.. вы все описали в главной функции... и из за этого ничего не понятно
Yandex
Объявления
11.05.2013, 15:45     Двуязычие приложения
Ответ Создать тему
Опции темы

Текущее время: 12:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru