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

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

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

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

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

# Copyright © Michal Čihař <michal@weblate.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later

from django.utils.translation import gettext_lazy as _

from weblate.trans.autofixes.base import AutoFix


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

    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\''

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

rst-text

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

dos-eol

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

read-only

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

priority:N

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

max-length:N

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

xml-text

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

font-family:ШРИФТ

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

font-weight:НАСЫЩЕННОСТЬ

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

font-size:РАЗМЕР

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

font-spacing:ШИРИНА

Определяет ширину межбуквенных интервалов (свойство letter-spacing) для проверок отрисовки текста, смотрите раздел Управление шрифтами.

icu-flags:ФЛАГИ

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

icu-tag-prefix:ПРЕФИКС

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

placeholders:СТРОКА:СТРОКА2:...

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

replacements:С:НА:С2:НА2...

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

variants:ИСТОЧНИК

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

regex:РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ

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

forbidden

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

strict-same

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

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

case-insensitive

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

safe-html

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

url

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

ignore-all-checks

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

ignore-bbcode

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

ignore-duplicate

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

ignore-check-glossary

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

ignore-double-space

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

ignore-angularjs-format

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

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

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

ignore-java-printf-format

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

ignore-javascript-format

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

ignore-lua-format

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

ignore-object-pascal-format

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

ignore-percent-placeholders

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

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

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

ignore-end-semicolon

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

ignore-newline-count

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

ignore-plurals

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

ignore-placeholders

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

ignore-punctuation-spacing

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

ignore-regex

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

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-icu-message-format-syntax

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

ignore-long-untranslated

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

ignore-multiple-failures

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

ignore-unnamed-format

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

ignore-optional-plural

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

Примечание

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

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

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

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

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

Примечание

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

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

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

Подсказка

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

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

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

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

../_images/font-group-edit.png

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

../_images/font-group-list.png

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

../_images/font-edit.png

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

../_images/font-list.png

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

max-size:500

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

font-family:ubuntu

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

font-size:22

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

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

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

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

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

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

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

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

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

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

# Copyright © Michal Čihař <michal@weblate.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later

"""Simple quality check example."""

from django.utils.translation import gettext_lazy as _

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 = _("Foo check")

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

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

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

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

# Copyright © Michal Čihař <michal@weblate.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later

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

from django.utils.translation import gettext_lazy as _

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 = _("Foo check")

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

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

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