Version at: 19/04/2020, 18:59

# Interface Translation

This article explains how you can help us translate the website interface into other languages.

## 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 translators 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 &lt; or &gt; inside a translation, respectively use &amp;lt; or &amp;gt; instead. You can also insert tags to format text according to the typography rules of the language you’re translating to. For instance &lt;em&gt;text&lt;/em&gt; will <em>emphasize</em> text, &lt;sup&gt;text&lt;/sup&gt; will put text in <sup>superscript</sup>.

You’ll see the &amp;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 have plurals. This means they have several versions for each plural form of the language you’re translating into, depending on a number usually included in the string (usually {n}). A plural string can be recognized by the additional buttons, shown in red in that picture:

![Plural strings and developers notes](/media/get/transifex_plurals_notes.png)

The English language always has two forms: singular and plural. The language you’re translating into may have only singular, singular and plural, singular and two or three plurals, etc. So you need to translate each plural form individually by clicking on each plural button.

Don’t pay too much attention to how the English formulates singular vs. plural, and think about all the values {n} can take. In particular, many of the English singular forms use the word “one”, like “One sentence” for the singular and “{n} sentences” for the plural. We can do that because the English singular form is only used when n = 1. When n = 0 or n > 1, it uses the plural form. French and Brazilian Portuguese use singular when n = 0 or n = 1, and plural when n > 1. Thus, these language can’t use “one” for the singular, they must use {n} for both singular and plural. You can find a [complete list of all the plural formulas](http://localization-guide.readthedocs.org/en/latest/l10n/pluralforms.html) to verify your language’s.

### Developers 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 into 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, which is actually a declension. We’ll translate English into English. Consider the strings:

* I have a {thing}.
* We need more {thing}.

The placeholder {thing} get 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} get 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 considered 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 French 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).

## 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 development (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, it happens that you can't translate everything. Only when a new feature is deemed to be ready, we update Transifex and you can translate the new strings.

## When will my translations show up on tatoeba.org?

Next 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: 04/05/2020, 12:55

# Interface Translation

This article explains how you can help us translate the website interface into other languages.

## 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 &lt;strong&gt;blah blah blah&lt;/strong&gt;. You should keep it as-is and translate the rest.

If you want to use the characters &lt; or &gt; inside a translation, respectively use &amp;lt; or &amp;gt; instead. You can also insert tags to format text according to the typography rules of the language you’re translating to. For instance &lt;em&gt;text&lt;/em&gt; will <em>emphasize</em> text, &lt;sup&gt;text&lt;/sup&gt; will put text in <sup>superscript</sup>.

You’ll see the &amp;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 have plurals. This means they have several versions for each plural form of the language you’re translating into, depending on a number usually included in the string (usually {n}). A plural string can be recognized by the additional buttons, shown in red in that picture:

![Plural strings and developers notes](/media/get/transifex_plurals_notes.png)

The English language always has two forms: singular and plural. The language you’re translating into may have only singular, singular and plural, singular and two or three plurals, etc. So you need to translate each plural form individually by clicking on each plural button.

Don’t pay too much attention to how the English formulates singular vs. plural, and think about all the values {n} can take. In particular, many of the English singular forms use the word “one”, like “One sentence” for the singular and “{n} sentences” for the plural. We can do that because the English singular form is only used when n = 1. When n = 0 or n > 1, it uses the plural form. French and Brazilian Portuguese use singular when n = 0 or n = 1, and plural when n > 1. Thus, these language can’t use “one” for the singular, they must use {n} for both singular and plural. You can find a [complete list of all the plural formulas](http://localization-guide.readthedocs.org/en/latest/l10n/pluralforms.html) to verify your language’s.

### 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 French 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).

## 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.

## When will my translations show up on tatoeba.org?

Next 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.

Note

The lines in green are the lines that have been added in the new version. The lines in red are those that have been removed.