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

首頁 > 學院 > 開發設計 > 正文

Java用戶界面本地化實例探索

2019-11-18 14:49:22
字體:
來源:轉載
供稿:網友

  國際化是使程序具有足夠的靈活性、能在世界上任何地區運行的過程。國際化所要求的必然結果是地方化――使一個程序能夠運行在特定地區的過程。本文嘗試用一個簡單的例子來演示java用戶界面本地化。Java語言內核基于Unicode3.0(Java 1.4)提供了對不同國家和不同語言文字的內部支持,由于先天的原因,Java對于國際化的支持遠遠要比C/C++來的優越。

  在我看來本地化必須滿足以下的三個條件:

  1、程序必須能讀、寫和操作本地化的文本。

  2、程序在顯示日期和時間、使數字格式化以及排序子串時,必須符合地方習慣。(通過java.text包里面的類可以實現這些要求)

  3、所有用戶可見的文本都能在運行時獲得,而不是直接寫入程序中。(通過java.util包里的ResourceBundle類和他的子類可以實現這些要求。)

  實現這三個方面可以真正實現程序的國際化。

  首先讓我們來了解一下地區。地區代表一個地理上、政治上或文化上的區域。在Java中,地區由java.util.Locale類表示。地區經常以一種語言來定義,該語言則由其標準的小寫雙字母代碼表示。(例如:en代表英國,fr代表法國,zh代表中國),但有時候語言是不能代表一個地區的,那就要在語言后面再加上一個國家或該國家的地域(例如:en_US代表美國,zh_TW)。Locale類保存著一個靜態的默認地區,它可以用Locale.setDefault()和Locale.getDefault()來設置和查詢。一個程序可以生成和使用任意數目的非默認Locale對象。

  讓我們再來看一下Unicode字符編碼。Java使用Unicode的字符編碼,其本身就是邁向國際化的一大步。Unicode編碼其每個字符都占兩個字節。用/u****的形式表示。Unicode的字符可以等價于其他編碼的字符(例如:從/u0020到/u007E的字符等價于ASCII和ISO8859-1字符的0x20到0x7E)。

  本文主要是對用戶界面地方化,由于我使用的是資源束!所以有必要對資源束作一下解釋。

  為定義一束地方化的資源,你需要生成一個ResourceBundle(資源束)的子類并且提供handleGetObject()和getKeys()方法的定義。為了在程序中使用來自ResourceBundle的地方化資源,就需要先調用靜態的getBundle()方法,用getBundle()獲得一個ResourceBundle對象,然后再用getObject()方法去按照名字來查找資源。當然也可以使用getString()簡單的把getObject()的返回值分配給一個String對象。GetBundle()方法采用basename_language_country_variait----沒找到的話->basename_language_country----沒找到的話->basename_language----沒找到的話->basename(默認資源文件)的算法尋找合適的資源。假如以上都沒找到的話,則會拋出一個MissingResourceException異常。
  現在我們來看一個簡單的例子,如何使Java程序用戶界面地方化的。

  首先我們的程序需要查找特定Locale對象關聯的資源包,所以應該定義一個Local對象,來獲取本地默認的地區!然后可以調用ResourceBundle的getBundle方法,并將locale對象作為參數傳入。

  清單一:

Locale locale = Locale.getDefault(); //獲取地區:默認
//獲取資源束。如未發現則會拋出MissingResourceException異常
ResourceBundle bundle = ResourceBundle.getBundle("  清單一中的”Properties.Dorian”代表Properties包下以Dorian命名的默認資源文件。這樣就可以使用資源文件了!讓我們來看看資源文件是如何定義的。

  清單二:

# Dorian.properties是默認的"Dorian"資源束文件。
# 作為中國人,我用自己的地區作為默認

Title=/u4e2d/u56fd;
red.label=/u7ea2/u8272;
green.label=/u7eff/u8272;
blue.label=/u84dd/u8272;
  清單三:

# 文件Dorian_en_US.properties,是美國地區的資源束
# 它覆蓋了默認資源束

Title=America;
red.label=Red;
green.label=Green;
blue.label=Blue ;
  清單一和二定義了一個默認資源文件,和美國地區的資源文件。其中等號左邊的字符串表示主鍵,它們是唯一的。為了獲得主鍵對應的值,你可以調用ResourceBundle類的getString方法,并將主鍵作為參數。此外,文件中以“#”號開頭的行表示注釋行。需要注重的是清單二中的“/u4e2d/u56fd”,它是字符“中國”的Unicode字符碼。是使用Java自帶的native2ascii工具轉換的(native2ascii in.properties out.properties),這是為了不在程序界面中產生亂碼。

  清單四:

cmdRed.setText(bundle.getString("red.label"));
cmdBlue.setText (bundle.getString("blue.label"));
cmdGreen.setText (bundle.getString("green.label"));
  清單二中的cmdRed、cmdBlue、cmdGreen 為按鈕。bundle.getString("red.label")為得到資源文件中主鍵是red.label的值。

  好了到此為止Java程序用戶界面的本地化就是這么簡單。不過,要提醒你的是在為用戶界面事件編寫事件監聽器代碼時,要格外小心。請看下面這段代碼。

  清單五:



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 五家渠市| 通山县| 胶南市| 潜江市| 安国市| 天气| 鄂托克前旗| 滦南县| 永靖县| 临海市| 西藏| 海阳市| 博野县| 河西区| 芦溪县| 阳东县| 鲁山县| 岳普湖县| 台湾省| 玉门市| 柳林县| 三原县| 武定县| 鞍山市| 鄂州市| 蒲城县| 涿州市| 成都市| 德格县| 绵阳市| 嘉黎县| 平凉市| 武宣县| 天柱县| 海原县| 德格县| 城口县| 海盐县| 青铜峡市| 松原市| 化德县|