【问题标题】:How can I switch language dynamically in spring mvc?如何在spring mvc中动态切换语言?
【发布时间】:2015-03-24 15:21:09
【问题描述】:

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

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>

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

谢谢。

【问题讨论】:

    标签: java spring spring-mvc internationalization


    【解决方案1】:

    你可以使用

    Locale locale = Locale.forLanguageTag(language);
    

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

    我会为此创建一个地图,其中包含作为键的语言和作为值的国家/地区。这样就可以了

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

    【讨论】:

      【解决方案2】:

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

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

      A good tutorial here

      【讨论】:

      • 本教程使用 Spring 4.3.4 中已弃用的 ControllerClassNameHandlerMapping
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2013-06-05
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      相关资源
      最近更新 更多