Перевірки і виправлення

Нетипові автоматичні виправлення

Ви можете також реалізувати ваші власні виправлення на додачу до стандартних і включити їх до 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

Щоб встановити нетипові перевірки, вкажіть повний шлях до класу Python у AUTOFIX_LIST, див. Спеціальні перевірки якості, доповнення, автоматичні пропозиції та автоматичні виправлення.

Налаштовування поведінки за допомогою прапорців

Ви можете скоригувати поведінку Weblate за допомогою прапорців. Прапорці надають візуальні настанови перекладачам і допомагають їм удосконалити переклад. Прапорці об’єднані з таких джерел:

Прапорці слід відокремлювати комами, а параметри — двокрапками. Ви можете скористатися лапками для включення до рядка пробілів або спеціальних символів. Приклад:

placeholders:"special:value":"other value", regex:.*

Можна використовувати одинарні і подвійні лапки. Спеціальні символи слід екранувати символом зворотної похилої риски:

placeholders:"quoted \"string\"":'single \'quoted\''
placeholders:r"^#*"

Щоб переконатися, що перекладачі не змінюють заголовок документа Markdown. Невдала перевірка буде запущена, якщо рядок ### Index буде перекладено як # Indice.

placeholders:r"\]\([^h].*?\)"

Забезпечення незмінності внутрішніх посилань після перекладу (тобто [test](../checks) не повинно перетворитися на [test](../chequeos).

Прапорці, визначені на вищому рівні, можна відкинути за допомогою синтаксису 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-size:SIZE

Визначити розмір шрифту для перевірок обробки, див. Керування шрифтами.

font-spacing:SPACING

Визначити інтервал між літерами для перевірок обробки, див. Керування шрифтами.

icu-flags:FLAGS

Визначити прапорці для налаштовування поведінки перевірки якості MessageFormat ICU.

icu-tag-prefix:PREFIX

Встановити обов’язковий префікс для теґів XML для перевірки якості MessageFormat ICU.

placeholders:NAME:NAME2:...

Рядки-замінники, які слід очікувати у перекладі, див. Заповнювачі.

replacements:FROM:TO:FROM2:TO2...

Заміни, які слід виконати при перевірці параметрів тексту у результаті (наприклад, у Найбільший розмір перекладу або Максимальна довжина перекладу). Типовим випадком використання є розгортання замінників для забезпечення відповідності тексту, навіть за використання довгих значень. Приклад: replacements:%s:"John Doe".

variants:SOURCE

Позначити цей рядок варіантом рядка з тим самим джерелом. Див. Варіанти рядків.

regex:REGEX

Формальний вираз для зіставлення файлів перекладу, див. Регулярний вираз.

discard:NAME

Відкидає прапор, визначений на вищому рівні.

forbidden

Позначає заборонений переклад у глосарії, див. Заборонені переклади.

strict-same

Зробіть так, щоб Переклад не змінено не використовував вбудовані винятки слів.

strict-format

Примусово використати форматування для форм множити із єдиним значенням, див. Форматовані рядки.

case-insensitive

Коригує поведінку перевірок так, щоб при їхньому виконанні не було враховано регістр літер. У поточній версії стосується лише перевірки якості Заповнювачі.

bbcode-text

Розглядати текст як документ у форматі 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

Увімкнути перевірки якості MessageFormat ICU та Синтаксис ICU MessageFormat.

java-printf-format

Увімкнути перевірку якості Формат Java.

java-format

Увімкнути перевірку якості Формат Java Message.

auto-java-messageformat

Розглядати текст як умовний формат Java MessageFormat, увімкнувши Формат Java Message лише в тому випадку, якщо джерело містить заповнювачі Java MessageFormat. Увімкнути перевірку якості Формат Java Message.

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

Увімкнути перевірку якості Формат Scheme.

vue-format

Увімкнути перевірку якості Форматування I18n Vue.

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

Пропустити перевірку якості MessageFormat ICU.

ignore-java-printf-format

Пропустити перевірку якості Формат Java.

ignore-java-format

Пропустити перевірку якості Формат Java Message.

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

Пропустити перевірку якості Формат Scheme.

ignore-vue-format

Пропустити перевірку якості Форматування I18n Vue.

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: This flag is automatically added to strings in Markdown and MDX files, if location extension is .md, .markdown, or .mdx.

Примусові перевірки

Примусові перевірки не можна відхилити, і рядок позначається як Needs editing (див. Стани перекладу). Це запобігає приховуванню таких перевірок перекладачами.

Підказка

Увімкнення примусового виконання перевірок не активує їх автоматично. Деякі перевірки потрібно ввімкнути, додавши відповідний прапорець до прапорців рядка або компонента.

Найкраще використовувати це з перевірками, які можуть спричинити серйозні проблеми, наприклад, з перевірками для Форматовані рядки. Використання перевірок стилю, таких як Переклад не змінено, не рекомендується, оскільки відхилення іноді є розумним підходом у таких випадках.

Параметр Фільтр якості перекладу можна використовувати для виключення рядків, що потребують редагування, з коміту до системи контролю версій.

Керування шрифтами

Підказка

Шрифти, які вивантажено на Weblate, використовуються лише для реалізації перевірки Найбільший розмір перекладу, вони не впливають на інтерфейс користувача Weblate.

Перевірка Найбільший розмір перекладу, яка використовується для обчислення розмірностей обробленого тексту, потребує вибору шрифту, який має бути завантажено до Weblate і вибрано за допомогою прапорця перекладу (див. Налаштовування поведінки за допомогою прапорців).

Інструмент керування шрифтами Weblate у розділі Fonts у меню Operations вашого проєкту перекладу надає інтерфейс для завантаження та керування шрифтами. Шрифти TrueType або OpenType можна завантажувати, налаштовувати групи шрифтів та використовувати їх під час перевірки.

Групи шрифтів надають вам змогу визначити різні шрифти для різних мов, що типово знадобиться для мов, які записують нелатинськими символами:

../_images/font-group-edit.webp

Групи шрифтів визначаються назвою, яка не може містити пробілів або спеціальних символів. Так зроблено, щоб групи можна було без проблем використовувати у визначеннях перевірок:

../_images/font-group-list.webp

Font-family and style are automatically recognized after uploading them:

../_images/font-edit.webp

Ви можете завантажувати до Weblate декілька шрифтів:

../_images/font-list.webp

Щоб скористатися шрифтами для перевірки довжини рядка, передайте відповідні прапорці (див. Налаштовування поведінки за допомогою прапорців). Вам, ймовірно, потрібні такі:

max-size:500 / max-size:300:5

Визначає максимальну ширину в пікселях і, за бажанням, максимальну кількість рядків (застосовується обтікання словами).

font-family:ubuntu

Визначає групу шрифтів для використання її визначенням ідентифікатора.

font-size:22

Визначає розмір шрифту у пікселях.

Написання власних перевірок

Широкий діапазон перевірок якості вбудовано до програми (див. Перевірки якості), хоча вони можуть не покривати усі випадки того, що ви хочете перевірити. Список виконуваних перевірок можна скоригувати за допомогою параметра CHECK_LIST. Також ви можете додавати нетипові перевірки.

  1. Підклас weblate.checks.Check

  2. Встановити декілька атрибутів.

  3. Реалізуйте метод check (якщо ви хочете мати справу із формами множини у вашому коді) або метод check_single (який виконує це завдання за вас).

Приклади:

Щоб встановити нетипові перевірки, вкажіть повний шлях до класу Python у CHECK_LIST, див. Спеціальні перевірки якості, доповнення, автоматичні пропозиції та автоматичні виправлення.

Перевірка того, чи не містить текст перекладу «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