一、国际化标签库概述
为了简化WEB应用的国际化开发,JSTL中提供了一个用于实现国际化和格式化功能的标签库,我们将其简称为国际化标签库,JSP规范为国际化标签库建议的前缀名为fmt。国际化标签库中包括了一组用于实现WEB国际化功能的标签,这组标签封装了Java语言中java.util和java.text这两个包中与国际化相关的API类的功能。国际化标签库中提供了绑定资源包和从资源包中的本地资源文件内读取文本内容的标签,也提供了对数值和日期等本地敏感的数据按本地化信息进行显示和解析的标签,还提供了按本地特定的时区来调整时间的标签。
国际化标签库中的标签可以根据客户端浏览器的信息来自动确定本地信息,也可以由JSP页面作者显式地指定本地信息。
二、国际化标签库的应用
1、<fmt:setLocale>标签
功能:
<fmt:setLocale>标签用于在JSP页面中显式地设置用户的本地化信息,并将设置的本地化信息以Locale对象的形式保存在某个Web域中,其在Web域中的属性名称为“javax.servlet.jsp.jstl.fmt.locale”。使用<fmt:setLocale>标签设置本地化信息后,国际化标签库中的其他标签将使用该本地化信息,而忽略客户端浏览器传递过来的本地信息
格式:
<fmt:setLocalevalue="locale"
[variant="variant"] [scope="{page|request|session|application}"]/>
2、<fmt:setBundle>标签
功能:
<fmt:setBundle>标签用于根据<fmt:setLocale>标签设置的本地化信息创建一个资源包(ResourceBundle)实例对象,并将其绑定到一个Web域的属性上。
格式:
<fmt:setBundle basename="basename"
[var="varName"]
[scope="{page|request|session|application}"] />
3、<fmt:bundle>标签
功能:
<fmt:bundle>标签与<fmt:setBundle>标签的功能类似,但它创建的ResourceBundle实例对象只在其标签体内有效
格式:
<fmt:bundle basename="basename"
[prefix="prefix"]>
body content
</fmt:bundle>
4、<fmt:message>标签
功能:
<fmt:message>标签用于从一个资源包中读取信息并进行格式化输出
格式:
语法1,没有标签体的情况:
<fmt:message key="messageKey"
[bundle="resourceBundle"]
[var="varName"]
[scope="{page|request|session|application}"] />
语法2,在标签体中指定格式化文本串中的占位符参数的情况:
<fmt:message key="messageKey"
[bundle="resourceBundle"]
[var="varName"]
[scope="{page|request|session|application}"]>
<fmt:param>subtags
</fmt:message>
语法3,在标签体中指定消息关键字和可选择的占位符参数:
<fmt:message [bundle="resourceBundle"]
[var="varName"]
[scope="{page|request|session|application}"]>
key
optional<fmt:param>subtags
</fmt:message>
5、<fmt:param>标签
功能:
<fmt:param>标签用于为格式化文本串中的占位符设置参数值,它只能嵌套在<fmt:message>标签内使用
格式:
语法1,用value属性指定参数值:
<fmt:param value="messageParameter" />
语法2,在标签体中指定参数的值的情况:
<fmt:param>
body content
</fmt:param>
6、<fmt:requestEncoding>标签
功能:
<fmt:requestEncoding>标签用于设置请求消息的字符集编码,该标签内部调用request.setCharacterEncoding()方法,以便Web容器将请求消息中的参数值按该字符集编码转换成Unicode字符串返回
格式:
<fmt:requestEncoding[value="charsetName" />
7、<fmt:timeZone>标签
功能:
<fmt:timeZone>标签用于设置时区,但它的设置值只对其标签体部分有效
格式:
<fmt:timeZonevalue="timeZone">
bodycontent
</fmt:timeZone>
8、<fmt:setTimeZone>标签
功能:
<fmt:setTimeZone>标签用于在JSP页面中显示地设置时区,并将设置的时区信息以TimeZone对象的形式保存在某个Web域中,其在Web域中的属性名称为javax.servlet.jsp.jstl.fmt.timeZone
格式:
<fmt:setTimeZonevalue="timeZone"
[var="varName"]
[scope="{page|request|session|application}"]/>
9、<fmt:formatDate>标签
功能:
<fmt:formatDate>标签用于对日期和时间按本地化信息进行格式化,或对日期和时间按化为JSP页面作者自定义的格式进行格式化
格式:
<fmt:formatDatevalue="date"
[type="{time|date|both}"]
[dateStyle="{default|short|medium|long|full}"]
[timeStyle="{default|short|medium|long|full}"]
[pattern="customPattern"]
[timeZone="timeZone"]
[var="varName"]
[scope="{page|request|session|application}"]/>
10、<fmt:parseDate>标签
功能:
<fmt:parseDate>标签与<fmt: formatDate >标签的作用正好相反,它用于将一个表示日期和时间的字符串解析成java.util.Date实例对象
格式:
语法1,没有标签体的情况:
<fmt:parseDate value="dateString"
[type="time|date|both"]
[dateStyle="default|short|medium|long|full"]
[timeStyle="default|short|medium|long|full"]
[pattern="customPattern"]
[timeZone="timeZone"]
[parseLocale="parseLocale"]
[var="varName"]
[scope="{page|request|session|application}"]/>
语法2, 有标签体的情况,在标签体中指定要被解析的日期和/或时间值:
<fmt:parseDate [type="time|date|both"]
[dateStyle="default|short|medium|long|full"]
[timeStyle="default|short|medium|long|full"]
[pattern="customPattern"]
[timeZone="timeZone"]
[parseLocale="parseLocale"]
[var="varName"]
[scope="{page|request|session|application}"]>
date value to be parsed
</fmt:parseDate>
11、<fmt:formatNumber>标签
功能:
<fmt:formatNumber>标签用于将数值、货币或百分数按本地化信息进行格式化,或者按JSP页面作者自定义的格式进行格式化
格式:
语法1,没有标签体的情况:
<fmt:formatNumbervalue="numericValue"
[type="{number|currency|percent}"]
[pattern="customPattern"]
[currencyCode="currencyCode"]
[currencySymbol="currencySymbol"]
[groupingUsed="{true|false}"]
[maxIntegerDigits="maxIntegerDigits"]
[minIntegerDigits="minIntegerDigits"]
[maxFractionDigits="maxFractionDigits"]
[minFractionDigits="minFractionDigits"]
[var="varName"]
[scope="{page|request|session|application}"] />
语法2,有标签体的情况,在标签体中指定要被格式化的数值:
<fmt:formatNumber[type="{number|currency|percent}"]
[pattern="customPattern"]
[currencyCode="currencyCode"]
[currencySymbol="currencySymbol"]
[groupingUsed="{true|false}"]
[maxIntegerDigits="maxIntegerDigits"]
[minIntegerDigits="minIntegerDigits"]
[maxFractionDigits="maxFractionDigits"]
[minFractionDigits="minFractionDigits"]
[var="varName"]
[scope="{page|request|session|application}"]>
要被格式化的数值
</fmt:formatNumber>
12、<fmt:parseNumber>标签
功能:
<fmt:parseDate>标签与<fmt: formatNumber >标签的作用正好相反,它用于将一个按本地化方式被格式化后的数值、货币或百分数解析为数值
格式:
语法1,没有标签体的情况:
<fmt:parseNumbervalue="numericValue"
[type="{number|currency|percent}"]
[pattern="customPattern"]
[parseLocale="parseLocale"]
[integerOnly="{true|false}"]
[var="varName"]
[scope="{page|request|session|application}"]/>
语法2,有标签体的情况,在标签体中指定要被解析的数值:
<fmt:parseNumber[type="{number|currency|percent}"]
[pattern="customPattern"]
[parseLocale="parseLocale"]
[integerOnly="{true|false}"]
[var="varName"]
[scope="{page|request|session|application}"]>
numericvalue to be parsed
</fmt:parseNumber>