Checks and fixups - Weblate 5.17.1 documentation
Skip to content
User docs
Weblate basics
Registration and user profile
Translating using Weblate
Downloading and uploading translations
Glossary
Checks and fixups
Searching
Translation workflows
Frequently Asked Questions
Version control integration
Weblate’s REST API
Weblate Client
Weblate’s Python API
Application developer guide
Starting with internationalization
Migrating to Weblate
Integrating with Weblate
Translating software using GNU gettext
Multi-platform localization
Translating documentation using Sphinx
Translating HTML and JavaScript using Weblate CDN
Localization libraries and packages
Translation component alerts
Building a translators community
Managing translations
Reviewing strings
Building the translation community
Translation progress reporting
Success stories
Administrator docs
Configuration instructions
Weblate deployments
Upgrading Weblate
Backing up and moving Weblate
Authentication
Two-factor authentication
Access control
Translation projects
Language definitions
Continuous localization
Licensing translations
Translation process
Checks and fixups
Automatic suggestions
Add-ons
Translation Memory
Configuration
Sample configuration
Management commands
Announcements
Component Lists
Optional Weblate modules
Customizing Weblate
Management interface
Getting support for Weblate
Contributor docs
Contributing to Weblate
Weblate Contributor Communication Guidelines
Starting contributing code to Weblate
Weblate source code
Debugging Weblate
Contribute to Weblate documentation
Weblate internals
Developing add-ons
Weblate frontend
Reporting issues in Weblate
Weblate testsuite and continuous integration
Local testing of Weblate modules
Testing repository
Data schemas
Releasing Weblate
Contributing to Weblate modules
Subprojects and embedded code
About Weblate
Code of Conduct
Weblate license
Weblate Trademark Guidelines
Secure Weblate
Security, privacy and compliance
Dependencies
Vulnerability and incident handling
Incident response plan for Weblate
Password security
Disaster recovery plan
Weblate threat model
Privacy regulations compliance
US controls compliance
Localization Threat Model
Data residency
File formats
Localization file formats
Android string resources
Apple iOS strings
App store metadata files
ARB File
AsciiDoc files
Catkeys file
Compose Multiplatform resources
CSV files
DTD files
Excel Open XML
Flat XML files
Fluent format
Format.JS JSON file
GNU gettext PO (Portable Object)
go-i18n JSON files
gotext JSON files
GWT properties
HTML files
i18next JSON files
IDML Format
INI translations
Inno Setup INI translations
Java properties
Joomla translations
JSON files
Laravel PHP strings
Markdown files
draggable/i18n lang files
Mobile Kotlin resources
Nextcloud Apps JSON files
OpenDocument Format
PHP strings
Qt Linguist .ts
JavaScript Resource Files (RESJSON)
ResourceDictionary files
.NET resource files (RESX, RESW)
Ruby YAML files
Stringsdict format
Subtitle files
TermBase eXchange format
TOML
Text files
WebExtension JSON
Windows RC files
WixLocalization file
XLIFF 1.1 and 1.2
XLIFF 2.0
YAML files
Change history
Weblate 5.17.1
Weblate 5.17
Weblate 5.16.2
Weblate 5.16.1
Weblate 5.16
Weblate 5.15.2
Weblate 5.15.1
Weblate 5.15
Weblate 5.14.3
Weblate 5.14.2
Weblate 5.14.1
Weblate 5.14
Weblate 5.13.3
Weblate 5.13.2
Weblate 5.13.1
Weblate 5.13
Weblate 5.12.2
Weblate 5.12.1
Weblate 5.12
Weblate 5.11.4
Weblate 5.11.3
Weblate 5.11.2
Weblate 5.11.1
Weblate 5.11
Weblate 5.10.4
Weblate 5.10.3
Weblate 5.10.2
Weblate 5.10.1
Weblate 5.10
Weblate 5.9.2
Weblate 5.9.1
Weblate 5.9
Weblate 5.8.4
Weblate 5.8.3
Weblate 5.8.2
Weblate 5.8.1
Weblate 5.8
Weblate 5.7.2
Weblate 5.7.1
Weblate 5.7
Weblate 5.6.2
Weblate 5.6.1
Weblate 5.6
Weblate 5.5.5
Weblate 5.5.4
Weblate 5.5.3
Weblate 5.5.2
Weblate 5.5.1
Weblate 5.5
Weblate 5.4.3
Weblate 5.4.2
Weblate 5.4.1
Weblate 5.4
Weblate 5.3.1
Weblate 5.3
Weblate 5.2.1
Weblate 5.2
Weblate 5.1.1
Weblate 5.1
Weblate 5.0.2
Weblate 5.0.1
Weblate 5.0
Weblate 4.x series
Weblate 3.x series
Weblate 2.x series
Weblate 1.x series
Weblate 0.x series
Indices and tables
Index
Module Index
View this page
Edit this page
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:
Automatic fixups
In addition to
Quality checks
, Weblate can fix some common
errors in translated strings automatically. Use it with caution to not have
it add errors.
See also
AUTOFIX_LIST
Trailing ellipsis replacer
Class name
weblate.trans.autofixes.chars.ReplaceTrailingDotsWithEllipsis
Replace trailing dots (
...
) with an ellipsis (
) to make it consistent with the source string.
Zero-width space removal
Class name
weblate.trans.autofixes.chars.RemoveZeroSpace
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
Class name
weblate.trans.autofixes.chars.RemoveControlChars
Removes control characters if the source does not contain any.
Devanagari danda
Class name
weblate.trans.autofixes.chars.DevanagariDanda
Replaces sentence full stop in Bangla by the Devanagari danda character (
).
Punctuation spacing
Class name
weblate.trans.autofixes.chars.PunctuationSpacing
Added in version 5.3.
Ensures French uses correct punctuation spacing.
This fixup can be disabled via
ignore-punctuation-spacing
flag (which also
disables
Punctuation spacing
).
Unsafe HTML cleanup
Class name
weblate.trans.autofixes.html.BleachHTML
Removes unsafe HTML markup from strings flagged as
safe-html
See also
Unsafe HTML
Trailing and leading whitespace fixer
Class name
weblate.trans.autofixes.whitespace.SameBookendingWhitespace
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.
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.
See also
CHECK_LIST
Customizing behavior using flags
Translation checks
Executed upon every translation change, helping translators maintain
good quality translations.
BBCode markup
Changed in version 5.10:
This checks no longer relies on unreliable automatic detection, it now needs to be turned on using the
bbcode-text
flag.
Summary
BBCode in translation does not match source.
Scope
translated strings
Check class
weblate.checks.markup.BBCodeCheck
Check identifier
bbcode
Trigger
This check needs to be enabled using a flag.
Flag to enable
bbcode-text
Flag to ignore
ignore-bbcode
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.
Chars around XML tags
Summary
Characters surrounding XML tags in translation do not align with source.
Scope
translated strings
Check class
weblate.checks.markup.XMLCharsAroundTagsCheck
Check identifier
xml-chars-around-tags
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-xml-chars-around-tags
Checks that the characters surrounding an XML tag are consistent between both
source and translation. Ensures letters are not replaced with non-letters, and vice versa.
Note
This check is disabled by the
safe-html
flag as the HTML cleanup done by
it can produce HTML markup which is not valid XML.
Consecutive duplicated words
Added in version 4.1.
Summary
Text contains the same word twice in a row.
Scope
translated strings
Check class
weblate.checks.duplicate.DuplicateCheck
Check identifier
duplicate
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-duplicate
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
Reporting issues in Weblate
Does not follow glossary
Added in version 4.5.
Summary
The translation does not follow terms defined in a glossary.
Scope
translated strings
Check class
weblate.checks.glossary.GlossaryCheck
Check identifier
check_glossary
Trigger
This check needs to be enabled using a flag.
Flag to enable
check-glossary
Flag to ignore
ignore-check-glossary
This check has to be turned on using
check-glossary
flag (see
Customizing behavior using flags
). 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.
It also utilizes untranslatable glossary terms in
Unchanged translation
See also
Glossary
Customizing behavior using flags
Translation flags
Double space
Summary
Translation contains double space.
Scope
translated strings
Check class
weblate.checks.chars.DoubleSpaceCheck
Check identifier
double_space
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-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.
Fluent parts
Added in version 5.0.
Summary
Fluent parts should match.
Scope
translated strings
Check class
weblate.checks.fluent.parts.FluentPartsCheck
Check identifier
fluent-parts
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
Fluent format
Flag to enable
fluent-parts
Flag to ignore
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.
Note
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.
See also
Fluent Attributes
Fluent references
Added in version 5.0.
Summary
Fluent references should match.
Scope
translated strings
Check class
weblate.checks.fluent.references.FluentReferencesCheck
Check identifier
fluent-references
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
Fluent format
Flag to enable
fluent-references
Flag to ignore
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.
See also
Fluent Variables
Fluent Message and Term references
Fluent Select Expressions
Fluent translation inner HTML
Added in version 5.0.
Summary
Fluent target should be valid inner HTML that matches.
Scope
translated strings
Check class
weblate.checks.fluent.inner_html.FluentTargetInnerHTMLCheck
Check identifier
fluent-target-inner-html
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
Fluent format
Flag to enable
fluent-target-inner-html
Flag to ignore
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


