Проверки и исправления#

Проверки качества помогают выявить распространённые ошибки переводчиков, что гарантирует хорошее состояние перевода. В случае ложно-положительных срабатываний проверки могут быть проигнорированы.

После отправки перевода с неудачной проверкой, она сразу же показывается пользователю:

../_images/checks.webp

Автоматические исправления#

В дополнение к проверкам качества, Weblate может автоматически исправлять некоторые распространённые ошибки в переведённых строках. Используйте эту возможность с осторожностью, чтобы не допустить добавления новых ошибок.

См.также

AUTOFIX_LIST

Trailing ellipsis replacer#

Replace trailing dots (...) with an ellipsis () to make it consistent with the source string.

Zero-width space removal#

Zero width space is typically not desired in the translation. This fix will remove it unless it is present in the source string as well.

Control characters removal#

Removes any control characters from the translation.

Деванагари данда#

Replaces wrong full stop in Devanagari by Devanagari danda ().

Unsafe HTML cleanup#

When turned on using a safe-html flag it sanitizes HTML markup.

Trailing and leading whitespace fixer#

Makes leading and trailing whitespace consistent with the source string. The behavior can be fine-tuned using ignore-begin-space and ignore-end-space flags to skip processing parts of the string.

Проверки качества#

Weblate использует широкий спектр проверок качества строк. В следующем разделе они все описываются более подробно. Также существуют проверки, специфичные для конкретных языков. Если какая-то проверка срабатывает ошибочно, пожалуйста, отправьте сообщение об ошибке.

Проверки перевода#

Выполняется при каждом изменении перевода, помогая переводчикам поддерживать высокое качество перевода.

BBCode-разметка#

Сводка:

BBCode в переводе не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.markup.BBCodeCheck

Проверить идентификатор:

bbcode

Флаг для игнорирования:

ignore-bbcode

BBCode представляет собой простую разметку, полезную для, например, выделения важных частей сообщения жирным шрифтом или курсивом.

Эта проверка гарантирует, что они также будут присутствовать в переводе.

Примечание

На данный момент метод обнаружения тегов BBCode достаточно прост, поэтому данная проверка может привести к ложным срабатываниям.

Повторяющиеся слова#

Добавлено в версии 4.1.

Сводка:

Одно и то же слово повторяется в тексте дважды подряд:

Область:

переведённые строки

Класс проверки:

weblate.checks.duplicate.DuplicateCheck

Проверить идентификатор:

duplicate

Флаг для игнорирования:

ignore-duplicate

Проверяет, что в переводе не встречаются последовательные дубликаты слова. Обычно это указывает на ошибку в переводе.

Подсказка

Эта проверка включает в себя правила, специфичные для конкретных языков, чтобы избежать ложных срабатываний. В случае ложного срабатывания этой проверки в вашем случае, сообщите нам об этом. Смотрите раздел Сообщение о проблемах в Weblate.

Не соответствует глоссарию#

Добавлено в версии 4.5.

Сводка:

Этот перевод не содержит термин, указанный в глоссарии.

Область:

переведённые строки

Класс проверки:

weblate.checks.glossary.GlossaryCheck

Проверить идентификатор:

check_glossary

Флаг для включения:

check-glossary

Флаг для игнорирования:

ignore-check-glossary

Эту проверку можно включить с помощью флага check-glossary (смотреть раздел Настройка поведения с помощью флагов). Но прежде чем делать это учтите следующее:

  • Эта проверка использует строгое сравнение строк, ожидается, что глоссарий будет содержать термины со всеми их вариантами.

  • Проверка каждой строки на соответствие словарю — дорогое удовольствие: это значительно замедлит все операции Weblate, которые подразумевают запуск проверок, включая импорт строк или переводов.

  • It also utilizes untranslatable glossary terms in Перевод без изменения.

Двойной пробел#

Сводка:

Перевод содержит двойной пробел

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.DoubleSpaceCheck

Проверить идентификатор:

double_space

Флаг для игнорирования:

ignore-double-space

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

Проверка возвращает ложь, если в исходной строке найден двойной пробел, что означает, что двойной пробел был внесён в неё преднамеренно.

Fluent parts#

Добавлено в версии 5.0.

Сводка:

Fluent parts should match

Область:

переведённые строки

Класс проверки:

weblate.checks.fluent.parts.FluentPartsCheck

Проверить идентификатор:

fluent-parts

Флаг для включения:

fluent-parts

Флаг для игнорирования:

ignore-fluent-parts

Each Fluent Message can have an optional value (the main text content), and optional attributes, each of which is a «part» of the Message. In Weblate, all these parts appear within the same block, using Fluent-like syntax to specify the attributes. For example:

This is the Message value
.title = This is the title attribute
.alt = This is the alt attribute

This check ensures that the translated Message also has a value if the source Message has one, or no value if the source has none. This also checks that the same attributes used in the source Message also appear in the translation, with no additions.

Примечание

This check is not applied to Fluent Terms since Terms always have a value, and Term attributes tend to be locale-specific (used for grammar rules, etc.), and are not expected to appear in all translations.

См.также

Fluent Attributes

Fluent references#

Добавлено в версии 5.0.

Сводка:

Fluent references should match

Область:

переведённые строки

Класс проверки:

weblate.checks.fluent.references.FluentReferencesCheck

Проверить идентификатор:

fluent-references

Флаг для включения:

fluent-references

Флаг для игнорирования:

ignore-fluent-references

A Fluent Message or Term can reference another Message, Term, Attribute, or a variable. For example:

