Дополнения

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

Подсказка

Вы также можете настроить надстройки с помощью API, DEFAULT_ADDONS или install_addon.

Дополнения, которые поддерживают ручной запуск, можно запустить из управления надстройками или с помощью API. Результаты записываются в журнал активности дополнений.

../_images/addons.webp

События, запускающие надстройки

Установка надстройки

Срабатывает при установке надстройки.

Обновление компонента

Происходит, когда вносится изменение в компонент. Например:

  • Строки изменяются в репозитории.

  • Строка добавлена.

  • Добавлен новый перевод.

Ежедневно

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

Изменение события

Срабатывает сразу после создания события изменения.

Ручной запуск

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

Репозиторий после добавления

Срабатывает сразу после добавления и фиксации нового перевода.

Репозиторий после коммита

Срабатывает сразу после внесения изменений.

Репозиторий после отправки

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

Репозиторий после удаления

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

Репозиторий после обновления

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

Предварительная коммитация репозитория

Срабатывает непосредственно перед фиксацией изменений.

Репозиторий перед отправкой

Срабатывает непосредственно перед отправкой репозитория в вышестоящий.

Репозиторий перед обновлением

Срабатывает непосредственно перед попыткой обновления репозитория.

Единица перевода после сохранения

Срабатывает сразу после сохранения строки.

Последующая синхронизация блока

Запускается после синхронизации строки с СКВ.

Единица перевода перед созданием

Срабатывает сразу после сохранения вновь созданной строки.

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

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

ID надстройки:

weblate.autotranslate.autotranslate

Конфигурация:

mode

Режим автоматического перевода

Доступные варианты:

suggest

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

translate

Добавить как перевод

fuzzy

Добавить с пометкой «На правку»

q

Запрос

Пожалуйста, имейте ввиду, что перевод всех строк отменит все существующие переводы.

auto_source

Источник автоматических переводов

Доступные варианты:

others

Другие компоненты перевода

mt

Машинный перевод

component

Компонент

Введите плашку компонента для использования в качестве источника, для использования всех компонентов в текущем проекте — оставьте пустым.

engines

Механизмы машинного перевода

Механизмы машинного перевода

threshold

Порог оценки

Запуск:

Установка надстройки, Обновление компонента, Ежедневно, Изменение события

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

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

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

ID надстройки:

weblate.cdn.cdnjs

Конфигурация:

threshold

Порог перевода

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

css_selector

Селектор CSS

Селектор CSS для обнаружения локализуемых элементов.

cookie_name

Имя языковой куки

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

files

Извлечение строк из HTML-файлов

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

Запуск:

Установка надстройки, Ежедневно, Репозиторий после коммита, Репозиторий после удаления, Репозиторий после обновления

Публикует переводы в сеть доставки контента для использования в локализации JavaScript или HTML.

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

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

Примечание

Это дополнение требует дополнительной настройки на сервере Weblate. LOCALIZE_CDN_PATH определяет место записи созданных файлов (в файловой системе), а LOCALIZE_CDN_URL - место их обслуживания (URL). Обслуживание файлов не выполняется Weblate и должна быть настроена извне (обычно с помощью CDN-сервиса).

Это дополнение настраивается на Hosted Weblate и обслуживает файлы через https://weblate-cdn.com/.

CDN файлов перевода

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

ID надстройки:

weblate.cdn.files

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Установка надстройки, Обновление компонента, Репозиторий после коммита, Репозиторий после удаления, Репозиторий после обновления

Публикует файлы переводов в сети доставки контента.

Публикует файлы переводов без преобразования в другой формат. Файлы записываются в CDN-каталог, специфичный для надстройки, и обслуживаются из LOCALIZE_CDN_URL/<UUID надстройки>/. Однофайловые переводы используют код языка и исходное расширение файла, например cs.json или de.po. Многофайловые переводы обслуживаются в подкаталоге кода языка с использованием путей относительно каталога переводов. Одноязычные компоненты включают файл исходного языка, в то время как двуязычные компоненты публикуют только файлы целевого языка. См. CDN локализации для получения рекомендаций по безопасной раздаче.

Удаление пустых строк

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

ID надстройки:

weblate.cleanup.blank

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Установка надстройки, Репозиторий после коммита, Репозиторий после обновления

Удаляет из файлов перевода строки без перевода.

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

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

ID надстройки:

weblate.cleanup.generic

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Установка надстройки, Репозиторий после обновления, Предварительная коммитация репозитория

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

Для форматов, содержащих дополнительный контент помимо строк перевода (таких как Файлы HTML, Файлы ресурсов Windows или Формат OpenDocument), это также синхронизирует файл перевода с базовым файлом.

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

Добавить отсутствующие языки

ID надстройки:

weblate.consistency.languages

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Установка надстройки, Ежедневно, Репозиторий после добавления

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

Примечание

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

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

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

Подсказка

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

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

ID надстройки:

weblate.discovery.discovery

Конфигурация:

match

Регулярное выражение для сопоставления с файлами перевода

Регулярное выражение должно определять именованные группы для компонента и языка.

file_format

Формат файла

Формат файла

name_template

Настроить название компонента

Использовать синтаксис шаблонов Django. Этот шаблон должен включать {{ component }}.

base_file_template

Задать имя базового одноязычного файла

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

new_base_template

Задать базовый файл для нового перевода

Имя файла, используемого для создания новых переводов. Для gettext выберите файл .pot. Этот шаблон должен включать {{ component }}.

intermediate_template

Файл промежуточного языка

Имя файла промежуточного перевода. В большинстве случаев это файл перевода, предоставляемый разработчиками и используемый при создании исходных строк. Этот шаблон должен включать {{ component }}.

language_regex

Языковой фильтр

Регулярное выражение для фильтрации файлов перевода при сканировании по файловой маске.

copy_addons

Клонировать дополнения из основного компонента в новые

remove

Удалить компоненты для несуществующих файлов

Запуск:

Установка надстройки, Репозиторий после обновления

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

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

Требования к обнаружению

Чтобы успешно обнаружить компонент, конфигурация должна выполнить всё следующее:

  • Регулярное выражение должно определять именованные группы component и language.

  • Поля шаблона, используемые для именования или поиска файлов для каждого компонента, должны включать {{ component }}, чтобы обработанное значение фактически изменялось для каждого обнаруженного компонента.

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

Рабочий пример: news_<lang>.md

Это распространённый макет языковых вариантов на основе имени файла:

  • docs/news_en.md

  • docs/news_cs.md

  • docs/guide_en.md

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

Регулярное выражение:

(?:(?P<path>.*/))?(?P<component>.+?)_(?P<language>[A-Za-z]{2,3}(?:[_-][A-Za-z0-9]+)*)\.(?P<extension>[^/.]+)

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

{{ component }}

Обнаруженные маски файлов:
  • docs/news_*.md

  • docs/guide_*.md

В этом примере {{ component }} преобразуется в базовое имя перед суффиксом языка, поэтому docs/news_en.md, docs/news_pt_BR.md и docs/news_pt-BR.md становятся компонентом news.

Вы можете использовать разметку шаблонов Django в имени файла и содержании, например:

