Проверки и исправления¶
Пользовательские автоматические исправления¶
Также в дополнение к стандартным вы можете реализовать своё собственное автоматическое исправление и включить его в список AUTOFIX_LIST.
Автоматические исправления — это очень мощный инструмент, но они могут повредить перевод; будьте осторожны при их написании.
Например, следующее автоматическое исправление заменит каждое появление строки foo в переводе на строку bar:
#
# Copyright © 2012 - 2021 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:ШРИФТОпределяет семейство шрифтов для проверок отрисовки текста, смотрите раздел Управление шрифтами.
font-weight:НАСЫЩЕННОСТЬОпределяет насыщенность шрифта (свойство
font-weight) для проверок отрисовки текста, смотрите раздел Управление шрифтами.font-size:РАЗМЕРОпределяет размер шрифта (свойство
font-size) для проверок отрисовки текста, смотрите раздел Управление шрифтами.font-spacing:ШИРИНАОпределяет ширину межбуквенных интервалов (свойство
letter-spacing) для проверок отрисовки текста, смотрите раздел Управление шрифтами.placeholders:СТРОКА:СТРОКА2:...Ожидаемые в переводе строки-заполнители, смотрите проверку Символы-заполнители.
replacements:С:НА:С2:НА2...Замены, выполняемые при проверке параметров результирующего текста (например, в проверках Максимальный размер перевода или Максимальная длина перевода). Типовой случай использования этот флага — подстановка конкретных значений вместо заполнителей, чтобы гарантировать, что текст впишется в отведённые ему границы даже при использовании длинных строк, например:
replacements:%s:"Джон Доу".variants:ИСТОЧНИКДобавить отметку, что данная строка является вариантом строки, указанной в качестве источника. Смотрите раздел «Варианты строк».
regex:РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕРегулярное выражение для сопоставления с переводом, смотрите раздел Регулярное выражение.
forbiddenИспользуется для пометки переводов в глоссарии как нежелательных, смотреть раздел Нежелательные переводы.
python-format,c-format,object-pascal-format,php-format,python-brace-format,javascript-format,c-sharp-format,java-format,java-messageformat,lua-format,auto-java-messageformat,qt-format,qt-plural-format,ruby-format,scheme-format,vue-formatРассматривать все строки как строки формата, влияет на следующие проверки: Python-формат, C-формат, Формат Object Pascal, PHP- формат, Qt-формат, Формат множественного числа Qt, Ruby-формат, Форматирование Vue I18n, Python-формат: фигурные скобки, JavaScript-формат, C#-формат, Java-формат, Java MessageFormat, Lua-формат, Формат схемы, Перевод без изменения.
strict-sameСделать так, чтобы проверка «Перевод без изменения» не использовал встроенный чёрного список слов, смотреть раздел Перевод без изменения.
check-glossaryВключить проверку качества «Не соответствует глоссарию».
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-java-formatПропускать проверку качества «Java-формат».
ignore-java-messageformatПропускать проверку качества «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-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 шрифты используются исключительно для проверки максимального размера перевода; на пользовательский интерфейс они никак не влияют.
Проверке Максимальный размер перевода, которая вычисляет размер текста в пикселях после его отрисовки требуется, чтобы соответствующий шрифт был загружен в 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 © 2012 - 2021 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 - 2021 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