Alterator/translate: различия между версиями
(Новая страница: «Актуально для alterator-4.17-alt3 alterator-fbi-5.26-alt1 25/10/2010 Перевод в alterator-е. Далее краткий обзор того, к...») |
Нет описания правки |
||
Строка 126: | Строка 126: | ||
* в целом, формирование конечного MySuper-module.po файла, осуществляется вызовом make-cкрипта /usr/share/alterator/build/po.mak, который для каждого компонента (ajax,html,backend и т.д.) вызывает соответствующий xgettext-cкрипт из /usr/share/alterator/build/xgettext/ | * в целом, формирование конечного MySuper-module.po файла, осуществляется вызовом make-cкрипта /usr/share/alterator/build/po.mak, который для каждого компонента (ajax,html,backend и т.д.) вызывает соответствующий xgettext-cкрипт из /usr/share/alterator/build/xgettext/ | ||
{{Category navigation|title=Alterator|category=Alterator|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 20:20, 20 июля 2015
Актуально для alterator-4.17-alt3 alterator-fbi-5.26-alt1
25/10/2010
Перевод в alterator-е. Далее краткий обзор того, как организовать перевод для каждого компонента и какими средствами производить отладку.
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html wf="none" po-domain="MySuper-module" > <body> <form method="POST"> <table width="100%"> <tr> <td align="left"> <span translate="_">New Data</span> </td> </tr> <tr> </table> </form> </body> </html>
В html важны 2-момента:
- указание в теге <html> атрибута po-domain="MySuper-module". Часто модуль состоит из нескольких компонентов, /MySuper-module/submodule1 /MySuper-module/submodule2 и так далее. Чтобы перевод относился к одному po- и mo- (man gettext) файлу с именем MySuper-module.{po,mo} и поиск осуществлялся именно в нём, и необходим этот "загадочный" po-domain.
- необходимо текст, который будет переведен, брать в тег , так же как это сделано с New Data в примере выше.
AJAX
В данном примере мы при нажатии на кнопку "Create/Add", отображается всплывающее сообщение об ошибке. Так же как и в случаи с html, мы указываем второй параметр (domain) в виде MySuper-module функции (_).
(define-module (ui mySuper-module ajax) :use-module (alterator woo) :use-module (alterator ajax) :export (init)) (define (ui-datadd) (form-error (_ "This is error text" "MySuper-module")) ) (define (init) (form-bind "datadd" "click" ui-datadd) )
BACKEND
Как и в случаи с html
- po-domain="MySuper-module" в начале shell-cкрипта
- и более интересное с тем как передавать во write_error переведенное сообщение. Вызов subshell в переменной str необходимо делать именно таким образом. По крайней мере на RHEL gettext-0.14.6-4.el5, разобрать конструкцию вида str="$(_ "Epic Faile '%s'")" не может.
#!/bin/sh #turn of auto expansion set -f po-domain="MySuper-module" alterator_api_version=1 . alterator-sh-functions addMyData() { local test="some value" local str="`_ "Epic Faile '%s'"`" do_some_action || write_error "`printf "$str" $test`" } on_message(){ case "$in_action" in new) [ -n "$in_toBackendData" ] && addMyData "$in_toBackendData" ;; esac } message_loop
После того как backend, ajax и html будут подобным образом подготовлены, необходимо в системе, где производится генерация перевода, поставить пакет alterator, положить исходник пакета alterator-l10n, зайти в директорию alterator-l10n и вызвать ./update_module c путем до исходного кода вашего модуля.
как пример
rpm -q alterator alterator-4.17-1.el5 [root@localhost git]# cd alterator-l10n/ [root@localhost alterator-l10n]# ls alterator-l10n alterator-l10n.spec Makefile [root@localhost alterator-l10n]# cd alterator-l10n [root@localhost alterator-l10n]# ls alterator.pot country-po headers join_po Makefile pot update_desktop utils compendium functions help l10n po tzone-po update_module [root@localhost alterator-l10n]# ls ../../MySuper-module MySuper-module MySuper-module.spec Makefile [root@localhost alterator-l10n]# ls ../../MySuper-module/MySuper-module applications backend3 desktop-directories Makefile ui [root@localhost alterator-l10n]# ./update_module ../../MySuper-module/MySuper-module
Результатом этого действа будут файлы pot/MySuper-module.pot po/{ru,es,..}/MySuper-module.po
Файл po/ru/MySuper-module.po правится (обязательно удаляются строки #fuzzy, иначе в конечный mo-файл они не попадут). После чего оба пакета MySuper-module и alterator-l10n собираются и устанавливаются в систему. При входе на соответствующую страницу alterator-а, получаем результат.
Debug Когда что-то идет не так.
- проверить po/ru/MySuper-module.po на наличие fuzzy строк
- убедится что в po/ru/MySuper-module.po имеются строки из backend-а, html-а, ajax-а
- проверить в новь созданном mo-файле (создается в момент сборки rpm-пакета alterator-l10n) MySuper-module.mo наличие оригинальных строк из .po файла. Я это делаю вызовом strings /usr/share/locale/ru/LC_MESSAGES/MySuper-module.mo.
- еще раз проверить наличие po-domain везде, где это должно, вызов (_ "" "") с указанием вторым параметром MySuper-module в .ajax
- если не из backend-а не выбираются строки, то проверить следующей командой
:> temp.po ; LANG=C xgettext --join-existing --add-comments -otemp.po -L Shell --keyword=_ -- backend3/MySuper-module
. Находится надо в директории MySuper-module/MySuper-module, смотри выше содержимое этой директории. - в целом, формирование конечного MySuper-module.po файла, осуществляется вызовом make-cкрипта /usr/share/alterator/build/po.mak, который для каждого компонента (ajax,html,backend и т.д.) вызывает соответствующий xgettext-cкрипт из /usr/share/alterator/build/xgettext/