fix alph order authored by emmapeel's avatar emmapeel
# Translation process for Tor Project developers
To have a real impact worlwide, our software needs to break the language barriers a **majority of the global population** has.
Localizing our software let us share it with more people, and should eventually lead to better software in itself, even if it needs a bit more work.
The process of making code translatable is called **internationalization (i18n)**. This is what you, as a developer, will do.
The process of translating software to a specific language and context is called **localization (l10n)**. This is what the Community team can help with.
If you have doubts about how to localize your software, please get in touch with emmapeel@torproject.org
**Table of contents**
[[_TOC_]]
# How to be nice to translators
Remember that **if you generate better quality source strings, the translations will be better**.
### Translators' input
Translators find many errors on the source strings.
If you create an account in weblate, you can set up [notifications](https://hosted.weblate.org/accounts/profile/#notifications) for the resources in weblate.
### Learn more about Internationalization
If this is the first time you are implementing the internationalization of a project, please start by having a look at this resources:
- This is a very informative talk from [Tom de Moor at FOSDEM2024](https://fosdem.org/2024/schedule/event/fosdem-2024-1906-lessons-learnt-as-a-translation-contributor-the-past-4-years/) (only 30m) with lots of information for developers.
- Please read the incredibly good article [12 Commandments Of Software Localization](https://www.smashingmagazine.com/2012/07/12-commandments-software-localization/) from Zack Grossbart to get an introduction to software localization from an engineer's point of view.
- Another great article is [Lessons From Linguistics: i18n Best Practices for Front-End Developers by Lucas Huang ](https://shopify.engineering/internationalization-i18n-best-practices-front-end-developers) (thanks Thorin for showing it to me).
- For RTL support, please read [rtl.wtf](https://rtl.wtf) and [isthisarabic.com](https://isthisarabic.com)
#### 1. NEVER CONCATENATE STRINGS
It may sound efficient in English, but the truth is that different languages have different ways of saying things, and the order is important. Please make it so the whole sentences is up for translation at once, don't separate sentences in several strings.
#### 2. PUNCTUATION IS PART OF THE SENTENCE
Please add all punctuation for translation, as different languages use different punctuation rules. Punctuation is part of the sentence.
#### 3. NO HARDCODED UPPERCASES OR CAPITALIZATION
In many languages, ortographic rules change depending on a word being capitalized or not. As Greek and Russian. Other languages, like Arabic, don't even have capital letters, so your styling will not be seen.
That is why you should refrain from hardcoding this styles on CSS or other similar way. If you want a capitalized sentence, write the actual sentence capitalized as you would like to see it, so the translator understands what you want, and translates your intention on the local rules (maybe adding exclamation signs).
#### 4. ADD COMMENTS OR EXPLANATIONS ON HOW TO TRANSLATE
Context is everything when translating, and if a string has many errors, it probably means that a developer comment explaining how to translate it is needed.
Some strings need screenshots to be well translated. Especially in GUIs, when we translate out-of-context single words.
When the source text is in English, as on our project, the objects on that language have no gender. But objects have gender in many languages: Spanish, Italian, French, German... So when we translate 'Published' to German, we need to know what was published (a book, a release?), to give the correct gender to the adjective.
Weblate also provides [QA checks](https://docs.weblate.org/en/latest/user/checks.html). This has the advantage of providing structured feedback to translators while they are translating. You can see our [failing checks in weblate](https://hosted.weblate.org/checks/-/tor/).
#### 5. PROVIDE SCREENSHOTS AND EARLY LOCALIZED RESOURCES
The translators will translate better if they can see the effect their translations have. Try to get a staging/beta version early, so they can do a final review for the language with the real application.
Add screenshots to the translation platform so the translators see how the words will look on the interface.
This will improve the translation because the translators will have the context of the strings, and can also translate looking at the interface.
The localization coordinator can add the screenshots and map them to the strings, but you need to provide them. Screenshots with error messages and those that use dynamic variables are the most important.
Release alphas or nightlies to test translations while they are in progress, as the Tor Browser team does. For the websites, we have separated versions with more languages so translators can preview their work before release. Many of our translators are inexperienced and this way they will learn quickly how to translate without errors.
# Getting your translations added to weblate
Imagine a timeline a bit like this:
```mermaid
%%{init: { 'theme': 'forest' } }%%
gantt
title Localization process
dateFormat YYYY-MM-DD
section Before
Research for i18n options :a1, 4d
Test formats : a3, after a1, 2d
section Translation
Translation : a4, after a3, 40d
Review : a5, after a3, 50d
More translations: a12, after a4, 2d
Upstream translators input: b1, after a12, 5d
Section Maintenance
Software updates: a6, after a5, 2d
Small translations: a7, after a6, 20d
Software updates: a8, after a7, 1d
Small translations: a9, after a8, 20d
Software updates: a10, after a9, 1d
Small translations: a11, after a10, 20d
```
#### Prepare your files for translation
* Check [weblate](https://docs.weblate.org/en/latest/formats.html) for supported file types
* You will need to wait for a new (shorter) round of translations for each string you change. Changing small details for the strings will render them untranslated and create more work. Please only send strings for translation once they are final.
* Our Tier 1 languages contain languages that are read from right to left (RTL). Make sure that your interface can support that. Remember that RTL also implies page composition, align and all. See https://rtl.wtf/intro/ and https://rtlstyling.com/posts/rtl-styling/ to understand the issue.
* Open a ticket in the component [Community/L10n](https://gitlab.torproject.org/tpo/community/l10n/-/issues) with a file with your English strings.
* Please **attach screenshots** for all the strings, so they can be uploaded to weblate. You can have several strings on one screenshot, but try to make sure all strings are present.
* Contact `emmapeel <at> torproject <dot> org` and she will make the bot pick them up and produce a branch on the [translation repository](https://gitlab.torproject.org/tpo/translation/)
* Wait for strings to be added to weblate and git
* Remember that our translators are volunteers interested to help software be on their language. They are usually just starting to translate and may not have a technical background, so strings with variables or even HTML may lead to errors. Try to make the strings not overtly complicated, and add comments explaining the string, or review the strings carefully.
* Weblate does provide some[ QA on the strings](https://docs.weblate.org/en/latest/user/checks.html#checks-and-fixups), but difficult strings can have special checks added. You may need to apply your own validation scripts to the strings coming from weblate.
#### During the translation process
* Please go back to the strings after a while, to see the comments the translators have made on the strings. Translators find errors on the source strings very often. You can also setup different [notifications in weblate](https://hosted.weblate.org/accounts/profile/#notifications) to be aware of problems with your translation: from new comments to repository failures.
* Translators meet once a month, maybe you want to drop by the next [Monthly Tor Localization Hangouts](./Monthly-Tor-Localization-Hangouts) to explain what your app does and talk to them about the app. This will get translators engaged on your software and you will get alpha testers for free!
* You can check the process of your app translation in weblate, joining the Tor Project there. [Open an account](https://community.torproject.org/localization/becoming-tor-translator/) and ping the Localization Coordinator to get more privileges.
* Remember: translations are always better when translators have access to screenshots and previews. Releasing an alpha version with all the active translations will help translators to spot any errors with their translations.
### Your translations
* Clone the [translation repository](https://gitweb.torproject.org/translation.git)
* Check out the branch for your project (e.g. ''git checkout mat-gui'')
'''NOTE:''' Weblate does '''not''' do much validation on the translated strings. You need to make sure that the strings you include are valid and do not contain anything malicious.
### Stats
* You can see the current situation of the translations in the web interface, for example for the Tor Browser Manual: https://hosted.weblate.org/projects/tor/tor-browser-user-manual/
* You can also use the weblate API: https://docs.weblate.org/en/latest/api.html
* There are some stats in [this wiki](https://gitlab.torproject.org/tpo/community/l10n/-/wikis/Localization-for-translators#tor-documents-to-translate)
# How do we call the languages?
### Call them as they call them
When we present a list of languages, we like to call them as the speakers of that language call them. Because if they don't speak English, they probably don't know how their language is spell in English (specially if they use other kind of characters).
We can easily read Spanish/English because we share a Latin alphabet. People using another kind of alphabets (Arabic, Cyrillic, Georgian, etc) will look for familiar letters before reading.
### language codes: Always better to follow Mozilla
Many of our applications depend on the Tor Browser, which in turn depends on Mozilla. By making sure your apps will expect the language codes as in mozilla, you can ensure links and other things are going to work across the whole project. See here for Mozilla language codes: https://hg.mozilla.org/l10n-central/ . Check with the localization coordinator if you don't know what is the situation with your app.
Incidentally, transifex may differ from this codes, but we can correct that through our translation repo. For example, we use `en-US` for the Tor Browser default English locale, but it is called `en` in Transifex.
### Current language list
This is a list of languages we use along projects, with notes about how to write them etc.
Another version of this list can be found at https://gitlab.torproject.org/tpo/community/l10n/-/blob/main/bin/setup_l10n_staging.py
| tbb Lang code | Weblate | English name | Preferred name (orig) | Notes |
| ------ | ------ | ------ | ------ | ------
| am | | Amharic | አማርኛ (am) | Ethiopian language |
| ar | | Arabic | (ar) العربية | Added the article, ref: tpo/community/l10n#40116 |
| az | | Azeri, Azerbaijani | Azərbaycan dili (az) | |
| ba | | Bashkir | Башҡортса (ba) | |
| bg | | Bulgarian | български (bg) | |
| be | | Belarusian | беларуская мова (be) | |
| bn | | Bangla/Bengali | বাংলা | Bangla from Bangladesh and from India are very similar|
| bo | | Tibetan | ལྷ་སའི་སྐད་ (bo) | the last ' is part of the name |
| bs | | Bosnian | Bosanski (bs) | we use the latin version, not cyrillic |
| ca | | Catalan | Català (ref #31600) | |
| ckb | | Central Kurdish, Sorani | (ckb) سۆرانی | |
| ce | | Chechen | Нохчийн мотт (ce) | |
| crh | | Crimean Tatar, Crimean Turkish | qırımtatar tili (crh) | |
| cs | | Czech | česky (cs) | |
| da | | Danish | Dansk (da) | |
| de | | German | Deutsch (de) | |
| el | | Greek | Ελληνικά (el) | |
| en-US | en | English | English (en) | This is our default source language, sometimes written as en, but Firefox for example needs a country code as well.|
| en-GB | en_GB | | | We will not provide this locale, preferring to stick to one regional variation. |
| es-AR | | | | 2021-03: dropped in favor of common es locale |
| es-ES | es | | Español (es) | |
| et | et | Estonian | Eesti (et) | |
| fa | | Persian | ﻑﺍﺮﺳی (fa) | |
| fa-AF| fa_AF | Dari, Persian (Afghanistan) | ﺩﺭی (fa-AF) | |
| fil | | Filipino | | dropped in favor of Tagalog (tl), the non standardised, more used, version, that has a Firefox locale |
| fr | | French | Français (fr)| |
| ga-IE | ga | Irish | Gaeilge (ga) | |
| ha | | Hausa | Hausa (ha) | spoken by 72 million people in West Africa |
| he | | Hebrew | עברית (he) | |
| hi | | Hindi | हिन्दी (hi) | We still have no published translations for Hindi |
| hr | | Croatian | hrvatski (hr) | |
| ht | | Haitian Creole | kreyòl (ht) | |
| hu | | Hungarian | Magyar nyelv (hu) | |
| hy | | Armenian | հայերեն (hy) | |
| id | | Indonesian | bahasa Indonesia (id) | |
| is | | Icelandic | Íslenska (is) | |
| it | | Italian | Italiano | |
| ja | | Japanese | 日本語 (ja) | |
| ka | | Georgian | ქართული (ka) | ref: tpo/web/tpo#302 |
| kk | | Kazakh | (kk) | |
| km | | Khmer | ភាសាខ្មែរ (km) | This is the official language of Cambodia |
| kmr | | Kurmanji, Northern Kurdish | (kmr) کورمانجی | |
| ko | | Korean | 한국어 (ko) | |
| ku | | Kurdish | Umbrella term, it is better to use ckb, Central Kurdish |
| ky | | Kyrgyz | Кыргыз тили (ky) | This is the official language of Kyrgyzstan and a significant minority language in the Kizilsu Kyrgyz Autonomous Prefecture in Xinjiang, China and in the Gorno-Badakhshan Autonomous Region of Tajikistan. There is a very high level of mutual intelligibility between Kyrgyz, Kazakh, and Altay |
| ln | | Lingala | Lingála (ln)| Spoken in DRC, Congo, Sudan and Angola.|
| lo | | Lao | ພາສາລາວ (lo) | |
| lt | |Lithuanian | lietuvių (lt) | |
| mk | | Macedonian | македонски (mk) | |
| ml | | Malayalam | മലയാളം (ml)| |
| ms | ms_MY| Malay | Bahasa Melayu (ms) | |
| my | my | Burmese | မြန်မာ (my) | |
| nd | nd | Ndebele North | isiNdebele (nd) | |
| nb-NO | | Norwegian | Norsk bokmål | |
| nl | | Dutch | Nederlands (nl) | |
| pl | | Polish | polski | |
| ps | | Pashto | (ps) پښتو | |
| pt-BR | pt_BR | | Português Br. | |
| pt-PT | pr_PT | | Português Port. | |
| rn | | Kirundi | Ikirundi (rn) |
| ro | | Romanian | Română (ro) | |
| ru | | Russian | Русский (ru) | |
| rw | | Kinyarwanda | Kinyarwanda (rw) | |
| sg | | Sango | sängö (sg) | |
| sh | | Shona | ChiShona (sh) | |
| so | | Somali | Soomaali (so) | We use the Latin script |
| sq | | Albanian | shqip (sq) | |
| sr | sr@latin | Serbian | srpski (sr) | We use the Latin script, not cyrillic |
| sv-SE | sv | Swedish | Svenska (sv) | |
| sw | sw | Swahili | Kiswahili (sw) | Waiting on Firefox to provide translation for Tor Browser, now translating the Tor Browser Manual, Support Portal, main website, gettor.tpo. |
| ta | | Tamil | தமிழ் (ta) | One of the few classical languages that are still spoken, approx. 80millon's first language. |
| tg | | Tajik | Тоҷикӣ (tg) | |
| tl | | Tagalog | | Preferred to Filipino because it is more used and has a Firefox locale |
| th | | Thai | ภาษาไทย (th) | |
| ti | | Tigrinya | ትግርኛ (ti) | |
| ti | | Turkmen | türkmençe (tk) | we use the latin script |
| tr | | Turkish | Türkçe (tr) | |
| tt | | Tatar | татар (tt) |The Tatar language is spoken in Russia (about 5.3 million people), Ukraine, China, Finland, Turkey, Uzbekistan, the United States of America, Romania, Azerbaijan, Israel, Kazakhstan, Georgia, Lithuania, Latvia and other countries. There are more than 7 million speakers of Tatar in the world. |
| ug | ug@Arab | Uighur | (ug) ئۇيغۇر | The Arabic script is the most used |
| uk | | Ukrainian | українська (uk) | |
| ur | | Urdu | (ur) اُردُو | |
| uz | | Uzbek | Oʻzbekcha (uz) | |
| vi | | Vietnamese | Tiếng Việt (vi) | |
| wo | | Wolof | Wolof (wo) | We use Latin script |
| zh-CN | zh_Hans | Chinese (China) | 简体中文 (zh-CN) |Also called Simplified Chinese - Chinese Hans - language name changed, ref: tpo/community/l10n#40108 |
| zh-TW | zh_Hant | Chinese (Taiwan) | 正體中文 (zh-TW) | Also called Traditional Chinese - Chinese (Hong Kong) - Chinese Hant |
## Tor Browser l10n stuff
Here some links:
- TB i18n docs: https://gitlab.torproject.org/tpo/applications/team/-/wikis/Development-Information/Tor-Browser/Localization
- Locales for Firefox: https://hg.mozilla.org/l10n-central/
- Locales enabled in Tor Browser: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/blob/main/rbm.conf#L98
# Translation process for Tor Project developers
To have a real impact worlwide, our software needs to break the language barriers a **majority of the global population** has.
Localizing our software let us share it with more people, and should eventually lead to better software in itself, even if it needs a bit more work.
The process of making code translatable is called **internationalization (i18n)**. This is what you, as a developer, will do.
The process of translating software to a specific language and context is called **localization (l10n)**. This is what the Community team can help with.
If you have doubts about how to localize your software, please get in touch with emmapeel@torproject.org
**Table of contents**
[[_TOC_]]
# How to be nice to translators
Remember that **if you generate better quality source strings, the translations will be better**.
### Translators' input
Translators find many errors on the source strings.
If you create an account in weblate, you can set up [notifications](https://hosted.weblate.org/accounts/profile/#notifications) for the resources in weblate.
### Learn more about Internationalization
If this is the first time you are implementing the internationalization of a project, please start by having a look at this resources:
- This is a very informative talk from [Tom de Moor at FOSDEM2024](https://fosdem.org/2024/schedule/event/fosdem-2024-1906-lessons-learnt-as-a-translation-contributor-the-past-4-years/) (only 30m) with lots of information for developers.
- Please read the incredibly good article [12 Commandments Of Software Localization](https://www.smashingmagazine.com/2012/07/12-commandments-software-localization/) from Zack Grossbart to get an introduction to software localization from an engineer's point of view.
- Another great article is [Lessons From Linguistics: i18n Best Practices for Front-End Developers by Lucas Huang ](https://shopify.engineering/internationalization-i18n-best-practices-front-end-developers) (thanks Thorin for showing it to me).
- For RTL support, please read [rtl.wtf](https://rtl.wtf) and [isthisarabic.com](https://isthisarabic.com)
#### 1. NEVER CONCATENATE STRINGS
It may sound efficient in English, but the truth is that different languages have different ways of saying things, and the order is important. Please make it so the whole sentences is up for translation at once, don't separate sentences in several strings.
#### 2. PUNCTUATION IS PART OF THE SENTENCE
Please add all punctuation for translation, as different languages use different punctuation rules. Punctuation is part of the sentence.
#### 3. NO HARDCODED UPPERCASES OR CAPITALIZATION
In many languages, ortographic rules change depending on a word being capitalized or not. As Greek and Russian. Other languages, like Arabic, don't even have capital letters, so your styling will not be seen.
That is why you should refrain from hardcoding this styles on CSS or other similar way. If you want a capitalized sentence, write the actual sentence capitalized as you would like to see it, so the translator understands what you want, and translates your intention on the local rules (maybe adding exclamation signs).
#### 4. ADD COMMENTS OR EXPLANATIONS ON HOW TO TRANSLATE
Context is everything when translating, and if a string has many errors, it probably means that a developer comment explaining how to translate it is needed.
Some strings need screenshots to be well translated. Especially in GUIs, when we translate out-of-context single words.
When the source text is in English, as on our project, the objects on that language have no gender. But objects have gender in many languages: Spanish, Italian, French, German... So when we translate 'Published' to German, we need to know what was published (a book, a release?), to give the correct gender to the adjective.
Weblate also provides [QA checks](https://docs.weblate.org/en/latest/user/checks.html). This has the advantage of providing structured feedback to translators while they are translating. You can see our [failing checks in weblate](https://hosted.weblate.org/checks/-/tor/).
#### 5. PROVIDE SCREENSHOTS AND EARLY LOCALIZED RESOURCES
The translators will translate better if they can see the effect their translations have. Try to get a staging/beta version early, so they can do a final review for the language with the real application.
Add screenshots to the translation platform so the translators see how the words will look on the interface.
This will improve the translation because the translators will have the context of the strings, and can also translate looking at the interface.
The localization coordinator can add the screenshots and map them to the strings, but you need to provide them. Screenshots with error messages and those that use dynamic variables are the most important.
Release alphas or nightlies to test translations while they are in progress, as the Tor Browser team does. For the websites, we have separated versions with more languages so translators can preview their work before release. Many of our translators are inexperienced and this way they will learn quickly how to translate without errors.
# Getting your translations added to weblate
Imagine a timeline a bit like this:
```mermaid
%%{init: { 'theme': 'forest' } }%%
gantt
title Localization process
dateFormat YYYY-MM-DD
section Before
Research for i18n options :a1, 4d
Test formats : a3, after a1, 2d
section Translation
Translation : a4, after a3, 40d
Review : a5, after a3, 50d
More translations: a12, after a4, 2d
Upstream translators input: b1, after a12, 5d
Section Maintenance
Software updates: a6, after a5, 2d
Small translations: a7, after a6, 20d
Software updates: a8, after a7, 1d
Small translations: a9, after a8, 20d
Software updates: a10, after a9, 1d
Small translations: a11, after a10, 20d
```
#### Prepare your files for translation
* Check [weblate](https://docs.weblate.org/en/latest/formats.html) for supported file types
* You will need to wait for a new (shorter) round of translations for each string you change. Changing small details for the strings will render them untranslated and create more work. Please only send strings for translation once they are final.
* Our Tier 1 languages contain languages that are read from right to left (RTL). Make sure that your interface can support that. Remember that RTL also implies page composition, align and all. See https://rtl.wtf/intro/ and https://rtlstyling.com/posts/rtl-styling/ to understand the issue.
* Open a ticket in the component [Community/L10n](https://gitlab.torproject.org/tpo/community/l10n/-/issues) with a file with your English strings.
* Please **attach screenshots** for all the strings, so they can be uploaded to weblate. You can have several strings on one screenshot, but try to make sure all strings are present.
* Contact `emmapeel <at> torproject <dot> org` and she will make the bot pick them up and produce a branch on the [translation repository](https://gitlab.torproject.org/tpo/translation/)
* Wait for strings to be added to weblate and git
* Remember that our translators are volunteers interested to help software be on their language. They are usually just starting to translate and may not have a technical background, so strings with variables or even HTML may lead to errors. Try to make the strings not overtly complicated, and add comments explaining the string, or review the strings carefully.
* Weblate does provide some[ QA on the strings](https://docs.weblate.org/en/latest/user/checks.html#checks-and-fixups), but difficult strings can have special checks added. You may need to apply your own validation scripts to the strings coming from weblate.
#### During the translation process
* Please go back to the strings after a while, to see the comments the translators have made on the strings. Translators find errors on the source strings very often. You can also setup different [notifications in weblate](https://hosted.weblate.org/accounts/profile/#notifications) to be aware of problems with your translation: from new comments to repository failures.
* Translators meet once a month, maybe you want to drop by the next [Monthly Tor Localization Hangouts](./Monthly-Tor-Localization-Hangouts) to explain what your app does and talk to them about the app. This will get translators engaged on your software and you will get alpha testers for free!
* You can check the process of your app translation in weblate, joining the Tor Project there. [Open an account](https://community.torproject.org/localization/becoming-tor-translator/) and ping the Localization Coordinator to get more privileges.
* Remember: translations are always better when translators have access to screenshots and previews. Releasing an alpha version with all the active translations will help translators to spot any errors with their translations.
### Your translations
* Clone the [translation repository](https://gitweb.torproject.org/translation.git)
* Check out the branch for your project (e.g. ''git checkout mat-gui'')
'''NOTE:''' Weblate does '''not''' do much validation on the translated strings. You need to make sure that the strings you include are valid and do not contain anything malicious.
### Stats
* You can see the current situation of the translations in the web interface, for example for the Tor Browser Manual: https://hosted.weblate.org/projects/tor/tor-browser-user-manual/
* You can also use the weblate API: https://docs.weblate.org/en/latest/api.html
* There are some stats in [this wiki](https://gitlab.torproject.org/tpo/community/l10n/-/wikis/Localization-for-translators#tor-documents-to-translate)
# How do we call the languages?
### Call them as they call them
When we present a list of languages, we like to call them as the speakers of that language call them. Because if they don't speak English, they probably don't know how their language is spell in English (specially if they use other kind of characters).
We can easily read Spanish/English because we share a Latin alphabet. People using another kind of alphabets (Arabic, Cyrillic, Georgian, etc) will look for familiar letters before reading.
### language codes: Always better to follow Mozilla
Many of our applications depend on the Tor Browser, which in turn depends on Mozilla. By making sure your apps will expect the language codes as in mozilla, you can ensure links and other things are going to work across the whole project. See here for Mozilla language codes: https://hg.mozilla.org/l10n-central/ . Check with the localization coordinator if you don't know what is the situation with your app.
Incidentally, transifex may differ from this codes, but we can correct that through our translation repo. For example, we use `en-US` for the Tor Browser default English locale, but it is called `en` in Transifex.
### Current language list
This is a list of languages we use along projects, with notes about how to write them etc.
Another version of this list can be found at https://gitlab.torproject.org/tpo/community/l10n/-/blob/main/bin/setup_l10n_staging.py
| tbb Lang code | Weblate | English name | Preferred name (orig) | Notes |
| ------ | ------ | ------ | ------ | ------
| am | | Amharic | አማርኛ (am) | Ethiopian language |
| ar | | Arabic | (ar) العربية | Added the article, ref: tpo/community/l10n#40116 |
| az | | Azeri, Azerbaijani | Azərbaycan dili (az) | |
| ba | | Bashkir | Башҡортса (ba) | |
| be | | Belarusian | беларуская мова (be) | |
| bg | | Bulgarian | български (bg) | |
| bn | | Bangla/Bengali | বাংলা | Bangla from Bangladesh and from India are very similar|
| bo | | Tibetan | ལྷ་སའི་སྐད་ (bo) | the last ' is part of the name |
| bs | | Bosnian | Bosanski (bs) | we use the latin version, not cyrillic |
| ca | | Catalan | Català (ref #31600) | |
| ckb | | Central Kurdish, Sorani | (ckb) سۆرانی | |
| ce | | Chechen | Нохчийн мотт (ce) | |
| crh | | Crimean Tatar, Crimean Turkish | qırımtatar tili (crh) | |
| cs | | Czech | česky (cs) | |
| da | | Danish | Dansk (da) | |
| de | | German | Deutsch (de) | |
| el | | Greek | Ελληνικά (el) | |
| en-US | en | English | English (en) | This is our default source language, sometimes written as en, but Firefox for example needs a country code as well.|
| en-GB | en_GB | | | We will not provide this locale, preferring to stick to one regional variation. |
| es-AR | | | | 2021-03: dropped in favor of common es locale |
| es-ES | es | | Español (es) | |
| et | et | Estonian | Eesti (et) | |
| fa | | Persian | ﻑﺍﺮﺳی (fa) | |
| fa-AF| fa_AF | Dari, Persian (Afghanistan) | ﺩﺭی (fa-AF) | |
| fil | | Filipino | | dropped in favor of Tagalog (tl), the non standardised, more used, version, that has a Firefox locale |
| fr | | French | Français (fr)| |
| ga-IE | ga | Irish | Gaeilge (ga) | |
| ha | | Hausa | Hausa (ha) | spoken by 72 million people in West Africa |
| he | | Hebrew | עברית (he) | |
| hi | | Hindi | हिन्दी (hi) | We still have no published translations for Hindi |
| hr | | Croatian | hrvatski (hr) | |
| ht | | Haitian Creole | kreyòl (ht) | |
| hu | | Hungarian | Magyar nyelv (hu) | |
| hy | | Armenian | հայերեն (hy) | |
| id | | Indonesian | bahasa Indonesia (id) | |
| is | | Icelandic | Íslenska (is) | |
| it | | Italian | Italiano | |
| ja | | Japanese | 日本語 (ja) | |
| ka | | Georgian | ქართული (ka) | ref: tpo/web/tpo#302 |
| kk | | Kazakh | (kk) | |
| km | | Khmer | ភាសាខ្មែរ (km) | This is the official language of Cambodia |
| kmr | | Kurmanji, Northern Kurdish | (kmr) کورمانجی | |
| ko | | Korean | 한국어 (ko) | |
| ku | | Kurdish | Umbrella term, it is better to use ckb, Central Kurdish |
| ky | | Kyrgyz | Кыргыз тили (ky) | This is the official language of Kyrgyzstan and a significant minority language in the Kizilsu Kyrgyz Autonomous Prefecture in Xinjiang, China and in the Gorno-Badakhshan Autonomous Region of Tajikistan. There is a very high level of mutual intelligibility between Kyrgyz, Kazakh, and Altay |
| ln | | Lingala | Lingála (ln)| Spoken in DRC, Congo, Sudan and Angola.|
| lo | | Lao | ພາສາລາວ (lo) | |
| lt | |Lithuanian | lietuvių (lt) | |
| mk | | Macedonian | македонски (mk) | |
| ml | | Malayalam | മലയാളം (ml)| |
| ms | ms_MY| Malay | Bahasa Melayu (ms) | |
| my | my | Burmese | မြန်မာ (my) | |
| nd | nd | Ndebele North | isiNdebele (nd) | |
| nb-NO | | Norwegian | Norsk bokmål | |
| nl | | Dutch | Nederlands (nl) | |
| pl | | Polish | polski | |
| ps | | Pashto | (ps) پښتو | |
| pt-BR | pt_BR | | Português Br. | |
| pt-PT | pr_PT | | Português Port. | |
| rn | | Kirundi | Ikirundi (rn) |
| ro | | Romanian | Română (ro) | |
| ru | | Russian | Русский (ru) | |
| rw | | Kinyarwanda | Kinyarwanda (rw) | |
| sg | | Sango | sängö (sg) | |
| sh | | Shona | ChiShona (sh) | |
| so | | Somali | Soomaali (so) | We use the Latin script |
| sq | | Albanian | shqip (sq) | |
| sr | sr@latin | Serbian | srpski (sr) | We use the Latin script, not cyrillic |
| sv-SE | sv | Swedish | Svenska (sv) | |
| sw | sw | Swahili | Kiswahili (sw) | Waiting on Firefox to provide translation for Tor Browser, now translating the Tor Browser Manual, Support Portal, main website, gettor.tpo. |
| ta | | Tamil | தமிழ் (ta) | One of the few classical languages that are still spoken, approx. 80millon's first language. |
| tg | | Tajik | Тоҷикӣ (tg) | |
| tl | | Tagalog | | Preferred to Filipino because it is more used and has a Firefox locale |
| th | | Thai | ภาษาไทย (th) | |
| ti | | Tigrinya | ትግርኛ (ti) | |
| ti | | Turkmen | türkmençe (tk) | we use the latin script |
| tr | | Turkish | Türkçe (tr) | |
| tt | | Tatar | татар (tt) |The Tatar language is spoken in Russia (about 5.3 million people), Ukraine, China, Finland, Turkey, Uzbekistan, the United States of America, Romania, Azerbaijan, Israel, Kazakhstan, Georgia, Lithuania, Latvia and other countries. There are more than 7 million speakers of Tatar in the world. |
| ug | ug@Arab | Uighur | (ug) ئۇيغۇر | The Arabic script is the most used |
| uk | | Ukrainian | українська (uk) | |
| ur | | Urdu | (ur) اُردُو | |
| uz | | Uzbek | Oʻzbekcha (uz) | |
| vi | | Vietnamese | Tiếng Việt (vi) | |
| wo | | Wolof | Wolof (wo) | We use Latin script |
| zh-CN | zh_Hans | Chinese (China) | 简体中文 (zh-CN) |Also called Simplified Chinese - Chinese Hans - language name changed, ref: tpo/community/l10n#40108 |
| zh-TW | zh_Hant | Chinese (Taiwan) | 正體中文 (zh-TW) | Also called Traditional Chinese - Chinese (Hong Kong) - Chinese Hant |
## Tor Browser l10n stuff
Here some links:
- TB i18n docs: https://gitlab.torproject.org/tpo/applications/team/-/wikis/Development-Information/Tor-Browser/Localization
- Locales for Firefox: https://hg.mozilla.org/l10n-central/
- Locales enabled in Tor Browser: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/blob/main/rbm.conf#L98
- Java uses old language codes (in insted of id for Indonesian, and iw insted of he for modern hebrew)
\ No newline at end of file