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

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

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

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

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

#
# Copyright © 2012 - 2020 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:.*

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

rst-text

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

md-text

Рассматривать текст как документ Markdown.

dos-eol

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

url

Строка должна состоять только из URL-адреса.

safe-html

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

read-only

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

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

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

placeholders:NAME

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

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

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

regex:REGEX

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

python-format, c-format, php-format, python-brace-format, javascript-format, c-sharp-format, java-format, java-messageformat, auto-java-messageformat, qt-format, qt-plural-format, ruby-format, vue-format

Рассматривает все строки как строки формата, влияет на проверки Форматированные строки, Форматированные строки, Форматированные строки, Форматированные строки, Форматированные строки, Форматированные строки, Форматированные строки, Форматированные строки, Форматированные строки, Форматированные строки, Форматированные строки, Форматированные строки и Перевод без изменения.

strict-same

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

ignore-bbcode

Пропускает проверку качества «BBcode-разметка».

ignore-duplicate

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

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

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

ignore-java-messageformat

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

ignore-javascript-format

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

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-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-long-untranslated

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

ignore-multiple-failures

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

ignore-unnamed-format

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

ignore-optional-plural

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

Примечание

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

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

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

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

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

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

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

Проверке Максимальный размер перевода для вычисления размеров отрисовываемого текста требуется предоставить информацию о шрифте, что можно сделать в 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 - 2020 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 - 2020 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