问题描述
|
我已按照以下指南中的说明设置了Spring:http://www.springbyexample.org/examples/basic-webapp-internationalization-spring-config.html
例如,如果我将?locale = fr附加到URL的末尾,则语言环境将变为法语。
但是,就我而言,我想在用户登录时设置语言环境,因为此信息与他们的个人资料相关联。我试图使用localeResolver.setLocale(request,response,new Locale(\“ fr \”))(其中localeResolver是SessionLocaleResolver的一个实例)来指定区域设置,但这没有任何作用。
知道我在做什么错吗?我是否以正确的方式处理此问题?
解决方法
localeResolver.setLocale对我来说效果很好,请尝试如下操作:
applicationContext
<bean id=\"messageSource\" class=\"org.springframework.context.support.ResourceBundleMessageSource\"
p:basename=\"messages/messages\" p:fallbackToSystemLocale=\"false\" />
<bean id=\"localeResolver\" class=\"org.springframework.web.servlet.i18n.SessionLocaleResolver\" />
my_page.jsp
<%@ taglib uri=\"http://www.springframework.org/tags\" prefix=\"spring\" %>
<html>
<body>
<p><spring:message code=\"my.message\"/></p>
</body>
</html>
\\ src \\ main \\ resources \\ messages \\ messages.properties
my.message =消息(默认语言)
\\ src \\ main \\ resources \\ messages \\ messages_en.properties
my.message =英文信息
\\ src \\ main \\ resources \\ messages \\ messages_fr.properties
my.message =法语信息
控制者
@Controller
@RequestMapping(\"/\")
public class SampleController {
@RequestMapping(value = \"/\",method = RequestMethod.GET)
public String welcome(HttpServletRequest request,HttpServletResponse response) {
LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
localeResolver.setLocale(request,response,StringUtils.parseLocaleString(\"fr\"));
return \"my_page\";
}
}
使用此代码,我得到\“法语消息\”,如果我将\“ fr \”更改为\“ en \”,则得到\“英语消息\”,并且没有setLocale调用,我得到\“消息(默认语言) \”。将StringUtils.parseLocaleString(\“ fr \”)更改为新的Locale(\“ fr \”)可获得相同的结果。
, 我建议尝试将默认语言环境设置为:
<bean id=\"localeResolver\" class=\"org.springframework.web.servlet.i18n.SessionLocaleResolver\">
<property name=\"defaultLocale\" value=\"fr_FR\" />
</bean>
一些有用的信息在博客文章“使用Spring MVC 3配置语言环境切换”中。
, 例:
@Configuration
public class i18nConfiguration extends WebMvcConfigurerAdapter {
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
Locale locale = new Locale(\"fr\",\"FR\");
sessionLocaleResolver.setDefaultLocale(locale);
return sessionLocaleResolver;
}
}
, 您可能可以看看Spring Roo项目。 Spring Roo中使用了Spring的一个国际化附加组件,它可以在Roo自动生成的Spring Web应用程序中快速切换语言环境。
, 您如何确定尚未设置区域设置?如果您期望在HttpServletRequest
中出现正确的语言环境,那不是真的—它的值由servlet容器处理,因此是不可变的。相反,您应该依靠Spring将正确的值注入控制器中类为“ 6”的方法参数。获取语言环境的另一种方法是直接使用ѭ7。
, @Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
Locale locale = new Locale(\"tr\",\"TR\");
sessionLocaleResolver.setDefaultLocale(locale);
return sessionLocaleResolver;
}