For example, the following source:
Source message with icon
would match with:
Translated message with icon
but not:
Translated message with icon
nor
Translated message
with no icon
See also
Fluent source inner HTML
Fluent DOM
Fluent translation syntax
Added in version 5.0.
Summary
Fluent syntax error in the translation.
Scope
translated strings
Check class
weblate.checks.fluent.syntax.FluentTargetSyntaxCheck
Check identifier
fluent-target-syntax
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
Fluent format
Flag to enable
fluent-target-syntax
Flag to ignore
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.
See also
Fluent source syntax
Fluent Syntax Guide
Mozilla Basic Syntax Guide
Formatted strings
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 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
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
Additional info on source strings
) or in a
Component configuration
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.
Hint
In case specific format check is not available in Weblate, you can use
generic
Placeholders
Besides checking, this will also highlight the formatting strings to easily
insert them into translated strings:
AngularJS interpolation string
Summary
AngularJS interpolation strings do not match source.
Scope
translated strings
Check class
weblate.checks.angularjs.AngularJSInterpolationCheck
Check identifier
angularjs_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
angularjs-format
Flag to ignore
ignore-angularjs-format
Named format string example
Your
balance
is
{{amount}}
{{
currency
}}
See also
Formatted strings
AngularJS text interpolation
Automattic components formatting
Summary
The Automattic components’ placeholders do not match the source.
Scope
translated strings
Check class
weblate.checks.format.AutomatticComponentsCheck
Check identifier
automattic_components_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
automattic-components-format
Flag to ignore
ignore-automattic-components-format
Simple format string example
They
bought
{{strong}}apples{{/strong}}.
See also
Formatted strings
Interpolate Components
C format
Summary
C format string does not match source.
Scope
translated strings
Check class
weblate.checks.format.CFormatCheck
Check identifier
c_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
c-format
Flag to ignore
ignore-c-format
Simple format string example
There
are
%d
apples
Position format string example
Your
balance
is
%1$d
%2$s
See also
Formatted strings
C format strings
C printf format
C# format
Summary
C# format string does not match source.
Scope
translated strings
Check class
weblate.checks.format.CSharpFormatCheck
Check identifier
c_sharp_format
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
ResourceDictionary files
Flag to enable
c-sharp-format
csharp-format
Flag to ignore
ignore-c-sharp-format
Position format string example
There
are
{0}
apples
See also
Formatted strings
C# String Format
ECMAScript template literals
Summary
ECMAScript template literals do not match source.
Scope
translated strings
Check class
weblate.checks.format.ESTemplateLiteralsCheck
Check identifier
es_format
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
draggable/i18n lang files
Flag to enable
es-format
Flag to ignore
ignore-es-format
Interpolation example
There
are
${number}
apples
See also
Formatted strings
Template literals
i18next interpolation
Added in version 4.0.
Summary
The i18next interpolation does not match source.
Scope
translated strings
Check class
weblate.checks.format.I18NextInterpolationCheck
Check identifier
i18next_interpolation
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
i18next JSON files
i18next JSON files
Flag to enable
i18next-interpolation
Flag to ignore
ignore-i18next-interpolation
Interpolation example
There
are
{{number}}
apples
Nesting example
There
are
$t(number)
apples
See also
Formatted strings
i18next interpolation
ICU MessageFormat
Added in version 4.9.
Summary
Syntax errors and/or placeholder mismatches in ICU MessageFormat strings.
Scope
translated strings
Check class
weblate.checks.icu.ICUMessageFormatCheck
Check identifier
icu_message_format
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
ARB File
Format.JS JSON file
Flag to enable
icu-message-format
Flag to ignore
ignore-icu-message-format
Interpolation example
There
{number,
plural,
one
{is
one
apple}
other
{are
apples}}.
This check has support for both pure ICU MessageFormat messages as well as ICU with simple
XML tags. You can configure the behavior of this check by using
icu-flags:*
, either by
opting into XML support or by disabling certain sub-checks. For example, the following flag
enables XML support while disabling validation of plural sub-messages:
icu-message-format, icu-flags:xml:-plural_selectors
xml
Enable support for simple XML tags. By default, XML tags
are parsed loosely. Stray
characters are ignored
if they are not reasonably part of a tag.
strict-xml
Enable support for strict XML tags. All
characters
must be escaped if they are not part of a tag.
-highlight
Disable highlighting placeholders in the editor.
-require_other
Disable requiring sub-messages to have an
other
selector.
-submessage_selectors
Skip checking that sub-message selectors match the source.
-types
Skip checking that placeholder types match the source.
-extra
Skip checking that no placeholders are present that were
not present in the source string.
-missing
Skip checking that no placeholders are missing that were
present in the source string.
Additionally, when
strict-xml
is not enabled but
xml
is enabled, you can use the
icu-tag-prefix:PREFIX
flag to require that all XML tags start with a specific string.
For example, the following flag will only allow XML tags to be matched if they start with
icu-message-format, icu-flags:xml, icu-tag-prefix:"x:"
This would match
click
here

