Непрерывная локализация

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

См.также

В разделе «Интеграция с Weblate» на базовом уровне описывается, как интегрировать ваш процесс разработки с Weblate.

Процесс следующий:

  1. Разработчики вносят изменения и отправляют их в репозиторий системы контроля версий.

  2. По необходимости обновляются файлы перевода (это зависит от формата файла, смотрите вопрос Почему Weblate до сих пор показывает старые строки перевода, хотя я уже обновил шаблон?).

  3. Weblate извлекает изменения из репозитория системы контроля версий, смотрите раздел Обновление репозиториев.

  4. Как только Weblate обнаруживает изменения в переводах, он уведомляет об этом переводчиков в соответствии с настройками их подписок.

  5. Переводчики присылают переводы через веб-интерфейс Weblate, или загружают файлы, изменённые ими в автономном режиме.

  6. После завершения работы переводчиков Weblate коммитит изменения в локальный репозиторий (смотрите раздел Отложенные коммиты) и отправляет их обратно, если у него есть на это разрешение (смотрите раздел Отправка изменений из Weblate).

digraph translations { graph [fontname = "sans-serif", fontsize=10]; node [fontname = "sans-serif", fontsize=10, margin=0.1, height=0]; edge [fontname = "sans-serif", fontsize=10]; "Developers" [shape=box, fillcolor="#144d3f", fontcolor=white, style=filled]; "Translators" [shape=box, fillcolor="#144d3f", fontcolor=white, style=filled]; "Developers" -> "VCS repository" [label=" 1. Push "]; "VCS repository" -> "VCS repository" [label=" 2. Updating translations ", style=dotted]; "VCS repository" -> "Weblate" [label=" 3. Pull "]; "Weblate" -> "Translators" [label=" 4. Notification "]; "Translators" -> "Weblate" [label=" 5. Translate "]; "Weblate" -> "VCS repository" [label=" 6. Push "]; }

Обновление репозиториев

Вы должны каким-то образом настроить обновления репозиториев из их источников.

Всякий раз, когда Weblate обновляет репозиторий, будут срабатывать надстройки «после обновления», смотрите раздел Надстройки.

Предотвращение конфликтов слияния

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

Первый подход прост с одноязычными файлами — вы можете добавлять новые строки, не выходя из Weblate’а, и возложить на него любое редактирование файлов. Для двуязычных файлов, как правило, существует некий процесс извлечения сообщений из исходного кода для генерации файлов перевода. В некоторых случаях он может быть разбит на две части — одна, извлекающая, часть генерирует шаблон (например, файл POT gettext’а генерируется с помощью программы xgettext), а дальнейший процесс объединяет его с фактическими переводами (файлы PO gettext’а, обновляемые с помощью программы msgmerge). Второй шаг вы можете выполнить в Weblate’е, и он удостоверится, что до выполнения этой операции все отложенные изменения были зафиксированы.

Второй подход может быть достигнут путём использования REST API Weblate, заставляющего Weblate отправить на все отложенные изменения и заблокировать перевод, пока вы на своей стороне проводите изменения.

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

# Lock Weblate translation
wlc lock
# Push changes from Weblate to upstream repository
wlc push
# Pull changes from upstream repository to your local copy
git pull
# Update translation files, this example is for Django
./manage.py makemessages --keep-pot -a
git commit -m 'Locale updates' -- locale
# Push changes to upstream repository
git push
# Tell Weblate to pull changes (not needed if Weblate follows your repo
# automatically)
wlc pull
# Unlock translations
wlc unlock

Если у вас есть несколько компонентов, совместно использующих один и тот же репозиторий, вам необходимо заблокировать их все по отдельности:

wlc lock foo/bar
wlc lock foo/baz
wlc lock foo/baj

Примечание

В примере используется Клиент Weblate, которому требуется настройка (ключи API) для удаленного управления Weblate. Также вы можете решить задачу с помощью любого HTTP-клиента вместо wlc, к примеру, curl, смотрите раздел REST API Weblate.

См.также

Клиент Weblate

Автоматическое получение изменений из GitHub’а

Weblate поставляется со встроенной поддержкой GitHub’а.

Если вы используете Hosted Weblate, рекомендуемый подход заключается в установке приложения Weblate, таким образом вы получите правильную настройку без необходимости в дополнительной настройке. Также оно может быть использовано для отправки изменений обратно в GitHub.

