9.4.1 <fmt:setLocale>标签
<fmt:setLocale>标签用于设置本地化信息,并将封装本地化信息的Locale对象保存在指定的Web域中,Locale对象在Web域中的属性名为javax.servlet.jsp.jstl.fmt.locale.scope。其中scope表示指定的Web域。如果Web域是request,则保存在request域中的Locale对象的属性名是javax.servlet.jsp.jstl.fmt.locale.request。使用<fmt:setLocale>标签设置本地化信息后,其他的国际化标签都会使用该本地化信息,而忽略从请求消息中传递过来的本地信息。<fmt:setLocale>标签的语法格式如下:
<fmt:setLocale value="locale" [variant="variant"]
[scope="{page|request|session|application}"]/>
其中黑体字部分为属性的默认值。
<fmt:setLocale>标签的属性说明如表9.13所示。
表9.13 <fmt:setLocale>标签的属性
属性名 | 是否支持动态属性值 | 属性类型 | 属性描述 |
value | true | String或 java.util.Locale | 指定本地化信息。该本地化信息可以是字符串或java.util.Locale对象实例。如果使用字符串设置本地化信息,该字符串必须是小写形式的语言编码,后面是大写形式的国家编码,中间用“-”或“_”连接。 |
variant | true | String | 指定创建Locale对象实例时的变量部分。实际上,该属性相当于指定了Locale类的getInstance方法的第3个参数(详见8.2.1节的内容)。 |
var | false | String | 指定要导入资源保存到Web域中的属性名称。 |
在使用<fmt:setLocale>标签时应注意如下几点:
1 如果value属性值是null或空串,其他的国际化标签将使用服务端默认的本地信息(注意,不是从客户端发送过来的本地信息)。
2 如果不使用<fmt:setLocale>标签,其他的国际化标签将使用从客户端发送过来的本地信息。
setLocale.jsp页面是一个使用<fmt:setLocale>标签设置当前的本地化信息的例子,代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!--
使用字符串设置当前的本地化信息,并将Locale对象保存在request域中
属性名为javax.servlet.jsp.jstl.fmt.locale.request
如果将Locale对象保存在其他域中,属性名为
javax.servlet.jsp.jstl.fmt.locale加上scope属性值作为后缀。如保存在session域中
的属性名为javax.servlet.jsp.jstl.fmt.locale.session
-->
<fmt:setLocale value="${param.locale}" scope="request" />
<!-- 创建ResourceBundle对象实例 -->
<fmt:setBundle basename="resources.I18nResource" var="i18n"/>
<!-- 输出相应的国际化信息 -->
<fmt:message bundle="${i18n}" key="i18n.welcome"/><hr>
<jsp:useBean id ="now" class="java.util.Date"/>
<fmt:message bundle="${i18n}" key="i18n.datetime">
<fmt:param value="${now}"/>
<fmt:param value="${now}"/>
</fmt:message>
<hr>
<fmt:message bundle="${i18n}" key="i18n.message">
<fmt:param value="${20}"/>
<fmt:param value="${466}"/>
</fmt:message>
<hr>
<!-- 从request域中获得并输出Locale对象-->
${requestScope["javax.servlet.jsp.jstl.fmt.locale.request"]}
在上面的程序中涉及到了很多国际化标签,这些国际化标签的具体细节将在后面的部分详细介绍。
在浏览器地址栏中输入如下的URL:
http://localhost:8080/demo/chapter9/setLocale.jsp?locale=en-US
浏览器输出的信息如图9.20所示。
图9.20 使用英语(美国)本地化信息
在浏览器地址栏中输入如下的URL:
http://localhost:8080/demo/chapter9/setLocale.jsp?locale=zh-CN
浏览器输出的信息如图9.21所示。
图9.21 使用中文(中国)本地化信息