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 |
将
1 | msgSrc.setBasename("classpath:i18n/messages"); |