but not
this
See also
ICU MessageFormat syntax
Formatted strings
ICU: Formatting Messages
Format.JS: Message Syntax
Java format
Summary
Java format string does not match source.
Scope
translated strings
Check class
weblate.checks.format.JavaFormatCheck
Check identifier
java_printf_format
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
Android string resources
Mobile Kotlin resources
Compose Multiplatform resources
Flag to enable
java-printf-format
Flag to ignore
ignore-java-printf-format
Simple format string example
There
are
%d
apples
Position format string example
Your
balance
is
%1$d
%2$s
Changed in version 4.14:
This used to be toggled by the
java-format
flag, it was changed for consistency with GNU gettext.
See also
Formatted strings
Java Format Strings
Java MessageFormat
Summary
Java MessageFormat string does not match source.
Scope
translated strings
Check class
weblate.checks.format.JavaMessageFormatCheck
Check identifier
java_format
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
Java properties
GWT properties
Flag to enable
auto-java-messageformat
java-format
Automatic flag behavior
auto-java-messageformat
: Treat a text as conditional Java MessageFormat, enabling
Java MessageFormat
only when the source contains Java MessageFormat placeholders.
Flag to ignore
ignore-java-format
Position format string example
There
are
{0}
apples
Changed in version 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.
See also
Formatted strings
Java MessageFormat
JavaScript format
Summary
JavaScript format string does not match source.
Scope
translated strings
Check class
weblate.checks.format.JavaScriptFormatCheck
Check identifier
javascript_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
javascript-format
Flag to ignore
ignore-javascript-format
Simple format string example
There
are
%d
apples
See also
Formatted strings
JavaScript formatting strings
Laravel format
Summary
Laravel format string does not match source.
Scope
translated strings
Check class
weblate.checks.format.LaravelFormatCheck
Check identifier
laravel_format
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
Laravel PHP strings
Flag to enable
laravel-format
Flag to ignore
ignore-laravel-format
Named format string example
The
:attribute
must
be
:value
See also
Formatted strings
Laravel translation formatting
Lua format
Summary
Lua format string does not match source.
Scope
translated strings
Check class
weblate.checks.format.LuaFormatCheck
Check identifier
lua_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
lua-format
Flag to ignore
ignore-lua-format
Simple format string example
There
are
%d
apples
See also
Formatted strings
Lua formatting strings
Object Pascal format
Summary
Object Pascal format string does not match source.
Scope
translated strings
Check class
weblate.checks.format.ObjectPascalFormatCheck
Check identifier
object_pascal_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
object-pascal-format
Flag to ignore
ignore-object-pascal-format
Simple format string example
There
are
%d
apples
See also
Formatted strings
Object Pascal formatting strings
Free Pascal formatting strings
Delphi formatting strings
Objective-C format
Added in version 5.17.
Summary
Objective-C format string does not match source.
Scope
translated strings
Check class
weblate.checks.format.ObjCFormatCheck
Check identifier
objc_format
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
Apple iOS strings
Stringsdict format
Flag to enable
objc-format
Flag to ignore
ignore-objc-format
Percent placeholders
Added in version 4.0.
Summary
The percent placeholders do not match source.
Scope
translated strings
Check class
weblate.checks.format.PercentPlaceholdersCheck
Check identifier
percent_placeholders
Trigger
This check needs to be enabled using a flag.
Flag to enable
percent-placeholders
Flag to ignore
ignore-percent-placeholders
Simple format string example
There
are
%number%
apples
See also
Formatted strings
Perl brace format
Summary
Perl brace format string does not match source.
Scope
translated strings
Check class
weblate.checks.format.PerlBraceFormatCheck
Check identifier
perl_brace_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
perl-brace-format
Flag to ignore
ignore-perl-brace-format
Named format string example
There
are
{number}
apples
See also
Formatted strings
Perl Format Strings
Perl format
Summary
Perl format string does not match source.
Scope
translated strings
Check class
weblate.checks.format.PerlFormatCheck
Check identifier
perl_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
perl-format
Flag to ignore
ignore-perl-format
Simple format string example
There
are
%d
apples
Position format string example
Your
balance
is
%1$d
%2$s
See also
Formatted strings
Perl sprintf
Perl Format Strings
PHP format
Summary
PHP format string does not match source.
Scope
translated strings
Check class
weblate.checks.format.PHPFormatCheck
Check identifier
php_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
php-format
Flag to ignore
ignore-php-format
Simple format string example
There
are
%d
apples
Position format string example
Your
balance
is
%1$d
%2$s
See also
Formatted strings
PHP sprintf documentation
PHP Format Strings
Python brace format
Summary
Python brace format string does not match source.
Scope
translated strings
Check class
weblate.checks.format.PythonBraceFormatCheck
Check identifier
python_brace_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
python-brace-format
Flag to ignore
ignore-python-brace-format
Simple format string
There
are
{}
apples
Named format string example
Your
balance
is
{amount}
{currency}
See also
Formatted strings
Python brace format
Python Format Strings
Python format
Summary
Python format string does not match source.
Scope
translated strings
Check class
weblate.checks.format.PythonFormatCheck
Check identifier
python_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
python-format
Flag to ignore
ignore-python-format
Simple format string
There
are
%d
apples
Named format string example
Your
balance
is
%(amount)d
%(currency)s
See also
Formatted strings
Python string formatting
Python Format Strings
Qt format
Summary
Qt format string does not match source.
Scope
translated strings
Check class
weblate.checks.qt.QtFormatCheck
Check identifier
qt_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
qt-format
Flag to ignore
ignore-qt-format
Position format string example
There
are
%1
apples
See also
Formatted strings
Qt QString::arg()
Qt plural format
Summary
Qt plural format string does not match source.
Scope
translated strings
Check class
weblate.checks.qt.QtPluralCheck
Check identifier
qt_plural_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
qt-plural-format
Flag to ignore
ignore-qt-plural-format
Plural format string example
There
are
%Ln
apple(s)
See also
Formatted strings
Qt i18n guide
Ruby format
Summary
Ruby format string does not match source.
Scope
translated strings
Check class
weblate.checks.ruby.RubyFormatCheck
Check identifier
ruby_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
ruby-format
Flag to ignore
ignore-ruby-format
Simple format string example
There
are
%d
apples
Position format string example
Your
balance
is
%1$f
%2$s
Named format string example
Your
balance
is
%+.2f
%s
Named template string
Your
balance
is
%{amount}
%{currency}
See also
Formatted strings
Ruby Kernel#sprintf
Scheme format
Summary
Scheme format string does not match source.
Scope
translated strings
Check class
weblate.checks.format.SchemeFormatCheck
Check identifier
scheme_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
scheme-format
Flag to ignore
ignore-scheme-format
Simple format string example
There
are
~d
apples
See also
Formatted strings
Srfi 28
Chicken Scheme format
Guile Scheme formatted output
Vue I18n formatting
Summary
The Vue I18n formatting does not match source.
Scope
translated strings
Check class
weblate.checks.format.VueFormattingCheck
Check identifier
vue_format
Trigger
This check needs to be enabled using a flag.
Flag to enable
vue-format
Flag to ignore
ignore-vue-format
Named formatting
There
are
{count}
apples
Rails i18n formatting
There
are
%{count}
apples
Linked locale messages
@:message.dio
@:message.the_world!
See also
Formatted strings
Vue I18n Formatting
Vue I18n Linked locale messages
Has been translated
Summary
This string has been translated in the past.
Scope
all strings
Check class
weblate.checks.consistency.TranslatedCheck
Check identifier
translated
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-translated
Means a string has been translated already. This can happen when the
translations have been reverted in VCS or lost otherwise.
Inconsistent
Summary
This string has more than one translation in this project or is untranslated in some components.
Scope
all strings
Check class
weblate.checks.consistency.ConsistencyCheck
Check identifier
inconsistent
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-inconsistent
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
Other occurrences
tab.
This check applies to all components in a project that have
Allow translation propagation
turned on.
Hint
For performance reasons, the check might not find all inconsistencies, it
limits number of matches.
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 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
Automatic translation
add-on to
automate translating of newly added strings which are already translated in
another component.
See also
Keeping translations same across components
Inconsistent reStructuredText
Added in version 5.10.
Summary
Inconsistent reStructuredText markup in the translated message.
Scope
translated strings
Check class
weblate.checks.markup.RSTReferencesCheck
Check identifier
rst-references
Trigger
This check needs to be enabled using a flag.
Flag to enable
rst-text
Flag to ignore
ignore-rst-references
reStructuredText term references or other markup do not match source, the typical causes for these errors are:
Mismatched or missing backticks.
Missing spaces or interpunction around the reference. The reStructuredText inline blocks need to be separated by non-word characters.
Space between inline tag and backticks.
The reference name is not being translated.
Using quotes instead of backticks.
Mismatched substitutions or footnote references.
See also
reStructuredText Primer
reStructuredText syntax error
Kashida letter used
Summary
The decorative kashida letters should not be used.
Scope
translated strings
Check class
weblate.checks.chars.KashidaCheck
Check identifier
kashida
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-kashida
The decorative Kashida letters should not be used in translation. These are
also known as Tatweel.
See also
Kashida on Wikipedia
Markdown links
Summary
Markdown links do not match source.
Scope
translated strings
Check class
weblate.checks.markup.MarkdownLinkCheck
Check identifier
md-link
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
Markdown files
Flag to enable
md-text
Flag to ignore
ignore-md-link
Markdown links do not match source.
See also
Markdown links
Markdown references
Summary
Markdown link references do not match source.
Scope
translated strings
Check class
weblate.checks.markup.MarkdownRefLinkCheck
Check identifier
md-reflink
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
Markdown files
Flag to enable
md-text
Flag to ignore
ignore-md-reflink
Markdown link references do not match source.
See also
Markdown links
Markdown syntax
Summary
Markdown syntax does not match source.
Scope
translated strings
Check class
weblate.checks.markup.MarkdownSyntaxCheck
Check identifier
md-syntax
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
Markdown files
Flag to enable
md-text
Flag to ignore
ignore-md-syntax
Markdown syntax does not match source
See also
Markdown inlines
Maximum length of translation
Summary
Translation should not exceed given length.
Scope
translated strings
Check class
weblate.checks.chars.MaxLengthCheck
Check identifier
max-length
Trigger
This check needs to be enabled using a flag.
Flag to enable
max-length
Flag to ignore
ignore-max-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
Maximum size of translation
check
does check actual rendering of the text.
The
replacements:
flag might be also useful to expand placeables before
checking the string.
When
xml-text
flag is also used, the length calculation ignores XML tags.
Maximum size of translation
Summary
Translation rendered text should not exceed given size.
Scope
translated strings
Check class
weblate.checks.render.MaxSizeCheck
Check identifier
max-size
Trigger
This check needs to be enabled using a flag.
Flag to enable
max-size
Flag to ignore
ignore-max-size
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
Customizing behavior using flags
), for example following translation flags say that the
text rendered with ubuntu font size 22 should fit into two lines and 500
pixels:
max-size:500:2, font-family:ubuntu, font-size:22
Hint
You might want to set
font-*
directives in
Component configuration
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.
When
xml-text
flag is also used, the length calculation ignores XML tags.
See also
Managing fonts
Customizing behavior using flags
Maximum length of translation
Mismatched \n
Summary
Number of \n literals in translation does not match source.
Scope
translated strings
Check class
weblate.checks.chars.EscapedNewlineCountingCheck
Check identifier
escaped_newline
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
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.
Mismatched colon
Summary
Source and translation do not both end with a colon.
Scope
translated strings
Check class
weblate.checks.chars.EndColonCheck
Check identifier
end_colon
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-end-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).
See also
Colon on Wikipedia
Mismatched ellipsis
Summary
Source and translation do not both end with an ellipsis.
Scope
translated strings
Check class
weblate.checks.chars.EndEllipsisCheck
Check identifier
end_ellipsis
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-end-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.
See also
Ellipsis on Wikipedia
Mismatched exclamation mark
Summary
Source and translation do not both end with an exclamation mark.
Scope
translated strings
Check class
weblate.checks.chars.EndExclamationCheck
Check identifier
end_exclamation
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-end-exclamation
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).
See also
Exclamation mark on Wikipedia
Mismatched full stop
Summary
Source and translation do not both end with a full stop.
Scope
translated strings
Check class
weblate.checks.chars.EndStopCheck
Check identifier
end_stop
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-end-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).
See also
Full stop on Wikipedia
Mismatched interrobang
Summary
Source and translation do not both end with an interrobang expression.
Scope
translated strings
Check class
weblate.checks.chars.EndInterrobangCheck
Check identifier
end_interrobang
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-end-interrobang
Checks that interrobang marks are replicated between both source and translation.
It allows the swap between “!?” and “?!”.
See also
Interrobang mark on Wikipedia
Mismatched question mark
Summary
Source and translation do not both end with a question mark.
Scope
translated strings
Check class
weblate.checks.chars.EndQuestionCheck
Check identifier
end_question
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-end-question
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).
See also
Question mark on Wikipedia
Mismatched semicolon
Summary
Source and translation do not both end with a semicolon.
Scope
translated strings
Check class
weblate.checks.chars.EndSemicolonCheck
Check identifier
end_semicolon
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-end-semicolon
Checks that semicolons at the end of sentences are replicated between both source and translation.
See also
Semicolon on Wikipedia
Mismatching line breaks
Summary
Number of new lines in translation does not match source.
Scope
translated strings
Check class
weblate.checks.chars.NewLineCountCheck
Check identifier
newline-count
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
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.
Missing plurals
Summary
Some plural forms are untranslated.
Scope
translated strings
Check class
weblate.checks.consistency.PluralsCheck
Check identifier
plurals
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-plurals
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.
Multiple capitals
Added in version 5.16.
Summary
Translation contains words with multiple misplaced capital letters.
Scope
translated strings
Check class
weblate.checks.chars.MultipleCapitalCheck
Check identifier
multiple_capital
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-multiple-capital
Checks for misplaced capitalization by detecting words that contain consecutive
uppercase letters in otherwise lowercase or normally capitalized text (for
example,
HEllo
or
CAmelCase
). Strings that contain capitalization in the
source string are allowed to contain capitalization in the translation.
Non‑standard characters in Kabyle
Added in version 5.12.
Summary
Use standardized Latin Kabyle characters (e.g. ɣ instead of Greek γ; ɛ instead of ε).
Scope
translated strings
Check class
weblate.checks.chars.KabyleCharactersCheck
Check identifier
kabyle-characters
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-kabyle-characters
Checks that Kabyle translations use correct Kabyle letters and not similar
Greek ones, which were often used before Kabyle characters were standardized in
Unicode.
Placeholders
Changed in version 4.3:
You can use regular expression as placeholder.
Changed in version 4.13:
With the
case-insensitive
flag, the placeholders are not case-sensitive.
Summary
Translation is missing some placeholders.
Scope
translated strings
Check class
weblate.checks.placeholders.PlaceholderCheck
Check identifier
placeholders
Trigger
This check needs to be enabled using a flag.
Flag to enable
placeholders
Flag to ignore
ignore-placeholders
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:
placeholders:$URL$:$TARGET$:"some long text"
In case you have some syntax for placeholders, you can use a regular expression:
placeholders:r"%[^% ]%"
You can also have case insensitive placeholders:
placeholders:$URL$:$TARGET$,case-insensitive
See also
Customizing behavior using flags
Prohibited initial character
Added in version 5.9.
Summary
The string starts with a prohibited character in CSV.
Scope
glossary strings
Check class
weblate.checks.glossary.ProhibitedInitialCharacterCheck
Check identifier
prohibited_initial_character
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-prohibited-initial-character
The glossary is often shared as CSV and using some characters at the beginning is
restricted by many applications as these can cause the text being evaluated as
an expression. This also affects
Glossaries in automatic suggestion
where many services use CSV
for synchronizing glossaries and reject such strings.
Punctuation spacing
Changed in version 5.10:
This check used to apply to Breton language as well, but it was limited to French only.
Summary
Missing non breakable space before double punctuation sign.
Scope
translated strings
Check class
weblate.checks.chars.PunctuationSpacingCheck
Check identifier
punctuation_spacing
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-punctuation-spacing
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, where space before double
punctuation sign is a typographic rule.
See also
French and English spacing on Wikipedia
Regular expression
Changed in version 5.10:
Extended support for advanced regular expressions including Unicode codepoint properties.
Summary
Translation does not match regular expression.
Scope
translated strings
Check class
weblate.checks.placeholders.RegexCheck
Check identifier
regex
Trigger
This check needs to be enabled using a flag.
Flag to enable
regex
Flag to ignore
ignore-regex
Translation does not match regular expression. The expression is either extracted from the
translation file or defined manually using
regex
flag:
regex:^foo|bar$
The matching also supports Unicode codepoint properties, including scripts and blocks:
regex:^[-_\p{L}\p{N}\p{sc=Deva}\p{sc=Thai}]{1,32}$
Hint
Use
Placeholders
for detecting missing placeholders in the string.
See also
regex documentation
reStructuredText syntax error
Added in version 5.10.
Summary
reStructuredText syntax error in the translation.
Scope
translated strings
Check class
weblate.checks.markup.RSTSyntaxCheck
Check identifier
rst-syntax
Trigger
This check needs to be enabled using a flag.
Flag to enable
rst-text
Flag to ignore
ignore-rst-syntax
reStructuredText syntax error in the translation. Issues to look for:
Mismatched closing/opening tags.
Missing spaces or interpunction around the reference. The reStructuredText inline blocks need to be separated by non-word characters.
Using quotes instead of backticks.
See also
reStructuredText Primer
Inconsistent reStructuredText
Reused translation
Added in version 4.18.
Summary
Different strings are translated the same.
Scope
translated strings
Check class
weblate.checks.consistency.ReusedCheck
Check identifier
reused
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
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.
Same plurals
Summary
Some plural forms are translated in the same way.
Scope
translated strings
Check class
weblate.checks.consistency.SamePluralsCheck
Check identifier
same-plurals
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-same-plurals
Check that fails if some plural forms are duplicated in the translation.
In most languages they have to be different.
Starting newline
Summary
Source and translation do not both start with a newline.
Scope
translated strings
Check class
weblate.checks.chars.BeginNewlineCheck
Check identifier
begin_newline
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-begin-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.
See also
Trailing newline
Starting spaces
Summary
Source and translation do not both start with same number of spaces.
Scope
translated strings
Check class
weblate.checks.chars.BeginSpaceCheck
Check identifier
begin_space
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-begin-space
A space in the beginning of a string is usually used for indentation in the interface and thus
important to keep.
Trailing newline
Summary
Source and translation do not both end with a newline.
Scope
translated strings
Check class
weblate.checks.chars.EndNewlineCheck
Check identifier
end_newline
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-end-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.
See also
Starting newline
Trailing space
Summary
Source and translation do not both end with a space.
Scope
translated strings
Check class
weblate.checks.chars.EndSpaceCheck
Check identifier
end_space
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-end-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.
Unchanged translation
Summary
Source and translation are identical.
Scope
translated strings
Check class
weblate.checks.same.SameCheck
Check identifier
same
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-same
Happens if the source and corresponding translation strings are identical, down
to at least one of the plural forms. Some strings commonly found across all
languages are ignored, and various markups are 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 terms
list 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 a single word which is the same in several languages. This list
can be disabled by adding
strict-same
flag to a string or component.
Changed in version 4.17:
With
check-glossary
flag (see
Does not follow glossary
), the
untranslatable glossary terms are excluded from the checking.
See also
Does not follow glossary
Component configuration
Customizing behavior using flags
Unsafe HTML
Summary
The translation uses unsafe HTML markup.
Scope
translated strings
Check class
weblate.checks.markup.SafeHTMLCheck
Check identifier
safe-html
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
HTML files
Markdown files
AsciiDoc files
Flag to enable
auto-safe-html
safe-html
Automatic flag behavior
auto-safe-html
: Treat a text as conditional HTML, enabling
Unsafe HTML
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.
Flag to ignore
ignore-safe-html
The translation uses unsafe HTML markup. This check has to be enabled using
safe-html
flag (see
Customizing behavior using flags
). There is also accompanied
autofixer which can automatically sanitize the markup.
Hint
When
md-text
flag is also used, the Markdown style links are also allowed.
See also
The HTML check is performed by the
Ammonia
library.
URL
Summary
The translation does not contain an URL.
Scope
translated strings
Check class
weblate.checks.markup.URLCheck
Check identifier
url
Trigger
This check needs to be enabled using a flag.
Flag to enable
url
Flag to ignore
ignore-url
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.
XML markup
Summary
XML tags in translation do not match source.
Scope
translated strings
Check class
weblate.checks.markup.XMLTagsCheck
Check identifier
xml-tags
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-xml-tags
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.
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.
Note
This check is disabled by the
safe-html
flag as the HTML cleanup done by
it can produce HTML markup which is not valid XML.
XML syntax
Summary
The translation is not valid XML.
Scope
translated strings
Check class
weblate.checks.markup.XMLValidityCheck
Check identifier
xml-invalid
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-xml-invalid
The XML markup is not valid.
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.
Note
This check is disabled by the
safe-html
flag as the HTML cleanup done by
it can produce HTML markup which is not valid XML.
Zero-width space
Summary
Translation contains extra zero-width space character.
Scope
translated strings
Check class
weblate.checks.chars.ZeroWidthSpaceCheck
Check identifier
zero-width-space
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-zero-width-space
Zero-width space () 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.
See also
Zero width space on Wikipedia
Source checks
Source checks can help developers improve the quality of source strings.
Ellipsis
Summary
The string uses three dots
(...)
instead of an ellipsis character
(…)
Scope
source strings
Check class
weblate.checks.source.EllipsisCheck
Check identifier
ellipsis
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-ellipsis
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.
See also
Ellipsis on Wikipedia
Fluent source inner HTML
Added in version 5.0.
Summary
Fluent source should be valid inner HTML.
Scope
source strings
Check class
weblate.checks.fluent.inner_html.FluentSourceInnerHTMLCheck
Check identifier
fluent-source-inner-html
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
Fluent format
Flag to enable
fluent-source-inner-html
Flag to ignore
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:
Fluent inner HTML examples
Value
Warns?
Reason
threeyes
The
part would be lost as
.innerHTML
three
four
no
The
.innerHTML
would match the
.textContent
three

