春季:设置语言环境

问题描述

| 我已按照以下指南中的说明设置了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;
 }