Проверки и исправления¶
Пользовательские автоматические исправления¶
Также в дополнение к стандартным вы можете реализовать своё собственное автоматическое исправление и включить его в список 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, смотрите раздел Custom quality checks, add-ons, automatic suggestions and auto-fixes.
Настройка поведения с помощью флагов¶
Вы можете точно настроить поведение 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 к строковым флагам, чтобы пропустить его для данной строки.
Вот список принимаемых в настоящее время флагов:
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:NAMEОпределяет семейство шрифтов для проверок отрисовки текста, смотрите раздел Управление шрифтами.
font-weight:WEIGHTDefine font-weight for rendering checks, see Управление шрифтами.
font-size:SIZEDefine font-size for rendering checks, see Управление шрифтами.
font-spacing:SPACINGDefine letter spacing for rendering checks, see Управление шрифтами.
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-sameMake the Перевод без изменения avoid using the built-in words exceptions.
strict-formatСделать так, чтобы проверка формата заставляла использовать формат даже для множественных форм с одним значением, см. Форматированные строки.
case-insensitiveНастройте поведение проверок так, чтобы они были нечувствительны к регистру. В настоящее время влияет только на проверку качества Символы-заполнители.
bbcode-textTreat a text as an Bulletin Board Code (BBCode) document, affects Перевод без изменения. Enables the BBCode-разметка quality check.
check-glossaryEnables the Не соответствует словарю quality check.
fluent-partsEnables the Части Fluent quality check.
fluent-referencesEnables the Ссылки Fluent quality check.
fluent-target-inner-htmlEnables the Внутренний HTML Fluent перевода quality check.
fluent-target-syntaxEnables the Синтаксис перевода Fluent quality check.
angularjs-formatEnables the Интерполяционная строка AngularJS quality check.
automattic-components-formatEnables the Автоматическое форматирование компонентов quality check.
c-formatEnables the C-формат quality check.
c-sharp-formatEnables the C#-формат quality check.
csharp-formatEnables the C#-формат quality check.
es-formatEnables the Шаблонные литералы ECMAScript quality check.
i18next-interpolationEnables the Интерполяция i18next quality check.
icu-message-formatEnables the ICU MessageFormat and Синтаксис ICU MessageFormat quality checks.
java-printf-formatEnables the Java-формат quality check.
java-formatEnables the Java MessageFormat quality check.
auto-java-messageformatTreat a text as conditional Java MessageFormat, enabling Java MessageFormat only when the source contains Java MessageFormat placeholders. Enables the Java MessageFormat quality check.
javascript-formatEnables the JavaScript-формат quality check.
laravel-formatEnables the Laravel-формат quality check.
lua-formatEnables the Lua-формат quality check.
object-pascal-formatEnables the Формат Object Pascal quality check.
objc-formatEnables the Формат Objective-C quality check.
percent-placeholdersEnables the Символы-заполнители в процентной нотации quality check.
perl-brace-formatEnables the Формат скобок Perl quality check.
perl-formatEnables the Perl-формат quality check.
php-formatEnables the PHP- формат quality check.
python-brace-formatEnables the Python-формат: фигурные скобки quality check.
python-formatEnables the Python-формат quality check.
qt-formatEnables the Qt-формат quality check.
qt-plural-formatEnables the Формат множественного числа Qt quality check.
ruby-formatEnables the Ruby-формат quality check.
scheme-formatEnables the Формат схемы quality check.
vue-formatEnables the Форматирование Vue I18n quality check.
rst-textTreat a text as an reStructuredText document, affects Перевод без изменения. Enables the Противоречивый reStructuredText and Ошибка синтаксиса reStructuredText quality checks.
md-textTreat a text as a Markdown document, and provide Markdown syntax highlighting on the translation text area. Enables the Ссылки Markdown, Сноски Markdown and Синтаксис Markdown quality checks.
max-lengthEnables the Максимальная длина перевода quality check.
max-sizeEnables the Максимальный размер перевода quality check.
placeholdersEnables the Символы-заполнители quality check.
regexEnables the Регулярное выражение quality check.
safe-htmlEnables the Небезопасный HTML-код quality check.
auto-safe-htmlTreat a text as conditional HTML, enabling Небезопасный HTML-код only for plain text or source strings that contain standard HTML markup or valid custom elements. This is useful for extended Markdown variants such as MDX, where angle-bracket syntax may not be HTML. Enables the Небезопасный HTML-код quality check.
urlThe string should consist of only a URL. Enables the URL-адреса quality check.
fluent-source-inner-htmlEnables the Исходный внутренний HTML Fluent quality check.
fluent-source-syntaxEnables the Синтаксис исходного кода Fluent quality check.
ignore-all-checksИгнорировать проверки качества.
ignore-bbcodeПропустите проверку качества BBCode-разметка.
ignore-xml-chars-around-tagsSkip the Символы вокруг XML-тегов quality check.
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-formatSkip the Laravel-формат quality check.
ignore-lua-formatПропустите проверку качества Lua-формат.
ignore-object-pascal-formatПропустите проверку качества Формат Object Pascal.
ignore-objc-formatSkip the Формат Objective-C quality check.
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-capitalSkip the Несколько заглавных quality check.
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, если расширение местоположения является.mdили.markdown.
Принудительные проверки¶
Принудительные проверки не могут быть отклонены и помечены как Needs editing (см. Состояния перевода). Это мешает переводчикам скрывать такие чеки.
Подсказка
Включение принудительной проверки не включает её автоматически. Некоторые проверки следует включать, добавляя соответствующий флаг к флагам строки или компонента.
Этот подход лучше всего использовать для проверок, которые могут вызвать серьёзные проблемы, например, для Форматированные строки. Не рекомендуется использовать для проверок стиля, таких как Перевод без изменения, поскольку иногда в таких случаях игнорирование является разумным подходом.
Затем Фильтр качества перевода можно использовать для исключения из передачи в систему контроля версий строк, требующих редактирования.
Управление шрифтами¶
Подсказка
Шрифты, загруженные в Weblate, используются исключительно для проверки Максимальный размер перевода; на пользовательский интерфейс Weblate они не влияют.
Проверке Максимальный размер перевода, которая вычисляет размер текста в пикселях после его отрисовки требуется, чтобы соответствующий шрифт был загружен в Weblate. Его также необходимо выбрать с помощью флагов перевода (смотреть раздел Настройка поведения с помощью флагов).
Инструмент управления шрифтами Weblate находится в разделе Шрифты меню Управление вашего проекта перевода и предоставляет интерфейс для загрузки шрифтов и управления ими. Можно загружать шрифты TrueType или OpenType, создавать группы шрифтов и использовать их в проверке.
Группы шрифтов позволяют вам определить различные шрифты для разных языков, что обычно необходимо для языков, алфавит которых не использует латиницу:
Группы шрифтов идентифицируются по имени, которое не может содержать пробелы или специальные символы, так что их можно легко использовать в определении проверки:
Семейство и начертание шрифта распознаются автоматически после его загрузки:
Вы можете загрузить в 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, смотрите раздел Custom quality checks, add-ons, automatic suggestions and auto-fixes.
Проверка, что текст перевода не содержит подстроки «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