Re[2]: Проблема локализации проекта.
От: Willi  
Дата: 02.11.01 09:41
Оценка:
Здравствуйте Mishka, Вы писали:

M>Я б применил паттерн "Strategy", на C# это выглядит так.


M>...


M>Теперь, если надо поменять язык — "Russian.dll" меняем на "English.dll" при загрузке assembly. Всё очень просто, не так ли? ;)


Мда, я бы так не сказал.

В свое время мне приходилось заниматься проблемой локализации большого проекта
состоящего из множества DLL (COM серверов и DLL Extension)

Способ был придуман не самый простой (но мы же не ищем легких путей :) и возможно
не самый лучший.

Общая идея такова:
Основной язык (например английский) хранится в ресурсах самого модуля.
Для каждого дополнительного языка создается отдельная DLL (без кода, тольо ресурсы).
При старте программы решаем какой язык нужен и грузим DLL
HMODULE hResMod = ::LoadLibrary("<resource DLL name>"); // можно даже ::LoadLibraryEx но там есть нюансы
if(hResMod) AfxSetResourceHandle(hResMod);

Вот собственно и все.

Советую почитать MSDN
"HOWTO: Create Localized Resource DLLs for MFC Application"

P.S. А вариант с текстовым файлом это конечно, первое что приходит на ум, НО
порой при переводе текст не умещается например на кнопке дилога, значит требуется
изменить размер кнопки, или например текст на картинке иногда тоже нужно перевести,
а в текстовый файл BITMAP не засунешь. Локализация это не только перевод строк,
это еще и корректировка внешнего вида приложения.
\/\/i||i
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.