
[[localization]]
### Локализация программы

Для локализации [.hl]#ZCAD# используется система интернационализации на основе [.hl]#Gettext# и [.filepath]#*.po#
 файлов встроенная в [.hl]#Lazarus#. Локализации подлежат как тексты прописанные в исходниках программы, так и
заданные в файлах загружаемых во время работы программы - например файл [.filepath]#zcad\menu\menuscontent.xml#
содержит наполнение палитр программы, его содержимое неизвестно в момент компиляции программы, он будет прочитан
только при запуске. Обычный подход предполагает разные копии загружаемых в рантайм файлов для каждой локализации.
Но в [.hl]#ZCAD# принят несколько другой подход - перевод содержимого данных файлов в момент их загрузки.

Прежде всего стоит заметить, как описано в (<<distrib_file_structure>>) файлы локализаций используемые программой
лежат в папке [.filepath]#cad/languages#, данная папка создается в процессе (<<building_from_sources>>) в нее
копируются файлы из соответствующих мест [.filepath]#environment#. Поэтому работа с локализацией осуществляется
в [.filepath]#cad/languages#, но для коммита файлы нужно скопировать в папку [.filepath]#environment#.

Тексты прописанные в исходниках программы и оформленные как [.hl]#resourcestring# при компиляции программы
автоматически собираются в файле [.filepath]#zcad.po# и разносятся по файлам локализаций [.filepath]#zcad.XX.po#
где [.hl]#XX# - идентификатор языка. Файлы [.filepath]#zcad.XX.po# можно непосредственно переводить используя
предназначенные для этого программы например [.hl]#Poedit# и подобные. На данный момент [.hl]#ZCAD# имеет только
русскую локализацию [.filepath]#zcad.ru.po#. добавить локализацию можно просто создав соответствующий файл,
например [.filepath]#zcad.de.po# для немецкой.

Также в [.filepath]#cad/languages# лежат файлы перевода пакетов используемых в [.hl]#ZCAD#:

* [.filepath]#anchordockstr.XX.po# перевод пакета докинга окон <<anchordocking>>

* [.filepath]#lclstrconsts.XX.po# перевод LCL

Тексты получаемые из рантайм файлов собираются в файле [.filepath]#rtzcad.po#, переводы находятся в [.filepath]#zcad.XX.po#
также как и описано выше новую локализацию можно получить созданием соответствующего файла. Актуализация
[.filepath]#rtzcad.po# и [.filepath]#zcad.XX.po# не производится автоматически, для этого нужно выполнить
описанные ниже действия.

Запускаем программу с ключом командной строки (<<command_line_switch>>) [.hl]#updatepo#. При этом локализация программы
не будет выполняться, будет работать оригинальный английский интерфейс. Создаем новый чертеж и вводим команду
[.command]#UpdatePO# (<<cmd_updatepo>>) будет показано окно с информацией сколько обнаружено неактуальных строк
и сколько добавлено новых. При нажатии [.hl]#Ok# будет перезаписан файл [.filepath]#rtzcad.po#, неактуальные
строки будут удалены, новые добавлены.

Далее из [.filepath]#rtzcad.po# строки нужно обновить в файлах локализаций [.filepath]#rtzcad.XX.po#, это можно
сделать с помощью команды

[.shell]#C:\lazarus\fpc\3.2.2\bin\i386-win32\make updatelocalizedpofiles LP=C:\lazarus PCP=C:\Users\<ИМЯПОЛЬЗОВАТЕЛЯ>\AppData\Local\lazarus#

Образование путей смотри (<<building_from_sources>>), сценарий [.hl]#updatelocalizedpofiles# выполняет обновление
файлов локализации.

После этого файлы [.filepath]#rtzcad.XX.po# можно переводить в специализированной программе