6

我有几行代码:有没有什么方法可以通过国家/地区的默认设置来了解语言?

Locale[] cosas = Locale.getAvailableLocales(); 

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

我获得这个名单:

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 

例如,西班牙作为一个国家,该列表包含两个语言环境:es_ES和ca_ES,不是当然,西班牙语也一样。

然后,我的问题是,我怎么能知道哪一个是默认情况下,一个国家的语言?有可能只是通过语言来构建的语言环境,但我需要通过参数来传递的方法只有国家,现在我有这样的代码在默认情况下指派语言:

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

但我需要扩展这个开关为更多的语言。所以,我宁愿有一个明确的方式来为一个国家默认分配语言。

我发现了这个link的解决方案,但我试了一下,它是不正确的(例如,对于西班牙,它作为默认ca-ES返回,而不是)。有人认为通过代码获得国家真的有可能吗?任何想法?非常感谢。

+3

你是什么意思的“默认语言”?如果在一个国家讲更多的语言,很少有一种语言被定义为默认或更优。如果您的意思是使用最广泛的语言,那么Java中的本地化支持中没有这方面的数据。 – jarnbjo

+0

好吧,这不是按国家,而是由**用户**看看['Locale.getDefault()'](http://docs.oracle.com/javase/7/docs/api/java/util/ Locale.html#getDefault%28%29)。 –

回答

0

它必须是java吗?我做了C++中的小EXE,你可能会发现有用:KyaaLocale,你可以自定义它,只要你想,加入了更多if/then/else S或任何你需要的。

+0

谢谢,@Kyousuke Kyaa。是的,我需要它是Java代码。我看了你的,我认为它不可能转换成Java代码,所以我需要另一种解决方案。 – ovejaexiste

0

你可以得到的语言像这样的区域:

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

您还可以得到国家的语言环境:

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

许多国家有一种以上的语言。例如,有一个加拿大法语和加拿大英语区域设置。

确实没有任何一个国家的“默认”的语言。 JVM将使用默认的本地机器的是对的,但语言和国家也可以使用-Duser.country -Duser.language变量进行设置。

您也可以以编程方式使用的国家和语言的任意组合更改默认的语言环境。例如,这可以工作:

Locale l = new Locale("Ca", "Cyrl"); 
    Locale.setDefault(l); 
相关问题