关于Java:使用i18n(国际化)和百里香叶的Spring Boot

Spring boot with i18n (internationalization) and thymeleaf

我正在尝试让i18n与我的spring boot应用程序一起使用,该应用程序使用thymeleaf作为模板引擎。

我遵循了一些教程,这些教程向我展示了如何定义消息源和语言环境解析器,因此我创建了此配置类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@Configuration
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter {

    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource msgSrc = new ReloadableResourceBundleMessageSource();
        msgSrc.setBasename("i18n/messages");
        msgSrc.setDefaultEncoding("UTF-8");
        return msgSrc;
    }

    @Bean
    public LocaleResolver localeResolver() {
        CookieLocaleResolver resolver = new CookieLocaleResolver();
        resolver.setDefaultLocale(new Locale("en"));
        resolver.setCookieName("myI18N_cookie");
        return resolver;
    }

    @Override
    public void addInterceptors(InterceptorRegistry reg) {
        LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
        interceptor.setParamName("locale");
        reg.addInterceptor(interceptor);
    }

}

然后,在我的资源文件夹(src / main / resources)中,创建文件夹i18n,并在其中放置messages.properties和messages_sl.properties

里面定义了first.greeting = Hello World!

这是我的百里香模板:

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" th:with="lang=${#locale.language}" th:lang="${lang}">
    <head>
        <meta charset="UTF-8"/>
    </head>
    <body>
        English | Slovenian
        <h3 th:text="#{first.greeting}">
    </body>
</html>

我的控制器没什么特别的,当我访问它并在我定义的属性文件中时,它只是转发该视图:

1
2
spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.cache=false

但是,当我加载页面时,而不是Hello World! 我得到了" first.greeting_en" 或" first.greeting_sl",具体取决于设置的语言环境。

我到处看的地方看到的都是相同的配置,所以我真的迷失了我所缺少的东西。

这是我的项目结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
?? src
   └─── ?? main
       ├─── ?? java
       │   └─── ?? com
       │       └─── ?? mjamsek
       │           └─── ?? Simple_i18n
       │               ├─── ?? conf
       │               └─── ?? controller
       └─── ?? resources
           ├─── ?? i18n
           │   ├─── messages.properties
           │   └─── messages_sl.properties
           ├─── ?? static
           └─── ?? templates

classpath:前缀添加到MessageSource's基本名称

1
msgSrc.setBasename("classpath:i18n/messages");