{{ component }}

Имя компонента, извлечённое из группы соответствия component

{{ component|title }}

Имя файла компонента с заглавной первой буквой

{{ path }}: {{ component }}

Пользовательская группа совпадений из регулярного выражения

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

../_images/addon-discovery.webp

Примеры обнаружения компонентов

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

По одной папке на каждый язык

Одна папка на язык, содержащая файл перевода для компонентов.

Регулярное выражение:

(?P<language>[^/.]*)/(?P<component>[^/]*)\.po

Соответствующие файлы:
  • cs/application.po

  • cs/website.po

  • de/application.po

  • de/website.po

Получение раскладки локалей текста

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

Регулярное выражение:

locale/(?P<language>[^/.]*)/LC_MESSAGES/(?P<component>[^/]*)\.po

Соответствующие файлы:
  • locale/cs/LC_MESSAGES/application.po

  • locale/cs/LC_MESSAGES/website.po

  • locale/de/LC_MESSAGES/application.po

  • locale/de/LC_MESSAGES/website.po

Сложные имена файлов

В имени файла используются имена компонента и языка.

Регулярное выражение:

src/locale/(?P<component>[^/]*)\.(?P<language>[^/.]*)\.po

Соответствующие файлы:
  • src/locale/application.cs.po

  • src/locale/website.cs.po

  • src/locale/application.de.po

  • src/locale/website.de.po

Повторный языковой код

В пути и имени файла используется язык.

Регулярное выражение:

locale/(?P<language>[^/.]*)/(?P<component>[^/]*)/(?P=language)\.po

Соответствующие файлы:
  • locale/cs/application/cs.po

  • locale/cs/website/cs.po

  • locale/de/application/de.po

  • locale/de/website/de.po

Разделить строки Android

Строки ресурсов Android, разбитые на несколько файлов.

Регулярное выражение:

res/values-(?P<language>[^/.]*)/strings-(?P<component>[^/]*)\.xml

Соответствующие файлы:
  • res/values-cs/strings-about.xml

  • res/values-cs/strings-help.xml

  • res/values-de/strings-about.xml

  • res/values-de/strings-help.xml

Сопоставление нескольких путей

Многомодульный проект Maven со свойствами переводов на Java.

Регулярное выражение:

(?P<originalHierarchy>.+/)(?P<component>[^/]*)/src/main/resources/ApplicationResources_(?P<language>[^/.]*)\.properties

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

{{ originalHierarchy }}: {{ component }}

Соответствующие файлы:
  • parent/module1/submodule/src/main/resources/ApplicationResources_fr.properties

  • parent/module1/submodule/src/main/resources/ApplicationResource_es.properties

  • parent/module2/src/main/resources/ApplicationResource_de.properties

  • parent/module2/src/main/resources/ApplicationResource_ro.properties

Подсказка

Надстройка «Обнаружение компонентов» использует Внутренние URL-адреса Weblate. Это удобный способ совместного использования системы контроля версий разными компонентами. Привязать дополнительные компоненты к основному так, чтобы они использовали его локальный репозиторий, можно, задав в качестве Репозиторий исходного кода адрес вида weblate://проект/основной-компонент (в разделе ОпервцииПараметрыСистема контроля версий) для каждого такого компонента. Это сэкономит не только ваше время на настройку, но и системные ресурсы.

Подсказка

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

Обмен сообщениями в Fedora

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

ID надстройки:

weblate.fedora_messaging.publish

Конфигурация:

amqp_url

URL-адрес брокера AMQP

URL-адрес брокера AMQP для подключения.

topic_prefix

Префикс темы

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

publish_timeout

Тайм-аут публикации

Сколько секунд ожидать подтверждения доставки от брокера.

connection_attempts

Попытки подключения

Сколько раз пытаться подключиться к брокеру.

retry_delay

Задержка повторной попытки

Сколько секунд ждать между попытками подключения.

ca_cert

Набор сертификатов ЦС (PEM)

Вставляйте только блоки сертификатов PEM, каждый начинающийся с «—–BEGIN CERTIFICATE—–» и заканчивающийся на «—–END CERTIFICATE—–«.

client_key

Закрытый ключ клиента (PEM)

Вставьте один незашифрованный блок закрытого ключа PEM. Зашифрованные закрытые ключи не поддерживаются.

client_cert

Сертификат клиента (PEM)

Вставляйте только блок сертификата PEM, начинающийся с «—–BEGIN CERTIFICATE—–»; не вставляйте вывод команды «openssl x509 -text».

event_filter

События изменений для срабатывания

Выберите, какие события изменений должны вызывать эту надстройку. События изменений для срабатывания

events

Выбранные события изменений

Выбранные события изменений

Запуск:

Изменение события

Отправляет уведомления в AMQP-обменник, совместимый с обменом сообщений Fedora.

Fedora Messaging - это основанный на AMQP издатель всех изменений, происходящих в Weblate. С его помощью вы можете подключать дополнительные сервисы к изменениям, происходящим в Weblate.

Тема сообщения

Все сообщения имеют тему weblate.<action>.<project>.<category...>.<component>.<translation>. При настройке topic_prefix добавляется перед этой темой через точку, например org.fedoraproject.weblate.project_backed_up.website. Действие — это текстовое представление действия в нижнем регистре с подчёркиваниями вместо пробелов, например resource_updated; все идентификаторы действий см. в Выбранные события изменений. Остальные части соответствуют сегментам пути объектов Weblate.

Например, событие резервного копирования проекта для проекта website использует weblate.project_backed_up.website. Изменение перевода в проекте website, компоненте frontend и чешском переводе использует weblate.translation_changed.website.frontend.cs. То же изменение в компоненте frontend внутри категорий parent и child использует weblate.translation_changed.website.parent.child.frontend.cs.

Тело сообщения

Тело состоит из следующих полей (при условии, что они доступны для события):

change_id

Коĺкасć моŭ

action

Подробное описание изменения.

timestamp

Временная метка в формате ISO

target

Новое значение изменения (например, новый перевод строки)

old

Коĺкасć пиеракладзиенич радкоŭ

source

Исходная строка.

url

Абсолютный URL-адрес для просмотра связанного объекта.

author

Имя пользователя автора (может отличаться от пользователя, например, при принятии предложений)

user

Имя пользователя, выполняющего действие

project

Плашка проекта

component

Плашка компонента

translation

Код языка перевода

Заголовки сообщения

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

action

Подробное описание изменения.

project

Плашка проекта

component

Плашка компонента

Примеры сообщений

Событие слияния репозитория:

{
  "id": 1,
  "action": "Merged repository",
  "timestamp": "2017-06-15T11:30:47.325000+00:00",
  "url": "http://example.com/projects/test/test/",
  "component": "test"
}

Событие новой исходной строки:

{
  "id": 2,
  "action": "New source string",
  "timestamp": "2017-06-15T11:30:47.372000+00:00",
  "url": "http://example.com/translate/test/test/cs/?checksum=6412684aaf018e8e",
  "component": "test",
  "translation": "cs",
  "source": ["Hello, world!\n"]
}

Событие обновления ресурса:

