Spring:设置语言环境

时间:2011-06-22 02:39:54

标签: spring localization internationalization

我按照以下指南中的说明设置了Spring:http://www.springbyexample.org/examples/basic-webapp-internationalization-spring-config.html

如果我要附加?locale = fr,例如,在URL的末尾,语言环境将更改为法语。

但是,在我的情况下,我想在用户登录时设置区域设置,因为此信息与其配置文件相关联。我曾尝试使用localeResolver.setLocale(请求,响应,新的Locale(“fr”))(其中localeResolver是SessionLocaleResolver的一个实例)来指定语言环境但是这没有任何效果。

知道我做错了什么吗?我是否以正确的方式处理这个问题?

6 个答案:

答案 0 :(得分:13)

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 \主\资源\消息\ messages.properties

  

my.message =消息(默认语言)

\ SRC \主\资源\消息\ messages_en.properties

  

my.message =英文消息

\ SRC \主\资源\消息\ 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”)会得到相同的结果。

答案 1 :(得分:5)

我建议尝试将默认语言环境设置为:

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
     <property name="defaultLocale" value="fr_FR" />
 </bean>

一些有用的信息在博文Configuring locale switching with Spring MVC 3中。

答案 2 :(得分:1)

示例:

/usr/lib/python2.7/dist-packages/matplotlib/__init__.py:1352: UserWarning:  This call to matplotlib.use() has no effect because the backend has already been chosen;
matplotlib.use() must be called *before* pylab, matplotlib.pyplot, or matplotlib.backends is imported for the first time.

答案 3 :(得分:0)

你可以看看Spring Roo项目。 Spring提供了一个国际化版本,它正在Spring Roo中使用,可以在Roo自动生成的Spring Web应用程序中快速切换Locale。

答案 4 :(得分:0)

如何确定尚未设置区域设置?如果您希望HttpServletRequest中存在正确的语言环境,则不是这样 - 它的值由servlet容器处理,因此是不可变的。相反,您应该依赖Spring将一个适当的值注入控制器中具有类Locale的方法参数。获取区域设置的另一种方法是直接使用RequestContextUtils.getLocale(HttpServletRequest request)

答案 5 :(得分:0)

 @Bean
 public LocaleResolver localeResolver() {
     SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
     Locale locale = new Locale("tr", "TR");
     sessionLocaleResolver.setDefaultLocale(locale);
     return sessionLocaleResolver;
 }