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:
Flag aggiuntivi della stringa sorgente:
Additional info on source strings describes manual editing.
Modifica collettiva can be used to apply flags in batch.
Modifica collettiva add-on can apply flags automatically.
Per-string flags extracted from the file format, see Formati dei file di localizzazione.
Translation flags (currently only
read-onlyflag for bilingual source string or when monolingual template editing is turned off).File-format specific flags.
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-onlyThe string is read-only and should not be edited in Weblate, see Stringhe sola lettura.
terminologyUsed 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:NPriority 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-textTreat text as XML document, affects Sintassi XML and Markup XML.
font-family:NAMEDefine font-family for rendering checks, see Managing fonts.
font-weight:WEIGHTDefine font-weight for rendering checks, see Managing fonts.
font-size:SIZEDefine font-size for rendering checks, see Managing fonts.
font-spacing:SPACINGDefine letter spacing for rendering checks, see Managing fonts.
icu-flags:FLAGSDefinire i cenni per personalizzare il comportamento del controllo di qualità ICU MessageFormat.
icu-tag-prefix:PREFIXImposta 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:SOURCEMark this string as a variant of string with matching source. See String variants.
regex:REGEXEspressione regolare usata per corrispondenza con i file traduzione, vedi Espressione regolare.
discard:NAMEDiscards flag defined on a higher level.
forbiddenIndicates forbidden translation in a glossary, see Traduzioni proibite.
strict-sameMake the Traduzione invariata avoid using the built-in words exceptions.
strict-formatMake format checks enforce using format even for plural forms with a single value, see Formatted strings.
case-insensitiveAdjust checks behavior to be case-insensitive. Currently affects only Segnaposti quality check.
acceleratorSpecify the single punctuation accelerator marker, for example
accelerator:&,accelerator:_, oraccelerator:~. Enables the Accelerator key quality check.asciidoc-textTreat a text as an AsciiDoc document, affects Traduzione invariata. Enables the Markup AsciiDoc quality check.
bbcode-textTreat a text as an Bulletin Board Code (BBCode) document, affects Traduzione invariata. Enables the Markup BBCode quality check.
check-glossaryAbilita il controllo di qualità Non segue il glossario.
fluent-partsAbilita il controllo di qualità Parti Fluent.
fluent-referencesAbilita il controllo di qualità Riferimenti Fluent.
fluent-target-inner-htmlAbilita il controllo di qualità Traduzione Fluent HTML interno.
fluent-target-syntaxAbilita il controllo di qualità Sintassi Fluent traduzione.
angularjs-formatAbilita il controllo di qualità Stringa interpolazione AngularJS.
automattic-components-formatAbilita il controllo di qualità Formattazione dei componenti Automattic.
c-formatAbilita il controllo di qualità Formato C.
c-sharp-formatAbilita il controllo di qualità Formato C#.
csharp-formatAbilita il controllo di qualità Formato C#.
es-formatAbilita il controllo di qualità Letterali modello ECMAScript.
i18next-interpolationAbilita il controllo di qualità Interpolazione i18next.
icu-message-formatAbilita i controlli di qualità ICU MessageFormat e Sintassi ICU MessageFormat.
java-printf-formatAbilita il controllo di qualità Formato Java.
java-formatAbilita il controllo di qualità Formato messaggio Java.
auto-java-messageformatTreat 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-formatAbilita il controllo di qualità Formato JavaScript.
laravel-formatAbilita il controllo di qualità Formato Laravel.
lua-formatAbilita il controllo di qualità Formato Lua.
object-pascal-formatAbilita il controllo di qualità Formato Object Pascal.
objc-formatEnables the Formato Objective-C quality check.
percent-placeholdersAbilita il controllo di qualità Segnaposti percentuale.
perl-brace-formatAbilita il controllo di qualità Formato parentesi graffa Perl.
perl-formatAbilita il controllo di qualità Formato Perl.
php-formatAbilita il controllo di qualità Formato PHP.
python-brace-formatAbilita il controllo di qualità Formato parentesi graffa Python.
python-formatAbilita il controllo qualità Formato Python.
qt-formatAbilita il controllo di qualità Formato Qt.
qt-plural-formatAbilita il controllo di qualità Formato Qt plurale.
ruby-formatAbilita il controllo di qualità Formato Ruby.
scheme-formatAbilita il controllo di qualità Formato Scheme.
vue-formatAbilita il controllo di qualità Formattazione Vue I18n.
rst-textTreat a text as an reStructuredText document, affects Traduzione invariata. Enables the reStructuredText incoerente and Errore di sintassi reStructuredText quality checks.
md-textTreat 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-lengthAbilita il controllo di qualità Lunghezza massima della traduzione.
max-linesEnables the Numero massimo di righe quality check.
max-sizeAbilita il controllo di qualità Dimensione massima della traduzione.
placeholdersAbilita il controllo di qualità Segnaposti.
regexAbilita il controllo di qualità Espressione regolare.
safe-mdxEnables the Safe MDX quality check.
safe-htmlAbilita il controllo di qualità HTML non sicuro.
auto-safe-htmlTreat 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.
urlLa stringa dovrebbe essere composta solo da URL. Abilita il controllo di qualità URL.
fluent-source-inner-htmlAbilita il controllo di qualità HTML interno sorgente Fluent.
fluent-source-syntaxAbilita il controllo di qualità Sintassi Fluent sorgente.
ignore-all-checksIgnora tutti i controlli qualità.
ignore-acceleratorSkip the Accelerator key quality check.
ignore-asciidoc-markupSkip the Markup AsciiDoc quality check.
ignore-bbcodeSalta il controllo di qualità Markup BBCode.
ignore-xml-chars-around-tagsSalta il controllo di qualità Caratteri attorno ai tag XML.
ignore-duplicateSalta il controllo di qualità Parole duplicate consecutive.
ignore-check-glossarySalta il controllo di qualità Non segue il glossario.
ignore-double-spaceSalta il controllo di qualità Doppio spazio.
ignore-fluent-partsSalta il controllo di qualità Parti Fluent.
ignore-fluent-referencesSalta il controllo di qualità Riferimenti Fluent.
ignore-fluent-target-inner-htmlSalta il controllo di qualità Traduzione Fluent HTML interno.
ignore-fluent-target-syntaxSalta il controllo di qualità Sintassi Fluent traduzione.
ignore-angularjs-formatSalta il controllo di qualità Stringa interpolazione AngularJS.
ignore-automattic-components-formatSalta il controllo di qualità Formattazione dei componenti Automattic.
ignore-c-formatSalta il controllo di qualità Formato C.
ignore-c-sharp-formatSalta il controllo di qualità Formato C#.
ignore-es-formatSalta il controllo di qualità Letterali modello ECMAScript.
ignore-i18next-interpolationSalta il controllo di qualità Interpolazione i18next.
ignore-icu-message-formatSalta il controllo di qualità ICU MessageFormat.
ignore-java-printf-formatSalta il controllo di qualità Formato Java.
ignore-java-formatSalta il controllo di qualità Formato messaggio Java.
ignore-javascript-formatSalta il controllo di qualità Formato JavaScript.
ignore-laravel-formatSalta il controllo di qualità Formato Laravel.
ignore-lua-formatSalta il controllo di qualità Formato Lua.
ignore-object-pascal-formatSalta il controllo di qualità Formato Object Pascal.
ignore-objc-formatSkip the Formato Objective-C quality check.
ignore-percent-placeholdersSalta il controllo di qualità Segnaposti percentuale.
ignore-perl-brace-formatSalta il controllo di qualità Formato parentesi graffa Perl.
ignore-perl-formatSalta il controllo di qualità Formato Perl.
ignore-php-formatSalta il controllo di qualità Formato PHP.
ignore-python-brace-formatSalta il controllo di qualità Formato parentesi graffa Python.
ignore-python-formatSalta il controllo di qualità Formato Python.
ignore-qt-formatSalta il controllo di qualità Formato Qt.
ignore-qt-plural-formatSalta il controllo di qualità Formato Qt plurale.
ignore-ruby-formatSalta il controllo di qualità Formato Ruby.
ignore-scheme-formatSalta il controllo di qualità Formato Scheme.
ignore-vue-formatSalta il controllo di qualità Formattazione Vue I18n.
ignore-translatedSalta il controllo di qualità È stata tradotta.
ignore-inconsistentSalta il controllo di qualità Incoerente.
ignore-rst-referencesSalta il controllo di qualità reStructuredText incoerente.
ignore-kashidaSalta il controllo di qualità Usato lettera Kashida.
ignore-md-linkSalta il controllo di qualità Collegamenti markdown.
ignore-md-reflinkSalta il controllo di qualità Riferimenti markdown.
ignore-md-syntaxSalta il controllo di qualità Sintassi markdown.
ignore-max-lengthSalta il controllo di qualità Lunghezza massima della traduzione.
ignore-max-linesSkip the Numero massimo di righe quality check.
ignore-max-sizeSalta il controllo di qualità Dimensione massima della traduzione.
ignore-escaped-newlineSalta il controllo di qualità \n non corrispondente.
ignore-end-colonSalta il controllo di qualità Due punti non corrispondenti.
ignore-end-ellipsisSalta il controllo di qualità Puntini di sospensione non corrispondenti.
ignore-end-exclamationSalta il controllo di qualità Punto esclamativo non corrispondente.
ignore-end-stopSalta il controllo di qualità Punto a capo non corrispondente.
ignore-end-interrobangSalta il controllo di qualità Interrobang non corrispondente.
ignore-end-questionSalta il controllo di qualità Punto interrogativo non corrispondente.
ignore-end-semicolonSalta il controllo di qualità Punto e virgola non corrispondente.
ignore-newline-countSalta il controllo di qualità Mancata corrispondenza ritorni a capo.
ignore-pluralsSalta il controllo di qualità Plurali mancanti.
ignore-multiple-capitalSalta il controllo di qualità La stringa contiene più lettere maiuscole.
ignore-kabyle-charactersSalta il controllo di qualità Caratteri non standard in cabilo.
ignore-placeholdersSalta il controllo di qualità Segnaposti.
ignore-prohibited-initial-characterSalta il controllo di qualità Carattere iniziale proibito.
ignore-punctuation-spacingSalta il controllo di qualità Spaziatura punteggiatura.
ignore-regexSalta il controllo di qualità Espressione regolare.
ignore-rst-syntaxSalta il controllo di qualità Errore di sintassi reStructuredText.
ignore-reusedSalta il controllo di qualità Traduzione riusata.
ignore-safe-mdxSkip the Safe MDX quality check.
ignore-same-pluralsSalta il controllo di qualità Uguale singolare/plurale.
ignore-begin-newlineSalta il controllo di qualità Nuova riga iniziale.
ignore-begin-spaceSalta il controllo di qualità Spazi iniziali.
ignore-end-newlineSalta il controllo di qualità Righe vuote.
ignore-end-spaceSalta il controllo di qualità Spazio finale.
ignore-sameSalta il controllo di qualità Traduzione invariata.
ignore-safe-htmlSalta il controllo di qualità HTML non sicuro.
ignore-urlSalta il controllo di qualità URL.
ignore-xml-tagsSalta il controllo di qualità Markup XML.
ignore-xml-invalidSalta il controllo di qualità Sintassi XML.
ignore-zero-width-spaceSalta il controllo di qualità Spazi larghezza zero.
ignore-ellipsisSalta il controllo di qualità Puntini di sospensione.
ignore-fluent-source-inner-htmlSalta il controllo di qualità HTML interno sorgente Fluent.
ignore-fluent-source-syntaxSalta il controllo di qualità Sintassi Fluent sorgente.
ignore-icu-message-formatSalta il controllo di qualità Sintassi ICU MessageFormat.
ignore-long-untranslatedSalta il controllo di qualità Non tradotta da molto tempo.
ignore-multiple-failuresSalta il controllo di qualità Stringhe con errori.
ignore-unnamed-formatSalta il controllo di qualità Variabili senza nome multiple.
ignore-source-max-lengthSkip the Lunghezza stringa sorgente quality check.
ignore-optional-pluralSalta 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:
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:
Font-family and style are automatically recognized after uploading them:
You can have a number of fonts loaded into Weblate:
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:5Defines maximal width in pixels and, optionally, the maximum number of lines. Word wrapping is applied when more than one line is configured.
font-family:ubuntuDefines font group to use by specifying its identifier.
font-size:22Defines 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.
Subclass the weblate.checks.Check
Set a few attributes.
Implement either the
check(if you want to deal with plurals in your code) or thecheck_singlemethod (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