Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 日本皇家历法和地点_Java_Servlets_Calendar_Locale - Fatal编程技术网

Java 日本皇家历法和地点

Java 日本皇家历法和地点,java,servlets,calendar,locale,Java,Servlets,Calendar,Locale,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); Sy

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));
它成功地显示了日本皇历而不是公历


现在,我的问题是:用户如何设置浏览器,例如Chrome,以便
request.getLocale()
返回
Locale(“ja”、“JP”、“JP”)
?我试图添加日语,但仍然获得了GregoriaCalendar。

来自
私有静态日历createCalendar(时区,语言环境aLocale)
(调用
getCalendar(语言环境)
时在内部调用的方法:

正如您在第二部分中所看到的,区域设置需要有country=JP、language=ja和variant=JP,即
ja\u JP\u JP
的区域设置字符串

问题是,浏览器似乎不直接支持在语言设置中设置国家和变体,因此您可能不得不根据自己的需要推断:

  • 如果语言为
    ja
    则假定国家和变体均为
    JP
  • 使用某种形式的地理位置来获取浏览器位置,如果浏览器位于日本,则将国家/地区和变体设置为
    JP
  • 让用户选择,即从语言开始,让用户选择他们想要使用的日历类型

我不确定日历是否取决于地区的语言部分,而是取决于国家/地区部分。您是否尝试将浏览器设置为使用
ja_-JP
或甚至
ja_-JP
?@Thomas我试图在Chrome中更改国家,但意识到我唯一可以更改的是语言。我错过了什么吗?嗯,我不是s您可以这样做,或者如何做。作为一种解决方法,您可以检查语言,如果是日语,请自己提供国家和变体,即将
ja
转换为
ja\u JP
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);
   }
}