spring - 为什么我需要 Spring Boot `messages.properties` 而不仅仅是 `messages_en.properties`?
问题描述
我正在关注本指南,它说将默认消息文件命名为messages.properties
. 为什么我不能命名它messages_en.properties
并将默认语言环境设置为英语?
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.ENGLISH);
return slr;
}
这不起作用(每次message.properties
重命名时都必须硬停止并重新启动服务器 - 动态重新加载无法获取更改)。它会打印出default
带有标签的文本,<spring:message code="oops" text="default"/>
因为它找不到messages_en.properties
.
事实上,当我将浏览器默认语言设置为 French and havemessages_fr.properties
并重新启动服务器时,它也找不到法语的密钥。
不使用百里香叶。无需允许用户选择语言。
参考:https ://docs.spring.io/spring-boot/docs/1.5.17.RELEASE/reference/htmlsingle/ (仅世界“国际化”的一个实例,仅与应用程序属性有关)。
解决方案
我改用它来修复它AcceptHeaderLocaleResolver
。
@Bean
public LocaleResolver localeResolver() {
AcceptHeaderLocaleResolver ahlr = new AcceptHeaderLocaleResolver();
ahlr.setDefaultLocale(Locale.ENGLISH);
return ahlr;
}
我以为指南说它将在会话、cookie 或标头中搜索语言环境,但他们只是说不同的子类分别实现这些功能。
LocaleResolver 接口具有根据会话、cookie、Accept-Language 标头或固定值确定当前语言环境的实现。
我通过设置此应用程序属性修复了实时重新加载问题,至少用于调试:
spring.messages.cache-seconds=1
我还设置了此属性,以免弄乱我的src/main/resources
文件夹,因此我可以将所有消息文件移动到locales/
子目录中。
spring.messages.basename=locales/messages
推荐阅读
- python-3.x - 如何告诉`ipywidgets.interactive`,它应该只考虑特定参数作为小部件?
- c++ - 不按特定顺序跳过多个循环(C++)
- azure - 如何结合 AD B2C(MSAL) 和 CosmosDB
- java - 在 Java/Groovy 中,catch(e) 是 catch(Exception e) 的简写吗?
- laravel - Laravel - 根据 id 从另一个表中获取数据
- ruby-on-rails - 用复杂的计算函数更新rails数据库整列
- sql-server - 尽管添加了 WHERE IS NULL 子句,但我的 NULL 记录没有显示
- sql - 在购买另一个产品后找到购买另一个产品的客户
- reactjs - 当用户使用反应单击删除按钮时,如何停止正在进行的上传文件方法?
- android - 从扫描活动中获取结果后在片段中设置编辑文本