Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
4 / 4 / 2
Регистрация: 17.10.2012
Сообщений: 176
1

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

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

Author24 — интернет-сервис помощи студентам
Есть собственно С++ код работает все в консоли
Не пойму как сделать что бы пользователь мог выбрать на каком языке будет отображаться текст программы на русском или на английском..
Выбор между ними, как создавать код, какие файлы применять!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.05.2013, 14:19
Ответы с готовыми решениями:

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

Установить для приложения текущую директорию, отличную от директории приложения
Ситуация такая: в моем коде всё работает нормально. Следующий код: string text =...

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

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

16
2062 / 618 / 41
Регистрация: 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
4 / 4 / 2
Регистрация: 17.10.2012
Сообщений: 176
11.05.2013, 14:36  [ТС] 3
и когда я выберу язык английский то весь текст который есть в коде поменяется на английский?
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
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
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
11.05.2013, 14:52 5
Смотрите, как это сделано в Qt:
1. Любая переводимая строка оборачивается в вызов глобальной функции: tr("Hello").
2. Эта функция возвращает переведённую строку с учётом глобального установленного языка (или исходную, если не получилось перевести).
3. Перед началом работы программа считывает специальные файлики с переводами. В результате создаётся и устанавливается какой-то глобальный map<string, string> для каждого языка.
4. Есть специальная статическая приблуда, которая пробегается по всем исходникам, выдирает все вызовы tr() и позволяет удобно создавать файлики с переводами.

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

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

Добавлено через 57 секунд
ты уж определись: по проще, или зашкаливающе сложно.
расскажите как и покажите !
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
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;
}
0
4 / 4 / 2
Регистрация: 17.10.2012
Сообщений: 176
11.05.2013, 15:45  [ТС] 17
не понятно....
у меня очень много прототипов функций... как сними то работать.. вы все описали в главной функции... и из за этого ничего не понятно
0
11.05.2013, 15:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2013, 15:45
Помогаю со студенческими работами здесь

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

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

Как использовать форму заполнения заявки одного приложения во views.py и templates другого приложения?
Есть 2 приложения booking и main. В booking в forms.py реализовано заполнение заявки на...

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru