Java Spring国际化(i18n)问题

时间:2018-09-13 20:47:06

标签: java spring spring-mvc internationalization thymeleaf

我正在尝试学习使用Java Spring开发多语言网站。 看完一些教程后,我了解了它的工作原理。 但似乎我在犯一些错误。

项目结构:

src
   └───  main
       ├───  java
       │   └───  com
       │       └───  example_project
       │           └───  config
       │               └─── WebMvcConfig
       └───  resources
           ├───  i18n
           │   ├─── messages_en.properties
           │   └─── messages_fr.properties
           ├───  static
           └───  templates

WebMvcConfig.java

@EnableWebMvc
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

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

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

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

LandingController.java

@Controller
public class LandingController {

    @Layout("layout/default")
    @GetMapping("/")
    public String index() { return "index"; }

}

index.html

<div th:fragment="content">
    <ul>
        <li><a th:href="@{/?lang=en}"><img src="/assets/images/en.png"></a></li>
        <li><a th:href="@{/?lang=fr}"><img src="/assets/images/fr.png"></a></li>
    </ul>
    <p th:text="#{hello}"></p>
</div>

当我单击“ fr”链接时,它仅加载“ en”属性文件,而不重新加载“ fr”属性文件。

我不明白问题出在哪里。

1 个答案:

答案 0 :(得分:0)

您的MessageSource在两个属性文件中都找不到键为“ hello”的消息。如果消息源无法在fr属性中找到消息,它将从en中返回消息。 请确保您在两个文件中都定义了该消息

  • messages_en.properties

hello =您好!

  • messages_fr.properties

hello =你好在fr