Here is a { message }, a { message.attribute } a { -term } and a { $variable }.
Within a function { NUMBER($num, minimumFractionDigits: 2) }

Generally, translated Messages or Terms are expected to contain the same references as the source, although not necessarily in the same order of appearance. So this check ensures that translations use the same references in their value as the source value, the same number of times, and with no additions. For Messages, this will also check that each Attribute in the translation uses the same references as the matching Attribute in the source.

When the source or translation contains Fluent Select Expressions, then each possible variant in the source must be matched with at least one variant in the translation with the same references, and vice versa.

Moreover, if a variable reference appears both in the Select Expression’s selector and within one of its variants, then all variants may also be considered as if they also contain that reference. The assumption being that the variant’s key may have made the reference redundant for that variant. For example:

{ $num ->
    [one] an apple
   *[other] { $num } apples
}

Here, for the purposes of this check, the [one] variant will also be considered to contain the $num reference.

However, a reference within the Select Expression’s selector, which can only be a variable of a Term Attribute in Fluent’s syntax, will not by itself count as a required reference because they do not form the actual text content of the string that the end-user will see, and the presence of a Select Expression is considered locale-specific. For example:

{ -term.starts-with-vowel ->
    [yes] an { -term }
   *[no] a { -term }
}

Here a reference to -term.starts-with-vowel is not expected to appear in translations, but a reference to -term is.

Fluent translation inner HTML#

Добавлено в версии 5.0.

Сводка:

Fluent target should be valid inner HTML that matches

Область:

переведённые строки

Класс проверки:

weblate.checks.fluent.inner_html.FluentTargetInnerHTMLCheck

Проверить идентификатор:

fluent-target-inner-html

Флаг для включения:

fluent-target-inner-html

Флаг для игнорирования:

ignore-fluent-target-inner-html

This check will verify that the translated value of a Message or Term contains the same HTML elements as the source value.

First, if the source value fails the Fluent source inner HTML check, then this check will do nothing. Otherwise, the translated value will also be checked under the same conditions.

Second, the HTML elements found in the translated value will be compared against the HTML elements found in the source value. Two elements will match if they share the exact same tag name, the exact same attributes and values, and all their ancestors match in the same way. This check will ensure that all the elements in the source appear somewhere in the translation, with the same number of appearances, and with no additional elements added. When there are multiple elements in the value, they need not appear in the same order in the translation value.

When the source or translation contains Fluent Select Expressions, then each possible variant in the source must be matched with at least one variant in the translation with the same HTML elements, and vice versa.

When using Fluent in combination with the Fluent DOM package, this check will ensure that the translation also includes any required data-l10n-name elements that appear in the source, or any of the allowed inline elements like <br>.

For example, the following source:

Source message <img data-l10n-name="icon"/> with icon

would match with:

Translated message <img data-l10n-name="icon"/> with icon

but not:

Translated message <img data-l10n-name="new-val"/> with icon

nor

Translated message <br data-l10n-name="icon"/> with no icon

Fluent translation syntax#

Добавлено в версии 5.0.

Сводка:

Fluent syntax error in translation

Область:

переведённые строки

Класс проверки:

weblate.checks.fluent.syntax.FluentTargetSyntaxCheck

Проверить идентификатор:

fluent-target-syntax

Флаг для включения:

fluent-target-syntax

Флаг для игнорирования:

ignore-fluent-target-syntax

In Weblate, Fluent strings use Fluent syntax for references and variables, but also for more complex features like defining attributes and selector variants, including plurals. This check ensures that the syntax used in the translation will be valid for Fluent.

Форматированные строки#

Checks that the formatting in strings is replicated between both source and translation. Omitting format strings in translation usually causes severe problems, so the formatting in strings should usually match the source.

Weblate поддерживает проверку строк формата на нескольких языках. Проверка не включается автоматически, только если строка соответствующим образом помечена (например, флагом c-format для C-формата). Gettext добавляет эту разметку автоматически, но для других форматов файлов или если ваши PO-файлы не сгенерированы программой xgettext вам, вероятно, придётся добавить её вручную.

Most of the format checks allow omitting format strings for plural forms having a single count. This allows translators to write nicer strings for these cases (One apple instead of %d apple). Turn this off by adding strict-format flag.

The flags can be customized per string (see Дополнительная информация об исходных строках) or in a Настройки компонента. Having it defined per component is simpler, but it can lead to false positives in case the string is not interpreted as a formatting string, but format string syntax happens to be used.

Подсказка

В случае, если конкретная проверка формата в Weblate отсутствует, вы можете использовать общую проверку Символы-заполнители.

Помимо проверки, эти флаги также включают подсветку строк формата, чтобы их было легко вставлять в перевод:

../_images/format-highlight.webp

Интерполяционная строка AngularJS#

Сводка:

Интерполяционные строки AngularJS не соответствуют источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.angularjs.AngularJSInterpolationCheck

Проверить идентификатор:

angularjs_format

Флаг для включения:

angularjs-format

Флаг для игнорирования:

ignore-angularjs-format

Пример именованной строки формата:

Your balance is {{amount}} {{ currency }}

C-формат#

Сводка:

Строка в формате C не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.CFormatCheck

Проверить идентификатор:

c_format

Флаг для включения:

c-format

Флаг для игнорирования:

ignore-c-format

Пример простой строки формата:

There are %d apples

Пример позиционной строки формата:

Your balance is %1$d %2$s

C#-формат#

Сводка:

