Надстройки

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

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

../_images/addons.png

Встроенные надстройки

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

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

Автоматически переводит строки при помощи машинного перевода или других компонентов.

Эта надстройка срабатывает автоматически при появлении в компоненте новых строк.

CDN локализации JavaScript’а

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

Добавляет CDN локализации для локализации JavaScript’а или HTML’я.

Его можно использовать для локализации статических HTML-страниц или для загрузки локализации в код JavaScript.

После установки надстройка генерирует для вашего компонента уникальный URL-адрес, который вы можете включить в HTML-документы для их локализации. Подробности смотрите в разделе Перевод HTML и JavaScript с помощью сети доставки содержимого Weblate.

Очистка файлов перевода

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

Языковая согласованность

Гарантирует, что все компоненты в рамках одного проекта имеют переводы на все языки проекта.

Она создаёт пустые переводы на языках, в которые компоненты не добавлены.

Отсутствующие языки проверяются каждые 24 часа и при добавлении нового языка в Weblate.

В отличие от большинства других надстроек, эта влияет на весь проект.

Подсказка

Автоматически переводите новые добавленные строки с помощью надстройки Автоматический перевод.

Обнаружение компонента

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

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

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

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

Когда вы нажмёте Сохранить, надстройка предварительно покажет найденные компоненты, так что вы сможете проверить, действительно ли конфигурация соответствует вашим потребностям:

../_images/addon-discovery.png

Массовая правка

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

Позволяет массово править флаги, метки или состояния для строк.

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

Пометка неизменённых переводов флагом «На правку»

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

При импорте строки для перевода из системы контроля версий и при её совпадении с исходной строкой она помечается в Weblate флагом «На правку». Особенно это полезно для тех форматов файлов, которые включают в себя все строки, даже если те не переведены.

Пометка новых исходных строк флагом «На правку»

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

Пометка новых переводов флагом «На правку»

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

Генератор статистики

Генерирует файл, содержащий детальную информацию о переводе.

Для имени файла и его содержимого вы можете использовать шаблоны Django, подробное описание разметки шаблона смотрите в разделе Шаблонная разметка.

К примеру, сгенерировать файл со сводкой по каждому переводу можно со следующими настройками:

Имя сгенерированного файла

locale/{{ language_code }}.json

Содержимое
{
   "language": "{{ language_code }}",
   "strings": "{{ stats.all }}",
   "translated": "{{ stats.translated }}",
   "last_changed": "{{ stats.last_changed }}",
   "last_author": "{{ stats.last_author }}",
}

Участники в комментарии

Обновляет комментарий в заголовке PO-файла, включая в него имена участников и годы их участия.

Заголовок PO-файла будет содержать список участников и годы их участия:

# Michal Čihař <michal@cihar.com>, 2012, 2018, 2019, 2020.
# Pavel Borecki <pavel@example.com>, 2018, 2019.
# Filip Hron <filip@example.com>, 2018, 2019.
# anonymous <noreply@weblate.org>, 2019.

Обновление переменной ALL_LINGUAS в файле «configure»

Обновляет переменную ALL_LINGUAS в файлах configure, configure.in и configure.ac при добавлении нового перевода.

Настройка вывода gettext

Позволяет настроить поведение вывода gettext, например, заворот строк.

Она предлагает следующие варианты:

  • Переносить строки на 77-м символе и у символов перевода строки

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

  • Не переносить строки

Примечание

По умолчанию gettext переносит строки на 77-м символе и у символов перевода строки. С параметром --no-wrap он переносит их только у символов перевода строки.

Обновление файла LINGUAS

Обновляет файл LINGUAS при добавлении нового перевода.

Генерирование MO-файлов

Автоматически генерирует MO-файл для каждого изменённого PO-файла.

Обновлять PO-файлы до соответствия POT (msgmerge)

Updates all PO files to match the POT file using msgmerge. Triggered whenever new changes are pulled from the upstream repository and updates all translation files to match Шаблон для новых переводов. You can configure most of the msgmerge command line options through the addon configuration.

Склеивание Git-коммитов

Склеивает Git-коммиты до отправки изменений.

Вы можете выбрать один из следующих режимов:

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

  • Все коммиты в один

  • По языку

  • По файлу

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

  • По автору

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

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

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

Дополнительно из исходных сообщений коммитов могут быть удалены завершители (строки коммита вида Co-authored-by: ...) с последующим их присоединением к концу сообщения склеенного коммита. Также в этом режиме для каждого переводчика генерируется соответствующий завершитель Co-authored-by:.

