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

Project Repository Setup to Enable Translation Infrastructure

Примечание

This document was moved from OpenStack Project Creators Guide who want to enable translation infrastructure for their project. Before proceeding, target translation project with corresponding versions (master and stable branches) should be created on Zanata and I18n team will help with this.

Once you have your project repository set up, you might want to enable translations. For this, you first need to mark all strings so that they can be localized, for Python projects use oslo.i18n for this and follow the guidelines.

Обратите внимание, что это только подключает систему переводов. Непосредственно сами переводы выполняются командой i18n, и они занимаются приоретизацией проектов, подлежащих переводу.

Сначала включите систему переводов в вашем проекте. Действия для этого отличаются, и зависят от того, какой у вас проект: Django, Python, или ReactJS.

Примечание

Инфраструктурные скрипты определят ваш проект, как сделанный на Django, если название вашего репозитория заканчивается на -dashboard, -ui, horizon или django_openstack_auth. В других случаях ваш проект будет распознан как проект на Python. Для проектов на ReactJS нужен особый подход.

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

Проекты на Python

Для перевода строк в файлах Python нужно сделать всего несколько изменений в проекте.

Примечание

Ранее setup.cfg требовал наличия секций compile_catalog, update_catalog, и extract_messages`, а так же файла ``babel.cfg. Теперь они не нужны и могут быть удалены.

Обновите ваш файл setup.cfg. Он должен содержать запись packages в секции files:

[files]
packages = ${MODULENAME}

Замените ${MODULENAME} именем вашего основного модуля, например nova или novaclient.Ваш файл настройки i18n, обычно называющийся _i18n.py, должен использовать название вашего модуля как имя домена:

_translators = oslo_i18n.TranslatorFactory(domain='${MODULENAME}')

Проекты на Django

Обновите ваш файл setup.cfg. Он должен содержать запись packages в секции files:

[files]
packages = ${MODULENAME}

Создайте файл babel-django.cfg со следующим содержимым:

[python: **.py]
[django: **/templates/**.html]
[django: **/templates/**.csv]

Создайте файл babel-djangojs.cfg со следующим содержимым:

[javascript: **.js]
[angular: **/static/**.html]

Проекты на ReactJS

Понадобятся три новые зависимости: react-intl, babel-plugin-react-intl, и react-intl-po.

Обновите ваш файл package.json. Он должен содержать ссылки на команды json2pot и po2json.

"scripts": {
    ...
    "json2pot": "rip json2pot ./i18n/extracted-messages/**/*.json -o ./i18n/messages.pot",
    "po2json": "rip po2json -m ./i18n/extracted-messages/**/*.json"
    }

Переведённые PO файлы будут конвертированы в JSON и помещены в каталог ./i18n/locales.

Для включения системы переводов вам так же понадобится обновить инфраструктурные скрипты, и промаркировать ваш репозиторий как ReactJS проект. Детали смотрите в секции Задания и скрипты инфраструктуры переводов.

Добавление поддержки сервера переводов

Создайте запрос на изменение в репозиторий openstack/project-config, включающий в себя следующие изменения:

  1. Настройка проекта на сервере переводов.

    Отредактируйте файл gerrit/projects.yaml и добавьте опцию translate:

    - project: openstack/<projectname>
      description: Latest and greatest cloud stuff.
      options:
        - translate
    
  2. Добавьте задачи в ваши проверочные задачи.

    Отредактируйте файл zuul.d/projects.yaml и добавьте шаблон, который который определит задачи переводов для вашего репозитория:

    - project:
        name: openstack/<projectname>
        templates:
          - translation-jobs-master-stable
    

    Команда переводчиков переводит стабильные ветки только для проектов с GUI, то есть для Horizon и его плагинов.

    Если репозиторий – проект с GUI, то используйте шаблон translation-jobs-master-stable. В иных случаях используйте шаблон translation-jobs-master-only.

При отправке запроса на изменение в openstack/project-config на проверку, используйте тему translation_setup чтобы ваш запрос получил соответствующее внимание:

$ git review -t translation_setup

Когда эти изменения внесены в кодовую базу, строки, отмеченные для перевода, будут отправляться на сервер переводов после каждого внесения изменений в кодовую базу вашего проекта. Так же будет настроена и станет работать периодическая задача, которая ежедневно проверяет наличие переведённых строк, и предлагает их для в ваш проект на рассмотрение, вместе с исходными файлами переводов. Обратите внимание, что ежедневная задача будет предлагать переведённые файлы только в том случае, если переведена большая часть строк.

Проверка импорта переводов

В качестве минимальной проверки, что импортированные файлы переводов корректны, вы можете добавить в вашу цель сборки (pep8 или linters) простой тест msgfmt:

$ bash -c "find ${MODULENAME} -type f -regex '.*\.pot?' -print0| \
         xargs -0 -n 1 --no-run-if-empty msgfmt --check-format -o /dev/null"

Обратите внимание, что инфраструктурные скрипты запускают этот же самый тест, таким образом его добавление в ваш проект опционально.

Более сложные случаи

Скрипты для настройки инфраструктуры переводов работают следующим образом:

  • Инфраструктурные скрипты распознают тип проекта по имени его репозитория. Если имя репозитория заканчивается на -dashboard, -ui, horizon или django_openstack_auth, то они распознаются как проекты Django. Иначе они распознаются как проекты на Python.

  • Если ваш репозиторий декларирует несколько модулей Python в параметре packages в секции [files] в файле setup.cfg, то инфраструктурные скрипты будут запускать задачи для переводов для каждого модуля Python.

Мы настоятельно рекомендуем следовать рекомендациям, данным выше, но в некоторых случаях это поведение не удовлетворяет структуре вашего проекта. Например:

  • Ваш репозиторий содержит код и на и Python, и на Django.

  • Ваш репозиторий содержит несколько Python модулей, но вы хотите запускать задания по переводам только для некоторых модулей.

В таких случаях вы можете внучную определить в setup.cfg, как будет обрабатываться каждый модуль. Модули Django определяются в django_modules, а модули Python – в python_modules. Если записи django_modules or python_modules отсутствуют, то это интерпретируется как отсутствие таковых модулей.

[openstack_translations]
django_modules = module1
python_modules = module2 module3

Вам так же понадобится соответственным образом настроить ваш репозиторий по инструкциям для Python и/или Django проектов, как это описано выше.

Project Documentation Translation

Documents on the project following with OpenStack documentation structure can be translated into multiple languages. List of project repositories for documentation translation is maintained in the DOC_TARGETS variable within common_translation_update.sh translation infrastructure script file.