如何本地化整个java spring应用程序

时间:2014-02-14 07:48:25

标签: java spring localization

我知道通过添加?lang = en(fr,de,ch)本地化java spring应用程序的标准方法,但它只是一个页面本地化,而不是移动到其他页面后(按任意href =“/ newpage “),再次出现默认语言环境,之前没有选择。我的问题是:如何在登录页面(或索引页面)用户区域设置中确定并将其设置为整个Web应用程序的默认区域设置?

更新问题14.02.2014-16:32 添加信息。

本地化的默认spring实现它正在添加“?lang = en”来请求URI并从bundle中获取新消息。所以有一个例子: 默认语言环境设置为en uri:http://example.com/index - en locale。 uri:http://example.com/index?lang=de - 德语区域设置 - 页面翻译为德语。 但是,我点击链接,得到href =“/ profile”。当我点击时: uri:http://example.com/profile - 我有默认语言环境 - en。

我想要的: uri:http://example.com/index - 用户按下站点顶部的德国国旗,而不是某个bean获取此操作并设置默认语言环境 - 德语。比所有页面都将加载默认的德语区域设置。 uri:http://example.com/profile - 默认语言环境 - 德语。

在uri请求示例中,我想要这样的东西: example.com - 检测用户区域设置 - 设置默认区域设置,德语为示例/ 用户按下英文标记 - 所有页面的默认语言环境设置为英语。

更新问题14.02.2014-17:38 添加信息。有关我的错误的信息 一切都是好的。我标记了正确答案。 Spring标准实现很有效,我想要的。我在错误的JSP页面中没有完全翻译,当我改变语言环境时,我认为并非所有内容都被翻译 - 但事实确实如此。谢谢!

1 个答案:

答案 0 :(得分:3)

Spring文档非常适合这个主题:17.8 Using locales 你需要两件事:

  • A LocalResolver - 保存用户的本地,当用户发送请求时,它将本地添加到请求上下文(可通过RequestContext.getLocale()获得) - 通常是{{3} }或SessionLocalResolver用于基于网页的普通应用程序 - bean ID /名称为localeResolverDispatcherServlet.LOCALE_RESOLVER_BEAN_NAME="localeResolver"非常重要 - (如果名称不同,然后DispatcherServlet将找不到区域设置解析器!
  • 当用户向其请求添加?lang=de时更改语言环境的CookieLocaleResolver

示例配置

<bean class="org.springframework.web.servlet.i18n.CookieLocaleResolver"
      id="localeResolver"
      name="localeResolver">        
   <property name="defaultLocale" value="en"/>
</bean>

<mvc:interceptors>
     <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"
           p:paramName="lang">          
     </bean>
     ...
</mvc:interceptors>

对于您的问题,LocalResolver的某些内容可能是错误的,您可能忘了将其ID /名称*设置为localeResolver,或者使用AcceptHeaderLocaleResolver (总是“回退”请求标题区域设置)

*有关Id和姓名

之间的区别,请参阅LocaleChangeInterceptor