2011級-csdn-java-張侃— JavaWEB開發-國際化(二)

 編程實現固定文本的國際化

l      ResourceBundle類提供了一個靜態方法getBundle,該方法用於裝載資源文件,並創建ResourceBundle實例:

                Locale currentLocale = Locale.getDefault();

                 ResourceBundle myResources =

            ResourceBundle.getBundle(basename, currentLocale);

•       basename爲資源包基名(且必須爲完整路徑)。

•       如果與該locale對象匹配的資源包子類找不到。一般情況下,則選用默認資源文件予以顯示。

l      加載資源文件後, 程序就可以調用ResourceBundle實例對象的 getString 方法獲取指定的資源信息名稱所對應的值。

        Stringvalue =  myResources.getString(“key");

l      在WEB應用中實現固定文本的國際化

動態數據的國際化

l      數值,貨幣,時間,日期等數據由於可能在程序運行時動態產生,所以無法像文字一樣簡單地將它們從應用程序中分離出來,而是需要特殊處理。Java 中提供瞭解決這些問題的 API 類(位於 java.util 包和 java.text 包中)

l     Locale 類

•       Locale 實例對象代表一個特定的地理,政治、文化區域。

•       一個 Locale 對象本身不會驗證它代表的語言和國家地區信息是否正確,只是向本地敏感的類提供國家地區信息,與國際化相關的格式化和解析任務由本地敏感的類去完成。(若JDK中的某個類在運行時需要根據 Locale 對象來調整其功能,這個類就稱爲本地敏感類)

l      與前面的Core標籤一樣,在使用標籤前需要先導入標籤庫,在JSP頁面中導入國際化標籤庫的語法如下:

<%@ taglib uri=" http://java.sun.com/jsp/jstl/fmt"prefix="fmt"%>

 

幾種主要的國際化標籤

l      在JSTL之中的國際化標籤主要包括<fmt:setLocale>、<fmt:bundle>、<fmt:setBundle>、<fmt:message>、<fmt:setLocale>:指定Locale環境。

•       <fmt:bundle>:指定消息資源使用的文件。

•       <fmt:setBundle>:設置消息資源文件。

•       <fmt:message>:顯示消息資源文件中指定key的消息,支持帶參數消息。

l      <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}"]/>

 

l      <fmt:setBundle>

<fmt:setBundle>標籤用於根據<fmt:setLocale>標籤設置的本地化信息創建一個資源包(ResourceBundle)實例對象,並將其綁定到一個Web域的屬性上。

標籤的語法格式如下:

<fmt:setBundlebasename="basename"

                     [var="varName"]

                     [scope="{page|request|session|application}"]/>

l      <fmt:bundle>標籤

<fmt:bundle>標籤與<fmt:setBundle>標籤的功能類似,但它創建的ResourceBundle實例對象只在其標籤體內有效。

 

<fmt:bundle basename="basename“ >

       body content

</fmt:bundle>

l      <fmt:message>標籤

    <fmt:message>標籤用於從一個資源包中讀取信息並進行格式化輸出。

 <fmt:messagekey="messageKey"      

                     [bundle="resourceBundle"]

                     [var="varName"]          [scope="{page|request|session|application}"]/>

 

國際化標籤示例

中文編碼:


英文編碼:


Jsp頁面:

<%@ page language="java"import="java.util.*"pageEncoding="UTF-8"%>

<%@ taglib uri ="http://java.sun.com/jsp/jstl/fmt"prefix="fmt"%>

 

 

<!DOCTYPEHTMLPUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">

<html>

  <head>

   

    

    <title>My JSP '3.jsp'starting page</title>

    

   <metahttp-equiv="pragma"content="no-cache">

   <metahttp-equiv="cache-control"content="no-cache">

   <metahttp-equiv="expires"content="0">   

   <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">

   <metahttp-equiv="description"content="This is my page">

   <!--

   <link rel="stylesheet"type="text/css"href="styles.css">

   -->

 

  </head>

  <fmt:setLocalevalue="en"/>

  <fmt:setBundlebasename="com.hbsi.csdn.Mylangues"/>

  

  <body>

  <fmt:messagekey="username"/>:<inputtype="text"name="username"/><br/>

  <fmt:messagekey="password"/>:<inputtype="password"name="password"/><br/>

  <fmt:messagekey="age"/>:<inputtype="text"name="age"/><br/>

  <inputtype="submit"value="<fmt:messagekey="submit"/>:"/>

  <inputtype="reset"value="<fmt:messagekey="reset"/>:"/>

  </body>

</html>


 

中文界面:


英文界面:



DateFormat(國際化日期)

l     DateFormat類可以將一個日期/時間對象格式化爲表示某個國家地區的日期/時間字符串。

 

l     DateFormat類除了可按國家地區格式化輸出日期外,它還定義了一些用於描述日期/時間的顯示模式的 int 型的常量,包括FULL, LONG, MEDIUM, DEFAULT, SHORT,實例化DateFormat對象時,可以使用這些常量,控制日期/時間的顯示長度。

DateFormat

l     例如,對於日期/時間“2005年9月15日下午4時41分20秒”,如設置了DateFormat的顯示模式,則日期/時間顯示樣式分別爲:

•       SHORT模式完全是數字的,在中文環境下顯示爲“05-9-15 下午4:41”;在英文環境下爲“9/15/05 4:41 PM”。

 

•       MEDIUM模式比SHORT模式長些,在中文環境顯示爲“2005-9-15 16:41:20”;在英文環境下顯示爲“Sep 15, 2005 4:41:20 PM”。

 

•       LONG模式比MEDIUM模式更長一些,在中文環境下顯示爲“2005年9月15日 下午04時41分20秒”;在英文環境下顯示爲“September15, 2005 4:41:20 PM CST”。

 

