本篇部落格主要描述在 oea 框架中的多國語言框架的原理及應用。
多國語言常見實現及原理分析
管理軟體平台,一般來說,都應該支援多國語言,以支援應用程式走向國際化。oea 最近也提供了多國語言框架,它可以在修改少量甚至不修改**的情況下,快速、靈活地,使得整個應用軟體支援各個國家的語言。在 .net 平台上,要實現多國語言切換,一般可以使用資源檔案實現;在wpf中,也可以使用動態引用實現。這些可以參考以下幾篇文章中講到的方法:《wp7多國語言支援》、《一種靈活的wpf程式多國語言支援》、《.net多國語言支援》。
而這些方法背後的本質,其實都是在開發期,通過開發人員定義的「鍵(key)」,找到在執行期載入的不同語言包中對應的語言項,而再讓介面呈現出來。即:
這些開發模式中,開發人員都不得不去定義 key、建立語言包,並修改所有顯示的程式。例如,以下**:lblusername.text = resources.usernamedisplaylabel; 我們不得不定義乙個 usernamedisplaylabel 的 key,並在語言包中去填寫對應的譯文。那麼,能不能讓開發人員不去定義 key,而直接使用開發人員本國語言編寫呢?例如,讓中國的開發人員這樣寫:lblusername.text = 「使用者名稱:",最終則在英文版本中顯示「username:」。oea 中已經實現了這一方法:
oea 中的多國語言框架
在 oea 中,多國語言的實現原理,其實是一樣的。但是,多國語言的 key,就是開發人員的本國語言,而不需要為其定義單獨的英文鍵。例如,lblusername.text = 「使用者名稱:"; 中,「使用者名稱:" 就是這個 key,oea 中稱其為開發語言。而某個國家語言的語言包中的每一項,也是乙個 key/value 對,key 是開發語言,而 value 則是這個開發語言對應的第三國語言。
其主要思想就是把開發人員所在國的語言,作為語言包中每一項的鍵。
在使用時,開發人員在框架基礎上隨意在**中使用本國語言,並將最終由框架在介面層翻譯為目標國語言。在此設計基礎上,oea 提供了相應的多國語言編輯環境,它是整合在執行時系統中的。由乙個 oea.multilanguages 的外掛程式提供:
也就是說,多國語言中的語言包等資料載體,也使用了 oea 的實體類系統。載入此外掛程式後,並執行系統,會發現在開發工具中新增了兩個相應的模組:
分別是開發語言模組和多國語言模組。
在開發語言模組中,我們可以看到整個程式**中使用的所有開發語言,也就是每乙個 key。
在多國語言模組中,顯示的則是所有已經新增的語言及該語言下所有翻譯的項:
其中的翻譯引擎是直接使用 baidu、bing 兩個**的「服務」,可以為把開發語言直接翻譯為目標語言。而「開啟所有模組」功能則是為了方便一次性收集整個應用程式所有模組介面的開發語言。這兩個模組中,都有乙個「自動更新」的按鈕。它的作用是把當前框架收集到的所有開發語言寫入各語言包中。
所以,要支援乙個新的語言,只需要簡單、快速的幾步:
這樣,再次開啟應用程式,會發現所有介面都已經是日文的了,除去人工翻譯的整個過程不到3分鐘:
程式設計介面
其實,看到這裡,可能很多朋友會問一些問題:
整個多國語言框架,說白了就是實現字串的翻譯。所以 oea 為 string 型別新增了擴充套件方法 translate:
這樣,就可以隨時對於任何乙個字串呼叫,例如:當配置目標語言為英文時,呼叫 「中國」.translate(),返回 「china」。這樣,不論是否使用 oea 的介面層框架,都使用這個方法來翻譯。(其實換湯不換藥,這跟使用資源檔案中定義的 resources.china 發生的過程一致,通過 key 找到目標語言包的 value,並返回。)
從這個方法的注釋中可以看到,只要是被呼叫了此方法的字串,框架都認為它是乙個開發語言,會被自動收集起來。而 oea 強大的介面生成框架,只是在適當的地方呼叫了 translate 方法,所以整個介面都會被翻譯、收集。oea 中,這個方法的呼叫,是盡量靠近最終的介面顯示,並盡量遠離開發人員**,這樣可以保證開發人員在**中的各類判斷,還是使用開發語言。
同時,除了這個字串的程式設計介面,由於 oea 的客戶端使用了 wpf 框架,所以還為 wpf 提供了專門的控制項翻譯介面,它是乙個文字顯示控制項,及乙個附加屬性:
這樣可以在 xaml 中自動翻譯 wpf 中常見的屬性。否則也可以直接呼叫 translate 方法進行翻譯。
待改進點
目前,該多國語言框架已經使用了兩個月了。它的不足也慢慢暴露了出來:
如果乙個開發語言已經被收錄進各語言包,此時開發人員再在程式中對其修改,則會造成舊的開發語言成為無用項保留在開發語言包中。所以這時需要人工去刪除這些無用的項。雖然多國語言的資料是儲存在服務端的資料庫中(使用了客戶端快取,效能不是問題),再多的項也沒關係,但是這畢竟是乙個潛在的問題,後面需要設計乙個好的方法來自動找到這些無用項。
就目前的體驗上講,該框架的使用是非常舒服的。開發過程中,除了動態拼接時,基本不需要考慮多國語言的存在。開發效率較高。執行時在介面中可隨意修改譯文,即時見到效果,靈活性也不錯。:)
希望對多國語言有研究的朋友,對我的待改進點提出建議。謝謝。:)
實現多國語言處理
using system using system.data using system.configuration using system.web using system.web.security using system.web.ui.webcontrols using system.web....
Struts實現多國語言切換
摘要 通過下拉框裡各個語言 中文,日本語,english 的選擇,切換jsp頁面文字。tyrone1979 發表於 2005 08 26 13 27 19 1 準備資源檔案。資源檔案命名格式 filename language country.properties.中文檔名為index zh cn....
如何實現wpf的多國語言
4.0版本的locbaml 使用visual studio的msbuild切換目錄 msbuild t updateuid 千萬不要打錯這個命令,是updateuid,uid不是id 之後可以再check uid 此命令不能再git bash中執行,必須在vs自帶的開發人員命令提示中執行 f tes...