xgettext нашла в файле одну строку, которую можно перевести. Строка идентифицируется с помощью msgid, чтобы на этапе исполнения можно было найти и получить ее. Переводчик не должен изменять ID сообщения, связывающий его с источником. Должно быть заполнено только пустое поле msgstr.
msgfmt
Полученный переведенный файл должен быть конвертирован в двоичный формат, чтобы можно было пользоваться переводом. Для этой цели предназначена программа msgfmt:
msgfmt helloworld.ро -о helloworld.mo
Полученный двоичный файл называется he!Loworid.mo. Расширения файлов . pc и , mc указывают, что это переносимые объекты (portable objects) и машинные объекты (machine objects), или двоичные файлы.
Затем необходимо обеспечить дерево каталогов для локалей. Для этого следует создать каталог locale или intl, после чего внутри этого каталога создать каталог для каждого языка.
Названия языкам можно дать по кодам стран в стандарте ISO 639 (http:// http://www.oasis-open.org/cover/iso639a.html"> www.oasis-open.org/cover/iso639a.html ). Внутри каждого каталога языка создадим еще один каталог с именем LC_MESSAGES. Сюда мы поместим helloworld ро и nel lowo rid. mo. После этого структура каталога будет выглядеть так:
/myApp/helloworld. php otherscripts.php
locale/en/LC_MESSAGES/helloworld. ро helloworld.mo da/LC_MESSAGES/helloworld.po helloworld.mo
bindtextdomain()
Для того чтобы сценарий мог читать строки, хранящиеся в этих каталогах, надо настроить текстовый домен (textdomain). Это делается с помощью
функции bindtextdomain():
bindtextdomain("helloworld", "./locale");
Благодаря этой функции gettext() знает, что сообщения для домена helloworld хранятся в каталоге . /locale/. В качестве имени текстового домена выступает то же имя, что и у файлов .то, но без суффикса. gettext() знает об особой структуре каталогов и сможет теперь найти локали. Однако, зарегистрировав несколько доменов, надо выбрать один из них, который будет доменом по умолчанию. В нашем примере домен всего один, но и его надо установить как используемый по умолчанию:
textdomain("helloworld");
putenv()
Наконец, мы должны установить переменную окружения LC_ALL, чтобы указать язык по умолчанию. По этому значению gettext () будет выбирать требуемый подкаталог . /locale/, поэтому следует задать язык, который там уже есть. Переменная окружения устанавливается с помощью putenv():
putenv("LC_ALL=da");