top
Loading...
Java用戶界面本地化實例探索
天極IT資訊短信服務 電腦小技巧
資費:包月5元
手機:
介紹:細處著手,巧處用功。高手和菜鳥之間的差別就是:高手什么都知道,菜鳥知道一些。電腦小技巧收集最新奇招高招,讓你輕松踏上高手之路。


國際化是使程序具有足夠的靈活性、能在世界上任何地區運行的過程。國際化所要求的必然結果是地方化――使一個程序能夠運行在特定地區的過程。本文嘗試用一個簡單的例子來演示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異常。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