为什么Spring Boot没有加载我的翻译?

时间:2015-10-06 08:07:10

标签: java spring spring-boot

我的系统语言环境设置为德语,我在创建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.propertiesmessages_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                                                           *
*                                                                              *
********************************************************************************

0 个答案:

没有答案