powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / поддержка нескольких языков - как правильно организовать?
11 сообщений из 11, страница 1 из 1
поддержка нескольких языков - как правильно организовать?
    #32431474
oksale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я хочу организовать поддержку нескольких языков в программе. Во-первых, как правильно организовывать меню: сделать несколько на разных языках и подключать одно из них или сделать одно - и в нем переименовывать значения всех строк при изменении языка? И второе: значения переменных лучше хранить в .h-файле или .txt?
...
Рейтинг: 0 / 0
поддержка нескольких языков - как правильно организовать?
    #32431498
Фотография ytenok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильнее одно меню, заполняемое функцией
Код: plaintext
string translate(string orig)
которая будет проверять например
Код: plaintext
map<string /*original*/ , string /*translation*/ > который хранит один из фаилов

Подробней об этом подходе здесь
Qt
...
Рейтинг: 0 / 0
поддержка нескольких языков - как правильно организовать?
    #32431574
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мы делали так:
для каждого языка генерилась dll-ина с ресурсами. Все строки лежали в одном файле(rc), для удобства редактирования. Все идентификаторы строк в другом(h).
Потом была функция, которая из dll-ины дёргала по идентификатору строчки. Dll-ину она определяла по установкам программы.

Смена языка требовала перезагрузки программы (хотя я бы смог сделать и без).

У нас таким образом, были локализованы все меню, все MessageBox, все базовые строки в диалогах, вобщем всё, что можно было локализовать :)
...
Рейтинг: 0 / 0
поддержка нескольких языков - как правильно организовать?
    #32431667
Фотография ytenok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас в одном роекте это используется: в случае изменений в переводе, надо менять всю прогу, а то, может свалится в неподходящий момент (сообщение типа: ты туда не ходи, снег бошка попадёт .....) :)
...
Рейтинг: 0 / 0
поддержка нескольких языков - как правильно организовать?
    #32431740
oksale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне еще не приходилось сталкиваться с этими делами. Так вот что мне пришло в голову:
А почему не сделать так, например:
в каком-нибудь файле прописан выбранный язык. Программа считывает это значение и загружает, например, английское меню и .h-файл со значениями строк. Если язык меняется - заменяется его значение в файле, выгружается одно меню, загружается другое и то же самое с файлами. Почему так не подходит?
...
Рейтинг: 0 / 0
поддержка нескольких языков - как правильно организовать?
    #32431927
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делается XML с ветками языков.

все контролы берут оттуда текст.
переключения языков на лету, добавление языков без компиляции
...
Рейтинг: 0 / 0
поддержка нескольких языков - как правильно организовать?
    #32433202
Mig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Mig
Гость
Добавь в программу двумерный строковый массив, примерно так:

header-file:

char* Mes[200][3];
///200 - количество строк, 3 - количество языков


cpp-file:

Mes[][] = {
"Cообщение 1", "Message 1","",
"Cообщение 2", "Message 2","",
"Cообщение 3", "Message 3","",
"Cообщение 4", "Message 4","",
}

//3 язык - резервный :))

А меню по-моему лучше переименовывать, вот текст функции, я когда то написал:

for( DWORD i=0; i < pMenu->GetMenuItemCount(); i++ )
{
int id = pMenu->GetMenuItemID( i );

if( id == 0 ) continue;

pMenu->ModifyMenu(i, MF_BYPOSITION | MF_STRING, id, Mes[cnt++] );
if( pMenu->GetSubMenu( i ) )
{
RenameMenu( pMenu->GetSubMenu( i ) );
}
}
...
Рейтинг: 0 / 0
поддержка нескольких языков - как правильно организовать?
    #32433633
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в одной нашей системе все надписи и сообщения можно было настраивать...

очень, знаете ли, удобно...
да еще и многоязычность реализовать крайне просто...

в общем, все строковые ресурсы надо хранить в базе и иметь административный тул по их менеджменту прямо в своем ПО.
...
Рейтинг: 0 / 0
поддержка нескольких языков - как правильно организовать?
    #32434655
oksale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 CEMb:
CEMbСмена языка требовала перезагрузки программы (хотя я бы смог сделать и без).
А можно поделиться соображениями, как без перезагрузки? С библиотеками все понятно, уже сделано. Но пока получается только при загрузке программы менять язык, а чтоб динамически в процессе работы программы - непонятно как :(
...
Рейтинг: 0 / 0
поддержка нескольких языков - как правильно организовать?
    #32434808
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА можно поделиться соображениями, как без перезагрузки?

Просто перезагрузить библиотеки.
Но это при условии, что все локализованные вещи генерятся "на ходу". К примеру, меню собирается по-элементно.

Или. Все вещи, которые собираются/создаются один раз после загрузки библиотеки - собираются/создаются заново.

Я этого не сделал, так как я делал тока часть проекта, а проект был большой. И меня бы туда править хозяева не пустили :)
...
Рейтинг: 0 / 0
поддержка нескольких языков - как правильно организовать?
    #32435287
oksale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 CEMb:
спасибо, все OK
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / поддержка нескольких языков - как правильно организовать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]