{
  "id": 6,
  "action": "Resource update",
  "timestamp": "2017-06-15T11:30:47.410000+00:00",
  "url": "http://example.com/projects/test/test/cs/",
  "project": "test",
  "component": "test",
  "translation": "cs"
}
{
  "id": 7,
  "action": "Resource update",
  "timestamp": "2017-06-15T11:30:47.510000+00:00",
  "url": "http://example.com/projects/test/test/de/",
  "project": "test",
  "component": "test",
  "translation": "de"
}
{
  "id": 8,
  "action": "Resource update",
  "timestamp": "2017-06-15T11:30:47.595000+00:00",
  "url": "http://example.com/projects/test/test/it/",
  "project": "test",
  "component": "test",
  "translation": "it"
}

Событие удаления проекта:

{
  "id": 9,
  "action": "Removed project",
  "timestamp": "2019-10-17T15:57:08.559420+00:00",
  "target": "test",
  "user": "testuser"
}

Событие нового участника:

{
  "id": 11,
  "action": "New contributor",
  "timestamp": "2019-10-17T15:57:08.759960+00:00",
  "url": "http://example.com/translate/test/test/cs/?checksum=6412684aaf018e8e",
  "author": "testuser",
  "user": "testuser",
  "project": "test",
  "component": "test",
  "translation": "cs",
  "source": ["Hello, world!\n"]
}

Событие нового перевода:

{
  "id": 12,
  "action": "New translation",
  "timestamp": "2019-10-17T15:57:08.772591+00:00",
  "url": "http://example.com/translate/test/test/cs/?checksum=6412684aaf018e8e",
  "target": ["Ahoj svete!\n"],
  "author": "testuser",
  "user": "testuser",
  "project": "test",
  "component": "test",
  "translation": "cs",
  "source": ["Hello, world!\n"]
}

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

ID надстройки:

weblate.flags.bulk

Конфигурация:

q

Запрос

state

Задаваемое состояние

Доступные варианты:

-1

Не изменять

10

На правку

11

На правку (на перепись)

12

На правку (на проверку)

20

Переведено

30

Одобрено

add_flags

Добавляемые флаги перевода

remove_flags

Удаляемые флаги перевода

add_labels

Добавляемые метки

remove_labels

Удаляемые метки

Запуск:

Установка надстройки, Обновление компонента

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

Примеры:

Автоматическое присвоение метки новым строкам

Поисковый запрос

NOT has:label

Добавляемые метки

recent

Отмечать все строки Файлы метаданных магазина приложений списка изменений доступными только для чтения

Поисковый запрос

language:en AND key:changelogs/

Добавляемые флаги перевода

read-only

Пометка определённых строк как только для чтения

Поисковый запрос

source:r"^\`\`[.a-zA-Z0-9_-]*\`\`$" AND language:en

Добавляемые флаги перевода

read-only

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

ID надстройки:

weblate.flags.same_edit

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Единица перевода перед созданием

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

Подсказка

Вы также можете ужесточить проверку Перевод без изменения, добавив флаг strict-same в Флаги перевода.

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

ID надстройки:

weblate.flags.source_edit

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Единица перевода перед созданием

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

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

ID надстройки:

weblate.flags.target_edit

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Единица перевода перед созданием

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

Пометка обновлённых переводов из репозитория «На перепись»

ID надстройки:

weblate.flags.target_repo_update

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Последующая синхронизация блока

Всякий раз, когда перевод строки изменяется в системе контроля версий (VCS), она помечается в Weblate флагом «На перепись». Это особенно полезно, если файлы перевода часто обновляются вручную или с использованием внешнего сервиса.

Заполните строки, доступные только для чтения, исходным кодом

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

ID надстройки:

weblate.generate.fill_read_only

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Установка надстройки, Обновление компонента, Ежедневно

Заполняет перевод строк, доступных только для чтения, исходной строкой.

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

ID надстройки:

weblate.generate.generate

Конфигурация:

filename

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

template

Содержание сгенерированного файла

Запуск:

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

Создаёт файл с подробными сведениями о состоянии перевода.

И в качестве имени файла и в качестве его содержимого вы можете использовать шаблоны Django; подробное описание разметки шаблона смотрите в разделе «Шаблонная разметка».

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

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

locale/{{ language_code }}.json

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

Предварительно заполнять перевод источником

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

ID надстройки:

weblate.generate.prefill

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Установка надстройки, Обновление компонента, Ежедневно

Заполняет перевод используя исходные строки.

Все непереведённые строки в компоненте будут заполнены исходной строкой и помечены как требующие правки. Используйте это, когда в файлах переводов не может быть пустых строк. .. АВТОГЕНЕРИРОВАННОЕ НАЧАЛО: weblate.generate.pseudolocale .. Этот раздел автоматически генерируется с помощью ./manage.py list_addons. Не редактируйте вручную.

Генератор псевдолокалей

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

ID надстройки:

weblate.generate.pseudolocale

Конфигурация:

source

Исходные строки

target

Целевой перевод

Все строки в этом переводе будут перезаписаны

prefix

Предваряющий статический текст

var_prefix

Предваряющий переменный текст

suffix

Добавочный статический текст

var_suffix

Добавочный переменный текст

var_multiplier

Переменный множитель текста

Сколько раз повторить переменный текст в зависимости от длины исходной строки.

include_readonly

Включить строки только для чтения

Запуск:

Установка надстройки, Обновление компонента, Ежедневно

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

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

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

Использование переменных частей позволяет искать строки, которые могут не поместиться в пользовательском интерфейсе после локализации — он расширяет текст на основе длины исходной строки. Переменные тексты повторяются с коэффициентом, умноженным на длину текста. Например, Hello world с переменным текстом _ и переменным коэффициентом 1 превращается в Hello world___________ — текст повторяется один раз для каждого символа в исходной строке.

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

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

Подсказка

Хотя вы и можете использовать настоящие языки для проверки, но для этой цели в Weblate уже есть специальные псевдолокали: en_XA и ar_XB.

Подсказка

Вы можете использовать эту надстройку для запуска перевода на новую локаль существующего или похожего языка. Как только вы добавите перевод в компонент, перейдите к надстройке. Пример: Если у вас есть fr и вы хотите начать перевод fr_CA, просто задайте fr в качестве источника, fr_CA в качестве цели, а префикс и суффикс оставьте пустыми.

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

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

ID надстройки:

weblate.gettext.authors

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Предварительная коммитация репозитория

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

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

# Michal Čihař <michal@weblate.org>, 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»

ID надстройки:

weblate.gettext.configure

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Установка надстройки, Ежедневно, Репозиторий после добавления, Репозиторий после удаления

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

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

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

Удалено в версии 5.13: Заменено на Параметры формата файла.

Обновление шаблона gettext (Django)

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

ID надстройки:

weblate.gettext.django

Конфигурация:

interval

Частота обновления

Как часто дополнение должно обновлять файл POT при обновлении компонента.

Доступные варианты:

daily

Ежедневно

weekly

Еженедельное

monthly

Ежемесячно

normalize_header

Нормализация заголовка POT

