Лекс Айрин писал(а):А у меня не требовало... что я делаю не так?
Приведите код обновления всех названий и все увидят, что именно Вы делаете не так.
И кстати, возможно это поможет Ichthyander, решить его задачу.
Ichthyander - спасибо, про i18/
.
Модератор: Модераторы
Лекс Айрин писал(а):А у меня не требовало... что я делаю не так?
vitaly_l писал(а):Я делал через SessionProperties и сохранял всё в ini
heX писал(а):Жуть какая! Не делайте так больше, пользуйтесь l18i
Лекс Айрин писал(а):heX писал(а):ЗЫ: потом, правда, я вообще выпилил многоязычную поддержку. Но все работало на лету.
heX писал(а):В процессе тестирования на отдельной программе выяснилось следующее:
Модуль DefaultTranslator нужен только чтобы при старте программы автоматически произвести ее перевод.
Этот модуль просто вызывает функцию SetDefaultLang и больше ничего не делает и ни на что не влияет.
Если вы хотите больше контроля над локализацией то подключайте модуль LCLTranslator и вызывается функцию SetDefaultLang сами.
При вызове с соответствующим параметром она переводит всю программу на требуемый язык без перезапуска ("на лету").
В процессе тестирования выяснилось:
TAction работает совершенно корректно - если вы назначаете кнопкам Action то их изначальный текст удаляется из файла перевода.
И остается только один экземпляр текста - от TAction.
Вызов функции SetDefaultLang переводит все компоненты (включая TAction).
Выделять строки в resourcestring не нужно, в этом нет никакого смысла - локализация TAcionList выполняет этот функционал лучше, удобнее, проще и автоматически. (Почему так делают в examples? - видимо examples устарели и в те времена таким подходом решали какойто баг)
Но! Если TAcionList лежит в TDataModule, то для корректного перевода нужно вызывать SetDefaultLang уже после создания всех форм, но до их появления на экране (иначе все TAction не будут переведены).
При повторном запуске SetDefaultLang (уже после создания) перевод применяется на все кроме TAcionList который лежит в TDataModule (и компонент связанных с ним).
Также сложилось впечатление что сам LazarusIDE немного неправильно обрабатывает TAcionList который лежит в TDataModule и из-за этого в '*.po' файлах происходит дублирование.
Итог - TAcionList нужно просто хранить в TForm.
vitaly_l писал(а):Лекс Айрин писал(а):А у меня не требовало... что я делаю не так?
Приведите код обновления всех названий и все увидят, что именно Вы делаете не так.
И кстати, возможно это поможет Ichthyander, решить его задачу.
Ichthyander - спасибо, про i18/.
Ichthyander писал(а):он использует свой велосипед,
Лекс Айрин писал(а):Ichthyander писал(а):он использует свой велосипед,
Имхо, лучше велосипед, чем штатный костыль.
Ichthyander писал(а):это возможность, которая упрощает жизнь программисту, почему не использовать!?
Ichthyander писал(а):Вопрос: все текстовые свойства (caption, hint и т.д.) компонентов (кнопки, диалоги, label и прочее) также переводятся на лету?
heX писал(а):Жуть какая! Не делайте так больше, пользуйтесь l18i; для корректного перевода нужно вызывать SetDefaultLang уже после создания всех форм
Лекс Айрин писал(а):перевод хоть через яндекс-переводчик в автоматическом режиме
vitaly_l писал(а):Вот бы ещё кто, нить модуль такой для Lazarus сделал (модификацию i18n).
Сейчас этот форум просматривают: Yandex [Bot] и гости: 7