|
|
|
Поддержка нескольких языков (меню и т.п.): как это сделать?
|
|||
|---|---|---|---|
|
#18+
Собственно, сабж. Интересует наилучший вариант, как всегда. Предыстория: Начал тут писать GUI к одному приложению. Хотелось бы, чтобы пользователь мог сам менять язык интерфейса "на лету", как это сделано в ReGet, например. Соответственно, вариант с перелинковкой новой STRINGTABLE отпал. Вариант с хранением строк в отдельном INI файле тоже не очень... Лучше всего залепить UNICODE строки в ресурсы и потом их вытаскивать. Но проблема в обращении к этим самым строкам - никак не пойму, как получше (мнемоничнее) это сделать. Удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 16:21 |
|
||
|
Поддержка нескольких языков (меню и т.п.): как это сделать?
|
|||
|---|---|---|---|
|
#18+
Для меню можно сделать так : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. А вообще по уму нужно сделать для sublanguages отдельные dll-ки с ресурсами, с одинаковыми ID, и потом просто их переключать : a) sub language m_hDll = AfxLoadLibrary(m_DllName); AfxSetResourceHandle(m_hDll); b) main language AfxSetResourceHandle(AfxGetInstanceHandle()); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 16:45 |
|
||
|
Поддержка нескольких языков (меню и т.п.): как это сделать?
|
|||
|---|---|---|---|
|
#18+
2Tracer Спасибо, конечно. Но меню - это для примера. К тому же, я пишу на C без MFC. Насчет ресурсных DLL - это те же яйца, что и хранением строк в отдельном INI файле... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 16:50 |
|
||
|
Поддержка нескольких языков (меню и т.п.): как это сделать?
|
|||
|---|---|---|---|
|
#18+
Ну в принципе да, только в ресурсных dll хранятся не только строки, но и диалоги и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 17:03 |
|
||
|
Поддержка нескольких языков (меню и т.п.): как это сделать?
|
|||
|---|---|---|---|
|
#18+
Ну в принципе да, только в ресурсных dll хранятся не только строки, но и диалоги и т.д. А зачем мне это? Самая соль в том, что диалоги и все прочее - одно и то же. Меняем только тексты... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 17:23 |
|
||
|
Поддержка нескольких языков (меню и т.п.): как это сделать?
|
|||
|---|---|---|---|
|
#18+
авторА зачем мне это? Самая соль в том, что диалоги и все прочее - одно и то же. Меняем только тексты... Ну ты крут. А в курсе, что одни и теже слова на разных языках имеют разную длину ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 17:26 |
|
||
|
Поддержка нескольких языков (меню и т.п.): как это сделать?
|
|||
|---|---|---|---|
|
#18+
В курсе. Для этого оставляют небольшой запас и сокращают слова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 17:50 |
|
||
|
Поддержка нескольких языков (меню и т.п.): как это сделать?
|
|||
|---|---|---|---|
|
#18+
А в некоторых пишутся справа налево или сверху вниз :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 18:17 |
|
||
|
Поддержка нескольких языков (меню и т.п.): как это сделать?
|
|||
|---|---|---|---|
|
#18+
Для этих, которые справа налево, из принципа не стану делать :) P.S. Так что, нет соображений? Удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 21:43 |
|
||
|
Поддержка нескольких языков (меню и т.п.): как это сделать?
|
|||
|---|---|---|---|
|
#18+
есть не только соображения, но и реализация... есть учетная система, 3-х звенка... предназначена для работы в многоязыковом окружении... все эти многоязыковые подробности заложены в проект изначально, все строковые ресурсы зранятся в базе, ВСЕ контролы на клиенте - дописанные или переписанные базовые, работают таким образом, что запрашивают у фреймфорка свои строковые ресурсы. напр., подписи к полям берутся из метаописания аттрибутов этих полей, согласно установленному языку. поле смены языка все контейнеры шлют "детям" нотификейшены с просьбой обновится, кому надо - тот запрашивает заново строковые ресурсы у фреймворка. сам фреймворк занимается "грамотным" кешированием этих ресурсов, если, скажем, какого-то ресурса (надписи) под данный язык нет, берется та строка, что соответствует языку по-умолчанию, если нет - то из основного (для системы - английский), если нет, то прямо передает идентификатор типа "Inventory.MODEL_ID". редактор ресурсов встроен в само приложение и позволяет отлаживать эти строковые ресурсы не прерывая программы. дополнительная проблема, решенная при использовании многоязыкового фреймворка - автоматический layout! дело в том, что в разных языках строки имеют разную длину (разумеется), вот и пришлось повозиться... найдено простое и мощное решение (убивающее несколько зайцев одновременно) -использование CDhtmlDialog. В качестве background формы лежит HTML (доставаемый из ресурсов DLL), этот HTML может быть, как все понимают, произвольной "красивости", вплоть до прокручивания на нем flash-роликов... помимо оформительской нагрузки HTML содержит невидимые таблицы, дивы и спаны... Каждый элемент управления "привязан" к определенным элементам HTML (при инициализации элемента просто указывается ID HTML-элемента, к которому его надо привязать, остальное мой фреймворк делает сам). Вместо CStatic я использую непосредственно элементы HTML (для captions к полям данных). Учитывая, что все контролы у меня в любом случае наследованы от собственного виртуального базового класса AppGui::Control, и DataLabel - тоже "частично абстрактный" базовый класс, были разработаны еще элементы управления, типа HtmlDataLabel, которые по-сути являются адаптерами к некоторым элементам background-HTML, но с т.з. приложения являются обычными контролами... в общем, вот тебе решение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 22:39 |
|
||
|
Поддержка нескольких языков (меню и т.п.): как это сделать?
|
|||
|---|---|---|---|
|
#18+
Спасибо Удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 23:47 |
|
||
|
Поддержка нескольких языков (меню и т.п.): как это сделать?
|
|||
|---|---|---|---|
|
#18+
jimmers Для этих, которые справа налево, из принципа не стану делать :) Потому что сложно или национальные предрассудки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2003, 12:21 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32360082&tid=2035606]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 404ms |

| 0 / 0 |
