5.1 Spring MVC国际化的相关知识

5.1 Spring MVC国际化的相关知识

5.1.1 messageSource接口

Spring MVC中,不直接使用java.util.ResourceBundle,而是使用名为messageSourceBean告诉Spring MVC国际化的属性文件保存在哪里。配置信息代码如下所示:

1
2
3
4
5
6
7
8
9
10
<!-- 国际化配置 -->
<bean
id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<!-- 国际化资源文件名 -->
<property name="basenames">
<value>message1</value>
<value>message2</value>
</property>
</bean>

上面的配置使用了ResourceBundleMessageSource类作为messageSourceBean的实现。basenames属性用来指定国际化的属性文件名称。如果项目中只有一组属性文件,则可以使用baseman来指定国际化的属性文件名称,实例代码如下

1
2
3
4
5
6
<!-- 国际化 p:basenames属性用于指定国际化资源文件名 -->
<bean
id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource"
p:basenames="message"/>
</bean>

5.1.2 localResolver接口

如何知道用户使用的语言

为用户选择语言区域时,最常用的方法是通过读取用户浏览器的accept-language标题值, accept- language标题提供了关于用户浏览器语言的信息。选择语言区域的其他方法还包括读取 HttpSession或者 Cookie

语言区域解析器

Spring MVC中选择语言区域,可以使用语言区域解析器。Spring MVC提供了一个语言区域解析器接口LocaleResolver,该接口的常用实现类都在org.springframework.web.servlet.i18n包下面,包括:

  • AcceptHeaderLocaleResolver
  • SessionLocaleResolver
  • CookieLocaleResolver

其中,AcceptHeaderLocaleResolver是默认的,也是最容易使用的语言区域解析器。使用它,Spring MVC会读取浏览器的accept-language标题,来确定使用哪个语言区域。默认的AcceptHeaderLocaleResolver可以不用显式配置,而SessionlocaleresolverCookielocale-Resolver需要手动显式配置

5.1.3 message标签

Spring MVC中显示本地化消息通常使用Springmessage标签。使用message标签需要在JSP页面最前面使用taglib指令导入Spring的标签库,如下所示:

1
<%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>

message标签的属性如表5.1所示,所有属性都是可选的

表5.1 message标签的属性
属性 描述
arguments 标签的参数,可以是一个字符串、数组或对象
argumentSeparator 用来分隔该标签参数的字符
code 获取消息的key
htmlEscape boolean值,表示被渲染的值是否应该进行HTM转义
javaScriptEscape boolean值,表示被渲染的值是否应该进行 JavaScript转义
message MessageSourceResolvable参数
scope 保存var属性中定义的变量的作用域
text 如果code属性不存在,所显示的默认文本
var 用于保存消息的变量