To present different translations properly, info about language name, text direction, plural definitions and language code is needed.
Definitions for about 600 languages are included in Weblate and the list is extended in every release. Whenever Weblate is upgraded (more specifically whenever weblate migrate
is executed, see generic-upgrade-instructions
) the database of languages is updated to include all language definitions shipped in Weblate.
This feature can be disable using UPDATE_LANGUAGES
. You can also enforce updating the database to match Weblate built-in data using setuplang
.
extending-languages
, Current language definitions
While parsing translations, Weblate attempts to map language code (usually the ISO 639-1 one) from the component-filemask
to any existing language object.
You can further adjust this mapping at project level by project-language_aliases
.
If no exact match can be found, an attempt will be made to best fit it into an existing language. Following steps are tried:
- Case insensitive lookups.
- Normalizing underscores and dashes.
- Looking up built-in language aliases.
- Looking up by language name.
- Ignoring the default country code for a given language—choosing
cs
instead ofcs_CZ
.
Should that also fail, a new language definition will be created using the defaults (left to right text direction, one plural). The automatically created language with code xx_XX
will be named as xx_XX (generated)
. You might want to change this in the admin interface later, (see changing-languages
) and report it to the issue tracker (see contributing
), so that the proper definition can be added to the upcoming Weblate release.
Hint
In case you see something unwanted as a language, you might want to adjust component-language_regex
to ignore such file when parsing translations.
language-code
, new-translations
You can change language definitions in the languages interface (/languages/
URL).
While editing, make sure all fields are correct (especially plurals and text direction), otherwise translators will be unable to properly edit those translations.
In many cases it is not a good idea to use macrolanguage code for a translation. The typical problematic case might be Kurdish language, which might be written in Arabic or Latin script, depending on actual variant. To get correct behavior in Weblate, it is recommended to use individual language codes only and avoid macrolanguages.
Each language consists of following fields:
Code identifying the language. Weblate prefers two letter codes as defined by ISO 639-1, but uses ISO 639-2 or ISO 639-3 codes for languages that do not have two letter code. It can also support extended codes as defined by BCP 47.
language-parsing-codes
, new-translations
Visible name of the language. The language names included in Weblate are also being localized depending on user interface language.
Determines whether language is written right to left or left to right. This property is autodetected correctly for most of the languages.
Number of plurals used in the language.
Gettext compatible plural formula used to determine which plural form is used for given count.
Number of worldwide speakers of this language.
2.18
In versions prior to 2.18 the behaviour of adding new translations was file format specific.
Weblate can automatically start new translation for all of the file formats.
Some formats expect to start with an empty file and only translated strings to be included (for example aresource
), while others expect to have all keys present (for example gettext
). The document-based formats (for example odf
) start with a copy of the source document and all strings marked as needing editing. In some situations this really doesn't depend on the format, but rather on the framework you use to handle the translation (for example with json
).
When you specify component-new_base
in component
, Weblate will use this file to start new translations. Any exiting translations will be removed from the file when doing so.
When component-new_base
is empty and the file format supports it, an empty file is created where new strings will be added once they are translated.
The component-language_code_style
allows you to customize language code used in generated filenames:
- Default based on the file format
Dependent on file format, for most of them POSIX is used.
- POSIX style using underscore as a separator
Typically used by gettext and related tools, produces language codes like
pt_BR
.- POSIX style using underscore as a separator, including country code
POSIX style language code including the country code even when not necessary (for example
cs_CZ
).- BCP style using hyphen as a separator
Typically used on web platforms, produces language codes like
pt-BR
.- BCP style using hyphen as a separator, including country code
BCP style language code including the country code even when not necessary (for example
cs-CZ
).- BCP style using hyphen as a separator, legacy language codes
Uses legacy codes for Chinese and BCP style notation.
- BCP style using hyphen as a separator, lower cased
BCP style notation, all in lower case (for example
cs-cz
).- Apple App Store metadata style
Style suitable for uploading metadata to Apple App Store.
- Google Play metadata style
Style suitable for uploading metadata to Google Play Store.
- Android style
Only used in Android apps, produces language codes like
pt-rBR
.- Linux style
Locales as used by Linux, uses legacy codes for Chinese and POSIX style notation.
Additionally, any mappings defined in project-language_aliases
are applied in reverse.
Note
Weblate recognizes any of these when parsing translation files, the above settings only influences how new files are created.
language-code
, project-language_aliases
, language-parsing-codes