---
title: Locale IDs
description: List of Apptonomy platform locale IDs plus explanation of approach.
---

Apptonomy uses its own version of locale IDs. If you're curious about why that is, check the [why section](#why) 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?

1. [ISO 639](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) provides only language, not regional indication.
2. [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes) provides only country and region codes.
3. [ISO 15924](https://en.wikipedia.org/wiki/ISO_15924) provides four-letter writing system codes.
4. [App Store Connect](https://developer.apple.com/documentation/appstoreconnectapi/managing-metadata-in-your-app-by-using-locale-shortcodes) 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.
5. [Google Play Console](https://support.google.com/googleplay/android-developer/table/4419860?hl=en) 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 `fil` for [Filipino](https://en.wikipedia.org/wiki/Filipino_language).

For Apptonomy we had the following requirements:

1. The code must be usable on URLs and in databases directly, without encoding.
2. The code must have same-casing throughout.
3. The code must capture language + region.
4. The code must be directly mappable to both App Store and Google Play locale IDs with minimal external knowledge required.
5. 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.
