Надстройки

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

Подсказка

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

../_images/addons.webp

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

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

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

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

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

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

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

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

Ежедневно

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Unit post-sync

Triggered after the string is synchronized with the VCS.

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

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

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

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

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/.

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

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

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

weblate.cleanup.blank

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

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

Запуск:

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

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

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

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

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

weblate.cleanup.generic

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

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

Запуск:

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

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

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

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

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

weblate.consistency.languages

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

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

Запуск:

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

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

Примечание

The components shared from other projects are not considered in this.

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

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

Подсказка

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

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

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

weblate.discovery.discovery

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

match

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

file_format

Формат файла

Формат файла

name_template

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

base_file_template

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

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

new_base_template

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

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

intermediate_template

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

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

language_regex

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

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

copy_addons

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

remove

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

confirm

Я подтверждаю, что сопоставления выше выглядят правильно

Запуск:

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

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

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

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

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

{{ 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

Excluding certain matches

Negative lookahead can be used to exclude certain patterns from being processed.

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

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

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

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

Not matching files:
  • res/values-cs/strings-about.xml

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

  • res/values-cs/strings-info-1.xml

  • res/values-de/strings-info-1.xml

  • res/values-cs/strings-info-2.xml

  • res/values-de/strings-info-2.xml

Подсказка

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

Подсказка

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

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

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

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

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

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

weblate.fedora_messaging.publish

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

events

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

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

amqp_host

Хост брокера AMQP

Брокер AMQP для подключения.

amqp_ssl

Брокер AMQP для подключения

ca_cert

Сертификаты ЦС

Набор сертификатов ЦС, закодированных с помощью PEM, используемых для проверки сертификата, представленного сервером.

client_key

SSL-ключ клиента

PEM-кодированный частный SSL-ключ клиента.

client_cert

Клиентские SSL-сертификаты

PEM-шифрованный клиентский SSL-сертификат.

Запуск:

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

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

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

Message topic

All messages have topic weblate.<action>.<project>.<component>.<translation>. The action is lowercase textual representation of action with underscores instead of space, for example resource_update, all other parts are optional and represent slug of the object or a language code.

Message body

The body consists of following fields (given that they are available for the event):

change_id

Коĺкасć моŭ

action

Verbose name of the change.

timestamp

ISO formatted timestamp

target

New value of the change (eg. new translation of the string)

old

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

source

Source string.

url

Absolute URL to view the related object.

author

Author username (this can be different from user for example when accepting suggestions)

user

Acting username

project

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

component

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

translation

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

Message headers

There are additional headers which you might utilize for routing as well:

action

Verbose name of the change.

project

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

component

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

Example messages

Repository merge event:

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

New source string event:

{
  "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"]
}

Resource update event:

{
  "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"
}

Project removal event:

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

New contributor event:

{
  "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"]
}

New translation event:

