Internationalization
Overview
Xtd uses a number of user-readable strings, such as "open" or "save", which need to be translated into the user's language if it's different from English.
xtd has built-in support for internationalization, allowing this to happen automatically if translations into the current language are available.
You can find here a list of all existing translations with the addresses of the official translators you should contact if you wish to submit corrections to the translations for your language.
List of all locales and corresponding languages
The following table shows all locales and corresponding languages :
code | ISO 639-2 code | summary | language |
---|---|---|---|
af | afr | Afrikaans locale | Afrikaans |
ar | ara | Arabic locale | Arabic |
ar_DZ | ara | Arabic locale (Algerian Arabic) | Algerian Arabic |
ar_MA | ara | Arabic locale (Moroccan Arabic) | Moroccan Arabic |
ar_SA | ara | Arabic locale (Sauid Arabic) | Arabic |
ar_TN | ara | Arabic locale (Tunisian Arabic) | Arabic |
az | aze | Azerbaijani locale | Azerbaijani |
be | bel | Belarusian locale | Belarusian |
bg | bul | Bulgarian locale | Bulgarian |
bn | ben | Bengali locale | Bengali |
bs | bos | Bosnian locale | Bosnian |
ca | cat | Catalan locale | Catalan |
cs | ces | Czech locale | Czech |
cy | cym | Welsh locale | Welsh |
da | dan | Danish locale | Danish |
de | deu | German locale | German |
de_AT | deu | German locale (Austria) | German |
el | ell | Greek locale | Greek |
en | eng | English locale | English |
en_AU | eng | English locale (Australia) | English |
en_CA | eng | English locale (Canada) | English |
en_GB | eng | English locale (United Kingdom) | English |
en_IE | eng | English locale (Ireland) | English |
en_IN | eng | English locale (India) | English |
en_NZ | eng | English locale (New Zealand) | English |
en_US | eng | English locale (United States) | English |
en_ZA | eng | English locale (South Africa) | English |
eo | epo | Esperanto locale | Esperanto |
es | spa | Spanish locale | Spanish |
et | est | Estonian locale | Estonian |
eu | eus | Basque locale | Basque |
fa_IR | ira | Persian/Farsi locale (Iran) | Persian |
fi | fin | Finnish locale | Finnish |
fr | fra | French locale | French |
fr_CA | fra | French locale (Canada) | French |
fr_CH | fra | French locale (Switzerland) | French |
gd | gla | Scottish Gaelic | Scottish Gaelic |
gl | glg | Galician locale | Galician |
gu | guj | Gujarati locale (India) | Gujarati |
he | heb | Hebrew locale | Hebrew |
hi | hin | Hindi locale (India) | Hindi |
hr | hrv | Croatian locale | Croatian |
ht | hat | Haitian Creole locale | Haitian Creole |
hu | hun | Hungarian locale | Hungarian |
hy | arm | Armenian locale | Armenian |
id | ind | Indonesian locale | Indonesian |
is | isl | Icelandic locale | Icelandic |
it | ita | Italian locale | Italian |
ja | jpn | Japanese locale | Japanese |
ja_HIRA | jpn | Japanese (Hiragana) locale | Japanese (Hiragana) |
ka | geo | Georgian locale | Georgian |
kk | kaz | Kazakh locale | Kazakh |
kn | kan | Kannada locale (India) | Kannada |
ko | kor | Korean locale | Korean |
lb | ltz | Luxembourgish locale | Luxembourgish |
lt | lit | Lithuanian locale | Lithuanian |
lv | lav | Latvian locale (Latvia) | Latvian |
mk | mkd | Macedonian locale | Macedonian |
mn | mon | Mongolian locale | Mongolian |
ms | msa | Malay locale | Malay |
mt | mlt | Maltese locale | Maltese |
nb | nob | Norwegian Bokmål locale | Norwegian Bokmål |
nl | nld | Dutch locale | Dutch |
nl_BE | nld | Flemish locale (Belgium) | Flemish |
nn | nno | Norwegian Nynorsk locale | Norwegian Nynorsk |
pl | pol | Polish locale | Polish |
pt | por | Portuguese locale | Portuguese |
pt_BR | por | Portuguese locale (Brazil) | Portuguese |
ro | ron | Romanian locale | Romanian |
ru | rus | Russian locale | Russian |
sk | slk | Slovak locale | Slovak |
sl | slv | Slovenian locale | Slovenian |
sq | sqi | Albanian locale | Shqip |
sr | srp | Serbian cyrillic locale | Serbian |
sr_LATN | srp | Serbian latin locale | Serbian |
sv | swe | Swedish locale | Swedish |
ta | tam | Tamil locale (India) | Tamil |
te | tel | Telugu locale | Telugu |
th | tha | Thai locale | Thai |
tr | tur | Turkish locale | Turkish |
ug | uig | Uighur locale | Uighur |
uk | ukr | Ukrainian locale | Ukrainian |
uz | uzb | Uzbek locale | Uzbek |
vi | vie | Vietnamese locale (Vietnam) | Vietnamese |
zh | zho | Chinese Simplified locale | Chinese Simplified |
zh_CN | zho | Chinese Simplified locale (China) | Chinese Simplified |
zh_TW | zho | Chinese Traditional locale (Taiwan) | Chinese Traditional |
If you wish to add a specific language not listed below, you can do so by using the ISO code 639-1.
See List of ISO 639-1 codes for complete list of languages.
Translater usage
Change the applicaiton locale
To change the application locale, use std::locale::global method.
The following example show how to change the locale to french (France).
auto main() -> int {
std::locale::global(std::locale {"fr_FR.utf-8"});
}
The following example show how to change the locale to russian (Russia).
auto main() -> int {
std::locale::global(std::locale {"ru_RU.utf-8"});
}
Or use xtd::translate::locale method.
The following example show how to change the locale to french (France).
auto main() -> int {
xtd::translate::locale("fr_FR");
}
The following example show how to change the locale to russian (Russia).
auto main() -> int {
xtd::translate::locale("ru_RU");
}
Change the application language without changing locale
To change the application language without changing locale use xtd::translate::language method.
The following example show how to change the language to french (France).
auto main() -> int {
xtd::translate::language("fr");
}
The following example show how to change the language to russian (Russia).
auto main() -> int {
xtd::translate::language("ru");
}
String format
The locale impact the format string as currency and date time see Format number, dates other types for more information.
Mark a string for translation
To mark a string for translation use xtd::translator::translate method or operator""_t literal operator.
The following example shows how to marks a string for translation with xtd::translator::translate method.
auto main() -> int {
auto str = translator::translate("This is a sor translation tring fexample.");
console::write_line(str);
}
The following example shows how to marks a string for translation with operator""_t literal operator.
auto main() -> int {
auto str = "This is a sor translation tring fexample."_t;
console::write_line(str);
}
Strings file format
The followng file example show the strings file format for translation
menu.strings :
# This file is used to translate menu items into French.
key "&File"
value "&Fichier"
key "&Edit"
value "&Editer"
key "&Vew"
value "&Vue"
key "&Window"
value "&Fenêtre"
key "&Help"
value "&Aide"
- Start comment with
#
- The string literal in the source faile starts with the keyword
key
and must be in double quotes"
. - The transated string starts with the keyword
value
and must be in double quotes"
.
The strings file, for each language, must be in a directory with the ISO code 639-1 as its name, possibly followed by the underscore _
and the two uppercase letters of the country code.
locale languages hierarchy
The languages directories should be located in the locale
folder, next to the src
folder containing your application sources.
String files have no fixed name. The name and number of chain files can be arbitrary, depending on how the project is organized.
The following example shows the hierarchy file for my_app
project.
my_app
|- locale
| |- en
| | |- messages.strings
| | |- menu_items.strings
| | |- texts.strings
| |- en_GB
| | |- messages.strings
| | |- menu_items.strings
| | |- texts.strings
| |- fr
| | |- messages.strings
| | |- menu_items.strings
| | |- texts.strings
| |- fr_CH
| | |- messages.strings
| | |- menu_items.strings
| | |- texts.strings
| |- ru
| |- messages.strings
| |- menu_items.strings
| |- texts.strings
|- src
| |- my_app.cpp
| |- my_app.h
|- CMakeLists.txt
Example
English : en
English (Australia) : en_AU
French : fr
French (Switzerland) : fr_CH
See also