Abh*_*yay 2 spring localization spring-mvc
我正在开发一个支持多种语言的 Web 应用程序项目。
我正在使用 Spring 框架。Spring 可以选择通过在调度程序 servlet 中添加以下 bean 来支持多语言。
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="en" />
</bean>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="language" />
</bean>
</mvc:interceptor>
</mvc:interceptors>
<!-- Register the messages.properties -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:messages" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
Run Code Online (Sandbox Code Playgroud)
只有当我在每个 URL 中传递语言参数时,本地化才有效。
是否有任何选项可以根据客户端的浏览器语言设置语言环境?
网站以两种方式之一实现本地化。第一种方法涉及通过检查 HTTP 请求标头(Accept-Language特别是头)和本地化用户区域设置的站点内容(如果支持)。
Spring MVC 默认使用这种方法。它使用该HttpServletRequest.getLocale方法来确定客户端语言环境,然后从消息源加载本地化的消息。请注意,该getLocale方法返回单个Locale对象,而Accept-Language客户端传递的标头可能包含多种语言(例如,Accept-Language: en-US, en-GB, en)。在这种情况下,该getLocale方法返回Locale第一个匹配语言 (en-US在上面的示例中)。
因此,如果您希望 Spring MVC 应用程序自动检测客户端语言环境并提供本地化内容,只需ResourceBundleMessageSource在应用程序上下文中声明一个bean。不需要其他配置。
请参阅我演示此方法的示例应用程序。使用诸如 Postman for Chrome 之类的浏览器扩展程序来操作Accept-Language标头的值。样品支持英语,法语,德语和西班牙语等等传球en-US,fr-FR,de-DE和es-ES将分别显示每种语言的本地化消息。
网站使用的第二种方法是始终首先以默认语言显示内容,然后允许用户更改区域设置(使用下拉列表或站点页眉或页脚中的链接)。在这种情况下,用户可能会选择Accept-Language与其浏览器发送的标头不一致的区域设置。例如,Accept-Language标题可能包含fr-CH而用户可以选择de-DE作为区域设置。
正是在这样的情况下即LocaleChangeInterceptor与SessionLocaleResolver需要使用所述用户选择而不是请求头。这些组件可以拦截用户选择并在会话期间临时保存,以正确本地化站点内容。
| 归档时间: |
|
| 查看次数: |
4085 次 |
| 最近记录: |