Настройка вывода в JSON

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

Форматирование файла свойств Java

Сортирует файл свойств Java.

Удаление устаревших комментариев

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

Устанавливает сроки удаления комментариев.

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

Удаление устаревших предложений

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

Устанавливает сроки удаления предложений.

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

Обновление файлов RESX

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

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

Подсказка

Если вы хотите только удалить устаревшие ключи перевода, используйте надстройку Очистка файлов перевода.

Настройка вывода в YAML

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

Позволяет подправить поведение вывода в YAML, например, длину строк и символы перевода строк.

Настройка списка надстроек

Список надстроек настраивается параметром WEBLATE_ADDONS. Для добавления ещё одной надстройки просто включите в этот параметр полное имя класса.

Написание надстройки

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

Вот пример надстройки:

#
# Copyright © 2012 - 2020 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#


from django.utils.translation import gettext_lazy as _

from weblate.addons.base import BaseAddon
from weblate.addons.events import EVENT_PRE_COMMIT


class ExampleAddon(BaseAddon):
    # Filter for compatible components, every key is
    # matched against property of component
    compat = {"file_format": {"po", "po-mono"}}
    # List of events addon should receive
    events = (EVENT_PRE_COMMIT,)
    # Addon unique identifier
    name = "weblate.example.example"
    # Verbose name shown in the user interface
    verbose = _("Example addon")
    # Detailed addon description
    description = _("This addon does nothing it is just an example.")

    # Callback to implement custom behavior
    def pre_commit(self, translation, author):
        return

Выполнение скриптов из надстройки

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

#
# Copyright © 2012 - 2020 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#
"""Example pre commit script."""


from django.utils.translation import gettext_lazy as _

from weblate.addons.events import EVENT_PRE_COMMIT
from weblate.addons.scripts import BaseScriptAddon


class ExamplePreAddon(BaseScriptAddon):
    # Event used to trigger the script
    events = (EVENT_PRE_COMMIT,)
    # Name of the addon, has to be unique
    name = "weblate.example.pre"
    # Verbose name and long descrption
    verbose = _("Execute script before commit")
    description = _("This addon executes a script.")

    # Script to execute
    script = "/bin/true"
    # File to add in commit (for pre commit event)
    # does not have to be set
    add_file = "po/{{ language_code }}.po"

Инструкции по установке смотрите в разделе Пользовательские проверки качества, надстройки и автоматические исправления.

Скрипт выполняется с текущим каталогом, установленном в корневой каталог репозитория системы контроля версий заданного компонента.

Кроме того, в скрипте доступны следующие переменные окружения:

WL_VCS

Используемая система контроля версий.

WL_REPO

URL-адрес вышестоящего репозитория.

WL_PATH

Абсолютный путь к репозиторию системы контроля версий.

WL_BRANCH

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

Ветка репозитория, настроенная для текущего компонента.

WL_FILEMASK

Маска файлов для текущего компонента.

WL_TEMPLATE

Имя файла шаблона для одноязычных переводов (может быть пустым).

WL_NEW_BASE

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

Имя файла, используемого для создания новых переводов (может быть пустым).

WL_FILE_FORMAT

Формат файла, используемый в текущем компоненте.

WL_LANGUAGE

Язык обрабатываемого в настоящее время перевода (недоступен для обработчиков уровня компонента).

WL_PREVIOUS_HEAD

Предыдущий HEAD при обновлении (доступна только при запуске обработчика «после обновления»).

WL_COMPONENT_SLUG

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

Плашка компонента, используемая для построения URL-адреса.

WL_PROJECT_SLUG

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

Плашка проекта, используемая для построения URL-адреса.

WL_COMPONENT_NAME

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

Название компонента.

WL_PROJECT_NAME

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

Название проекта.

WL_COMPONENT_URL

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

URL-адрес компонента.

WL_ENGAGE_URL

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

URL-адрес для присоединения к переводу проекта.

Обработка репозитория после обновления

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

Например, при использовании Gulp это можно сделать следующим кодом:

#! /bin/sh
gulp --gulpfile gulp-i18n-extract.js
git commit -m 'Update source strings' src/languages/en.lang.json

Обработка переводов до коммита

Используйте скрипт коммита для автоматического внесения изменений в перевод до их коммита в репозиторий.

Перевод передается в виде единственного параметра, содержащего имя файла текущего перевода.