如果你計劃在你的應用程序中包括對使用各種語言的用戶的支持
那麼開發它的代價不會比開發只支持英語的版本要高很多
但是如果你需要翻新一個已有應用程序
那麼其代價和重新開發它差不了多少
NET框架在它的System
Globalization名字空間中提供了對全球化(globalization
指得是支持多種語言)的支持
這樣你就可以在你的應用程序中實現多語種支持了
這個名字空間包括了若干類
用來處理許多重要的全球化問題
如文明識別字符串比較
日期和時間格式
數字格式和支持陽歷和其它歷法的日歷
你首先需要知道的一個關鍵的類就是CultureInfo類
(譯者注
這裡的文明即culture
主要指得是語種
也包括記錄時間日期的習慣等等)
使用CultureInfo類
CultureInfo類提供了文明參數選擇的支持以及可以在每個線程(per
thread)基礎上的控制
CurrentCulture合適的處數據和數字格式
字符串比較和大小寫
CurrentUICulture屬性由開發者來設置
CLR用它來為用戶界面裝載適當的資源
你可以用CultureInfo類來為當前線程設置CurrentCulture和CurrentUICulture
如下所示
Thread
CurrentThread
CurrentUICulture = new CultureInfo(
ja
)
Thread
CurrentThread
CurrentCulture = new CultureInfo(
ja
JP
)
還有一些API函數可以用CultureInfo類來控制輸出
Str = DateTime
Now
ToString(cultureInfo);
所有與文明有關的(culture
aware)類都是默認為文明敏感的(culture
sensitive)
因此你只要簡單的設置當前線程的文明就可以自動給System
Globalization名字空間中的類(如CompareInfo
StringInfo和Calendar)以及核心系統類(如Resources
DataTime和String)提供針對特定文明的支持
為了可以支持更多的文明種數
你還需要在你的應用程序中全部使用符合統一字符編碼標准的字符串(Unicode string)
盡管
NET框架提供了對Unicode字符串的完全支持
不過你仍需要在編寫代碼的時候意識到所有的字符串都寫成Unicode格式
而且你還需要清楚許多依靠操作系統的操作(包括對文件系統的訪問和某些控制)並不支持Unicode格式的字符串
因此你還必須在執行這些操作之前進行顯式格式轉換
規劃本地化
全球化將某些關鍵的數據以我們熟悉的國際通用(international)格式保存
但是如果你希望讓你的用戶得到專門為他們的文明而開發的應用程序
你就需要本地化你的應用程序
本地化包括了為特定文明創建特定資源然後再寫你的應用程序
這樣它針對程序所設定或者檢測出來的某種文明而裝載合適的資源
讓我們詳細看看資源模型
資源模型
NET框架的資源模型包括了對任何可串行化對象(serializable object)的支持
它還可以擴展以支持新的格式
這就意味著除了提示符
標簽以及其它用戶界面元素上的針對特定文明的字符串之外
你還可以把聲音
圖像和其它二進制數據當作資源使用
ASP
NET(包括
NET Compact Framwork
它在設備的運行時間和內存的大小上有限制)和Windows Form支持該資源模型
為了本地化應用程序
你需要識別特定文明資源(你需要用它們來展開程序)
然後把它們放置到一個資源文件中
簡單的應用程序只需要字符串資源(字符串中保存
名字——值
對)
你可以創建特定文明的文本文件
盡管自己演示一番很有趣
但你應該用微軟ResX格式來創建資源文件
Visual Studio中有一個工具支持創建
resx文件(它包括了用XML格式對資源的描述)和
resources文件(它包括了二進制已編譯文件)
你即可以把這些文件隨同你的程序一同發布
也可以把它們編譯到一個附屬匯編(satellite assembly)中去
在命名和保存你的資源文件時
你應該保持一致性
微軟建議在命名
resources文件時
文件名應該嵌入文明名(例如
resources)一個資源文件對應於你支持的一種文明附屬資源匯編應該以項目名稱命名(如resourcesdll)然後把它們放到不同的子目錄下(每個子目錄對應一種文明)
在運行時使用資源文件
一旦創立了資源文件你就可以用資源管理器(resource manager)來在運行時載入字符串和對象資源即可以根據CurrentThread中的CurrentUICulture設置來載入(例如RMGetObject(ButtonCursor))你也可以在載入某個資源時指明文明(例如RMGetString(mystring new CultureInfo(enNZ))
ASPNETNET Compact Framework以及Windows Forms應用程序中都有資源管理器而且Windows Forms引擎提供了額外的本地化支持每個form都有一個可以設置的本地化屬性當設置為真時項目系統會自動跟蹤form的不同語言版本並把不同語言的form編譯到附屬匯編中去
只要你在你的原設計中考慮到本地化那麼建立international應用程序並不建立支持單一文明的應用程序難很多在建議一個假定只支持英語用戶界面的應用程序之前NET體系應該詢問針對其它文明所期望提供支持的特定問題
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26165.html