看到
I18N
就應(yīng)該想到知識(shí)“國際化”,
I18N formatting
標(biāo)簽庫就是用于在
JSP
頁面中做國際化的動(dòng)作。在該標(biāo)簽庫中的標(biāo)簽一共有
12
個(gè),被分為了兩類,分別是:
q????????
國際化核心標(biāo)簽:
<fmt:setLocale>
、
<fmt:bundle>
、
<fmt:setBundle>
、
<fmt:message>
、
<fmt:param>
、
<fmt:requestEncoding>
。
q????????
格式化標(biāo)簽:
<fmt:timeZone>
、
<fmt:setTimeZone>
、
<fmt:formatNumber>
、
<fmt:parseNumber>
、
<fmt:formatDate>
、
<fmt:parseDate>
。
下面只選擇其中常見的一些標(biāo)簽和屬性進(jìn)行介紹。
9.5.1?
用于設(shè)置本地化環(huán)境的
<fmt:setLocale>
標(biāo)簽
<fmt:setLocale>
標(biāo)簽用于設(shè)置
Locale
環(huán)境。它的屬性和描述如表
9.17
所示:
表
9.17
<fmt:setLocale>
標(biāo)簽屬性和說明
屬性
|
描述
|
value
|
Locale
環(huán)境的指定,可以是
java.util.Locale
或
String
類型的實(shí)例
|
scope
|
Locale
環(huán)境變量的作用范圍(可選)
|
下面看一個(gè)示例:
<fmt:setLocale value="zh_TW"/>
表示設(shè)置本地環(huán)境為繁體中文。
9.5.2?
用于資源文件綁定的
<fmt:bundle>
、
<fmt:setBundle>
標(biāo)簽
這兩組標(biāo)簽用于資源配置文件的綁定,唯一不同的是
<fmt:bundle>
標(biāo)簽將資源配置文件綁定于它標(biāo)簽體中的顯示,
<fmt:setBundle>
標(biāo)簽則允許將資源配置文件保存為一個(gè)變量,在之后的工作可以根據(jù)該變量來進(jìn)行。
根據(jù)
Locale
環(huán)境的不同將查找不同后綴的資源配置文件,這點(diǎn)在國際化的任何技術(shù)上都是一致的,通常來說,這兩種標(biāo)簽單獨(dú)使用是沒有意義的,它們都會(huì)與
I18N formatting
標(biāo)簽庫中的其他標(biāo)簽配合使用。它們的屬性和描述如表
9.18
所示:
表
9.18
<fmt:bundle>
、
<fmt:setBundle>
標(biāo)簽屬性和說明
屬性
|
描述
|
basename
|
資源配置文件的指定,只需要指定文件名而無須擴(kuò)展名,二組標(biāo)簽共有的屬性
|
var
|
<fmt:setBundle>
獨(dú)有的屬性,用于保存資源配置文件為一個(gè)變量
|
scope
|
變量的作用范圍
|
下面看一個(gè)示例
<fmt:setLocale value="zh_CN"/>
<fmt:setBundle basename="applicationMessage" var="applicationBundle"/>
該示例將會(huì)查找一個(gè)名為
applicationMessage_zh_CN.properties
的資源配置文件,來作為顯示的
Resource
綁定。
9.5.3?
用于顯示資源配置文件信息的
<fmt:message>
標(biāo)簽
用于信息顯示的標(biāo)簽,將顯示資源配置文件中定義的信息。它的屬性和描述如表
9.19
所示:
表
9.19
<fmt:message>
標(biāo)簽屬性和說明
屬性
|
描述
|
key
|
資源配置文件的“鍵”指定
|
bundle
|
若使用
<fmt:setBundle>
保存了資源配置文件,該屬性就可以從保存的資源配置文件中進(jìn)行查找
|
var
|
將顯示信息保存為一個(gè)變量
|
scope
|
變量的作用范圍
|
下面看一個(gè)示例:
<fmt:setBundle basename="applicationMessage" var="applicationBundle"/>
<fmt:bundle basename="applicationAllMessage">
???????? <fmt:message key="userName" />
???????? <p>
???????? <fmt:message key="passWord" bundle="${applicationBundle}" />
</fmt:bundle>
該示例使用了兩種資源配置文件的綁定的做法,“
applicationMessage
”資源配置文件利用
<fmt:setBundle>
標(biāo)簽被賦于了變量“
applicationBundle
”,而作為
<fmt:bundle>
標(biāo)簽定義的“
applicationAllMessage
”資源配置文件作用于其標(biāo)簽體內(nèi)的顯示。
q????????
第一個(gè)
<fmt:message>
標(biāo)簽將使用“
applicationAllMessage
”資源配置文件中“鍵”為“
userName
”的信息顯示。
q????????
第二個(gè)
<fmt:message>
標(biāo)簽雖然被定義在
<fmt:bundle>
標(biāo)簽體內(nèi),但是它使用了
bundle
屬性,因此將指定之前由
<fmt:setBundle>
標(biāo)簽保存的“
applicationMessage
”資源配置文件,該“鍵”為“
passWord
”的信息顯示。
9.5.4?
用于參數(shù)傳遞的
<fmt:param>
標(biāo)簽
<fmt:param>
標(biāo)簽應(yīng)該位于
<fmt:message>
標(biāo)簽內(nèi),將為該消息標(biāo)簽提供參數(shù)值。它只有一個(gè)屬性
value
。
<fmt:param>
標(biāo)簽有兩種使用版本,一種是直接將參數(shù)值寫在
value
屬性中,另一種是將參數(shù)值寫在標(biāo)簽體內(nèi)。
9.5.6?
用于為請(qǐng)求設(shè)置字符編碼的
<fmt:requestEncoding>
標(biāo)簽
<fmt:requestEncoding>
標(biāo)簽用于為請(qǐng)求設(shè)置字符編碼。它只有一個(gè)屬性
value
,在該屬性中可以定義字符編碼。
9.5.7?
用于設(shè)定時(shí)區(qū)的
<fmt:timeZone>
、
<fmt:setTimeZone>
標(biāo)簽
這兩組標(biāo)簽都用于設(shè)定一個(gè)時(shí)區(qū)。唯一不同的是
<fmt:timeZone>
標(biāo)簽將使得在其標(biāo)簽體內(nèi)的工作可以使用該時(shí)區(qū)設(shè)置,
<fmt:setBundle>
標(biāo)簽則允許將時(shí)區(qū)設(shè)置保存為一個(gè)變量,在之后的工作可以根據(jù)該變量來進(jìn)行。它們的屬性和描述如表
9.20
所示:
表
9.20
<fmt:timeZone>
、
<fmt:setTimeZone>
標(biāo)簽
屬性和說明
屬性
|
描述
|
value
|
時(shí)區(qū)的設(shè)置
|
var
|
<fmt:setTimeZone>
獨(dú)有的屬性,用于保存時(shí)區(qū)為一個(gè)變量
|
scope
|
變量的作用范圍
|
9.5.8?
用于格式化數(shù)字的
<fmt:formatNumber>
標(biāo)簽
<fmt:
formatNumber
>
標(biāo)
簽用于格式化數(shù)字。它的屬性和描述如表
9.21
所示:
表
9.21
<fmt:formatNumber>
標(biāo)簽屬性和說明
屬性
|
描述
|
value
|
格式化的數(shù)字,該數(shù)值可以是
String
類型或
java.lang.Number
類型的實(shí)例
|
type
|
格式化的類型
|
pattern
|
格式化模式
|
var
|
結(jié)果保存變量
|
scope
|
變量的作用范圍
|
maxIntegerDigits
|
指定格式化結(jié)果的最大值
|
minIntegerDigits
|
指定格式化結(jié)果的最小值
|
maxFractionDigits
|
指定格式化結(jié)果的最大值,帶小數(shù)
|
minFractionDigits
|
指定格式化結(jié)果的最小值,帶小數(shù)
|
<fmt:formatNumber>
標(biāo)簽實(shí)際是對(duì)應(yīng)
java.util.NumberFormat
類,
type
屬性的可能值包括
currency
(貨幣)、
number
(數(shù)字)和
percent
(百分比)。
下面看一個(gè)示例。
<fmt:formatNumber value="1000.888" type="currency" var="money"/>
該結(jié)果將被保存在“
money
”變量中,將根據(jù)
Locale
環(huán)境顯示當(dāng)?shù)氐呢泿鸥袷健?/span>
9.5.9?
用于解析數(shù)字的
<fmt:parseNumber>
標(biāo)簽
<fmt:parseNumber>
標(biāo)簽用于解析一個(gè)數(shù)字,并將結(jié)果作為
java.lang.Number
類的實(shí)例返回。
<fmt:parseNumber>
標(biāo)簽看起來和
<fmt:formatNumber>
標(biāo)簽的作用正好相反。它的屬性和描述如表
9.22
所示:
表
9.22
<fmt:parseNumber>
標(biāo)簽屬性和說明
屬性
|
描述
|
value
|
將被解析的字符串
|
type
|
解析格式化的類型
|
pattern
|
解析格式化模式
|
var
|
結(jié)果保存變量,類型為
java.lang.Number
|
scope
|
變量的作用范圍
|
parseLocale
|
以本地化的形式來解析字符串,該屬性的內(nèi)容應(yīng)為
String
或
java.util.Locale
類型的實(shí)例
|
下面看一個(gè)示例。
<fmt:parseNumber value="15%" type="percent" var="num"/>
解析之后的結(jié)果為“
0.15
”。
9.5.10?
用于格式化日期的
<fmt:formatDate>
標(biāo)簽
<fmt:formatDate>
標(biāo)簽用于格式化日期。它的屬性和描述如表
9.23
所示:
表
9.23
<fmt:formatDate>
標(biāo)簽屬性和說明
屬性
|
描述
|
value
|
格式化的日期,該屬性的內(nèi)容應(yīng)該是
java.util.Date
類型的實(shí)例
|
type
|
格式化的類型
|
pattern
|
格式化模式
|
var
|
結(jié)果保存變量
|
scope
|
變量的作用范圍
|
timeZone
|
指定格式化日期的時(shí)區(qū)
|
<fmt:formatDate>
標(biāo)簽與
<fmt:timeZone>
、
<fmt:setTimeZone>
兩組標(biāo)簽的關(guān)系密切。若沒有指定
timeZone屬性,
也可以通過
<fmt:timeZone>
、
<fmt:setTimeZone>
兩組標(biāo)簽設(shè)定的時(shí)區(qū)來格式化最后的結(jié)果。
9.5.11?
用于解析日期的
<fmt:parseDate>
標(biāo)簽
<fmt:parseDate>
標(biāo)簽用于解析一個(gè)日期,并將結(jié)果作為
java.lang.Date
類型的實(shí)例返回。
<fmt:parseDate>
標(biāo)簽看起來和
<fmt:formatDate>
標(biāo)簽的作用正好相反。它的屬性和描述如表
9.24
所示:
表
9.24
<fmt:parseDate>
標(biāo)簽屬性和說明
屬性
|
描述
|
value
|
將被解析的字符串
|
type
|
解析格式化的類型
|
pattern
|
解析格式化模式
|
var
|
結(jié)果保存變量,類型為
java.lang.Date
|
scope
|
變量的作用范圍
|
parseLocale
|
以本地化的形式來解析字符串,該屬性的內(nèi)容為
String
或
java.util.Locale
類型的實(shí)例
|
timeZone
|
指定解析格式化日期的時(shí)區(qū)
|
<fmt:parseNumber>
和
<fmt:parseDate>
兩組標(biāo)簽都實(shí)現(xiàn)解析字符串為一個(gè)具體對(duì)象實(shí)例的工作,因此,這兩組解析標(biāo)簽對(duì)
var
屬性的字符串參數(shù)要求非常嚴(yán)格。就
JSP
頁面的表示層前段來說,處理這種解析本不屬于份內(nèi)之事,因此
<fmt:parseNumber>
和
<fmt:parseDate>
兩組標(biāo)簽應(yīng)該盡量少用,替代工作的地方應(yīng)該在服務(wù)器端表示層的后段,比如在
Servlet
中。