Обновляет заголовки gettext и заменяет комментарии-заполнители в файлах POT.

location_mode

Расположения исходного кода

Выберите, как извлечение записывает расположения исходного кода в POT-файл. Используйте это, чтобы сохранять расположения в шаблоне, опуская их в переведённых PO-файлах.

Доступные варианты:

file

Использовать настройки формата файлов

keep

Извлекать расположения в POT-файл

omit

Не извлекать расположения

Запуск:

Установка надстройки, Ручной запуск, Репозиторий после обновления

Обновляет шаблон gettext с помощью встроенной в Django команды makemessages.

Это дополнение обновляет шаблон, настроенный в Шаблон для новых переводов. Оно доступно для компонентов gettext PO, и компонент должен определять шаблон для новых переводов.

Выбранная частота обновления применяется к автоматическим запускам после обновлений репозитория. Установка или перенастройка дополнения запускает его немедленно, а ручные запуски из управления дополнениями или через API также обходит расписание частоты. После успешного обновления Weblate фиксирует изменённый шаблон и перезагружает исходные строки.

Обновление шаблона само по себе не обновляет файлы переводов PO. Держите Обновлять PO-файлы до соответствия POT (msgmerge) установленным, когда файлы переводов должны автоматически следовать изменениям шаблона. Форма установки этой надстройки может установить и то дополнение, но существующие настройки дополнения больше не показывают этот параметр установки.

Требования Django

Эта надстройка требует xgettext и msguniq. Она запускает внутреннюю обёртку извлечения Weblate для сообщений Django вместо вызова manage.py makemessages проекта, поэтому она не загружает настройки или приложения Django проекта.

Шаблон для новых переводов должен использовать домен django или djangojs. Поддерживаемые имена шаблонов: django.pot, djangojs.pot, django.po и djangojs.po. Weblate определяет исходный каталог по пути шаблона и пропускает каталоги локалей репозитория при извлечении.

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

ID надстройки:

weblate.gettext.linguas

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Установка надстройки, Ежедневно, Репозиторий после добавления, Репозиторий после удаления

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

Обновление файла POT (Meson)

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

ID надстройки:

weblate.gettext.meson

Конфигурация:

interval

Частота обновления

Как часто дополнение должно обновлять файл POT при обновлении компонента.

Доступные варианты:

daily

Ежедневно

weekly

Еженедельное

monthly

Ежемесячно

normalize_header

Нормализация заголовка POT

Обновляет заголовки gettext и заменяет комментарии-заполнители в файлах POT.

location_mode

Расположения исходного кода

Выберите, как извлечение записывает расположения исходного кода в POT-файл. Используйте это, чтобы сохранять расположения в шаблоне, опуская их в переведённых PO-файлах.

Доступные варианты:

file

Использовать настройки формата файлов

keep

Извлекать расположения в POT-файл

omit

Не извлекать расположения

comment_mode

Комментарии к коду

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

Доступные варианты:

off

Не извлекать комментарии

all

Извлечь все комментарии

tagged

Извлекает комментарии с тегом

comment_tag

Тег комментария

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

checks

Проверки xgettext

Дополнительные проверки xgettext, которые необходимо включить для извлеченных сообщений.

Доступные варианты:

ellipsis-unicode

ellipsis-unicode

space-ellipsis

space-ellipsis

quote-unicode

quote-unicode

bullet-unicode

bullet-unicode

keyword

Дополнительное ключевое слово

Дополнительное ключевое слово, передаваемое в xgettext с помощью параметра –keyword.

keyword_exclusive

Использовать только указанные ключевые слова

При включении передаёт xgettext параметр --keyword без значения перед дополнительным ключевым словом, отключая все ключевые слова по умолчанию, так что распознаётся только указанное выше ключевое слово.

preset

Предустановка Meson

Встроенная предустановка аргументов xgettext, соответствующая интеграции gettext в Meson. Предварительный набор GLib добавляет параметры ключевых слов и флага формата, используемые помощником gettext в Meson.

Доступные варианты:

glib

GLib

Запуск:

Установка надстройки, Ручной запуск, Репозиторий после обновления

Обновляет шаблон gettext, используя соглашения Meson gettext.

Это дополнение обновляет шаблон, настроенный в Шаблон для новых переводов. Оно доступно для компонентов gettext PO, и компонент должен определять шаблон для новых переводов.

Выбранная частота обновления применяется к автоматическим запускам после обновлений репозитория. Установка или перенастройка дополнения запускает его немедленно, а ручные запуски из управления дополнениями или через API также обходит расписание частоты. После успешного обновления Weblate фиксирует изменённый шаблон и перезагружает исходные строки.

Обновление шаблона само по себе не обновляет файлы переводов PO. Держите Обновлять PO-файлы до соответствия POT (msgmerge) установленным, когда файлы переводов должны автоматически следовать изменениям шаблона. Форма установки этой надстройки может установить и то дополнение, но существующие настройки дополнения больше не показывают этот параметр установки.

Требования Meson

Эта надстройка требует xgettext; она не вызывает Meson. Она следует соглашениям Meson gettext, читая POTFILES или POTFILES.in из каталога gettext и передавая ключевое слово GLib и предустановку флагов формата в xgettext.

Каталог gettext — это каталог, содержащий шаблон, настроенный в Шаблон для новых переводов. Он должен содержать meson.build и POTFILES или POTFILES.in. Файл meson.build проекта Meson должен присутствовать в этом каталоге или в одном из его родительских каталогов. Если существуют оба файла POTFILES и POTFILES.in, используется POTFILES. Находящийся рядом POTFILES.skip исключает перечисленные исходные файлы из извлечения.

Настройте эту надстройку на основе существующей конфигурации Meson gettext. В большинстве проектов Meson каталог gettext — это po/, шаблон называется по домену gettext, а po/meson.build вызывает помощник gettext Meson. Используйте тот же путь к шаблону в Шаблон для новых переводов, например po/example.pot, и храните POTFILES или POTFILES.in рядом с этим файлом meson.build.

Weblate не читает список исходных файлов из meson.build. Он использует POTFILES или POTFILES.in, следуя соглашению gettext Meson. Когда проект Meson использует нестандартный каталог или домен gettext, отразите эту структуру в пути к шаблону компонента.

Создание MO-файлов

ID надстройки:

weblate.gettext.mo

Конфигурация:

path

Путь к сгенерированному MO-файлу

Если не указано, будет использовано расположение PO-файла.

fuzzy

Включить строки с флагом «На правку»

Строки с флагом «На правку», обычно не готовы к использованию в качестве переводов.

Запуск:

Предварительная коммитация репозитория

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

В соответствующем поле можно задать местоположение сгенерированного MO-файла. Формат этого поля — Шаблонная разметка.

Примечание

При удалении перевода его PO-файл будет удалён из репозитория, а MO-файл, созданный этим дополнением, - нет. MO-файл должен быть удалён из репозитория вручную.

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

Изменено в версии 5.13: Конфигурация Настройки была перенесена в Параметры формата файла.

ID надстройки:

weblate.gettext.msgmerge

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Установка надстройки, Репозиторий после обновления

