Checks and fixups

Custom automatic fixups

You can also implement your own automatic fixup in addition to the standard ones and include them in AUTOFIX_LIST.

Le correzioni automatiche sono potenti, ma possono anche causare danni; fai attenzione quando ne scrivi una.

For example, the following automatic fixup would replace every occurrence of the string foo in a translation with bar:

from __future__ import annotations

from typing import TYPE_CHECKING

from weblate.trans.autofixes.base import AutoFix

if TYPE_CHECKING:
    from weblate.trans.models import Unit


class ReplaceFooWithBar(AutoFix):
    """Replace foo with bar."""

    # Might be localized using gettext_lazy
    name = "Foobar"

    def fix_single_target(
        self, target: str, source: str, unit: Unit
    ) -> tuple[str, bool]:
        if "foo" in target:
            return target.replace("foo", "bar"), True
        return target, False

To install custom checks, provide a fully-qualified path to the Python class in the AUTOFIX_LIST, see Controlli di qualità personalizzati, componenti aggiuntivi, suggerimenti automatici e auto correzioni.

Customizing behavior using flags

You can fine-tune Weblate’s behavior by using flags. The flags provide visual feedback to the translators and help them to improve their translation. The flags are merged from following sources:

The flags are comma-separated; if they have parameters, they are separated with colon. You can use quotes to include whitespaces or special characters in the string. For example:

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

Both single and double quotes are accepted, special characters are being escaped using backslash:

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

To verify that translators do not change the heading of a Markdown document. A failing check will be triggered if the string ### Index is translated as # Indice.

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

