Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SpringMVC中动态切换语言?_Java_Spring_Spring Mvc_Internationalization - Fatal编程技术网

Java 如何在SpringMVC中动态切换语言?

Java 如何在SpringMVC中动态切换语言?,java,spring,spring-mvc,internationalization,Java,Spring,Spring Mvc,Internationalization,我想在英语和汉语之间切换语言,因此我创建了两个语言文件: 消息属性 消息_zh.properties 在jsp文件中,我的代码如下所示: <c:choose> <c:when test="${language=='en'}"> <a href='<c:url value="/language?language=zh" />'> <i class='glyphicon glyphicon-asterisk'></i&

我想在英语和汉语之间切换语言,因此我创建了两个语言文件:

消息属性 消息_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";
}
 <bean id="messageSource" 
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:language/messages"/>
    <property name="defaultEncoding" value="UTF-8"/>
</bean>
在.xml文件中,我将MessageSource配置如下:

<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";
}
 <bean id="messageSource" 
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:language/messages"/>
    <property name="defaultEncoding" value="UTF-8"/>
</bean>

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

谢谢。

您可以使用

Locale locale = Locale.forLanguageTag(language);
以获得正确的区域设置<代码>语言可以是类似“en”或“en_US”的东西。问题是,您只能从requestParameter获取语言,并且您可以根据定义知道要使用哪个国家

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

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

看看
org.springframework.web.servlet.i18n.localechangereceptor
bean

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


本教程使用的ControllerClassNameHandlerMapping在Spring 4.3.4中已被弃用