Обновляет все PO-файлы (соответствующие «Маске файла»), используя msgmerge и приводя их в соответствие с POT-файлом (указанным в «Шаблоне для новых переводов»).

Эта надстройка необходима при работе с файлами gettext PO, где POT-файл (шаблон) обновляется новыми строками или изменениями существующих строк. Когда POT-файл обновляется в репозитории, эта надстройка автоматически объединяет эти изменения во все языковые PO-файлы, гарантируя, что:

  • Новые переводимые строки появляются на всех языках

  • Удалённые строки помечаются как устаревшие

  • Изменённые строки помечаются как требующие рецензирования (нечёткие)

Большинство параметров командной строки msgmerge можно настроить через параметры формата файла. Включите параметр po_remove_obsolete, чтобы удалять устаревшие записи #~ при сохранении PO-файлов.

Обновление файла POT (Sphinx)

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

ID надстройки:

weblate.gettext.sphinx

Конфигурация:

interval

Частота обновления

Как часто дополнение должно обновлять файл POT при обновлении компонента.

Доступные варианты:

daily

Ежедневно

weekly

Еженедельное

monthly

Ежемесячно

normalize_header

Нормализация заголовка POT

Обновляет заголовки gettext и заменяет комментарии-заполнители в файлах POT.

location_mode

Расположения исходного кода

Выберите, как извлечение записывает расположения исходного кода в POT-файл. Используйте это, чтобы сохранять расположения в шаблоне, опуская их в переведённых PO-файлах.

Доступные варианты:

file

Использовать настройки формата файлов

keep

Извлекать расположения в POT-файл

omit

Не извлекать расположения

filter_mode

Фильтрация

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

Доступные варианты:

none

Без имени

weblate_docs

Документация Weblate

Запуск:

Установка надстройки, Ручной запуск, Репозиторий после обновления

Обновляет шаблон gettext с помощью конструктора gettext от Sphinx без загрузки конфигурации проекта.

Это дополнение обновляет шаблон, настроенный в Шаблон для новых переводов. Оно доступно для компонентов gettext PO, и компонент должен определять шаблон для новых переводов.

Выбранная частота обновления применяется к автоматическим запускам после обновлений репозитория. Установка или перенастройка дополнения запускает его немедленно, а ручные запуски из управления дополнениями или через API также обходит расписание частоты. После успешного обновления Weblate фиксирует изменённый шаблон и перезагружает исходные строки.

Обновление шаблона само по себе не обновляет файлы переводов PO. Держите Обновлять PO-файлы до соответствия POT (msgmerge) установленным, когда файлы переводов должны автоматически следовать изменениям шаблона. Форма установки этой надстройки может установить и то дополнение, но существующие настройки дополнения больше не показывают этот параметр установки.

Требования Sphinx

Это дополнение требует sphinx-build, предоставляемый дополнительным компонентом установки sphinx. Шаблон для новых переводов должен быть файлом .pot в каталоге locales. Каталог перед locales используется как исходный каталог Sphinx и должен содержать conf.py.

Извлечение использует встроенную конфигурацию Sphinx Weblate и не загружает конфигурацию проекта. Weblate запускает сборщик gettext Sphinx, нормализует ссылки на исходные файлы в пути относительно исходного каталога и копирует сгенерированный шаблон обратно в настроенный путь к шаблону.

Обновление файла POT (xgettext)

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

ID надстройки:

weblate.gettext.xgettext

Конфигурация:

interval

Частота обновления

Как часто дополнение должно обновлять файл POT при обновлении компонента.

Доступные варианты:

daily

Ежедневно

weekly

Еженедельное

monthly

Ежемесячно

normalize_header

Нормализация заголовка POT

Обновляет заголовки gettext и заменяет комментарии-заполнители в файлах POT.

location_mode

Расположения исходного кода

Выберите, как извлечение записывает расположения исходного кода в POT-файл. Используйте это, чтобы сохранять расположения в шаблоне, опуская их в переведённых PO-файлах.

Доступные варианты:

file

Использовать настройки формата файлов

keep

Извлекать расположения в POT-файл

omit

Не извлекать расположения

comment_mode

Комментарии к коду

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

Доступные варианты:

off

Не извлекать комментарии

all

Извлечь все комментарии

tagged

Извлекает комментарии с тегом

comment_tag

Тег комментария

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

checks

Проверки xgettext

Дополнительные проверки xgettext, которые необходимо включить для извлеченных сообщений.

Доступные варианты:

ellipsis-unicode

ellipsis-unicode

space-ellipsis

space-ellipsis

quote-unicode

quote-unicode

bullet-unicode

bullet-unicode

keyword

Дополнительное ключевое слово

Дополнительное ключевое слово, передаваемое в xgettext с помощью параметра –keyword.

keyword_exclusive

Использовать только указанные ключевые слова

При включении передаёт xgettext параметр --keyword без значения перед дополнительным ключевым словом, отключая все ключевые слова по умолчанию, так что распознаётся только указанное выше ключевое слово.

input_mode

Исходные данные

Выберите, должен ли xgettext читать файлы исходников из глоб-шаблонов или из манифеста POTFILES/POTFILES.in.

Доступные варианты:

patterns

Шаблоны исходных файлов

potfiles

Манифест POTFILES

language

Язык xgettext

Язык программирования, передаваемый в xgettext, например Python или C. Оставьте пустым, чтобы xgettext попытался определить язык по расширениям файлов.

source_patterns

Шаблоны исходных файлов

Глоб-шаблоны, разделённые новой строкой, относящиеся к репозиторию, для файлов, извлекаемых с помощью xgettext.

potfiles_path

Путь POTFILES

Относительный путь к POTFILES или POTFILES.in в репозитории. Пути определяются относительно корня репозитория. Если файл POTFILES.skip находится рядом с манифестом, он исключает указанные в нём файлы из извлечения.

Запуск:

Установка надстройки, Ручной запуск, Репозиторий после обновления

Обновляет шаблон gettext с помощью xgettext в выбранных файлах исходников.

Это дополнение обновляет шаблон, настроенный в Шаблон для новых переводов. Оно доступно для компонентов gettext PO, и компонент должен определять шаблон для новых переводов.

Выбранная частота обновления применяется к автоматическим запускам после обновлений репозитория. Установка или перенастройка дополнения запускает его немедленно, а ручные запуски из управления дополнениями или через API также обходит расписание частоты. После успешного обновления Weblate фиксирует изменённый шаблон и перезагружает исходные строки.

Обновление шаблона само по себе не обновляет файлы переводов PO. Держите Обновлять PO-файлы до соответствия POT (msgmerge) установленным, когда файлы переводов должны автоматически следовать изменениям шаблона. Форма установки этой надстройки может установить и то дополнение, но существующие настройки дополнения больше не показывают этот параметр установки.

Требования xgettext

Это дополнение требует xgettext. Настройте либо шаблоны исходных файлов, либо манифест POTFILES / POTFILES.in. Шаблоны исходных файлов — это шаблоны glob относительно репозитория, и только соответствующие файлы репозитория передаются в xgettext.

