Java 如何在SpringMVC中动态切换语言?
我想在英语和汉语之间切换语言,因此我创建了两个语言文件: 消息属性 消息_zh.properties 在jsp文件中,我的代码如下所示: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&
<c:choose>
<c:when test="${language=='en'}">
<a href='<c:url value="/language?language=zh" />'>
<i class='glyphicon glyphicon-asterisk'></i>
<s:message code="label.language" />
</a>
</c:when>
<c:otherwise>
<a href='<c:url value="/language?language=en" />'>
<i class='glyphicon glyphicon-asterisk'></i>
<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>
<s:message code="label.language" />
</a>
</c:when>
<c:otherwise>
<a href='<c:url value="/language?language=en" />'>
<i class='glyphicon glyphicon-asterisk'></i>
<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中已被弃用