У меня есть веб-проект Spring. Я хочу реализовать интернационализацию ThymLeaf. Я добавил файл с данными в ресурсы. но я всегда получаю ошибку на странице, например, ??page.title_en_US??
или, если передать lang=en
в QueryString, тогда он выглядит как ??page.title_en??
. , когда это получать сообщения в контроллер с помощью MessageResource его возвращающимся все сообщения, которые определены в файле свойств: messageSource.getMessage("page.title",null,locale)
Моя структура файл ресурсов: ресурсыИнтернационализация Spring Thymleaf не получает сообщений из ресурсов
i18n/messages.properties
i18n/messages_en.properties
Вот моя конфигурация Bean:
/**
* This method is used for configure thymeleaf view resolver.
* This view resolver have second priority.
* */
private ViewResolver thymeleafViewResolver() {
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setViewClass(ThymeleafView.class);
thymeleafViewResolver.setTemplateEngine(templateEngine());
return thymeleafViewResolver;
}
/**
* This method is used to configure template engine for thymeleaf.
* */
private SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
/**
* This method is used for configure the thymeleaf view configuration.
* */
private SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
//ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
//ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setApplicationContext(applicationContext);
resolver.setPrefix("/WEB-INF/views/templates/");
resolver.setSuffix(".html");
resolver.setTemplateMode(TemplateMode.HTML);
resolver.setCharacterEncoding("UTF8");
resolver.setOrder(2);
return resolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.US);
return slr;
}
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("i18n/messages");
messageSource.setDefaultEncoding("UTF-8");
// messageSource.setCacheSeconds(3600); //refresh cache once per hour
return messageSource;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
Spring автоматически извлекает файлы свойств сообщения непосредственно в папку ресурсов. Существуют ли какие-либо отличия, если вы удаляете определения addResourceHandlers и messageSource и перемещаете файлы непосредственно в папку ресурсов? – SAP
Моя проблема решена. Я нашел решение. Я пропустил аннотацию '@ Bean' на методах' templateResolver' и 'templateEngine'. – Muhammad