Записи в POTFILES или POTFILES.in разрешаются относительно корня репозитория. Они должны быть относительными путями, находиться внутри репозитория и указывать на существующие файлы. Пустые строки и строки, начинающиеся с #, игнорируются. Если рядом с манифестом существует файл POTFILES.skip, его записи исключаются из извлечения.

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

Начните с настройки извлечения системы сборки при настройке этого дополнения. Проекты Autotools обычно хранят входные данные gettext в po/POTFILES.in, а параметры, такие как домен gettext и флаги xgettext, в po/Makevars или связанных файлах Makefile.am. Используйте режим манифеста с тем же POTFILES.in, когда его записи являются простыми путями к исходным файлам относительно репозитория, и скопируйте соответствующее поведение извлечения в настройки дополнения, например язык, извлечение комментариев, проверки и дополнительное ключевое слово.

Для других систем сборки используйте список исходных файлов или команду извлечения, которую они уже запускают, как источник истины. CMake, пользовательские Makefile, npm-скрипты или специфичные для проекта скрипты извлечения часто вызывают xgettext напрямую или генерируют промежуточный список файлов. Настройте шаблоны исходных файлов для простых структур или используйте режим манифеста, когда проект поддерживает простой список файлов. Если манифест системы сборки содержит преобразования или префиксы, не являющиеся путями к файлам, преобразуйте их в простые пути относительно репозитория перед использованием в качестве POTFILES.

Уплотнение Git-коммитов

ID надстройки:

weblate.git.squash

Конфигурация:

squash

Уплотнение коммитов

Доступные варианты:

all

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

language

По языку

file

По файлу

author

По автору

append_trailers

Добавлять завершители в конец сообщения уплотнённого коммита

Строки трейлера это строки, похожие на заголовки электронной почты RFC 822, расположенные в конце свободной части сообщения фиксации, например, «“Co-authored-by: …“».

commit_message

Сообщение коммита

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

Запуск:

Установка надстройки, Репозиторий после коммита

Уплотнение Git-коммитов перед публикацией изменений.

Подсказка

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

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

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

  • По языку

  • По файлу

  • По автору

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

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

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

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

Изменено в версии 5.12: Добавлена опция Avoid spaces after separators.

Удалено в версии 5.13: Заменено на Параметры формата файла.

Вернуть сетевое хранилище в исходное состояние

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

ID надстройки:

weblate.hosted.reset

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Установка надстройки, Ежедневно

Отменять все изменения в сетевом хранилище Weblate каждую ночь.

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

ID надстройки:

weblate.properties.sort

Конфигурация:

case_sensitive

Включить сортировку ключей с учётом регистра

Запуск:

Предварительная коммитация репозитория

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

  • Объединяет новые строки с Unix-строками.

  • Форматирование управляющих последовательностей Юникода в верхнем регистре (если присутствуют).

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

  • Сортировка строк по ключам.

  • Исключение повторяющихся строк.

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

ID надстройки:

weblate.removal.comments

Конфигурация:

age

Дни для сохранения

Запуск:

Установка надстройки, Ежедневно

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

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

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

ID надстройки:

weblate.removal.suggestions

Конфигурация:

age

Дни для сохранения

votes

Порог голосования

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

Запуск:

Установка надстройки, Ежедневно

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

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

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

ID надстройки:

weblate.resx.update

Конфигурация:

Эта надстройка не имеет конфигурации.

Запуск:

Установка надстройки, Репозиторий после обновления

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

Подсказка

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

Веб-обработчики Slack

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

ID надстройки:

weblate.webhook.slack

Конфигурация:

webhook_url

URL веб-обработчика

event_filter

События изменений для срабатывания

Выберите, какие события изменений должны вызывать эту надстройку. События изменений для срабатывания

events

Выбранные события изменений

Выбранные события изменений

Запуск:

Изменение события

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

Предупреждение

В содержимом уведомления могут присутствовать HTML-теги. Это известная проблема, которая будет вскоре устранена; см. https://github.com/WeblateOrg/weblate/issues/15056.

Подсказка

Чтобы получить URL-адрес веб-обработчика, следуйте инструкциям, описанным в Документации по входящим веб-обработчикам Slack

Веб-обработчик

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

Изменено в версии 5.15: Соответствие длины секрета спецификации теперь проверяется.

ID надстройки:

weblate.webhook.webhook

Конфигурация:

webhook_url

URL веб-обработчика

secret

Секретный токен веб-обработчика

Стандартный секретный токен Webhooks - это строка в кодировке base64.

event_filter

События изменений для срабатывания

Выберите, какие события изменений должны вызывать эту надстройку. События изменений для срабатывания

events

Выбранные события изменений

Выбранные события изменений

Запуск:

Изменение события

Отправка уведомлений внешним службам на основе выбранных событий в соответствии со спецификацией Standard WebHooks.

Полезная нагрузка запроса соответствует схеме Weblate Messaging. Поле action использует имя действия, перечисленное в Выбранные события изменений. Описание OpenAPI также можно найти по адресу /api/docs/. Пример тела запроса:

{
   "change_id": 99,
   "action": "Translation changed",
   "timestamp": "2019-08-24T14:15:22Z",
   "target": "Nazdar svete!",
   "old": "Nazdar!",
   "source": "Hello, world",
   "url": "/translate/project-slug/component-slug/cs/?checksum=46add148a53cab6f",
   "author": "author-username",
   "user": "user-username",
   "project": "project-slug",
   "component": "component-slug",
   "translation": "cs"
}

Пример текста запроса с категориями:

{
   "change_id": 8910,
   "action": "Component renamed",
   "timestamp": "2025-06-11T07:15:09Z",
   "target": ["new-name"],
   "old": ["component-slug"],
   "url": "/projects/project-slug/parent-category/child-category/sub-category/component-slug/",
   "user": "testuser",
   "project": "project-slug",
   "component": "component-slug",
   "category": [
      "sub-category",
      "child-category",
      "parent-category"
   ]
}

Примеры заголовков запроса:

{
   "webhook-id": "7f1c5477f6275a69af7b83236c20cb1a",
   "webhook-timestamp": "1748505623.044281",
   "webhook-signature": "v1,Ceo5qEr07ixe2NLpvHk3FH9bwy/WavXrAFQ/9tdO6mc="
}

webhook-signature — это список HMAC-подписей, разделённых пробелами, сгенерированный с использованием строки secret, полезной нагрузки запроса, webhook-timestamp и webhook-id. Это гарантирует подлинность и целостность запроса webhook.

Предоставленный secret — это строка в кодировке base64 размером от 24 байт (192 бит) до 64 байт (512 бит). Для удобной идентификации к нему можно добавить префикс whsec_.

Для проверки запроса можно использовать метод Webhook.verify из библиотеки standardwebhooks или реализацию «Стандартной спецификации веб-обработчиков».

Устаревшие дополнения

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

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

Удалено в версии 5.13: Заменено на Параметры формата файла.

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

Удалено в версии 5.13: Заменено на Параметры формата файла.

Общие параметры дополнений

Механизмы машинного перевода

Доступные варианты:

alibaba

Alibaba

aws

Amazon Translate

anthropic

Anthropic

apertium-apy

