Что сделал?
1) Во-первых, включил в настройках проекта i18n, поставил чекбокс "обновлять файлы po автоматически при сохранении LFM". Указал папку languages, где будут лежать файлы локализации.
2) Добавил в общий модуль проекта в секции uses модуль DefaultTranslator
2) Во-вторых, вынес все строки, подлежащие переводу в отдельный модуль (это необязательно) в секцию resourcestrings. Теперь в файлах *.po будут автоматически добавляться строки из этой секции.
3) Сохранил все файлы LFM и тем самым самим IDE все тексты из компонентов форм, диалогов, фреймов и т.д. были вынесены также в эти файлы *.po.
4) Сделал соответствующие переводы на русский в файле my_program.ru.po.
Ну, вообщем все прекрасно работает, действительно удобно. В принципе любой пользователь программы может самостоятельно локализовать программу с помощью, к примеру, программы POEdit.
Но, как обычно появились ньюансы. Потребовалось сделать также ручное переключение языка. К примеру, русский пользователь в Германии запускает программу (а посколько немецкой локализации нет, да и удобнее все равно на русском), запускается английский интерфейс (так как он потому что по умолчанию, наверное). Конечно можно при загрузке принудительно загружать нужный язык, к примеру, вот так -lang ru. Но это неудобно пользователям. Поэтому написал такой код.
- Код: Выделить всё
procedure TFrmMain.ActnLngEnExecute(Sender: TObject);
begin
SetDefaultLang('en', LangDirectory);
end;
procedure TFrmMain.ActnLngRuExecute(Sender: TObject);
begin
SetDefaultLang('ru', LangDirectory);
end;
Код работает, но не до конца. Константы описанные в модулях *.pas переводятся. Никакие надписи из интерфейса программы не переводятся. И те и те строки присутствуют в файлах *.po. Что я мог упустить? Почему не переводится строки из LFM файлов?