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

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

Также в дополнение к стандартным вы можете реализовать своё собственное автоматическое исправление и включить его в список 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, смотрите раздел Custom quality checks, add-ons, automatic suggestions and auto-fixes.

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

Вы можете точно настроить поведение 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 к строковым флагам, чтобы пропустить его для данной строки.

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

dos-eol

Использовать маркеры конца строки DOS вместо маркеров Unix (комбинацию символов \r\n вместо символа \n).

read-only

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

terminology

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

priority:N

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

max-length:N

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

xml-text

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

font-family:NAME

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

font-weight:WEIGHT

Define font-weight for rendering checks, see Управление шрифтами.

font-size:SIZE

Define font-size for rendering checks, see Управление шрифтами.

font-spacing:SPACING

Define letter spacing for rendering checks, see Управление шрифтами.

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

Make the Перевод без изменения avoid using the built-in words exceptions.

strict-format

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

case-insensitive

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

bbcode-text

Treat a text as an Bulletin Board Code (BBCode) document, affects Перевод без изменения. Enables the BBCode-разметка quality check.

check-glossary

Enables the Не соответствует словарю quality check.

fluent-parts

Enables the Части Fluent quality check.

fluent-references

Enables the Ссылки Fluent quality check.

fluent-target-inner-html

Enables the Внутренний HTML Fluent перевода quality check.

fluent-target-syntax

Enables the Синтаксис перевода Fluent quality check.

angularjs-format

Enables the Интерполяционная строка AngularJS quality check.

automattic-components-format

Enables the Автоматическое форматирование компонентов quality check.

c-format

Enables the C-формат quality check.

c-sharp-format

Enables the C#-формат quality check.

csharp-format

Enables the C#-формат quality check.

es-format

Enables the Шаблонные литералы ECMAScript quality check.

i18next-interpolation

Enables the Интерполяция i18next quality check.

icu-message-format

Enables the ICU MessageFormat and Синтаксис ICU MessageFormat quality checks.

java-printf-format

Enables the Java-формат quality check.

java-format

Enables the Java MessageFormat quality check.

auto-java-messageformat

Treat a text as conditional Java MessageFormat, enabling Java MessageFormat only when the source contains Java MessageFormat placeholders. Enables the Java MessageFormat quality check.

javascript-format

Enables the JavaScript-формат quality check.

laravel-format

Enables the Laravel-формат quality check.

lua-format

Enables the Lua-формат quality check.

object-pascal-format

Enables the Формат Object Pascal quality check.

objc-format

Enables the Формат Objective-C quality check.

percent-placeholders

Enables the Символы-заполнители в процентной нотации quality check.

perl-brace-format

Enables the Формат скобок Perl quality check.

perl-format

Enables the Perl-формат quality check.

php-format

Enables the PHP- формат quality check.

python-brace-format

Enables the Python-формат: фигурные скобки quality check.

python-format

Enables the Python-формат quality check.

qt-format

Enables the Qt-формат quality check.

qt-plural-format

Enables the Формат множественного числа Qt quality check.

ruby-format

Enables the Ruby-формат quality check.

scheme-format

Enables the Формат схемы quality check.

vue-format

Enables the Форматирование Vue I18n quality check.

rst-text

Treat a text as an reStructuredText document, affects Перевод без изменения. Enables the Противоречивый reStructuredText and Ошибка синтаксиса reStructuredText quality checks.

md-text

Treat a text as a Markdown document, and provide Markdown syntax highlighting on the translation text area. Enables the Ссылки Markdown, Сноски Markdown and Синтаксис Markdown quality checks.

max-length

Enables the Максимальная длина перевода quality check.

max-size

Enables the Максимальный размер перевода quality check.

placeholders

Enables the Символы-заполнители quality check.

regex

Enables the Регулярное выражение quality check.

safe-html

Enables the Небезопасный HTML-код quality check.

auto-safe-html

Treat a text as conditional HTML, enabling Небезопасный HTML-код only for plain text or source strings that contain standard HTML markup or valid custom elements. This is useful for extended Markdown variants such as MDX, where angle-bracket syntax may not be HTML. Enables the Небезопасный HTML-код quality check.

url

The string should consist of only a URL. Enables the URL-адреса quality check.

fluent-source-inner-html

Enables the Исходный внутренний HTML Fluent quality check.

fluent-source-syntax

Enables the Синтаксис исходного кода Fluent quality check.

ignore-all-checks

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

ignore-bbcode

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

ignore-xml-chars-around-tags

Skip the Символы вокруг XML-тегов quality check.

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

Skip the Laravel-формат quality check.

ignore-lua-format

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

ignore-object-pascal-format

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

ignore-objc-format

Skip the Формат Objective-C quality check.

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

Skip the Несколько заглавных quality check.

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, если расширение местоположения является .md или .markdown.

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

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

Подсказка

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

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

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

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

Подсказка

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

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

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

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

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

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

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

Семейство и начертание шрифта распознаются автоматически после его загрузки:

../_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, смотрите раздел Custom quality checks, add-ons, automatic suggestions and auto-fixes.

Проверка, что текст перевода не содержит подстроки «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