Проверки и исправления

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

Также в дополнение к стандартным вы можете реализовать своё собственное автоматическое исправление и включить его в список AUTOFIX_LIST.

Автоматические исправления — это очень мощный инструмент, но они могут повредить перевод; будьте осторожны при их написании.

Например, следующее автоматическое исправление заменит каждое появление строки foo в переводе на строку bar:

from weblate.trans.autofixes.base import AutoFix


class ReplaceFooWithBar(AutoFix):
    """Replace foo with bar."""

    # Might be localized using gettext_lazy
    name = "Foobar"

    def fix_single_target(self, target, source, unit):
        if "foo" in target:
            return target.replace("foo", "bar"), True
        return target, False

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

Настройка поведения с помощью флагов

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

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

placeholders:"special:value":"other value", regex:.*

Можно использовать как двойные, так и одинарные кавычки — специальные символы экранируются с помощью обратной косой черты:

placeholders:"quoted \"string\"":'single \'quoted\''
placeholders:r"^#*"

Проверяет, что переводчики не меняют заголовок документа Markdown. Неудачная проверка будет вызвана, если строка ### Index переведена как # Indice.

placeholders:r"\]\([^h].*?\)"

Чтобы убедиться, что внутренние ссылки не переводятся (т.е. «[испытание] (../проверки)» не становится «[испытание] (../чекеос)».

Флаги, определённые на более высоком уровне, можно снять с помощью синтаксиса discard:NAME. Например, если компонент настроен на safe-html, вы можете добавить discard:safe-html к строковым флагам, чтобы пропустить его для данной строки.

Вот список принимаемых в настоящее время флагов:

read-only

Строка доступна только для чтения и не должна редактироваться в Weblate, смотрите проверку Строки только для чтения.

terminology

Используется в Словарь. Копирует строку во все языки словаря, чтобы её можно было использовать во всех переводах. Также полезно в сочетании с read-only (только для чтения), например, в названиях продуктов.

priority:N

Приоритет строки. Строки с более высоким приоритетом предлагаются на перевод первыми. По умолчанию приоритет равен 100, чем выше приоритет строки, тем раньше она будет предложена для перевода.

max-length:N

Ограничить максимальную длину строки N символами, смотрите проверку Максимальная длина перевода.

xml-text

Рассматривать текст как документ XML, влияет на проверки Синтаксис XML и XML-разметка.

font-family:NAME

Определяет семейство шрифтов для проверок отрисовки текста, смотрите раздел Управление шрифтами.

font-weight:WEIGHT

Определите насыщенность шрифта (font-weight) для отрисовки проверок, см. Управление шрифтами.

font-size:SIZE

Определите размер шрифта (font-size) для отрисовки проверок, см. Управление шрифтами.

font-spacing:SPACING

Определите межбуквенный интервал для отрисовки проверок, см. Управление шрифтами.

icu-flags:FLAGS

Определите флаги для настройки поведения проверки качества ICU MessageFormat.

icu-tag-prefix:PREFIX

Установите необходимый префикс для XML-тегов для проверки качества ICU MessageFormat.

placeholders:NAME:NAME2:...

Ожидаемые в переводе строки-заполнители, смотрите проверку Символы-заполнители.

replacements:FROM:TO:FROM2:TO2...

Замены, выполняемые при проверке параметров результирующего текста (например, в проверках Максимальный размер перевода или Максимальная длина перевода). Типовой случай использования этот флага — подстановка конкретных значений вместо заполнителей, чтобы гарантировать, что текст впишется в отведённые ему границы даже при использовании длинных строк, например: replacements:%s:"Джон Доу".

variants:SOURCE

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

regex:REGEX

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

discard:NAME

Отменяет флаг, определенный на более высоком уровне.

forbidden

Используется для пометки переводов в словаре как нежелательных, см. раздел Нежелательные переводы.

strict-same

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

strict-format

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

case-insensitive

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

bbcode-text

Обрабатывает текст как документ Bulletin Board Code (BBCode), влияет на Перевод без изменения. Включает проверку качества BBCode-разметка.

check-glossary

Включает проверку качества Не соответствует словарю.

fluent-parts

Включает проверку качества Части Fluent.

fluent-references

Включает проверку качества Ссылки Fluent.

fluent-target-inner-html

Включает проверку качества Внутренний HTML Fluent перевода.

fluent-target-syntax

Включает проверку качества Синтаксис перевода Fluent.

angularjs-format

Включает проверку качества Интерполяционная строка AngularJS.

automattic-components-format

Включает проверку качества Автоматическое форматирование компонентов.

c-format

Включает проверку качества C-формат.

c-sharp-format

Включает проверку качества C#-формат.

csharp-format

Включает проверку качества C#-формат.

es-format

Включает проверку качества Шаблонные литералы ECMAScript.

i18next-interpolation

Включает проверку качества Интерполяция i18next.

icu-message-format

Включает проверки качества ICU MessageFormat и Синтаксис ICU MessageFormat.

java-printf-format

Включает проверку качества Java-формат.

java-format

Включает проверку качества Java MessageFormat.

auto-java-messageformat

Обрабатывать текст как условный Java MessageFormat, включая Java MessageFormat только тогда, когда исходный текст содержит заполнители Java MessageFormat. Включает проверку качества Java MessageFormat.

javascript-format

Включает проверку качества JavaScript-формат.

laravel-format

Включает проверку качества Laravel-формат.

lua-format

Включает проверку качества Lua-формат.

object-pascal-format

Включает проверку качества Формат Object Pascal.

objc-format

Включает проверку качества Формат Objective-C.

percent-placeholders

Включает проверку качества Символы-заполнители в процентной нотации.

perl-brace-format

Включает проверку качества Формат скобок Perl.

perl-format

Включает проверку качества Perl-формат.

php-format

Включает проверку качества PHP- формат.

python-brace-format

Включает проверку качества Python-формат: фигурные скобки.

python-format

Включает проверку качества Python-формат.

qt-format

Включает проверку качества Qt-формат.

qt-plural-format

Включает проверку качества Формат множественного числа Qt.

ruby-format

Включает проверку качества Ruby-формат.

scheme-format

Включает проверку качества Формат схемы.

vue-format

Включает проверку качества Форматирование Vue I18n.

rst-text

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

md-text

Обрабатывает текст как документ Markdown и обеспечивает подсветку синтаксиса Markdown в области текста перевода. Включает проверки качества Ссылки Markdown, Сноски Markdown и Синтаксис Markdown.

max-length

Включает проверку качества Максимальная длина перевода.

max-size

Включает проверку качества Максимальный размер перевода.

placeholders

Включает проверку качества Символы-заполнители.

regex

Включает проверку качества Регулярное выражение.

safe-html

Включает проверку качества Небезопасный HTML-код.

auto-safe-html

Обрабатывать текст как условный HTML, включая Небезопасный HTML-код только для обычного текста или исходных строк, содержащих стандартную HTML-разметку или допустимые пользовательские элементы. Это полезно для расширенных вариантов Markdown, таких как MDX, где синтаксис с угловыми скобками может не быть HTML. Включает проверку качества Небезопасный HTML-код.

url

Строка должна состоять только из URL-адреса. Включает проверку качества URL-адреса.

fluent-source-inner-html

Включает проверку качества Исходный внутренний HTML Fluent.

fluent-source-syntax

Включает проверку качества Синтаксис исходного кода Fluent.

ignore-all-checks

Игнорировать проверки качества.

ignore-bbcode

Пропустите проверку качества BBCode-разметка.

ignore-xml-chars-around-tags

Пропустить проверку качества Символы вокруг XML-тегов.

ignore-duplicate

Пропустите проверку качества Повторяющиеся слова.

ignore-check-glossary

Пропустите проверку качества Не соответствует словарю.

ignore-double-space

Пропустите проверку качества Двойной пробел.

ignore-fluent-parts

Пропустите проверку качества Части Fluent.

ignore-fluent-references

Пропустите проверку качества Ссылки Fluent.

ignore-fluent-target-inner-html

Пропустите проверку качества Внутренний HTML Fluent перевода.

ignore-fluent-target-syntax

Пропустите проверку качества Синтаксис перевода Fluent.

ignore-angularjs-format

Пропустите проверку качества Интерполяционная строка AngularJS.

ignore-automattic-components-format

Пропустите проверку качества Автоматическое форматирование компонентов.

ignore-c-format

Пропустите проверку качества C-формат.

ignore-c-sharp-format

Пропустите проверку качества C#-формат.

ignore-es-format

Пропустите проверку качества Шаблонные литералы ECMAScript.

ignore-i18next-interpolation

Пропустите проверку качества Интерполяция i18next.

ignore-icu-message-format

Пропустите проверку качества ICU MessageFormat.

ignore-java-printf-format

Пропустите проверку качества Java-формат.

ignore-java-format

Пропустите проверку качества Java MessageFormat.

ignore-javascript-format

Пропустите проверку качества JavaScript-формат.

ignore-laravel-format

Пропустить проверку качества Laravel-формат.

ignore-lua-format

Пропустите проверку качества Lua-формат.

ignore-object-pascal-format

Пропустите проверку качества Формат Object Pascal.

ignore-objc-format

Пропустить проверку качества Формат Objective-C.

ignore-percent-placeholders

Пропустите проверку качества Символы-заполнители в процентной нотации.

ignore-perl-brace-format

Пропустите проверку качества Формат скобок Perl.

ignore-perl-format

Пропустите проверку качества Perl-формат.

ignore-php-format

Пропустите проверку качества PHP- формат.

ignore-python-brace-format

Пропустите проверку качества Python-формат: фигурные скобки.

ignore-python-format

Пропустите проверку качества Python-формат.

ignore-qt-format

Пропустите проверку качества Qt-формат.

ignore-qt-plural-format

Пропустите проверку качества Формат множественного числа Qt.

ignore-ruby-format

Пропустите проверку качества Ruby-формат.

ignore-scheme-format

Пропустите проверку качества Формат схемы.

ignore-vue-format

Пропустите проверку качества Форматирование Vue I18n.

ignore-translated

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

ignore-inconsistent

Пропустите проверку качества Противоречия.

ignore-rst-references

Пропустите проверку качества Противоречивый reStructuredText.

ignore-kashida

Пропустите проверку качества Используется кашида.

ignore-md-link

Пропустите проверку качества Ссылки Markdown.

ignore-md-reflink

Пропустите проверку качества Сноски Markdown.

ignore-md-syntax

Пропустите проверку качества Синтаксис Markdown.

ignore-max-length

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

ignore-max-size

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

ignore-escaped-newline

Пропустите проверку качества Несовпадающие \n.

ignore-end-colon

Пропустите проверку качества Несовпадающие двоеточия.

ignore-end-ellipsis

Пропустите проверку качества Несовпадающие многоточия.

ignore-end-exclamation

Пропустите проверку качества Несовпадающие восклицательные знаки.

ignore-end-stop

Пропустите проверку качества Несовпадающие точки.

ignore-end-interrobang

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

ignore-end-question

Пропустите проверку качества Несовпадающие вопросительные знаки.

ignore-end-semicolon

Пропустите проверку качества Несовпадающие точки с запятой.

ignore-newline-count

Пропустите проверку качества Несовпадающие переводы строк.

ignore-plurals

Пропустите проверку качества Нет форм множественного числа.

ignore-multiple-capital

Пропустить проверку качества Несколько заглавных.

ignore-kabyle-characters

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

ignore-placeholders

Пропустите проверку качества Символы-заполнители.

ignore-prohibited-initial-character

Пропустите проверку качества Запрещённый начальный символ.

ignore-punctuation-spacing

Пропустите проверку качества Пробелы и пунктуация.

ignore-regex

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

ignore-rst-syntax

Пропустите проверку качества Ошибка синтаксиса reStructuredText.

ignore-reused

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

ignore-same-plurals

Пропустите проверку качества Одинаковые формы множественного числа.

ignore-begin-newline

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

ignore-begin-space

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

ignore-end-newline

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

ignore-end-space

Пропустите проверку качества Пробелы в конце.

ignore-same

Пропустите проверку качества Перевод без изменения.

ignore-safe-html

Пропустите проверку качества Небезопасный HTML-код.

ignore-url

Пропустите проверку качества URL-адреса.

ignore-xml-tags

Пропустите проверку качества XML-разметка.

ignore-xml-invalid

Пропустите проверку качества Синтаксис XML.

ignore-zero-width-space

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

ignore-ellipsis

Пропустите проверку качества Многоточие.

ignore-fluent-source-inner-html

Пропустите проверку качества Исходный внутренний HTML Fluent.

ignore-fluent-source-syntax

Пропустите проверку качества Синтаксис исходного кода Fluent.

ignore-icu-message-format

Пропустите проверку качества Синтаксис ICU MessageFormat.

ignore-long-untranslated

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

ignore-multiple-failures

Пропустите проверку качества Множество неудачных проверок.

ignore-unnamed-format

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

ignore-optional-plural

Пропустите проверку качества Формы единственного числа.

Примечание

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

Эти флаги распознаются как в настройках Настройки компонента, так и в настройках отдельных исходных строк, а также в самом файле перевода (например, в GNU gettext).

Флаги, основанные на расположении

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

  • rst-text: Этот флаг автоматически добавляется к строкам в файлах reStructuredText, если расширение расположения - .rst.

  • md-text: Этот флаг автоматически добавляется к строкам в файлах Markdown и MDX, если расширением местоположения является .md, .markdown или .mdx.

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

Принудительные проверки не могут быть отклонены и помечены как Needs editing (см. Состояния перевода). Это мешает переводчикам скрывать такие чеки.

Подсказка

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

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

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

Управление шрифтами

Подсказка

Шрифты, загруженные в Weblate, используются исключительно для проверки Максимальный размер перевода; на пользовательский интерфейс Weblate они не влияют.

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

Инструмент управления шрифтами Weblate находится в разделе Шрифты меню Управление вашего проекта перевода и предоставляет интерфейс для загрузки шрифтов и управления ими. Можно загружать шрифты TrueType или OpenType, создавать группы шрифтов и использовать их в проверке.

Группы шрифтов позволяют вам определить различные шрифты для разных языков, что обычно необходимо для языков, алфавит которых не использует латиницу:

../_images/font-group-edit.webp

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

../_images/font-group-list.webp

Font-family and style are automatically recognized after uploading them:

../_images/font-edit.webp

Вы можете загрузить в Weblate несколько шрифтов:

../_images/font-list.webp

Чтобы использовать шрифты в проверке длины строки, передайте проверке соответствующие флаги (смотрите раздел Настройка поведения с помощью флагов). Скорее всего, вам понадобятся следующие из них:

max-size:500 / max-size:300:5

Определяет максимальную ширину в пикселях и, при необходимости, максимальное количество строк (применяется перенос слов).

font-family:ubuntu

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

font-size:22

Определяет размер шрифта в пикселях.

Написание собственных проверок

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

  1. Создайте подкласс weblate.checks.Check

  2. Установите несколько атрибутов.

  3. Реализуйте либо метод check (если вы хотите работать в своём коде с формами множественного числа), либо метод check_single (который сам выполняет такую обработку).

Несколько примеров:

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

Проверка, что текст перевода не содержит подстроки «foo»

Это довольно простая проверка, которая просто проверяет, не пропущена ли в переводе строка «foo».

"""Simple quality check example."""

from django.utils.translation import gettext_lazy

from weblate.checks.base import TargetCheck


class FooCheck(TargetCheck):
    # Used as identifier for check, should be unique
    # Has to be shorter than 50 characters
    check_id = "foo"

    # Short name used to display failing check
    # Might be localized using gettext_lazy
    name = "Foo check"

    # Description for failing check
    description = gettext_lazy("Your translation is foo")

    # Real check code
    def check_single(self, source, target, unit):
        return "foo" in target

Проверка того, что в переводе на чешский язык формы множественного числа отличаются друг от друга

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

"""Quality check example for Czech plurals."""

from django.utils.translation import gettext_lazy

from weblate.checks.base import TargetCheck


class PluralCzechCheck(TargetCheck):
    # Used as identifier for check, should be unique
    # Has to be shorter than 50 characters
    check_id = "foo"

    # Short name used to display failing check
    # Might be localized using gettext_lazy
    name = "Foo check"

    # Description for failing check
    description = gettext_lazy("Your translation is foo")

    # Real check code
    def check_target_unit(self, sources, targets, unit):
        if unit.translation.language.is_base({"cs"}):
            return targets[1] == targets[2]
        return False

    def check_single(self, source, target, unit) -> bool:
        """We don't check target strings here."""
        return False