Localization
The goal of the localization process is to consistently produce high quality translations release after release through collaboration between the international community, translators, project managers, language leads, and the core team.
If you're interested in contributing translations to Mattermost, learn more about getting started with Mattermost translations by visiting the translation contribution documentation.
We strongly encourage all translators to join us in the Mattermost localization channel on the Mattermost Community server.
In the localization channel, you can:
- Discuss translation questions, concerns, and best practices with both Mattermost staff and the Mattermost translation community.
- Learn more about string context, including audience and product area.
- Review important translation timelines, deadlines, announcements, and notifications.
- Escalate any challenges you're experiencing as a product translator.
You can contribute to the following active translation projects:
Translation project | Translation server URL |
Channels | https://translate.mattermost.com/projects/mattermost/ |
Focalboard | https://translate.mattermost.com/projects/focalboard/ |
Playbooks | https://translate.mattermost.com/projects/playbooks/ |
Desktop app | https://translate.mattermost.com/projects/mattermost/mattermost-desktop/ |
Mobile app v2 | https://translate.mattermost.com/projects/mattermost/mattermost-mobile-v2/ |
Mattermost WIP languages | https://translate.mattermost.com/projects/i18n-wip/ |
The general localization process is described in the following sections on this page.
Mattermost is developed in US English, and officially supports 20 additional languages. Getting started is easy.
Important note: While it's common to contribute to Mattermost in GitHub, product translations is a notable exception. You must contribute to Mattermost translations on the Mattermost translation server. Please don't attempt to submit translations in GitHub via pull requests (PRs) as your translations will be overwritten with the next PR update.
Confirm whether the language you want to translate is one we officially support or is a work-in-progress (WIP) language
Only supported languages are available in-product by selecting Settings > Display > Language. Any language that isn't officially supported is considered a work-in-progress language. Work-in-progress languages become officially supported languages when the following two conditions are met:
- The (WIP) language reaches or exceeds the Beta translation quality threshold across three consecutive releases; and,
- A language expert is available for at least six months of maintenance updates.
Tip: We encourage translators to add additional languages to the WIP language list. Before adding a new language, always check to ensure that the language you're interested in isn't already defined as an officially supported langauge or a WIP language on the translation server.
Translation rules and glossaries are available for the following languages:
Tip: We welcome rules, glossaries, and guidelines for all supported languages. If these translation assets don't exist for the language you're interested in, perhaps you'd be open to help create them?
When an error string isn’t visible to end users, engineering teams must use
model.NoTranslation
as the error id to implement a model.AppError
without a translation. See examples of this approach in the mattermost/mattermost-server repository on GitHub.Error strings that use
model.NoTranslation
as the error id are omitted from Mattermost translation workflows, and aren't surfaced up in Weblate to translators.The following flow diagram outlines the product localization flow from the translation server to the Mattermost codebase:

