Apply conversion script to all *.md files. authored by Alexander Hansen Færøy's avatar Alexander Hansen Færøy
= Translation process for Tor developers = # Translation process for Tor developers
To have a real impact worlwide, our software needs to break the language barriers a **majority of the global population** has. 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. 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.
If you have doubts about how to localize your software, please get in touch with emmapeel@torproject.org If you have doubts about how to localize your software, please get in touch with emmapeel@torproject.org
= How to be nice to translators = # How to be nice to translators
Remember that **if you generate better quality source strings, the translations will be better**. Remember that **if you generate better quality source strings, the translations will be better**.
== Translators' input == ## Translators' input
The translators find many errors on the source strings, it is important to have a look at the [https://www.transifex.com/otf/torproject/translate/#issues open issues in transifex] (needs login) The translators find many errors on the source strings, it is important to have a look at the [open issues in transifex](https://www.transifex.com/otf/torproject/translate/#issues) (needs login)
After selecting a string, check the Comments section on the bottom right: there you will see the issue the translator has found: After selecting a string, check the Comments section on the bottom right: there you will see the issue the translator has found:
[[Image(issues_transifex.cleaned.png)]] ![issues_transifex.cleaned.png](issues_transifex.cleaned.png)
Please read the incredibly good article [https://www.smashingmagazine.com/2012/07/12-commandments-software-localization/ 12 Commandments Of Software Localization] from Zack Grossbart to get an introduction to software localization from an engineer's point of view. This are developers best practices with l10n in mind: 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. This are developers best practices with l10n in mind:
=== 1. NEVER CONCATENATE STRINGS === ### 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. 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.
=== 2. PUNCTUATION IS PART OF THE SENTENCE === ### 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. 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 === ### 3. NO HARDCODED UPPERCASES OR CAPITALIZATION
Ortographic rules change depending on a word being capitalized or not in many languages, as Greek and Russian. Other languages, like Arabic, don't even have capital letters, so your styling will not be seen. Ortographic rules change depending on a word being capitalized or not in many languages, 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 of hardcoding this styles on CSS or other similar way, and 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 or something else). That is why you should refrain of hardcoding this styles on CSS or other similar way, and 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 or something else).
=== 4. ADD COMMENTS OR EXPLANATIONS ON HOW TO TRANSLATE === ### 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 is needed. Context is everything when translating, and if a string has many errors, it probably means that a developer comment explaining how to translate is needed.
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, to give the correct gender to the adjective. 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, to give the correct gender to the adjective.
=== 5. PROVIDE SCREENSHOTS AND EARLY LOCALIZED RESOURCES === ### 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. 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.
[https://www.transifex.com/otf/torproject/context/ Add screenshots to the translation platform] to make people more aware of how the words will look on the interface. [Add screenshots to the translation platform](https://www.transifex.com/otf/torproject/context/) to make people more aware of how the words will look on the interface.
=== Getting your translations added to Transifex === ### Getting your translations added to Transifex
* Check [Transifex] for supported file types * Check [Transifex] for supported file types
* Open a ticket in the component Community/Translations with a link to your English strings, preferably in Tor Project or Tails git. * Open a ticket in the component Community/Translations with a link to your English strings, preferably in Tor Project or Tails git.
* Contact `emmapeel <at> torproject <dot> org` and she will make the bot pick them up and produce two branches on the [https://gitweb.torproject.org/translation.git translation] repository * Contact `emmapeel <at> torproject <dot> org` and she will make the bot pick them up and produce two branches on the [translation](https://gitweb.torproject.org/translation.git) repository
* Wait for strings to be added to Transifex and git * Wait for strings to be added to Transifex and git
If you wish to test your strings before sending them for translation, you can join the [https://www.transifex.com/otf/tor-project-sandbox/dashboard/ Sandbox project] where you can see clearly how the translators will see your file, we can refine the process and make sure the files are ready for translation **before** sending them to the translators. If you wish to test your strings before sending them for translation, you can join the [Sandbox project](https://www.transifex.com/otf/tor-project-sandbox/dashboard/) where you can see clearly how the translators will see your file, we can refine the process and make sure the files are ready for translation **before** sending them to the translators.
=== Using your translations === ### Using your translations
* Clone the [https://gitweb.torproject.org/translation.git translation repository] * Clone the [translation repository](https://gitweb.torproject.org/translation.git)
* Check out the branch for your project (e.g. ''git checkout mat-gui'') * Check out the branch for your project (e.g. _git checkout mat-gui_)
* If you only want translations that are completed, check out the ''_completed'' branch instead (e.g. ''git checkout mat-gui_completed''). Currently this branch only provides reviewed strings as well. * If you only want translations that are completed, check out the __completed_ branch instead (e.g. _git checkout mat-gui_completed_). Currently this branch only provides reviewed strings as well.
'''NOTE:''' Transifex does '''not''' do any kind of input validation on the translated strings. You need to make sure that the strings you include are valid and do not contain anything malicious. **NOTE:** Transifex does **not** do any kind of input validation on the translated strings. You need to make sure that the strings you include are valid and do not contain anything malicious.
=== Stats === ### Stats
arthuredelstein is helping with some stats about translation, so they can be accessed from outside transifex: arthuredelstein is helping with some stats about translation, so they can be accessed from outside transifex:
* Tor Browser Locales: https://torpat.ch/locales * Tor Browser Locales: https://torpat.ch/locales
...@@ -72,66 +72,67 @@ arthuredelstein is helping with some stats about translation, so they can be acc ...@@ -72,66 +72,67 @@ arthuredelstein is helping with some stats about translation, so they can be acc
thanks arthur! thanks arthur!
= How do we call the languages? = # How do we call the languages?
=== Call them as they call them === ### 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). 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. 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 === ### 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. 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 locale, but it is called en in Transiffex. 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 locale, but it is called en in Transiffex.
=== Actual list === ### Actual list
|| tbb Lang code || transifex || English name || Preferred name (orig) || | tbb Lang code | transifex | English name | Preferred name (orig) |
|| ar || || Arabic || عربية (ar) || |---------------|-----------|--------------|-----------------------|
|| ca || || || Català (ref #31600) || | ar | | Arabic | عربية (ar) |
|| cs || || || česky || | ca | | | Català (ref #31600) |
|| da || || || Dansk || | cs | | | česky |
|| de || || || Deutsch || | da | | | Dansk |
|| el || || || Ελληνικά (el) || | de | | | Deutsch |
|| en-US || en || || || | el | | | Ελληνικά (el) |
|| es-AR || || || || | en-US | en | | |
|| es-ES || es || || Español || | es-AR | | | |
|| fa || || || ﻑﺍﺮﺳی || | es-ES | es | | Español |
|| fr || || || Français || | fa | | | ﻑﺍﺮﺳی |
|| ga-IE || ga || Irish || Gaeilge (ga) || | fr | | | Français |
|| he || || Hebrew || עברית || | ga-IE | ga | Irish | Gaeilge (ga) |
|| hr || || Croatian || hrvatski || | he | | Hebrew | עברית |
|| hu || || Hungarian || Magyar nyelv (hu) || | hr | | Croatian | hrvatski |
|| id || || || bahasa Indonesia || | hu | | Hungarian | Magyar nyelv (hu) |
|| is || || Icelandic || Íslenska || | id | | | bahasa Indonesia |
|| it || || || Italiano || | is | | Icelandic | Íslenska |
|| ja || || || 日本語 || | it | | | Italiano |
|| ka || || Georgian || ქართული ენა || | ja | | | 日本語 |
|| ko || || || 한국어 || | ka | | Georgian | ქართული ენა |
|| lt || ||Lithuanian || lietuvių || | ko | | | 한국어 |
|| mk || || Macedonian || македонски (mk) || | lt | |Lithuanian | lietuvių |
|| ml || || Malayalam || മലയാളം || | mk | | Macedonian | македонски (mk) |
|| ms || ms_MY|| Malay || Bahasa Melayu || | ml | | Malayalam | മലയാളം |
|| nb-NO || || || Norsk bokmål || | ms | ms_MY| Malay | Bahasa Melayu |
|| nl || || Dutch || Nederlands (nl) || | nb-NO | | | Norsk bokmål |
|| pl || || Polish || polski || | nl | | Dutch | Nederlands (nl) |
|| pt-BR || || || Português Br. || | pl | | Polish | polski |
|| pt-PT || || || Português Port. || | pt-BR | | | Português Br. |
|| ro || || Romanian || Română || | pt-PT | | | Português Port. |
|| ru || || Russian || Русский || | ro | | Romanian | Română |
|| sv-SE || sv || Swedish || Svenska (sv) || | ru | | Russian | Русский |
|| th || || Thai || ภาษาไทย (th) || | sv-SE | sv | Swedish | Svenska (sv) |
|| tr || || || Türkçe || | th | | Thai | ภาษาไทย (th) |
|| vi || || || Tiếng Việt || | tr | | | Türkçe |
|| uk || || || українська || | vi | | | Tiếng Việt |
|| zh-CN || zh_CN || || 简体中文 (zh-CN) || | uk | | | українська |
|| zh-TW || zh_TW || || 正體字 (zh-TW) || | zh-CN | zh_CN | | 简体中文 (zh-CN) |
| zh-TW | zh_TW | | 正體字 (zh-TW) |
= Transifex' Sandbox =
# Transifex' Sandbox
The [https://www.transifex.com/otf/tor-project-sandbox/dashboard/ Sandbox] is available for developers to test how will the strings look in Transifex, before sending them to translation. Please join the group if you want a sandbox to play.
The [Sandbox](https://www.transifex.com/otf/tor-project-sandbox/dashboard/) is available for developers to test how will the strings look in Transifex, before sending them to translation. Please join the group if you want a sandbox to play.