国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

使用JSR-238更快地全球化您的應用程序

2019-11-18 16:18:28
字體:
來源:轉載
供稿:網友

2007 年 1 月 25 日

     國際化不僅僅是一個趨勢 —— 它已經成為應用程序開發(fā)的必要需求。JSR-238 的目的是幫助 java™ Platform,Micro Edition(Java ME)開發(fā)人員利用 Mobile Information Device PRofile(MIDP)/Connected Limited Device Configuration(CLDC)將其國際化工作減至最少。通過這篇文章發(fā)現一種國際化 MIDlet 的更便捷方法。

簡介

    您是否曾嘗試過國際化 MIDlet,卻以失敗告終?使用 MIDP/CLDC 本地化 MIDlet 需要完成大量的工作,Java Platform,Standard Edition(Java SE)以成熟的 API 簡化國際化工作。CDC Foundation 提供了大量 API 來完成國際化和本地化工作。而如果使用 MIDP/CLDC 來完成這些工作,將是一次非常痛苦的經歷;甚至沒有一個可用的 ResourceBundle 類。還好有另外一個選擇 —— JSR-238 提供了可直接用于資源本地化和數據格式化的類。

    作為開始,看一下 Java SE 和 Java ME 對全球化支持的對比,如 圖 1 所示。(本圖是從 “Considerations of Globalization Solutions in J2ME” 文中轉載的。參見 參考資料 中的鏈接。)



圖 1. Java SE 和 Java ME 全球化支持的對比
使用JSR-238更快地全球化您的應用程序(圖一)

    圖 1 顯示出,編寫一個支持全球化的 Java SE 應用程序是十分簡單的;Java SE 提供了開發(fā)全球化應用程序所需的幾乎所有東西。CDC Foundation 提供了一些用來編寫全球化應用程序的 API ,但不是全部。然而建立在 MIDP/CLDC 基礎上的應用程序僅提供有限的日歷和時區(qū)的相關類,您需要親自編寫幾乎所有的全球化類。

全球化應用程序的歷史

    要本地化 MIDlet,通常需要使用 MIDP 核心類編寫 ResourceBundle 和 Locale。有很多關于如何完成這一任務的文章,包括 “Globalize Your Embedded Apps”(參見 參考資料)。

    為了實現國際化功能,就是說根據不同的地區(qū)顯示其當地語言,您需要編寫自己的 ResourceBundle 類,這對檢索本地化字符串是很必要的,例如面向不同地區(qū)的 “Hello” 和 “Bonjour”。對于數據格式化,例如 Currency、Numbers 和 DateTime,您也需要實現這些程序。這將耗費大量的精力,因為您不得不收集大量的地區(qū)數據信息,還必須熟知具體的文化差異。

JSR-238 Mobile Internationalization API 簡介

    國際化 MIDlet 是接觸更廣闊市場的一個關鍵條件。新的 JSR-238 Mobile Internationalization API 提供了一種標準方法幫助您更快、更輕松地實現 MIDlet 國際化,還提供了用 MIDP/CLDC 實現 MIDlet 國際化的基礎 API。

    請注意:JSR-238 API 是一個可選的軟件包。開始向其部署 JSR-238 MIDlet 之前,必須確保您的設備支持它。

使用JSR-238更快地全球化您的應用程序(圖二)

JSR-238 目標聲明

此聲明引自 JSR-238 規(guī)范:

“Mobile Internationalization API 的目標是為運行在 CLDC 上 MIDP 中的 Java MIDlet 提供國際化服務。Java 2 Standard Edition 提供對國際化的廣泛支持,JAVA 2,Micro Eition 更具局限性的設置和配置文件并不包括這種支持。”

這種 API 被設計為以簡潔通用的形式提供服務。在國際化方面,它使 MIDP 應用程序達到一個與桌面應用程序類似的級別,從而擴充了 MIDP 應用程序平臺。