Строка в формате C# не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.CSharpFormatCheck

Проверить идентификатор:

c_sharp_format

Флаг для включения:

c-sharp-format

Флаг для игнорирования:

ignore-c-sharp-format

Пример позиционной строки формата:

There are {0} apples

Шаблонные литералы ECMAScript#

Сводка:

Шаблонные литералы ECMAScript не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.ESTemplateLiteralsCheck

Проверить идентификатор:

es_format

Флаг для включения:

es-format

Флаг для игнорирования:

ignore-es-format

Пример интерполяции:

There are ${number} apples

Интерполяция i18next#

Добавлено в версии 4.0.

Сводка:

Интерполяция i18next не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.I18NextInterpolationCheck

Проверить идентификатор:

i18next_interpolation

Флаг для включения:

i18next-interpolation

Флаг для игнорирования:

ignore-i18next-interpolation

Пример интерполяции:

There are {{number}} apples

Пример вложения:

There are $t(number) apples

ICU MessageFormat#

Добавлено в версии 4.9.

Сводка:

Ошибки синтаксиса и/или несоответствия заполнителей в строках ICU MessageFormat.

Область:

переведённые строки

Класс проверки:

weblate.checks.icu.ICUMessageFormatCheck

Проверить идентификатор:

icu_message_format

Флаг для включения:

icu-message-format

Флаг для игнорирования:

ignore-icu-message-format

Пример интерполяции:

