List of All Locales and Their Short Codes?
Asked Answered
T

10

359

I'm looking for a list of all locales and their short codes for a PHP application I am writing. Is there much variation in this data between platforms?

Also, if I am developing an international application, can I just support one version of English or are there significant differences in English across the world?

Tho answered 7/7, 2010 at 3:19 Comment(8)
There's significant formatting differences, esp. for date & time, in the English varients. Also many differences in spelling and occasionally terminology, esp. between GB & US.Elanaeland
Having a whole list is of no use. You can use only those locales that are installed on the system. Find out what locales are installed. Use locale -a command on Linux.Reckon
Related: https://mcmap.net/q/37351/-where-can-i-find-a-list-of-language-region-codesCitrine
The two principle variants of en to use are en_US and en_GB, with the main differences being that the latter generally uses ise instead of the former's ize, and the original French spellings of words like metre, instead of meter, and do not use phonetic contractions, by using sulphur instead of sulphur. en_GB will usually cover the spelling conventions used in former colonies that haven't been culturally dominated by the US, like en_AU and en_NZ. See tysto.com/uk-us-spelling-list.html.Viper
Unless really required to cater for local preferences, because your particular audience tends to actively resist 'foreign' spellings, or you are catering to the world, and your users know it, using en_US as a sole en locale will not ruffle too many feathers.Viper
science.co.il/language/Locale-codes.phpAdulterine
Does this answer your question? Is there a way to get the list of available locales in PHP?Grafting
Rather then country-specific English, consider en-001 (World) and en-150 (Europe). The difference between them is that the latter uses European number formats (, instead of . as the decimal separator). Hopefully, browser makers will internationalise their English dictionaries to accept all the spelling variants. For the moment, using en-001 requires a lot of dictionary additions to allow GB|AU|NZ+ spellings.Viper
S
393

The importance of locales is that your environment/os can provide formatting functionality for all installed locales even if you don't know about them when you write your application. My Windows 7 system has 211 locales installed (listed below), so you wouldn't likely write any custom code or translation specific to this many locales.

Edit: The original list of locales has been edited to add additional locales that were not included before. Now 228 listed.

The most important thing for various versions of English is in formatting numbers and dates. Other differences are significant to the extent that you want and able to cater to specific variations.