yes
Missing a closing tag.
three

yes
four
is not a HTML void element, so should not self-close.
text
no
Custom element tag with a matching closing tag.

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


no
br
is a HTML void element.
class=a/>
yes
The attribute value is not quoted.
attr=''/>
yes
Non-ASCII tag name.
kindðical
yes
The
ð
part would be converted to
kindðical
no
The character reference seems to be intentional.
three<e;four
yes
The
<e;
part would be converted to
three&lf;four
yes
The character reference is not valid.
three<{
$val
yes
The Fluent variable may unintentionally become a tag.
&l{
$val
yes
The Fluent variable may unintentionally become a character reference.
Note
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.
Note
The Fluent DOM package has further limitations, such as allowed tags and
attributes, which this check will not enforce.
See also
Fluent translation inner HTML
Fluent DOM
Fluent source syntax
Added in version 5.0.
Summary
Fluent syntax error in the source.
Scope
source strings
Check class
weblate.checks.fluent.syntax.FluentSourceSyntaxCheck
Check identifier
fluent-source-syntax
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
Fluent format
Flag to enable
fluent-source-syntax
Flag to ignore
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.
See also
Fluent translation syntax
Fluent Syntax Guide
Mozilla Basic Syntax Guide
ICU MessageFormat syntax
Added in version 4.9.
Summary
Syntax errors in ICU MessageFormat strings.
Scope
source strings
Check class
weblate.checks.icu.ICUSourceCheck
Check identifier
icu_message_format_syntax
Trigger
This check needs to be enabled using a flag.
File formats automatically enabling this check
ARB File
Format.JS JSON file
Flag to enable
icu-message-format
Flag to ignore
ignore-icu-message-format
See also
ICU MessageFormat
Long untranslated
Added in version 4.1.
Summary
The string has not been translated for a long time.
Scope
source strings
Check class
weblate.checks.source.LongUntranslatedCheck
Check identifier
long_untranslated
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-long-untranslated
When the string has not been translated for a long time, it can indicate a problem in a
source string making it hard to translate.
Multiple failing checks
Summary
The translations in several languages have failing checks.
Scope
source strings
Check class
weblate.checks.source.MultipleFailingCheck
Check identifier
multiple_failures
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-multiple-failures
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.
Multiple unnamed variables
Added in version 4.1.
Summary
There are multiple unnamed variables in the string, making it impossible for translators to reorder them.
Scope
source strings
Check class
weblate.checks.format.MultipleUnnamedFormatsCheck
Check identifier
unnamed_format
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-unnamed-format
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.
Unpluralised
Summary
The string is used as plural, but not using plural forms.
Scope
source strings
Check class
weblate.checks.source.OptionalPluralCheck
Check identifier
optional_plural
Trigger
This check is always enabled but can be ignored using a flag.
Flag to ignore
ignore-optional-plural
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:
from
gettext
import
ngettext
ngettext
"Selected
%d
file"
"Selected
%d
files"
files
files
Placeables in automatic suggestion
Checks for placeables expose information on current placeables and this can be
used to instruct automatic suggestion engines to keep them. The support for
this varies in different services and in many cases there is no way to enforce
keeping placeables intact.
See also
Automatic suggestions
On this page
Checks and fixups
Automatic fixups
Trailing ellipsis replacer
Zero-width space removal
Control characters removal
Devanagari danda
Punctuation spacing
Unsafe HTML cleanup
Trailing and leading whitespace fixer
Quality checks
Translation checks
BBCode markup
Chars around XML tags
Consecutive duplicated words
Does not follow glossary
Double space
Fluent parts
Fluent references
Fluent translation inner HTML
Fluent translation syntax
Formatted strings
AngularJS interpolation string
Automattic components formatting
C format
C# format
ECMAScript template literals
i18next interpolation
ICU MessageFormat
Java format
Java MessageFormat
JavaScript format
Laravel format
Lua format
Object Pascal format
Objective-C format
Percent placeholders
Perl brace format
Perl format
PHP format
Python brace format
Python format
Qt format
Qt plural format
Ruby format
Scheme format
Vue I18n formatting
Has been translated
Inconsistent
Inconsistent reStructuredText
Kashida letter used
Markdown links
Markdown references
Markdown syntax
Maximum length of translation
Maximum size of translation
Mismatched \n
Mismatched colon
Mismatched ellipsis
Mismatched exclamation mark
Mismatched full stop
Mismatched interrobang
Mismatched question mark
Mismatched semicolon
Mismatching line breaks
Missing plurals
Multiple capitals
Non‑standard characters in Kabyle
Placeholders
Prohibited initial character
Punctuation spacing
Regular expression
reStructuredText syntax error
Reused translation
Same plurals
Starting newline
Starting spaces
Trailing newline
Trailing space
Unchanged translation
Unsafe HTML
URL
XML markup
XML syntax
Zero-width space
Source checks
Ellipsis
Fluent source inner HTML
Fluent source syntax
ICU MessageFormat syntax
Long untranslated
Multiple failing checks
Multiple unnamed variables
Unpluralised
Placeables in automatic suggestion