我的系统语言环境设置为德语,我在创建Spring上下文之前将运行Spring Boot应用程序的JVM的默认语言环境设置为英语,这样用户默认会收到英文消息:
public static void main(final String[] args) {
Locale.setDefault(Locale.US);
SpringApplication.run(App.class, args);
}
我在application.properties文件中配置了MessageSource
basename:spring.messages.basename=i18n/messages
i18n
文件夹包含两个文件(messages.properties
和messages_de.properties
)。
当我向服务器发出请求时,我的浏览器会发送此标题:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Cookie:JSESSIONID=0F053562F8BE45E24489097E5B7A1F0C
Host:localhost:8080
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
并获得以下标题:
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Content-Language:de-DE
Content-Type:text/html;charset=UTF-8
Date:Tue, 06 Oct 2015 07:50:59 GMT
Expires:0
Pragma:no-cache
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
X-Content-Type-Options:nosniff
X-Frame-Options:DENY
X-XSS-Protection:1; mode=block
但网站上的消息仍然是英文的。显然,Spring根据请求标头解析了正确的区域设置。那么为什么它不加载来自德语文件的消息呢?
更新
我在CommandLineRunner
中进行了快速测试:
@Autowired
private MessageSource messageSource;
@Override
public void run(final String... args) throws Exception {
System.out.println("********************************************************************************");
System.out.println("* *");
System.out.format("* Englisch: %-13s *\n",
messageSource.getMessage("views.menu.settings", args, Locale.US));
System.out.format("* Deutsch : %-13s *\n",
messageSource.getMessage("views.menu.settings", args, Locale.GERMANY));
System.out.format("* China : %-13s *\n",
messageSource.getMessage("views.menu.settings", args, Locale.CHINA));
System.out.println("* *");
System.out.println("********************************************************************************");
}
预期输出
********************************************************************************
* *
* Englisch: Settings *
* Deutsch : Einstellungen *
* China : Settings *
* *
********************************************************************************
但我得到了
********************************************************************************
* *
* Englisch: Settings *
* Deutsch : Settings *
* China : Settings *
* *
********************************************************************************