{
  "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

Marking certain strings read-only

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

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

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

read-only

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

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

weblate.flags.same_edit

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

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

Запуск:

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

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

Подсказка

You might also want to tighthen the Перевод без изменения check by adding strict-same flag to Флаги перевода.

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

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

weblate.flags.source_edit

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

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

Запуск:

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

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

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

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

weblate.flags.target_edit

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

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

Запуск:

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

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

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

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

weblate.flags.target_repo_update

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

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

Запуск:

Unit post-sync

Всякий раз, когда перевод строки изменяется в системе контроля версий (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

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

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

Запуск:

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

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

Все непереведённые строки в компоненте будут представлены исходной строкой и помечены «На правку». Используйте это, когда в файлах перевода не может быть пустых строк.

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

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

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

weblate.generate.pseudolocale

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

source

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

target

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

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

prefix

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

var_prefix

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

suffix

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

var_suffix

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

var_multiplier

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

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

include_readonly

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

Запуск:

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

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

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

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

Using the variable parts makes it possible to look for strings which might not fit into the user interface after the localization - it extends the text based on the source string length. The variable texts are repeated by length of the text multiplied by the multiplier. For example Hello world with variable text _ and variable multiplier of 1 becomes Hello world___________ - the text is repeated once for each character in the source string.

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

Prepended static text Prepended variable text Source string Appended variable text Appended static text

Подсказка

Хотя вы и можете использовать настоящие языки для проверки, но для этой цели в 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 при добавлении нового перевода.

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

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

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

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

weblate.gettext.linguas

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

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

Запуск:

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

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

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

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

weblate.gettext.mo

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

path

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

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

fuzzy

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

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

Запуск:

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

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

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

Примечание

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

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

Изменено в версии 5.13: Settings configuration has been moved to Параметры формата файла.

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

weblate.gettext.msgmerge

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

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

Запуск:

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

Updates all PO files (as configured by Маска файла) to match the POT file (as configured by Шаблон для новых переводов) using msgmerge.

This add-on is essential when working with gettext PO files where the POT (template) file is updated with new strings or changes to existing strings. When the POT file is updated in the repository, this add-on automatically merges those changes into all language PO files, ensuring that:

  • New translatable strings appear in all languages

  • Removed strings are marked as obsolete

  • Modified strings are marked as needing review (fuzzy)

Most msgmerge command-line options can be set up through file format parameters configuration.

Уплотнение 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: Replaced by Параметры формата файла.

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

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

weblate.properties.sort

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

case_sensitive

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

Запуск:

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

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

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

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

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

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

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

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

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 веб-обработчика

events

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

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

Запуск:

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

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

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

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

Подсказка

Чтобы получить URL-адрес веб-обработчика, следуйте инструкциям, описанным в «Документации по входящим веб-перехватам Slack <https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks>».

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

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

Изменено в версии 5.15: Compliance of the secret length with the specification is now validated.

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

weblate.webhook.webhook

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

webhook_url

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

secret

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

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

events

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

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

Запуск:

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

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

Полезная нагрузка запроса соответствует схеме Weblate Messaging. Описание 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.

The provided secret is a base64 encoded string between 24 bytes (192 bits) and 64 bytes (512 bits). It can be prefixed with whsec_ for easy identification.

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

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

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

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

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

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

Common add-on parameters

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

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

aws

Amazon Translate

deepl

DeepL

google-translate-api-v3

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

google-translate

Google Cloud Translation Basic

microsoft-translator

Azure AI Translator

modernmt

ModernMT

openai

OpenAI

weblate

Weblate

weblate-translation-memory

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

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

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

0

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

1

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

2

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

3

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

4

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

5

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

6

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

7

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

8

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

9

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

13

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

14

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

15

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

17

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

18

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

19

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

20

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

21

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

22

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

23

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

24

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

25

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

26

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

27

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

28

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

29

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

30

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

31

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

32

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

33

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

34

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

35

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

36

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

37

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

38

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

39

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

41

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

42

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

43

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

45

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

46

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

47

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

48

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

49

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

50

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

51

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

52

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

53

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

54

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

55

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

56

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

57

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

58

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

59

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

60

Надстройка установлена

61

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

62

Надстройка удалена

63

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

64

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

65

Комментарий решён

66

Объяснение обновлено

67

Категория удалена

68

Категория переименована

69

Категория перемещена

70

Не удалось сохранить строку

71

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

72

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

73

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

74

Перевод обновлён путём загрузки источника

75

Перевод компонента завершён

76

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

77

Распространённое изменение

78

Файл загружен

79

Обновлены дополнительные флаги

80

Шрифт загружен

81

Шрифт изменён

82

Шрифт удалён

83

Принудительная синхронизация переводов

84

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

85

Снимок экрана удалён

86

Метка добавлена

87

Метка удалена

88

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

Формат файла

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

appstore

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

arb

Файл ARB

aresource

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

ass

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

catkeys

Haiku catkeys

cmp-resource

Ресурс Compose Multiplatform

csv

Файл CSV

csv-multi-utf-8

Многозначный CSV-файл (UTF-8)

csv-simple

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

csv-simple-iso

Простой CSV файл (ISO-8859-1)

csv-simple-utf-8

Простой CSV файл (UTF-8)

csv-utf-8

Файл CSV (UTF-8)

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 (UTF-8)

gwt-iso

Параметры GWT (ISO-8859-1)

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

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 (ISO 8859-1)

properties-utf16

Параметры Java (UTF-16)

properties-utf8

Параметры Java (UTF-8)

rc

Файл RC

resjson

RESJSON-файл

resourcedictionary

Файл ResourceDictionary

resx

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

ruby-yaml

Файл YAML Ruby

srt

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

ssa

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

strings

Строки iOS (UTF-16)

strings-utf8

Строки iOS (UTF-8)

stringsdict

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

sub

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

tbx

Файл TermBase eXchange

toml

Файл TOML

ts

Файл перевода Qt Linguist

txt

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

webextension

JSON-файл WebExtension

xliff

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

xliff2

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

xliff2-placeables

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

xlsx

Excel Open XML

xwiki-fullpage

XWiki Full Page

xwiki-java-properties

XWiki Java Properties

xwiki-page-properties

XWiki Page Properties

yaml

Файл YAML

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

Список надстроек настраивается параметром 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"

Инструкции по установке смотрите в разделе Custom quality checks, add-ons, automatic suggestions and auto-fixes.

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

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

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.