9.4.1 <fmt:setLocale>标签

优质
小牛编辑
126浏览
2023-12-01

<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所示。

20

图9.20 使用英语(美国)本地化信息

在浏览器地址栏中输入如下的URL:

http://localhost:8080/demo/chapter9/setLocale.jsp?locale=zh-CN

浏览器输出的信息如图9.21所示。

21

图9.21 使用中文(中国)本地化信息