Apertium APy

microsoft-translator

Azure AI Translator

azure-openai

Azure OpenAI

baidu

Baidu

cyrtranslit

CyrTranslit

deepl

DeepL

glosbe

Glosbe

google-translate-api-v3

Расширенный облачный перевод Google

google-translate

Базовый переводчик Google Cloud

ltengine

LTEngine

libretranslate

LibreTranslate

mistral

Mistral

modernmt

ModernMT

mymemory

MyMemory

netease-sight

NetEase Sight

ollama

Ollama

openai

OpenAI

sap-translation-hub

Центр переводов SAP

systran

Systran

weblate

Weblate

weblate-translation-memory

Память переводов Weblate

yandex

Яндекс

yandex-v2

Яндекс v2

youdao-zhiyun

Youdao Zhiyun

tmserver

tmserver

Формат файла

Доступные варианты:

apple-xliff

XLIFF 1.2 с расширениями Apple

appstore

Файлы метаданных магазина приложений

arb

Файл ARB

aresource

Строковый ресурс Android

asciidoc

Файл AsciiDoc

ass

Файл субтитров Advanced SubStation Alpha

catkeys

Ключевые слова Haiku

cmp-resource

Ресурс Compose Multiplatform

csv

Файл CSV

csv-multi

Многозначный CSV-файл

csv-simple

Простой CSV файл

dokuwiki

Текстовый файл DokuWiki

dtd

Файл DTD

flatxml

Плоский XML-файл

fluent

Файл Fluent

formatjs

JSON-файл Format.JS

go-i18n-json

Файл JSON go-i18n v1

go-i18n-json-v2

Файл JSON go-i18n v2

go-i18n-toml

Файл go-i18n TOML

gotext

Файл JSON gotext

gwt

Файлы свойств GWT

html

Файл HTML

i18next

i18next JSON-файл v3

i18nextv4

Файл JSON i18next v4

idml

Файл IDML

ini

Файл INI

islu

INI-файл Inno Setup

joomla

Языковой файл Joomla

json

JSON-файл

json-nested

JSON-файл с вложенной структурой

laravel

Строки Laravel PHP

markdown

Файл Markdown

mdx

Файл MDX

mediawiki

Текстовый файл MediaWiki

mi18n-lang

Языковой файл @draggable/i18n

moko-resource

Мобильный ресурс Kotlin

nextcloud-json

Файл Nextcloud JSON

odf

Файл OpenDocument

php

Строки PHP

plainxliff

Файл перевода XLIFF 1.2

po

PO-файл gettext

po-mono

PO-файл gettext (одноязычный)

poxliff

XLIFF 1.2 с расширениями gettext

properties

Свойства Java

rc

Файл RC

resjson

RESJSON-файл

resourcedictionary

Файл ResourceDictionary

resx

Файл ресурсов .NET

ruby-yaml

Файл YAML Ruby

srt

Файл субтитров SubRip

ssa

Файл субтитров SubStation Alpha

strings

Строки iOS

stringsdict

Множественный файл

sub

Файл субтитров MicroDVD

tbx

Файл TermBase eXchange

toml

Файл TOML

ts

Файл перевода Qt Linguist (версия 2)

ts1

Файл перевода Qt Linguist (версия 1)

txt

Обычный текстовый файл

webextension

JSON-файл WebExtension

wxl

Файл WixLocalization

xliff

XLIFF 1.2 с поддержкой размещаемых файлов

xliff2

Файл перевода XLIFF 2.0

xliff2-placeables

XLIFF 2.0 с поддержкой размещаемых файлов

xlsx

Excel Open XML

xwiki-fullpage

Полная страница XWiki

xwiki-java-properties

XWiki Java Properties

xwiki-page-properties

Свойства страницы XWiki

yaml

Файл YAML

События изменений для срабатывания

Доступные варианты:

content

События содержимого перевода

all

Все события изменений

custom

Выбранные события изменений

Выбранные события изменений

Следующие действия изменений могут появляться в полезных нагрузках уведомлений. Fedora Messaging использует столбец идентификатора в темах сообщений, в то время как полезные нагрузки веб-обработчиков используют столбец имени в поле action.

Доступные варианты:

ИД

Идентификатор

Имя

Описание

0

resource_updated

Обновление ресурсов

Файл перевода синхронизирован с его репозиторием.

1

translation_completed

Перевод завершён

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

2

translation_changed

Перевод изменён

Существующий перевод отредактирован пользователем.

3

comment_added

Добавлен комментарий

К строке добавлен комментарий.

4

suggestion_added

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

Добавлено предложение по переводу.

5

translation_added

Перевод добавлен

Ранее непереведённая строка переведена пользователем.

6

automatically_translated

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

Перевод добавлен или изменён автоматическим переводом. Это событие генерируется вместо «Перевод добавлен» или «Перевод изменён».

7

suggestion_accepted

Предложение принято

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

8

translation_reverted

Перевод возвращён

Перевод восстановлен до более раннего значения.

9

translation_uploaded

Перевод загружен

Перевод добавлен или изменён загрузкой файла перевода. Это событие генерируется вместо «Перевод добавлен» или «Перевод изменён».

13

source_string_added

Добавлена исходная строка

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

14

component_locked

Компонент заблокирован

Компонент заблокирован для перевода.

15

component_unlocked

Компонент разблокирован

Компонент разблокирован для перевода.

17

changes_committed

Изменения отправлены

Ожидающие изменения компонента зафиксированы.

18

changes_pushed

Внесение изменений

Изменения репозитория отправлены вышестоящему репозиторию.

19

repository_reset

Сброс репозитория

Репозиторий сброшен до состояния вышестоящего репозитория.

20

repository_merged

Репозиторий объединён

Изменения вышестоящего репозитория объединены.

21

repository_rebased

Смена базы репозитория

Изменения репозитория перебазированы на вышестоящий репозиторий.

22

repository_merge_failed

Сбой слияния репозиториев

Объединение изменений вышестоящего репозитория не удалось.

23

repository_rebase_failed

Не удалось выполнить операцию смены базы репозитория

Перебазирование изменений репозитория не удалось.

24

parsing_failed

Не удалось выполнить обработку

Weblate не удалось разобрать файл перевода.

25

translation_removed

Перевод удалён

Перевод на язык удалён.

26

suggestion_removed

Предложение удалено

Предложение по переводу удалено.

27

translation_replaced

Перевод заменён

Перевод изменён операцией поиска и замены. Это событие генерируется вместо «Перевод изменён».

28

repository_push_failed

Репозиторий не удалось развернуть

Отправка изменений репозитория вышестоящему репозиторию не удалась.

29

suggestion_removed_during_cleanup

Предложение удалено при очистке

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

30

source_string_changed

Изменена исходная строка

Исходная строка отредактирована в Weblate.

31

string_added

Добавлена строка

Новая строка добавлена в Weblate.

32

bulk_status_changed

Общий статус изменён

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

33

visibility_changed

Последнее изменение видимости

Видимость проекта или компонента изменена.

34

user_added

Добавлено пользователем

Пользователю предоставлен доступ.

35

user_removed

Пользователь удалён

