无法更改 spring 应用程序中的语言
cannot change language in spring application
我正在尝试使用 <spring:message>
标签更改语言。但它没有被识别。
language.jsp
<%@ taglib prefix="spring"
uri="http://www.springframework.org/tags" %>
<html>
<body>
<h1><spring:message code="home.title" /></h1>
<p><spring:message code="home.intro" /></p>
<p>
<a href="?lang=en">English</a> |
<a href="?lang=fr">French</a>
</p>
</body>
</html>
AppConfig.java
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.dilini.controller", "com.dilini.service"})
@Import({DatabaseConfig.class, SecurityConfig.class})
public class AppConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver jspViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setViewClass(JstlView.class);
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
@Bean
public HandlerInterceptor performanceInterceptor() {
PerformanceInterceptor interceptor;
interceptor = new PerformanceInterceptor();
return interceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(performanceInterceptor()).addPathPatterns("/user/*");
registry.addInterceptor(localeChangeInterceptor());
}
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:/messages");
messageSource.setUseCodeAsDefaultMessage(true);
return messageSource;
}
@Bean
public HandlerInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
interceptor.setParamName("lang");
return interceptor;
}
@Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver localeResolver = new CookieLocaleResolver();
localeResolver.setDefaultLocale(new Locale("en"));
return localeResolver;
}
}
src/main/resources/messages/en.properties
home.title=Home
home.intro= this is my magnificent intro
法国人也一样。
src/main/resources/messages/fr.properties
home.title=Accueil
home.intro=Splendide page d'accueil,
我是否需要为此功能添加其他依赖项?还是代码有问题?
请帮忙
在您的 appconfig 中,我没有看到拦截器注册。您只是简单地定义了它,但从未注册过它。您应该重写 addInterceptors
方法
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
尝试添加并检查是否有效
在您的 src/main/resources/messages/
中创建两个 i18 文件(en 和 fr 命名如下):
在您的 MessageSource
中,您只需将 basename
设置为 messages
=>
messageSource.setBasename("classpath:/messages");
因此您的本地文件应命名为 messages_[local].properties(spring 将搜索在 as .setBasename()
中设置的本地名称文件)
如下
messages_en.properties
包含:
home.title=Home
home.intro= this is my magnificent intro
和messages_fr.properties
home.title=Accueil
home.intro= ceci est ma magnifique intro
它应该有效
试试下面的代码
@Bean(name = "localeResolver")
public LocaleResolver getLocaleResolver() {
CookieLocaleResolver resolver= new CookieLocaleResolver();
resolver.setCookieDomain("myAppLocaleCookie");
resolver.setCookieMaxAge(600);
return resolver;
}
@Bean(name = "messageSource")
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageResource= new ReloadableResourceBundleMessageSource();
// For example: i18n/messages_en.properties
// For example: i18n/messages_fr.properties
messageResource.setBasename("classpath:i18n/messages");
messageResource.setDefaultEncoding("UTF-8");
return messageResource;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
localeInterceptor.setParamName("lang");
registry.addInterceptor(localeInterceptor).addPathPatterns("/*");
}
注意:messages_en.properties 和 messages_fr.properties 应该出现在 src/main/resources/i18n
中
我正在尝试使用 <spring:message>
标签更改语言。但它没有被识别。
language.jsp
<%@ taglib prefix="spring"
uri="http://www.springframework.org/tags" %>
<html>
<body>
<h1><spring:message code="home.title" /></h1>
<p><spring:message code="home.intro" /></p>
<p>
<a href="?lang=en">English</a> |
<a href="?lang=fr">French</a>
</p>
</body>
</html>
AppConfig.java
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.dilini.controller", "com.dilini.service"})
@Import({DatabaseConfig.class, SecurityConfig.class})
public class AppConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver jspViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setViewClass(JstlView.class);
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
@Bean
public HandlerInterceptor performanceInterceptor() {
PerformanceInterceptor interceptor;
interceptor = new PerformanceInterceptor();
return interceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(performanceInterceptor()).addPathPatterns("/user/*");
registry.addInterceptor(localeChangeInterceptor());
}
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:/messages");
messageSource.setUseCodeAsDefaultMessage(true);
return messageSource;
}
@Bean
public HandlerInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
interceptor.setParamName("lang");
return interceptor;
}
@Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver localeResolver = new CookieLocaleResolver();
localeResolver.setDefaultLocale(new Locale("en"));
return localeResolver;
}
}
src/main/resources/messages/en.properties
home.title=Home
home.intro= this is my magnificent intro
法国人也一样。
src/main/resources/messages/fr.properties
home.title=Accueil
home.intro=Splendide page d'accueil,
我是否需要为此功能添加其他依赖项?还是代码有问题?
请帮忙
在您的 appconfig 中,我没有看到拦截器注册。您只是简单地定义了它,但从未注册过它。您应该重写 addInterceptors
方法
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
尝试添加并检查是否有效
在您的 src/main/resources/messages/
中创建两个 i18 文件(en 和 fr 命名如下):
在您的 MessageSource
中,您只需将 basename
设置为 messages
=>
messageSource.setBasename("classpath:/messages");
因此您的本地文件应命名为 messages_[local].properties(spring 将搜索在 as .setBasename()
中设置的本地名称文件)
如下
messages_en.properties
包含:
home.title=Home
home.intro= this is my magnificent intro
和messages_fr.properties
home.title=Accueil
home.intro= ceci est ma magnifique intro
它应该有效
试试下面的代码
@Bean(name = "localeResolver")
public LocaleResolver getLocaleResolver() {
CookieLocaleResolver resolver= new CookieLocaleResolver();
resolver.setCookieDomain("myAppLocaleCookie");
resolver.setCookieMaxAge(600);
return resolver;
}
@Bean(name = "messageSource")
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageResource= new ReloadableResourceBundleMessageSource();
// For example: i18n/messages_en.properties
// For example: i18n/messages_fr.properties
messageResource.setBasename("classpath:i18n/messages");
messageResource.setDefaultEncoding("UTF-8");
return messageResource;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
localeInterceptor.setParamName("lang");
registry.addInterceptor(localeInterceptor).addPathPatterns("/*");
}
注意:messages_en.properties 和 messages_fr.properties 应该出现在 src/main/resources/i18n
中