Java 如何使用Spring';i18n机制?

Java 如何使用Spring';i18n机制?,java,spring,spring-mvc,internationalization,Java,Spring,Spring Mvc,Internationalization,我将本地化添加到我的Spring项目中,它似乎可以工作,但我想知道如果语言选择是基于浏览器设置、HTTP头、cookie或其他内容,我该如何更改语言。是否有明确的方法,例如以HTTP查询字符串上类似于hl=de的方式将区域设置作为参数?我还想允许用户在设置页面上设置语言,我如何才能做到这一点?我的实现如下所示,并用英语编写消息: servlet.xml: <bean id="messageSource" class="org.springframework.context.s

我将本地化添加到我的Spring项目中,它似乎可以工作,但我想知道如果语言选择是基于浏览器设置、HTTP头、cookie或其他内容,我该如何更改语言。是否有明确的方法,例如以HTTP查询字符串上类似于
hl=de
的方式将区域设置作为参数?我还想允许用户在设置页面上设置语言,我如何才能做到这一点?我的实现如下所示,并用英语编写消息:

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>

您已经配置了
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>


@请参见

您已经配置了
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>

@请参见

a)您定义了一个id为localeChangeInterceptor的bean:

<bean id="localeChangeInterceptor"
      class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="lang" />
</bean>

此拦截器使您能够使用查询字符串(即:法语)中选择的参数(在本例中为“lang”)更改语言环境

b) 您可以使用点a为用户提供更改语言环境的链接 c) 您选择了默认区域设置:“en”。使用浏览器语言选择其他区域设置

注意:您应该对本地化字符串使用
,而不是fmt,以便与spring进行更多集成…

a)您定义了一个id为localeChangeInterceptor的bean:

<bean id="localeChangeInterceptor"
      class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="lang" />
</bean>

此拦截器使您能够使用查询字符串(即:法语)中选择的参数(在本例中为“lang”)更改语言环境

b) 您可以使用点a为用户提供更改语言环境的链接 c) 您选择了默认区域设置:“en”。使用浏览器语言选择其他区域设置


注意:您应该对本地化字符串使用
,而不是fmt,以便与spring进行更多集成…

谢谢。但语言转换不起作用,我不知道为什么。我的代码中一定有错误,因为本地化从未更改,它始终是默认值,即使我使用了locale change参数
lang=fr
。为什么?对于我使用的区域设置解析器bean:
此外,请尝试:
@EmanueleRighetto谢谢,但我仍然获得默认语言,即使我将
?language=sv
放在URL中,并在文件
messages\u sv.properties
messages\u en.properties
中进行本地化。为什么?我将尝试更改默认值并查看它的功能,但除了默认的英文消息外,我还无法获取其他消息。似乎没有调用拦截器。。您可以尝试将其子类化并放置一些调试..尝试重写preHandle(..)方法并将调试代码放置在那里(请记住返回true,否则请求将不会转发给控制器..),谢谢。但语言转换不起作用,我不知道为什么。我的代码中一定有错误,因为本地化从未更改,它始终是默认值,即使我使用了locale change参数
lang=fr
。为什么?对于我使用的区域设置解析器bean:
此外,请尝试:
@EmanueleRighetto谢谢,但我仍然获得默认语言,即使我将
?language=sv
放在URL中,并在文件
messages\u sv.properties
messages\u en.properties
中进行本地化。为什么?我将尝试更改默认值并查看它的功能,但除了默认的英文消息外,我还无法获取其他消息。似乎没有调用拦截器。。您可以尝试将其子类化并放置一些调试..尝试重写preHandle(..)方法并将调试代码放置在那里(请记住返回true,否则请求将不会转发给控制器..)