Локализация в 0.9.30

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Локализация в 0.9.30

Сообщение yantux » 30.06.2011 23:42:54

В результате чтения документаций я добился следующих результатов локализации, при условии, что 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 файлы в тисполняемый?

Так же по доке я не понял, что же нужно менять, чтобы пользователь в программе мог выбирать локализацию?
yantux
постоялец
 
Сообщения: 133
Зарегистрирован: 29.10.2007 16:02:33
Откуда: Санкт-Петербург

Re: Локализация в 0.9.30

Сообщение Kitayets » 01.07.2011 16:59:29

>Так же по доке я не понял, что же нужно менять, чтобы пользователь в программе мог выбирать локализацию?

сменить локаль же!

например на системах с GNU libc, перед вызовом приложения набрать LC_ALL=ru_RU.UTF-8 <приложение>, либо другую локаль, например LC_ALL=en_US.UTF-8. также пользователь может и экспортировать эту переменную глобально, чтобы все приложения использующие GNU gettext работали в выбранной локали.

Так же можно в программе сделать выбор локали, и реализовать простой диалог типа: "select GUI language:" <листбокс тут>. по выбору языка сделать установку локали в программе с помощью setLocale и т.д.. Главное помнить что локаль влияет не только на язык но и на разделители разрядов, сортировку и ещё некоторые тонкости.
Kitayets
постоялец
 
Сообщения: 169
Зарегистрирован: 05.05.2010 21:15:24

Re: Локализация в 0.9.30

Сообщение zub » 01.07.2011 21:00:43

1. установка в свойствах проекта po файла, который кстати получается единственный на вест проект со множеством форм

Разве? лцлные PO файлы всеравно будут отдельно от PO проекта
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Локализация в 0.9.30

Сообщение yantux » 02.07.2011 00:10:43

zub писал(а):Разве? лцлные PO файлы всеравно будут отдельно от PO проекта


У меня получается один po файл на все формы в для одного проекта.
yantux
постоялец
 
Сообщения: 133
Зарегистрирован: 29.10.2007 16:02:33
Откуда: Санкт-Петербург

Re: Локализация в 0.9.30

Сообщение zub » 02.07.2011 09:23:16

У меня получается один po файл на все формы в для одного проекта.

Диалоги и формы идущие в комплекте лазаря, а не описаные в Вашем проекте при этом русифицированы? у меня так не получилось, с проектом таскается lclstrconsts.ru.po и нектоторые другие PO файлики из лазерного дистрибутива. Хотя сейчас и не жалею - мух и суп нужно хранить в разных холодильниках.
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Локализация в 0.9.30

Сообщение yantux » 03.07.2011 13:30:33

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 файл необходимо таскать в комплекте с исполняемым файлом. Не удоной, хотя может и ни чего. Обычно же файлы локализации идут в комплекте с исполняемым файлом.
yantux
постоялец
 
Сообщения: 133
Зарегистрирован: 29.10.2007 16:02:33
Откуда: Санкт-Петербург

Re: Локализация в 0.9.30

Сообщение zub » 03.07.2011 20:28:40

Честно говоря не понял. Вот у меня проект, в нём формы и модули. Что значит не описаные в Вашем проекте при этом русифицированы?

Например кнопки в мбоксе
Код: Выделить всё
Application.messagebox('?','??',MB_YESNO or MB_ICONQUESTION)

у вас по русски?
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Локализация в 0.9.30

Сообщение yantux » 04.07.2011 20:25:17

zub писал(а):Например кнопки в мбоксе
Код: Выделить всё
Application.messagebox('?','??',MB_YESNO or MB_ICONQUESTION)

у вас по русски?

Вообще да, на инглише. Как с этим бороться?
yantux
постоялец
 
Сообщения: 133
Зарегистрирован: 29.10.2007 16:02:33
Откуда: Санкт-Петербург

Re: Локализация в 0.9.30

Сообщение Alexx2000 » 04.07.2011 21:52:25

yantux писал(а):Так же по доке я не понял, что же нужно менять, чтобы пользователь в программе мог выбирать локализацию?

Берете модуль PoTranslator описанный тут, ну и при его инициализации передаете ему путь к файлу локализации, который указал пользователь:
Код: Выделить всё
uses
  ...
  LResources;
...
...
initialization
  LRSTranslator := TPoTranslator.Create('путь к файлу локализации, выбранному пользователем');


yantux писал(а):Таким образом возникает вопрос: можно ли добавить po файлы в состав исполняемого? Документация говорит "да", но мои попытки ни к чему не привели, более того. Я не осознаю, как линковщик догадается добавить po файлы в тисполняемый?

Там же в вики есть пример. Сначало с помощью утилиты lazres конвертируете .po файлы в .lrs, а потом подключаете их к проекту через директиву include. Плюс еще немного надо будет поправить класс PoTranslator, чтобы он перевод брал из ресурсов, а не из файла. Это очень легко сдалать, на основе примера приведенного в вики (Добавил во вложении простенький пример, того как это сделать).
yantux писал(а):Вообще да, на инглише. Как с этим бороться?

Примерно так
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 487
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Re: Локализация в 0.9.30

Сообщение zub » 05.07.2011 19:54:56

Вообще да, на инглише. Как с этим бороться?

както так:
Код: Выделить всё
TranslateUnitResourceStrings('lclstrconsts', PODirectory + 'lclstrconsts.%S.po', Lang, FallbackLang);

lclstrconsts.ru.po - файл из дистрибутива лазаря, его приходится таскать с собой. Если в проекте используются другие локализованные пакеты\компоненты, то придется таскать и их PO.
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 83

Рейтинг@Mail.ru