微軟的Visual studio從一開始就提供對項目的國際化和本地化的支援。 其核心思想是把本地化資訊獨立到資源檔裡。 Visual studio2003就已經提供支援了, 隨著 Visual studio2005 的發布, 微軟在對國際化和本地化的支援的實現發生了很大的變化。 對於Windows應用, 簡化了資源讀取的代碼, 原來自動產生的程式碼一行唯讀取一個資源屬性, 這樣讀取資源的代碼就很多。 雖然這些代碼都是有IDE來維護的, 但畢竟使代碼不簡潔。 Visual studio 2005隻需要使用一行代碼就將整個控制項的所有資源讀取完畢, 代碼簡潔多了。 當然, 對於開發人員來說,這個變化不是很重要, 因為Windows應用的資源都是有IDE來維護的, 不需要開發人員去維護。
對於Web應用, 資源檔的位置和讀取都發生了很大的變化。 在Visual studio 2003裡, 一個介面檔案裡會自動產生一個空的資源檔, 但資源資訊如何分離到資源檔和將資源資訊從資源檔裡讀出來, 還是需要由開發人員來完成, 這部分的工作量其實還是很大的。
Visual studio 2005改變了這種做法, 首先, 資源檔獨立存放在一個叫做App_LocalResources的目錄。 並且通過執行Tool.GenerateLocalResource來支援自動分離, 現在的情況是需要一個一個頁面的去做,並且需要將頁面切換到設計態, 期待下一個版本能夠支援批量分離。當然這個分離只是頁面資源資訊的一個副本,當分頁檔裡的資源資訊被修改時, IDE是不會自動同步的, 還需要在一次手工操作。 這一點與Windows類型的應用是不同的, Windows應用只有一份資源資訊, 不存在同步問題。但WEB控制項中的資源資訊支援自動讀取,不需要開發人員在編寫任何代碼。
Visual studio 2003 提供了對資源檔的基本管理能力, Visual studio2005 則在Visual Studio 2003的基礎上, 基本完成了介面元素資源資訊的自動分離和讀取,當然自動化程式還可以繼續提高 , 還有就是自動分離使用者介面的資源資訊現在只實現最基本的資源資訊的分離,事實上,還有更多的資源資訊類型需要分離,比如Web的圖片資源等待。
但資源資訊不僅僅存在與介面元素中, 同時也存在於代碼中, 只不過不象介面檔案中那麼集中罷了。 但這也是國際化和本地化必須關注的。 還有一個問題是Web應用的一個分頁檔中不僅僅包含伺服器控制項, 同時也包括一些Html元素, 特別是一些標籤,一般在設計的時候不會特別的去做成伺服器控制項。但這些Html元素也包含一些必須分離的本地化資訊。現在的Visual Studio 對上述兩個資源資訊的分離和讀取沒有提供支援, 是不是後續版本會支援支援, 現在來看, 可能性不是太大。
本地化,國際化與應用的業務應該是無關的, 既然本地化和國際化與業務沒有關係, 那麼我們是不是可以將業務與本地化分開來開發呢。 答案是肯定的。分開開發, 可以簡化整個應用程式的複雜程度, 特別是業務部分的複雜程式,因為業務往往是最複雜的。同時在簡化複雜程度的同時, 可以提高效率和品質, 提高軟體的可維護性。
如果業務與本地化分開來開發, 首先需要完成業務方面的開發。當然在業務開發時候適當的為本地化和國際化做考慮, 是可以大大簡化後面的開發的, 比如不要使用代碼動態建立控制項, 特別是建立那些包含本地化資源的控制項, 同時建議預設的資源資訊使用英語語言。 一般來說, 絕大部分翻譯工具都支援英語和其他語言的互譯, 但並不一定支援任意兩個語言的互譯, 當然如果就只需要兩個語言的版本, 這條就無關緊要了。還有就是需要適當的主要控制項的布局, 特別是要防止字元顯示不全的問題, 因為不同語言下資源需要佔用的螢幕地區很可能是不同的, 還需要注意不用使用本地化資源資訊作為判斷的依據。當然, 實際上需要特別留意的地方還是很小的, 除了不要使用代碼建立控制項外, 幾乎就沒有實質的限制了。
按到正常流程開發完一個項目後, 就可以進行國際和和本地化的開發了,國際化和本地化需要完成一系列的工作, 首先需要分離資源, 並適當的修改代碼, 並添加不同語言的切換功能。 然後就是需要翻譯了, 翻譯完了之後, 需要進行整合和測試 , 如果使用工具來完成的話, 應該說效率會很高, 不需要花費什麼精力,也幾乎不會引入迴歸錯誤。。
既然國際化和本地化需要一系列的步驟, 一個整合的開發工具就顯得很有必要了。因為整合的開發工具可以大大的提高效率。
現在市場上的國際化和本地化沒有很好的整合開發工具, 對於.Net類型的應用, 早期使用Visual Studio 來進行開發, 然後使用Trdos之類的翻譯工具。
整合的國際化和本地化的開發與翻譯和分離的本地化開發與翻譯工具相比較, 具有如下特點
1: 整合的效率要比分離的效率高很多。首先, 分離的翻譯過程, 翻譯完後, 需要將翻譯好的資源再次進行整合,哪怕是一次很小的修改。 事實上, 一個成熟的軟體, 不論是翻譯, 還是開發,修改總是頻繁的,所以, 整合就會佔去很大的一塊時間。在本地化和國際化的過程中, 很有可能需要修改原來已經開發好的代碼。分離的過程會使這個過程很耗費時間。
2:整合的翻譯能夠更好的整合資源, 支援即使語言切換。 現在市場的很多產品, 都是以漢化包的形式進行本地化;即使部分軟體能夠在安裝的時候選定語言, 但一旦安裝以後, 就不能在進行語言的切換。 包括本地化和國際化工具本身, 都不能輕易的進行語言切換,這實際上是本地化的一個很大的遺憾。
3:整合的本地化和國際化開發需要原始碼,與分離的翻譯相比,不利於智慧財產權的保護。 整合的工具, 在翻譯過程中, 是可以脫離源檔案工作的。
一個整合的.Net國際化和本地化工具, 應該具備如下特性
1: 與Visual studio整合, 並且與Visual Studio保持一致的風格。
2: 必須支援代碼檔案中資源資訊的自動分離。
3: 必須能夠整合一系列的翻譯功能。
4: 翻譯功能應該與Visual Studio 整合。
湛藍.Net國際化與本地化工具的特徵
1: 與Visual Studio的緊密整合。能夠直接調用Visual Studio本身的一部分功能。 比如調用Visual Studio自身的介面原始資源的自動分離, 項目的資源檔的管理等功能。
2:能輔助識別代碼檔案中的資源, 並支援自動分離。 代碼檔案中的資源資訊識別別介面元素中資源資訊的識別難度大很多, 事實上是不可能完全自動識別的, 但工具應該能夠識別絕大部分的資源, 並且不能漏識, 但可以比實際的多,但識別的準確程度應該很高。 漏識會導致開發人員需要重新閱讀代碼, 這不可取。 即寧可多識, 也不可漏識。 識別真正的資源後, 需要能夠自動將資源分離到資源檔。 自動分離資源到資源檔, 可能會導致代碼的修改。 代碼的修改量應該最小, 並且不能導致任何可能的錯誤。
3:提供對預設資源的修改和統一管理功能,在開發過程中, 經常會出現提示資訊和標籤文本不正確, 不統一的情況, 並且很有可能也被測試所漏過。到國際化的時候, 就會發現這些問題, 因此, 湛藍.Net國際化和本地化工具提供了對預設資源的統一管理, 能夠集中的將這些資源呈現在開發人員面前,並提供修改, 替換等快速維護功能。
4:支援Web頁面中Html資源資訊的自動分離及其他適應性修改。
5:支援語言自動切換功能,這雖然簡單但卻很重要。
6:整合的資源檔管理。在完成國際化和本地化的過程中, 需要增加很多的資源檔, 這些資源檔應該能夠自動整合到Visual Stuaio的專案檔, 並且被工具自動管理。
7: 編碼的自動識別及相關的管理。 由於國際化和本地化會涉及到多種不同的語言文化, 也不同的語言文化也會有自己對應的編碼規則。 工具應該能夠正確識別所有檔案中的編碼, 並且可以以任意指定編碼的來儲存。
8: 一個國際化和本地化工具的核心功能是翻譯和對翻譯的支援。 翻譯主要包括翻譯的自動化和翻譯的準確程度。 當然翻譯不可能完全自動化, 但是工具確實需要盡量的提供翻譯的自動化和準確的程度。 如何提高翻譯的自動化和準確程式, 關鍵是翻譯詞庫的大小和翻譯的智能化程度, 一般好的國際化工具都有自己的詞庫, 並且有比較好的智能化演算法。其實,關於如何提高翻譯的自動化和準確程式, 我個人認為, 國際化和本地化工具並不需要在這方面做太多的工作。 因為網路上有很多的免費翻譯資源, 比如Google , Yahoo, 金山, WorldLingo等等, 他們在這方面的投入很大, 應該說做的很專業了。並且軟體的本地化和國際化, 一般都是短語翻譯,其翻譯的準確度應該說是很高的。不過微軟的免費翻譯資源不支援自動化介面,比較遺憾。 湛藍國際化和本地化工具就是整合了上述免費的網路翻譯資源的,並且做了一些智能化處理。
現在網上的線上翻譯工具主要有Google, Yahoo , Windows Live , WorldLinq , KingSoft。Google 應該說是線上翻譯做得最好的, 無論是翻譯的品質還是支援的語言。 Yahoo相對來說就差一些;Windows Live現在還處於Beta, 暫時不允許自動擷取; WorldLingo不支援中文翻譯, 也不支援自動擷取,所以暫時意義不大。金山和Google使用同一個翻譯引擎,翻譯結果與Google完全相同, 就不單獨討論了。 現在來看, 線上翻譯這一塊, Google是最牛的, 應該以Google的翻譯作為首選參考,Yahoo可以作為一個候選的翻譯資源;Windows Live現在還不完善, 但憑著微軟強大的技術實力, 我們有理由認為Windows Live在不遠的將來有良好的表現。
現在的版本已經整合了Google, Yahoo, Windows Live, 金山。 WorldLingo暫時還沒有。
現在發布的這個版本已經完成了好幾個Windows和Web類型的應用, 應該說在已經完成的應用上繼續進行本地化國際化改造, 效率是非常高的, 同時操作也很簡單。 如有需要的同仁 , 可以到http://www.dotnetcoding.net/ResourceCenter/BlueSky.GlobalTool.zip下載