Reputation: 3008
I'm in a trouble about this because I have the currencys with the codes of 3 digits (USD, EUR, COP, etc.).
If you go to use the function setlocale you need to do something like this:
setlocale(LC_MONETARY, 'en_US');
Look that you pass 'en_US' and not 'USD'. How can I know for each currency selected by the user the respective locale for LC_MONETARY in order to be used with setlocale.
In addittion, in my website, the currency is independent of the language, for example, you have the website in Spanish but you can see the money in USD. That will result in a locale like: es_US ???? I believe it doesn't supported.
Thanks.
Upvotes: 0
Views: 7754
Reputation: 3008
Using this URL I get all language combinations from unicode.org: http://www.unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_territory_information.html
I created a table with that languages and its combinations. After that, I run this code (php):
$result = $mysqli->query("SELECT * FROM language" );
while ($row = $result->fetch_assoc()) {
putenv('LC_ALL=' . $row['code'] );
setlocale(LC_ALL, $row['code'] );
$arr = localeconv();
echo $row['code'] . " - " . $arr['int_curr_symbol'] . "<br/>";
}
The code is represented by: (Language-Code)_(Territory-Code), and I get something like this:
aa - USD
aa_DJ - DJF
aa_ER - ERN
aa_ET - ETB
ab - ETB
ab_GE - ETB
ab_TR - ETB
abr - ETB
abr_G - ETB
ace - ETB
ace_I - ETB
ady - ETB
ady_R - ETB
ady_T - ETB
af - ETB
af_BW - ETB
af_NA - ETB
af_ZA - ZAR
ak - ZAR
ak_GH - ZAR
alt - ZAR
alt_R - ZAR
am - ZAR
am_ET - ETB
am_IL - ETB
amo - ETB
amo_N - ETB
aoz - ETB
aoz_I - ETB
ar - ETB
ar_AE - AED
ar_AR - AED
ar_BH - BHD
ar_CM - BHD
ar_CY - BHD
ar_DJ - BHD
ar_DZ - DZD
ar_EG - EGP
ar_EH - EGP
ar_ER - EGP
ar_IL - EGP
ar_IQ - IQD
ar_IR - IQD
ar_JO - JOD
ar_KE - JOD
ar_KM - JOD
ar_KW - KWD
ar_LB - LBP
ar_LY - LYD
ar_MA - MAD
ar_ML - MAD
ar_MR - MAD
ar_NE - MAD
ar_NG - MAD
ar_OM - OMR
ar_PS - OMR
ar_QA - QAR
ar_SA - SAR
ar_SD - SDD
ar_SS - SDD
ar_SY - SYP
ar_TD - SYP
ar_TJ - SYP
ar_TN - TND
ar_TR - TND
ar_YE - YER
as - YER
as_IN - INR
asa - INR
asa_T - INR
ast - INR
ast_E - INR
atj - INR
atj_C - INR
av - INR
av_RU - INR
awa - INR
awa_I - INR
awa_N - INR
ay - INR
ay_BO - INR
ay_PE - INR
az_Ar - INR
az_AZ - AZM
az_Cy - AZM
az_La - AZM
ba - AZM
ba_RU - AZM
bal - AZM
bal_A - AZM
bal_I - AZM
bal_O - AZM
bal_P - AZM
ban - AZM
ban_I - AZM
bap - AZM
bap_N - AZM
bbc - AZM
bbc_I - AZM
bci - AZM
bci_C - AZM
bcl - AZM
bcl_P - AZM
be - AZM
be_BY - BYR
be_PL - BYR
be_UA - BYR
bem - BYR
bem_Z - BYR
bew - BYR
bew_I - BYR
bez - BYR
bez_T - BYR
bfq - BYR
bfq_I - BYR
bft - BYR
bft_I - BYR
bft_P - BYR
bfy - BYR
bfy_I - BYR
bfy_N - BYR
bg - BYR
bg_BG - BGN
bg_GR - BGN
bg_MD - BGN
bg_RO - BGN
bg_TR - BGN
bg_UA - BGN
bgc - BGN
bgc_I - BGN
bgx - BGN
bgx_T - BGN
bhb - BGN
bhb_I - BGN
bhi - BGN
bhi_I - BGN
bhk - BGN
bhk_P - BGN
bho - BGN
bho_I - BGN
bho_M - BGN
bho_N - BGN
bi - BGN
bi_VU - BGN
bin - BGN
bin_N - BGN
bjj - BGN
bjj_I - BGN
bjn - BGN
bjn_I - BGN
bjn_M - BGN
bku - BGN
bku_P - BGN
bm - BGN
bm_ML - BGN
bmq - BGN
bmq_M - BGN
bn - BGN
bn_BD - BDT
bn_GB - BDT
bn_IN - INR
bn_NP - INR
bo - INR
bo_CN - CNY
bo_IN - INR
bo_NP - INR
bqi - INR
bqi_I - INR
bqv - INR
bqv_C - INR
br - INR
br_FR - EUR
bra - EUR
bra_I - EUR
brh - EUR
brh_P - EUR
brx - EUR
brx_I - EUR
bs - EUR
bs_BA - BAM
bto - BAM
bto_P - BAM
btv - BAM
btv_I - BAM
btv_P - BAM
buc - BAM
buc_Y - BAM
bug - BAM
bug_I - BAM
bug_M - BAM
bvb - BAM
bvb_G - BAM
bxr - BAM
bxr_R - BAM
bya - BAM
bya_I - BAM
byn - BAM
byn_E - BAM
bze - BAM
bze_M - BAM
bzx - BAM
bzx_M - BAM
ca - BAM
ca_AD - EUR
ca_ES - EUR
ca_FR - EUR
ca_IT - EUR
cch - EUR
cch_N - EUR
ccp - EUR
ccp_B - EUR
ccp_I - EUR
ce - EUR
ce_RU - EUR
ceb - EUR
ceb_P - EUR
cgg - EUR
cgg_U - EUR
ch - EUR
ch_GU - EUR
ch_MP - EUR
chk - EUR
chk_F - EUR
chm - EUR
chm_R - EUR
chp - EUR
chp_C - EUR
chr - EUR
chr_U - EUR
cja - EUR
cja_K - EUR
cjm - EUR
cjm_V - EUR
ckb - EUR
ckb_I - EUR
co - EUR
co_FR - EUR
crj - EUR
crj_C - EUR
crk - EUR
crk_C - EUR
crl - EUR
crl_C - EUR
crm - EUR
crm_C - EUR
crs - EUR
crs_S - EUR
cs - EUR
cs_CZ - CZK
csb - CZK
csb_P - CZK
csw - CZK
csw_C - CZK
cv - CZK
cv_RU - RUB
cwd - RUB
cwd_C - RUB
cy - RUB
cy_AR - RUB
cy_GB - GBP
da - GBP
da_DE - GBP
da_DK - DKK
da_GL - DKK
da_IS - DKK
daf - DKK
daf_C - DKK
dar - DKK
dar_R - DKK
dav - DKK
dav_K - DKK
dcc - DKK
dcc_I - DKK
de - DKK
de_AT - EUR
de_BE - EUR
de_BR - EUR
de_CA - EUR
de_CH - CHF
de_CZ - CHF
de_DE - EUR
de_DK - EUR
de_HU - EUR
de_IT - EUR
de_KZ - EUR
de_LI - EUR
de_LU - EUR
de_NA - EUR
de_PL - EUR
de_PY - EUR
de_RO - EUR
de_SK - EUR
de_US - EUR
dgr - EUR
dgr_C - EUR
dhd - EUR
dhd_I - EUR
diq - EUR
diq_T - EUR
dje - EUR
dje_N - EUR
doi - EUR
doi_I - EUR
dtm - EUR
dtm_M - EUR
dv - EUR
dv_IN - EUR
dv_MV - MVR
dyu - MVR
dyu_B - MVR
dz - MVR
dz_BT - BTN
dz_IN - BTN
ebu - BTN
ebu_K - BTN
ee - BTN
ee_GH - BTN
ee_TG - BTN
efi - BTN
efi_N - BTN
el - BTN
el_AL - BTN
el_CY - EUR
el_DE - EUR
el_EG - EUR
el_GB - EUR
el_GR - EUR
el_IT - EUR
el_RO - EUR
el_TR - EUR
el_UA - EUR
emk - EUR
emk_G - EUR
en - EUR
en_AC - EUR
en_AG - XCD
en_AI - XCD
en_AS - XCD
en_AU - AUD
en_AW - AUD
en_BB - AUD
en_BE - AUD
en_BM - AUD
en_BN - AUD
en_BS - AUD
en_BW - BWP
en_BZ - BWP
en_CA - CAD
en_CC - CAD
en_CK - CAD
en_CM - CAD
en_CN - CAD
en_CX - CAD
en_DE - CAD
en_DG - CAD
en_DM - CAD
en_DO - CAD
en_ES - CAD
en_ET - CAD
en_FI - CAD
en_FJ - CAD
en_FK - CAD
en_FM - CAD
en_FR - CAD
en_GB - GBP
en_GD - GBP
en_GG - GBP
en_GH - GBP
en_GI - GBP
en_GM - GBP
en_GU - GBP
en_GY - GBP
en_HK - HKD
en_HN - HKD
en_IE - EUR
en_IL - EUR
en_IM - EUR
en_IN - INR
en_IO - INR
en_IT - INR
en_JE - INR
en_JM - INR
en_KE - INR
en_KI - INR
en_KN - INR
en_KY - INR
en_LB - INR
en_LC - INR
en_LK - INR
en_LR - INR
en_LS - INR
en_MG - INR
en_MH - INR
en_MP - INR
en_MS - INR
en_MT - INR
en_MU - INR
en_MW - INR
en_MY - INR
en_NA - INR
en_NF - INR
en_NG - NGN
en_NL - NGN
en_NR - NGN
en_NU - NGN
en_NZ - NZD
en_PA - NZD
en_PG - NZD
en_PH - PHP
en_PI - PHP
en_PK - PHP
en_PM - PHP
en_PN - PHP
en_PR - PHP
en_PW - PHP
en_RW - PHP
en_SB - PHP
en_SC - PHP
en_SG - SGD
en_SH - SGD
en_SL - SGD
en_SS - SGD
en_SZ - SGD
en_TA - SGD
en_TC - SGD
en_TK - SGD
en_TO - SGD
en_TT - SGD
en_TV - SGD
en_TZ - SGD
en_UD - SGD
en_UG - SGD
en_UM - SGD
en_US - USD
en_VC - USD
en_VG - USD
en_VI - USD
en_VU - USD
en_WS - USD
en_ZA - ZAR
en_ZM - ZAR
en_ZW - ZWD
eo - ZWD
eo_EO - ZWD
eo_SM - ZWD
es - ZWD
es_AD - ZWD
es_AR - ARS
es_BO - BOB
es_BZ - BOB
es_CL - CLP
es_CO - COP
es_CR - CRC
es_CU - CRC
es_DE - CRC
es_DO - DOP
es_EA - DOP
es_EC - USD
es_ES - EUR
es_GQ - EUR
es_GT - GTQ
es_HN - HNL
es_IC - HNL
es_LA - HNL
es_MA - HNL
es_MX - MXN
es_NI - NIO
es_PA - PAB
es_PE - PEN
es_PH - PEN
es_PR - USD
es_PY - PYG
es_SV - SVC
es_TT - SVC
es_US - USD
es_UY - UYU
es_VE - VEB
et - VEB
et_EE - EEK
et_FI - EEK
eu - EEK
eu_ES - EUR
eu_FR - EUR
fa - EUR
fa_AE - EUR
fa_AF - EUR
fa_IQ - EUR
fa_IR - IRR
fa_OM - IRR
fa_PK - IRR
fa_QA - IRR
fa_TJ - IRR
fan - IRR
fan_G - IRR
fb_LT - IRR
ff - IRR
ff_GN - IRR
ff_MR - IRR
ff_SN - IRR
ffm - IRR
ffm_M - IRR
fi - IRR
fi_FI - EUR
fi_RU - EUR
fi_SE - EUR
fil - EUR
fil_P - EUR
fj - EUR
fj_FJ - EUR
fo - EUR
fo_FO - DKK
fon - DKK
fon_B - DKK
fr - DKK
fr_AD - DKK
fr_BE - EUR
fr_BF - EUR
fr_BI - EUR
fr_BJ - EUR
fr_BL - EUR
fr_CA - CAD
fr_CD - CAD
fr_CF - CAD
fr_CG - CAD
fr_CH - CHF
fr_CI - CHF
fr_CM - CHF
fr_CP - CHF
fr_DJ - CHF
fr_DZ - CHF
fr_FR - EUR
fr_GA - EUR
fr_GB - EUR
fr_GF - EUR
fr_GN - EUR
fr_GP - EUR
fr_GQ - EUR
fr_HT - EUR
fr_IT - EUR
fr_KM - EUR
fr_LB - EUR
fr_LU - EUR
fr_MA - EUR
fr_MC - EUR
fr_MF - EUR
fr_MG - EUR
fr_ML - EUR
fr_MQ - EUR
fr_MR - EUR
fr_MU - EUR
fr_NC - EUR
fr_NE - EUR
fr_PF - EUR
fr_PM - EUR
fr_RE - EUR
fr_RW - EUR
fr_SC - EUR
fr_SN - EUR
fr_SY - EUR
fr_TD - EUR
fr_TF - EUR
fr_TG - EUR
fr_TN - EUR
fr_US - EUR
fr_VU - EUR
fr_WF - EUR
fr_YT - EUR
fud - EUR
fud_W - EUR
fuq - EUR
fuq_N - EUR
fur - EUR
fur_I - EUR
fuv - EUR
fuv_N - EUR
fy - EUR
fy_NL - EUR
ga - EUR
ga_GB - EUR
ga_IE - EUR
gaa - EUR
gaa_G - EUR
gag - EUR
gag_M - EUR
gbm - EUR
gbm_I - EUR
gcr - EUR
gcr_G - EUR
gd - EUR
gd_GB - GBP
ggn - GBP
ggn_N - GBP
gil - GBP
gil_K - GBP
gjk - GBP
gjk_P - GBP
gju - GBP
gju_P - GBP
gl - GBP
gl_ES - EUR
gl_PT - EUR
glk - EUR
glk_I - EUR
gn - EUR
gn_AR - EUR
gn_BO - EUR
gn_PY - EUR
gno - EUR
gno_I - EUR
gon - EUR
gon_I - EUR
gor - EUR
gor_I - EUR
gos - EUR
gos_N - EUR
grt - EUR
grt_B - EUR
grt_I - EUR
gsw - EUR
gsw_C - EUR
gsw_F - EUR
gsw_L - EUR
gu - EUR
gu_IN - INR
gu_KE - INR
gub - INR
gub_B - INR
guz - INR
guz_K - INR
gv - INR
gv_IM - INR
gvr - INR
gvr_N - INR
gwi - INR
gwi_C - INR
ha_Ar - INR
ha_La - INR
haw - INR
haw_U - INR
haz - INR
haz_A - INR
he - INR
he_IL - ILS
hi - ILS
hi_FJ - ILS
hi_IN - INR
hi_NP - INR
hi_UG - INR
hi_ZA - INR
hil - INR
hil_P - INR
hnd - INR
hnd_P - INR
hne - INR
hne_I - INR
hnn - INR
hnn_P - INR
hno - INR
hno_P - INR
ho - INR
ho_PG - INR
hoc - INR
hoc_I - INR
hoj - INR
hoj_I - INR
hr - INR
hr_AT - INR
hr_BA - INR
hr_DE - INR
hr_HR - HRK
hr_HU - HRK
hr_IT - HRK
ht - HRK
ht_HT - HTG
hu - HTG
hu_AT - HTG
hu_HU - HUF
hu_IL - HUF
hu_RO - HUF
hu_RS - HUF
hu_SI - HUF
hu_SK - HUF
hu_UA - HUF
hy - HUF
hy_AM - AMD
hy_CY - AMD
hy_GE - AMD
hy_IR - AMD
hy_LB - AMD
hy_SY - AMD
hy_TR - AMD
ia - AMD
ia_SE - AMD
ibb - AMD
ibb_N - AMD
id - AMD
id_ID - IDR
id_NL - IDR
ig - IDR
ig_NG - NGN
ii - NGN
ii_CN - NGN
ik - NGN
ik_US - NGN
ike - NGN
ike_C - NGN
ikt - NGN
ikt_C - NGN
iku - NGN
iku_C - NGN
ilo - NGN
ilo_P - NGN
inh - NGN
inh_R - NGN
is - NGN
is_IS - ISK
it - ISK
it_AU - ISK
it_BR - ISK
it_CA - ISK
it_CH - CHF
it_DE - CHF
it_FR - CHF
it_GB - CHF
it_HR - CHF
it_IT - EUR
it_SI - EUR
it_SM - EUR
it_US - EUR
it_VA - EUR
iu - EUR
iu_GL - EUR
ja - EUR
ja_BR - EUR
ja_JP - JPY
jmc - JPY
jmc_T - JPY
jml - JPY
jml_N - JPY
jv - JPY
jv_ID - JPY
jv_MY - JPY
ka - JPY
ka_GE - GEL
ka_IR - GEL
ka_TR - GEL
kaa - GEL
kaa_U - GEL
kab - GEL
kab_D - GEL
kaj - GEL
kaj_N - GEL
kam - GEL
kam_K - GEL
kao - GEL
kao_M - GEL
kbd - GEL
kbd_R - GEL
kbd_T - GEL
kcg - GEL
kcg_N - GEL
kck - GEL
kck_Z - GEL
kde - GEL
kde_T - GEL
kdt - GEL
kdt_K - GEL
kdt_L - GEL
kdt_T - GEL
kea - GEL
kea_C - GEL
kfo - GEL
kfo_C - GEL
kfr - GEL
kfr_I - GEL
kfy - GEL
kfy_I - GEL
kg - GEL
kg_CD - GEL
kge - GEL
kge_I - GEL
kgp - GEL
kgp_B - GEL
kha - GEL
kha_I - GEL
khb - GEL
khb_C - GEL
khn - GEL
khn_I - GEL
khq - GEL
khq_M - GEL
kht - GEL
kht_I - GEL
kht_M - GEL
khw - GEL
khw_P - GEL
ki - GEL
ki_KE - GEL
kj - GEL
kj_NA - GEL
kk_Ar - GEL
kk_Cy - GEL
kl - GEL
kl_DK - GEL
kl_GL - DKK
kln - DKK
kln_K - DKK
km - DKK
km_KH - KHR
kmb - KHR
kmb_A - KHR
kn - KHR
kn_IN - INR
ko - INR
ko_BR - INR
ko_CN - INR
ko_JP - INR
ko_KP - INR
ko_KR - KRW
ko_US - KRW
koi - KRW
koi_R - KRW
kok - KRW
kok_I - KRW
kos - KRW
kos_F - KRW
kpe - KRW
kpe_G - KRW
kpe_L - KRW
kpv - KRW
kpv_R - KRW
krc - KRW
krc_R - KRW
kri - KRW
kri_S - KRW
krl - KRW
krl_R - KRW
kru - KRW
kru_I - KRW
ks - KRW
ks_GB - KRW
ks_IN - INR
ks_PK - INR
ksb - INR
ksb_T - INR
ksh - INR
ksh_D - INR
ku_Ar - INR
ku_La - INR
ku_TR - TRY
kum - TRY
kum_R - TRY
kvr - TRY
kvr_I - TRY
kvx - TRY
kvx_P - TRY
kw - TRY
kw_GB - GBP
kxm - GBP
kxm_T - GBP
kxp - GBP
kxp_P - GBP
ky_Ar - GBP
ky_Cy - GBP
ky_La - GBP
la - GBP
la_VA - GBP
lag - GBP
lag_T - GBP
lah - GBP
lah_I - GBP
lah_P - GBP
laj - GBP
laj_U - GBP
lb - GBP
lb_LU - GBP
lbe - GBP
lbe_R - GBP
lbw - GBP
lbw_I - GBP
lcp - GBP
lcp_C - GBP
lcp_T - GBP
lep - GBP
lep_B - GBP
lep_I - GBP
lep_N - GBP
lez - GBP
lez_R - GBP
lg - GBP
lg_UG - UGX
li - UGX
li_NL - EUR
lif - EUR
lif_I - EUR
lif_N - EUR
lis - EUR
lis_C - EUR
ljp - EUR
ljp_I - EUR
lki - EUR
lki_I - EUR
lmn - EUR
lmn_I - EUR
lmo - EUR
lmo_C - EUR
ln - EUR
ln_CD - EUR
ln_CG - EUR
lo - EUR
lo_LA - LAK
lol - LAK
lol_C - LAK
lrc - LAK
lrc_I - LAK
lt - LAK
lt_LT - LTL
lu - LTL
lu_CD - LTL
lua - LTL
lua_C - LTL
luo - LTL
luo_K - LTL
luy - LTL
luy_K - LTL
luz - LTL
luz_I - LTL
lv - LTL
lv_LV - LVL
lwl - LVL
lwl_T - LVL
mad - LVL
mad_I - LVL
mag - LVL
mag_I - LVL
mai - LVL
mai_I - LVL
mai_N - LVL
mak - LVL
mak_I - LVL
mas - LVL
mas_K - LVL
mas_T - LVL
maz - LVL
maz_M - LVL
mdf - LVL
mdf_R - LVL
mdh - LVL
mdh_P - LVL
mdr - LVL
mdr_I - LVL
mdt - LVL
mdt_G - LVL
men - LVL
men_L - LVL
men_S - LVL
mer - LVL
mer_K - LVL
mfa - LVL
mfa_T - LVL
mfe - LVL
mfe_M - LVL
mg - LVL
mg_MG - MGA
mgp - MGA
mgp_N - MGA
mgy - MGA
mgy_I - MGA
mh - MGA
mh_MH - MGA
mhr - MGA
mhr_R - MGA
mi - MGA
mi_NZ - NZD
min - NZD
min_I - NZD
mk - NZD
mk_AL - NZD
mk_GR - NZD
mk_MK - MKD
ml - MKD
ml_AE - MKD
ml_BH - MKD
ml_GB - MKD
ml_IL - MKD
ml_IN - INR
ml_MY - INR
ml_QA - INR
ml_SG - INR
mn_Cy - INR
mn_Mo - INR
mni - INR
mni_B - INR
mni_I - INR
mnw - INR
mnw_M - INR
mnw_T - INR
moe - INR
moe_C - INR
mos - INR
mos_B - INR
mr - INR
mr_IN - INR
mrd - INR
mrd_N - INR
mrj - INR
mrj_R - INR
ms - INR
ms_BN - INR
ms_CC - INR
ms_ID - INR
ms_MY - MYR
ms_SG - MYR
mt - MYR
mt_MT - EUR
mtr - EUR
mtr_I - EUR
mup - EUR
mup_I - EUR
mvy - EUR
mvy_P - EUR
mwk - EUR
mwk_M - EUR
mwr - EUR
mwr_I - EUR
mxc - EUR
mxc_Z - EUR
my - EUR
my_BD - EUR
my_MM - MMK
myv - MMK
myv_R - MMK
myx - MMK
myx_U - MMK
na - MMK
na_NR - MMK
nap - MMK
nap_I - MMK
naq - MMK
naq_N - MMK
nb - MMK
nb_NO - NOK
nb_SJ - NOK
nbf - NOK
nbf_C - NOK
nch - NOK
nch_M - NOK
nd - NOK
nd_ZW - NOK
ndc - NOK
ndc_M - NOK
ndc_Z - NOK
nds - NOK
nds_D - NOK
ne - NOK
ne_BT - NOK
ne_IN - NOK
ne_NP - INR
new - INR
new_N - INR
ng - INR
ng_NA - INR
ngl - INR
ngl_M - INR
nhe - INR
nhe_M - INR
nhw - INR
nhw_M - INR
nij - INR
nij_I - INR
niu - INR
niu_N - INR
nl - INR
nl_AW - AWG
nl_BE - EUR
nl_DE - EUR
nl_FR - EUR
nl_NL - EUR
nl_SR - EUR
nn - EUR
nn_NO - NOK
nod - NOK
nod_T - NOK
noe - NOK
noe_I - NOK
nr - NOK
nr_ZA - ZAR
nsk - ZAR
nsk_C - ZAR
nso - ZAR
nso_Z - ZAR
nv - ZAR
nv_US - ZAR
ny - ZAR
ny_MW - ZAR
ny_MZ - ZAR
ny_ZM - ZAR
ny_ZW - ZAR
nym - ZAR
nym_T - ZAR
nyn - ZAR
nyn_U - ZAR
oc - ZAR
oc_FR - EUR
om - EUR
om_ET - ETB
om_KE - KES
om_SO - KES
or - KES
or_IN - INR
os - INR
os_GE - INR
pa_Ar - INR
pa_Gu - INR
pa_IN - INR
pag - INR
pag_P - INR
pam - INR
pam_P - INR
pap - INR
pap_A - INR
pau - INR
pau_P - INR
pko - INR
pko_K - INR
pl - INR
pl_CZ - INR
pl_DE - INR
pl_IL - INR
pl_PL - PLN
pl_RO - PLN
pl_SK - PLN
pl_UA - PLN
pon - PLN
pon_F - PLN
prd - PLN
prd_A - PLN
prd_I - PLN
ps - PLN
ps_AE - PLN
ps_AF - AFN
ps_IR - AFN
ps_PK - AFN
pt - AFN
pt_AG - AFN
pt_AO - AFN
pt_BR - BRL
pt_CV - BRL
pt_FR - BRL
pt_GW - BRL
pt_MO - BRL
pt_MZ - BRL
pt_PT - EUR
pt_ST - EUR
pt_TL - EUR
puu - EUR
puu_G - EUR
qu - EUR
qu_BO - EUR
qu_PE - EUR
rcf - EUR
rcf_R - EUR
rej - EUR
rej_I - EUR
ria - EUR
ria_I - EUR
rif - EUR
rif_M - EUR
rif_N - EUR
rjb - EUR
rjb_N - EUR
rm - EUR
rm_CH - EUR
rmf - EUR
rmf_F - EUR
rmo - EUR
rmo_C - EUR
rmt - EUR
rmt_I - EUR
rn - EUR
rn_BI - EUR
rng - EUR
rng_M - EUR
ro - EUR
ro_HU - EUR
ro_IL - EUR
ro_MD - EUR
ro_RO - RON
ro_RS - RON
ro_UA - RON
rof - RON
rof_T - RON
ru - RON
ru_BY - RON
ru_CN - RON
ru_DE - RON
ru_EE - RON
ru_FI - RON
ru_GE - RON
ru_IL - RON
ru_KG - RON
ru_KZ - RON
ru_LT - RON
ru_LV - RON
ru_MD - RON
ru_MN - RON
ru_RU - RUB
ru_SJ - RUB
ru_TM - RUB
ru_UA - UAH
ru_US - UAH
ru_UZ - UAH
rue - UAH
rue_U - UAH
rw - UAH
rw_CD - UAH
rw_RW - RWF
rw_UG - RWF
rwk - RWF
rwk_T - RWF
ryu - RWF
ryu_J - RWF
sa - RWF
sa_IN - INR
sah - INR
sah_R - INR
saq - INR
saq_K - INR
sas - INR
sas_I - INR
sat - INR
sat_I - INR
saz - INR
saz_I - INR
sck - INR
sck_I - INR
scn - INR
scn_I - INR
sco - INR
sco_G - INR
scs - INR
scs_C - INR
sd_Ar - INR
sd_De - INR
sdh - INR
sdh_I - INR
se - INR
se_FI - INR
se_NO - NOK
se_SE - NOK
sef - NOK
sef_C - NOK
seh - NOK
seh_M - NOK
ses - NOK
ses_M - NOK
sg - NOK
sg_CF - NOK
shi_L - NOK
shi_T - NOK
shn - NOK
shn_M - NOK
shn_T - NOK
si - NOK
si_LK - LKR
sid - LKR
sid_E - LKR
sk - LKR
sk_HU - LKR
sk_RS - LKR
sk_SK - EUR
skr - EUR
skr_P - EUR
sl - EUR
sl_AT - EUR
sl_HU - EUR
sl_IT - EUR
sl_SI - EUR
sm - EUR
sm_AS - EUR
sm_WS - EUR
sma - EUR
sma_S - EUR
smj - EUR
smj_S - EUR
smn - EUR
smn_F - EUR
sms - EUR
sms_F - EUR
sn - EUR
sn_ZW - EUR
snk - EUR
snk_M - EUR
so - EUR
so_DJ - DJF
so_ET - ETB
so_KE - ETB
so_SO - SOS
sou - SOS
sou_T - SOS
sq - SOS
sq_AL - ALL
sq_GR - ALL
sq_ME - ALL
sq_MK - MKD
sq_RS - MKD
sq_TR - MKD
sr_Cy - MKD
sr_La - MKD
sr_RS - RSD
srn - RSD
srn_S - RSD
srr - RSD
srr_S - RSD
srx - RSD
srx_I - RSD
ss - RSD
ss_LS - RSD
ss_SZ - RSD
ss_ZA - ZAR
ssy - ZAR
ssy_E - ZAR
st - ZAR
st_LS - ZAR
st_ZA - ZAR
su - ZAR
su_ID - ZAR
suk - ZAR
suk_T - ZAR
sus - ZAR
sus_G - ZAR
sv - ZAR
sv_AX - ZAR
sv_FI - EUR
sv_SE - SEK
sw - SEK
sw_BI - SEK
sw_CD - SEK
sw_KE - SEK
sw_MZ - SEK
sw_SO - SEK
sw_TZ - SEK
sw_UG - SEK
sw_YT - SEK
sw_ZA - SEK
swb - SEK
swb_Y - SEK
swv - SEK
swv_I - SEK
sxn - SEK
sxn_I - SEK
syi - SEK
syi_G - SEK
syl - SEK
syl_B - SEK
syl_G - SEK
syr - SEK
syr_S - SEK
ta - SEK
ta_IN - INR
ta_LK - INR
ta_MU - INR
ta_MY - INR
ta_RE - INR
ta_SG - INR
taj - INR
taj_N - INR
tbw - INR
tbw_P - INR
tcy - INR
tcy_I - INR
tdd - INR
tdd_C - INR
tdg - INR
tdg_N - INR
tdh - INR
tdh_N - INR
te - INR
te_IN - INR
tem - INR
tem_S - INR
teo - INR
teo_K - INR
teo_U - INR
tet - INR
tet_T - INR
tg_Ar - INR
tg_Cy - INR
th - INR
th_TH - THB
thl - THB
thl_N - THB
thq - THB
thq_N - THB
thr - THB
thr_N - THB
ti - THB
ti_ER - ERN
ti_ET - ETB
ti_IL - ETB
tig - ETB
tig_E - ETB
tiv - ETB
tiv_N - ETB
tk - ETB
tk_AF - ETB
tk_IR - ETB
tk_TM - TMM
tkl - TMM
tkl_T - TMM
tkt - TMM
tkt_N - TMM
tl - TMM
tl_PH - PHP
tl_US - PHP
tmh - PHP
tmh_M - PHP
tmh_N - PHP
tn - PHP
tn_BW - PHP
tn_NA - PHP
tn_ZA - ZAR
tn_ZW - ZAR
to - ZAR
to_TO - ZAR
tpi - ZAR
tpi_P - ZAR
tr - ZAR
tr_BG - ZAR
tr_CY - TRY
tr_DE - TRY
tr_GR - TRY
tr_MK - TRY
tr_NL - TRY
tr_RO - TRY
tr_TR - TRY
tr_UA - TRY
tr_UZ - TRY
trv - TRY
trv_T - TRY
ts - TRY
ts_MZ - TRY
ts_SZ - TRY
ts_ZA - ZAR
tsf - ZAR
tsf_N - ZAR
tsg - ZAR
tsg_P - ZAR
tsj - ZAR
tsj_B - ZAR
tt - ZAR
tt_RU - RUB
ttj - RUB
ttj_U - RUB
tts - RUB
tts_T - RUB
tum - RUB
tum_M - RUB
tvl - RUB
tvl_T - RUB
twq - RUB
twq_N - RUB
ty - RUB
ty_PF - RUB
tyv - RUB
tyv_R - RUB
tzm - RUB
tzm_M - RUB
udm - RUB
udm_R - RUB
ug_Ar - RUB
ug_Cy - RUB
uk - RUB
uk_PL - RUB
uk_SK - RUB
uk_UA - UAH
uli - UAH
uli_F - UAH
umb - UAH
umb_A - UAH
unr - UAH
unr_I - UAH
unr_N - UAH
unx - UAH
unx_I - UAH
ur - UAH
ur_IN - UAH
ur_MU - UAH
ur_PK - PKR
uz_Ar - PKR
uz_Cy - PKR
uz_La - PKR
vai - PKR
vai_L - PKR
ve - PKR
ve_ZA - ZAR
ve_ZW - ZAR
vi - ZAR
vi_CN - ZAR
vi_US - ZAR
vi_VN - VND
vmw - VND
vmw_M - VND
vun - VND
vun_T - VND
wa - VND
wa_BE - EUR
wae - EUR
wae_C - EUR
wae_L - EUR
wal - EUR
wal_E - EUR
war - EUR
war_P - EUR
wbq - EUR
wbq_I - EUR
wbr - EUR
wbr_I - EUR
wls - EUR
wls_W - EUR
wo_La - EUR
wtm - EUR
wtm_I - EUR
xav - EUR
xav_B - EUR
xh - EUR
xh_LS - EUR
xh_ZA - ZAR
xnr - ZAR
xnr_I - ZAR
xog - ZAR
xog_U - ZAR
xsl - ZAR
xsl_C - ZAR
xsr - ZAR
xsr_N - ZAR
yao - ZAR
yao_M - ZAR
yap - ZAR
yap_F - ZAR
yi - ZAR
yi_UA - ZAR
yo - ZAR
yo_BJ - ZAR
yo_NG - NGN
yua - NGN
yua_M - NGN
za - NGN
za_CN - NGN
zdj - NGN
zdj_K - NGN
zea - NGN
zea_N - NGN
zh_CN - CNY
zh_Ha - CNY
zh_HK - HKD
zh_TW - TWD
zmi - TWD
zmi_M - TWD
zu - TWD
zu_LS - TWD
zu_MW - TWD
zu_MZ - TWD
zu_SZ - TWD
zu_ZA - ZAR
Upvotes: 5
Reputation: 16324
For your specific question, you can first convert the 3 letter ISO 4217 currency code to a 2 letter ISO 3166-1 alpha-2 country code and match the country code against a list of POSIX locales, recognizing that multiple locales with multiple languages may match.
For your more general question, why do you want to set the locale based on currency? One currency can map to many locales and languages, and also a person in a single locale may want to look at different currencies. While es_US
is a supported locale, there may be other combinations that are not. Would it not be better to have them set independently?
Mapping of Currency to Country Codes
To convert ISO 4217 currency codes to ISO 3166 country codes, you can use the Open Knowledge Foundation conversion tables referenced below which come in JSON and CSV format:
HTML: http://data.okfn.org/data/core/country-codes
JSON: http://data.okfn.org/data/core/country-codes/r/country-codes.json
CSV: https://raw.githubusercontent.com/datasets/country-codes/master/data/country-codes.csv
POSIX Locales List
To convert ISO 3166 country codes to POSIX Locales, you can use a locale list to find locales with matching country codes. A list of locales is available in the following location on Linux systems:
/usr/share/i18n/SUPPORTED
This has also been posted to StackOverflow here:
List of All Locales and Their Short Codes?
More Information
ISO Currency Codes: http://www.iso.org/iso/home/standards/currency_codes.htm
Upvotes: 2