mirror of
https://gh.wpcy.net/https://github.com/WeblateOrg/weblate.git
synced 2026-04-29 04:12:48 +08:00
1085 lines
34 KiB
ReStructuredText
1085 lines
34 KiB
ReStructuredText
Checks and fixups
|
|
=================
|
|
|
|
The quality checks help catch common translator errors, ensuring the
|
|
translation is in good shape. The checks can be ignored in case of false positives.
|
|
|
|
Once submitting a translation with a failing check, this is immediately shown to
|
|
the user:
|
|
|
|
.. image:: /images/checks.png
|
|
|
|
|
|
.. _autofix:
|
|
|
|
Automatic fixups
|
|
----------------
|
|
|
|
In addition to :ref:`checks`, Weblate can fix some common
|
|
errors in translated strings automatically. Use it with caution to not have
|
|
it add errors.
|
|
|
|
.. seealso::
|
|
|
|
:setting:`AUTOFIX_LIST`
|
|
|
|
.. _checks:
|
|
|
|
Quality checks
|
|
--------------
|
|
|
|
Weblate employs a wide range of quality checks on strings. The following section
|
|
describes them all in further detail. There are also language specific checks.
|
|
Please file a bug if anything is reported in error.
|
|
|
|
.. seealso::
|
|
|
|
:setting:`CHECK_LIST`, :ref:`custom-checks`
|
|
|
|
Translation checks
|
|
------------------
|
|
|
|
Executed upon every translation change, helping translators maintain
|
|
good quality translations.
|
|
|
|
.. _check-bbcode:
|
|
|
|
BBcode markup
|
|
~~~~~~~~~~~~~
|
|
|
|
*BBcode in translation does not match source*
|
|
|
|
BBCode represents simple markup, like for example highlighting important parts of a
|
|
message in bold font, or italics.
|
|
|
|
This check ensures they are also found in translation.
|
|
|
|
.. note::
|
|
|
|
The method for detecting BBcode is currently quite simple so this check
|
|
might produce false positives.
|
|
|
|
.. _check-duplicate:
|
|
|
|
Consecutive duplicated words
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
*Text contains the same word twice in a row:*
|
|
|
|
.. versionadded:: 4.1
|
|
|
|
Checks that no consecutive duplicate words occur in a translation. This usually
|
|
indicates a mistake in the translation.
|
|
|
|
.. hint::
|
|
|
|
This check includes language specific rules to avoid false positives. In
|
|
case it triggers falsely in your case, let us know. See :ref:`report-issue`.
|
|
|
|
.. _check-check-glossary:
|
|
|
|
Does not follow glossary
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. versionadded:: 4.5
|
|
|
|
*The translation does not follow terms defined in a glossary.*
|
|
|
|
This check has to be turned on using ``check-glossary`` flag (see
|
|
:ref:`custom-checks`). Please consider following prior to enabling it:
|
|
|
|
* It does exact string matching, the glossary is expected to contain terms in all variants.
|
|
* Checking each string against glossary is expensive, it will slow down any operation in Weblate which involves running checks like importing strings or translating.
|
|
|
|
.. seealso::
|
|
|
|
:ref:`glossary`,
|
|
:ref:`custom-checks`,
|
|
:ref:`component-check_flags`
|
|
|
|
.. _check-double-space:
|
|
|
|
Double space
|
|
~~~~~~~~~~~~
|
|
|
|
*Translation contains double space*
|
|
|
|
Checks that double space is present in translation to avoid false positives on other space-related checks.
|
|
|
|
Check is false when double space is found in source meaning double space is intentional.
|
|
|
|
|
|
.. _check-angularjs-format:
|
|
.. _check-c-format:
|
|
.. _check-c-sharp-format:
|
|
.. _check-es-format:
|
|
.. _check-i18next-interpolation:
|
|
.. _check-java-format:
|
|
.. _check-java-messageformat:
|
|
.. _check-javascript-format:
|
|
.. _check-lua-format:
|
|
.. _check-percent-placeholders:
|
|
.. _check-perl-format:
|
|
.. _check-php-format:
|
|
.. _check-python-brace-format:
|
|
.. _check-python-format:
|
|
.. _check-qt-format:
|
|
.. _check-qt-plural-format:
|
|
.. _check-ruby-format:
|
|
.. _check-vue-format:
|
|
|
|
Formatted strings
|
|
~~~~~~~~~~~~~~~~~
|
|
|
|
Checks that formatting in strings are 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 supports checking format strings in several languages. The check is not
|
|
enabled automatically, only if a string is flagged appropriately (e.g.
|
|
`c-format` for C format). Gettext adds this automatically, but you will
|
|
probably have to add it manually for other file formats or if your PO files are
|
|
not generated by :program:`xgettext`.
|
|
|
|
This can be done per unit (see :ref:`additional`) or in :ref:`component`.
|
|
Having it defined per component is simpler, but can lead to false positives in
|
|
case the string is not interpreted as a formatting string, but format string syntax
|
|
happens to be used.
|
|
|
|
.. hint::
|
|
|
|
In case specific format check is not available in Weblate, you can use
|
|
generic :ref:`check-placeholders`.
|
|
|
|
Besides checking, this will also highlight the formatting strings to easily
|
|
insert them into translated strings:
|
|
|
|
.. image:: /images/format-highlight.png
|
|
|
|
AngularJS interpolation string
|
|
******************************
|
|
|
|
*AngularJS interpolation strings do not match source*
|
|
|
|
+----------------------+------------------------------------------------------------+
|
|
| Named format string | ``Your balance is {{amount}} {{ currency }}`` |
|
|
+----------------------+------------------------------------------------------------+
|
|
| Flag to enable | `angularjs-format` |
|
|
+----------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`AngularJS text interpolation <https://angular.io/guide/interpolation>`_
|
|
|
|
C format
|
|
********
|
|
|
|
*C format string does not match source*
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Simple format string | ``There are %d apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Position format string | ``Your balance is %1$d %2$s`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `c-format` |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`C format strings <https://www.gnu.org/software/gettext/manual/html_node/c_002dformat.html>`_,
|
|
`C printf format <https://en.wikipedia.org/wiki/Printf_format_string>`_
|
|
|
|
C# format
|
|
*********
|
|
|
|
*C# format string does not match source*
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Position format string | ``There are {0} apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `c-sharp-format` |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`C# String Format <https://docs.microsoft.com/en-us/dotnet/api/system.string.format?view=netframework-4.7.2>`_
|
|
|
|
ECMAScript template literals
|
|
****************************
|
|
|
|
*ECMAScript template literals do not match source*
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Interpolation | ``There are ${number} apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `es-format` |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`Template literals <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals>`_
|
|
|
|
i18next interpolation
|
|
*********************
|
|
|
|
*The i18next interpolation does not match source*
|
|
|
|
.. versionadded:: 4.0
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Interpolation | ``There are {{number}} apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Nesting | ``There are $t(number) apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `i18next-interpolation` |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`i18next interpolation <https://www.i18next.com/translation-function/interpolation>`_
|
|
|
|
|
|
Java format
|
|
***********
|
|
|
|
*Java format string does not match source*
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Simple format string | ``There are %d apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Position format string | ``Your balance is %1$d %2$s`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `java-format` |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`Java Format Strings <https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html>`_
|
|
|
|
|
|
Java MessageFormat
|
|
******************
|
|
|
|
*Java MessageFormat string does not match source*
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Position format string | ``There are {0} apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `java-messageformat` enables the check unconditionally |
|
|
+------------------------+------------------------------------------------------------+
|
|
| | `auto-java-messageformat` enables check only if there is a |
|
|
| | format string in the source |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`Java MessageFormat <https://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html>`_
|
|
|
|
JavaScript format
|
|
*****************
|
|
|
|
*JavaScript format string does not match source*
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Simple format string | ``There are %d apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `javascript-format` |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`JavaScript formatting strings <https://www.gnu.org/software/gettext/manual/html_node/javascript_002dformat.html>`_
|
|
|
|
Lua format
|
|
**********
|
|
|
|
*Lua format string does not match source*
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Simple format string | ``There are %d apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `lua-format` |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`Lua formatting strings <https://www.gnu.org/software/gettext/manual/html_node/lua_002dformat.html#lua_002dformat>`_
|
|
|
|
Percent placeholders
|
|
********************
|
|
|
|
*The percent placeholders do not match source*
|
|
|
|
.. versionadded:: 4.0
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Simple format string | ``There are %number% apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `percent-placeholders` |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
|
|
Perl format
|
|
***********
|
|
|
|
*Perl format string does not match source*
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Simple format string | ``There are %d apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Position format string | ``Your balance is %1$d %2$s`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `perl-format` |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`Perl sprintf <https://perldoc.perl.org/functions/sprintf>`_,
|
|
`Perl Format Strings <https://www.gnu.org/software/gettext/manual/html_node/perl_002dformat.html>`_
|
|
|
|
PHP format
|
|
**********
|
|
|
|
*PHP format string does not match source*
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Simple format string | ``There are %d apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Position format string | ``Your balance is %1$d %2$s`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `php-format` |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`PHP sprintf documentation <https://www.php.net/manual/en/function.sprintf.php>`_,
|
|
`PHP Format Strings <https://www.gnu.org/software/gettext/manual/html_node/php_002dformat.html>`_
|
|
|
|
|
|
Python brace format
|
|
*******************
|
|
|
|
*Python brace format string does not match source*
|
|
|
|
+----------------------+------------------------------------------------------------+
|
|
| Simple format string | ``There are {} apples`` |
|
|
+----------------------+------------------------------------------------------------+
|
|
| Named format string | ``Your balance is {amount} {currency}`` |
|
|
+----------------------+------------------------------------------------------------+
|
|
| Flag to enable | `python-brace-format` |
|
|
+----------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
:ref:`Python brace format <python:formatstrings>`,
|
|
`Python Format Strings <https://www.gnu.org/software/gettext/manual/html_node/python_002dformat.html>`_
|
|
|
|
Python format
|
|
*************
|
|
|
|
*Python format string does not match source*
|
|
|
|
+----------------------+------------------------------------------------------------+
|
|
| Simple format string | ``There are %d apples`` |
|
|
+----------------------+------------------------------------------------------------+
|
|
| Named format string | ``Your balance is %(amount) %(currency)`` |
|
|
+----------------------+------------------------------------------------------------+
|
|
| Flag to enable | `python-format` |
|
|
+----------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
:ref:`Python string formatting <python:old-string-formatting>`,
|
|
`Python Format Strings <https://www.gnu.org/software/gettext/manual/html_node/python_002dformat.html>`_
|
|
|
|
Qt format
|
|
*********
|
|
|
|
*Qt format string does not match source*
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Position format string | ``There are %1 apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `qt-format` |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`Qt QString::arg() <https://doc.qt.io/qt-5/qstring.html#arg>`_
|
|
|
|
Qt plural format
|
|
****************
|
|
|
|
*Qt plural format string does not match source*
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Plural format string | ``There are %Ln apple(s)`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `qt-plural-format` |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`Qt i18n guide <https://doc.qt.io/qt-5/i18n-source-translation.html#handling-plurals>`_
|
|
|
|
Ruby format
|
|
***********
|
|
|
|
*Ruby format string does not match source*
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Simple format string | ``There are %d apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Position format string | ``Your balance is %1$f %2$s`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Named format string | ``Your balance is %+.2<amount>f %<currency>s`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Named template string | ``Your balance is %{amount} %{currency}`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `ruby-format` |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`Ruby Kernel#sprintf <https://ruby-doc.org/core/Kernel.html#method-i-sprintf>`_
|
|
|
|
Scheme format
|
|
*************
|
|
|
|
*Scheme format string does not match source*
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Simple format string | ``There are ~d apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `scheme-format` |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`Srfi 28 <https://srfi.schemers.org/srfi-28/srfi-28.html>`_,
|
|
`Chicken Scheme format <https://wiki.call-cc.org/eggref/5/format>`_,
|
|
`Guile Scheme formatted output <https://www.gnu.org/software/guile/manual/html_node/Formatted-Output.html>`_
|
|
|
|
Vue I18n formatting
|
|
*******************
|
|
|
|
*The Vue I18n formatting does not match source*
|
|
|
|
+------------------------+------------------------------------------------------------+
|
|
| Named formatting | ``There are {count} apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Rails i18n formatting | ``There are %{count} apples`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Linked locale messages | ``@:message.dio @:message.the_world!`` |
|
|
+------------------------+------------------------------------------------------------+
|
|
| Flag to enable | `vue-format` |
|
|
+------------------------+------------------------------------------------------------+
|
|
|
|
.. seealso::
|
|
|
|
`Vue I18n Formatting <https://kazupon.github.io/vue-i18n/guide/formatting.html>`_,
|
|
`Vue I18n Linked locale messages <https://kazupon.github.io/vue-i18n/guide/messages.html#linked-locale-messages>`_
|
|
|
|
.. _check-translated:
|
|
|
|
Has been translated
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
*This string has been translated in the past*
|
|
|
|
Means a string has been translated already. This can happen when the
|
|
translations have been reverted in VCS or lost otherwise.
|
|
|
|
.. _check-inconsistent:
|
|
|
|
Inconsistent
|
|
~~~~~~~~~~~~
|
|
|
|
*This string has more than one translation in this project or is not translated
|
|
in some components.*
|
|
|
|
Weblate checks translations of the same string across all translation within a
|
|
project to help you keep consistent translations.
|
|
|
|
The check fails on differing translations of one string within a project. This
|
|
can also lead to inconsistencies in displayed checks. You can find other
|
|
translations of this string on the :guilabel:`Other occurrences` tab.
|
|
|
|
.. note::
|
|
|
|
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 not translated in some components just by clicking on the
|
|
:guilabel:`Use this translation` button displayed on each line in the
|
|
:guilabel:`Other occurrences` tab.
|
|
|
|
You can use :ref:`addon-weblate.autotranslate.autotranslate` addon to
|
|
automate translating of newly added strings which are already translated in
|
|
another component.
|
|
|
|
.. seealso::
|
|
|
|
:ref:`translation-consistency`
|
|
|
|
|
|
.. _check-kashida:
|
|
|
|
Kashida letter used
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
*The decorative kashida letters should not be used*
|
|
|
|
.. versionadded:: 3.5
|
|
|
|
The decorative Kashida letters should not be used in translation. These are
|
|
also known as Tatweel.
|
|
|
|
.. seealso::
|
|
|
|
`Kashida on Wikipedia <https://en.wikipedia.org/wiki/Kashida>`_
|
|
|
|
.. _check-md-link:
|
|
|
|
Markdown links
|
|
~~~~~~~~~~~~~~
|
|
|
|
*Markdown links do not match source*
|
|
|
|
.. versionadded:: 3.5
|
|
|
|
Markdown links do not match source.
|
|
|
|
.. seealso::
|
|
|
|
`Markdown links`_
|
|
|
|
|
|
.. _check-md-reflink:
|
|
|
|
Markdown references
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
*Markdown link references do not match source*
|
|
|
|
.. versionadded:: 3.5
|
|
|
|
Markdown link references do not match source.
|
|
|
|
.. seealso::
|
|
|
|
`Markdown links <https://daringfireball.net/projects/markdown/syntax#link>`_
|
|
|
|
.. _check-md-syntax:
|
|
|
|
Markdown syntax
|
|
~~~~~~~~~~~~~~~
|
|
|
|
*Markdown syntax does not match source*
|
|
|
|
.. versionadded:: 3.5
|
|
|
|
Markdown syntax does not match source
|
|
|
|
.. seealso::
|
|
|
|
`Markdown span elements <https://daringfireball.net/projects/markdown/syntax#span>`_
|
|
|
|
.. _check-max-length:
|
|
|
|
Maximum length of translation
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
*Translation should not exceed given length*
|
|
|
|
Checks that translations are of acceptable length to fit available space.
|
|
This only checks for the length of translation characters.
|
|
|
|
Unlike the other checks, the flag should be set as a ``key:value`` pair like
|
|
``max-length:100``.
|
|
|
|
.. hint::
|
|
|
|
This check looks at number of chars, what might not be the best metric when
|
|
using proportional fonts to render the text. The :ref:`check-max-size` check
|
|
does check actual rendering of the text.
|
|
|
|
The ``replacements:`` flag might be also useful to expand placeables before
|
|
checking the string.
|
|
|
|
.. _check-max-size:
|
|
|
|
Maximum size of translation
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
*Translation rendered text should not exceed given size*
|
|
|
|
.. versionadded:: 3.7
|
|
|
|
Translation rendered text should not exceed given size. It renders the text
|
|
with line wrapping and checks if it fits into given boundaries.
|
|
|
|
This check needs one or two parameters - maximal width and maximal number of
|
|
lines. In case the number of lines is not provided, one line text is
|
|
considered.
|
|
|
|
You can also configure used font by ``font-*`` directives (see
|
|
:ref:`custom-checks`), for example following translation flags say that the
|
|
text rendered with ubuntu font size 22 should fit into two lines and 500
|
|
pixels:
|
|
|
|
.. code-block:: text
|
|
|
|
max-size:500:2, font-family:ubuntu, font-size:22
|
|
|
|
.. hint::
|
|
|
|
You might want to set ``font-*`` directives in :ref:`component` to have the same
|
|
font configured for all strings within a component. You can override those
|
|
values per string in case you need to customize it per string.
|
|
|
|
The ``replacements:`` flag might be also useful to expand placeables before
|
|
checking the string.
|
|
|
|
.. seealso::
|
|
|
|
:ref:`fonts`, :ref:`custom-checks`, :ref:`check-max-length`
|
|
|
|
.. _check-escaped-newline:
|
|
|
|
Mismatched \\n
|
|
~~~~~~~~~~~~~~
|
|
|
|
*Number of \\n in translation does not match source*
|
|
|
|
Usually escaped newlines are important for formatting program output.
|
|
Check fails if the number of ``\n`` literals in translation do not match the source.
|
|
|
|
.. _check-end-colon:
|
|
|
|
Mismatched colon
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
*Source and translation do not both end with a colon*
|
|
|
|
Checks that colons are replicated between both source and translation. The
|
|
presence of colons is also checked for various languages where they do not
|
|
belong (Chinese or Japanese).
|
|
|
|
.. seealso::
|
|
|
|
`Colon on Wikipedia <https://en.wikipedia.org/wiki/Colon_(punctuation)>`_
|
|
|
|
.. _check-end-ellipsis:
|
|
|
|
Mismatched ellipsis
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
*Source and translation do not both end with an ellipsis*
|
|
|
|
Checks that trailing ellipses are replicated between both source and translation.
|
|
This only checks for real ellipsis (``…``) not for three dots (``...``).
|
|
|
|
An ellipsis is usually rendered nicer than three dots in print, and sounds better with text-to-speech.
|
|
|
|
.. seealso::
|
|
|
|
`Ellipsis on Wikipedia <https://en.wikipedia.org/wiki/Ellipsis>`_
|
|
|
|
|
|
.. _check-end-exclamation:
|
|
|
|
Mismatched exclamation mark
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
*Source and translation do not both end with an exclamation mark*
|
|
|
|
Checks that exclamations are replicated between both source and translation.
|
|
The presence of exclamation marks is also checked for various languages where
|
|
they do not belong (Chinese, Japanese, Korean, Armenian, Limbu, Myanmar or
|
|
Nko).
|
|
|
|
.. seealso::
|
|
|
|
`Exclamation mark on Wikipedia <https://en.wikipedia.org/wiki/Exclamation_mark>`_
|
|
|
|
.. _check-end-stop:
|
|
|
|
Mismatched full stop
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
*Source and translation do not both end with a full stop*
|
|
|
|
Checks that full stops are replicated between both source and translation.
|
|
The presence of full stops is checked for various languages where they do not belong
|
|
(Chinese, Japanese, Devanagari or Urdu).
|
|
|
|
.. seealso::
|
|
|
|
`Full stop on Wikipedia <https://en.wikipedia.org/wiki/Full_stop>`_
|
|
|
|
.. _check-end-question:
|
|
|
|
Mismatched question mark
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
*Source and translation do not both end with a question mark*
|
|
|
|
Checks that question marks are replicated between both source and translation.
|
|
The presence of question marks is also checked for various languages where they
|
|
do not belong (Armenian, Arabic, Chinese, Korean, Japanese, Ethiopic, Vai or
|
|
Coptic).
|
|
|
|
.. seealso::
|
|
|
|
`Question mark on Wikipedia <https://en.wikipedia.org/wiki/Question_mark>`_
|
|
|
|
.. _check-end-semicolon:
|
|
|
|
Mismatched semicolon
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
*Source and translation do not both end with a semicolon*
|
|
|
|
Checks that semicolons at the end of sentences are replicated between both source and translation.
|
|
This can be useful to keep formatting of entries such as desktop files.
|
|
|
|
.. seealso::
|
|
|
|
`Semicolon on Wikipedia <https://en.wikipedia.org/wiki/Semicolon>`_
|
|
|
|
.. _check-newline-count:
|
|
|
|
Mismatching line breaks
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
*Number of new lines in translation does not match source*
|
|
|
|
Usually newlines are important for formatting program output.
|
|
Check fails if the number of ``\n`` literals in translation do not match the source.
|
|
|
|
|
|
.. _check-plurals:
|
|
|
|
Missing plurals
|
|
~~~~~~~~~~~~~~~
|
|
|
|
*Some plural forms are not translated*
|
|
|
|
Checks that all plural forms of a source string have been translated.
|
|
Specifics on how each plural form is used can be found in the string definition.
|
|
|
|
Failing to fill in plural forms will in some cases lead to displaying nothing when
|
|
the plural form is in use.
|
|
|
|
.. _check-placeholders:
|
|
|
|
Placeholders
|
|
~~~~~~~~~~~~
|
|
|
|
*Translation is missing some placeholders:*
|
|
|
|
.. versionadded:: 3.9
|
|
|
|
.. versionchanged:: 4.3
|
|
|
|
You can use regular expression as placeholder.
|
|
|
|
Translation is missing some placeholders. These are either extracted from the
|
|
translation file or defined manually using ``placeholders`` flag, more can be
|
|
separated with colon, strings with space can be quoted:
|
|
|
|
.. code-block:: text
|
|
|
|
placeholders:$URL$:$TARGET$:"some long text"
|
|
|
|
In case you have some syntax for placeholders, you can use a regular expression:
|
|
|
|
.. code-block:: text
|
|
|
|
placeholders:r"%[^% ]%"
|
|
|
|
.. seealso::
|
|
|
|
:ref:`custom-checks`
|
|
|
|
.. _check-punctuation-spacing:
|
|
|
|
Punctuation spacing
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
*Missing non breakable space before double punctuation sign*
|
|
|
|
.. versionadded:: 3.9
|
|
|
|
Checks that there is non breakable space before double punctuation sign
|
|
(exclamation mark, question mark, semicolon and colon). This rule is used only
|
|
in a few selected languages like French or Breton, where space before double
|
|
punctuation sign is a typographic rule.
|
|
|
|
.. seealso::
|
|
|
|
`French and English spacing on Wikipedia <https://en.wikipedia.org/wiki/History_of_sentence_spacing#French_and_English_spacing>`_
|
|
|
|
|
|
.. _check-regex:
|
|
|
|
Regular expression
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
*Translation does not match regular expression:*
|
|
|
|
.. versionadded:: 3.9
|
|
|
|
Translation does not match regular expression. The expression is either extracted from the
|
|
translation file or defined manually using ``regex`` flag:
|
|
|
|
.. code-block:: text
|
|
|
|
regex:^foo|bar$
|
|
|
|
|
|
|
|
.. _check-same-plurals:
|
|
|
|
Same plurals
|
|
~~~~~~~~~~~~
|
|
|
|
*Some plural forms are translated in the same way*
|
|
|
|
Check that fails if some plural forms are duplicated in the translation.
|
|
In most languages they have to be different.
|
|
|
|
.. _check-begin-newline:
|
|
|
|
Starting newline
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
*Source and translation do not both start with a newline*
|
|
|
|
Newlines usually appear in source strings for good reason, omissions or additions
|
|
can lead to formatting problems when the translated text is put to use.
|
|
|
|
.. seealso::
|
|
|
|
:ref:`check-end-newline`
|
|
|
|
.. _check-begin-space:
|
|
|
|
Starting spaces
|
|
~~~~~~~~~~~~~~~
|
|
|
|
*Source and translation do not both start with same number of spaces*
|
|
|
|
A space in the beginning of a string is usually used for indentation in the interface and thus
|
|
important to keep.
|
|
|
|
.. _check-end-newline:
|
|
|
|
Trailing newline
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
*Source and translation do not both end with a newline*
|
|
|
|
Newlines usually appear in source strings for good reason, omissions or additions
|
|
can lead to formatting problems when the translated text is put to use.
|
|
|
|
.. seealso::
|
|
|
|
:ref:`check-begin-newline`
|
|
|
|
.. _check-end-space:
|
|
|
|
Trailing space
|
|
~~~~~~~~~~~~~~
|
|
|
|
*Source and translation do not both end with a space*
|
|
|
|
Checks that trailing spaces are replicated between both source and translation.
|
|
|
|
Trailing space is usually utilized to space out neighbouring elements, so
|
|
removing it might break layout.
|
|
|
|
.. _check-same:
|
|
|
|
Unchanged translation
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
*Source and translation are identical*
|
|
|
|
Happens if the source and corresponding translation strings is identical, down to
|
|
at least one of the plural forms. Some strings commonly found across all
|
|
languages are ignored, and various markup is stripped. This reduces
|
|
the number of false positives.
|
|
|
|
This check can help find strings mistakenly untranslated.
|
|
|
|
The default behavior of this check is to exclude words from the built-in
|
|
blacklist from the checking. These are words which are frequently not being
|
|
translated. This is useful to avoid false positives on short strings, which
|
|
consist only of single word which is same in several languages. This blacklist
|
|
can be disabled by adding ``strict-same`` flag to string or component.
|
|
|
|
.. seealso::
|
|
|
|
:ref:`component`,
|
|
:ref:`custom-checks`
|
|
|
|
.. _check-safe-html:
|
|
|
|
Unsafe HTML
|
|
~~~~~~~~~~~
|
|
|
|
*The translation uses unsafe HTML markup*
|
|
|
|
.. versionadded:: 3.9
|
|
|
|
The translation uses unsafe HTML markup. This check has to be enabled using
|
|
``safe-html`` flag (see :ref:`custom-checks`). There is also accompanied
|
|
autofixer which can automatically sanitize the markup.
|
|
|
|
.. seealso::
|
|
|
|
The HTML check is performed by the `Bleach <https://bleach.readthedocs.io/>`_
|
|
library developed by Mozilla.
|
|
|
|
|
|
|
|
.. _check-url:
|
|
|
|
URL
|
|
~~~
|
|
|
|
*The translation does not contain an URL*
|
|
|
|
.. versionadded:: 3.5
|
|
|
|
The translation does not contain an URL. This is triggered only in case the
|
|
unit is marked as containing URL. In that case the translation has to be a
|
|
valid URL.
|
|
|
|
.. _check-xml-tags:
|
|
|
|
XML markup
|
|
~~~~~~~~~~
|
|
|
|
*XML tags in translation do not match source*
|
|
|
|
This usually means the resulting output will look different. In most cases this is
|
|
not a desired result from changing the translation, but occasionally it is.
|
|
|
|
Checks that XML tags are replicated between both source and translation.
|
|
|
|
|
|
|
|
.. _check-xml-invalid:
|
|
|
|
XML syntax
|
|
~~~~~~~~~~
|
|
|
|
*The translation is not valid XML*
|
|
|
|
.. versionadded:: 2.8
|
|
|
|
The XML markup is not valid.
|
|
|
|
.. _check-zero-width-space:
|
|
|
|
Zero-width space
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
*Translation contains extra zero-width space character*
|
|
|
|
Zero-width space (<U+200B>) characters are used to break messages within words (word wrapping).
|
|
|
|
As they are usually inserted by mistake, this check is triggered once they are present
|
|
in translation. Some programs might have problems when this character is used.
|
|
|
|
.. seealso::
|
|
|
|
`Zero width space on Wikipedia <https://en.wikipedia.org/wiki/Zero-width_space>`_
|
|
|
|
|
|
|
|
Source checks
|
|
-------------
|
|
|
|
Source checks can help developers improve the quality of source strings.
|
|
|
|
.. _check-ellipsis:
|
|
|
|
Ellipsis
|
|
~~~~~~~~
|
|
|
|
*The string uses three dots (...) instead of an ellipsis character (…)*
|
|
|
|
This fails when the string uses three dots (``...``) when it should use an ellipsis character (``…``).
|
|
|
|
Using the Unicode character is in most cases the better approach and looks better
|
|
rendered, and may sound better with text-to-speech.
|
|
|
|
.. seealso::
|
|
|
|
`Ellipsis on Wikipedia <https://en.wikipedia.org/wiki/Ellipsis>`_
|
|
|
|
|
|
.. _check-long-untranslated:
|
|
|
|
Long untranslated
|
|
~~~~~~~~~~~~~~~~~
|
|
|
|
*The string has not been translated for a long time*
|
|
|
|
.. versionadded:: 4.1
|
|
|
|
When the string has not been translated for a long time, it is can indicate problem in a
|
|
source string making it hard to translate.
|
|
|
|
|
|
.. _check-multiple-failures:
|
|
|
|
Multiple failing checks
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
*The translations in several languages have failing checks*
|
|
|
|
Numerous translations of this string have failing quality checks. This is
|
|
usually an indication that something could be done to improve the source
|
|
string.
|
|
|
|
This check failing can quite often be caused by a missing full stop at the end of
|
|
a sentence, or similar minor issues which translators tend to fix in
|
|
translation, while it would be better to fix it in the source string.
|
|
|
|
.. _check-unnamed-format:
|
|
|
|
Multiple unnamed variables
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
*There are multiple unnamed variables in the string, making it impossible for
|
|
translators to reorder them*
|
|
|
|
.. versionadded:: 4.1
|
|
|
|
There are multiple unnamed variables in the string, making it impossible for
|
|
translators to reorder them.
|
|
|
|
Consider using named variables instead to allow translators to reorder them.
|
|
|
|
.. _check-optional-plural:
|
|
|
|
Unpluralised
|
|
~~~~~~~~~~~~
|
|
|
|
*The string is used as plural, but not using plural forms*
|
|
|
|
The string is used as a plural, but does not use plural forms. In case your
|
|
translation system supports this, you should use the plural aware variant of
|
|
it.
|
|
|
|
For example with Gettext in Python it could be:
|
|
|
|
.. code-block:: python
|
|
|
|
from gettext import ngettext
|
|
|
|
print ngettext("Selected %d file", "Selected %d files", files) % files
|