Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
flasher167
4 / 4 / 0
Регистрация: 17.10.2012
Сообщений: 176
#1

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

11.05.2013, 14:19. Просмотров 437. Ответов 16
Метки нет (Все метки)

Есть собственно С++ код работает все в консоли
Не пойму как сделать что бы пользователь мог выбрать на каком языке будет отображаться текст программы на русском или на английском..
Выбор между ними, как создавать код, какие файлы применять!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2013, 14:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двуязычие приложения (C++):

Запустить параллельного приложения / Запуск приложения в новом консольном окне - C++
Доброго времени суток! Хотел спросить как в коде консольного приложения запустить ещё одно консольное приложение, так чтобы оно...

Разработка web-приложения, приложения под ОС Android,Windows - C++
Доброго времени суток ребят, кто узрел эту тему прошу не проходите мимо, прошу вашей помощи.Мне требуется определиться с темой для...

Проект консольного приложения из Windows приложения - C++
привет всем. В чем может быть ошибка? 1>MSVCRTD.lib(crtexew.obj) : error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в...

Запуск приложения из приложения - C++
Задача. Приложение (Win32) запускает другое приложение с параметром (ключом). Решение. Использую CreateProcess(..., 'Exe2.exe',...

Сворачивание и разворачивание приложения при обновлении || установка иконки приложения - JavaFX
1. Допустим у меня GUI свернут, мне нужно, что бы при обновлении GUI (добавились новые строки в текстовое поле) GUI разворачивался, и, если...

Подскажите, как скрыть окно приложения из Диспетчер задач -> Приложения? - C++ WinAPI
Чтобы его скрыть из панели задач делаю так HWND wnd = Form2->Handle; ShowWindow(wnd, SW_HIDE); SetWindowLong(wnd, GWL_EXSTYLE,...

16
programina
1916 / 601 / 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;
}
0
flasher167
4 / 4 / 0
Регистрация: 17.10.2012
Сообщений: 176
11.05.2013, 14:36  [ТС] #3
и когда я выберу язык английский то весь текст который есть в коде поменяется на английский?
0
taras atavin
3571 / 1755 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
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;
}
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
11.05.2013, 14:52 #5
Смотрите, как это сделано в Qt:
1. Любая переводимая строка оборачивается в вызов глобальной функции: tr("Hello").
2. Эта функция возвращает переведённую строку с учётом глобального установленного языка (или исходную, если не получилось перевести).
3. Перед началом работы программа считывает специальные файлики с переводами. В результате создаётся и устанавливается какой-то глобальный map<string, string> для каждого языка.
4. Есть специальная статическая приблуда, которая пробегается по всем исходникам, выдирает все вызовы tr() и позволяет удобно создавать файлики с переводами.

Естессно, есть ещё вагон других тонкостей.
0
taras atavin
3571 / 1755 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
11.05.2013, 14:53 #6
Можно полностью продублировать вывод, можно выводить только переменные, а в зависимости от языка подгружать их из файла, из ресурсов приложения, из ресурсной библиотеки, или каждый раз запрашивать строку в библиотечной функции.
0
programina
1916 / 601 / 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;
}
0
taras atavin
3571 / 1755 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
11.05.2013, 14:55 #8
Можно передавать строку в другую программу, или в статическую библиотеку на перевод, передавая язык параметром.
0
programina
1916 / 601 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
11.05.2013, 14:57 #9
Лучше всего хранить в ini файле.
0
taras atavin
3571 / 1755 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
11.05.2013, 15:01 #10
Цитата Сообщение от programina Посмотреть сообщение
Лучше всего хранить в ini файле.
Согласен. Переврав фактический тип на xml в utf8 без BOM с отрезанной декларацией и бессмысленно-кириллическими тегами.
0
flasher167
4 / 4 / 0
Регистрация: 17.10.2012
Сообщений: 176
11.05.2013, 15:02  [ТС] #11
у меня 800 строк кода...
и все пока что на русском
везде писать строки по английском .... нельзя как то это автономно что ли сделать?
0
taras atavin
3571 / 1755 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
11.05.2013, 15:05 #12
Цитата Сообщение от flasher167 Посмотреть сообщение
у меня 800 строк кода...
и все пока что на русском
везде писать строки по английском
ну сами то они не переведутся.
0
flasher167
4 / 4 / 0
Регистрация: 17.10.2012
Сообщений: 176
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
0
taras atavin
3571 / 1755 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
11.05.2013, 15:25 #14
Цитата Сообщение от flasher167 Посмотреть сообщение
ну мне сказали можно через массив как-то вызывать файл eng.txt или rus.txt и тогда будет все меня русское или английское
Текстовые файлы не вызываются, надо грузить данные в переменные.

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

Добавлено через 57 секунд
ты уж определись: по проще, или зашкаливающе сложно.
расскажите как и покажите !
0
11.05.2013, 15:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2013, 15:26
Привет! Вот еще темы с ответами:

Установить для приложения текущую директорию, отличную от директории приложения - C#
Ситуация такая: в моем коде всё работает нормально. Следующий код: string text = File.ReadAllText(&quot;code.in&quot;); Считывает весь...

Можно ли считать приложения, используйщие ButtonsABC как приложения с GUI? - PascalABC.NET
Можно ли считать приложения, используйщие ButtonsABC как приложения с GUI?

Windows sockets приложения с сокетами, написание приложения сервер-клиент - C (Си)
Написать программу-сервер и программу - клиент. Клиент читает файл, пересылает его серверу. Сервер, в свою очередь, пересылает файл всем...

Не обновляются приложения на Смарт тв и приложения на смартфоне (Роутер d-link 300nru) - Сетевое оборудование
Добрый день! При смене провайдера с Ростелекома на ТТК , у меня случилось что мой роутер D-Link 300nru rev.B5/B6 стал раздавать интернет по...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.