Есть {number, plural, one {одно яблоко} other {# яблок}}.

Эта проверка поддерживает как чистые сообщения ICU MessageFormat, так и ICU с простыми XML-тегами. Вы можете настроить поведение этой проверки с помощью icu-flags:*, либо включив поддержку XML, либо отключив определённые подпроверки. Например, следующий флаг включает поддержку XML и отключает проверку множественных подсообщений:

icu-message-format, icu-flags:xml:-plural_selectors

xml

Включите поддержку простых XML-тегов. По умолчанию XML-теги анализируются нечётко. Блуждающие символы (Stray) < игнорируются, если они не являются разумной частью тега.

strict-xml

Включите поддержку строгих XML-тегов. Все символы < должны быть экранированы (escape-символами), если они не являются частью тега.

-highlight

Отключите подсветку заполнителей в редакторе.

-require_other

Отключите требования, чтобы вложенные сообщения имели селектор other.

-submessage_selectors

Пропустите проверку соответствия селекторов подсообщений источнику.

-types

Пропустите проверку соответствия типов заполнителей источнику.

-extra

Пропустите проверку того, что в исходной строке отсутствуют заполнители, которых не было в исходной строке.

-missing

Пропустите проверку того, что отсутствуют заполнители, которые присутствовали в исходной строке.

Кроме того, когда strict-xml не включен, но включен xml, вы можете использовать флаг icu-tag-prefix:ПРЕФИКС, чтобы потребовать, чтобы все XML-теги начинались с определённой строки. Например, следующий флаг позволит сопоставлять XML-теги, только если они начинаются с <x::

icu-message-format, icu-flags:xml, icu-tag-prefix:"x:"

Это совпадает с <x:link>нажмите сюда</x:link>, но не <strong>сюда</strong>.

Java-формат#

Сводка:

Строка в формате Java не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.JavaFormatCheck

Проверить идентификатор:

java_printf_format

Флаг для включения:

java-printf-format

Флаг для игнорирования:

ignore-java-printf-format

Пример простой строки формата:

There are %d apples

Пример позиционной строки формата:

Your balance is %1$d %2$s

Изменено в версии 4.14: This used to be toggled by java-format flag, it was changed for consistency with GNU gettext.

Java MessageFormat#

Сводка:

Строка в формате Java MessageFormat не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.JavaMessageFormatCheck

Проверить идентификатор:

java_format

Флаг для включения без кодирования:

java-format

Флаг для включения автоопределения:

Флаг auto-java-messageformat включает проверку только если в исходной строке содержится строка формата

Флаг для игнорирования:

ignore-java-format

Пример позиционной строки формата:

There are {0} apples

Изменено в версии 4.14: This used to be toggled by java-messageformat flag, it was changed for consistency with GNU gettext.

This check validates that format string is valid for the Java MessageFormat class. Besides matching format strings in the curly braces, it also verifies single quotes as they have a special meaning. Whenever writing single quote, it should be written as ''. When not paired, it is treated as beginning of quoting and will not be shown when rendering the string.

JavaScript-формат#

Сводка:

Строка в формате JavaScript не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.JavaScriptFormatCheck

Проверить идентификатор:

javascript_format

Флаг для включения:

javascript-format

Флаг для игнорирования:

ignore-javascript-format

Пример простой строки формата:

There are %d apples

Lua-формат#

Сводка:

Строка в формате Lua не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.LuaFormatCheck

Проверить идентификатор:

lua_format

Флаг для включения:

lua-format

Флаг для игнорирования:

ignore-lua-format

Пример простой строки формата:

There are %d apples

Формат Object Pascal#

Сводка:

Строка в формате Object Pascal не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.ObjectPascalFormatCheck

Проверить идентификатор:

object_pascal_format

Флаг для включения:

object-pascal-format

Флаг для игнорирования:

ignore-object-pascal-format

Пример простой строки формата:

There are %d apples

Символы-заполнители в процентной нотации#

Добавлено в версии 4.0.

Сводка:

Символы-заполнители в процентной нотации не соответствуют источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.PercentPlaceholdersCheck

Проверить идентификатор:

percent_placeholders

Флаг для включения:

percent-placeholders

Флаг для игнорирования:

ignore-percent-placeholders

Пример простой строки формата:

There are %number% apples

Perl-формат#

Сводка:

Строка в формате Perl’а не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.PerlFormatCheck

Проверить идентификатор:

perl_format

Флаг для включения:

perl-format

Флаг для игнорирования:

ignore-perl-format

Пример простой строки формата:

There are %d apples

Пример позиционной строки формата:

Your balance is %1$d %2$s

PHP- формат#

Сводка:

Строка в формате PHP не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.PHPFormatCheck

Проверить идентификатор:

php_format

Флаг для включения:

php-format

Флаг для игнорирования:

ignore-php-format

Пример простой строки формата:

There are %d apples

Пример позиционной строки формата:

Your balance is %1$d %2$s

Python-формат: фигурные скобки#

Сводка:

Форматирование фигурных скобок в Python не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.PythonBraceFormatCheck

Проверить идентификатор:

python_brace_format

Флаг для включения:

python-brace-format

Флаг для игнорирования:

ignore-python-brace-format

Простая строка формата:

There are {} apples

Пример именованной строки формата:

Your balance is {amount} {currency}

Python-формат#

Сводка:

Строка в формате Python не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.PythonFormatCheck

Проверить идентификатор:

python_format

Флаг для включения:

python-format

Флаг для игнорирования:

ignore-python-format

Простая строка формата:

There are %d apples

Пример именованной строки формата:

Ваш баланс %(число)d %(валюта)s

Qt-формат#

Сводка:

Строка в формате Qt не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.qt.QtFormatCheck

Проверить идентификатор:

qt_format

Флаг для включения:

qt-format

Флаг для игнорирования:

ignore-qt-format

Пример позиционной строки формата:

There are %1 apples

Формат множественного числа Qt#

Сводка:

Строка в формате множественного числа Qt не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.qt.QtPluralCheck

Проверить идентификатор:

qt_plural_format

Флаг для включения:

qt-plural-format

Флаг для игнорирования:

ignore-qt-plural-format

Пример строки формата множественного числа:

There are %Ln apple(s)

Ruby-формат#

Сводка:

Строка формата Ruby не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.ruby.RubyFormatCheck

Проверить идентификатор:

ruby_format

Флаг для включения:

ruby-format

Флаг для игнорирования:

ignore-ruby-format

Пример простой строки формата:

There are %d apples

Пример позиционной строки формата:

Your balance is %1$f %2$s

Пример именованной строки формата:

Your balance is %+.2<amount>f %<currency>s

Именованная шаблонная строка:

Your balance is %{amount} %{currency}

Формат схемы#

Сводка:

Строка формата схемы не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.SchemeFormatCheck

Проверить идентификатор:

scheme_format

Флаг для включения:

scheme-format

Флаг для игнорирования:

ignore-scheme-format

Пример простой строки формата:

There are ~d apples

Форматирование Vue I18n#

Сводка:

Форматирование Vue I18n не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.format.VueFormattingCheck

Проверить идентификатор:

vue_format

Флаг для включения:

vue-format

Флаг для игнорирования:

ignore-vue-format

Именованная строка формата:

There are {count} apples

Форматирование локализации Rails:

There are %{count} apples

Связанные сообщения локализации:

@:message.dio @:message.the_world!

уже переведено#

Сводка:

Эта строка уже переводилась

Область:

все строки

Класс проверки:

weblate.checks.consistency.TranslatedCheck

Проверить идентификатор:

translated

Флаг для игнорирования:

ignore-translated

Означает, что строка уже переведена. Это может произойти, если переводы откатывались в системе контроля версий или иным образом терялись.

Противоречия#

Сводка:

Эта строка имеет более одного перевода в этом проекте, либо же в некоторых компонентах она не переведена.

Область:

все строки

Класс проверки:

weblate.checks.consistency.ConsistencyCheck

Проверить идентификатор:

inconsistent

Флаг для игнорирования:

ignore-inconsistent

Weblate проверяет переводы одинаковых строк по всем переводам в проекте, чтобы помочь вам поддерживать переводы согласованными.

Проверка срабатывает, когда в проекте обнаруживаются различные переводы одной и той же строки. Также это может привести к несогласованности в отображаемых проверках. Другие переводы этой строки можно найти на вкладке Другие вхождения.

Эта проверка будет применена ко всем компонентам проекта, содержащим Разрешить распространение перевода.

Подсказка

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

Примечание

This check also fires in case the string is translated in one component and not in another. It can be used as a quick way to manually handle strings which are untranslated in some components just by clicking on the Use this translation button displayed on each line in the Other occurrences tab.

You can use Автоматический перевод add-on to automate translating of newly added strings which are already translated in another component.

Используется кашида#

Сводка:

Декоративные буквы кашиды не должны использоваться

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.KashidaCheck

Проверить идентификатор:

kashida

Флаг для игнорирования:

ignore-kashida

Декоративные буквы кашида не должны использоваться в переводе. Также они известны как татвиль.

Сноски Markdown#

Сводка:

Ссылки на сноски Markdown не соответствуют источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.markup.MarkdownRefLinkCheck

Проверить идентификатор:

md-reflink

Флаг для включения:

md-text

Флаг для игнорирования:

ignore-md-reflink

Ссылки на сноски Markdown не соответствуют источнику.

Синтаксис Markdown#

Сводка:

Синтаксис Markdown-разметки не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.markup.MarkdownSyntaxCheck

Проверить идентификатор:

md-syntax

Флаг для включения:

md-text

Флаг для игнорирования:

ignore-md-syntax

Синтаксис Markdown-разметки не соответствует источнику

Максимальная длина перевода#

Сводка:

Перевод не должен превышать заданную длину

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.MaxLengthCheck

Проверить идентификатор:

max-length

Флаг для включения:

max-length

Флаг для игнорирования:

ignore-max-length

Проверяет, что переводы имеют приемлемую длину, чтобы укладываться в доступное пространство. Эта проверка проверяет только длину символов перевода.

В отличие от других проверок, флаг для этой проверки должен быть установлен в виде пары ключ:значение, например, max-length:100.

Подсказка

Эта проверка смотрит на количество символов, что может быть не самой лучшей метрикой при использовании для отображения текста пропорциональных шрифтов. Проверка Максимальный размер перевода проверяет фактическую отрисовку текста.

Также для расширения позиций-заполнителей перед проверкой строки может быть полезен флаг replacements:.

Если также используется флаг xml-text, при подсчёте длины игнорируются XML-теги.

Максимальный размер перевода#

Сводка:

Отрисованный текст перевода не должен превышать заданный размер

Область:

переведённые строки

Класс проверки:

weblate.checks.render.MaxSizeCheck

Проверить идентификатор:

max-size

Флаг для включения:

max-size

Флаг для игнорирования:

ignore-max-size

Отрисованный текст перевода не должен превышать заданный размер. Эта проверка отрисовывает текст с переносом по строкам и проверяет, вписывается ли он в заданные границы.

Для этой проверки требуется один или два параметра — максимальная ширина и максимальное количество строк. В случае, если количество строк не указано, считается, что текст должен уместиться в одну строку.

Также директивами font-* вы можете настроить используемый шрифт (смотрите раздел Настройка поведения с помощью флагов), например, следующие флаги перевода говорят, что текст, отрисовываемый шрифтом ubuntu размера 22, должен вписаться в две строки и 500 пикселей:

max-size:500:2, font-family:ubuntu, font-size:22

Подсказка

Возможно, вы захотите установить директивы font-* в настройках компонента, чтобы для всех строк компонента был настроен один и тот же шрифт. В случае, если вам нужно будет настроить их для отдельной строки, вы сможете переопределить их значения для этой строки.

Также для расширения позиций-заполнителей перед проверкой строки может быть полезен флаг replacements:.

Если также используется флаг xml-text, при подсчёте длины игнорируются XML-теги.

Несовпадающие \n#

Сводка:

Количество символов \n в переводе не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.EscapedNewlineCountingCheck

Проверить идентификатор:

escaped_newline

Флаг для игнорирования:

ignore-escaped-newline

Usually escaped newlines are important for formatting program output. Check fails if the number of \n literals in translation does not match the source.

Несовпадающие двоеточия#

Сводка:

Источник и перевод не заканчиваются оба двоеточием

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.EndColonCheck

Проверить идентификатор:

end_colon

Флаг для игнорирования:

ignore-end-colon

Проверяет, что двоеточия в исходной строке и в переводе одинаковы. Также проверяется наличие двоеточий для тех языков, в которых они не используются (китайский или японский).

Несовпадающие многоточия#

Сводка:

Источник и перевод не заканчиваются оба многоточием

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.EndEllipsisCheck

Проверить идентификатор:

end_ellipsis

Флаг для игнорирования:

ignore-end-ellipsis

Проверяет, что конечные многоточия в исходной строке и в переводе одинаковы. Эта проверка проверяет только настоящие многоточия (символы ), но не три подряд идущих точки (...).

Как правило, на печати многоточие отрисовывается лучше, чем три подряд стоящих точки и лучше звучит при преобразовании текста в речь.

Несовпадающие восклицательные знаки#

Сводка:

Источник и перевод не заканчиваются оба восклицательным знаком

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.EndExclamationCheck

Проверить идентификатор:

end_exclamation

Флаг для игнорирования:

ignore-end-exclamation

Проверяет, что восклицательные знаки в исходной строке и в переводе одинаковы. Также проверяется наличие восклицательных знаков для тех языков, в которых они не используются (китайский, японский, корейский, армянский, лимбу, бирманский или нко).

Несовпадающие точки#

Сводка:

Источник и перевод не заканчиваются оба точкой

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.EndStopCheck

Проверить идентификатор:

end_stop

Флаг для игнорирования:

ignore-end-stop

Проверяет, что точки в исходной строке и в переводе одинаковы. Также проверяется наличие точек для тех языков, в которых они не используются (китайский, японский, деванагари или урду).

Несовпадающие вопросительные знаки#

Сводка:

Источник и перевод не заканчиваются оба вопросительным знаком

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.EndQuestionCheck

Проверить идентификатор:

end_question

Флаг для игнорирования:

ignore-end-question

Проверяет, что вопросительные знаки в исходной строке и в переводе одинаковы. Также проверяется наличие вопросительных знаков для тех языков, в которых они не используются (армянский, арабский, китайский, корейский, японский, эфиопский, ваи или коптский).

Несовпадающие точки с запятой#

Сводка:

Источник и перевод не заканчиваются оба точкой с запятой

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.EndSemicolonCheck

Проверить идентификатор:

end_semicolon

Флаг для игнорирования:

ignore-end-semicolon

Checks that semicolons at the end of sentences are replicated between both source and translation.

Несовпадающие переводы строк#

Сводка:

Количество символов новой строки в переводе не соответствует источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.NewLineCountCheck

Проверить идентификатор:

newline-count

Флаг для игнорирования:

ignore-newline-count

Usually newlines are important for formatting program output. Check fails if the number of new lines in translation does not match the source.

Нет форм множественного числа#

Сводка:

Некоторые формы множественного числа не переведены

Область:

переведённые строки

Класс проверки:

weblate.checks.consistency.PluralsCheck

Проверить идентификатор:

plurals

Флаг для игнорирования:

ignore-plurals

Проверяет, что были переведены все формы множественного числа исходной строки. Сведения о том, как используется каждая форма множественного числа, можно найти в определении строки.

Отсутствие перевода в форме множественного числа в некоторых случаях приводит к тому, что при использовании формы множественного числа ничего не будет отображаться.

Символы-заполнители#

Сводка:

В переводе пропущены некоторые символы-заполнители

Область:

переведённые строки

Класс проверки:

weblate.checks.placeholders.PlaceholderCheck

Проверить идентификатор:

placeholders

Флаг для включения:

placeholders

Флаг для игнорирования:

ignore-placeholders

Изменено в версии 4.3: В качестве заполнителя вы можете использовать регулярное выражение.

Изменено в версии 4.13: With the case-insensitive flag, the placeholders are not case-sensitive.

В переводе пропущены некоторые символы-заполнители. Эти символы либо извлекаются из файла перевода, либо определяются вручную с помощью флага placeholders; если их несколько, они разделяются двоеточием, а строки с пробелами могут быть заключены в кавычки:

placeholders:$URL$:$TARGET$:"some long text"

Если у вас есть регулярный синтаксис для имён заполнителей, то вы можете применить регулярные выражения:

placeholders:r"%[^% ]%"

You can also have case insensitive placeholders:

placeholders:$URL$:$TARGET$,case-insensitive

Пробелы и пунктуация#

Сводка:

Отсутствует неразрывный пробел перед знаком двойной пунктуации

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.PunctuationSpacingCheck

Проверить идентификатор:

punctuation_spacing

Флаг для игнорирования:

ignore-punctuation-spacing

Проверяет наличие неразрывного пробела перед знаком двойной пунктуации (восклицательным знаком, вопросительным знаком, точкой с запятой или двоеточием). Это правило используется только в некоторых избранных языках, вроде французского или бретонского, где по типографским правилам обязателен пробел перед знаком двойной пунктуации.

Регулярное выражение#

Сводка:

Перевод не соответствует регулярному выражению

Область:

переведённые строки

Класс проверки:

weblate.checks.placeholders.RegexCheck

Проверить идентификатор:

regex

Флаг для включения:

regex

Флаг для игнорирования:

ignore-regex

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

regex:^foo|bar$

Reused translation#

Добавлено в версии 4.18.

Сводка:

Different strings are translated the same.

Область:

переведённые строки

Класс проверки:

weblate.checks.consistency.ReusedCheck

Проверить идентификатор:

reused

Флаг для игнорирования:

ignore-reused

Check that fails if the same translation is used on different source strings. Such translations can be intentional, but can also confuse users.

Одинаковые формы множественного числа#

Сводка:

Некоторые формы множественного числа переведены одинаково

Область:

переведённые строки

Класс проверки:

weblate.checks.consistency.SamePluralsCheck

Проверить идентификатор:

same-plurals

Флаг для игнорирования:

ignore-same-plurals

Проверка срабатывает, если некоторые формы множественного числа в переводе переведены одинаково. В большинстве языков они должны быть разными.

Пустая строка в начале#

Сводка:

Источник и перевод не начинаются оба с новой строки

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.BeginNewlineCheck

Проверить идентификатор:

begin_newline

Флаг для игнорирования:

ignore-begin-newline

Обычно символы новой строки в исходных текстах появляются по уважительной причине, их пропуск или добавление могут привести к проблемам с форматированием при использовании переведённого текста.

Пробелы в начале#

Сводка:

Источник и перевод не начинаются оба одинаковым числом пробелов

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.BeginSpaceCheck

Проверить идентификатор:

begin_space

Флаг для игнорирования:

ignore-begin-space

Пробелы в начале строки обычно используются для набивания отступов в интерфейсе, поэтому их важно сохранить.

Пустая строка в конце#

Сводка:

Источник и перевод не заканчиваются оба новой строкой

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.EndNewlineCheck

Проверить идентификатор:

end_newline

Флаг для игнорирования:

ignore-end-newline

Обычно символы новой строки в исходных текстах появляются по уважительной причине, их пропуск или добавление могут привести к проблемам с форматированием при использовании переведённого текста.

Пробелы в конце#

Сводка:

Источник и перевод не заканчиваются оба пробелом

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.EndSpaceCheck

Проверить идентификатор:

end_space

Флаг для игнорирования:

ignore-end-space

Проверяет, что количество конечных пробелов в исходной строке и в переводе одинаково.

Конечные пробелы обычно используется для добавления отступа до соседних элементов, поэтому их удаление может поломать макет.

Перевод без изменения#

Сводка:

Источник и перевод тождественны

Область:

переведённые строки

Класс проверки:

weblate.checks.same.SameCheck

Проверить идентификатор:

same

Флаг для игнорирования:

ignore-same

Возникает, если исходная строка и соответствующая строка перевода идентичны, по крайней мере в одной из форм множественного числа. Некоторые строки, обычно встречающиеся во всех языках, игнорируются, а различная разметка удаляется. Это уменьшает количество ложных срабатываний.

Эта проверка может помочь найти ошибочно не переведённые строки.

Поведение этой проверки по умолчанию заключается в исключении из проверки слов из встроенного чёрного списка. Это такие слова, которые зачастую не переводятся. Это полезно для того, чтобы избежать ложных срабатываний на коротких строках, которые состоят только из одного слова, одинакового в нескольких языках. Этот чёрный список можно отключить, добавив в строку или в компонент флаг strict-same.

Изменено в версии 4.17: With check-glossary flag (see Не соответствует глоссарию), the untranslatable glossary terms are excluded from the checking.

Небезопасный HTML-код#

Сводка:

Перевод использует небезопасную HTML-разметку

Область:

переведённые строки

Класс проверки:

weblate.checks.markup.SafeHTMLCheck

Проверить идентификатор:

safe-html

Флаг для включения:

safe-html

Флаг для игнорирования:

ignore-safe-html

Перевод использует небезопасную HTML-разметку. Эта проверка должна быть включена с помощью флага safe-html (смотрите раздел Настройка поведения с помощью флагов). Также имеется соответствующий автоматический исправляльщик, который может автоматически почистить разметку.

Подсказка

Если используется флаг md-text, ссылки в стиле Markdown также разрешены.

См.также

The HTML check is performed by the Ammonia library.

URL-адреса#

Сводка:

Перевод не содержит URL

Область:

переведённые строки

Класс проверки:

weblate.checks.markup.URLCheck

Проверить идентификатор:

url

Флаг для включения:

url

Флаг для игнорирования:

ignore-url

Перевод не содержит URL-адрес. Эта проверка срабатывает только в том случае, если единица перевода помечена как содержащая URL-адрес. В этом случае перевод должен быть корректным URL-адресом.

XML-разметка#

Сводка:

XML-теги в переводе не соответствуют источнику

Область:

переведённые строки

Класс проверки:

weblate.checks.markup.XMLTagsCheck

Проверить идентификатор:

xml-tags

Флаг для игнорирования:

ignore-xml-tags

Обычно это означает, что полученный результат будет выглядеть по-другому. В большинстве случаев такое изменение из-за перевода не является желаемым результатом, но иногда именно это и надо.

Проверяет, что XML-теги в исходной строке и в переводе одинаковы.

The check is automatically enabled for XML like strings. You might need to add xml-text flag in some cases to force turning it on.

Примечание

Эта проверка отключается флагом safe-html, так как HTML-чистка, выполняемая ею, может привести к HTML-разметке, которая не является допустимой XML.

Синтаксис XML#

Сводка:

Перевод не является корректным XML

Область:

переведённые строки

Класс проверки:

weblate.checks.markup.XMLValidityCheck

Проверить идентификатор:

xml-invalid

Флаг для игнорирования:

ignore-xml-invalid

Разметка XML некорректна.

The check is automatically enabled for XML like strings. You might need to add xml-text flag in some cases to force turning it on.

Примечание

Эта проверка отключается флагом safe-html, так как HTML-чистка, выполняемая ею, может привести к HTML-разметке, которая не является допустимой XML.

Пробел нулевой ширины#

Сводка:

Перевод содержит лишние символы пробела нулевой ширины

Область:

переведённые строки

Класс проверки:

weblate.checks.chars.ZeroWidthSpaceCheck

Проверить идентификатор:

zero-width-space

Флаг для игнорирования:

ignore-zero-width-space

Символы пробела нулевой ширины (<U+200B>) используются для разбиения сообщений по словам (переноса по словам).

Поскольку обычно они вставляются по ошибке, эта проверка срабатывает на их присутствие в переводе. В некоторых программах при использовании этого символа могут возникнуть проблемы.

Проверки для исходных строк#

Проверки для исходных строк могут помочь разработчикам улучшить качество исходных строк.

Многоточие#

Сводка:

В этой строке используются три точки (…) вместо символа многоточия (…)

Область:

исходные строки

Класс проверки:

weblate.checks.source.EllipsisCheck

Проверить идентификатор:

ellipsis

Флаг для игнорирования:

ignore-ellipsis

Эта проверка срабатывает, когда в строке используются три подряд стоящих точки (...), когда вместо них должен использоваться символ многоточия ().

Использование юникодного символа в большинстве случаев является лучшим подходом; он лучше выглядит при отрисовке текста и может лучше звучать при преобразовании текста в речь.

Fluent source inner HTML#

Добавлено в версии 5.0.

Сводка:

Fluent source should be valid inner HTML

Область:

исходные строки

Класс проверки:

weblate.checks.fluent.inner_html.FluentSourceInnerHTMLCheck

Проверить идентификатор:

fluent-source-inner-html

Флаг для включения:

fluent-source-inner-html

Флаг для игнорирования:

ignore-fluent-source-inner-html

Fluent is often used in contexts where the value for a Message (or Term) is meant to be used directly as .innerHTML (rather than .textContent) for some HTML element. For example, when using the Fluent DOM package.

The aim of this check is to predict how the value will be parsed as inner HTML, assuming a HTML5 conforming parser, to catch cases where there would be some «unintended» loss of the string, without being too strict about technical parsing errors that do not lead to a loss of the string.

This check is applied to the value of Fluent Messages or Terms, but not their Attributes. For Messages, the Fluent Attributes are often just HTML attribute values, so can be arbitrary strings. For Terms, the Fluent Attributes are often language properties that can only be referenced in the selectors of Fluent Select Expressions.

Generally, most Fluent values are not expected to contain any HTML markup. Therefore, this check does not expect or want translators and developers to have to care about strictly avoiding any technical HTML5 parsing errors (let alone XHTML parsing errors). Instead, this check will just want to warn them when they may have unintentionally opened a HTML tag or inserted a character reference.

Moreover, for the Fluent values that intentionally contain HTML tags or character references, this check will verify some «good practices», such as matching closing and ending tags, valid character references, and quoted attribute values. In addition, whilst the HTML5 specification technically allows for quite arbitrary tag and attribute names, this check will restrain them to some basic ASCII values that should cover the standard HTML5 element tags and attributes, as well as allow some custom element or attribute names. This is partially to ensure that the user is using HTML intentionally.

Examples:

Значение

Warns?

Reason

three<four

да

The <four part would be lost as .innerHTML.

three < four

нет

The .innerHTML would match the .textContent.

three <four>

да

Missing a closing tag.

three <four/>

да

four is not a HTML void element, so should not self-close.

<a-b>text</a-b>

нет

Custom element tag with a matching closing tag.

a <img/> b

нет

img is a HTML void element. Self-closing is allowed.

a <br> b

нет

br is a HTML void element.

<img class=a/>

да

The attribute value is not quoted.

<aØ attr=''/>

да

Non-ASCII tag name.

kind&ethical

да

The &eth part would be converted to ð.

kind&eth;ical

нет

The character reference seems to be intentional.

three&lte;four

да

The &lte; part would be converted to <e;.

three&lf;four

да

The character reference is not valid.

three<{ $val }

да

The Fluent variable may unintentionally become a tag.

&l{ $val }

да

The Fluent variable may unintentionally become a character reference.

Примечание

This check will not ensure the inner HTML is safe or sanitized, and is not meant to protect against malicious attempts to alter the inner HTML. Moreover, it should be remembered that Fluent variables and references may expand to arbitrary strings, so could expand to arbitrary HTML unless they are escaped. As an exception, a < or & character before a Fluent reference will trigger this check since even an escaped value could lead to unexpected results.

Примечание

The Fluent DOM package has further limitations, such as allowed tags and attributes, which this check will not enforce.

Fluent source syntax#

Добавлено в версии 5.0.

Сводка:

Fluent syntax error in source

Область:

исходные строки

Класс проверки:

weblate.checks.fluent.syntax.FluentSourceSyntaxCheck

Проверить идентификатор:

fluent-source-syntax

Флаг для включения:

fluent-source-syntax

Флаг для игнорирования:

ignore-fluent-source-syntax

In Weblate, Fluent strings use Fluent syntax for references and variables, but also for more complex features like defining attributes and selector variants, including plurals. This check ensures that the syntax used in source will be valid for Fluent.

Синтаксис ICU MessageFormat#

Добавлено в версии 4.9.

Сводка:

Синтаксические ошибки в строках ICU MessageFormat.

Область:

исходные строки

Класс проверки:

weblate.checks.icu.ICUSourceCheck

Проверить идентификатор:

icu_message_format_syntax

Флаг для включения:

icu-message-format

Флаг для игнорирования:

ignore-icu-message-format

См.также

ICU MessageFormat

Давно не переводилась#

Добавлено в версии 4.1.

Сводка:

Строка давно не переводилась

Область:

исходные строки

Класс проверки:

weblate.checks.source.LongUntranslatedCheck

Проверить идентификатор:

long_untranslated

Флаг для игнорирования:

ignore-long-untranslated

Если строка долго не переводилась, это может указывать на проблему в исходной строке, затрудняющую её перевод.

Множество неудачных проверок#

Сводка:

Переводы на несколько языков имеют неудачные проверки

Область:

исходные строки

Класс проверки:

weblate.checks.source.MultipleFailingCheck

Проверить идентификатор:

multiple_failures

Флаг для игнорирования:

ignore-multiple-failures

Во многих переводах этой строки имеются неудачные проверки качества. Обычно это свидетельствует о том, что нужно что-то сделать для улучшения исходной строки.

Часто неудачная проверка может быть вызвана пропущенной точкой в конце предложения или подобными мелкими проблемами, которые переводчики склонны исправлять в переводе, в то время как лучше было бы их исправить в исходной строке.

Несколько переменных без названий#

Добавлено в версии 4.1.

Сводка:

Строка содержит несколько неименованных переменных, что не позволяет переводчикам их переупорядочивать

Область:

исходные строки

Класс проверки:

weblate.checks.format.MultipleUnnamedFormatsCheck

Проверить идентификатор:

unnamed_format

Флаг для игнорирования:

ignore-unnamed-format

Строка содержит несколько неименованных переменных, что не позволяет переводчикам их переупорядочивать.

Рассмотрите возможность использования именованных переменных вместо неименованных, чтобы позволить переводчикам менять их порядок в переводимом тексте.

Формы единственного числа#

Сводка:

Строка содержит множественное число, но не использует формы множественного числа

Область:

исходные строки

Класс проверки:

weblate.checks.source.OptionalPluralCheck

Проверить идентификатор:

optional_plural

Флаг для игнорирования:

ignore-optional-plural

Строка содержит множественное число, но не использует формы множественного числа. В случае, если ваша система перевода его поддерживает, вы должны использовать вариант, учитывающий множественное число.

Например, при использовании Gettext в Python это может выглядеть так:

from gettext import ngettext

print(ngettext("Selected %d file", "Selected %d files", files) % files)