ServeltRequest有一个getLocale()方法,定义是:
Returns the preferred Locale that the client will accept content in, based on the Accept-Language header.
我写了以下简单的程序:
Locale loc = new Locale("ja", "JP", "JP");
Calendar calendar = Calendar.getInstance(loc);
System.out.println(calendar.get(calendar.YEAR));
它成功地显示了日本帝国日历而不是GregorianCalendar。
现在,我的问题是:用户如何设置他的浏览器,例如Chrome以便request.getLocale()
返回Locale("ja", "JP", "JP")
?我试图添加日语,但我仍然得到了GregorianCalendar。
答案 0 :(得分:1)
来自private static Calendar createCalendar(TimeZone zone, Locale aLocale)
的来源(您致电getCalendar(locale)
时内部调用的方法:
if (aLocale.hasExtensions()) {
String caltype = aLocale.getUnicodeLocaleType("ca");
if (caltype != null) {
switch (caltype) {
...
case "japanese":
cal = new JapaneseImperialCalendar(zone, aLocale);
break;
...
}
}
}
if (cal == null) {
...
if (aLocale.getVariant() == "JP" && aLocale.getLanguage() == "ja"
&& aLocale.getCountry() == "JP") {
cal = new JapaneseImperialCalendar(zone, aLocale);
} else {
cal = new GregorianCalendar(zone, aLocale);
}
}
正如您在第二部分中所看到的,语言环境需要country = JP,language = ja和variant = JP,即语言环境字符串ja_JP_JP
。
问题是浏览器似乎不直接支持在语言设置中设置国家/地区和变体,因此您可能必须自己推断 - 根据您的需要:
ja
,则假定国家/地区和变体均为JP
JP