![]() |
|
|
![]()
|
|
| iiizxc |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 13.11.2008 Репутация: нет Всего: нет |
Имеется проект, его ресурсник представляет из себя 2 секции - для русской и английской локализации.
Секция английских ресурсов является небольшим фрагментом секции русской (проверяю корректность работы). В свойствах проекта resources->general->culture стоит Russian (0x419). Что получается в собранном приложении: те элементы ресурсов, которые определены в английской секции, берутся оттуда. Остальные - из русской. В ОС локаль поставлена russian/russian. При изменении culture в свойствах проекта на English (United States) (0x409) (да и вообще на что угодно) - результат такой же. Где я натупил, почему результат не соответствует очевидному ожидаемому? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
А вот, из MSDN:
Ничего не написано, как FindResource учитывает язык. Скорее всего, никак. Т.е. находит первый попавшийся. А MFC ищет все ресурсы именно с помощью FindResource. Поэтому: никто не делает в одном модуле разноязычных ресурсов (для поддержки локализации). Ибо сильно геморройно все делать ручками через FindResourceEx, в то время как в MFC реализован сквозной поиск по всем модулям. Но вот язык не учитывается. Видимо, по историческим причинам. Поэтому ресурсы разделяют по разным модулям. И подгружают тот, который соответствует языку. Это один из возможных способов, есть и другие. Тема неоднократно обсуждалась, поройся. -------------------- ... |
|||
|
||||
| Bukmop |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 1.6.2006 Где: Москва Репутация: 2 Всего: 3 |
iiizxc, из своего опыта могу сказать, что приложение выбирает ресурсы, которые соответствуют локалицации установленной ОС в которой оно выполняется.
|
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 1 Всего: 39 |
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| iiizxc |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 13.11.2008 Репутация: нет Всего: нет |
Earnest, вся досада в том, что не я разрабатывал приложение. Оно уже есть, хренова туча кода, где на каждом шагу используются диалоги и строчки из ресурсов через ATL обертку. И вот тут ВНЕЗАПНО оказалось очень нужно сделать поддержку в приложении английского языка. И это уже моя работа. При этом, естественно, архитектуру менять нельзя, и вообще лучшше код как можно меньше изменять.
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Да, это проблема... локализацию хорошо бы закладывать в проект.
Тогда остается путь такой: 1) выделить все ресурсы в отдельную DLL 2) сделать копию и перевести 3) подгружать на старте в зависимости от языка и устанавливать как можуль ресурсов вызовом AfxSetResourceHandle. Тогда все ресурсы сначала будут искаться в этой DLL, а потом уже в остальных. При этом насчет картинок и прочих непереводимых ресурсов можно не парится и оставить где есть; только строки, диалоги, меню. Добавлено через 3 минуты и 59 секунд Вариация, чтобы меньше париться: 1) оставляем все как есть, но для локализованных ресурсов создаем отдельную DLL и КОПИРУЕМ туда диалоги, меню, строки 2) На старте либо загружаем нашу локализованную DLL и вызываем AfxSetResourceHandle? либо нет - в зависимости от языка. -------------------- ... |
|||
|
||||
| iiizxc |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 13.11.2008 Репутация: нет Всего: нет |
Earnest, проблема #2: в ресурсах лежат не только диалоги/строчки, но и много другой чертовщины, которая тоже используется часто. Так, прийдется все это тоже пихать в локализационную DLL.
Да, дизайн проекта - <очень плохой>. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
А что еще, кроме диалогов\меню\строк нуждается в переводе? Впрочем, бывают локале-зависимые картинки, а также ресурсы собственных форматов. Все это соверщенно непринципиально, поскольку подход один. И выполняться может поэтапно (по одноц штуке диалога за раз), т.к. недостающий ресурс будет найден в родном модуле.
"Зато" почти ничего не надо программировать. В кавычках, т.к. работа несложная, но долгая и нудная, полное счастье для программиста -------------------- ... |
|||
|
||||
| iiizxc |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 13.11.2008 Репутация: нет Всего: нет |
ATL по части ресурсов веселая штука. Где-то ресурсы берутся из инстанса _AtlBaseModule.GetResourceInstance(), где-то юзается APIшный LoadResource( UINT ). Прекрасно.
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
у меня както была такая засада.. тока на VB6... открываю формочку в дизайнере - а там тока таймер и посередине ничего не значащий прогресс бар. Смотрю на работу этой же формы - гриды, куча кнопок и activex объектов на С++ писанных, дофига фильтров, куча текстовых данных с БД и системы оповещения осообщениях сыпется...и все "шевелится" в "почти реалтайме"... эта был кошмар. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |