Version at: 12/03/22 22.11
# Interface Translation
This article explains how you can help us translate the website interface into other languages. If you are not a translator, and want to call attention to a particular untranslated string, post on the Wall. Alternatively, you can contact one of the translators if you know who they are.
## Accessing the translation platform
We use a platform called **Transifex** to manage the translations of the website. Here's what you have to do in order to join the translator team:
1. Go to this page [https://www.transifex.com/projects/p/tatoeba_website/](https://www.transifex.com/projects/p/tatoeba_website/).
2. If you do not have an account on Transifex: click on "Help translate Tatoeba website" and create your account.
3. If you do have an account: log in, choose the language(s) in which you would like to translate and apply to be a translator.
4. You have to wait for your application to be accepted.
Once you have been accepted as a translator, here's how you can access the list of strings to translate.
1. From your dashboard:
![How to go to the Transifex translation page 1/3](/media/get/transifex-translate1.png)
2. Then select the "default.pot" resource:
![How to go to the Transifex translation page 2/3](/media/get/transifex-translate2.png)
3. Select "Untranslated" strings:
![How to go to the Transifex translation page 3/3](/media/get/transifex-translate3.png)
If you need to learn more about Transifex, you can read their documentation: [http://docs.transifex.com/](http://docs.transifex.com/).
## Translating strings
A "string" is the basic unit of translatable content. It may contain part of a sentence, one sentence, or more sentences.
### HTML
All the strings should be encoded in HTML. It means that most of the time, it doesn’t change anything, but you may encounter HTML markup here and there, such as <strong>blah blah blah</strong>. You should keep it as-is and translate the rest.
If you want to use the characters < or > inside a translation, respectively use &lt; or &gt; instead. You can also insert tags to format text according to the typography rules of the language you’re translating to. For instance <em>text</em> will <em>emphasize</em> text, <sup>text</sup> will put text in <sup>superscript</sup>.
You’ll see the &nbsp; sequence here and there. Don’t be afraid; it just appears as a space character, but it can’t be used to break a line. We use it to prevent lines from being broken at awkward places such as after numbers. Keep them in your translation if it makes sense in your language.
### Placeholders
Some strings include words between brackets like {0} or {user} or even {}. These words act as placeholders and are replaced by actual words when displayed on the website. For instance, in the string "{user}'s sentences", the **{user}** part is replaced by the name of a user, which produces something like "[trang's sentences](http://tatoeba.org/eng/sentences/of_user/trang)". Therefore, when translating such sentences, you must keep every word between brackets as-is inside your translation. We used to have %s as placeholder, but not anymore.
### Useful information in the details
Each translation has a “More details” link that expands detailed information. A few lines contain useful information.
![How to access a translation details](/media/get/transifex_more_details.png)
The “Occurrences” line shows you URLs that bring you to the source code. This is primarily used by developers, but you can try to get a grasp of what it’s about. If the link contains “/views/”, it’s possible to get to the page where the string is used by building a URL as described on the picture.
The “Context” line (underlined in red on the picture) is used to distinguish two or more translations that have the same source text. It happens that the same English string can be translated in multiple ways depending on the context, especially if it’s short. Take, for instance, the word “test”. Is it the verb “to test” as an action on a button, or an exam?
### Plural strings
Some strings contain phrases (usually indicated by {n}) that have both singular and plural forms. A plural string can be recognized by the "1" and "other" buttons within the red rectangle in the following picture:
![Plural strings](/media/get/unnamed.png)
You need to provide both the singular and plural forms of the string in the target language. Otherwise, Transifex will not save your translation.
Languages can vary in the way they use plurals. In addition, some languages have more than one plural form, and some have none. See the [list of all plural formulas on Transifex](http://localization-guide.readthedocs.org/en/latest/l10n/pluralforms.html).
### Developer notes
As highlighted in green in the above picture, developers may add notes to give hints to translators. If you find a particular string to be difficult to understand, please tell us and we’ll add comments like this for other translators.
### Declensions
When you include a string within another, you may run into declension problems. English [has very few declensions](https://en.wikipedia.org/wiki/Declension#Modern_English), but the language you’re translating to may have more.
To illustrate the problem, let’s take the singular and plural in English. We’ll translate English into English. Consider the strings:
* I have a {thing}.
* We need more {thing}.
The placeholder {thing} gets its value from a translatable string: “book” (translated to “book”). So we end up with:
* I have a book.
* We need more book.
There is obviously a problem with the second sentence. To fix this, we’ll use the sublisting feature. If you know that {thing} gets its value from another translatable string, you can enter several values for that string, like this:
* original string: book
* translated string: **; singular: book; plural: books**
It’s a list of key/value pairs separated by semicolons. The names of the keys are free (they can contain any character except : and ;). Any translated string that starts with a semicolon is treated as a sublist. From now on, you can pick a single value from the list, like this:
* original sentence: I have a {thing}.
* translated sentence: I have a {thing.singular}.
And for the second string:
* original sentence: We need more {thing}.
* translated sentence: We need more {thing.plural}.
The {thing.key} syntax is rather comprehensive. If it cannot find the key, or you use {thing} with a sublist, it falls back to the first item of the sublist. Thus, you want to set a safe default as the first value of your sublists.
In Tatoeba, this feature can be used with language names, if they decline. Enter a sublist for every language name, and then use {language.declension_foo} wherever a language name is used inside a string. When language names are not used within a translatable string, i.e. for text inside dropdown lists, flag mouseover etc., you can decline by translating the special “{language}” string. If you want to see a working example of language name declensions, check the Finnish translation.
## Adding comments on other’s translations
In the bottom left area, there is a place to add comments or report problems about a particular string. Whatever you write here will be visible on every other language translation, so please only report comments about the original English string. The author of the translation won’t get any sort of notification from your comment unless you mention their username by writing *@username*. If you want to comment about the translation, send a private message to the author.
## Checking how your translation renders online
If you know the page your translated string is supposed to appear on, you can check how it renders by going to the [development website](http://dev.tatoeba.org/). Translations are automatically pulled from Transifex and installed there every ten minutes (at minutes 0, 10, 20, 30, 40 and 50).
If you need to frequently swap between UI languages, Tatoeba will get into your way because it remembers the selected UI language across all tabs and windows. To get around this, you can use the "private navigation" (aka "incognito mode") to browse the website in a different language than regular navigation. Alternatively, you can choose one language on https://tatoeba.org and another on https://dev.tatoeba.org. If you add (or remove) **dev.** at the beginning of the URL, the interface language will automatically change.
## A string is missing on Transifex
If you see a particular string on dev.tatoeba.org that is not on Transifex, it is likely because the string is part of an ongoing modification (something that is not yet available on the official website tatoeba.org). Since dev.tatoeba.org is also used to test out features in development, you will not be able to translate everything. Only when a new feature is deemed to be ready do we update Transifex, after which you can translate the new strings.
## Translations show up on tatoeba.org every Sunday
Every Sunday, all new translations are included as part of the weekly update of tatoeba.org. So if you finish your translation before Sunday, it will show up on tatoeba.org. If not, you will have to wait until the next Sunday.
version at: 07/06/23 09.02
# Interface Translation
This article explains how you can help us translate the website interface into other languages. If you are not a translator, and want to call attention to a particular untranslated string, post on the Wall. Alternatively, you can contact one of the translators if you know who they are.
## Accessing the translation platform
We use a platform called **Transifex** to manage the translations of the website. Here's what you have to do in order to join the translator team:
1. Go to [Tatoeba's page on Transifex](https://explore.transifex.com/tatoeba/tatoeba_website/).
2. If you do not have an account on Transifex: click on "Help translate Tatoeba website" and create your account.
3. If you do have an account: log in, choose the language(s) in which you would like to translate and apply to be a translator.
4. You have to wait for your application to be accepted.
Once you have been accepted as a translator, here's how you can access the list of strings to translate.
1. From your dashboard:
![How to go to the Transifex translation page 1/3](/media/get/transifex-translate1.png)
2. Then select the "default.pot" resource:
![How to go to the Transifex translation page 2/3](/media/get/transifex-translate2.png)
3. Select "Untranslated" strings:
![How to go to the Transifex translation page 3/3](/media/get/transifex-translate3.png)
If you need to learn more about Transifex, you can read [their documentation](https://help.transifex.com/).
## Translating strings
A "string" is the basic unit of translatable content. It may contain part of a sentence, one sentence, or more sentences.
### HTML
All the strings should be encoded in HTML. It means that most of the time, it doesn’t change anything, but you may encounter HTML markup here and there, such as <strong>blah blah blah</strong>. You should keep it as-is and translate the rest.
If you want to use the characters < or > inside a translation, respectively use &lt; or &gt; instead. You can also insert tags to format text according to the typography rules of the language you’re translating to. For instance <em>text</em> will <em>emphasize</em> text, <sup>text</sup> will put text in <sup>superscript</sup>.
You’ll see the &nbsp; sequence here and there. Don’t be afraid; it just appears as a space character, but it can’t be used to break a line. We use it to prevent lines from being broken at awkward places such as after numbers. Keep them in your translation if it makes sense in your language.
### Placeholders
Some strings include words between brackets like {0} or {user} or even {}. These words act as placeholders and are replaced by actual words when displayed on the website. For instance, in the string "{user}'s sentences", the **{user}** part is replaced by the name of a user, which produces something like "[trang's sentences](http://tatoeba.org/eng/sentences/of_user/trang)". Therefore, when translating such sentences, you must keep every word between brackets as-is inside your translation. We used to have %s as placeholder, but not anymore.
### Useful information in the details
Each translation has a “More details” link that expands detailed information. A few lines contain useful information.
![How to access a translation details](/media/get/transifex_more_details.png)
The “Occurrences” line shows you URLs that bring you to the source code. This is primarily used by developers, but you can try to get a grasp of what it’s about. If the link contains “/views/”, it’s possible to get to the page where the string is used by building a URL as described on the picture.
The “Context” line (underlined in red on the picture) is used to distinguish two or more translations that have the same source text. It happens that the same English string can be translated in multiple ways depending on the context, especially if it’s short. Take, for instance, the word “test”. Is it the verb “to test” as an action on a button, or an exam?
### Plural strings
Some strings contain phrases (usually indicated by {n}) that have both singular and plural forms. A plural string can be recognized by the "1" and "other" buttons within the red rectangle in the following picture:
![Plural strings](/media/get/unnamed.png)
You need to provide both the singular and plural forms of the string in the target language. Otherwise, Transifex will not save your translation.
Languages can vary in the way they use plurals. In addition, some languages have more than one plural form, and some have none. See the [list of all plural formulas on Transifex](http://localization-guide.readthedocs.org/en/latest/l10n/pluralforms.html).
### Developer notes
As highlighted in green in the above picture, developers may add notes to give hints to translators. If you find a particular string to be difficult to understand, please tell us and we’ll add comments like this for other translators.
### Declensions
When you include a string within another, you may run into declension problems. English [has very few declensions](https://en.wikipedia.org/wiki/Declension#Modern_English), but the language you’re translating to may have more.
To illustrate the problem, let’s take the singular and plural in English. We’ll translate English into English. Consider the strings:
* I have a {thing}.
* We need more {thing}.
The placeholder {thing} gets its value from a translatable string: “book” (translated to “book”). So we end up with:
* I have a book.
* We need more book.
There is obviously a problem with the second sentence. To fix this, we’ll use the sublisting feature. If you know that {thing} gets its value from another translatable string, you can enter several values for that string, like this:
* original string: book
* translated string: **; singular: book; plural: books**
It’s a list of key/value pairs separated by semicolons. The names of the keys are free (they can contain any character except : and ;). Any translated string that starts with a semicolon is treated as a sublist. From now on, you can pick a single value from the list, like this:
* original sentence: I have a {thing}.
* translated sentence: I have a {thing.singular}.
And for the second string:
* original sentence: We need more {thing}.
* translated sentence: We need more {thing.plural}.
The {thing.key} syntax is rather comprehensive. If it cannot find the key, or you use {thing} with a sublist, it falls back to the first item of the sublist. Thus, you want to set a safe default as the first value of your sublists.
In Tatoeba, this feature can be used with language names, if they decline. Enter a sublist for every language name, and then use {language.declension_foo} wherever a language name is used inside a string. When language names are not used within a translatable string, i.e. for text inside dropdown lists, flag mouseover etc., you can decline by translating the special “{language}” string. If you want to see a working example of language name declensions, check the Finnish translation.
## Adding comments on other’s translations
In the bottom left area, there is a place to add comments or report problems about a particular string. Whatever you write here will be visible on every other language translation, so please only report comments about the original English string. The author of the translation won’t get any sort of notification from your comment unless you mention their username by writing *@username*. If you want to comment about the translation, send a private message to the author.
## Checking how your translation renders online
If you know the page your translated string is supposed to appear on, you can check how it renders by going to the [development website](http://dev.tatoeba.org/). Translations are automatically pulled from Transifex and installed there every ten minutes (at minutes 0, 10, 20, 30, 40 and 50).
If you need to frequently swap between UI languages, Tatoeba will get into your way because it remembers the selected UI language across all tabs and windows. To get around this, you can use the "private navigation" (aka "incognito mode") to browse the website in a different language than regular navigation. Alternatively, you can choose one language on https://tatoeba.org and another on https://dev.tatoeba.org. If you add (or remove) **dev.** at the beginning of the URL, the interface language will automatically change.
## A string is missing on Transifex
If you see a particular string on dev.tatoeba.org that is not on Transifex, it is likely because the string is part of an ongoing modification (something that is not yet available on the official website tatoeba.org). Since dev.tatoeba.org is also used to test out features in development, you will not be able to translate everything. Only when a new feature is deemed to be ready do we update Transifex, after which you can translate the new strings.
## Translations show up on tatoeba.org every Sunday
Every Sunday, all new translations are included as part of the weekly update of tatoeba.org. So if you finish your translation before Sunday, it will show up on tatoeba.org. If not, you will have to wait until the next Sunday.