Создание апплета GNOME


Многоязычное окружение - часть 2


Теперь нужно извлечь строки, которые нужно перевести. И здесь есть некоторая неопределенность. В том смысле, что нет только одного способа выполнить эту операцию. Можно использовать "канонические" инструменты GNU gettext, можно использовать инструменты Python. Я приведу пример использования Python-инструментов - не только в силу специфики блога, но и по причине лучшей переносимости. Итак, делаем:

pythy@axcel:~/blog/gnome-applet/gnomeapplet_03$ pygettext -v -o po/proxyswitcher.pot proxyswitcher.py Working on proxyswitcher.py

pot-файл - это шаблон, так что копируем его в файл перевода po:

pythy@axcel:~/blog/gnome-applet/gnomeapplet_03$ cp po/proxyswitcher.pot po/ru/proxyswitcher.po

Теперь редактируем параметры перевода (в файле перевода есть "рыба") и собственно сам перевод. Далее, "компилируем" в mo-файл. В качестве "компилятора" msgfmt.py (для Debian и Ubuntu он доступен в пакете python2.4-doc):

pythy@axcel:~/blog/gnome-applet/gnomeapplet_03$ msgfmt.py -o po/ru/proxyswitcher.mo po/ru/proxyswitcher.po

"Инструментальный" этап завершен. Теперь появляется резонный вопрос: как использовать данный перевод? И здесь опять неоднозначность: Python по умолчанию ищет переводы в /usr/share/locale, однако есть возможность указать другое место, где искать переводы - передать имя каталога вторым параметром в gettext.install:

import gettext gettext.install('proxyswitcher', os.path.dirname(os.path.abspath(__file__)), unicode=True)

в данном примере переводы ищутся в той же директории, где и располагается программа. Однако стоит предостеречь о том, что в данном каталоге нужно положить файл перевода не просто так, а по соглашению <targetdir>/<lang>/LC_MESSAGES/<domain>.mo, где <targetdir> - каталог, где ищутся переводы (текущий каталог), <lang> - двухбуквенный код языка (ru), <domain> - домен перевода (proxyswitcher). И вот по вот этому соглашению, кладем файл proxyswitcher.mo в каталог ru/LC_MESSAGES/proxyswitcher.mo.Еще один момент, на который стоит обратить внимание - все строки unicode, и в gettext.install тоже указываем опцию unicode, иначе строка будет подставлена "как есть", без перекодировки (т.е. если я создавал файл перевода в коировке UTF-8, а пользователь запустит программу в KOI8-R окружении, то подставлены будут переведенные строки в UTF-8).




- Начало -  - Назад -  - Вперед -