Доступ пользователя удалён.

36

translation_approved

Перевод одобрен

Перевод одобрен при рецензировании.

37

marked_for_edit

Отмечено для правки

Перевод отмечен как требующий правки.

38

component_removed

Компонент удалён

Компонент перевода удалён.

39

project_removed

Проект удалён

Проект перевода удалён.

41

project_renamed

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

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

42

component_renamed

Переименован элемент

Компонент перевода переименован.

43

moved_component

Компонент перемещён

Компонент перемещён внутри проекта.

45

contributor_joined

Участник присоединился

Пользователь внёс свой первый вклад в перевод.

46

announcement_posted

Объявление опубликовано

Объявление опубликовано.

47

alert_triggered

Сработало предупреждение

Сработало предупреждение компонента.

48

language_added

Добавление языка

Добавлен перевод на язык.

49

language_requested

Запрошен язык

Пользователь запросил новый язык.

50

project_created

Проект создан

Создан проект перевода.

51

component_created

Компонент заблокирован

Создан компонент перевода.

52

user_invited

Приглашенный пользователь

Пользователь приглашён в проект.

53

repository_notification_received

Получено уведомление от репозитория

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

54

translation_replaced_file_by_upload

Перевод заменён загруженным файлом

Файл перевода заменён загруженным файлом.

55

license_changed

Изменение лицензии

Изменилась информация о лицензии проекта или компонента.

56

contributor_license_agreement_changed

Лицензионное соглашение участника изменено

Лицензионное соглашение участника изменено.

57

screenshot_added

Добавлен снимок экрана

Снимок экрана связан со строкой.

58

screenshot_uploaded

Снимок экрана загружен

Изображение снимка экрана загружено.

59

string_updated_in_the_repository

Строка обновлена в репозитории

Строка изменена при синхронизации из репозитория.

60

add-on_installed

Дополнение установлено

Дополнение установлено.

61

add-on_configuration_changed

Настройка дополнения изменена

Настройка дополнения изменена.

62

add-on_uninstalled

Дополнение удалено

Дополнение удалено.

63

string_removed

Строка удалена

Строка удалена из перевода.

64

comment_removed

Комментарий удалён

Комментарий к строке удалён.

65

comment_resolved

Комментарий решён

Комментарий к строке отмечен как решённый.

66

explanation_updated

Объяснение обновлено

Пояснение к исходной строке обновлено.

67

category_removed

Категория удалена

Категория компонента удалена.

68

category_renamed

Категория переименована

Категория компонента переименована.

69

category_moved

Категория перемещена

Категория компонента перемещена.

70

saving_string_failed

Не удалось сохранить строку

Weblate не удалось сохранить изменённую строку.

71

string_added_in_the_repository

Строка добавлена в репозиторий

Новая строка найдена при синхронизации из репозитория.

72

string_updated_in_the_upload

Строка обновлена при загрузке

Строка изменена при обработке загруженного файла.

73

string_added_in_the_upload

Строка добавлена при загрузке

Новая строка найдена при обработке загруженного файла.

74

translation_updated_by_source_upload

Перевод обновлён путём загрузки источника

Перевод синхронизирован после загрузки исходного файла.

75

component_translation_completed

Перевод компонента завершён

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

76

applied_enforced_check

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

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

77

propagated_change

Распространённое изменение

Правка перевода распространена на другую подходящую строку.

78

file_uploaded

Файл загружен

Файл загружен для перевода.

79

extra_flags_updated

Обновлены дополнительные флаги

Дополнительные флаги исходной строки обновлены.

80

font_uploaded

Шрифт загружен

Шрифт загружен.

81

font_changed

Шрифт изменён

Загруженный шрифт изменён.

82

font_removed

Шрифт удалён

Загруженный шрифт удалён.

83

forced_synchronization_of_translations

Принудительная синхронизация переводов

Файлы перевода принудительно синхронизированы с репозиторием.

84

forced_rescan_of_translations

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

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

85

screenshot_removed

Снимок экрана удалён

Снимок экрана удалён.

86

label_added

Метка добавлена

Метка добавлена к строке.

87

label_removed

Метка удалена

Метка удалена из строки.

88

repository_cleanup

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

Рабочее дерево репозитория очищено.

89

source_string_added_in_the_upload

Исходная строка добавлена при отправке

Исходная строка добавлена при обработке загруженного файла.

90

source_string_added_in_the_repository

Исходная строка добавлена в репозиторий

Исходная строка добавлена при синхронизации из репозитория.

91

project_backed_up

Проект резервно сохранён

Создана резервная копия проекта.

92

project_restored

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

Проект восстановлен из резервной копии.

93

component_restored

Компонент восстановлен

Компонент восстановлен из резервной копии.

94

user_edit_reverted

Правка пользователя отменена

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

95

project_setting_changed

Параметр проекта изменён

Настройка проекта изменена.

96

component_setting_changed

Изменён параметр компонента

Настройка компонента изменена.

97

user_access_changed

Доступ пользователя изменён

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

98

workspace_created

Рабочее пространство создано

Создано рабочее пространство.

99

workspace_setting_changed

Настройка рабочего пространства изменена

Настройка рабочего пространства изменена.

100

project_moved

Проект перемещён

Проект перемещён в рабочее пространство или из него.

101

remote_repository_updated

Удалённый репозиторий обновлён

Обновление удалённого репозитория завершено.

102

remote_repository_update_failed

Обновление удалённого репозитория не удалось

Обновление удалённого репозитория не удалось.

103

alert_dismissed

Предупреждение отклонено

Предупреждение компонента отклонено.

104

alert_reopened

Предупреждение открыто заново

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

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

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

Написание дополнения

Также вы можете создать свою собственную надстройку: просто создайте подкласс weblate.addons.base.BaseAddon, чтобы определить метаданные надстройки, а затем реализуйте нужный обратный вызов, который будет выполнять обработку.

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

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

# Copyright © Michal Čihař <michal@weblate.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later

"""Example pre commit script."""

from __future__ import annotations

from typing import ClassVar

from django.utils.translation import gettext_lazy

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


class ExamplePreAddon(BaseScriptAddon):
    # Event used to trigger the script
    events: ClassVar[set[AddonEvent]] = {
        AddonEvent.EVENT_PRE_COMMIT,
    }
    # Name of the addon, has to be unique
    name = "weblate.example.pre"
    # Verbose name and long description
    verbose = gettext_lazy("Execute script before commit")
    description = gettext_lazy("This add-on 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

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

WL_FILEMASK

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

WL_TEMPLATE

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

WL_NEW_BASE

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

WL_FILE_FORMAT

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

WL_LANGUAGE

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

WL_PREVIOUS_HEAD

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

WL_COMPONENT_SLUG

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

WL_PROJECT_SLUG

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

WL_COMPONENT_NAME

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

WL_PROJECT_NAME

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

WL_COMPONENT_URL

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

WL_ENGAGE_URL

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

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

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

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

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

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

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

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

Журналирование активности надстроек

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

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

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

Журналы можно очищать по истечении определенного интервала времени, настроив ADDON_ACTIVITY_LOG_EXPIRY.