我知道通过添加?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页面中没有完全翻译,当我改变语言环境时,我认为并非所有内容都被翻译 - 但事实确实如此。谢谢!
答案 0 :(得分:3)
Spring文档非常适合这个主题:17.8 Using locales 你需要两件事:
LocalResolver
- 保存用户的本地,当用户发送请求时,它将本地添加到请求上下文(可通过RequestContext.getLocale()
获得) - 通常是{{3} }或SessionLocalResolver
用于基于网页的普通应用程序 - bean ID /名称为localeResolver
(DispatcherServlet.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