Для получения уведомлений о каждой отправке в репозиторий GitHub, добавьте в настройки репозитория (Webhooks) веб-обработчик Weblate, как показано на изображении ниже:

../_images/github-settings.png

Для заполнения адреса полезной нагрузки (поля Payload URL), добавьте к URL-адресу вашего Weblate’а суффикс /hooks/github/, например, для сервиса Hosted Weblate, это этот адрес будет таким: https://hosted.weblate.org/hooks/github/.

Остальные поля вы можете оставить с настройками по умолчанию (Weblate умеет обрабатывать оба типа содержимого и потребляет только событие push).

Автоматическое получение изменений из Bitbucket’а

Weblate поддерживает веб-обработчики Bitbucket, добавьте веб-обработчик, который срабатывает при отправке изменений в репозиторий, указав в качестве URL адрес вашей установки Weblate с суффиксом /hooks/bitbucket/ (например, https://hosted.weblate.org/hooks/bitbucket/).

../_images/bitbucket-settings.png

Автоматическое получение изменений из GitLab’а

Weblate поддерживает обработчики GitLab’а, добавьте веб-обработчик проекта с адресом назначения, равным адресу вашей установки Weblate с суффиксом /hooks/gitlab/ (например, https://hosted.weblate.org/hooks/gitlab/).

Автоматическое получение изменений из Pagure

Добавлено в версии 3.3.

Weblate поддерживает обработчики Pagure, добавьте веб-обработчик проекта с адресом назначения, равным адресу вашей установки Weblate с суффиксом /hooks/pagure/ (например, https://hosted.weblate.org/hooks/pagure/). Добавлять этот адрес нужно в поле Activate Web-hooks, расположенное в блоке Project options:

../_images/pagure-webhook.png

Автоматическое получение изменений из Azure Repos

Добавлено в версии 3.8.

Weblate поддерживает веб-обработчики Azure Repos, добавьте веб-обработчик для события Code pushed с адресом назначения, равным адресу вашей установки Weblate с суффиксом /hooks/azure/ (например, https://hosted.weblate.org/hooks/azure/). Добавлять этот адрес нужно в поле Service hooks, расположенное в блоке Project settings.

Автоматическое получение изменений из репозиториев Gitea

Добавлено в версии 3.9.

Weblate поддерживает веб-обработчики Gitea, добавьте веб-обработчик Gitea Webhook для события Push events с адресом назначения, равным адресу вашей установки Weblate с суффиксом /hooks/gitea/ (например, https://hosted.weblate.org/hooks/gitea/). Добавлять этот адрес нужно в поле Webhooks, расположенное в блоке Settings.

Автоматическое получение изменений из репозиториев Gitee

Добавлено в версии 3.9.

Weblate поддерживает веб-обработчики Gitee, добавьте веб-обработчик WebHook для события Push с адресом назначения, равным адресу вашей установки Weblate с суффиксом /hooks/gitee/ (например, https://hosted.weblate.org/hooks/gitee/). Добавлять этот адрес нужно в поле WebHooks, расположенное в блоке Management.

Автоматическое ночное обновление репозиториев

Weblate по ночам автоматически извлекает изменения из удалённых репозиториев для повышения производительности при последующем слиянии изменений. По желанию вы можете превратить его и в ночное слияние, включив параметр AUTO_UPDATE.

Отправка изменений из Weblate

Каждый компонент перевода может иметь настроенный URL-адрес для отправки (смотрите описание параметра URL для отправки в репозиторий), в этом случае Weblate будет способен отсылать изменения в удалённый репозиторий. Также Weblate может быть настроен на автоматическую отсылку изменений при каждом коммите (это поведение по умолчанию, смотрите описание параметра Отправлять при коммите). Если вы не хотите, чтобы изменения отправлялись автоматически, вы можете отправлять их вручную в разделе Обслуживание репозитория или через API командой wlc push.

Параметры отправки отличаются в зависимости от используемой системы контроля версий, подробнее об этом читайте в указанной главе.

Если вы не хотите отправлять изменения из Weblate напрямую, то поддерживается также создание запросов на извлечение для GitHub’а, GitLab’а, Запросы на слияние в Pagure или рецензий Gerrit. Вы можете активировать их, выбрав в конфигурациях компонента в качестве системы контроля версий GitHub, GitLab, Gerrit или Pagure соответственно.

В целом, для Git, GitHub и GitLab доступны следующие варианты:

Желаемая настройка

Система контроля версий

URL для отправки в репозиторий

Ветка для отправки

Без отправки

Git

пусто

пусто

Отправка напрямую

Git

URL-адрес SSH

пусто

Отправка в отдельную ветку

Git

URL-адрес SSH

Имя ветки

Запрос на извлечение в GitHub из форка

Запрос на извлечение в GitHub

пусто

пусто

Запрос на извлечение в GitHub из ветки

Запрос на извлечение в GitHub

URL-адрес SSH 1

Имя ветки

Запрос на слияние в GitLab из форка

Запросы на слияние в GitLab

пусто

пусто

Запрос на слияние в GitLab из ветки

Запросы на слияние в GitLab

URL-адрес SSH 1

Имя ветки

Pagure’вский запрос на слияние из форка

Запросы на слияние в Pagure

пусто

пусто

Pagure ’вский запрос на слияние из ветки

Запросы на слияние в Pagure

URL-адрес SSH 1

Имя ветки

1(1,2,3)

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

Примечание

Также вы можете включить автоматическую отправку изменений после коммитов Weblate’а, это можно сделать установкой параметра Отправлять при коммите.

См.также

Для настройки ключей SSH смотрите раздел Доступ к репозиториям, а для получения информации о том, когда Weblate решает закоммитить изменения — раздел Отложенные коммиты.

Защищённые ветки

Если вы используете Weblate на защищённой ветке, вы можете настроить его на использование запросов на извлечение и выполнение рецензирования переводов (что может быть проблематично для языков, которых вы не знаете). Альтернативный подход заключается в отмене этого ограничения для пользователя Weblate.

Например, на GitHub’е это можно сделать в настройках репозитория:

../_images/github-protected.png

Взаимодействие с другими пользователями

Weblate облегчает взаимодействие с другими пользователями с помощью своего API.

См.также

REST API Weblate

Отложенные коммиты

Поведение Weblate’а заключается в группировке коммитов одного и того же автора в один коммит (если это возможно). Такая группировка значительно сокращает количество коммитов, однако вам может понадобиться явно приказать ему сделать коммиты в случае, если вы хотите синхронизировать репозиторий, например, для выполнения слияния (по умолчанию это действие разрешено для группы Управляющие, смотрите раздел Список привилегий и встроенных ролей).

Изменения в этом режиме коммитятся при выполнении любого из следующих условий:

Подсказка

Коммиты создаются для каждого компонента. Так что в случае, если у вас много компонентов, у вас всё равно будет множество коммитов. В этом случае вы можете использовать надстройку Уплотнение Git-коммитов.

Если вы хотите коммитить изменения чаще и без проверки их возраста, вы можете запланировать для выполнения коммита обычное задание:

CELERY_BEAT_SCHEDULE = {
    # Unconditionally commit all changes every 2 minutes
    "commit": {
        "task": "weblate.trans.tasks.commit_pending",
        # Omitting hours will honor per component settings,
        # otherwise components with no changes older than this
        # won't be committed
        "kwargs": {"hours": 0},
        # How frequently to execute the job in seconds
        "schedule": 120,
    }
}

Обработка репозитория скриптами

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

Поддержание единого перевода в разных компонентах

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

Распространение перевода

При включённой функции ref:component-allow_translation_propagation (которая включена по умолчанию, смотрите раздел Настройки компонента), все новые переводы автоматически копируются во все компоненты с совпадающими строками. Такие переводы должным образом засчитываются текущему пользователю-переводчику во всех компонентах.

Примечание

Распространение перевода требует, чтобы в одноязычных форматах файлов перевода ключи строк совпадали, так что об этом следует помнить при создании ключей перевода.

Проверка согласованности

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

Автоматический перевод

Автоматический перевод одних компонентов на основе переводов в других может быть способом синхронизации переводов между компонентами. Вы можете либо запустить его вручную (смотрите раздел Автоматический перевод), либо заставить его автоматически запускаться при обновлении репозитория с помощью надстройки Автоматический перевод.