Discuss / Java / locale查找顺序, 未添加messages_en.properties无法使用默认配置的问题

locale查找顺序, 未添加messages_en.properties无法使用默认配置的问题

Topic source

Best of Me

#1 Created at ... [Delete] [Delete and Lock User]

问题:

老师的作业,在我这边打开是无法显示英语的。

解决办法:

在main方法下添加一段代码:

Locale.setDefault(Locale.ENGLISH);

p.s.其他方法是如评论所说加一个messages_en.properties文件,但我奇怪为什么当en配置不存在时,不能从默认配置messages.properties里面读

分析:

当用户第一次访问网站时,`CookieLocaleResolver`只能从HTTP头获取`Locale`,即使用浏览器的默认语言。

我的请求头是Accept-Language: en,没问题;但是LocaleResolver 要解析为locale时发现对应的messages_en.properties不存在。如果请求头中没有指定 Locale,则会返回默认的 Locale,但是我指定却不存在的locale。这个时候,Spring MVC的 LocaleResolver 的自动实现类AcceptHeaderLocaleResolver 会使用 Java 虚拟机默认的 Locale 作为默认 Locale,通常是根据操作系统的语言环境来确定的。(我这边是中文);

上面是在main方法修改了web应用系统的默认语言环境,就会不受操作系统环境影响。

总结:
所以这里是根据locale优先级去设置默认语言环境。找不到messages_en.properties条件下,locale查找优先级顺序是 web应用语言环境>系统语言环境(如果存在对应语言配置文件)>(前两者都不满足)默认配置文件messages.properties;

实践中,我想,为了本土化,应该不太可能设置web应用的默认语言环境;为了保证正确性可以添加一个messages_en.properties的文件。那这个主文件的作用呢?是在当找不到与客户端语言环境相对应的消息资源文件,会自动回退到主文件(即英文文件)中查找消息文本。(比如小语种的客户端)


  • 1

Reply