JSR-238 包,javax.microedition.global 提供的一些重要類如下:

  • ResourceManager 類:管理應用程序資源
  • Formatter 類:創(chuàng)建數據項特定于地區(qū)的翻譯
  • StringComparator 類:使用特定于地區(qū)的規(guī)則比較兩個字符串

    我將具體討論這些類,但在此之前您必須了解,您將需要使用 Sun Java Wireless Toolkit 2.5 for CLDC Beta、Nokia JSR-238 RI 或 Eclipse 來配合 JSR-238 開發(fā) MIDlet。本例將使用 Eclipse。

    首先,您需要獲得 JSR-238 庫,它是隨 Sun WTK 2.5 Beta、Nokia 的 JSR-238 RI 一起提供的。IBM® 在 WebSphere® Everyplace Micro Environment 移植包中提供了 JSR-238,IBM 業(yè)務合作伙伴都可以使用。


    如果您現在使用的是 WTK 的老版本,其中不包括 JSR-238 庫,您需要自己添加 JSR-238。您依然可以在 Eclipse 編寫和編譯,但由于類加載器的限制,Eclipse 是無法啟動的。要配置 Java ME 項目以包含 JSR-238 支持:

  1. 啟動 Eclipse。
  2. 創(chuàng)建一個新的 Java ME 項目,如 圖 2 所示。在這個例子中,我把它命名為 “Simple Globalization Midlets”,單擊 Finish。

    圖 2. 創(chuàng)建一個新的 Java ME 項目
    使用JSR-238更快地全球化您的應用程序(圖三)
  3. 在 Package EXPlorer 視圖中展開 “Simple Globalization Midlet” 項目(如 圖 3 所示),請注意 JSR-238 庫不在這里。

    圖 3. 項目樹
    使用JSR-238更快地全球化您的應用程序(圖四)
  4. 選中 Java ME 庫節(jié)點,右擊并選擇 Build Path > Configure Build Path...
  5. 單擊 Add External Jars...,選擇已下載的 JSR-238 jar 文件,然后單擊 OK。

    圖 4. 將 JSR-238 jar 添加到構建路徑中
    使用JSR-238更快地全球化您的應用程序(圖五)

就是這樣!您已經將 JSR-238 庫添加到開發(fā)環(huán)境中可,現在就可以開始編寫 MIDlet 國際化程序了。

 

進入討論組討論。

使用 ResourceManager

現在我將演示如何使用 ResourceManager 來管理不同地區(qū)的資源文件。

    要用不同的語言來顯示本地字符串,就需要準備不同地區(qū)的資源文件。資源文件包括要本地化的字符串,如果有圖片的話,也要將其包含在資源文件里面。資源文件就像 Java SE 的屬性文件,但是是二進制格式。它有以下優(yōu)點:

  • 部署到設備時占用較少的存儲空間。
  • 裝載時需要較少內存。
  • 它可以包含嵌入的新行。

對于條件有限的設備來說,這些優(yōu)點是十分重要和有效的。

    現在讓我們編寫一個簡單的 MIDlet,根據地區(qū)顯示字符串和圖片。圖 5 顯示了資源文件結構。在以下步驟中,我將使用 WebSphere Everyplace Micro Environment 6.1 和 IBM WebSphere Everyplace Micro Environment 移植包的 JSR-238 庫。

使用JSR-238更快地全球化您的應用程序(圖二) 編寫 MIDlet 程序之前需要知道的標準。

  • 地區(qū)標識符 地區(qū)標識符必須符合 MIDP 2.0 規(guī)范定義的格式,使用短橫線而不是下劃線(例如,“en-US”)。
  • 基本名稱 使用基本名稱將相關資源分組(例如,“l(fā)abels” 和 “messages”)。
  • 資源文件結構 必須將不同地區(qū)的資源文件放到 /global/{地區(qū)標識符}目錄下。


圖 5. 資源文件結構
使用JSR-238更快地全球化您的應用程序(圖六)

