Localization Guidelines

From War Thunder Wiki
Jump to: navigation, search

Localization texts sometimes contain special characters, tags, and other technical elements. Most of them are well known to professional translators and coders, or intuitive, but there is something you need to know – we use the original plurals syntax, see below.


{n} {n=month/months}
{n} {n=capture zone/capture zones}

The plurals syntax is an extension of the named variable placeholder syntax (read about it below), but differs from them by the presence of the = character inside { and }. To the left of the = character there is the variable name (DON’T translate it), and to the right of the = character there are plurals separated by / character. Those plurals MUST be translated.

Each plural form is a string that can contain any character except the character /. Even spaces are allowed, i.e. it CAN consist of several words.

The number of plural forms must be specified according to your language. In different languages, there are from 1 to 3 of plural forms (for example, in Latin languages – 2 forms, in Slavic languages – 3 forms, and in Asian languages – 1 form).

There is a special exception for languages that have only 1 plural form (Asian languages). For them, it is allowed to either write a single plural form, in the usual way: {n}{n=个月}, or completely remove the block with plurals, and write it like this: {n}个月.

Msg-info.png If you are creating a translation into a new language, please report it to Zoki28 on Crowdin so that we can add plurals support for this new language to War Thunder. Please do it even if your translation is unofficial. This is important because with the help of the translation community, an unofficial translation can later become official.

How it works?

English: {n} {n=month/months} German: {n} {n=Monat/Monate} Polish: {n} {n=miesiąc/miesiące/miesięcy} Serbian: {n} {n=mesec/meseca/meseci} Czech: {n} {n=měsíc/měsíce/měsíců} Chinese: {n}{n=个月} or {n}个月

In this example, {n} is the placeholder for the variable n, and {n=...} is the list of plurals associated with that number n. When dealing with plurals, you can be sure that variable n will be an integer number. When generating a text, the scripts additionally pass some set of parameters. For example, if the script pass the parameter n=1 or n=2 or n=5 to generate a text from this example above, then the text will be generated as follows:

English: 1 month or 2 months or 5 months German: 1 Monat or 2 Monate or 5 Monate Polish: 1 miesiąc or 2 miesiące or 5 miesięcy Serbian: 1 mesec or 2 meseca or 5 meseci Czech: 1 měsíc or 2 měsíce or 5 měsíců Chinese: 1个月 or 2个月 or 5个月

More complex example

Unable to join the team {chosenTeam} ({chosenTeamCount} {chosenTeamCount=player/players}) due to the lack of players in the team {otherTeam} ({otherTeamCount} {otherTeamCount=player/players}).

To generate a text, the script passes a set of parameters. For example:
chosenTeam="A", chosenTeamCount=5, otherTeam="B", otherTeamCount=1
As a result, the following text is generated:

Unable to join the team A (5 players) due to the lack of players in the team B (1 player).

Therefore, for example, in Czech, this line should be translated like this:

Nepodařilo se přidat ke straně {chosenTeam} ({chosenTeamCount} {chosenTeamCount=hráč/hráči/hráčů}) kvůli nedostatku hráčů na straně {otherTeam} ({otherTeamCount} {otherTeamCount=hráč/hráči/hráčů}).

Then the text in Czech will be generated like this:

Nepodařilo se přidat ke straně A (5 hráčů) kvůli nedostatku hráčů na straně B (1 hráč).

What else can you do with plurals?

The syntax of the plurals allows some freedom of choice. It happens that the plurals in the original source text in English are not very convenient for translation to your language. In this case you CAN alter the texts of the plurals in the translated text. For example, we have the following source text:

{amount} Golden {amount=Eagle/Eagles}

In Polish, the word “Golden” should also be spelled differently here, depending on the amount of eagles. Therefore, it is allowed to remake texts in plurals block (and even add new plural blocks) when required by the rules of your language. In this case, the text can be translated into Polish by any of the following ways:

{amount} {amount=Złoty Orzeł/Złote Orły/Złotych Orłów}
{amount} {amount=Złoty/Złote/Złotych} {amount=Orzeł/Orły/Orłów}
{amount} Złot{amount=y/e/ych} Or{amount=zeł/ły/łów}

All these 3 options will generate the same result. The scripts will generate texts in Polish correctly:

1 Złoty Orzeł, 2 Złote Orły, 5 Złotych Orłów

Named variable placeholders

Each player who registers using your link will receive {gift} as a gift.
每个使用该推广链接注册的玩家都将获得 {gift}
Online: {playersOnline}, Battles: {battles}
En línea: {playersOnline}, Batallas: {battles}

Named variable placeholder look like the variable name in curly braces. When generating text, these placeholders will be replaced with some strings or numbers. When there are multiple named variable placeholders in the text, you CAN interchange them as you need, if required by the rules of your language. But DON’T translate the content between { and } (except when it contains the character =, followed by the plurals, about which it is written above – plurals MUST be translated).

Keyboard/gamepad shortcut image placeholders

Press {{ID_CONTINUE}} to continue
Devam etmek için {{ID_CONTINUE}} tuşuna basın
{{ID_TOGGLE_VIEW_SHIP}} Switch to third-person view
{{ID_TOGGLE_VIEW_SHIP}} 을(를) 눌러 3인칭 시점으로 전환하라

Keyboard shortcut image placeholders look almost like named variable placeholders, but differ from them in that they are enclosed in double curly braces {{ and }}. DON’T translate the content between {{ and }}. You can place this block anywhere in the text – in the beginning, middle, or end of text.

Printf format specifiers

You cannot add more than %d contacts.
Vous ne pouvez pas ajouter plus de %d contacts.
%d mm
Discount on vehicle %s%%.
Sconto sull' unità %s%%.

The printf format specifier is a special sequence of characters, beginning with the % character, which the application replaces with some number or string. Most often in our localization texts they look like %s or %d, but sometimes they can be more complicated, for example %.3f, etc. All types of printf format specifiers are described in the printf function manual for C/C++ programming language.

Specifiers can be surrounded by spaces, or merge with adjacent text – it doesn't matter. In place of these specifiers, the application will substitute some string (if it is %s) or number (if it is %d, and others), or the usual percent sign % (if it is %%). By the way, %s can be used to substitute the string that look like number.

In the translated text, all printf format specifiers must be present, and they MUST go in the same order as in the original text. It is important! If there are several such specifiers in a text, then DON’T interchange them. Because the application will substitute some specified strings/numbers into this text in a specified order. And for your translated text this order will be EXACTLY the same as in the original English text.


Main rotor RPM <color=@badTextColor>(red - can't take off)</color>

The tags in our localization texts are similar to HTML tags. They are responsible for the decoration of the text, for example, the <color></color> tag colors that part of the text that in a specified color. Tags are always paired – there should always be an opening tag (like <b>) and a closing tag (like </b>). In the translated text, you need to keep all the tags as they are.

Special characters

Ki-61-Ib Hien


Sometimes the text may contain special characters that may look unusual. In War Thunder, these character are replaced with various icons from a special iconic font (like “Windings” or “Font Awesome”), but one that consists of custom icons made specifically for War Thunder. DON'T translate and DON'T remove such character because it has meaning and is important. And don't worry if such character looks too strange, because in War Thunder it will most likely be shown as a completely different specific symbol.