Проверки и исправления#
Пользовательские автоматические исправления#
Также в дополнение к стандартным вы можете реализовать своё собственное автоматическое исправление и включить его в список 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, смотрите раздел Пользовательские проверки качества, надстройки и автоматические исправления.
Настройка поведения с помощью флагов#
You can fine-tune Weblate’s behavior by using flags. The flags provide visual feedback to the translators and help them to improve their translation. This can be done on the source string level (see Дополнительная информация об исходных строках), or in the Настройки компонента (Флаги перевода). Some file formats also allow to specify flags directly in the format (see Поддерживаемые форматы файлов).
The flags are comma-separated; if they have parameters, they are separated with colon. You can use quotes to include whitespaces or special characters in the string. For example:
placeholders:"special:value":"other value", regex:.*
Можно использовать как двойные, так и одинарные кавычки — специальные символы экранируются с помощью обратной косой черты:
placeholders:"quoted \"string\"":'single \'quoted\''
placeholders:r"^#*"
To verify that translators do not change the heading of a Markdown document: A failing check will be triggered if the string „### Index“ is translated as „# Indice“
placeholders:r"\]\([^h].*?\)"
To make sure that internal links are not being translated (i.e. [test](../checks) does not become [test](../chequeos).
Вот список принимаемых в настоящее время флагов:
rst-textРассматривать текст как документ reStructuredText, влияет на проверку Перевод без изменения.
dos-eolИспользовать маркеры конца строки DOS вместо маркеров Unix (комбинацию символов
\r\nвместо символа\n).read-onlyСтрока доступна только для чтения и не должна редактироваться в Weblate, смотрите проверку Строки только для чтения.
terminologyUsed in Словарь. Copies the string into all glossary languages so it can be used consistently in all translations. Also useful in combination with
read-only, for example in product names.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-textTreat text as a Markdown document, and provide Markdown syntax highlighting on the translation text area. Enables Ссылки Markdown, Сноски Markdown, and Синтаксис Markdown quality checks.
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-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-reusedSkip the Reused translation quality check.
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.
Вы можете настроить список проверок, которые нельзя проигнорировать, задав в Настройки компонента параметр Принудительные проверки. Все перечисленные проверки не смогут быть отклонены из пользовательского интерфейса, и любая строка, не прошедшая эту проверку, помечается флагом На правку (смотрите раздел Состояния перевода).
Примечание
Включение принудительной проверки не делает ее автоматической. Проверку можно включить, добавив соответствующий флаг к флагам строки или компонента.
Управление шрифтами#
Добавлено в версии 3.7.
Подсказка
Загруженные в Weblate шрифты используются исключительно для проверки максимального размера перевода; на пользовательский интерфейс они никак не влияют.
Проверке Максимальный размер перевода, которая вычисляет размер текста в пикселях после его отрисовки требуется, чтобы соответствующий шрифт был загружен в Weblate. Его также необходимо выбрать с помощью флагов перевода (смотреть раздел Настройка поведения с помощью флагов).
Загрузить шрифты в Weblate и управлять ими можно в пункте Шрифты меню Управлять вашего проекта перевода. Создайте группы шрифтов и используйте их в проверках. Поддерживаются шрифты TrueType и OpenType.
Группы шрифтов позволяют вам определить различные шрифты для разных языков, что обычно необходимо для языков, алфавит которых не использует латиницу:
Группы шрифтов идентифицируются по имени, которое не может содержать пробелы или специальные символы, так что их можно легко использовать в определении проверки:
Семейство и начертание шрифта распознаются автоматически после его загрузки:
Вы можете загрузить в Weblate несколько шрифтов:
Чтобы использовать шрифты в проверке длины строки, передайте проверке соответствующие флаги (смотрите раздел Настройка поведения с помощью флагов). Скорее всего, вам понадобятся следующие из них:
max-size:500Определяет максимальную ширину в пикселях.
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 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