[ English | русский | 日本語 | 中文 (简体, 中国) | English (United Kingdom) | Deutsch | Indonesia | 한국어 (대한민국) ]

Инструменты

Эта страница описывает различные операции, связанные с работой I18n.

Командная строка Zanata

OpenStack использует Zanata в качестве платформы для переводов. Если вдруг, не смотря на то, что большинство задач, связанных с платформой переводов, автоматизированы, вам захочется вручную обратиться к платформе переводов, вы можете использовать интерфейс командной строки Zanata.

Конфигурация пользовательской среды

Вам понадобится создать конфигурационный файл $HOME/.config/zanata.ini с пользовательскими настройками. За информацией о том, как создать этолт файл, обратитесь к главе Настройка интерфейса командной строки Zanata CLI.

Конфигурация проекта

Для обращения к платформе переводов, вам понадобится подготовить файл конфигурации проекта zanata.xml и сохранить его в корневой директории нужного вам проекта. Проекты OpenStack не содержат этого файла в своих git репозиториях, так что вам придётся создать его самим.

Ниже приведён пример zanata.xml. В большинстве случаев всё, что вам потребуется поменять - это значения в параметрах project и project-version.

<config xmlns="http://zanata.org/namespace/config/">
  <url>https://translate.openstack.org/</url>
  <project>horizon</project>
  <project-version>master</project-version>
  <project-type>gettext</project-type>
  <src-dir>.</src-dir>
  <trans-dir>.</trans-dir>
  <rules>
    <rule pattern="**/*.pot">{path}/{locale_with_underscore}/LC_MESSAGES/{filename}.po</rule>
  </rules>
  <excludes>.tox/**</excludes>
</config>

Загрузка переводов из Zanata

Чтобы загрузить переводы из Zanata, выполните следующую команду, предварительно перейдя в директорию проекта. Обычно вас будут интересовать только некоторые языки, так что опция --locales должна быть вам полезна. Для информации о других доступных опциях, посмотрите на вывод команды zanata pull --help.

$ zanata-cli pull --locales ja,ko-KR,zh-CN

Работа с проектами документации

Примечание

Это о проекте openstack-manuals. К концу релизного цикла разработки Pike завершился процесс миграции документов. То, что описано здесь, может быть изменено в ближайшем будущем.

Документация OpenStack использует формат RST. Шаги для превода RST документов включают в себя:

  • Разбиение на части: генерируются шаблоны PO из документов в формате RST

  • Загрузка: Материалы для перевода загружаются в Zanata

  • Перевод: в Zanata выполняется перевод, а так же поддерживается память истории переводов и управление словарём

  • Выгрузка: Результаты перевода автоматически выгружаются скриптами.

  • Сборка: Производится сборка HTML из RST документов и результатов перевода.

Sphinx - это программное обеспечение для преобразования исходных файлов из формата RST в различные конечные форматы, включая POT и HTML. Предле чем вы приступите к шагам ниже, вам понадобится установить Sphinx. Почти у всех проектов в репозиториях есть файл test-requirements.txt`, в котором вы можете посмотреть необходимую версию Sphinx’а.

$ pip install Sphinx

Более удобным способом может быть этот:

$ pip install -r test-requirements.txt

Разбиение на части

Мы используем sphinx-build, чтобы преобразовать RST файлы в POT файлы. Ввиду того, что мы хотели бы иметь один POT файл с полным документом, мы используем msgcat, чтобы сливать вместе эти POT’ы после выполнения sphinx-build.

$ sphinx-build -b gettext doc/[docname]/source/ doc/[docname]/source/locale/
$ msgcat doc/[docname]/source/locale/*.pot > doc/[docname]/source/locale/[docname].pot

Загрузка

Мы используем командную строку Zanata, чтобы загружать POT файлы на платформу переводов.

Выгрузка

Мы используем командную строку Zanata, чтобы выгружать переведённые POT файлы из платформы переводов.

Сборка

До того, как мы запустим sphinx-build для сборки HTML файла, нам нужно разбить переводы из одного PO файла в несколько PO файлов. Например:

$ msgmerge -o doc/[docname]/source/locale/zh_CN/LC_MESSAGES/A.po \
    doc/[docname]/source/locale/zh_CN/LC_MESSAGES/[docname].po \
    doc/[docname]/source/locale/A.pot

Затем для каждого PO файла нужно выполнить следующую команду, чтобы сгенерировать MO файл:

$ msgfmt doc/[docname]/source/locale/zh_CN/LC_MESSAGES/A.po \
   -o doc/[docname]/source/locale/zh_CN/LC_MESSAGES/A.mo

И, наконец, мы можем собрать HTML файл, запустив

$ sphinx-build -D "language='zh_CN' doc/[docname]/source/ \
    doc/[docname]/build/html

Работа с проектами на Python

Большинство проектов на Python предпочитают использовать для I18n gettext и babel. Модуль gettext предоставляет сервисы интернационализации (I18N) и локализации (L10N) для ваших модулей Python и приложений. Babel - это коллекция утилит для интернационализации ваших приложений, написанных на Python.

Экстракция

Вы можете выгрузить сообщения из кода в PO шаблоны (POT) с помощью pylabel, где PROJECT это имя проекта, например, nova, а VERSION - это номер версии. Обратите внимание, что вы можете не указывать опции --project и --version, если вы используете их только локально, так как они нужны только в заголовках файлов POT.

$ pybabel extract \
    --add-comments Translators: \
    -k "_C:1c,2" -k "_P:1,2" \
    --project=${PROJECT} --version=${VERSION} \
    -o ${modulename}/locale/${modulename}.pot \
    ${modulename}

Например, в случае с Nova,

$ pybabel extract \
    --add-comments Translators: \
    -k "_C:1c,2" -k "_P:1,2" \
    --project=nova --version=${VERSION} \
    -o nova/locale/nova.pot nova/

Загрузка

Для каждого проекта на Python в OpenStack имеется автоматическая, выполняемая на каждое событие слияния кода задача, которая выгружает все сообщения, генерирует PO шаблоны, и загружает их в Zanata. Смотрите документацию тут.

Выгрузка

Для каждого проекта на Python в OpenStack имеется автоматическая, ежедневно запускаемая задача, которая скачивает переводы в PO файлы в поддиректорию locale в директории исходных кодов каждого проекта. Смотрите документацию тут. Она так же создаёт запрос на ревью в Gerrit. После прохождения ревью, переводы в PO файлах будут слиты с основным кодом.

Использование переводов

Для того, чтобы показать перевод в серверных компонентах проектов на Python, вам необходимо собрать каталог сообщений, а так же настроить сервисы ваших серверов следуя инструкциям, описанным в документации oslo.i18n.

Работа с проектами панелей управления Horizon

For horizon related projects, Django, a framework which horizon is built on, provides integrated translation support.

Примечание

Unlike documentations and python projects, horizon and plugins use zh-hans and zh-hant for Chinese locales instead of zh-cn and zh-tw respectively since Wallaby release. This follows the Django recommendation which happened in Django 1.7. The details are found in the mailing list post.

Экстракция

horizon provides a command to extract the messages in code to PO template (POT). Run the following command in your repository.

$ python manage.py extract_messages -m ${MODULE_NAME}

where MODULE_NAME is a python module name of horizon or its plugin.

For example, in case of manila-ui,

$ python manage.py extract_messages -m manila_ui

The above command is a wrapper for pybabel and the translation job uses pybabel directly.

Загрузка

For each horizon related project in OpenStack, there is an automation job to extract the messages , generate PO template and upload to Zanata, which is triggered by the «commit» event. See here.

Выгрузка

For each horizon related project in OpenStack, there is an automation job daily to download the translations in PO file to the «locale» folder under the source folder of each project. See here. It will generate a review request in Gerrit. After review, the translation in PO file will be merged.

Примечание

As noted above, in Wallaby or later releases, zh-hans and zh-hant are used for Chinese locales. On the other hand, zh-cn and zh-tw continues to be used in Zanata. When the job downloads translations from Zanata, the job stores translations for zh-cn and zh-tw to zh-hans and zh-hant directories under locale.

Использование переводов

To display translated messages in OpenStack dashboard, you need to compile message catalogs. Django picks up translated messages automatically once they are compiled. The following command compiles messages in your project.

$ python manage.py compilemessages

Поддержка проекта

Примечание

Скрипты ниже зависят от нескольких модулей Python. Для установки их зависимостей запустите pip install -e requirements.txt.

Более удобным способом будет использование tox, например, так: tox -e venv -- python <script-name>.

Утилита tox**доступна на PyPI, а так же доступна в различных дистрибутивах Linux. Команда ``pip install tox``, или ``apt-get install python-tox`` (в случае с Ubuntu) установит **tox.

Синхронизация списков переводчиков с Zanata

Проект I18n поддерживает список языковых команд и их членов. Этот список используется Stackalytics для сбора статистики переводов (см. детали в Stackalytics). Он же так же используется скриптами ниже.

Название файла со списком - tools/translation_team.yaml.

Этот список - кеш информации из Zanata, и нам нужно поддерживать его синхронизированным с Zanata.

Чтобы синхронизировать список переводчиков. запустите следующую команду:

tox -e zanata-users-sync

Вышенаписанное внутри себя выполняет следующее:

python tools/zanata/zanata_users.py --output-file tools/zanata/translation_team.yaml

Получение статистики по переводам

AC status in I18n project is determined based on translation statistics in a specific period.

Скрипт tools/zanata/zanata_stats.py помогает собрать статистику переводов из Zanata.

Чтобы запустить скрипт:

tox -e venv -- python ./tools/zanata/zanata_stats.py <options>

Опция --help показывает детальную справку.

Выгрузка информации о пользователях Zanata

At the moment, the I18n SIG Chair needs to maintain the AC list of the I18n project manually around the end of each release cycle. This requires name and e-mail address of individual translators.

С этим помогает скрипт tools/zanata/zanata_userinfo.py. Обращаясь к Zanata API он генерирует CSV файл с именами пользователей и e-mail адресами, читая YAML файл, содержащий список переводчиков (т.е. translation_team.yaml).

Примечание

Для запуска этого скрипта требуются администраторские привилегии в Zanata.