gpt4 book ai didi

java - Thymeleaf + Spring(不是 Boot)- 如何显示来自 messageSource 的消息

转载 作者:搜寻专家 更新时间:2023-10-31 20:09:38 26 4
gpt4 key购买 nike

我在使用 Thymeleaf 设置我的 Spring MVC(不使用 Boot,因为我在发现 Spring Initializr 之前启动了它)以显示来 self 的资源包的消息时遇到了问题。

应用程序的主要配置类是:

@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
}

应用程序的一般 View 是:

enter image description here

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??

我浏览了许多可能的解决方案和教程,包括:

I18n in Spring boot + Thymeleaf http://www.concretepage.com/spring-4/spring-4-mvc-internationalization-i18n-and-localization-l10n-annotation-example 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;
}

更新:

发现您需要为 ReloadableReourceBundleMessageSource 提供完整路径,因此如果您的 /il8n 目录在您的类路径中,您需要将您的基本名称设置为 classpath:/il8n/messages

在这里查看我的帖子:Why does Thymeleaf International only works with ResourceBundleMessageSource

关于java - Thymeleaf + Spring(不是 Boot)- 如何显示来自 messageSource 的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36752665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com