步驟 1:準備資源文件

    二進制的資源文件必須遵守嚴格的格式。(參考 JSR-238 規(guī)范)。可以使用任何一種二進制文件編輯器或者 Nokia JSR-238 RI 創(chuàng)建資源文件。

    為演示起見,我使用 Nokia JSR-238 RI 來創(chuàng)建二進制資源文件,如 圖 6 所示。我想為 zh-TW,de-DE 和 es-ES 這幾個地區(qū)顯示 “Welcome” 字符串和一幅圖片。可以閱讀 Nokia 238 RI 的自述文件了解相關步驟,但基本上,您需要為字符串和圖片編寫一個 xml 資源文件,運行 ResourceMaker 工具獲得二進制文件。



圖 6. Nokia JSR-238 RI 示例資源文件
使用JSR-238更快地全球化您的應用程序(圖七)


步驟 2:將二進制資源文件放在正確的文件結構中

    在 圖 7 中,采用當地語言的字符串存儲在一個地區(qū)文件夾中,圖片的二進制文件存儲在 /global/WelcomeMidlets.res 中。您不會希望圖像的二進制文件存儲在每一個資源文件中!



圖 7. 將資源文件放到正確的結構中
使用JSR-238更快地全球化您的應用程序(圖八)

步驟 3:編寫 MIDlet

為了從資源文件檢索字符串和圖片,您需要執(zhí)行下列步驟:

  1. 構造一個 ResourceManager 實例。您可以指定一個地區(qū),也可以使用系統(tǒng)默認的地區(qū)。表 1 介紹了可用于構建一個 ResourceManager 實例的兩種方法。第一種方法只要求基本名稱,它將使用系統(tǒng)默認的地區(qū)。第二種方法要求基本名稱和特定地區(qū)。



表 1. ResourceManager 方法
public static final ResourceManager getManager(java.lang.String baseName) public static final ResourceManager getManager(java.lang.String baseName, java.lang.String locale)

以下代碼返回具有 “WelcomeMidlet” 基本名稱以及系統(tǒng)默認地區(qū)的 ResourceManager 實例:

res = ResourceManager.getManager("WelcomeMidlet");            

使用以下代碼檢索字符串:

//STRING_WELCOME is the resource id in the resource file; in this case 1StringItem desc = new StringItem(res.getString(STRING_WELCOME),"");            

使用下列代碼檢索圖片:

//IMAGE_EILEAN is the resource id in resource file, in this case 111byte[] imageData = res.getData(IMAGE_EILEAN);            

清單 1 演示了這些步驟。



