如何在spring mvc中动态切换语言?

时间:2015-03-24 15:21:09

标签: java spring spring-mvc internationalization

我想在英文和中文之间切换语言,所以我创建了两个语言文件:

messages_en.properties messages_zh.properties

在jsp文件中,我的代码如下:

<c:choose>
<c:when test="${language=='en'}">
    <a href='<c:url value="/language?language=zh" />'>
    <i class='glyphicon glyphicon-asterisk'></i>&nbsp;
        <s:message code="label.language" />
    </a>
</c:when>
<c:otherwise>
    <a href='<c:url value="/language?language=en" />'>
    <i class='glyphicon glyphicon-asterisk'></i>&nbsp;
        <s:message code="label.language" />
    </a>
</c:otherwise>

并在控制器文件中,我的代码如下:

@RequestMapping(value = { "/language" }, method = RequestMethod.GET)
public String switchLanguage(@RequestParam("language") String language,
        ModelMap model) {
    Locale currentLocale = null;

    if ("zh".equals(language)) {
        currentLocale = new Locale("zh", "CN");
    } else if ("en".equals(language)) {
        currentLocale = new Locale("en", "US");
    }
    model.put("language", currentLocale.getLanguage());

    return "/book/index";
}

并在.xml文件中,我将MessageSource配置如下:

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

如何更改控制器操作代码以动态切换语言?

感谢。

2 个答案:

答案 0 :(得分:1)

查看org.springframework.web.servlet.i18n.LocaleChangeInterceptor bean。

看起来这就是你所缺少的,或试图自己写作。它会选择?language=en URL参数并为您更改此用户的会话区域设置。

A good tutorial here

答案 1 :(得分:0)

您可以使用

Locale locale = Locale.forLanguageTag(language);

获取正确的区域设置。 language可以是“en”或“en_US”。问题是您只能从requestParameter获取语言,并且您根据定义知道要使用哪个国家/地区。

我为此创建了一个地图,其中包含键作为键的语言和作为值的国家/地区。因此你可以做到

String languageCountry = language + "_" + myCountryMap.get(language); // returns "US"
Locale locale = Locale.forLanguageTag(languageCountry );