•       FULL模式指定日期/時間的完整格式,在中文環境下顯示爲“2005年9月15日 星期四 下午04時41分20秒 CST”;在英文環境下,這個日期/時間顯示爲“Thursday, September 15, 2005 4:41:20 PM CST”。

實例化DateFormat

l     實例化DateFormat類有九種方式,以下三種爲帶參形式,下面列出的三種方式也可以分別不帶參,或只帶顯示樣式的參數。

•       getDateInstance(intstyle, Locale aLocale):以指定的日期顯示模式和本地信息來獲得DateFormat實例對象,該實例對象不處理時間值部分。

•       getTimeInstance(intstyle, Locale aLocale):以指定的時間顯示模式和本地信息來獲得DateFormat實例對象,該實例對象不處理日期值部分。

•       getDateTimeInstance(intdateStyle, int timeStyle, Locale aLocale):以單獨指定的日期顯示模式、時間顯示模式和本地信息來獲得DateFormat實例對象。

DateFormat

l     DateFormat對象的方法:

•       format: 將date對象格式化爲符合某個本地環境習慣的字符串。

•       parse:將字符串解析爲日期/時間對象

•       注意:parse和format完全相反,一個是把date時間轉化爲相應地區和國家的顯示樣式,一個是把相應地區的時間日期轉化成date對象,該方法在使用時,解析的時間或日期要符合指定的國家、地區格式,否則會拋異常。

 

l     DateFormat對象通常不是線程安全的,每個線程都應該創建自己的 DateFormat 實例對象

NumberFormat

l     NumberFormat可以將一個數值格式化爲符合某個國家地區習慣的數值字符串,也可以將符合某個國家地區習慣的數值字符串解析爲對應的數值

l     NumberFormat類的方法:

•       format 方法:將一個數值格式化爲符合某個國家地區習慣的數值字符串

•       parse 方法:將符合某個國家地區習慣的數值字符串解析爲對應的數值。

l     實例化NumberFormat類時,可以使用locale對象作爲參數,也可以不使用,下面列出的是使用參數的。

l     getNumberInstance(Localelocale):以參數locale對象所標識的本地信息來獲得具有多種用途的NumberFormat實例對象

l     getIntegerInstance(Localelocale):以參數locale對象所標識的本地信息來獲得處理整數的NumberFormat實例對象

l     getCurrencyInstance(Localelocale):以參數locale對象所標識的本地信息來獲得處理貨幣的NumberFormat實例對象

l     getPercentInstance(Localelocale):以參數locale對象所標識的本地信息來獲得處理百分比數值的NumberFormat實例對象

MessageFormat(動態文本)

l     如果一個字符串中包含了多個與國際化相關的數據,可以使用MessageFormat類對這些數據進行批量處理。

l     例如:

       At 12:30 pm on jul 3,1998, a hurricancedestroyed 99 houses and caused $1000000 of damage

•       以上字符串中包含了時間、數字、貨幣等多個與國際化相關的數據,對於這種字符串,可以使用MessageFormat類對其國際化相關的數據進行批量處理。

l     MessageFormat類如何進行批量處理呢?

•       1.MessageFormat類允許開發人員用佔位符替換掉字符串中的敏感數據(即國際化相關的數據)。

•       2.MessageFormat類在格式化輸出包含佔位符的文本時,messageFormat類可以接收一個參數數組,以替換文本中的每一個佔位符。

模式字符串與佔位符

 

l      At 12:30 pm on jul 3,1998, a hurricancedestroyed 99 houses and caused $1000000 of damage

 

l     模式字符串:

      At {0} on {1},a destroyed {2} houses andcaused {3} of damage.

 

格式化模式字符串

l      模式字符串:

•       On{0}, a hurricance destroyed {1}houses and caused {2} of damage.

l     MessageFormat類

•       MessageFormat(Stringpattern) 

l     實例化MessageFormat對象,並裝載相應的模式字符串。

•       format(objectobj[])

•       格式化輸出模式字符串,參數數組中指定佔位符相應的替換對象。

•       format(newObject[ ]{date, new Integer(99), new Double(1E7) })

 

Stringpattern = "On {0}, a hurricance destroyed {1} houses and caused "

                     + "{2} ofdamage.";

MessageFormatmsgFmt = new MessageFormat(pattern,Locale.US);

 

//準備參數數組

Stringdatetime = "Jul 3, 1998 12:30 PM";

Datedate = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,

                     DateFormat.SHORT,Locale.US).parse(datetime);

Object[] msgArgs = {date, new Integer(99),new Double(1E7)};

 

//執行格式化操作

Stringresult = msgFmt.format(msgArgs);

System.out.println(result);

 

模式字符串與佔位符

l     佔位符有三種方式書寫方式:

•       {argumentIndex}:0-9 之間的數字,表示要格式化對象數據在參數數組中的索引號

•       {argumentIndex,formatType}:參數的格式化類型

•       {argumentIndex,formatType,FormatStyle}:格式化的樣式,它的值必須是與格式化類型相匹配的合法模式、或表示合法模式的字符串。

模式字符串與佔位符

 

Stringpattern = "At {0, time, short} on {0, date}, a destroyed'\n'"

              + "{1} houses and caused {2,number, currency} of damage.";

 

MessageFormatmsgFmt = new MessageFormat(pattern,Locale.US);

 

StringdatetimeString = "Jul 3, 1998 12:30 PM";

Datedate = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,

DateFormat.SHORT,Locale.US).parse(datetimeString);

Stringevent = "a hurricance";

Object[]msgArgs = {date, event, new Integer(99),new Double(1E7)};

 

String result = msgFmt.format(msgArgs);

System.out.println(result);

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章