我在我的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>
答案 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>