I18N格式化标签库
JSTL标签提供了对国际化(I18N)的支持,它可以根据发出请求的客户端地域的不同来显示不同的语言。同时还提供了格式化数据和日期的方法。
实现这些功能需要I18N格式标签库(I18N-capable formation tags liberary)。引入该标签库的方法为:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
I18N格式标签库提供了11个标签,这些 标签从功能上可以划分为3类如下:
(1)数字日期格式化。formatNumber标签、formatData标签、parseNumber标签、parseDate标签、timeZone标签、setTimeZone标签。
(2)读取消息资源。bundle标签、message标签、setBundle标签。
(3)国际化。setlocale标签、requestEncoding标签。
1 数字日期格式化
数字日期格式化标签共有6个,用来将数字或日期转换成设定的格式。
1.1<frm:formatNumber/>标签
该标签依据特定的区域将数字改变为不同的格式来显示。
【语法1】:
<frm:formatNumber value=”被格式化的数据”[type=”number|currency|percent”]
[pattern=”pattern”]
[currencyCode=”code”]
[currencySymbol=”symbol”]
[groupingUsed=”true|false”]
[maxIntergerDigits=”maxDigits”]
[minIntergerDigits=”minDigits”]
[maxFractionDigits=”maxDigits”]
[minFractionDigits=”minDigits”]
[var=”name”]
[scope=page|request|session|application]
/>
【语法2】:
<frm:formatNumber [type=”number|currency|percent”]
[pattern=”pattern”]
[currencyCode=”code”]
[currencySymbol=”symbol”]
[groupingUsed=”true|false”]
[maxIntergerDigits=”maxDigits”]
[minIntergerDigits=”minDigits”]
[maxFractionDigits=”maxDigits”]
[minFractionDigits=”minDigits”]
[var=”name”]
[scope=page|request|session|application]
> 被格式化的数据<frm:formatNumber>
属性说明<fmt:formatNumber>标签参数说明
名称:说明:EL:类型:必须:默认值
value:要格式化的数据:是:String:是:无
type:指定类型(单位、货币、百分比等):是:String:否:number
pattern:格式化的数据样式:是:String:否:无
currencyCode:货币单位代码:是:String:否:无
cuttencySymbol:货币符号($、¥):是:String:否:无
groupingUsed:是否对整数部分进行分组如(9,999):是:boolean:是:true
maxIntergerDigits:整数部分最对显示多少位数:是:int:否:无
minIntergerDigits:整数部分最少显示多少位:是:int:否:无
maxFractionDigits:小数部分最多显示多少位:是:int:否:无
minFractionDigits:小数部分最少显示多少位:是:int:否:无
var:存储格式化后的数据:否:String:否:无
scope:var的JSP范围:否:String:否:page
Type属性的类型应用
类型:说明:示例
number:数字格式:0.8
currency:当地货币:¥0.80
percent:百分比格式:80%
1.2.<frm:parseNumber>标签
将格式化后的数字、货币、百分比都转化为数字类型。
【语法1】:
<fmt:parseNumber value="number" [type=”number|currency|percent”]
[pattern=”pattern”]
[parseLocale=”locale”]
[intergerOnly=”true|false”]
[scope=”page|request|session|application”]
/>
【语法2】:
<fmt:parseNumber [type=”number|currency|percent”]
[pattern=”pattern”]
[parseLocale=”locale”]
[intergerOnly=”true|false”]
[scope=”page|request|session|application”]
> Number </fmt:parseNumber>
属性说明 <fmt:parseNumber>标签参数说明
名称:说明:EL:类型:是否必须:默认值
value:被解析的字符串:是:String:是:无
type:指定单位(数字、货币、百分比):是:String:是:number
pattern:格式样式:是:String:否:无
parseLocale:用来替代默认区域的设定:是:String||Java.util.Locale:是:默认本地样式
var:存储已经格式化的数据:否:String:否:无
scope:var变量的作用域:否:String:是:page
<fmt:parseNumber>可以看作是<fmt:formatNumber>的逆运算。相应的参数和类型的配置和使用<fmt:formatNumber>格式化时相同。
提示:<fmt:parseNumber>属性参数的配置和使用同<fmt:formatNumber>标签使用的方式一样。同时,在进行类型转换时如果给出的类型不正确将会出现异常。
例如在进行百分比转化时如果没有给type类型或者给出type类型但提供的数据中没有%都会产生异常。因此在实际应用中用<c:catch/>捕获异常。
1.3.<fmt:formatDate>标签
该标签主要用来格式化日期和时间。
【语法】:
<fmt: formatDate value=”date” [type=”time|date|both”]
[pattern=”pattern”]
[dateStyle=”default|short|medium|long|full”]
[timeStyle=”default|short|medium|long|full”]
[timeZone=”timeZone”]
[var=”name”]
[scope=”page|request|session|application”]
/>
参数说明<fmt:formatDate>标签属性说明
属性名:说明:EL:类型:必须:默认值
value:将要格式化的日期对象:是:Java.util.Date:是:无
type:显示的部分(日期、时间或者两者):是:String:否:date
partten:格式化的样式:是:String:否:无
dateStyle:设定日期的显示方式:是:String:否:default
timeStyle:设定时间的显示方式:是:String:否:default
timeZone:设定使用的时区:是:String:否:当地所用时区
var:存储已格式化的日期或时间:否:String:否:无
scope:指定var存储的JSP范围:否:String:否:无
其中type属性参数说明
参数名:说明
time:只显示时间
date:只显示时期
both:显示日期和时间
1.4.<fmt:parseDate>标签
<fmt:parseDate>标签主要将字符串类型的时间或日期转化为时间或日期对象。
【语法1】:
<fmt:parseDate value=”date” [type=”time|date|both”]
[pattern=”pattern”]
[parseLocale=”locale”]
[dateStyle=”default|short|medium|long|full”]
[timeStyle=”default|short|medium|long|full”]
[timeZone=”timezone”]
[var=”name”]
[scope=”page|request|session|application”]
/>
【语法2】:
<fmt:parseDate [type=”time|date|both”]
[pattern=”pattern”]
[parseLocale=”locale”]
[dateStyle=”default|short|medium|long|full”]
[timeStyle=”default|short|medium|long|full”]
[timeZone=”timezone”]
[var=”name”]
[scope=”page|request|session|application”]
> Date</fmt:parseDate>
【参数说明】参数说明<fmt:parseData>标签属性说明
属性名:说明:EL:类型:必须:默认值
value:将要格式化的日期时间:是:String:是:无
type:字符串的类型(日期、时间或全部):EL:String:是:date
pattern:字符串使用的时间样式:是:String:是:无
parseLocale:取代默认地区设定:是:String:是:默认地区
dateStyle:字符串使用的日期显示方式:是:String:否:default
timeStyle:字符串使用的时间显示格式:是:String:否:default
timeZone:使用的时区:是:String:否:当地区时
var:使用var定义的名字保存对象:否:String:否:无
scope:var的JSP范围:否:String:否:page
提示:<fmt:formatDate>和<fmt:parseDate>是相反的运算过程,可以对照学习。
1.5.<fmt:setTimeZone>标签
该标签用于设定默认时区或者将时区存储在指定的JSP范围内。
【语法】:
<fmt:setTimeZone value=”value” [var=”name”][scope=”page|request|session|application”]/>
【参数说明】 <fmt:setTimeZone>标签属性说明
参数名:说明:EL:类型:必须:默认值
value:使用的时区:是:String||ava.util.TimeZone:是:无
var:使用var定义的参数名保存值:否:String:否:无
scope:存储var的JSP范围:否:String:否:page
value用来设定使用的时区,例如中国使用的时区为CST,其他的还有EST、PST等。可以把时区存储在指定的JSP范围内,例如存储在session中,
用户访问的所有页面都可以显示使用的设定的时区下对应的时间。
提示:有关TimeZone的说明见JDK帮助文档的java.util.TimeZone类。
1.6.<fmt:timeZone>标签
该标签主要用于设置标签体内使用的时区。
【语法】:
<fmt:timeZone value=”timeZone”>
…..
</fmt:timeZone>
使用<fmt:timeZone></fmt:timeZone>只会应用到标签体内使用的时区,对标签外部将不产生影响。
2 读取消息资源
读取消息资源用到的标签主要有4个:<fmt:message>标签、<fmt:param>标签、<fmt:bundle>标签和<fmt:setBundle>标签。主要用于从资源文件中读取信息。
2.1.<fmt:bundle>标签
该标签主要用于将资源文件绑定于它的标签体中的显示。
【语法】:
<fmt:bundle basename=”name”[prefix=”prefix”]>
….标签主题
</fmt:bundle>
【参数说明】: <fmt:bundle>标签属性说明
参数名:说明:EL:类型:必须:默认值
basename:指定使用的资源文件的名称:是:String:是:无
prefix:前置关键字:是:String:否:无
2.2.<fmt:setBundle>标签
该标签主要用于绑定资源文件或者把资源文件保存在指定的JSP范围内。
【语法】:
<fmt:setBundle basename=”name” [var=”name”] [scope=”page|request|session|application”] >
【参数说明】: <fmt:setBundle>标签属性说明
参数名:说明:EL:类型:必须:默认值
basename:指定使用的资源文件的名称:是:String:是:无
var:指定将资源文件保存的名称:否:String:否:无
scope:设定将资源文件保存的JSP范围:否:String:否:page
2.3.<fmt:message>标签
该标签主要负责读取本地资源文件,从指定的消息文本资源文件中读取键值,并且可以将键值保存在指定的JSP范围内。
【语法1】:
<fmt:message key=”keyName”[bundle=”bundle”] [scope=”page|request|session|application”] />
【语法2】:
<fmt:message key=”keyName”[bundle=”bundle”] [scope=”page|request|session|application”] > <fmt:param/> </fmt:message>
【语法3】:
<fmt:message key=”keyName”[bundle=”bundle”] [scope=”page|request|session|application”] > key<fmt:param/> … </fmt:message>
【参数说明】: <fmt:message>标签属性说明
参数名:说明:EL:类型:必须:默认值
key:指定键值的名称(索引):是:String:是:无
bundle:指定消息文本的来源:是:LocalizationContext:否:无
var:指定存储键值的变量名:否:String:否:无
scope:指定var的作用域:否:String:否:page
提示:建议此处的bundle使用EL表达式,因为属性bundle的类型为LocalizationContext,而不是一个String类型的URL
<fmt:bundle>标签中有一个prefix属性,该标签用来指明前缀。例如配置文件内容如下:
org.person.name=olive
org.personpassword=01234
如果不使用prefix标签,在取值是要指明前缀。例如:
<fmt:bundle basename=”message”>
<fmt:message key=”org.person.name”></fmt:message>
<fmt:message key=”org.person.password”></fmt:message>
</fmt:bundle>
使用prefix属性可以简化取值时的代码。
<fmt:bundle basename=”message” prefix=”org.person”>
<fmt:message key=”name”></fmt:message>
<fmt:message key=”password”></fmt:message>
</fmt:bundle>
2.4.<fmt:param>标签
该标签主要用于当<fmt:message>中资源文件中获得键值时,动态的为资源文件中的变量赋值。
【语法1】:
<fmt:param value=”value”/>
【语法2】:
<fmt:param > …标签主体 </fmt:param>
3 国际化
国际化这个分类中共包含两个标签:用于设定语言地区<fmt:setLocale/>和用于设定请求的字符编码的<fmt:requestEncoding>标签。
3.1.<fmt:setLocale/>标签
<fmt:setLocale>标签用来设定用户语言区域。
【语法】:
<fmt:setLocale value=”locale”[variant=”variant”] [scope=”page|request|session|application”]>
【参数说明】: <fmt:setLocale>标签属性说明
参数名:说明:EL:类型:必须:默认值
value:指定区域代码:是:String||java.util.Locale:是:无
variant:操作系统的类型:是:String:是:无
scope:设定时区的作用范围:否:String:是:page
value属性用来指定使用的语言代码,可以从浏览器的【工具】---【Internet选项】---【语言】---【添加】中查看浏览器支持的语言种类及语言代码。
例如:中文(zh_cn)、台湾(zh_tw)、香港(zh_mo)等。
3.2.<fmt:requestEncoding>标签
该标签用于设定请求的编码格式。功能同servletRequest.setCharacterEncoding()方法相同。
【语法】:
<fmt:requestEncoding [value=”charEncoding”]/>
【参数说明】:
value属性用来指定使用的编码集例如:gbk、gb2312等。当没有给出value的值时将会自动搜索取寻找合适的编码方式,因此能够很好的解决中文乱码问题。