Интеграция с Weblate#

Основы Weblate#

Структура проектов и компонентов#

Переводы в Weblate организованы по проектам и компонентам. Каждый проект может содержать несколько компонентов, а те — переводы на отдельные языки. Компоненту соответствует один переводимый файл (например, GNU gettext или Строковые ресурсы Android). Проекты служат для организации компонентов в логические наборы (например, для группировки всех переводов, используемых в одном приложении).

Внутри каждого проекта переводы общих строк по умолчанию распространяются на другие его компоненты. Это облегчает бремя повторного и много-версионного перевода. Если в вашем проекте перевод в разных компонентов должен отличаться, то такое «распространение» можно отключить в настройках компонента с помощью параметра «Разрешить распространение перевода».

Импорт проекта локализации в Weblate#

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

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

Извлечение обновлённых переводов из Weblate#

Weblate stores updated strings in a database and commits them to a local version control repository. You can add Weblate repository (when Экспортер Git is turned on) as additional remote and fetch translations update from it.

Prior to this, you might want to commit any pending changes (see Отложенные коммиты). You can do so in the user interface (in the Repository maintenance) or from the command-line using Клиент Weblate.

Pushing changes can be automated if you grant Weblate push access to your repository and configure URL для отправки в репозиторий in the Настройки компонента, see Отправка изменений из Weblate.

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

Загрузка удалённых изменений в Weblate#

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

Это действие можно автоматизировать, настроив в вашем репозитории веб-обработчика, которые уведомит Weblate о появлении нового коммита; подробнее смотрите в разделе Обновление репозиториев.

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

Добавление новых строк#

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

Если файлы перевода отделены от кода, то существуют следующие способы добавления новых строк в Weblate:

  • Вручную с помощью Добавить новую строку перевода в меню Инструменты исходного языка.

  • Программно через API: POST /api/translations/(string:project)/(string:component)/(string:language)/units/.

  • Загрузив исходный файл через Заменить существующий файл перевода (это перезапишет существующие строки, так что сначала убедитесь, что в файле есть и старые и новые строки) или Добавить новые строки, смотрите раздел Способы импорта.

Примечание

Будет ли доступно добавление строк через Weblate зависит от параметра «Управление строками».

Обновление файлов целевых языков#

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

Weblate также не будет пытаться каким-либо образом обновлять двуязычные файлы, так что, если вам нужно, чтобы файлы po обновлялись из файлов pot, вам нужно будет делать это самостоятельно через Обновить исходные строки (смотрите раздел Способы импорта) или использовать для этого надстройку Обновлять PO-файлы до соответствия POT (msgmerge).

Introducing new strings#

You can add new strings in Weblate with Управление строками turned on, but it is usually better to introduce new strings together with the code changes that introduced them.

Monolingual formats need addition of the new string to Одноязычный базовый файл. This is typically done by the developers during developing the code. You might want to introduce review of those strings using Контроль качества исходных строк.

Bilingual formats typically extract strings from the source code using some tooling. Follow your localization framework documentation for instructions how to do that. Once the strings are extracted, there might be an additional step needed to update existing translations, see Обновление файлов целевых языков.

Подсказка

You might want to integrate this into your continuous integration pipelines to make new strings automatically appear for translation. Such pipeline should also cover Предотвращение конфликтов слияния.

Управление репозиторием контроля версий#

Weblate хранит все переводы в репозитории контроля версий. Оно может быть связано с предыдущим или быть только внутренним. Раздел Обслуживание репозитория позволяет вам работать с репозиторием.

Подсказка

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

../_images/component-repository.png