清單 1. 字符串和圖片檢索

    try{  //Get the resource manager with the base name and default systemlocale  res = ResourceManager.getManager("WelcomeMIDlet");  //Retrieve the welcome string  StringItem desc = new StringItem(res.getString(STRING_WELCOME),"");  fmMain = new Form(res.getString(STRING_WELCOME));  fmMain.append(desc);  //Retrieve the Eilean image  byte[] imageData = res.getData(IMAGE_EILEAN);  Image eilean  = Image.createImage(imageData, 0, imageData.length);  fmMain.append(eilean);}catch(ResourceException re){  System.out.println("Exception when retrieving resources");  re.printStackTrace();}      

  1. 運行 MIDlet。我在 Eclipse 中使用 IBM J9 仿真器運行它。

表 2 展示了在 zh-TW 和 de-DE 地區(qū)顯示 “Welcome MIDlet” 的結果。



表 2. Welcome MIDlet
zh-TW 地區(qū) de-DE 地區(qū) 使用JSR-238更快地全球化您的應用程序(圖九) 使用JSR-238更快地全球化您的應用程序(圖十)

進入討論組討論。

     就是這樣!使用資源文件管理不同地區(qū)的本地化字符串,將圖片的二進制文件轉換為所有地區(qū)都可以使用的通用資源。ResourceManager 類將根據系統(tǒng)默認地區(qū)或您在構造函數中指定的地區(qū)來裝載資源文件。現在您可以使用一種更快、更簡單的方法來本地化菜單、按鈕和消息了。


數據格式化

     每一個地區(qū)都有自己的文化,都采用自己的方式顯示日期、時間、數字、百分數和貨幣數據。Formatter 類可以滿足格式化此類數據的全部需求。表 3 顯示了它所提供的類。



表 3. 數據格式化方法
日期和時間 formatDateTime(java.util.Calendar dateTime, int style) 數字和百分比 formatNumber(double number)
formatNumber(double number, int decimals)
formatNumber(long number)
formatPercentage(float value, int decimals)
formatPercentage(long value) 貨幣值 formatCurrency(double number)
formatCurrency(double number, java.lang.String currencyCode)

現在將編寫一個簡單的 MIDlet 程序來顯示日期、時間、數字、百分比和貨幣數據。

使用JSR-238更快地全球化您的應用程序(圖二) 您需要了解的知識

  • 貨幣代碼必須遵守 ISO-4217 貨幣代碼標準。
  • MIDP 規(guī)范允許您列入一個空地區(qū)。如果您在 Formatter 構造函數中為一個地區(qū)使用了空值或空字符串,它將保留為中立格式(Neutral formatting)。參閱 JSR-238 規(guī)范以獲得更多細節(jié)。

步驟 1:構造一個 Formatter 實例

您可以指定地區(qū),也可使用系統(tǒng)默認地區(qū)。下面是所需要的代碼:

//Using system default localeFormatter fmt = new Formatter();//Specify the localeFormatter fmt = new Formatter("zh-TW");            

步驟 2:創(chuàng)建可編輯文本字段。

    您希望創(chuàng)建可編輯的文本文件以使用戶輸入數字、百分數、貨幣數據等等。您需要這些文本字段的內容和對其進行格式化的 Formatter 類方法,如 清單 2 所示。



清單 2. 數據格式化

    public String formatNumber(double number){     return fmt.formatNumber(number);  }  public String formatPercentage(float number, int decimals){     return fmt.formatPercentage(number,decimals);  }  public String formatCurrency(double number){     return fmt.formatCurrency(number);  }  .....  //Process events  public void commandAction(Command c, Displayable s)  {   if (c == cmExit)   {     destroyApp(false);     notifyDestroyed();   }   else if( c == cmFormat)   {     //Number formatting     double num = Double.parseDouble(tfNumeric.getString());     siResultNum.setText(this.formatNumber(num));     //Percentage formatting     float percentage = Float.parseFloat(tfPercentage.getString());     siResultPercent.setText(this.formatPercentage(percentage,2));     //Currency formatting     double curr = Double.parseDouble(tfCurrency.getString());     siResultCurr.setText(this.formatCurrency(curr));     //Display the result     displayResult();   }                  

現在運行 MIDlet。表 4 顯示了應獲得的結果。(注意:我為 zh-TW 使用了一種不同的字體。)



表 4. Formatter MIDlet
zh-TW 地區(qū) de-DE 地區(qū) 使用JSR-238更快地全球化您的應用程序(圖十一) 使用JSR-238更快地全球化您的應用程序(圖十二)

進入討論組討論。


格式化日期/時間的不同風格

Formatter 類支持以下風格:

  • 僅 short date
  • 僅 long date
  • 僅 short time
  • 僅 long time
  • short date 和 time
  • short date 和 time

Formatter 類為不同的風格定義了字段。例如,對于僅 short date 這種風格定義了 Formatter.DATE_SHORT,您在 formatDate 方法里使用這些風格就可以了。

清單 3 給出了一個簡單的 MIDlet,它示范了日期格式化。



清單 3. 日期格式化 MIDlet

    public String formatDateTime(Calendar c){  //Short date format  String result = fmt.formatDateTime(c,Formatter.DATE_SHORT);  String result_set = "";  result_set= result_set+"/n"+"formatDateTime(Calendar, DATE_SHORT) returns:"+result;  //Long date format  result = fmt.formatDateTime(c,Formatter.DATE_LONG);  result_set = result_set+"/n"+"formatDateTime(Calendar, DATE_LONG)returns:"+result;  //Long date and time  result = fmt.formatDateTime(c,Formatter.DATETIME_LONG);  result_set = result_set+"/n"+"formatDateTime(Calendar, DATETIME_LONG)returns:"+result;  //Short date and time  result = fmt.formatDateTime(c,Formatter.DATETIME_SHORT);  result_set = result_set+"/n"+"formatDateTime(Calendar, DATETIME_SHORT) returns:"+result;  //Long time  result = fmt.formatDateTime(c,Formatter.TIME_LONG);  result_set = result_set+"/n"+"formatDateTime(Calendar, TIME_LONG) returns:"+result;  //Short time  result = fmt.formatDateTime(c,Formatter.TIME_SHORT);  result_set = result_set+"/n"+"formatDateTime(Calendar, TIME_SHORT) returns:"+result;  return result_set;}  //Called by the application manager to start the MIDlet.public void startApp(){  display.setCurrent(fmMain);}public void pauseApp(){}public void destroyApp(boolean unconditional){}//Process eventspublic void commandAction(Command c, Displayable s){  if (c == cmExit)  {    destroyApp(false);    notifyDestroyed();  }  else if( c == cmFormat)  { //Get the current system date and time    Date dt = new Date();         Calendar cal = Calendar.getInstance();    cal.setTime(dt);    siResult.setText(this.formatDatetime(cal));    displayResult();  }}      

表 4 展示了 DateTime format MIDlet 在 zh-TW 和 de-DE 這兩個地區(qū)的顯示結果。



表 4. DateTime format MIDlet
zh-TW 地區(qū) de-DE 地區(qū) 使用JSR-238更快地全球化您的應用程序(圖十三) 使用JSR-238更快地全球化您的應用程序(圖十四)

另一個有用的類

可以使用 StringComparator 執(zhí)行字符串的排序和比較操作。相關的排序編程示例,請參考 JSR-238 指南。

結束語

    JSR-238 提供了一種更快、更簡單的方法,利用 MIDP/CLDC 來國際化您的 MIDlet。使用 javax.microedition.global 包中的 ResourceManager、Formatter 和 StringComparator 類來進行本地化工作以及特定于地區(qū)的數據格式化。提醒一下,JSR-238 是一個可選包;務必確保您的設備支持它。現在您應該熟悉了 JSR-238,可以去更出色地完成開發(fā)工作了!


關于作者

使用JSR-238更快地全球化您的應用程序(圖二)

使用JSR-238更快地全球化您的應用程序(圖十五)

使用JSR-238更快地全球化您的應用程序(圖二)

Meng Li 是位于臺北的中國軟件開發(fā)實驗室的一名軟件工程師。她致力于 Test Automation 和 WebSphere Everyplace Micro Environment 項目。她的興趣愛好包括 Java 編程、旅游、音樂。

進入討論組討論。

(出處:http://m.survivalescaperooms.com)



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 岗巴县| 恭城| 鸡泽县| 肥乡县| 沈阳市| 兴和县| 乐至县| 蒲城县| 罗江县| 赞皇县| 喜德县| 克拉玛依市| 奉节县| 手游| 通化市| 肇州县| 电白县| 湄潭县| 苍溪县| 屯昌县| 中卫市| 应城市| 潮州市| 康乐县| 娄底市| 偏关县| 德格县| 浮山县| 漳州市| 中方县| 齐齐哈尔市| 乐清市| 光山县| 昆明市| 诸城市| 北京市| 兴国县| 贡嘎县| 岱山县| 乐平市| 璧山县|