To ensure that internal links are not being translated (i.e. [test](../checks) does not become [test](../chequeos).

The flags defined on a higher level can be discarded using the discard:NAME syntax. For example, if a component is configured to safe-html, you can add discard:safe-html to the string flags to skip it for this particular string.

Here is a list of flags currently accepted:

read-only

The string is read-only and should not be edited in Weblate, see Stringhe sola lettura.

terminology

Used in Glossario. Copies the string into all glossary languages so it can be used consistently in all translations. Also useful in combination with read-only, for example in product names.

priority:N

Priority of the string. Higher priority strings are presented first for translation. The default priority is 100, the higher priority a string has, the earlier it is offered for translation.

xml-text

Treat text as XML document, affects Sintassi XML and Markup XML.

font-family:NAME

Define font-family for rendering checks, see Managing fonts.

font-weight:WEIGHT

Define font-weight for rendering checks, see Managing fonts.

font-size:SIZE

Define font-size for rendering checks, see Managing fonts.

font-spacing:SPACING

Define letter spacing for rendering checks, see Managing fonts.

icu-flags:FLAGS

Definire i cenni per personalizzare il comportamento del controllo di qualità ICU MessageFormat.

icu-tag-prefix:PREFIX

Imposta un prefisso richiesto per i tag XML per il controllo di qualità ICU MessageFormat.

placeholders:NAME:NAME2:...

Placeholder strings expected in translation, see Segnaposti.

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

Replacements to perform when checking resulting text parameters (for example in Dimensione massima della traduzione or Lunghezza massima della traduzione). The typical use case for this is to expand placeables to ensure that the text fits even with long values, for example: replacements:%s:"John Doe".

variants:SOURCE

Mark this string as a variant of string with matching source. See String variants.

regex:REGEX

Espressione regolare usata per corrispondenza con i file traduzione, vedi Espressione regolare.

discard:NAME

Discards flag defined on a higher level.

forbidden

Indicates forbidden translation in a glossary, see Traduzioni proibite.

strict-same

Make the Traduzione invariata avoid using the built-in words exceptions.

strict-format

Make format checks enforce using format even for plural forms with a single value, see Formatted strings.

case-insensitive

Adjust checks behavior to be case-insensitive. Currently affects only Segnaposti quality check.

accelerator

Specify the single punctuation accelerator marker, for example accelerator:&, accelerator:_, or accelerator:~. Enables the Accelerator key quality check.

asciidoc-text

Treat a text as an AsciiDoc document, affects Traduzione invariata. Enables the Markup AsciiDoc quality check.

bbcode-text

Treat a text as an Bulletin Board Code (BBCode) document, affects Traduzione invariata. Enables the Markup BBCode quality check.

check-glossary

Abilita il controllo di qualità Non segue il glossario.

fluent-parts

Abilita il controllo di qualità Parti Fluent.

fluent-references

Abilita il controllo di qualità Riferimenti Fluent.

fluent-target-inner-html

Abilita il controllo di qualità Traduzione Fluent HTML interno.

fluent-target-syntax

Abilita il controllo di qualità Sintassi Fluent traduzione.

angularjs-format

Abilita il controllo di qualità Stringa interpolazione AngularJS.

automattic-components-format

Abilita il controllo di qualità Formattazione dei componenti Automattic.

c-format

Abilita il controllo di qualità Formato C.

c-sharp-format

Abilita il controllo di qualità Formato C#.

csharp-format

Abilita il controllo di qualità Formato C#.

es-format

Abilita il controllo di qualità Letterali modello ECMAScript.

i18next-interpolation

Abilita il controllo di qualità Interpolazione i18next.

icu-message-format

Abilita i controlli di qualità ICU MessageFormat e Sintassi ICU MessageFormat.

java-printf-format

Abilita il controllo di qualità Formato Java.

java-format

Abilita il controllo di qualità Formato messaggio Java.

auto-java-messageformat

Treat a text as conditional Java MessageFormat, enabling Formato messaggio Java only when the source contains Java MessageFormat placeholders. Enables the Formato messaggio Java quality check.

javascript-format

Abilita il controllo di qualità Formato JavaScript.

laravel-format

Abilita il controllo di qualità Formato Laravel.

lua-format

Abilita il controllo di qualità Formato Lua.

object-pascal-format

Abilita il controllo di qualità Formato Object Pascal.

objc-format

Enables the Formato Objective-C quality check.

percent-placeholders

Abilita il controllo di qualità Segnaposti percentuale.

perl-brace-format

Abilita il controllo di qualità Formato parentesi graffa Perl.

perl-format

Abilita il controllo di qualità Formato Perl.

php-format

Abilita il controllo di qualità Formato PHP.

python-brace-format

Abilita il controllo di qualità Formato parentesi graffa Python.

python-format

Abilita il controllo qualità Formato Python.

qt-format

Abilita il controllo di qualità Formato Qt.

qt-plural-format

Abilita il controllo di qualità Formato Qt plurale.

ruby-format

Abilita il controllo di qualità Formato Ruby.

scheme-format

Abilita il controllo di qualità Formato Scheme.

vue-format

Abilita il controllo di qualità Formattazione Vue I18n.

rst-text

Treat a text as an reStructuredText document, affects Traduzione invariata. Enables the reStructuredText incoerente and Errore di sintassi reStructuredText quality checks.

md-text

Treat a text as a Markdown document, and provide Markdown syntax highlighting on the translation text area. Enables the Collegamenti markdown, Riferimenti markdown and Sintassi markdown quality checks.

max-length

Abilita il controllo di qualità Lunghezza massima della traduzione.

max-lines

Enables the Numero massimo di righe quality check.

max-size

Abilita il controllo di qualità Dimensione massima della traduzione.

placeholders

Abilita il controllo di qualità Segnaposti.

regex

Abilita il controllo di qualità Espressione regolare.

safe-mdx

Enables the Safe MDX quality check.

safe-html

Abilita il controllo di qualità HTML non sicuro.

auto-safe-html

Treat a text as conditional HTML, enabling HTML non sicuro only for plain text or source strings that contain standard HTML markup or valid custom elements. This is useful for extended Markdown variants such as MDX, where angle-bracket syntax may not be HTML. Enables the HTML non sicuro quality check.

url

La stringa dovrebbe essere composta solo da URL. Abilita il controllo di qualità URL.

fluent-source-inner-html

Abilita il controllo di qualità HTML interno sorgente Fluent.

fluent-source-syntax

Abilita il controllo di qualità Sintassi Fluent sorgente.

ignore-all-checks

Ignora tutti i controlli qualità.

ignore-accelerator

Skip the Accelerator key quality check.

ignore-asciidoc-markup

Skip the Markup AsciiDoc quality check.

ignore-bbcode

Salta il controllo di qualità Markup BBCode.

ignore-xml-chars-around-tags

Salta il controllo di qualità Caratteri attorno ai tag XML.

ignore-duplicate

Salta il controllo di qualità Parole duplicate consecutive.

ignore-check-glossary

Salta il controllo di qualità Non segue il glossario.

ignore-double-space

Salta il controllo di qualità Doppio spazio.

ignore-fluent-parts

Salta il controllo di qualità Parti Fluent.

ignore-fluent-references

Salta il controllo di qualità Riferimenti Fluent.

ignore-fluent-target-inner-html

Salta il controllo di qualità Traduzione Fluent HTML interno.

ignore-fluent-target-syntax

Salta il controllo di qualità Sintassi Fluent traduzione.

ignore-angularjs-format

Salta il controllo di qualità Stringa interpolazione AngularJS.

ignore-automattic-components-format

Salta il controllo di qualità Formattazione dei componenti Automattic.

ignore-c-format

Salta il controllo di qualità Formato C.

ignore-c-sharp-format

Salta il controllo di qualità Formato C#.

ignore-es-format

Salta il controllo di qualità Letterali modello ECMAScript.

ignore-i18next-interpolation

Salta il controllo di qualità Interpolazione i18next.

ignore-icu-message-format

Salta il controllo di qualità ICU MessageFormat.

ignore-java-printf-format

Salta il controllo di qualità Formato Java.

ignore-java-format

Salta il controllo di qualità Formato messaggio Java.

ignore-javascript-format

Salta il controllo di qualità Formato JavaScript.

ignore-laravel-format

Salta il controllo di qualità Formato Laravel.

ignore-lua-format

Salta il controllo di qualità Formato Lua.

ignore-object-pascal-format

Salta il controllo di qualità Formato Object Pascal.

ignore-objc-format

Skip the Formato Objective-C quality check.

ignore-percent-placeholders

Salta il controllo di qualità Segnaposti percentuale.

ignore-perl-brace-format

Salta il controllo di qualità Formato parentesi graffa Perl.

ignore-perl-format

Salta il controllo di qualità Formato Perl.

ignore-php-format

Salta il controllo di qualità Formato PHP.

ignore-python-brace-format

Salta il controllo di qualità Formato parentesi graffa Python.

ignore-python-format

Salta il controllo di qualità Formato Python.

ignore-qt-format

Salta il controllo di qualità Formato Qt.

ignore-qt-plural-format

Salta il controllo di qualità Formato Qt plurale.

ignore-ruby-format

Salta il controllo di qualità Formato Ruby.

ignore-scheme-format

Salta il controllo di qualità Formato Scheme.

ignore-vue-format

Salta il controllo di qualità Formattazione Vue I18n.

ignore-translated

Salta il controllo di qualità È stata tradotta.

ignore-inconsistent

Salta il controllo di qualità Incoerente.

ignore-rst-references

Salta il controllo di qualità reStructuredText incoerente.

ignore-kashida

Salta il controllo di qualità Usato lettera Kashida.

ignore-md-link

Salta il controllo di qualità Collegamenti markdown.

ignore-md-reflink

Salta il controllo di qualità Riferimenti markdown.

ignore-md-syntax

Salta il controllo di qualità Sintassi markdown.

ignore-max-length

Salta il controllo di qualità Lunghezza massima della traduzione.

ignore-max-lines

Skip the Numero massimo di righe quality check.

ignore-max-size

Salta il controllo di qualità Dimensione massima della traduzione.

ignore-escaped-newline

Salta il controllo di qualità \n non corrispondente.

ignore-end-colon

Salta il controllo di qualità Due punti non corrispondenti.

ignore-end-ellipsis

Salta il controllo di qualità Puntini di sospensione non corrispondenti.

ignore-end-exclamation

Salta il controllo di qualità Punto esclamativo non corrispondente.

ignore-end-stop

Salta il controllo di qualità Punto a capo non corrispondente.

ignore-end-interrobang

Salta il controllo di qualità Interrobang non corrispondente.

ignore-end-question

Salta il controllo di qualità Punto interrogativo non corrispondente.

ignore-end-semicolon

Salta il controllo di qualità Punto e virgola non corrispondente.

ignore-newline-count

Salta il controllo di qualità Mancata corrispondenza ritorni a capo.

ignore-plurals

Salta il controllo di qualità Plurali mancanti.

ignore-multiple-capital

Salta il controllo di qualità La stringa contiene più lettere maiuscole.

ignore-kabyle-characters

Salta il controllo di qualità Caratteri non standard in cabilo.

ignore-placeholders

Salta il controllo di qualità Segnaposti.

ignore-prohibited-initial-character

Salta il controllo di qualità Carattere iniziale proibito.

ignore-punctuation-spacing

Salta il controllo di qualità Spaziatura punteggiatura.

ignore-regex

Salta il controllo di qualità Espressione regolare.

ignore-rst-syntax

Salta il controllo di qualità Errore di sintassi reStructuredText.

ignore-reused

Salta il controllo di qualità Traduzione riusata.

ignore-safe-mdx

Skip the Safe MDX quality check.

ignore-same-plurals

Salta il controllo di qualità Uguale singolare/plurale.

ignore-begin-newline

Salta il controllo di qualità Nuova riga iniziale.

ignore-begin-space

Salta il controllo di qualità Spazi iniziali.

ignore-end-newline

Salta il controllo di qualità Righe vuote.

ignore-end-space

Salta il controllo di qualità Spazio finale.

ignore-same

Salta il controllo di qualità Traduzione invariata.

ignore-safe-html

Salta il controllo di qualità HTML non sicuro.

ignore-url

Salta il controllo di qualità URL.

ignore-xml-tags

Salta il controllo di qualità Markup XML.

ignore-xml-invalid

Salta il controllo di qualità Sintassi XML.

ignore-zero-width-space

Salta il controllo di qualità Spazi larghezza zero.

ignore-ellipsis

Salta il controllo di qualità Puntini di sospensione.

ignore-fluent-source-inner-html

Salta il controllo di qualità HTML interno sorgente Fluent.

ignore-fluent-source-syntax

Salta il controllo di qualità Sintassi Fluent sorgente.

ignore-icu-message-format

Salta il controllo di qualità Sintassi ICU MessageFormat.

ignore-long-untranslated

Salta il controllo di qualità Non tradotta da molto tempo.

ignore-multiple-failures

Salta il controllo di qualità Stringhe con errori.

ignore-unnamed-format

Salta il controllo di qualità Variabili senza nome multiple.

ignore-source-max-length

Skip the Lunghezza stringa sorgente quality check.

ignore-optional-plural

Salta il controllo di qualità Non al plurale.

Nota

Generally the rule is named ignore-* for any check, using its identifier, so you can use this even for your custom checks.

These flags are understood both in Component configuration settings, per source string settings and in the translation file itself (for example in GNU gettext).

Flag basati sulla posizione

Some flags are added to strings by default, based on their locations. This means that certain checks will be automatically enabled depending on where the string is used.

  • rst-text: This flag is automatically added to strings in reStructuredText files, if location extension is .rst.

  • md-text: This flag is automatically added to strings in Markdown and MDX files, if location extension is .md, .markdown, or .mdx.

Enforcing checks

The enforced checks cannot be dismissed and mark string as Needs editing (see Translation states). This prevents translators from hiding such checks.

Suggerimento

L’attivazione dell’applicazione del controllo non la abilita automaticamente. Alcuni controlli devono essere attivati aggiungendo il flag corrispondente alla stringa o ai flag del componente.

This is best used with checks that can cause serious issues when used like checks for Formatted strings. Using for style checks like Traduzione invariata is not recommended because dismissal is sometimes a reasonable approach in these.

The Filtro qualità traduzione can then be used to exclude strings needing editing from being committed to the version control.

Managing fonts

Suggerimento

Fonts uploaded into Weblate are used purely for purposes of the Dimensione massima della traduzione check, they do not have an effect in Weblate user interface.

The Dimensione massima della traduzione check used to calculate dimensions of the rendered text needs font to be loaded into Weblate and selected using a translation flag (see Customizing behavior using flags).

Weblate font management tool in Fonts under the Operations menu of your translation project provides interface to upload and manage fonts. TrueType or OpenType fonts can be uploaded, set up font-groups and use those in the check.

The font-groups allow you to define different fonts for different languages, which is typically needed for non-latin languages:

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

The font-groups are identified by name, which can not contain whitespace or special characters, so that it can be easily used in the check definition:

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

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

../_images/font-edit.webp

You can have a number of fonts loaded into Weblate:

../_images/font-list.webp

To use the fonts for checking the string length, pass it the appropriate flags (see Customizing behavior using flags). You will probably need the following ones:

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

Defines maximal width in pixels and, optionally, the maximum number of lines. Word wrapping is applied when more than one line is configured.

font-family:ubuntu

Defines font group to use by specifying its identifier.

font-size:22

Defines font size in pixels.

Writing own checks

A wide range of quality checks are built-in, (see Quality checks), though they might not cover everything you want to check. The list of performed checks can be adjusted using CHECK_LIST, and you can also add custom checks.

  1. Subclass the weblate.checks.Check

  2. Set a few attributes.

  3. Implement either the check (if you want to deal with plurals in your code) or the check_single method (which does it for you).

Some examples:

To install custom checks, provide a fully-qualified path to the Python class in the CHECK_LIST, see Controlli di qualità personalizzati, componenti aggiuntivi, suggerimenti automatici e auto correzioni.

Checking translation text does not contain «foo»

This is a pretty simple check which just checks whether the translation is missing the string «foo».

"""Simple quality check example."""

from __future__ import annotations

from typing import TYPE_CHECKING

from django.utils.translation import gettext_lazy

from weblate.checks.base import TargetCheck

if TYPE_CHECKING:
    from weblate.trans.models import Unit


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: str, target: str, unit: Unit) -> bool:
        return "foo" in target

Checking that Czech translation text plurals differ

Check using language info to verify the two plural forms in Czech language are not same.

"""Quality check example for Czech plurals."""

from __future__ import annotations

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) -> bool:
        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