Локализация в 0.9.30
Модератор: Модераторы
-
yantux
- постоялец
- Сообщения: 133
- Зарегистрирован: 29.10.2007 15:02:33
- Откуда: Санкт-Петербург
- Контактная информация:
Локализация в 0.9.30
В результате чтения документаций я добился следующих результатов локализации, при условии, что po файл внешний:
1. установка в свойствах проекта po файла, который кстати получается единственный на вест проект со множеством форм
2. копирование po файлов аля unit1.po -> unit1.ru.po
3. внутри unit1.ru.po заполнение msgstr на русском
4. в uses добавить модуль DefaultTranslator
И локализация работает, но со следующими ограничениями:
1. у пользователя нет возможности выбрать локализацию-автоматически выставляется язык системы
2. вместе с исполняемым файлом должны идти unit1.ru.po файл, который содержит локализацию
Таким образом возникает вопрос: можно ли добавить po файлы в состав исполняемого? Документация говорит "да", но мои попытки ни к чему не привели, более того. Я не осознаю, как линковщик догадается добавить po файлы в тисполняемый?
Так же по доке я не понял, что же нужно менять, чтобы пользователь в программе мог выбирать локализацию?
1. установка в свойствах проекта po файла, который кстати получается единственный на вест проект со множеством форм
2. копирование po файлов аля unit1.po -> unit1.ru.po
3. внутри unit1.ru.po заполнение msgstr на русском
4. в uses добавить модуль DefaultTranslator
И локализация работает, но со следующими ограничениями:
1. у пользователя нет возможности выбрать локализацию-автоматически выставляется язык системы
2. вместе с исполняемым файлом должны идти unit1.ru.po файл, который содержит локализацию
Таким образом возникает вопрос: можно ли добавить po файлы в состав исполняемого? Документация говорит "да", но мои попытки ни к чему не привели, более того. Я не осознаю, как линковщик догадается добавить po файлы в тисполняемый?
Так же по доке я не понял, что же нужно менять, чтобы пользователь в программе мог выбирать локализацию?
Re: Локализация в 0.9.30
>Так же по доке я не понял, что же нужно менять, чтобы пользователь в программе мог выбирать локализацию?
сменить локаль же!
например на системах с GNU libc, перед вызовом приложения набрать LC_ALL=ru_RU.UTF-8 <приложение>, либо другую локаль, например LC_ALL=en_US.UTF-8. также пользователь может и экспортировать эту переменную глобально, чтобы все приложения использующие GNU gettext работали в выбранной локали.
Так же можно в программе сделать выбор локали, и реализовать простой диалог типа: "select GUI language:" <листбокс тут>. по выбору языка сделать установку локали в программе с помощью setLocale и т.д.. Главное помнить что локаль влияет не только на язык но и на разделители разрядов, сортировку и ещё некоторые тонкости.
сменить локаль же!
например на системах с GNU libc, перед вызовом приложения набрать LC_ALL=ru_RU.UTF-8 <приложение>, либо другую локаль, например LC_ALL=en_US.UTF-8. также пользователь может и экспортировать эту переменную глобально, чтобы все приложения использующие GNU gettext работали в выбранной локали.
Так же можно в программе сделать выбор локали, и реализовать простой диалог типа: "select GUI language:" <листбокс тут>. по выбору языка сделать установку локали в программе с помощью setLocale и т.д.. Главное помнить что локаль влияет не только на язык но и на разделители разрядов, сортировку и ещё некоторые тонкости.
Re: Локализация в 0.9.30
1. установка в свойствах проекта po файла, который кстати получается единственный на вест проект со множеством форм
Разве? лцлные PO файлы всеравно будут отдельно от PO проекта
-
yantux
- постоялец
- Сообщения: 133
- Зарегистрирован: 29.10.2007 15:02:33
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Локализация в 0.9.30
zub писал(а):Разве? лцлные PO файлы всеравно будут отдельно от PO проекта
У меня получается один po файл на все формы в для одного проекта.
Re: Локализация в 0.9.30
У меня получается один po файл на все формы в для одного проекта.
Диалоги и формы идущие в комплекте лазаря, а не описаные в Вашем проекте при этом русифицированы? у меня так не получилось, с проектом таскается lclstrconsts.ru.po и нектоторые другие PO файлики из лазерного дистрибутива. Хотя сейчас и не жалею - мух и суп нужно хранить в разных холодильниках.
-
yantux
- постоялец
- Сообщения: 133
- Зарегистрирован: 29.10.2007 15:02:33
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Локализация в 0.9.30
Kitayets писал(а):>Так же по доке я не понял, что же нужно менять, чтобы пользователь в программе мог выбирать локализацию?
сменить локаль же!
например на системах с GNU libc, перед вызовом приложения набрать LC_ALL=ru_RU.UTF-8 <приложение>, либо другую локаль, например LC_ALL=en_US.UTF-8. также пользователь может и экспортировать эту переменную глобально, чтобы все приложения использующие GNU gettext работали в выбранной локали.
Так же можно в программе сделать выбор локали, и реализовать простой диалог типа: "select GUI language:" <листбокс тут>. по выбору языка сделать установку локали в программе с помощью setLocale и т.д.. Главное помнить что локаль влияет не только на язык но и на разделители разрядов, сортировку и ещё некоторые тонкости.
В альтлинуксе lazarus 0.9.31 setlocale есть. А в ms windows 0.9.30 setlocale нет. Т.е. эта функция не кросс платформенная?
Добавлено спустя 15 минут 31 секунду:
zub писал(а):Диалоги и формы идущие в комплекте лазаря, а не описаные в Вашем проекте при этом русифицированы?
Честно говоря не понял. Вот у меня проект, в нём формы и модули. Что значит не описаные в Вашем проекте при этом русифицированы?
zub писал(а):у меня так не получилось, с проектом таскается lclstrconsts.ru.po и нектоторые другие PO файлики из лазерного дистрибутива. Хотя сейчас и не жалею - мух и суп нужно хранить в разных холодильниках.
После того, как выставляю po файлы в свойствах проекта, компилирую проект (предварительно подвигав форму), после этого получается единый на все формы po файл и его перевожу. Других рабочих способов я не нашёл. В результате, po файл необходимо таскать в комплекте с исполняемым файлом. Не удоной, хотя может и ни чего. Обычно же файлы локализации идут в комплекте с исполняемым файлом.
Re: Локализация в 0.9.30
Честно говоря не понял. Вот у меня проект, в нём формы и модули. Что значит не описаные в Вашем проекте при этом русифицированы?
Например кнопки в мбоксе
Код: Выделить всё
Application.messagebox('?','??',MB_YESNO or MB_ICONQUESTION)у вас по русски?
-
yantux
- постоялец
- Сообщения: 133
- Зарегистрирован: 29.10.2007 15:02:33
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Локализация в 0.9.30
zub писал(а):Например кнопки в мбоксеКод: Выделить всё
Application.messagebox('?','??',MB_YESNO or MB_ICONQUESTION)
у вас по русски?
Вообще да, на инглише. Как с этим бороться?
- Alexx2000
- постоялец
- Сообщения: 490
- Зарегистрирован: 25.10.2006 00:22:07
- Откуда: Мытищи
- Контактная информация:
Re: Локализация в 0.9.30
yantux писал(а):Так же по доке я не понял, что же нужно менять, чтобы пользователь в программе мог выбирать локализацию?
Берете модуль PoTranslator описанный тут, ну и при его инициализации передаете ему путь к файлу локализации, который указал пользователь:
Код: Выделить всё
uses
...
LResources;
...
...
initialization
LRSTranslator := TPoTranslator.Create('путь к файлу локализации, выбранному пользователем');
yantux писал(а):Таким образом возникает вопрос: можно ли добавить po файлы в состав исполняемого? Документация говорит "да", но мои попытки ни к чему не привели, более того. Я не осознаю, как линковщик догадается добавить po файлы в тисполняемый?
Там же в вики есть пример. Сначало с помощью утилиты lazres конвертируете .po файлы в .lrs, а потом подключаете их к проекту через директиву include. Плюс еще немного надо будет поправить класс PoTranslator, чтобы он перевод брал из ресурсов, а не из файла. Это очень легко сдалать, на основе примера приведенного в вики (Добавил во вложении простенький пример, того как это сделать).
yantux писал(а):Вообще да, на инглише. Как с этим бороться?
Примерно так
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Re: Локализация в 0.9.30
Вообще да, на инглише. Как с этим бороться?
както так:
Код: Выделить всё
TranslateUnitResourceStrings('lclstrconsts', PODirectory + 'lclstrconsts.%S.po', Lang, FallbackLang);lclstrconsts.ru.po - файл из дистрибутива лазаря, его приходится таскать с собой. Если в проекте используются другие локализованные пакеты\компоненты, то придется таскать и их PO.
