Gettext

Материал из Course Orchestra
Перейти к: навигация, поиск

Gettext - средство для интернационализации и локализации текстовых данных (чаще всего сообщений) web-приложений, фактически для перевода текстовых данных с одного языка на другой. В случае Showcase дефолтным языком считается английский. После набора текстовой информации и применения к ней функций Gettext (gettext, ngettext), данный текст будет либо переведён (если для него есть перевод в файлах перевода (см. ниже)) на другой язык, либо этот текст вставится в приложение как есть, т.е. на английском. Файлы перевода имеют расширение .po, и их отдельные части выглядят следующим образом:

 msgid "English text"
 msgstr "Текст перевода"  

Клиентская часть

Для перевода клиентской части Showcase файлы перевода используются как есть (над ними не надо производить никаких преобразований), единственно что они должны именоваться по следующим правилам:

 platform_lang.po

где lang - язык перевода, и должны быть помещены в папку resources той юзердаты, в которой планируются использоваться. Также в файле app.properties в свойстве internatiolization.language указывается язык, по которому будет определён тот файл перевода, который нужен. Если данного свойтва нет, либо оно равно пустой строке, либо строке en (английский язык), то будет использоваться дефолтный файл перевода, который должен быть положен в папку common.sys\resources (он имеется по этому же адресу в тестовой папке пользовательских данных userdatas, поставляемой вместе с варником)(иначе будет браться файл platform.po, входящий по умолчанию в war-файл и лежащий в папке resources, расположенной на одном уровне с папкой WEB-INF), и в данном случае будет использоваться дефолтный язык (английский) для всех сообщений клиентской части Showcase.

Серверная часть

Для серверной части всё немного усложняется. А именно: файлы с расширением .po, необходимо переконвертировать в файлы классов ResourceBundle, с названием

 loc_lang.class

где lang - язык перевода, и поместить их также в папку resources\loc8n той юзердаты, в которой планируется использоваться перевод. Папку loc8n необходимо создать самостоятельно! Дефолтный файл должен называться loc.class (он нужен только из-за особенностей обработки серверной части), а файл с английским переводом - loc_en.class. Язык также указывается в файле app.properties в свойстве internatiolization.language.

Далее, все строки, которые должны быть переведены (в файлах .py, .xml или в хранимых процедурах), должны помечаться следующим образом:

 $localize(_("text")), либо $localize(gettext("text")), либо $localize(ngettext("text, text_plural, number"))

где text - строка на английском, text_plural - множественное число для строки на английском, number - номер варианта перевода для множественного числа в файле перевода.

Приложение

Для конвертации .po-файлов в .class-файлы используется утилита msgfmt.exe из дистрибутива gettext-tools (она лежит в папке bin дистрибутива). Вид команды в командной строке такой:

 msgfmt --java2 -d C:\temp_dir -r loc_lang path_to_po_file\po_file

Здесь lang - язык перевода (см. выше), temp_dir - временная папка, которая должна быть указана в переменной окружения TMPDIR (в ней будет лежать переконвертированный файл), po_file - исходный .po-файл.