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

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

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

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

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

#
# Copyright © 2012–2022 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#

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

Adjust checks behavior to be case-insensitive. Currently affects only Символы-заполнители quality check.

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.

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

Примечание

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

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

Добавлено в версии 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 © 2012–2022 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#
"""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 © 2012–2022 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#
"""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