Проверки и исправления¶
Пользовательские автоматические исправления¶
Также в дополнение к стандартным вы можете реализовать своё собственное автоматическое исправление и включить его в список 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
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, смотрите раздел Пользовательские проверки качества, надстройки и автоматические исправления.
Настройка поведения с помощью флагов¶
Вы можете точно настроить поведение Weblate с помощью флагов. Флаги обеспечивают визуальную обратную связь с переводчиками и помогают им улучшить свой перевод. Флаги собраны из следующих источников:
Исходная строка, см. Дополнительная информация об исходных строках.
Флаги для каждой строки, извлекаемые из формата файла, см. Поддерживаемые форматы файлов.
Флаги перевода (в настоящее время только флаг
read-only«только для чтения» для двуязычной исходной строки).Флаги, специфичные для формата файла.
Флаги разделяются запятыми; если они имеют параметры, то разделяются двоеточием. Для включения в строку пробелов или специальных символов можно использовать кавычки. Например:
placeholders:"special:value":"other value", regex:.*
Можно использовать как двойные, так и одинарные кавычки — специальные символы экранируются с помощью обратной косой черты:
placeholders:"quoted \"string\"":'single \'quoted\''
placeholders:r"^#*"
Чтобы убедиться, что переводчики не меняют заголовок документа Markdown: Неудачная проверка будет запущена, если строка «### Index» переведена как «# Indice»
placeholders:r"\]\([^h].*?\)"
Чтобы убедиться, что внутренние ссылки не переводятся (т.е. «[испытание] (../проверки)» не становится «[испытание] (../чекеос)».
Вот список принимаемых в настоящее время флагов:
rst-textРассматривать текст как документ reStructuredText, влияет на проверку Перевод без изменения.
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:ШРИФТОпределяет семейство шрифтов для проверок отрисовки текста, смотрите раздел Управление шрифтами.
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Сделать так, чтобы проверка «Перевод без изменения» не использовал встроенный чёрного список слов, смотреть раздел Перевод без изменения.
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-formatEnable the Формат скобок Perl quality check.
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Игнорировать проверки качества.
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-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-formatSkip the Формат скобок Perl quality check.
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-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-icu-message-format-syntaxПропустите проверку качества Синтаксис ICU MessageFormat.
ignore-long-untranslatedПропустите проверку качества Давно не переводилась.
ignore-multiple-failuresПропустите проверку качества Множество неудачных проверок.
ignore-unnamed-formatПропустите проверку качества Несколько переменных без названий.
ignore-optional-pluralПропустите проверку качества Формы единственного числа.
Примечание
В общем случае правило называется ignore-* для любой проверки, где вместо звёздочки подставляется её идентификатор, так что вы можете использовать такое правило даже для своих собственных проверок.
Эти флаги понимаются как в параметрах компонента, так и в параметрах исходной строки или в самом файле перевода (например, в файле GNU gettext).
Принудительные проверки¶
Вы можете настроить список проверок, которые нельзя проигнорировать, задав в Настройки компонента параметр Принудительная проверка. Все перечисленные проверки не смогут быть отклонены из пользовательского интерфейса, и любая строка, не прошедшая эту проверку, помечается флагом На правку (смотрите раздел Состояния перевода).
Примечание
Включение принудительной проверки не делает её автоматической. Проверку можно включить, добавив соответствующий флаг к флагам строки или компонента.
Управление шрифтами¶
Подсказка
Загруженные в Weblate шрифты используются исключительно для проверки максимального размера перевода; на пользовательский интерфейс они никак не влияют.
Проверке Максимальный размер перевода, которая вычисляет размер текста в пикселях после его отрисовки требуется, чтобы соответствующий шрифт был загружен в Weblate. Его также необходимо выбрать с помощью флагов перевода (смотреть раздел Настройка поведения с помощью флагов).
Загрузить шрифты в Weblate и управлять ими можно в пункте Шрифты меню Управлять вашего проекта перевода. Создайте группы шрифтов и используйте их в проверках. Поддерживаются шрифты TrueType и OpenType.
Группы шрифтов позволяют вам определить различные шрифты для разных языков, что обычно необходимо для языков, алфавит которых не использует латиницу:
Группы шрифтов идентифицируются по имени, которое не может содержать пробелы или специальные символы, так что их можно легко использовать в определении проверки:
Семейство и начертание шрифта распознаются автоматически после его загрузки:
Вы можете загрузить в Weblate несколько шрифтов:
Чтобы использовать шрифты в проверке длины строки, передайте проверке соответствующие флаги (смотрите раздел Настройка поведения с помощью флагов). Скорее всего, вам понадобятся следующие из них:
max-size:500/max-size:300:5Defines maximal width in pixels and, optionally, the maximum number of lines (word wrapping is applied).
font-family:ubuntuОпределяет используемую группу шрифтов путем указания ее идентификатора.
font-size:22Определяет размер шрифта в пикселях.
Написание собственных проверок¶
Хотя в Weblate встроен широкий спектр проверок качества (смотрите раздел Проверки качества), они могут охватывать не всё, что вы хотите проверить. Список выполняемых проверок можно настроить с помощью параметра CHECK_LIST, кроме того, вы можете добавить собственные проверки.
Создайте подкласс weblate.checks.Check
Установите несколько атрибутов.
Реализуйте либо метод
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
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
Проверка того, что в переводе на чешский язык формы множественного числа отличаются друг от друга¶
Проверка использует информацию о языке, чтобы проверить, что две формы множественного числа в чешском языке не являются одинаковыми.
# 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
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