[ English | Indonesia | 한국어 (대한민국) | Deutsch | русский | 日本語 ]

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

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

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

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

Примечание

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

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

Проекты на Python

For translation of strings in Python files, only a few changes are needed inside a project.

Примечание

Previously setup.cfg needed sections compile_catalog, update_catalog, and extract_messages and a babel.cfg file. These are not needed anymore and can be removed.

Обновите ваш файл 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
    

    The translation team is translating stable branches only for GUI projects, so for horizon and its plugins.

    If the repository is a GUI project, use the translation-jobs-master-stable template. Otherwise use the translation-jobs-master-only template.

При отправке запроса на изменение в 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 проектов, как это описано выше.