Проверки и исправления¶
Пользовательские автоматические исправления¶
Также в дополнение к стандартным вы можете реализовать своё собственное автоматическое исправление и включить его в список AUTOFIX_LIST.
Автоматические исправления — это очень мощный инструмент, но они могут повредить перевод; будьте осторожны при их написании.
Например, следующее автоматическое исправление заменит каждое появление строки foo в переводе на строку bar:
from weblate.trans.autofixes.base import AutoFix
class ReplaceFooWithBar(AutoFix):
"""Replace foo with bar."""
# Might be localized using gettext_lazy
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 с помощью флагов. Флаги обеспечивают визуальную обратную связь с переводчиками и помогают им улучшить свой перевод. Флаги собраны из следующих источников:
Дополнительные флаги исходной строки:
Дополнительная информация об исходных строках описывает ручное редактирование.
Массовая правка может использоваться для нанесения флагов в партии.
Дополнение Массовая правка может автоматически применять флаги.
Флаги для каждой строки, извлекаемые из формата файла, см. Форматы файлов локализации.
Флаги перевода (в настоящее время только флаг
read-onlyдля двуязычной исходной строки или когда редактирование одноязычного шаблона отключено).Флаги, специфичные для формата файла.
Флаги разделяются запятыми; если они имеют параметры, то разделяются двоеточием. Для включения в строку пробелов или специальных символов можно использовать кавычки. Например:
placeholders:"special:value":"other value", regex:.*
Можно использовать как двойные, так и одинарные кавычки — специальные символы экранируются с помощью обратной косой черты:
placeholders:"quoted \"string\"":'single \'quoted\''
placeholders:r"^#*"
Проверяет, что переводчики не меняют заголовок документа Markdown. Неудачная проверка будет вызвана, если строка ### Index переведена как # Indice.
placeholders:r"\]\([^h].*?\)"
Чтобы убедиться, что внутренние ссылки не переводятся (т.е. «[испытание] (../проверки)» не становится «[испытание] (../чекеос)».
Флаги, определённые на более высоком уровне, можно снять с помощью синтаксиса discard:NAME. Например, если компонент настроен на safe-html, вы можете добавить discard:safe-html к строковым флагам, чтобы пропустить его для данной строки.
Вот список принимаемых в настоящее время флагов:
read-onlyСтрока доступна только для чтения и не должна редактироваться в Weblate, смотрите проверку Строки только для чтения.
terminologyИспользуется в Словарь. Копирует строку во все языки словаря, чтобы её можно было использовать во всех переводах. Также полезно в сочетании с
read-only(только для чтения), например, в названиях продуктов.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Определите межбуквенный интервал для отрисовки проверок, см. Управление шрифтами.
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Заставьте Перевод без изменения избегать использования встроенных исключений слов.
strict-formatСделать так, чтобы проверка формата заставляла использовать формат даже для множественных форм с одним значением, см. Форматированные строки.
case-insensitiveНастройте поведение проверок так, чтобы они были нечувствительны к регистру. В настоящее время влияет только на проверку качества Символы-заполнители.
bbcode-textОбрабатывает текст как документ Bulletin Board Code (BBCode), влияет на Перевод без изменения. Включает проверку качества BBCode-разметка.
check-glossaryВключает проверку качества Не соответствует словарю.
fluent-partsВключает проверку качества Части Fluent.
fluent-referencesВключает проверку качества Ссылки Fluent.
fluent-target-inner-htmlВключает проверку качества Внутренний HTML Fluent перевода.
fluent-target-syntaxВключает проверку качества Синтаксис перевода Fluent.
angularjs-formatВключает проверку качества Интерполяционная строка AngularJS.
automattic-components-formatВключает проверку качества Автоматическое форматирование компонентов.
c-formatВключает проверку качества C-формат.
c-sharp-formatВключает проверку качества C#-формат.
csharp-formatВключает проверку качества C#-формат.
es-formatВключает проверку качества Шаблонные литералы ECMAScript.
i18next-interpolationВключает проверку качества Интерполяция i18next.
icu-message-formatВключает проверки качества ICU MessageFormat и Синтаксис ICU MessageFormat.
java-printf-formatВключает проверку качества Java-формат.
java-formatВключает проверку качества Java MessageFormat.
auto-java-messageformatОбрабатывать текст как условный Java MessageFormat, включая Java MessageFormat только тогда, когда исходный текст содержит заполнители Java MessageFormat. Включает проверку качества Java MessageFormat.
javascript-formatВключает проверку качества JavaScript-формат.
laravel-formatВключает проверку качества Laravel-формат.
lua-formatВключает проверку качества Lua-формат.
object-pascal-formatВключает проверку качества Формат Object Pascal.
objc-formatВключает проверку качества Формат Objective-C.
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.
rst-textОбрабатывает текст как документ reStructuredText, влияет на Перевод без изменения. Включает проверки качества Противоречивый reStructuredText и Ошибка синтаксиса reStructuredText.
md-textОбрабатывает текст как документ Markdown и обеспечивает подсветку синтаксиса Markdown в области текста перевода. Включает проверки качества Ссылки Markdown, Сноски Markdown и Синтаксис Markdown.
max-lengthВключает проверку качества Максимальная длина перевода.
max-sizeВключает проверку качества Максимальный размер перевода.
placeholdersВключает проверку качества Символы-заполнители.
regexВключает проверку качества Регулярное выражение.
safe-htmlВключает проверку качества Небезопасный HTML-код.
auto-safe-htmlОбрабатывать текст как условный HTML, включая Небезопасный HTML-код только для обычного текста или исходных строк, содержащих стандартную HTML-разметку или допустимые пользовательские элементы. Это полезно для расширенных вариантов Markdown, таких как MDX, где синтаксис с угловыми скобками может не быть HTML. Включает проверку качества Небезопасный HTML-код.
urlСтрока должна состоять только из URL-адреса. Включает проверку качества URL-адреса.
fluent-source-inner-htmlВключает проверку качества Исходный внутренний HTML Fluent.
fluent-source-syntaxВключает проверку качества Синтаксис исходного кода Fluent.
ignore-all-checksИгнорировать проверки качества.
ignore-bbcodeПропустите проверку качества BBCode-разметка.
ignore-xml-chars-around-tagsПропустить проверку качества Символы вокруг XML-тегов.
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-laravel-formatПропустить проверку качества Laravel-формат.
ignore-lua-formatПропустите проверку качества Lua-формат.
ignore-object-pascal-formatПропустите проверку качества Формат Object Pascal.
ignore-objc-formatПропустить проверку качества Формат Objective-C.
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-multiple-capitalПропустить проверку качества Несколько заглавных.
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-* для любой проверки, где вместо звёздочки подставляется её идентификатор, так что вы можете использовать такое правило даже для своих собственных проверок.
Эти флаги распознаются как в настройках Настройки компонента, так и в настройках отдельных исходных строк, а также в самом файле перевода (например, в GNU gettext).
Флаги, основанные на расположении¶
Некоторые флаги добавляются к строкам по умолчанию в зависимости от их расположения. Это означает, что определённые флаги будут автоматически включены в зависимости от того, где используется строка.
rst-text: Этот флаг автоматически добавляется к строкам в файлах reStructuredText, если расширение расположения -.rst.md-text: Этот флаг автоматически добавляется к строкам в файлах Markdown и MDX, если расширением местоположения является.md,.markdownили.mdx.
Принудительные проверки¶
Принудительные проверки не могут быть отклонены и помечены как Needs editing (см. Состояния перевода). Это мешает переводчикам скрывать такие чеки.
Подсказка
Включение принудительной проверки не включает её автоматически. Некоторые проверки следует включать, добавляя соответствующий флаг к флагам строки или компонента.
Этот подход лучше всего использовать для проверок, которые могут вызвать серьёзные проблемы, например, для Форматированные строки. Не рекомендуется использовать для проверок стиля, таких как Перевод без изменения, поскольку иногда в таких случаях игнорирование является разумным подходом.
Затем Фильтр качества перевода можно использовать для исключения из передачи в систему контроля версий строк, требующих редактирования.
Управление шрифтами¶
Подсказка
Шрифты, загруженные в Weblate, используются исключительно для проверки Максимальный размер перевода; на пользовательский интерфейс Weblate они не влияют.
Проверке Максимальный размер перевода, которая вычисляет размер текста в пикселях после его отрисовки требуется, чтобы соответствующий шрифт был загружен в Weblate. Его также необходимо выбрать с помощью флагов перевода (смотреть раздел Настройка поведения с помощью флагов).
Инструмент управления шрифтами Weblate находится в разделе Шрифты меню Управление вашего проекта перевода и предоставляет интерфейс для загрузки шрифтов и управления ими. Можно загружать шрифты TrueType или OpenType, создавать группы шрифтов и использовать их в проверке.
Группы шрифтов позволяют вам определить различные шрифты для разных языков, что обычно необходимо для языков, алфавит которых не использует латиницу:
Группы шрифтов идентифицируются по имени, которое не может содержать пробелы или специальные символы, так что их можно легко использовать в определении проверки:
Font-family and style are automatically recognized after uploading them:
Вы можете загрузить в Weblate несколько шрифтов:
Чтобы использовать шрифты в проверке длины строки, передайте проверке соответствующие флаги (смотрите раздел Настройка поведения с помощью флагов). Скорее всего, вам понадобятся следующие из них:
max-size:500/max-size:300:5Определяет максимальную ширину в пикселях и, при необходимости, максимальное количество строк (применяется перенос слов).
font-family:ubuntuОпределяет используемую группу шрифтов путем указания ее идентификатора.
font-size:22Определяет размер шрифта в пикселях.
Написание собственных проверок¶
Хотя в Weblate встроен широкий спектр проверок качества (смотрите раздел Проверки качества), они могут охватывать не всё, что вы хотите проверить. Список выполняемых проверок можно настроить с помощью параметра CHECK_LIST, кроме того, вы можете добавить собственные проверки.
Создайте подкласс weblate.checks.Check
Установите несколько атрибутов.
Реализуйте либо метод
check(если вы хотите работать в своём коде с формами множественного числа), либо методcheck_single(который сам выполняет такую обработку).
Несколько примеров:
Для установки пользовательских проверок необходимо в списке CHECK_LIST указать полный путь к классу Python, смотрите раздел Пользовательские проверки качества, дополнения, автоматические предложения и автоисправления.
Проверка, что текст перевода не содержит подстроки «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
# Might be localized using gettext_lazy
name = "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
# Might be localized using gettext_lazy
name = "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