如何使用Spring的i18n机制?

时间:2013-12-17 15:32:41

标签: java spring spring-mvc internationalization

我在我的Spring项目中添加了本地化,它似乎正在运行,但我想知道如何根据浏览器设置,HTTP标头,cookie或其他内容完成语言选择。有没有办法明确表示,例如以类似于例如的方式将区域设置作为参数。 HTTP查询字符串上的hl=de?我还想让用户在设置页面上设置语言,我该怎么做?我的实现看起来像这样,并用英语写消息:

<h4 class="title"><fmt:message key="login.title"/></h4>

servlet.xml中:

<bean id="messageSource"
      class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:messages" />
    <property name="defaultEncoding" value="UTF-8"/>
</bean>

<bean id="localeChangeInterceptor"
      class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="lang" />
</bean>

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

<bean id="handlerMapping"
      class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="interceptors">
        <ref bean="localeChangeInterceptor" />
    </property>
</bean>

那我怎么能

a)通过使用HTTP GET参数覆盖语言环境来明确选择语言环境,例如德语为hl=de,法语为hl=fr

b)让用户选择区域设置?

更新

拦截器不起作用。 XML是:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <bean id="messageSource"
          class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:messages" />
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
    <property name="defaultLocale" value="sv" />
</bean>

    <mvc:interceptors>
        <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
            <property name="paramName" value="language" />
        </bean>
    </mvc:interceptors>

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- one of the properties available; the maximum file size in bytes -->
        <property name="maxUploadSize" value="100000"/>
    </bean>

</beans>

2 个答案:

答案 0 :(得分:3)

a)您定义了一个id为localeChangeInterceptor的bean:

<bean id="localeChangeInterceptor"
      class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="lang" />
</bean>

此拦截器允许您使用您在查询字符串中选择的参数(在本例中为“lang”)更改您的语言环境(例如:http://mydomain.com/mypage?lang=fr为法语)

b)您可以使用点a)为用户提供更改区域设置的链接 c)您选择了默认语言环境:“en”。使用浏览器语言

选择其他语言环境

注意:您应该使用<spring:message code="${msg.value}" arguments="${msg.args}"/>作为本地化字符串,而不是fmt,以便与spring ...进行更多集成...

答案 1 :(得分:2)

您已配置LocaleChangeInterceptor。其参数paramName(您将其设置为lang)是更改区域设置的请求参数。

将配置更改为hl,然后您可以使用此参数进行更改:

 <bean id="localeChangeInterceptor"
    class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
     <property name="paramName" value="hl" />
 </bean>

让用户更改本地,您只需要添加一些链接到页面

<a href="${currentPage}?hl=de">German</a>

@See JavaDoc: LocalChangeInterceptor#setParamName