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

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

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

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

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

from django.utils.translation import gettext_lazy

from weblate.trans.autofixes.base import AutoFix


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

    name = gettext_lazy("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"^#*"

To verify that translators do not change the heading of a Markdown document. A failing check will be triggered if the string ### Index is translated as # Indice.

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

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

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

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

rst-text

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

bbcode-text

Рассматривать текст как документ Bulletin Board Code (BBCode), влияет на проверку Перевод без изменения.

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

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

check-glossary

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

angularjs-format

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

c-format

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

c-sharp-format

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

es-format

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

i18next-interpolation

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

icu-message-format

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

java-printf-format

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

java-format

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

javascript-format

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

lua-format

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

object-pascal-format

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

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.

md-text

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

case-insensitive

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

safe-html

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

url

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

ignore-all-checks

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

fluent-source-inner-html

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

fluent-source-syntax

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

icu-message-format

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

ignore-bbcode

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

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-lua-format

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

ignore-object-pascal-format

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

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

These flags are understood both in Настройки компонента settings, per source string settings and in the translation file itself (for example in GNU gettext).

Location-based flags

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

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

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

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

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

Подсказка

Turning on check enforcing doesn’t enable it automatically. Some checks have to be turned on by adding the corresponding flag to the string or component flags.

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

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

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

Подсказка

Fonts uploaded into Weblate are used purely for purposes of the Максимальный размер перевода check, they do not have an effect in Weblate user interface.

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

Weblate font management tool in Fonts under the Operations menu of your translation project provides interface to upload and manage fonts. TrueType or OpenType fonts can be uploaded, set up font-groups and use those in the check.

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

../_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
    name = gettext_lazy("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
    name = gettext_lazy("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