我正在尝试学习使用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”属性文件。
我不明白问题出在哪里。
答案 0 :(得分:0)
您的MessageSource在两个属性文件中都找不到键为“ hello”的消息。如果消息源无法在fr属性中找到消息,它将从en中返回消息。 请确保您在两个文件中都定义了该消息
hello =您好!
hello =你好在fr