Mattermost product localization flow diagram
- 1.New and updated US English source strings are automatically added to the translation server each time a GitHub PR containing string changes is merged by Mattermost Engineering.
- 2.The translation server pulls the latest string changes as they are committed to the codebase.
- 3.Translators are notified when strings are new or changed.
- 4.Translators add and update string translations.
- 5.Each Monday, at 22:00 GMT, a job opens PRs in GitHub to the main branches of the mattermost-server, mattermost-webapp, mattermost-mobile-v2, and mattermost-desktop repositories. Weekly PRs contain several commits, one per modified language. Changes are merged back into each branch after a security/consistency review.
PRs will also be submitted on the day of major feature complete, code complete, and release candidates to ensure latest translations are included in the release.
Translation PRs are created automatically on Mondays. These PRs are also posted to the i18n PRs channel. Engineering PR reviews focus on ensuring that unexpected characters aren't injected into strings. If security concerns are found, Engineering notifies the Security team.
The translation PRs should be reviewed and merged as soon as possible to avoid blocking translators.
Important Note: Engineering teams must merge these PRs into the codebase using "merge commit" (technically also known as "rebase and merge"), and /never/ "squash and commit". The latter breaks the automated translation server flow, locks the translations, and forces manual fixes.
Amy Blais will notify the team if the PR should be cherry-picked to a release branch (e.g.
cloud
).PR review owners:
- Server translations PRs - Channels/Suite Users teams (Owners: Pantelis and Guillermo)
- Webapp translations PRs - Channels/Suite Users teams (Owners: Pantelis and Guillermo)
- Mobile translations PRs - Channels/Suite Users teams (Owners: Pantelis and Guillermo)
- Desktop app translations PRs - Platform team (Owner: Devin)
- Boards translations PRs - Boards team (Owners: Scott and Jesus)
- Playbooks translations PRs - Playbooks team (Owners: Jesse and Caleb)
In order for users to understand the accuracy and coverage of language translations, quality levels are explicitly defined for each language as one of: Official, Beta, or Alpha.
- 100% of translation verified by someone deeply knowledgeable in Mattermost functionality.
- 100% of translation verified by someone deeply knowledgeable in target language.
- No translation may be out-of-date due to changes to English-language text since the last translation and review cycle.
- Language must have at least one official reviewer who maintains the language with updated strings imported to the Translation Server over time.
- Language must have been in use for at least three full release cycles where end users in target language can share feedback and corrections.
Official languages are listed in Account Settings > Display > Language.
- At least 90% of string translation verified by someone deeply knowledgeable in Mattermost functionality and in the target language. Languages at risk for ongoing maintenance can require a higher translation threshold closer to 100%.
- Up to 10% of translation may be out-of-date due to changes to English-language text since the last translation and review cycle.
Beta languages are listed in Account Settings > Display > Language appended with (Beta).
- Translation has not yet reached Beta quality. An official language may be changed back to Beta or Alpha if the specified requirements are not met for a release. Similarly, Beta languages may be dropped back to Alpha.
Alpha languages are listed in Account Settings > Display > Language appended with (Alpha).
To format localized messages, mattermost-webapp uses the react-intl, a Javascript library from FormatJS. This library uses the ICU Message syntax, which is the standard syntax for many programming languages.
If you don't know about the ICU syntax, please familiarize yourself by reading the ICU Message Syntax simplified documentation and Formatting Messages. What's most important here is to read the sections dedicated to how plural terms are managed.
In order to ease the manipulation of strings like these with a special syntax (ICU as a reminder), a developer has created an online tool for testing ICU strings. This tool, called Online ICU Message Editor, is displayed as a live editor that previews how a string will appear in context. This tool has been reported by some members of our community as really helpful to translate strings containing an ICU syntax. Don't hesitate to use it.
Some terms used in Mattermost may be technical. If you don't know how to translate a specific term:
- Where applicable, review how the term has been translated in other locations of the translation you are contributing to.
- Where applicable, review machine translation suggestions provided via the Deep-L integration.
- Use a translation engine to learn how others have translated the term.
A Mattermost Cloud workspace is available for all Mattermost translators to understand string context, including the target user and the task the user is performing when they encounter the string. This workspace is updated weekly; however, translations can lag behind Cloud releases by up to two weeks.
If you encounter a product string that hasn't yet been translated in the Mattermost Cloud workspace, the string is either not yet translated, or the workspace hasn't been updated yet to include that translated string.
You can search for strings in the English localization resource file within a respective GitHub repository to confirm whether a missed translation or an outdated workspace. The following resource files are available for US English strings:
Each Mattermost GitHub repository above will contain additional resource files for each supported language. If a string appears in the
en.json
file, but displays in English in a localized resource file, that string likely isn't translated yet. An English string in the en.json
file that is translated in its associated localized resource file likely indicates that the workspace hasn't been updated yet to include that translation.Product translations require updates on a monthly basis as features are added and changed. Weekly updates and deadlines are announced in the Mattermost localization channel.
Below are current official reviewers and maintainers for officially supported languages. Official reviewers submit final translations for languages; maintainers suggest translations and step in when official reviewers aren't able to help in a certain release.
If you're interested in contributing to the process, please join the Mattermost localization channel to discuss.
Language | Official Reviewer(s) | Maintainers |
---|---|---|
Bulgarian | TBD (Open role) | |
Deutsch - German | ||
English - Australian | TBD (Open role) | |
Español - Spanish | ||
Français - French | TBD (Open role) | |
Magyar - Hungarian | TBD (Open role) | TBD (Open role) |
Italiano - Italian | ||
日本語 - Japanese | TBD (Open role) | |
한국어 - Korean | TBD (Open role) | TBD (Open role) |
Nederlands - Dutch | TBD (Open role) | |
Polski - Poland | ||
Português do Brasil - Portuguese | TBD (Open role) | |
Română - Romanian | TBD (Open Role) | TBD (Open role) |
Svenska - Swedish | TBD (Open role) | |
Türkçe - Turkish | TBD (Open role) | |
Pусский - Russian | TBD (Open role) | |
Yкраїнська - Ukrainian | TBD (Open role) | TBD (Open role) |
中文 (简体) - Simplified Chinese | TBD (Open role) | |
中文 (繁體) - Traditional Chinese | TBD (Open role) |
Translation server admins must grant all new translators with specific permissions to enable translators to start working on Mattermost strings. Translation server admins can reach the server's administration tools by going to https://translate.mattermost.com/admin/.
Note: Admin tools on the translation server are being updated to make roles and permissions maintenance easier. If you require translation permissions, please let us know in the Mattermost localization channel.
To add a new WIP language:
- 2.Select a component on the resulting page, then select Tools > Start new translation.
- 3.Select the languages you want to add, then Start new translation.
- 4.Repeat step 2 for every component within the https://translate.mattermost.com/projects/i18n-wip project.
Last modified 23d ago