我只是不明白。有一个网站仅支持英语和德语。并且用户可以选择指定其国家/地区,以便日期,数字和其他特定于语言环境的数据以适当的格式显示。
Locale构建为Locale locale = new Locale(lang, country)
。日期格式如下:
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
System.out.println("Date " + df.format(calendar.getTime()));
今天是26 Nov 2013
,以下是人们根据自己的国家和所选语言看到的内容:
11/26/13
看到一位来自美国的人正在查看英文页面,区域设置en_US
,确定。26/11/13
看到一位来自英国的人正在查看英文页面,区域设置en_GB
,确定。11/26/13
看到来自法国的人查看英文页面,区域设置en_FR
,错误。后者应该看26/11/13
(法国人在这里同意我),因为日期格式是特定国家的,不是吗?我在这里缺少什么?
更新 问题很简单:为什么Locale(“en”,“FR”)产生错误的日期格式?
更新2 我很感激,如果有人能够解释(作为一个答案),为什么Java在日期格式方面没有考虑到这个国家,(在我的POV中)纯粹是针对特定国家的。
答案 0 :(得分:4)
英语在法国不是官方语言,因此在法国的任何JVM中都没有针对英语的特定设置。结果,您的语言环境将更改为英语(en
,默认实现为en_US
)。 Here你可以找到完整的解释。
Here您可以找到JDK 7和JRE 7中支持的所有语言环境,并且没有en_FR
个语言环境。
更新2 如果有人可以解释(作为答案)为什么Java在日期格式方面没有考虑到国家,我会很感激,(在我的POV中)纯粹是针对特定国家的。
日期格式可能是特定国家/地区,但您创建的是预定义的Locale
对象(不是动态创建的)。如果JVM没有实现区域设置en_FR
,则它不能返回Locale
,这是partialy-English-partialy-French的混合。它只返回一些指定的对象 - 最接近的对象是en
。这就是它的实施方式。如果它返回fr
,那么用户可能会觉得不舒服,因为他想以某种English
方言显示页面。
答案 1 :(得分:2)
用于查找特定于语言环境的对象的LocaleServiceProviderPool
最终使用java.util.Locale#equals
来确定它是否匹配。它没有区分“只关心语言”或“只关心国家”的功能。法国没有为英语预先定义,所以它恢复为默认。
答案 2 :(得分:-3)
我认为法国的正确语言环境是fr_FR