Alterator/i18n
Интернационализация
Интернационализация (i18n) - процесс подготовки приложения для работы с разноязычными пользователями. Традиционно приложение пишется на английском языке, а затем готовится словарь для перевода строк на английском языке на родной язык пользователя.
За интернационализацией приложения следует его локализация. Интернационализацию выполняет разработчик модуля, а локализацию - переводчик.
Хорошим тоном считается автоматически создаваемый словарь. Для этого строковые ресурсы в приложении подлежащие переводу оформляются особым образом. Подобное оформление зависит от используемого языка программирования.
Описание интерфейса
Если адрес описания интерфейса /<модуль>/foo/bar, то по умолчанию этому интерфейсу сопоставляется словарь alterator-<модуль> и соответственно имя его специально указывать не надо.
Вы можете явно указать другой словарь с помощью команды po-domain. Кроме того другой словарь можно задавать явно для каждого сообщения.
Пример для qt:
...
(po-domain "основной словарь")
...
(label text (_ "текст"))
(label text (_ "текст" "дополнительный словарь"))
...
Инструкцией po-domain можно задать основной словарь, если он не должно вычисляться автоматически из адреса модуля. Функция _ используется для получения перевода, принимает необязательный второй параметр, указывающий словарь.
Пример для html:
<html po-domain="основной словарь" ... >
...
<span translate="_">текст</span>
<span translate="дополнительный словарь">текст</span>
...
<input name="name" value="будет переведено" translate="_"/>
</html>
Необязательным атрибутом po-domain можно задать основной словарь, если он не должно вычисляться автоматически.
Атрибут translate применяется к span и input типа reset и submit. Наличие атрибута означает, что содержимое данного span или value данного input надо перевести используя указанный словарь, "_" -- означает основной словарь. Для обратной совместимости с предыдущими модулями если у input атрибут translate отсутствует, то value всё-равно переводится и используется словарь по умолчанию.
Бэкенды
Команды, приходящие к бэкенду, содержат информацию о языке используемом для переводов (параметр language). Перевод сообщений в бэкендах устроен по тому же принципу что и в описаниях интерфейсов:
- основной словарь указывается явно или вычисляется как "alterator-<бэкенд>".
- есть функции для переводов, они или используют основной словарь или тот что указан в дополнительном параметре.
Бэкенд на shell
po_domain="название словаря"
...
write_enum_item "aaa" "`_ "для перевода используется основной словарь"`"
write_enum_item "bbb" "`_ "для перевода используется дополнительный словарь" "дополнительный словарь"`"
Переменная po_domain содержит имя основного словаря. Функция _ используется для получения перевода, принимает необязательный второй параметр, указывающий словарь. Предпочтительно использовать обратные кавычки '`' вместо конструкции $() ибо последняя не подхватывается утилитой xgettext.
Бэкенд на perl
$TEXTDOMAIN = "название словаря"
...
write_string_param("aaa", _("text"));
write_string_param("bbb", _("text", "дополнительный словарь"));
Desktop-файлы
Из desktop-файлов для перевода берутся поля Name и Comment...