Locale IDs
Apptonomy uses its own version of locale IDs. If you’re curious about why that is, check the why section at the bottom of the page.
ID Table
| Name | Platform ID | App Store ID | Google Play ID |
|---|---|---|---|
| Afrikaans | af | Not Supported | af |
| Albanian | sq | Not Supported | sq |
| Amharic | am | Not Supported | am |
| Arabic | ar_sa | ar-SA | ar |
| Armenian | hy_am | Not Supported | hy-AM |
| Azerbaijani | az_az | Not Supported | az-AZ |
| Bangla | bn_bd | Not Supported | bn-BD |
| Basque | eu_es | Not Supported | eu-ES |
| Belarusian | be | Not Supported | be |
| Bulgarian | bg | Not Supported | bg |
| Burmese | my_mm | Not Supported | my-MM |
| Catalan | ca | ca | ca |
| Chinese (Hong Kong) | zh_hk | Not Supported | zh-HK |
| Chinese (Simplified) | zh_cn | zh-Hans | zh-CN |
| Chinese (Traditional) | zh_tw | zh-Hant | zh-TW |
| Croatian | hr | hr | hr |
| Czech | cs_cz | cs | cs-CZ |
| Danish | da_dk | da | da-DK |
| Dutch | nl_nl | nl-NL | nl-NL |
| English (Australia) | en_au | en-AU | en-AU |
| English (Canada) | en_ca | en-CA | en-CA |
| English (India) | en_in | Not Supported | en-IN |
| English (S. Africa) | en_za | Not Supported | en-ZA |
| English (Singapore) | en_sg | Not Supported | en-SG |
| English (U.K.) | en_gb | en-GB | en-GB |
| English (U.S.) | en_us | en-US | en-US |
| Estonian | et | Not Supported | et |
| Filipino | fil | Not Supported | fil |
| Finnish | fi_fi | fi | fi-FI |
| French (Canada) | fr_ca | fr-CA | fr-CA |
| French (France) | fr_fr | fr-FR | fr-FR |
| Galician | gl_es | Not Supported | gl-ES |
| Georgian | ka_ge | Not Supported | ka-GE |
| German | de_de | de-DE | de-DE |
| Greek | el_gr | el | el-GR |
| Gujarati | gu | Not Supported | gu |
| Hebrew | iw_il | he | iw-IL |
| Hindi | hi_in | hi | hi-IN |
| Hungarian | hu_hu | hu | hu-HU |
| Icelandic | is_is | Not Supported | is-IS |
| Indonesian | id | id | id |
| Italian | it_it | it | it-IT |
| Japanese | ja_jp | ja | ja-JP |
| Kannada | kn_in | Not Supported | kn-IN |
| Kazakh | kk | Not Supported | kk |
| Khmer | km_kh | Not Supported | km-KH |
| Korean | ko_kr | ko | ko-KR |
| Kyrgyz | ky_kg | Not Supported | ky-KG |
| Lao | lo_la | Not Supported | lo-LA |
| Latvian | lv | Not Supported | lv |
| Lithuanian | lt | Not Supported | lt |
| Macedonian | mk_mk | Not Supported | mk-MK |
| Malay | ms | ms | ms |
| Malay (Malaysia) | ms_my | Not Supported | ms-MY |
| Malayalam | ml_in | Not Supported | ml-IN |
| Marathi | mr_in | Not Supported | mr-IN |
| Mongolian | mn_mn | Not Supported | mn-MN |
| Nepali | ne_np | Not Supported | ne-NP |
| Norwegian | no_no | no | no-NO |
| Persian | fa | Not Supported | fa |
| Persian | fa_ae | Not Supported | fa-AE |
| Persian | fa_af | Not Supported | fa-AF |
| Persian | fa_ir | Not Supported | fa-IR |
| Polish | pl_pl | pl | pl-PL |
| Portuguese (Brazil) | pt_br | pt-BR | pt-BR |
| Portuguese (Portugal) | pt_pt | pt-PT | pt-PT |
| Punjabi | pa | Not Supported | pa |
| Romanian | ro | ro | ro |
| Romansh | rm | Not Supported | rm |
| Russian | ru_ru | ru | ru-RU |
| Serbian | sr | Not Supported | sr |
| Sinhala | si_lk | Not Supported | si-LK |
| Slovak | sk | sk | sk |
| Slovenian | sl | Not Supported | sl |
| Spanish (Latin America) | es_419 | es-MX | es-419 |
| Spanish (Spain) | es_es | es-ES | es-ES |
| Spanish US | es_us | Not Supported | es-US |
| Swahili | sw | Not Supported | sw |
| Swedish | sv_se | sv | sv-SE |
| Tamil | ta_in | Not Supported | ta-IN |
| Telugu | te_in | Not Supported | te-IN |
| Thai | th | th | th |
| Turkish | tr_tr | tr | tr-TR |
| Ukrainian | uk | uk | uk |
| Urdu | ur | Not Supported | ur |
| Vietnamese | vi | vi | vi |
| Zulu | zu | Not Supported | zu |
Why?
- ISO 639 provides only language, not regional indication.
- ISO 3166 provides only country and region codes.
- ISO 15924 provides four-letter writing system codes.
- App Store Connect uses case sensitive locale indicators with an ISO639 code plus an optional ISO3166 or ISO15924 code. A dash is used when the optional extension is present.
- Google Play Console uses case sensitive locale indicators with an ISO639 code plus an optional ISO3166 code. A dash is used when the optional extension is present. Additionally Google Play uses a three letter
filfor Filipino.
For Apptonomy we had the following requirements:
- The code must be usable on URLs and in databases directly, without encoding.
- The code must have same-casing throughout.
- The code must capture language + region.
- The code must be directly mappable to both App Store and Google Play locale IDs with minimal external knowledge required.
- The code must not lose any language-region precision compared to App Store & Google Play locale IDs.
So we settled on lowercase ISO639 language code underscore lowercase ISO3166 country/region code.
This format still requires some external knowledge to convert into App Store and Google Play codes (e.g. for Chinese) but generally satisfies the requirements.