af-ZA
am-ET
ar-AE
ar-BH
ar-DZ
ar-EG
ar-IQ
ar-JO
ar-KW
ar-LB
ar-LY
ar-MA
arn-CL
ar-OM
ar-QA
ar-SA
ar-SD
ar-SY
ar-TN
ar-YE
as-IN
az-az
az-Cyrl-AZ
az-Latn-AZ
ba-RU
be-BY
bg-BG
bn-BD
bn-IN
bo-CN
br-FR
bs-Cyrl-BA
bs-Latn-BA
ca-ES
co-FR
cs-CZ
cy-GB
da-DK
de-AT
de-CH
de-DE
de-LI
de-LU
dsb-DE
dv-MV
el-CY
el-GR
en-029
en-AU
en-BZ
en-CA
en-cb
en-GB
en-IE
en-IN
en-JM
en-MT
en-MY
en-NZ
en-PH
en-SG
en-TT
en-US
en-ZA
en-ZW
es-AR
es-BO
es-CL
es-CO
es-CR
es-DO
es-EC
es-ES
es-GT
es-HN
es-MX
es-NI
es-PA
es-PE
es-PR
es-PY
es-SV
es-US
es-UY
es-VE
et-EE
eu-ES
fa-IR
fi-FI
fil-PH
fo-FO
fr-BE
fr-CA
fr-CH
fr-FR
fr-LU
fr-MC
fy-NL
ga-IE
gd-GB
gd-ie
gl-ES
gsw-FR
gu-IN
ha-Latn-NG
he-IL
hi-IN
hr-BA
hr-HR
hsb-DE
hu-HU
hy-AM
id-ID
ig-NG
ii-CN
in-ID
is-IS
it-CH
it-IT
iu-Cans-CA
iu-Latn-CA
iw-IL
ja-JP
ka-GE
kk-KZ
kl-GL
km-KH
kn-IN
kok-IN
ko-KR
ky-KG
lb-LU
lo-LA
lt-LT
lv-LV
mi-NZ
mk-MK
ml-IN
mn-MN
mn-Mong-CN
moh-CA
mr-IN
ms-BN
ms-MY
mt-MT
nb-NO
ne-NP
nl-BE
nl-NL
nn-NO
no-no
nso-ZA
oc-FR
or-IN
pa-IN
pl-PL
prs-AF
ps-AF
pt-BR
pt-PT
qut-GT
quz-BO
quz-EC
quz-PE
rm-CH
ro-mo
ro-RO
ru-mo
ru-RU
rw-RW
sah-RU
sa-IN
se-FI
se-NO
se-SE
si-LK
sk-SK
sl-SI
sma-NO
sma-SE
smj-NO
smj-SE
smn-FI
sms-FI
sq-AL
sr-BA
sr-CS
sr-Cyrl-BA
sr-Cyrl-CS
sr-Cyrl-ME
sr-Cyrl-RS
sr-Latn-BA
sr-Latn-CS
sr-Latn-ME
sr-Latn-RS
sr-ME
sr-RS
sr-sp
sv-FI
sv-SE
sw-KE
syr-SY
ta-IN
te-IN
tg-Cyrl-TJ
th-TH
tk-TM
tlh-QS
tn-ZA
tr-TR
tt-RU
tzm-Latn-DZ
ug-CN
uk-UA
ur-PK
uz-Cyrl-UZ
uz-Latn-UZ
uz-uz
vi-VN
wo-SN
xh-ZA
yo-NG
zh-CN
zh-HK
zh-MO
zh-SG
zh-TW
zu-ZA
Scull answered 7/7, 2010 at 3:37 Comment(7)
These are best handled by using MessageFormatter::formatMessage, or its one-off, msgfmt_format_message, as in msgfmt_format_message('ar-ye', '{0,date,medium}', array('2017-01-27)), which will produce ٢٧‏/٠١‏/٢٠١٧. For times, where using values stored as UTC, it is probably better to use the IntlDateFormatter class, as you can put in a timezone to show the local time in the language.Viper
For anyone else wondering what en-029 is, it's English (Caribbean): #7192910Coopt
tlh-AQ Klingon-speakers in Antarctica, reprezent!Dzerzhinsk
@Mentalist, thank you for pointing out the omission!! I'll gladly edit and add it but can you provide an official link to confirm the full code, tlh-AQ? I was able to validate tlh but didnt' see anything referencing the AQ part. I only looked briefly.Scull
I linked a reference to AQ in my comment. But I don't know how useful it would be to include every possible combination. I was just pointing out that there are many obscure lang+region combinations that can be created, beyond the pairings we typically see.Dzerzhinsk
@Dzerzhinsk oic. Yes, any language+region combination could be created, but only those that actually have different regional dialects make sense? ja-JP vs ja-US would not make sense since US does not have a regional Japanese variant. For Klingon I'm only aware of one region, Qo'noS (QS)? I updated the list above. That said, there are a lot of very obscure and constructed languages not included in the above list.Scull
Reference for QS to Qo'nos. en.wikipedia.org/wiki/ISO_3166-1_alpha-2#QSScull
S
265

The accepted answer misses some rather significant locales. For example, the Chinese locales don't distinguish between the different scriptures (simplified han, traditional han). What's a main-land Chinese citizen who wants traditional han supposed to use - the Hong Kong setting?

I've taken this list of iOS locales, removed the strange POSIX entry, formatted it as Javascript and sorted it by value (so if you use an ordered object implementation and create a list by going through the keys and returning the value, it will show the human readable text in correct order). Also, this list both contains a main entry per language as well as all the region specific variants - this way you always have a designated fallback option, say if your interface has only defined the 'en' option - you wouldn't otherwise know on what to fall back on reliably.

var LANGUAGE_BY_LOCALE = {
    af_NA: "Afrikaans (Namibia)",
    af_ZA: "Afrikaans (South Africa)",
    af: "Afrikaans",
    ak_GH: "Akan (Ghana)",
    ak: "Akan",
    sq_AL: "Albanian (Albania)",
    sq: "Albanian",
    am_ET: "Amharic (Ethiopia)",
    am: "Amharic",
    ar_DZ: "Arabic (Algeria)",
    ar_BH: "Arabic (Bahrain)",
    ar_EG: "Arabic (Egypt)",
    ar_IQ: "Arabic (Iraq)",
    ar_JO: "Arabic (Jordan)",
    ar_KW: "Arabic (Kuwait)",
    ar_LB: "Arabic (Lebanon)",
    ar_LY: "Arabic (Libya)",
    ar_MA: "Arabic (Morocco)",
    ar_OM: "Arabic (Oman)",
    ar_QA: "Arabic (Qatar)",
    ar_SA: "Arabic (Saudi Arabia)",
    ar_SD: "Arabic (Sudan)",
    ar_SY: "Arabic (Syria)",
    ar_TN: "Arabic (Tunisia)",
    ar_AE: "Arabic (United Arab Emirates)",
    ar_YE: "Arabic (Yemen)",
    ar: "Arabic",
    hy_AM: "Armenian (Armenia)",
    hy: "Armenian",
    as_IN: "Assamese (India)",
    as: "Assamese",
    asa_TZ: "Asu (Tanzania)",
    asa: "Asu",
    az_Cyrl: "Azerbaijani (Cyrillic)",
    az_Cyrl_AZ: "Azerbaijani (Cyrillic, Azerbaijan)",
    az_Latn: "Azerbaijani (Latin)",
    az_Latn_AZ: "Azerbaijani (Latin, Azerbaijan)",
    az: "Azerbaijani",
    bm_ML: "Bambara (Mali)",
    bm: "Bambara",
    eu_ES: "Basque (Spain)",
    eu: "Basque",
    be_BY: "Belarusian (Belarus)",
    be: "Belarusian",
    bem_ZM: "Bemba (Zambia)",
    bem: "Bemba",
    bez_TZ: "Bena (Tanzania)",
    bez: "Bena",
    bn_BD: "Bengali (Bangladesh)",
    bn_IN: "Bengali (India)",
    bn: "Bengali",
    bs_BA: "Bosnian (Bosnia and Herzegovina)",
    bs: "Bosnian",
    bg_BG: "Bulgarian (Bulgaria)",
    bg: "Bulgarian",
    my_MM: "Burmese (Myanmar [Burma])",
    my: "Burmese",
    yue_Hant_HK: "Cantonese (Traditional, Hong Kong SAR China)",
    ca_ES: "Catalan (Spain)",
    ca: "Catalan",
    tzm_Latn: "Central Morocco Tamazight (Latin)",
    tzm_Latn_MA: "Central Morocco Tamazight (Latin, Morocco)",
    tzm: "Central Morocco Tamazight",
    chr_US: "Cherokee (United States)",
    chr: "Cherokee",
    cgg_UG: "Chiga (Uganda)",
    cgg: "Chiga",
    zh_Hans: "Chinese (Simplified Han)",
    zh_Hans_CN: "Chinese (Simplified Han, China)",
    zh_Hans_HK: "Chinese (Simplified Han, Hong Kong SAR China)",
    zh_Hans_MO: "Chinese (Simplified Han, Macau SAR China)",
    zh_Hans_SG: "Chinese (Simplified Han, Singapore)",
    zh_Hant: "Chinese (Traditional Han)",
    zh_Hant_HK: "Chinese (Traditional Han, Hong Kong SAR China)",
    zh_Hant_MO: "Chinese (Traditional Han, Macau SAR China)",
    zh_Hant_TW: "Chinese (Traditional Han, Taiwan)",
    zh: "Chinese",
    kw_GB: "Cornish (United Kingdom)",
    kw: "Cornish",
    hr_HR: "Croatian (Croatia)",
    hr: "Croatian",
    cs_CZ: "Czech (Czech Republic)",
    cs: "Czech",
    da_DK: "Danish (Denmark)",
    da: "Danish",
    nl_BE: "Dutch (Belgium)",
    nl_NL: "Dutch (Netherlands)",
    nl: "Dutch",
    ebu_KE: "Embu (Kenya)",
    ebu: "Embu",
    en_AS: "English (American Samoa)",
    en_AU: "English (Australia)",
    en_BE: "English (Belgium)",
    en_BZ: "English (Belize)",
    en_BW: "English (Botswana)",
    en_CA: "English (Canada)",
    en_GU: "English (Guam)",
    en_HK: "English (Hong Kong SAR China)",
    en_IN: "English (India)",
    en_IE: "English (Ireland)",
    en_IL: "English (Israel)",
    en_JM: "English (Jamaica)",
    en_MT: "English (Malta)",
    en_MH: "English (Marshall Islands)",
    en_MU: "English (Mauritius)",
    en_NA: "English (Namibia)",
    en_NZ: "English (New Zealand)",
    en_MP: "English (Northern Mariana Islands)",
    en_PK: "English (Pakistan)",
    en_PH: "English (Philippines)",
    en_SG: "English (Singapore)",
    en_ZA: "English (South Africa)",
    en_TT: "English (Trinidad and Tobago)",
    en_UM: "English (U.S. Minor Outlying Islands)",
    en_VI: "English (U.S. Virgin Islands)",
    en_GB: "English (United Kingdom)",
    en_US: "English (United States)",
    en_ZW: "English (Zimbabwe)",
    en: "English",
    eo: "Esperanto",
    et_EE: "Estonian (Estonia)",
    et: "Estonian",
    ee_GH: "Ewe (Ghana)",
    ee_TG: "Ewe (Togo)",
    ee: "Ewe",
    fo_FO: "Faroese (Faroe Islands)",
    fo: "Faroese",
    fil_PH: "Filipino (Philippines)",
    fil: "Filipino",
    fi_FI: "Finnish (Finland)",
    fi: "Finnish",
    fr_BE: "French (Belgium)",
    fr_BJ: "French (Benin)",
    fr_BF: "French (Burkina Faso)",
    fr_BI: "French (Burundi)",
    fr_CM: "French (Cameroon)",
    fr_CA: "French (Canada)",
    fr_CF: "French (Central African Republic)",
    fr_TD: "French (Chad)",
    fr_KM: "French (Comoros)",
    fr_CG: "French (Congo - Brazzaville)",
    fr_CD: "French (Congo - Kinshasa)",
    fr_CI: "French (Côte d’Ivoire)",
    fr_DJ: "French (Djibouti)",
    fr_GQ: "French (Equatorial Guinea)",
    fr_FR: "French (France)",
    fr_GA: "French (Gabon)",
    fr_GP: "French (Guadeloupe)",
    fr_GN: "French (Guinea)",
    fr_LU: "French (Luxembourg)",
    fr_MG: "French (Madagascar)",
    fr_ML: "French (Mali)",
    fr_MQ: "French (Martinique)",
    fr_MC: "French (Monaco)",
    fr_NE: "French (Niger)",
    fr_RW: "French (Rwanda)",
    fr_RE: "French (Réunion)",
    fr_BL: "French (Saint Barthélemy)",
    fr_MF: "French (Saint Martin)",
    fr_SN: "French (Senegal)",
    fr_CH: "French (Switzerland)",
    fr_TG: "French (Togo)",
    fr: "French",
    ff_SN: "Fulah (Senegal)",
    ff: "Fulah",
    gl_ES: "Galician (Spain)",
    gl: "Galician",
    lg_UG: "Ganda (Uganda)",
    lg: "Ganda",
    ka_GE: "Georgian (Georgia)",
    ka: "Georgian",
    de_AT: "German (Austria)",
    de_BE: "German (Belgium)",
    de_DE: "German (Germany)",
    de_LI: "German (Liechtenstein)",
    de_LU: "German (Luxembourg)",
    de_CH: "German (Switzerland)",
    de: "German",
    el_CY: "Greek (Cyprus)",
    el_GR: "Greek (Greece)",
    el: "Greek",
    gu_IN: "Gujarati (India)",
    gu: "Gujarati",
    guz_KE: "Gusii (Kenya)",
    guz: "Gusii",
    ha_Latn: "Hausa (Latin)",
    ha_Latn_GH: "Hausa (Latin, Ghana)",
    ha_Latn_NE: "Hausa (Latin, Niger)",
    ha_Latn_NG: "Hausa (Latin, Nigeria)",
    ha: "Hausa",
    haw_US: "Hawaiian (United States)",
    haw: "Hawaiian",
    he_IL: "Hebrew (Israel)",
    he: "Hebrew",
    hi_IN: "Hindi (India)",
    hi: "Hindi",
    hu_HU: "Hungarian (Hungary)",
    hu: "Hungarian",
    is_IS: "Icelandic (Iceland)",
    is: "Icelandic",
    ig_NG: "Igbo (Nigeria)",
    ig: "Igbo",
    id_ID: "Indonesian (Indonesia)",
    id: "Indonesian",
    ga_IE: "Irish (Ireland)",
    ga: "Irish",
    it_IT: "Italian (Italy)",
    it_CH: "Italian (Switzerland)",
    it: "Italian",
    ja_JP: "Japanese (Japan)",
    ja: "Japanese",
    kea_CV: "Kabuverdianu (Cape Verde)",
    kea: "Kabuverdianu",
    kab_DZ: "Kabyle (Algeria)",
    kab: "Kabyle",
    kl_GL: "Kalaallisut (Greenland)",
    kl: "Kalaallisut",
    kln_KE: "Kalenjin (Kenya)",
    kln: "Kalenjin",
    kam_KE: "Kamba (Kenya)",
    kam: "Kamba",
    kn_IN: "Kannada (India)",
    kn: "Kannada",
    kk_Cyrl: "Kazakh (Cyrillic)",
    kk_Cyrl_KZ: "Kazakh (Cyrillic, Kazakhstan)",
    kk: "Kazakh",
    km_KH: "Khmer (Cambodia)",
    km: "Khmer",
    ki_KE: "Kikuyu (Kenya)",
    ki: "Kikuyu",
    rw_RW: "Kinyarwanda (Rwanda)",
    rw: "Kinyarwanda",
    kok_IN: "Konkani (India)",
    kok: "Konkani",
    ko_KR: "Korean (South Korea)",
    ko: "Korean",
    khq_ML: "Koyra Chiini (Mali)",
    khq: "Koyra Chiini",
    ses_ML: "Koyraboro Senni (Mali)",
    ses: "Koyraboro Senni",
    lag_TZ: "Langi (Tanzania)",
    lag: "Langi",
    lv_LV: "Latvian (Latvia)",
    lv: "Latvian",
    lt_LT: "Lithuanian (Lithuania)",
    lt: "Lithuanian",
    luo_KE: "Luo (Kenya)",
    luo: "Luo",
    luy_KE: "Luyia (Kenya)",
    luy: "Luyia",
    mk_MK: "Macedonian (Macedonia)",
    mk: "Macedonian",
    jmc_TZ: "Machame (Tanzania)",
    jmc: "Machame",
    kde_TZ: "Makonde (Tanzania)",
    kde: "Makonde",
    mg_MG: "Malagasy (Madagascar)",
    mg: "Malagasy",
    ms_BN: "Malay (Brunei)",
    ms_MY: "Malay (Malaysia)",
    ms: "Malay",
    ml_IN: "Malayalam (India)",
    ml: "Malayalam",
    mt_MT: "Maltese (Malta)",
    mt: "Maltese",
    gv_GB: "Manx (United Kingdom)",
    gv: "Manx",
    mr_IN: "Marathi (India)",
    mr: "Marathi",
    mas_KE: "Masai (Kenya)",
    mas_TZ: "Masai (Tanzania)",
    mas: "Masai",
    mer_KE: "Meru (Kenya)",
    mer: "Meru",
    mfe_MU: "Morisyen (Mauritius)",
    mfe: "Morisyen",
    naq_NA: "Nama (Namibia)",
    naq: "Nama",
    ne_IN: "Nepali (India)",
    ne_NP: "Nepali (Nepal)",
    ne: "Nepali",
    nd_ZW: "North Ndebele (Zimbabwe)",
    nd: "North Ndebele",
    nb_NO: "Norwegian Bokmål (Norway)",
    nb: "Norwegian Bokmål",
    nn_NO: "Norwegian Nynorsk (Norway)",
    nn: "Norwegian Nynorsk",
    nyn_UG: "Nyankole (Uganda)",
    nyn: "Nyankole",
    or_IN: "Oriya (India)",
    or: "Oriya",
    om_ET: "Oromo (Ethiopia)",
    om_KE: "Oromo (Kenya)",
    om: "Oromo",
    ps_AF: "Pashto (Afghanistan)",
    ps: "Pashto",
    fa_AF: "Persian (Afghanistan)",
    fa_IR: "Persian (Iran)",
    fa: "Persian",
    pl_PL: "Polish (Poland)",
    pl: "Polish",
    pt_BR: "Portuguese (Brazil)",
    pt_GW: "Portuguese (Guinea-Bissau)",
    pt_MZ: "Portuguese (Mozambique)",
    pt_PT: "Portuguese (Portugal)",
    pt: "Portuguese",
    pa_Arab: "Punjabi (Arabic)",
    pa_Arab_PK: "Punjabi (Arabic, Pakistan)",
    pa_Guru: "Punjabi (Gurmukhi)",
    pa_Guru_IN: "Punjabi (Gurmukhi, India)",
    pa: "Punjabi",
    ro_MD: "Romanian (Moldova)",
    ro_RO: "Romanian (Romania)",
    ro: "Romanian",
    rm_CH: "Romansh (Switzerland)",
    rm: "Romansh",
    rof_TZ: "Rombo (Tanzania)",
    rof: "Rombo",
    ru_MD: "Russian (Moldova)",
    ru_RU: "Russian (Russia)",
    ru_UA: "Russian (Ukraine)",
    ru: "Russian",
    rwk_TZ: "Rwa (Tanzania)",
    rwk: "Rwa",
    saq_KE: "Samburu (Kenya)",
    saq: "Samburu",
    sg_CF: "Sango (Central African Republic)",
    sg: "Sango",
    seh_MZ: "Sena (Mozambique)",
    seh: "Sena",
    sr_Cyrl: "Serbian (Cyrillic)",
    sr_Cyrl_BA: "Serbian (Cyrillic, Bosnia and Herzegovina)",
    sr_Cyrl_ME: "Serbian (Cyrillic, Montenegro)",
    sr_Cyrl_RS: "Serbian (Cyrillic, Serbia)",
    sr_Latn: "Serbian (Latin)",
    sr_Latn_BA: "Serbian (Latin, Bosnia and Herzegovina)",
    sr_Latn_ME: "Serbian (Latin, Montenegro)",
    sr_Latn_RS: "Serbian (Latin, Serbia)",
    sr: "Serbian",
    sn_ZW: "Shona (Zimbabwe)",
    sn: "Shona",
    ii_CN: "Sichuan Yi (China)",
    ii: "Sichuan Yi",
    si_LK: "Sinhala (Sri Lanka)",
    si: "Sinhala",
    sk_SK: "Slovak (Slovakia)",
    sk: "Slovak",
    sl_SI: "Slovenian (Slovenia)",
    sl: "Slovenian",
    xog_UG: "Soga (Uganda)",
    xog: "Soga",
    so_DJ: "Somali (Djibouti)",
    so_ET: "Somali (Ethiopia)",
    so_KE: "Somali (Kenya)",
    so_SO: "Somali (Somalia)",
    so: "Somali",
    es_AR: "Spanish (Argentina)",
    es_BO: "Spanish (Bolivia)",
    es_CL: "Spanish (Chile)",
    es_CO: "Spanish (Colombia)",
    es_CR: "Spanish (Costa Rica)",
    es_DO: "Spanish (Dominican Republic)",
    es_EC: "Spanish (Ecuador)",
    es_SV: "Spanish (El Salvador)",
    es_GQ: "Spanish (Equatorial Guinea)",
    es_GT: "Spanish (Guatemala)",
    es_HN: "Spanish (Honduras)",
    es_419: "Spanish (Latin America)",
    es_MX: "Spanish (Mexico)",
    es_NI: "Spanish (Nicaragua)",
    es_PA: "Spanish (Panama)",
    es_PY: "Spanish (Paraguay)",
    es_PE: "Spanish (Peru)",
    es_PR: "Spanish (Puerto Rico)",
    es_ES: "Spanish (Spain)",
    es_US: "Spanish (United States)",
    es_UY: "Spanish (Uruguay)",
    es_VE: "Spanish (Venezuela)",
    es: "Spanish",
    sw_KE: "Swahili (Kenya)",
    sw_TZ: "Swahili (Tanzania)",
    sw: "Swahili",
    sv_FI: "Swedish (Finland)",
    sv_SE: "Swedish (Sweden)",
    sv: "Swedish",
    gsw_CH: "Swiss German (Switzerland)",
    gsw: "Swiss German",
    shi_Latn: "Tachelhit (Latin)",
    shi_Latn_MA: "Tachelhit (Latin, Morocco)",
    shi_Tfng: "Tachelhit (Tifinagh)",
    shi_Tfng_MA: "Tachelhit (Tifinagh, Morocco)",
    shi: "Tachelhit",
    dav_KE: "Taita (Kenya)",
    dav: "Taita",
    ta_IN: "Tamil (India)",
    ta_LK: "Tamil (Sri Lanka)",
    ta: "Tamil",
    te_IN: "Telugu (India)",
    te: "Telugu",
    teo_KE: "Teso (Kenya)",
    teo_UG: "Teso (Uganda)",
    teo: "Teso",
    th_TH: "Thai (Thailand)",
    th: "Thai",
    bo_CN: "Tibetan (China)",
    bo_IN: "Tibetan (India)",
    bo: "Tibetan",
    ti_ER: "Tigrinya (Eritrea)",
    ti_ET: "Tigrinya (Ethiopia)",
    ti: "Tigrinya",
    to_TO: "Tonga (Tonga)",
    to: "Tonga",
    tr_TR: "Turkish (Turkey)",
    tr: "Turkish",
    uk_UA: "Ukrainian (Ukraine)",
    uk: "Ukrainian",
    ur_IN: "Urdu (India)",
    ur_PK: "Urdu (Pakistan)",
    ur: "Urdu",
    uz_Arab: "Uzbek (Arabic)",
    uz_Arab_AF: "Uzbek (Arabic, Afghanistan)",
    uz_Cyrl: "Uzbek (Cyrillic)",
    uz_Cyrl_UZ: "Uzbek (Cyrillic, Uzbekistan)",
    uz_Latn: "Uzbek (Latin)",
    uz_Latn_UZ: "Uzbek (Latin, Uzbekistan)",
    uz: "Uzbek",
    vi_VN: "Vietnamese (Vietnam)",
    vi: "Vietnamese",
    vun_TZ: "Vunjo (Tanzania)",
    vun: "Vunjo",
    cy_GB: "Welsh (United Kingdom)",
    cy: "Welsh",
    yo_NG: "Yoruba (Nigeria)",
    yo: "Yoruba",
    zu_ZA: "Zulu (South Africa)",
    zu: "Zulu"
}
Saddletree answered 6/2, 2015 at 2:59 Comment(6)
POSIX is a locale, exactly equivalent to "C" on POSIX systems and Linux.Chiropractic
I just found it doesn't make any sense if you expose this list to users.Misti
Hong Kong actually has variations for both zh-hans-hk and zh-hant-hk. The PHP intl set of objects will tolerate specifying locales as lower-case and dashes, as well as accepting the lang_COUNTRY styles.Viper
If serious about internationalisation in PHP, only use the intl classes for all your efforts, including timezones and locales, as they are built on the CLDR database, and updated with each PHP version. The other PHP functions may be built on isolated datasets that don't have the synchronisation effort that has gone into the comprehensive CLDR dataset, so some of those other functions might give some discrepancies from the CLDR ones, especially as international efforts standardise more on CLDR. You may have to use some of those other functions as a fall-back if catering for pre 5.6.Viper
An incentive to use PHP v7, with all the latest intl classes, is that it will serve your pages in half the time.Viper
To complete @Viper comment, see https://mcmap.net/q/37352/-is-there-a-way-to-get-the-list-of-available-locales-in-php on how to get a complete, up-to-date, list of languages from php-intl.Grafting
G
48

From http://www.w3.org/International/articles/language-tags/

"Language tag syntax is defined by the IETF's BCP 47. BCP stands for 'Best Current Practice', and is a persistent name for a series of RFCs whose numbers change as they are updated. The latest RFC describing language tag syntax is RFC 5646, Tags for the Identification of Languages, and it obsoletes the older RFCs 4646, 3066 and 1766.

You used to find subtags by consulting the lists of codes in various ISO standards, but now you can find all subtags in the IANA Language Subtag Registry."

AFAIK most locale-aware applications (that are written by professionals) abide by this standard. It isn't just something somebody threw together and that different people interpret differently.

I'd strongly suggest you investigate the internationalization features of your particular development language, as you'll probably end up reinventing the wheel if you don't.

Goodrum answered 7/7, 2010 at 3:37 Comment(1)
This answer should be marked as accepted due to recommended by standards as current best practice .Directly
W
47

While accepted answer is pretty complete (I used myself in similar question that arised to me), I think it is worth to put the whole supported language codes and variations, as well as encodings, and point user to a file which is present in almost any linux distributions, in case he simply wants a quicker answer and no internet for example.

This is the file /usr/share/i18n/SUPPORTED and its contents:

aa_DJ.UTF-8 UTF-8
aa_DJ ISO-8859-1
aa_ER UTF-8
aa_ER@saaho UTF-8
aa_ET UTF-8
af_ZA.UTF-8 UTF-8
af_ZA ISO-8859-1
am_ET UTF-8
an_ES.UTF-8 UTF-8
an_ES ISO-8859-15
ar_AE.UTF-8 UTF-8
ar_AE ISO-8859-6
ar_BH.UTF-8 UTF-8
ar_BH ISO-8859-6
ar_DZ.UTF-8 UTF-8
ar_DZ ISO-8859-6
ar_EG.UTF-8 UTF-8
ar_EG ISO-8859-6
ar_IN UTF-8
ar_IQ.UTF-8 UTF-8
ar_IQ ISO-8859-6
ar_JO.UTF-8 UTF-8
ar_JO ISO-8859-6
ar_KW.UTF-8 UTF-8
ar_KW ISO-8859-6
ar_LB.UTF-8 UTF-8
ar_LB ISO-8859-6
ar_LY.UTF-8 UTF-8
ar_LY ISO-8859-6
ar_MA.UTF-8 UTF-8
ar_MA ISO-8859-6
ar_OM.UTF-8 UTF-8
ar_OM ISO-8859-6
ar_QA.UTF-8 UTF-8
ar_QA ISO-8859-6
ar_SA.UTF-8 UTF-8
ar_SA ISO-8859-6
ar_SD.UTF-8 UTF-8
ar_SD ISO-8859-6
ar_SY.UTF-8 UTF-8
ar_SY ISO-8859-6
ar_TN.UTF-8 UTF-8
ar_TN ISO-8859-6
ar_YE.UTF-8 UTF-8
ar_YE ISO-8859-6
az_AZ UTF-8
as_IN UTF-8
ast_ES.UTF-8 UTF-8
ast_ES ISO-8859-15
be_BY.UTF-8 UTF-8
be_BY CP1251
be_BY@latin UTF-8
bem_ZM UTF-8
ber_DZ UTF-8
ber_MA UTF-8
bg_BG.UTF-8 UTF-8
bg_BG CP1251
bho_IN UTF-8
bn_BD UTF-8
bn_IN UTF-8
bo_CN UTF-8
bo_IN UTF-8
br_FR.UTF-8 UTF-8
br_FR ISO-8859-1
br_FR@euro ISO-8859-15
brx_IN UTF-8
bs_BA.UTF-8 UTF-8
bs_BA ISO-8859-2
byn_ER UTF-8
ca_AD.UTF-8 UTF-8
ca_AD ISO-8859-15
ca_ES.UTF-8 UTF-8
ca_ES ISO-8859-1
ca_ES@euro ISO-8859-15
ca_FR.UTF-8 UTF-8
ca_FR ISO-8859-15
ca_IT.UTF-8 UTF-8
ca_IT ISO-8859-15
crh_UA UTF-8
cs_CZ.UTF-8 UTF-8
cs_CZ ISO-8859-2
csb_PL UTF-8
cv_RU UTF-8
cy_GB.UTF-8 UTF-8
cy_GB ISO-8859-14
da_DK.UTF-8 UTF-8
da_DK ISO-8859-1
de_AT.UTF-8 UTF-8
de_AT ISO-8859-1
de_AT@euro ISO-8859-15
de_BE.UTF-8 UTF-8
de_BE ISO-8859-1
de_BE@euro ISO-8859-15
de_CH.UTF-8 UTF-8
de_CH ISO-8859-1
de_DE.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15
de_LU.UTF-8 UTF-8
de_LU ISO-8859-1
de_LU@euro ISO-8859-15
dv_MV UTF-8
dz_BT UTF-8
el_GR.UTF-8 UTF-8
el_GR ISO-8859-7
el_CY.UTF-8 UTF-8
el_CY ISO-8859-7
en_AG UTF-8
en_AU.UTF-8 UTF-8
en_AU ISO-8859-1
en_BW.UTF-8 UTF-8
en_BW ISO-8859-1
en_CA.UTF-8 UTF-8
en_CA ISO-8859-1
en_DK.UTF-8 UTF-8
en_DK ISO-8859-1
en_GB.UTF-8 UTF-8
en_GB ISO-8859-1
en_HK.UTF-8 UTF-8
en_HK ISO-8859-1
en_IE.UTF-8 UTF-8
en_IE ISO-8859-1
en_IE@euro ISO-8859-15
en_IN UTF-8
en_NG UTF-8
en_NZ.UTF-8 UTF-8
en_NZ ISO-8859-1
en_PH.UTF-8 UTF-8
en_PH ISO-8859-1
en_SG.UTF-8 UTF-8
en_SG ISO-8859-1
en_US.UTF-8 UTF-8
en_US ISO-8859-1
en_ZA.UTF-8 UTF-8
en_ZA ISO-8859-1
en_ZM UTF-8
en_ZW.UTF-8 UTF-8
en_ZW ISO-8859-1
es_AR.UTF-8 UTF-8
es_AR ISO-8859-1
es_BO.UTF-8 UTF-8
es_BO ISO-8859-1
es_CL.UTF-8 UTF-8
es_CL ISO-8859-1
es_CO.UTF-8 UTF-8
es_CO ISO-8859-1
es_CR.UTF-8 UTF-8
es_CR ISO-8859-1
es_CU UTF-8
es_DO.UTF-8 UTF-8
es_DO ISO-8859-1
es_EC.UTF-8 UTF-8
es_EC ISO-8859-1
es_ES.UTF-8 UTF-8
es_ES ISO-8859-1
es_ES@euro ISO-8859-15
es_GT.UTF-8 UTF-8
es_GT ISO-8859-1
es_HN.UTF-8 UTF-8
es_HN ISO-8859-1
es_MX.UTF-8 UTF-8
es_MX ISO-8859-1
es_NI.UTF-8 UTF-8
es_NI ISO-8859-1
es_PA.UTF-8 UTF-8
es_PA ISO-8859-1
es_PE.UTF-8 UTF-8
es_PE ISO-8859-1
es_PR.UTF-8 UTF-8
es_PR ISO-8859-1
es_PY.UTF-8 UTF-8
es_PY ISO-8859-1
es_SV.UTF-8 UTF-8
es_SV ISO-8859-1
es_US.UTF-8 UTF-8
es_US ISO-8859-1
es_UY.UTF-8 UTF-8
es_UY ISO-8859-1
es_VE.UTF-8 UTF-8
es_VE ISO-8859-1
et_EE.UTF-8 UTF-8
et_EE ISO-8859-1
et_EE.ISO-8859-15 ISO-8859-15
eu_ES.UTF-8 UTF-8
eu_ES ISO-8859-1
eu_ES@euro ISO-8859-15
fa_IR UTF-8
ff_SN UTF-8
fi_FI.UTF-8 UTF-8
fi_FI ISO-8859-1
fi_FI@euro ISO-8859-15
fil_PH UTF-8
fo_FO.UTF-8 UTF-8
fo_FO ISO-8859-1
fr_BE.UTF-8 UTF-8
fr_BE ISO-8859-1
fr_BE@euro ISO-8859-15
fr_CA.UTF-8 UTF-8
fr_CA ISO-8859-1
fr_CH.UTF-8 UTF-8
fr_CH ISO-8859-1
fr_FR.UTF-8 UTF-8
fr_FR ISO-8859-1
fr_FR@euro ISO-8859-15
fr_LU.UTF-8 UTF-8
fr_LU ISO-8859-1
fr_LU@euro ISO-8859-15
fur_IT UTF-8
fy_NL UTF-8
fy_DE UTF-8
ga_IE.UTF-8 UTF-8
ga_IE ISO-8859-1
ga_IE@euro ISO-8859-15
gd_GB.UTF-8 UTF-8
gd_GB ISO-8859-15
gez_ER UTF-8
gez_ER@abegede UTF-8
gez_ET UTF-8
gez_ET@abegede UTF-8
gl_ES.UTF-8 UTF-8
gl_ES ISO-8859-1
gl_ES@euro ISO-8859-15
gu_IN UTF-8
gv_GB.UTF-8 UTF-8
gv_GB ISO-8859-1
ha_NG UTF-8
he_IL.UTF-8 UTF-8
he_IL ISO-8859-8
hi_IN UTF-8
hne_IN UTF-8
hr_HR.UTF-8 UTF-8
hr_HR ISO-8859-2
hsb_DE ISO-8859-2
hsb_DE.UTF-8 UTF-8
ht_HT UTF-8
hu_HU.UTF-8 UTF-8
hu_HU ISO-8859-2
hy_AM UTF-8
hy_AM.ARMSCII-8 ARMSCII-8
id_ID.UTF-8 UTF-8
id_ID ISO-8859-1
ig_NG UTF-8
ik_CA UTF-8
is_IS.UTF-8 UTF-8
is_IS ISO-8859-1
it_CH.UTF-8 UTF-8
it_CH ISO-8859-1
it_IT.UTF-8 UTF-8
it_IT ISO-8859-1
it_IT@euro ISO-8859-15
iu_CA UTF-8
iw_IL.UTF-8 UTF-8
iw_IL ISO-8859-8
ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8
ka_GE.UTF-8 UTF-8
ka_GE GEORGIAN-PS
kk_KZ.UTF-8 UTF-8
kk_KZ PT154
kl_GL.UTF-8 UTF-8
kl_GL ISO-8859-1
km_KH UTF-8
kn_IN UTF-8
ko_KR.EUC-KR EUC-KR
ko_KR.UTF-8 UTF-8
kok_IN UTF-8
ks_IN UTF-8
ks_IN@devanagari UTF-8
ku_TR.UTF-8 UTF-8
ku_TR ISO-8859-9
kw_GB.UTF-8 UTF-8
kw_GB ISO-8859-1
ky_KG UTF-8
lb_LU UTF-8
lg_UG.UTF-8 UTF-8
lg_UG ISO-8859-10
li_BE UTF-8
li_NL UTF-8
lij_IT UTF-8
lo_LA UTF-8
lt_LT.UTF-8 UTF-8
lt_LT ISO-8859-13
lv_LV.UTF-8 UTF-8
lv_LV ISO-8859-13
mag_IN UTF-8
mai_IN UTF-8
mg_MG.UTF-8 UTF-8
mg_MG ISO-8859-15
mhr_RU UTF-8
mi_NZ.UTF-8 UTF-8
mi_NZ ISO-8859-13
mk_MK.UTF-8 UTF-8
mk_MK ISO-8859-5
ml_IN UTF-8
mn_MN UTF-8
mr_IN UTF-8
ms_MY.UTF-8 UTF-8
ms_MY ISO-8859-1
mt_MT.UTF-8 UTF-8
mt_MT ISO-8859-3
my_MM UTF-8
nan_TW@latin UTF-8
nb_NO.UTF-8 UTF-8
nb_NO ISO-8859-1
nds_DE UTF-8
nds_NL UTF-8
ne_NP UTF-8
nl_AW UTF-8
nl_BE.UTF-8 UTF-8
nl_BE ISO-8859-1
nl_BE@euro ISO-8859-15
nl_NL.UTF-8 UTF-8
nl_NL ISO-8859-1
nl_NL@euro ISO-8859-15
nn_NO.UTF-8 UTF-8
nn_NO ISO-8859-1
nr_ZA UTF-8
nso_ZA UTF-8
oc_FR.UTF-8 UTF-8
oc_FR ISO-8859-1
om_ET UTF-8
om_KE.UTF-8 UTF-8
om_KE ISO-8859-1
or_IN UTF-8
os_RU UTF-8
pa_IN UTF-8
pa_PK UTF-8
pap_AN UTF-8
pl_PL.UTF-8 UTF-8
pl_PL ISO-8859-2
ps_AF UTF-8
pt_BR.UTF-8 UTF-8
pt_BR ISO-8859-1
pt_PT.UTF-8 UTF-8
pt_PT ISO-8859-1
pt_PT@euro ISO-8859-15
ro_RO.UTF-8 UTF-8
ro_RO ISO-8859-2
ru_RU.KOI8-R KOI8-R
ru_RU.UTF-8 UTF-8
ru_RU ISO-8859-5
ru_UA.UTF-8 UTF-8
ru_UA KOI8-U
rw_RW UTF-8
sa_IN UTF-8
sc_IT UTF-8
sd_IN UTF-8
sd_IN@devanagari UTF-8
se_NO UTF-8
shs_CA UTF-8
si_LK UTF-8
sid_ET UTF-8
sk_SK.UTF-8 UTF-8
sk_SK ISO-8859-2
sl_SI.UTF-8 UTF-8
sl_SI ISO-8859-2
so_DJ.UTF-8 UTF-8
so_DJ ISO-8859-1
so_ET UTF-8
so_KE.UTF-8 UTF-8
so_KE ISO-8859-1
so_SO.UTF-8 UTF-8
so_SO ISO-8859-1
sq_AL.UTF-8 UTF-8
sq_AL ISO-8859-1
sq_MK UTF-8
sr_ME UTF-8
sr_RS UTF-8
sr_RS@latin UTF-8
ss_ZA UTF-8
st_ZA.UTF-8 UTF-8
st_ZA ISO-8859-1
sv_FI.UTF-8 UTF-8
sv_FI ISO-8859-1
sv_FI@euro ISO-8859-15
sv_SE.UTF-8 UTF-8
sv_SE ISO-8859-1
sw_KE UTF-8
sw_TZ UTF-8
ta_IN UTF-8
ta_LK UTF-8
te_IN UTF-8
tg_TJ.UTF-8 UTF-8
tg_TJ KOI8-T
th_TH.UTF-8 UTF-8
th_TH TIS-620
ti_ER UTF-8
ti_ET UTF-8
tig_ER UTF-8
tk_TM UTF-8
tl_PH.UTF-8 UTF-8
tl_PH ISO-8859-1
tn_ZA UTF-8
tr_CY.UTF-8 UTF-8
tr_CY ISO-8859-9
tr_TR.UTF-8 UTF-8
tr_TR ISO-8859-9
ts_ZA UTF-8
tt_RU UTF-8
tt_RU@iqtelif UTF-8
ug_CN UTF-8
uk_UA.UTF-8 UTF-8
uk_UA KOI8-U
unm_US UTF-8
ur_IN UTF-8
ur_PK UTF-8
uz_UZ ISO-8859-1
uz_UZ@cyrillic UTF-8
ve_ZA UTF-8
vi_VN UTF-8
wa_BE ISO-8859-1
wa_BE@euro ISO-8859-15
wa_BE.UTF-8 UTF-8
wae_CH UTF-8
wal_ET UTF-8
wo_SN UTF-8
xh_ZA.UTF-8 UTF-8
xh_ZA ISO-8859-1
yi_US.UTF-8 UTF-8
yi_US CP1255
yo_NG UTF-8
yue_HK UTF-8
zh_CN.GB18030 GB18030
zh_CN.GBK GBK
zh_CN.UTF-8 UTF-8
zh_CN GB2312
zh_HK.UTF-8 UTF-8
zh_HK BIG5-HKSCS
zh_SG.UTF-8 UTF-8
zh_SG.GBK GBK
zh_SG GB2312
zh_TW.EUC-TW EUC-TW
zh_TW.UTF-8 UTF-8
zh_TW BIG5
zu_ZA.UTF-8 UTF-8
zu_ZA ISO-8859-1
Winglet answered 25/2, 2013 at 4:21 Comment(3)
Unless one has a specific requirements for a different encoding, restricting to only the UTF-8 encodings is going to simplify the PHP code used, because it is the default encoding for everything post 5.3.Viper
I agree with you, i always use UTF-8 for everything, as that saves pain, but there are cases in which you have external data sources, and you need to specify a different encoding (if manually convert them via iconv is more work than just changing the encoding)Winglet
ru_RU actually also has windows-1251 encoding beside KOI8-R and ISO-8859-5 (yeah, that's pain but UTF-8 is the way to go anyway)Supposing
D
13

If you are using php-intl to localize your application, you probably want to use ResourceBundle::getLocales() instead of static list that you maintain yourself. It can also give you locales for particular language.

<?php
print_r(ResourceBundle::getLocales(''));

/* Output might show
  * Array
  * (
  *    [0] => af
  *    [1] => af_NA
  *    [2] => af_ZA
  *    [3] => am
  *    [4] => am_ET
  *    [5] => ar
  *    [6] => ar_AE
  *    [7] => ar_BH
  *    [8] => ar_DZ
  *    [9] => ar_EG
  *    [10] => ar_IQ
  *  ...
  */
?>
Dauphine answered 23/3, 2017 at 6:42 Comment(3)
+1 because, although it depends on system settings, the method on this answer allows you to programmatically get a list of locales without having to copy and maintain your own list.Siobhan
This does answer the question on how to get locales, but if one wants to instead get a list of languages, then this will no work. The list will be incomplete. See https://mcmap.net/q/37352/-is-there-a-way-to-get-the-list-of-available-locales-in-php for a list of languages.Grafting
Finally, a programmer's answer. Since I use php-intl for localization I want to allow user to choose between locales supported by php-intl, there is no sense to show all locales in the worldThousandfold
G
11

Language List

List of all languages with names and ISO 639-1 codes in all languages and all data formats.

Formats Available

  • Text
  • JSON
  • YAML
  • XML
  • HTML
  • CSV
  • SQL (MySQL, PostgreSQL, SQLite)
  • PHP

https://github.com/umpirsky/language-list

Gosling answered 14/6, 2018 at 8:27 Comment(4)
This is only (slightly less than) half of the problem. You also need geographical specifiers and (optionally) character encodings. For example, en_IE behaves differently from en_US in a number of aspects (currency, measurements, spelling, etc).Gauffer
Why not link to the locale list by the same author: github.com/umpirsky/locale-listIstria
Instead of relying on hardcoded data that are maintained by very few collaborators, you'd probably be better off relying on php-intl extension that is ultimately based on Unicode CLDR Project. For more details, see https://mcmap.net/q/37352/-is-there-a-way-to-get-the-list-of-available-locales-in-phpGrafting
but anyways, great work with that repo! Kudos!Sunfish
D
8

Here's a pretty exhaustive list of Culture Codes. As far as I can tell, they don't vary between programming languages since it's an RFC standard. As for English, I think if you support either the generic en or possibly the en-US then you should be just fine.

Danger answered 7/7, 2010 at 3:36 Comment(6)
' generic en or possibly the en-US then you should be just fine' No no no!Elanaeland
@Pete, are you saying he should use all English locals? If he want's to support just one, what would you support?Danger
and yes, dates will differ between different locales, but if you were to choose just one...Danger
If he's developing an international site, ideally yes, all the English locales. Is 08.07.10 the 8th of July or the 7th of August? At minimum en-US and en-GB. Which singular variant to use would be detrmined by the site's visitors, though just 1 means it's not a fully international site. (And if really just one, then en-GB would be more correct in terms of origin and number of countries :-P )Elanaeland
en_GB prefers time formatted in a 24 hour clock, en_US prefers it 12 hour with AM/PM indications. de_DE uses first two letters to abbreviate days of week, but de_AU uses first three letters. It is very important to not just pick one or two within a language, but support them all.Rebound
@AliceWonder. Really depends upon the target audience, because unless you target a local audience, who tend to actively resisting 'foreign' spellings, most visitors will tolerate content aimed at a world-wide audience being en-US. Just a fact of life. Just look at how most online newspaper sites around the world use US-style quotes, even when targeting local audiences, just because of the cultural swamping by US-sourced material has overridden whatever may have been in a country's official style guide. Audiences have moved on, despite what many of us may use for our personal preferences.Viper
B
7

I spend a whole day organizing this information for my company since we are building a multi-lingual platform. If you find any issue, missing language, or incorrect charset please edit the list so it will be more useful in the future. Here is the complete list of all the language locales, names, and charsets.

For PHP array here is the link https://github.com/jerryurenaa/language-list/blob/main/language-list-array.php

for JSON here is the link https://github.com/jerryurenaa/language-list/blob/main/language-list-json.json

Bronwen answered 8/2, 2021 at 2:5 Comment(0)
S
6

Not sure how this wasn't suggested yet, but here's the locale for html using the data from @Michel Müller :

<select class="inputField" name="locale">
    <option value="af_NA">Afrikaans (Namibia)</option>
    <option value="af_ZA">Afrikaans (South Africa)</option>
    <option value="af">Afrikaans</option>
    <option value="ak_GH">Akan (Ghana)</option>
    <option value="ak">Akan</option>
    <option value="sq_AL">Albanian (Albania)</option>
    <option value="sq">Albanian</option>
    <option value="am_ET">Amharic (Ethiopia)</option>
    <option value="am">Amharic</option>
    <option value="ar_DZ">Arabic (Algeria)</option>
    <option value="ar_BH">Arabic (Bahrain)</option>
    <option value="ar_EG">Arabic (Egypt)</option>
    <option value="ar_IQ">Arabic (Iraq)</option>
    <option value="ar_JO">Arabic (Jordan)</option>
    <option value="ar_KW">Arabic (Kuwait)</option>
    <option value="ar_LB">Arabic (Lebanon)</option>
    <option value="ar_LY">Arabic (Libya)</option>
    <option value="ar_MA">Arabic (Morocco)</option>
    <option value="ar_OM">Arabic (Oman)</option>
    <option value="ar_QA">Arabic (Qatar)</option>
    <option value="ar_SA">Arabic (Saudi Arabia)</option>
    <option value="ar_SD">Arabic (Sudan)</option>
    <option value="ar_SY">Arabic (Syria)</option>
    <option value="ar_TN">Arabic (Tunisia)</option>
    <option value="ar_AE">Arabic (United Arab Emirates)</option>
    <option value="ar_YE">Arabic (Yemen)</option>
    <option value="ar">Arabic</option>
    <option value="hy_AM">Armenian (Armenia)</option>
    <option value="hy">Armenian</option>
    <option value="as_IN">Assamese (India)</option>
    <option value="as">Assamese</option>
    <option value="asa_TZ">Asu (Tanzania)</option>
    <option value="asa">Asu</option>
    <option value="az_Cyrl">Azerbaijani (Cyrillic)</option>
    <option value="az_Cyrl_AZ">Azerbaijani (Cyrillic, Azerbaijan)</option>
    <option value="az_Latn">Azerbaijani (Latin)</option>
    <option value="az_Latn_AZ">Azerbaijani (Latin, Azerbaijan)</option>
    <option value="az">Azerbaijani</option>
    <option value="bm_ML">Bambara (Mali)</option>
    <option value="bm">Bambara</option>
    <option value="eu_ES">Basque (Spain)</option>
    <option value="eu">Basque</option>
    <option value="be_BY">Belarusian (Belarus)</option>
    <option value="be">Belarusian</option>
    <option value="bem_ZM">Bemba (Zambia)</option>
    <option value="bem_ZM">(Zambia)</option>
    <option value="bem">Bemba</option>
    <option value="bez_TZ">Bena (Tanzania)</option>
    <option value="bez">Bena</option>
    <option value="bn_BD">Bengali (Bangladesh)</option>
    <option value="bn_IN">Bengali (India)</option>
    <option value="bn">Bengali</option>
    <option value="bs_BA">Bosnian (Bosnia and Herzegovina)</option>
    <option value="bs">Bosnian</option>
    <option value="bg_BG">Bulgarian (Bulgaria)</option>
    <option value="bg">Bulgarian</option>
    <option value="my_MM">Burmese (Myanmar [Burma])</option>
    <option value="my">Burmese</option>
    <option value="yue_Hant_HK">Cantonese (Traditional, Hong Kong SAR China)</option>
    <option value="ca_ES">Catalan (Spain)</option>
    <option value="ca">Catalan</option>
    <option value="tzm_Latn">Central Morocco Tamazight (Latin)</option>
    <option value="tzm_Latn_MA">Central Morocco Tamazight (Latin, Morocco)</option>
    <option value="tzm">Central Morocco Tamazight</option>
    <option value="chr_US">Cherokee (United States)</option>
    <option value="chr">Cherokee</option>
    <option value="cgg_UG">Chiga (Uganda)</option>
    <option value="cgg">Chiga</option>
    <option value="zh_Hans">Chinese (Simplified Han)</option>
    <option value="zh_Hans_CN">Chinese (Simplified Han, China)</option>
    <option value="zh_Hans_HK">Chinese (Simplified Han, Hong Kong SAR China)</option>
    <option value="zh_Hans_MO">Chinese (Simplified Han, Macau SAR China)</option>
    <option value="zh_Hans_SG">Chinese (Simplified Han, Singapore)</option>
    <option value="zh_Hant">Chinese (Traditional Han)</option>
    <option value="zh_Hant_HK">Chinese (Traditional Han, Hong Kong SAR China)</option>
    <option value="zh_Hant_MO">Chinese (Traditional Han, Macau SAR China)</option>
    <option value="zh_Hant_TW">Chinese (Traditional Han, Taiwan)</option>
    <option value="zh">Chinese</option>
    <option value="kw_GB">Cornish (United Kingdom)</option>
    <option value="kw">Cornish</option>
    <option value="hr_HR">Croatian (Croatia)</option>
    <option value="hr">Croatian</option>
    <option value="cs_CZ">Czech (Czech Republic)</option>
    <option value="cs">Czech</option>
    <option value="da_DK">Danish (Denmark)</option>
    <option value="da">Danish</option>
    <option value="nl_BE">Dutch (Belgium)</option>
    <option value="nl_NL">Dutch (Netherlands)</option>
    <option value="nl">Dutch</option>
    <option value="ebu_KE">Embu (Kenya)</option>
    <option value="ebu">Embu</option>
    <option value="en_AS">English (American Samoa)</option>
    <option value="en_AU">English (Australia)</option>
    <option value="en_BE">English (Belgium)</option>
    <option value="en_BZ">English (Belize)</option>
    <option value="en_BW">English (Botswana)</option>
    <option value="en_CA">English (Canada)</option>
    <option value="en_GU">English (Guam)</option>
    <option value="en_HK">English (Hong Kong SAR China)</option>
    <option value="en_IN">English (India)</option>
    <option value="en_IE">English (Ireland)</option>
    <option value="en_IL">English (Israel)</option>
    <option value="en_JM">English (Jamaica)</option>
    <option value="en_MT">English (Malta)</option>
    <option value="en_MH">English (Marshall Islands)</option>
    <option value="en_MU">English (Mauritius)</option>
    <option value="en_NA">English (Namibia)</option>
    <option value="en_NZ">English (New Zealand)</option>
    <option value="en_MP">English (Northern Mariana Islands)</option>
    <option value="en_PK">English (Pakistan)</option>
    <option value="en_PH">English (Philippines)</option>
    <option value="en_SG">English (Singapore)</option>
    <option value="en_ZA">English (South Africa)</option>
    <option value="en_TT">English (Trinidad and Tobago)</option>
    <option value="en_UM">English (U.S. Minor Outlying Islands)</option>
    <option value="en_VI">English (U.S. Virgin Islands)</option>
    <option value="en_GB">English (United Kingdom)</option>
    <option value="en_US">English (United States)</option>
    <option value="en_ZW">English (Zimbabwe)</option>
    <option value="en">English</option>
    <option value="eo">Esperanto</option>
    <option value="et_EE">Estonian (Estonia)</option>
    <option value="et">Estonian</option>
    <option value="ee_GH">Ewe (Ghana)</option>
    <option value="ee_TG">Ewe (Togo)</option>
    <option value="ee">Ewe</option>
    <option value="fo_FO">Faroese (Faroe Islands)</option>
    <option value="fo">Faroese</option>
    <option value="fil_PH">Filipino (Philippines)</option>
    <option value="fil">Filipino</option>
    <option value="fi_FI">Finnish (Finland)</option>
    <option value="fi">Finnish</option>
    <option value="fr_BE">French (Belgium)</option>
    <option value="fr_BJ">French (Benin)</option>
    <option value="fr_BF">French (Burkina Faso)</option>
    <option value="fr_BI">French (Burundi)</option>
    <option value="fr_CM">French (Cameroon)</option>
    <option value="fr_CA">French (Canada)</option>
    <option value="fr_CF">French (Central African Republic)</option>
    <option value="fr_TD">French (Chad)</option>
    <option value="fr_KM">French (Comoros)</option>
    <option value="fr_CG">French (Congo - Brazzaville)</option>
    <option value="fr_CD">French (Congo - Kinshasa)</option>
    <option value="fr_CI">French (Côte d’Ivoire)</option>
    <option value="fr_DJ">French (Djibouti)</option>
    <option value="fr_GQ">French (Equatorial Guinea)</option>
    <option value="fr_FR">French (France)</option>
    <option value="fr_GA">French (Gabon)</option>
    <option value="fr_GP">French (Guadeloupe)</option>
    <option value="fr_GN">French (Guinea)</option>
    <option value="fr_LU">French (Luxembourg)</option>
    <option value="fr_MG">French (Madagascar)</option>
    <option value="fr_ML">French (Mali)</option>
    <option value="fr_MQ">French (Martinique)</option>
    <option value="fr_MC">French (Monaco)</option>
    <option value="fr_NE">French (Niger)</option>
    <option value="fr_RW">French (Rwanda)</option>
    <option value="fr_RE">French (Réunion)</option>
    <option value="fr_BL">French (Saint Barthélemy)</option>
    <option value="fr_MF">French (Saint Martin)</option>
    <option value="fr_SN">French (Senegal)</option>
    <option value="fr_CH">French (Switzerland)</option>
    <option value="fr_TG">French (Togo)</option>
    <option value="fr">French</option>
    <option value="ff_SN">Fulah (Senegal)</option>
    <option value="ff">Fulah</option>
    <option value="gl_ES">Galician (Spain)</option>
    <option value="gl">Galician</option>
    <option value="lg_UG">Ganda (Uganda)</option>
    <option value="lg">Ganda</option>
    <option value="ka_GE">Georgian (Georgia)</option>
    <option value="ka">Georgian</option>
    <option value="de_AT">German (Austria)</option>
    <option value="de_BE">German (Belgium)</option>
    <option value="de_DE">German (Germany)</option>
    <option value="de_LI">German (Liechtenstein)</option>
    <option value="de_LU">German (Luxembourg)</option>
    <option value="de_CH">German (Switzerland)</option>
    <option value="de">German</option>
    <option value="el_CY">Greek (Cyprus)</option>
    <option value="el_GR">Greek (Greece)</option>
    <option value="el">Greek</option>
    <option value="gu_IN">Gujarati (India)</option>
    <option value="gu">Gujarati</option>
    <option value="guz_KE">Gusii (Kenya)</option>
    <option value="guz">Gusii</option>
    <option value="ha_Latn">Hausa (Latin)</option>
    <option value="ha_Latn_GH">Hausa (Latin, Ghana)</option>
    <option value="ha_Latn_NE">Hausa (Latin, Niger)</option>
    <option value="ha_Latn_NG">Hausa (Latin, Nigeria)</option>
    <option value="ha">Hausa</option>
    <option value="haw_US">Hawaiian (United States)</option>
    <option value="haw">Hawaiian</option>
    <option value="he_IL">Hebrew (Israel)</option>
    <option value="he">Hebrew</option>
    <option value="hi_IN">Hindi (India)</option>
    <option value="hi">Hindi</option>
    <option value="hu_HU">Hungarian (Hungary)</option>
    <option value="hu">Hungarian</option>
    <option value="is_IS">Icelandic (Iceland)</option>
    <option value="is">Icelandic</option>
    <option value="ig_NG">Igbo (Nigeria)</option>
    <option value="ig">Igbo</option>
    <option value="id_ID">Indonesian (Indonesia)</option>
    <option value="id">Indonesian</option>
    <option value="ga_IE">Irish (Ireland)</option>
    <option value="ga">Irish</option>
    <option value="it_IT">Italian (Italy)</option>
    <option value="it_CH">Italian (Switzerland)</option>
    <option value="it">Italian</option>
    <option value="ja_JP">Japanese (Japan)</option>
    <option value="ja">Japanese</option>
    <option value="kea_CV">Kabuverdianu (Cape Verde)</option>
    <option value="kea">Kabuverdianu</option>
    <option value="kab_DZ">Kabyle (Algeria)</option>
    <option value="kab">Kabyle</option>
    <option value="kl_GL">Kalaallisut (Greenland)</option>
    <option value="kl">Kalaallisut</option>
    <option value="kln_KE">Kalenjin (Kenya)</option>
    <option value="kln">Kalenjin</option>
    <option value="kam_KE">Kamba (Kenya)</option>
    <option value="kam">Kamba</option>
    <option value="kn_IN">Kannada (India)</option>
    <option value="kn">Kannada</option>
    <option value="kk_Cyrl">Kazakh (Cyrillic)</option>
    <option value="kk_Cyrl_KZ">Kazakh (Cyrillic, Kazakhstan)</option>
    <option value="kk">Kazakh</option>
    <option value="km_KH">Khmer (Cambodia)</option>
    <option value="km">Khmer</option>
    <option value="ki_KE">Kikuyu (Kenya)</option>
    <option value="ki">Kikuyu</option>
    <option value="rw_RW">Kinyarwanda (Rwanda)</option>
    <option value="rw">Kinyarwanda</option>
    <option value="kok_IN">Konkani (India)</option>
    <option value="kok">Konkani</option>
    <option value="ko_KR">Korean (South Korea)</option>
    <option value="ko">Korean</option>
    <option value="khq_ML">Koyra Chiini (Mali)</option>
    <option value="khq">Koyra Chiini</option>
    <option value="ses_ML">Koyraboro Senni (Mali)</option>
    <option value="ses">Koyraboro Senni</option>
    <option value="lag_TZ">Langi (Tanzania)</option>
    <option value="lag">Langi</option>
    <option value="lv_LV">Latvian (Latvia)</option>
    <option value="lv">Latvian</option>
    <option value="lt_LT">Lithuanian (Lithuania)</option>
    <option value="lt">Lithuanian</option>
    <option value="luo_KE">Luo (Kenya)</option>
    <option value="luo">Luo</option>
    <option value="luy_KE">Luyia (Kenya)</option>
    <option value="luy">Luyia</option>
    <option value="mk_MK">Macedonian (Macedonia)</option>
    <option value="mk">Macedonian</option>
    <option value="jmc_TZ">Machame (Tanzania)</option>
    <option value="jmc">Machame</option>
    <option value="kde_TZ">Makonde (Tanzania)</option>
    <option value="kde">Makonde</option>
    <option value="mg_MG">Malagasy (Madagascar)</option>
    <option value="mg">Malagasy</option>
    <option value="ms_BN">Malay (Brunei)</option>
    <option value="ms_MY">Malay (Malaysia)</option>
    <option value="ms">Malay</option>
    <option value="ml_IN">Malayalam (India)</option>
    <option value="ml">Malayalam</option>
    <option value="mt_MT">Maltese (Malta)</option>
    <option value="mt">Maltese</option>
    <option value="gv_GB">Manx (United Kingdom)</option>
    <option value="gv">Manx</option>
    <option value="mr_IN">Marathi (India)</option>
    <option value="mr">Marathi</option>
    <option value="mas_KE">Masai (Kenya)</option>
    <option value="mas_TZ">Masai (Tanzania)</option>
    <option value="mas">Masai</option>
    <option value="mer_KE">Meru (Kenya)</option>
    <option value="mer">Meru</option>
    <option value="mfe_MU">Morisyen (Mauritius)</option>
    <option value="mfe">Morisyen</option>
    <option value="naq_NA">Nama (Namibia)</option>
    <option value="naq">Nama</option>
    <option value="ne_IN">Nepali (India)</option>
    <option value="ne_NP">Nepali (Nepal)</option>
    <option value="ne">Nepali</option>
    <option value="nd_ZW">North Ndebele (Zimbabwe)</option>
    <option value="nd">North Ndebele</option>
    <option value="nb_NO">Norwegian Bokmål (Norway)</option>
    <option value="nb">Norwegian Bokmål</option>
    <option value="nn_NO">Norwegian Nynorsk (Norway)</option>
    <option value="nn">Norwegian Nynorsk</option>
    <option value="nyn_UG">Nyankole (Uganda)</option>
    <option value="nyn">Nyankole</option>
    <option value="or_IN">Oriya (India)</option>
    <option value="or">Oriya</option>
    <option value="om_ET">Oromo (Ethiopia)</option>
    <option value="om_KE">Oromo (Kenya)</option>
    <option value="om">Oromo</option>
    <option value="ps_AF">Pashto (Afghanistan)</option>
    <option value="ps">Pashto</option>
    <option value="fa_AF">Persian (Afghanistan)</option>
    <option value="fa_IR">Persian (Iran)</option>
    <option value="fa">Persian</option>
    <option value="pl_PL">Polish (Poland)</option>
    <option value="pl">Polish</option>
    <option value="pt_BR">Portuguese (Brazil)</option>
    <option value="pt_GW">Portuguese (Guinea-Bissau)</option>
    <option value="pt_MZ">Portuguese (Mozambique)</option>
    <option value="pt_PT">Portuguese (Portugal)</option>
    <option value="pt">Portuguese</option>
    <option value="pa_Arab">Punjabi (Arabic)</option>
    <option value="pa_Arab_PK">Punjabi (Arabic, Pakistan)</option>
    <option value="pa_Guru">Punjabi (Gurmukhi)</option>
    <option value="pa_Guru_IN">Punjabi (Gurmukhi, India)</option>
    <option value="pa">Punjabi</option>
    <option value="ro_MD">Romanian (Moldova)</option>
    <option value="ro_RO">Romanian (Romania)</option>
    <option value="ro">Romanian</option>
    <option value="rm_CH">Romansh (Switzerland)</option>
    <option value="rm">Romansh</option>
    <option value="rof_TZ">Rombo (Tanzania)</option>
    <option value="rof">Rombo</option>
    <option value="ru_MD">Russian (Moldova)</option>
    <option value="ru_RU">Russian (Russia)</option>
    <option value="ru_UA">Russian (Ukraine)</option>
    <option value="ru">Russian</option>
    <option value="rwk_TZ">Rwa (Tanzania)</option>
    <option value="rwk">Rwa</option>
    <option value="saq_KE">Samburu (Kenya)</option>
    <option value="saq">Samburu</option>
    <option value="sg_CF">Sango (Central African Republic)</option>
    <option value="sg">Sango</option>
    <option value="seh_MZ">Sena (Mozambique)</option>
    <option value="seh">Sena</option>
    <option value="sr_Cyrl">Serbian (Cyrillic)</option>
    <option value="sr_Cyrl_BA">Serbian (Cyrillic, Bosnia and Herzegovina)</option>
    <option value="sr_Cyrl_ME">Serbian (Cyrillic, Montenegro)</option>
    <option value="sr_Cyrl_RS">Serbian (Cyrillic, Serbia)</option>
    <option value="sr_Latn">Serbian (Latin)</option>
    <option value="sr_Latn_BA">Serbian (Latin, Bosnia and Herzegovina)</option>
    <option value="sr_Latn_ME">Serbian (Latin, Montenegro)</option>
    <option value="sr_Latn_RS">Serbian (Latin, Serbia)</option>
    <option value="sr">Serbian</option>
    <option value="sn_ZW">Shona (Zimbabwe)</option>
    <option value="sn">Shona</option>
    <option value="ii_CN">Sichuan Yi (China)</option>
    <option value="ii">Sichuan Yi</option>
    <option value="si_LK">Sinhala (Sri Lanka)</option>
    <option value="si">Sinhala</option>
    <option value="sk_SK">Slovak (Slovakia)</option>
    <option value="sk">Slovak</option>
    <option value="sl_SI">Slovenian (Slovenia)</option>
    <option value="sl">Slovenian</option>
    <option value="xog_UG">Soga (Uganda)</option>
    <option value="xog">Soga</option>
    <option value="so_DJ">Somali (Djibouti)</option>
    <option value="so_ET">Somali (Ethiopia)</option>
    <option value="so_KE">Somali (Kenya)</option>
    <option value="so_SO">Somali (Somalia)</option>
    <option value="so">Somali</option>
    <option value="es_AR">Spanish (Argentina)</option>
    <option value="es_BO">Spanish (Bolivia)</option>
    <option value="es_CL">Spanish (Chile)</option>
    <option value="es_CO">Spanish (Colombia)</option>
    <option value="es_CR">Spanish (Costa Rica)</option>
    <option value="es_DO">Spanish (Dominican Republic)</option>
    <option value="es_EC">Spanish (Ecuador)</option>
    <option value="es_SV">Spanish (El Salvador)</option>
    <option value="es_GQ">Spanish (Equatorial Guinea)</option>
    <option value="es_GT">Spanish (Guatemala)</option>
    <option value="es_HN">Spanish (Honduras)</option>
    <option value="es_419">Spanish (Latin America)</option>
    <option value="es_MX">Spanish (Mexico)</option>
    <option value="es_NI">Spanish (Nicaragua)</option>
    <option value="es_PA">Spanish (Panama)</option>
    <option value="es_PY">Spanish (Paraguay)</option>
    <option value="es_PE">Spanish (Peru)</option>
    <option value="es_PR">Spanish (Puerto Rico)</option>
    <option value="es_ES">Spanish (Spain)</option>
    <option value="es_US">Spanish (United States)</option>
    <option value="es_UY">Spanish (Uruguay)</option>
    <option value="es_VE">Spanish (Venezuela)</option>
    <option value="es">Spanish</option>
    <option value="sw_KE">Swahili (Kenya)</option>
    <option value="sw_TZ">Swahili (Tanzania)</option>
    <option value="sw">Swahili</option>
    <option value="sv_FI">Swedish (Finland)</option>
    <option value="sv_SE">Swedish (Sweden)</option>
    <option value="sv">Swedish</option>
    <option value="gsw_CH">Swiss German (Switzerland)</option>
    <option value="gsw">Swiss German</option>
    <option value="shi_Latn">Tachelhit (Latin)</option>
    <option value="shi_Latn_MA">Tachelhit (Latin, Morocco)</option>
    <option value="shi_Tfng">Tachelhit (Tifinagh)</option>
    <option value="shi_Tfng_MA">Tachelhit (Tifinagh, Morocco)</option>
    <option value="shi">Tachelhit</option>
    <option value="dav_KE">Taita (Kenya)</option>
    <option value="dav">Taita</option>
    <option value="ta_IN">Tamil (India)</option>
    <option value="ta_LK">Tamil (Sri Lanka)</option>
    <option value="ta">Tamil</option>
    <option value="te_IN">Telugu (India)</option>
    <option value="te">Telugu</option>
    <option value="teo_KE">Teso (Kenya)</option>
    <option value="teo_UG">Teso (Uganda)</option>
    <option value="teo">Teso</option>
    <option value="th_TH">Thai (Thailand)</option>
    <option value="th">Thai</option>
    <option value="bo_CN">Tibetan (China)</option>
    <option value="bo_IN">Tibetan (India)</option>
    <option value="bo">Tibetan</option>
    <option value="ti_ER">Tigrinya (Eritrea)</option>
    <option value="ti_ET">Tigrinya (Ethiopia)</option>
    <option value="ti">Tigrinya</option>
    <option value="to_TO">Tonga (Tonga)</option>
    <option value="to">Tonga</option>
    <option value="tr_TR">Turkish (Turkey)</option>
    <option value="tr">Turkish</option>
    <option value="uk_UA">Ukrainian (Ukraine)</option>
    <option value="uk">Ukrainian</option>
    <option value="ur_IN">Urdu (India)</option>
    <option value="ur_PK">Urdu (Pakistan)</option>
    <option value="ur">Urdu</option>
    <option value="uz_Arab">Uzbek (Arabic)</option>
    <option value="uz_Arab_AF">Uzbek (Arabic, Afghanistan)</option>
    <option value="uz_Cyrl">Uzbek (Cyrillic)</option>
    <option value="uz_Cyrl_UZ">Uzbek (Cyrillic, Uzbekistan)</option>
    <option value="uz_Latn">Uzbek (Latin)</option>
    <option value="uz_Latn_UZ">Uzbek (Latin, Uzbekistan)</option>
    <option value="uz">Uzbek</option>
    <option value="vi_VN">Vietnamese (Vietnam)</option>
    <option value="vi">Vietnamese</option>
    <option value="vun_TZ">Vunjo (Tanzania)</option>
    <option value="vun">Vunjo</option>
    <option value="cy_GB">Welsh (United Kingdom)</option>
    <option value="cy">Welsh</option>
    <option value="yo_NG">Yoruba (Nigeria)</option>
    <option value="yo">Yoruba</option>
    <option value="zu_ZA">Zulu (South Africa)</option>
    <option value="zu">Zulu</option>
</select>
Sugarplum answered 16/6, 2021 at 18:6 Comment(1)
Just realized this was for PHP. It might still be helpful for the html people to have a simple list.Sugarplum
D
0

A program that lists information about language codes, local names, currency ISO codes, and currency symbols, if any. This is for the local data included in your version of PHP.

// get array of Locales codes included in PHP
$ARR_LANGS_PHP = ResourceBundle::getLocales('');

// prepa. an array for rendering
$LANGS = array();

foreach ($ARR_LANGS_PHP as $k => $v) {


        // currency ISO code if exist
        $currency_iso = NumberFormatter::create(
            $v,NumberFormatter::CURRENCY)
                ->getTextAttribute(NumberFormatter::CURRENCY_CODE);

        // if no currency ISO code -> 'XXX' is returned,  $currency_iso => ''
        $currency_iso = ( $currency_iso == 'XXX') ? '' : $currency_iso;

        // currency symbol if exist
        $currency_symbol = new NumberFormatter( $v, NumberFormatter::DECIMAL );
        $symbol = $currency_symbol->getSymbol(NumberFormatter::CURRENCY_SYMBOL);

        // if no symbol -> '¤' is returned,  $symbol => ''
        $symbol = ( $symbol == '¤' ) ? '' : $symbol;

        // return name of locale with details ex. Arabic (Tunisia)
        $descr_locale = Locale::getDisplayName($v, 'en');

        // add datas to lang array
        $LANGS[] = array(

                'code_min' => strtolower(substr($v, 0, 2)),
                // code -> ex. 'fr_FR'
                'code' => $v,
                // locale string in english for all
                'locale' => $descr_locale,
                // currency_iso -> ex. 'EUR'
                'currency_iso' => $currency_iso,
                // ex. €
                'symbol' => $symbol
        );
}

// var_dump( count($LANGS) ); // 732 langs
echo '<pre>';
print_r( $LANGS );
echo '</pre>';
exit;

?>


// output :
Array
(
    [0] => Array
        (
            [code_min] => af
            [code] => af
            [locale] => Afrikaans
            [currency_iso] => 
            [symbol] => 
        )

    [1] => Array
        (
            [code_min] => af
            [code] => af_NA
            [locale] => Afrikaans (Namibia)
            [currency_iso] => NAD
            [symbol] => $
        )

    [2] => Array
        (
            [code_min] => af
            [code] => af_ZA
            [locale] => Afrikaans (South Africa)
            [currency_iso] => ZAR
            [symbol] => R
        )
// ...
);

enter link description here

Dwyer answered 15/7, 2022 at 4:24 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.