6

mam te wiersze kodu:Czy istnieje jakiś sposób domyślnego określenia języka według kraju w ustawieniach regionalnych?

Locale[] cosas = Locale.getAvailableLocales(); 

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

mogę uzyskać tę listę:

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 

na przykład do Hiszpanii jako kraju, lista zawiera dwie lokalizacje: es_ES i ca_ES, że nie jest to samo dotyczy języka hiszpańskiego.

Następnie, moje pytanie brzmi: skąd mogę wiedzieć, który z nich jest językiem domyślnym dla danego kraju? Jest to możliwe do skonstruowania locale tylko przez język, ale muszę przejść przez parametr dla metody tylko kraj i teraz mam ten kod do Przypisywanie języka domyślnie:

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); 

Ale muszę przedłużyć ten przełącznik dla wielu języków więcej. Tak więc wolę mieć jasny sposób domyślnego przypisywania języka do kraju.

Dowiedziałem się o rozwiązaniu tego link, ale wypróbowałem to i nie jest to właściwe (na przykład dla Hiszpanii, zwraca jako domyślny ca-ES, a nie jest). Czy ktokolwiek myśli, że jest naprawdę możliwe uzyskanie kraju przez kod? Dowolny pomysł? Dziękuję bardzo.

+3

Co masz na myśli przez "domyślny język"? Jeśli w jednym kraju używanych jest więcej języków, rzadko definiuje się jeden język jako domyślny lub lepszy. Jeśli masz na myśli najczęściej używany język, nie ma w nim danych dotyczących obsługi lokalizacji w Javie. – jarnbjo

+0

Cóż, nie jest to kraj, ale ** użytkownik ** szuka ['Locale.getDefault()'] (http://docs.oracle.com/javase/7/docs/api/java/util/ Locale.html # getDefault% 28% 29). –

Odpowiedz

0

Czy to musi być java? Zrobiłem mały exe w języku C++, który może ci się przydać: KyaaLocale, możesz go dostosować, jak chcesz, dodając więcej if/then/else s lub czegokolwiek, czego potrzebujesz.

+0

Dziękuję, @ ​​Kiyuke Kyaa. Tak, potrzebuję tego kodu Java. Spojrzałem na twoje i myślę, że nie można go przekształcić na kod Java, więc potrzebuję innego rozwiązania. – ovejaexiste

0

można dostać się języka dla lokalizacji takich jak to:

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

Można również uzyskać kraj dla lokalizacji:

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

Wiele krajów ma więcej niż jeden język. Na przykład jest kanadyjski francuski i kanadyjski angielski.

Nie ma naprawdę "domyślnego" języka dla żadnego kraju. JVM użyje domyślnego lokalnego komputera, na którym się znajduje, ale język i kraj można również ustawić za pomocą zmiennych -Duser.country -Duser.language.

Można również domyślnie zmienić domyślne ustawienia regionalne za pomocą dowolnych kombinacji kraju i języka. Na przykład działa to:

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