標籤:國際化 native 本地化
國際化 :同一套系統在不同的國家訪問時,顯示當前國家的語言
軟體的國際化:軟體開發時,要使它能同時應對世界不同地區和國家的訪問,
並針對不同地區和國家的訪問,提供相應的、符合來訪者閱讀習慣的頁面或資料。
國際化又簡稱為 i18n:internationalization
軟體國際化的特徵:
對於程式中固定使用的靜態文本資料,例如功能表列、導航條等中使用的文本元素、或錯誤提示資訊,
狀態資訊等,需要根據來訪者的地區和國家,選擇不同語言的文本為之服務。
對於程式動態產生的資料,例如(日期,貨幣等),軟體應能根據當前所在的國家或地區的文化習慣進行顯示。
注意:一個合格的國際化軟體必須包含待用資料和動態資料的國際化。
如何做到國際化
國際化分為待用資料國際化和動態文本國際化
待用資料國際化:
網站中顯示固定文本的國際化 如使用者名稱和密碼的提示。
動態文本國際化 :如時間的顯示 貨幣的單位
1.軟體中儲存特定的字串
對於軟體中的功能表列、導航條、錯誤提示資訊,狀態資訊等這些固定不變的文本資訊,可以把它們寫在一個properties檔案中,
並根據不同的國家編寫不同的properties檔案。這一組properties檔案稱之為一個資源套件
在JavaAPI中提供了一個ResourceBundle 類用於描述一個資源套件,並且 ResourceBundle類提供了相應的方法getBundle,
這個方法可以根據來訪者的國家地區自動擷取與之對應的資源檔予以顯示
國際化檔案(properties)的命名:基礎名_語言簡稱 _國家簡稱 國家簡稱可以不寫
一個資源套件中的每個資源檔都必須擁有共同的基名。除了基名,每個資源檔的名稱中還必須有標識其本地資訊的附加部分。例如:一個資源套件的基名是“myproperties”,
則與中文、英文環境相對應的資源檔名則為: “myproperites_zh.properties” “myproperites_en.properties”
每個資源套件都應有一個預設資源檔,這個檔案不帶有標識本地資訊的附加部分。若ResourceBundle對象在資源套件中找不到與使用者匹配的資源檔,它將選擇該資源套件中
與使用者最相近的資源檔,如果再找不到,則使用預設資源檔。例如:myproperites.properties
資源檔的內容通常採用“關鍵字=值”的形式,軟體根據關鍵字檢索值顯示在頁面上。一個資源套件中的所有資源檔的關鍵字必須相同,
值則為相應國家的文字。並且資源檔中採用的是properties格式檔案,所以檔案中的所有字元都必須是ASCII字碼,對於像中文
這樣的非ACSII字元,須先進行編碼。(java提供了一個native2ascII命令用於編碼)。例:屬性檔案是不能儲存中文的
username=username username=\u7528\u6237\u540d
password=password password=\u5bc6\u7801
submit=submit submit=\u63d0\u4ea4
resource_en.properties檔案 resource_zh.properties檔案
ResourceBundle類提供了一個靜態方法getBundle,該方法用於裝載資源檔,並建立ResourceBundle執行個體:
Locale currentLocale = Locale.getDefault();
ResourceBundle myResources =
ResourceBundle.getBundle(basename, currentLocale);
basename為資源套件基名(且必須為完整路徑)。
如果與該locale對象匹配的資源套件子類找不到。一般情況下,則選用預設資源檔予以顯示。
載入資源檔後, 程式就可以調用ResourceBundle 執行個體對象的 getString 方法擷取指定的資源資訊名稱所對應的值。
String value = myResources.getString(“key");
在WEB應用中實現固定文本的國際化
<fmt:setLocale>標籤用於在JSP頁面中顯示的設定使用者的本地化資訊,並將設定的本地資訊以Locale對象的形式儲存在某個web域中
文法:<fmt:setLocale value=“locale”
[variant=“variant”]
[scope=“{page|request..}”]/>
<fmt:setBundle>標籤用於根據<fmt:setLocale>標籤設定的本地化資訊建立一個資源套件(ResourceBundle)執行個體對象,並將其綁定到一個web域的屬性上。
文法:<fmt: setBundle basename=“basename”
[var=“varname”]
[scope=“{page|request|session|application}”] />
2.知道瀏覽器當前使用的是那種語言
Java提供了一個本地化對象,封裝了當前所在國家,語言和環境已經經濟等資訊
可以通過request.getLocal()方法擷取當瀏覽器使用的本地語言
Java.util.Local類提供動態國際化的封裝
該類提供了表示各國國家名稱的簡稱的常量
Locale locale = Locale.CHINA;//類比中國的語言環境
locale.getCountry();//擷取國家的簡稱
locale.getDisplayCountry();//國家名稱
locale.getLanguage();//擷取該國使用的語言的簡稱
locale.getDisplayLanguage();//擷取國家使用的語言
軟體國際化學習