6

Ho queste righe di codice:Esiste un modo per conoscere la lingua per impostazione predefinita in base al paese nelle impostazioni internazionali?

Locale[] cosas = Locale.getAvailableLocales(); 

for (int i = 0; i < cosas.length; i++) { 
    log.info(cosas[i]); 
} 

ottengo questa lista:

ms_MY 
ar_QA 
is_IS 
fi_FI 
pl 
en_MT 
it_CH 
nl_BE 
ar_SA 
ar_IQ 
es_PR 
es_CL 
fi 
de_AT 
da 
en_GB 
es_PA 
sr 
ar_YE 
mk_MK 
mk 
en_CA 
vi_VN 
nl_NL 
es_US 
zh_CN 
es_HN 
en_US 
fr 
th 
ar 
ar_MA 
lv 
de 
in_ID 
hr 
en_ZA 
ko_KR 
ar_TN 
in 
ja 
sr_RS 
be_BY 
zh_TW 
ar_SD 
pt 
is 
ja_JP_JP_#u-ca-japanese 
es_BO 
ar_DZ 
ms 
es_AR 
ar_AE 
fr_CA 
sl 
es 
lt_LT 
sr_ME_#Latn 
ar_SY 
ru_RU 
fr_BE 
es_ES 
bg 
iw_IL 
sv 
en 
iw 
da_DK 
es_CR 
zh_HK 
zh 
ca_ES 
th_TH 
uk_UA 
es_DO 
es_VE 
pl_PL 
ar_LY 
ar_JO 
it 
uk 
hu_HU 
ga 
es_GT 
es_PY 
bg_BG 
hr_HR 
sr_BA_#Latn 
ro_RO 
fr_LU 
no 
lt 
en_SG 
es_EC 
sr_BA 
es_NI 
sk 
ru 
mt 
es_SV 
nl 
hi_IN 
et 
el_GR 
sl_SI 
it_IT 
ja_JP 
de_LU 
fr_CH 
mt_MT 
ar_BH 
sq 
vi 
sr_ME 
pt_BR 
no_NO 
el 
de_CH 
zh_SG 
ar_KW 
ar_EG 
ga_IE 
es_PE 
cs_CZ 
tr_TR 
cs 
es_UY 
en_IE 
en_IN 
ar_OM 
sr_CS 
ca 
be 
sr__#Latn 
ko 
sq_AL 
pt_PT 
lv_LV 
sr_RS_#Latn 
sk_SK 
es_MX 
en_AU 
no_NO_NY 
en_NZ 
sv_SE 
ro 
ar_LB 
de_DE 
th_TH_TH_#u-nu-thai 
tr 
es_CO 
en_PH 
et_EE 
el_CY 
hu 
fr_FR 

Ad esempio, per la Spagna come un paese, l'elenco contiene due locali: es_ES e ca_ES, che non è lo stesso per la lingua spagnola, ovviamente.

Quindi, la mia domanda è: come faccio a sapere qual è la lingua predefinita per un paese? E 'possibile costruire il locale solo con la lingua, ma ho bisogno di passare dal parametro per il metodo solo il paese e ora ho questo codice per assegnare una lingua di default:

if (language.equals("")) { 
    switch (country) { 
     case "CN": 
      language = "zh"; 
      break; 
     case "ES": 
      language = "es"; 
      break; 
     case "US": 
      language = "en"; 
      break; 
     case "JP": 
      language = "ja"; 
      break; 
     default: 
      country = ""; 
      break; 
     } 
    } 

if (language.equals("") && country.equals("")) { 
    newLocale = new Locale("es", "ES"); 
} else { 
    newLocale = new Locale(language, country); 
} 

RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME, newLocale); 

ma ho bisogno di estendere questo interruttore per molte altre lingue. Quindi, preferisco avere un modo chiaro per assegnare la lingua di default per un paese.

Ho trovato una soluzione su questo link, ma l'ho provata e non è corretta (ad esempio, per la Spagna, restituisce come predefinito CA-ES e non lo è). Qualcuno pensa che sia davvero possibile ottenere il paese per codice? Qualche idea? Grazie mille.

+3

Cosa intendi per "lingua predefinita"? Se vengono parlate più lingue in un paese, raramente una lingua è definita come predefinita o superiore. Se si intende la lingua più utilizzata, non ci sono dati per questo nel supporto di localizzazione in Java. – jarnbjo

+0

Bene, questo non è per Paese, ma per ** utente ** guarda su ['Locale.getDefault()'] (http://docs.oracle.com/javase/7/docs/api/java/util/ Locale.html # getDefault% 28% 29). –

risposta

0

Deve essere java? Ho creato un piccolo exe in C++ che potresti trovare utile: KyaaLocale, puoi personalizzarlo come vuoi, aggiungendo altro if/then/else s o qualsiasi altra cosa tu abbia bisogno.

+0

Grazie, @Kyousuke Kyaa. Sì, ho bisogno che sia codice Java. Ho dato un'occhiata al tuo e penso che non sia possibile trasformarlo in codice Java, quindi ho bisogno di un'altra soluzione. – ovejaexiste

0

È possibile ottenere la lingua per un locale come questo:

String lang = Locale.getDefault().getISO3Language(); 

Si può anche ottenere il paese per un locale:

String country = Locale.getDefault().getISO3Country(); 

Molti paesi hanno più di una lingua. Ad esempio, c'è un locale canadese francese e canadese inglese.

Non esiste una lingua "predefinita" per nessun Paese. La JVM utilizzerà il locale predefinito della macchina su cui è acceso, ma la lingua e il paese possono anche essere impostati utilizzando le variabili -Duser.country -Duser.language.

È anche possibile modificare le impostazioni locali predefinite a livello di programmazione utilizzando combinazioni arbitrarie di Paese e lingua. Ad esempio, questo funziona:

Locale l = new Locale("Ca", "Cyrl"); 
    Locale.setDefault(l); 
Problemi correlati