powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Поддержка нескольких языков (меню и т.п.): как это сделать?
13 сообщений из 13, страница 1 из 1
Поддержка нескольких языков (меню и т.п.): как это сделать?
    #32359937
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, сабж. Интересует наилучший вариант, как всегда.

Предыстория:

Начал тут писать GUI к одному приложению. Хотелось бы, чтобы пользователь мог сам менять язык интерфейса "на лету", как это сделано в ReGet, например.
Соответственно, вариант с перелинковкой новой STRINGTABLE отпал. Вариант с хранением строк в отдельном INI файле тоже не очень... Лучше всего залепить UNICODE строки в ресурсы и потом их вытаскивать. Но проблема в обращении к этим самым строкам - никак не пойму, как получше (мнемоничнее) это сделать.

Удачи
...
Рейтинг: 0 / 0
Поддержка нескольких языков (меню и т.п.): как это сделать?
    #32359981
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для меню можно сделать так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CMenu Menu;
Menu.LoadMenu(idMenu);
CMenu* pMenu=pWnd->GetMenu();
if(pWnd->SetMenu(&Menu))
{
   Menu.Detach();
   if(pMenu && (pWnd->m_hMenuDefault != pMenu->m_hMenu))
  {
      pMenu->DestroyMenu();
  }
}


А вообще по уму нужно сделать для sublanguages отдельные dll-ки с ресурсами, с одинаковыми ID, и потом просто их переключать :

a) sub language
m_hDll = AfxLoadLibrary(m_DllName);
AfxSetResourceHandle(m_hDll);

b) main language
AfxSetResourceHandle(AfxGetInstanceHandle());
...
Рейтинг: 0 / 0
Поддержка нескольких языков (меню и т.п.): как это сделать?
    #32359990
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Tracer

Спасибо, конечно. Но меню - это для примера. К тому же, я пишу на C без MFC.
Насчет ресурсных DLL - это те же яйца, что и хранением строк в отдельном INI файле...
...
Рейтинг: 0 / 0
Поддержка нескольких языков (меню и т.п.): как это сделать?
    #32360007
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну в принципе да, только в ресурсных dll хранятся не только строки, но и диалоги и т.д.
...
Рейтинг: 0 / 0
Поддержка нескольких языков (меню и т.п.): как это сделать?
    #32360041
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну в принципе да, только в ресурсных dll хранятся не только строки, но и диалоги и т.д.

А зачем мне это? Самая соль в том, что диалоги и все прочее - одно и то же. Меняем только тексты...
...
Рейтинг: 0 / 0
Поддержка нескольких языков (меню и т.п.): как это сделать?
    #32360048
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА зачем мне это? Самая соль в том, что диалоги и все прочее - одно и то же. Меняем только тексты...
Ну ты крут.
А в курсе, что одни и теже слова на разных языках имеют разную длину ?
...
Рейтинг: 0 / 0
Поддержка нескольких языков (меню и т.п.): как это сделать?
    #32360082
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В курсе. Для этого оставляют небольшой запас и сокращают слова.
...
Рейтинг: 0 / 0
Поддержка нескольких языков (меню и т.п.): как это сделать?
    #32360120
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в некоторых пишутся справа налево или сверху вниз :)
...
Рейтинг: 0 / 0
Поддержка нескольких языков (меню и т.п.): как это сделать?
    #32360220
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для этих, которые справа налево, из принципа не стану делать :)

P.S. Так что, нет соображений?

Удачи
...
Рейтинг: 0 / 0
Поддержка нескольких языков (меню и т.п.): как это сделать?
    #32360232
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть не только соображения, но и реализация...

есть учетная система, 3-х звенка...
предназначена для работы в многоязыковом окружении...
все эти многоязыковые подробности заложены в проект изначально, все строковые ресурсы зранятся в базе, ВСЕ контролы на клиенте - дописанные или переписанные базовые, работают таким образом, что запрашивают у фреймфорка свои строковые ресурсы.
напр., подписи к полям берутся из метаописания аттрибутов этих полей, согласно установленному языку.

поле смены языка все контейнеры шлют "детям" нотификейшены с просьбой обновится, кому надо - тот запрашивает заново строковые ресурсы у фреймворка.
сам фреймворк занимается "грамотным" кешированием этих ресурсов, если, скажем, какого-то ресурса (надписи) под данный язык нет, берется та строка, что соответствует языку по-умолчанию, если нет - то из основного (для системы - английский), если нет, то прямо передает идентификатор типа "Inventory.MODEL_ID".

редактор ресурсов встроен в само приложение и позволяет отлаживать эти строковые ресурсы не прерывая программы.

дополнительная проблема, решенная при использовании многоязыкового фреймворка - автоматический layout! дело в том, что в разных языках строки имеют разную длину (разумеется), вот и пришлось повозиться...

найдено простое и мощное решение (убивающее несколько зайцев одновременно) -использование CDhtmlDialog. В качестве background формы лежит HTML (доставаемый из ресурсов DLL), этот HTML может быть, как все понимают, произвольной "красивости", вплоть до прокручивания на нем flash-роликов... помимо оформительской нагрузки HTML содержит невидимые таблицы, дивы и спаны... Каждый элемент управления "привязан" к определенным элементам HTML (при инициализации элемента просто указывается ID HTML-элемента, к которому его надо привязать, остальное мой фреймворк делает сам). Вместо CStatic я использую непосредственно элементы HTML (для captions к полям данных). Учитывая, что все контролы у меня в любом случае наследованы от собственного виртуального базового класса AppGui::Control, и DataLabel - тоже "частично абстрактный" базовый класс, были разработаны еще элементы управления, типа HtmlDataLabel, которые по-сути являются адаптерами к некоторым элементам background-HTML, но с т.з. приложения являются обычными контролами...

в общем, вот тебе решение
...
Рейтинг: 0 / 0
Поддержка нескольких языков (меню и т.п.): как это сделать?
    #32360255
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо

Удачи
...
Рейтинг: 0 / 0
Поддержка нескольких языков (меню и т.п.): как это сделать?
    #32360613
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jimmers
Для этих, которые справа налево, из принципа не стану делать :)
Потому что сложно или национальные предрассудки?
...
Рейтинг: 0 / 0
Поддержка нескольких языков (меню и т.п.): как это сделать?
    #32361346
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Ой Вэй

Потому что они не купят мой софт.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Поддержка нескольких языков (меню и т.п.): как это сделать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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