Alterator/i18n: различия между версиями

Материал из ALT Linux Wiki
Строка 10: Строка 10:


Пример для qt:
Пример для qt:
<pre>...
<source lang="scheme">...
(po-domain "основной словарь")
(po-domain "основной словарь")
...
...
(label text (_ "текст"))
(label text (_ "текст"))
(label text (_ "текст" "дополнительный словарь"))
(label text (_ "текст" "дополнительный словарь"))
...</pre>
...
</source>
Инструкцией <tt>po-domain</tt> можно задать основной словарь, если он не должно вычисляться автоматически из адреса модуля.
Инструкцией <tt>po-domain</tt> можно задать основной словарь, если он не должно вычисляться автоматически из адреса модуля.
Функция <tt>_</tt> используется для получения перевода, принимает необязательный второй параметр, указывающий словарь.
Функция <tt>_</tt> используется для получения перевода, принимает необязательный второй параметр, указывающий словарь.


Пример для html:
Пример для html:
<pre><html po-domain="основной словарь" ... >
<source lang="html4strict">
<html po-domain="основной словарь" ... >
...
...
   <span translate="_">текст</span>
   <span translate="_">текст</span>
Строка 26: Строка 28:
...
...
   <input name="name" value="будет переведено" translate="_"/>
   <input name="name" value="будет переведено" translate="_"/>
</html></pre>
</html>
</source>
Необязательным атрибутом <tt>po-domain</tt> можно задать основной словарь, если он не должно вычисляться автоматически.
Необязательным атрибутом <tt>po-domain</tt> можно задать основной словарь, если он не должно вычисляться автоматически.



Версия от 12:07, 7 ноября 2008


Локализация

В alterator встроена система автоматического перевода текстовых сообщений на язык пользователя. Для того чтобы её задействовать необходимо отметить эти сообщения в описании интерфейса специальным образом и указать название используемого словаря.

Описание интерфейса

Если адрес описания интерфейса /<модуль>/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", "дополнительный словарь"));

Единая база переводов

Для переводов стоит пользоваться единой базой переводов alterator-l10n. Данный пакет содержит переводы для всех модулей альтераторов. Тем самым достигается единый стиль названий (например перевод "Apply" и "Reset"). Чтобы подключить модуль к единой базе необходимо выполнить следующие действия:

  1. свяжитесь с мантейнером пакета alterator-l10n (inger@, slazav@, cas@) и сообщите URL репозитария в git.altlinux.org
  2. дождитесь когда ваш пакет будет включён в alterator-l10n
  3. добавьте пакет alterator-l10n в сборочные зависимости модуля (тег BuildPreReq)

После этого при каждой сборке пакета автоматически будут создаваться и размещаться в результирующем rpm-пакете) переводы для всех поддерживаемых языков. Если в вашем модуле уже были свои варианты переводов (каталог po), то их надо удалить вместе с pot-файлом.