SpringMVC 国际化
因为今天的页面不再是简单的个人程序,需要面对全世界的用于观看,例如外交部的网站,可以根据自己浏览器的语言来选择对应的文字。
而 Spring MVC 为了方便我们国际化的开发,也提供了便利,建立在 Java国际化的基础之上的,通过提供不同国家/语言环境的消息资源,然后通过 ResourceBundleMessageSource 加载指定 Locale对应的资源文件,取得该资源文件中指定 key 对应的消息。这些步骤,Spring MVC 框架对J国际化进行了进一步的封装,简化了国际化开发。
国际化不是对内容的国际化,而是对本身要显示的文字进行国际化。因为对于数据库中的数据那么多,我们不可能对所有的数据进行国际化。而是对于本身要显示的文字国际化。
在 SpringMVC 中,提供了便利的国际化方式,需要通置国际化资源文件的 bean,通过 Locale 完成。
为了实现国际化,SpringMVC 提供了本地化拦截器和本地化解析器,以及还有国际化资源接口。只需页面跳转点击即可完成国际化。那么它们都是啥?
- 本地化拦截器:LocaleChangeInterceptor
- 国际化拦截器,当语言区域发生改变的时候,通过连接传递过来的参数,来改变应用语言的环境。
- 本地化解析器:LocaleResolver 接口
- 确定语言区域
- accept-langage:基于浏览器的语言区域选择
- SessionLocaleResolver:基于会话的语言区域选择,需要配置(常用)
- CookieLocaleResolver:基于 Cookie 的语言区域选择。需要配置
- 国际化资源接口 ResourcBundleMessageSource
- 用于告诉系统国际化资源文件的位置
那么过程如何?
-
首先,点击一个 a 标签跳转国际化页面。
-
本地化拦截器拦截请求
- 获取超链接传递的参数 locale
- 将 locale 参数解析为 Locale 对象
- 获取 LocaleResolver 对象
-
随后本地化解析器解析(这里使用 SessionLocaleResolver 解析器)
- 把 Local 对象设置为 session 属性
- 从 session 中获取 Locale 对象
-
应用程序使用 Locale 对象,通过国际化资源接口找到国际化资源文件。
案例
这里通过超链接实现国际化的例子说明。
例子:
- 首先,写一个 a 标签跳转国际化页面。
<a href="${pageContext.request.contextPath}/testGuoJiHua?locale=zh_CN">中国</a><br>
<a href="${pageContext.request.contextPath}/testGuoJiHua?locale=en_US">English</a>
-
配置国际化资源文件
i18n_zh_CN.properties
username=\u7528\u6237\u540D password=\u5BC6\u7801
i18n_en_US.properties
username=USERNAME password=PASSWORD
i18n.properties
username=UserName password=Password
-
配置拦截器、解析器、资源
<!-- 告诉系统国际化资源文件的位置 -->` <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <!-- i18n 为国际资源文件的前缀 --> <property name="basename" value="i18n"></property> </bean> <!-- 配置本地拦截器 --> <mvc:interceptors> <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> </bean> </mvc:interceptors> <!-- 基于 SessionLocaleResolver 的语言区域选择器 --> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> </bean>
注意:
- ResourceBundleMessageSource 的 bean Id 必须是 messageSource
- SessionLocaleResolver 的 bean Id 必须是 localeResolver
-
在页面中使用 message 标签输出国际化信息,需要使用 SpringMVC 提供的
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
标签<body> <fmt:message key="username"></fmt:message> <fmt:message key="password"></fmt:message> </body>