我在使用 Thymeleaf 设置 Spring MVC(不使用 Boot,因为我在发现 Spring Initializr 之前启动了它)以显示来自我的资源包的消息时遇到了问题。
该应用程序的主要配置类是:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "b.c.m.h")
public class HrmConfiguration extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setTemplateMode("HTML5");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setPrefix("/WEB-INF/html/");
templateResolver.setSuffix(".html");
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.addDialect(new SpringSecurityDialect());
engine.addDialect(new LayoutDialect(new GroupingStrategy()));
engine.setTemplateResolver(templateResolver);
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(engine);
viewResolver.setCache(false);
return viewResolver;
}
@Bean(name = "messageSource")
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("/i18n/messages");
messageSource.setFallbackToSystemLocale(false);
messageSource.setCacheSeconds(0);
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean(name="localeResolver")
public LocaleResolver localeResolver(){
SessionLocaleResolver resolver = new SessionLocaleResolver();
resolver.setDefaultLocale(new Locale("pt", "BR"));
return resolver;
}
@Bean
public UrlTemplateResolver urlTemplateResolver() {
return new UrlTemplateResolver();
}
// other beans and configs
}
该应用程序的总体视图是:
messages_pt_BR.properties 文件是:
#messages
spring.messages.basename=i18n/messages
app.name=APPLICATION NAME
但是,当我尝试展示APPLICATION NAME
页面上的某处,带有以下内容:
<p th:text="#{app.name}">app.name</p>
我只得到
??app.name_pt_BR??
我浏览了许多可能的解决方案和教程,包括:
Spring boot + Thymeleaf 中的 I18n https://stackoverflow.com/questions/36531131/i18n-in-spring-boot-thymeleaf
http://www.concretepage.com/spring-4/spring-4-mvc-internationalization-i18n-and-localization-l10n-annotation-example http://www.concretepage.com/spring-4/spring-4-mvc-internationalization-i18n-and-localization-l10n-annotation-example
如何在Thymeleaf和Spring Boot中显示消息? https://stackoverflow.com/questions/29532172/how-to-display-messages-in-thymeleaf-and-spring-boot
我仍然无法让它工作。
浏览器和操作系统设置为区域设置 en_US。
如何解决这个问题?
在这里使用 Spring Boot,但我能够重现您的问题,并且它与ReloadableResourceBundleMessageSource
一旦我把它改成ResourceBundleMessageSource
它像它应该的那样工作。
@Bean(name = "messageSource")
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("/i18n/messages");
messageSource.setFallbackToSystemLocale(false);
messageSource.setCacheSeconds(0);
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
Update:
发现您需要为 ReloadableReourceBundleMessageSource 提供完整路径,因此如果您的/il8n
目录位于您的类路径中,您需要将基本名称设置为classpath:/il8n/messages
请参阅我的帖子:为什么 Thymeleaf International 只能与 ResourceBundleMessageSource 配合使用 https://stackoverflow.com/questions/36816274
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)