標籤:
偶然間翻出了幾年前寫的一個小程式,把當時的資料整理整理分享一下。
當時為了給自己的軟體實現多國語言功能,而開發的協助工具輔助:SE String Resource。 這是當時基於自己另一款 IDE 軟體抽取的架構而開發的,並不是很複雜。
以下資料根據當時的記錄整理,難免錯漏,請見諒。
SE String Resource 是一款輔助多國語言軟體開發的工具 + 生產力,根本目的在於通過產生介面來約束不同語言資源的實現,使開發人員可以基於介面調用資源,多語言開發時不但對語言資源的可控性好,並且省時省力。
除此之外,提供方便開發人員使用的各種實用功能,如多項目並行編輯,資源匯入,Excel 匯入、導出等。
用介面約束多語言資源的實現
通過產生介面(Interface)來約束各語言的資源實現。
開發人員在代碼中通過自動產生的語言資源管理類和資源介面擷取資源。
通過自動產生的主類訪問語言資源
可通過自動產生的主類獲得當前所有可用的資源檔及當前正在使用的資源,因為基於介面的方式,資源使用者無需關心當前使用的具體資源。
基於 .Net 自有資源處理機制
完全構建在 .Net 自有資源處理機制之上,使用 resx 資源檔儲存資源,兼輕鬆容現有程式並保持向後相容性。
亦支援字串調用方式直接擷取資源
支援傳統的通過字串方式定位擷取資源的方式,可通過此方式實現UI層的資源自動綁定等擴充應用。
匯出、匯入Excel
方便本地化人員翻譯校對,使您的本地化工作如履平地。
詳細介紹:
用介面約束多語言資源的實現
在使用傳統的 GetString 方式或其它等效方式時,對資源文本的訪問存在不可控的風險,尤其是在較大型的軟體工程或團隊協作開發中,無法保證所有的資源文本擷取都正確、可用。如拼字錯誤,多次修訂資源檔後帶來的混亂。
根據我們的經驗,使用傳統資源文本擷取方式,僅數百條資源字串就可能帶來災難性的失控,無法維護,無法逐一檢查,為項目增加額外的並且高昂的成本支出。
考慮以下問題:
開發人員在擷取資源時,拼字錯誤。
修訂資源檔時,對原有資源檔標識進行了修改,而未能同步到程式的各處。
修訂資源檔時,誤刪原有資源條目,或刪除誤認為已不在使用中但確仍在某處需要的條目。
無法得知某條資源文本的使用方式:是否在使用,是否在多處使用。
增加語言資源時,難以保證各語種資源完全同步,尤其在是資源數量較大,修訂次數較多時。
以上問題在項目參與人員越多時,越突出,您需要可靠,可控的方式保證項目的品質。
SE String Resource 正是為解決以上問題而生,也是 SE String Resource 的根本目的。
通過一個管理類(主類)訪問語言資源
在主類中,您可以通過 GetLanguages()方法獲得所有可用的語言資源、Current 屬性擷取當前正在使用的資源。擷取所有可用資源的方法是通過反射擷取可用資源的,因此,主類只需產生一次即可,隨後您可在此基礎上擴充自己的功能,而不必重建主類代碼。
對於資源的使用者,只需通過 Language.Current 屬性,就可以訪問到當前正在使用的語言資源,而不必關心具體的語言資源是哪一種,也不必關心語言資源是否可用,是否存在差異,更元需擔心擷取資源時會出現單詞拼字錯誤。因為這些都是通過 ILanguage 介面進行的。
此外,GetString() 方法亦允許您通過字串指定資源名,來擷取資源內容,這在實現UI層語言資源綁定時,尤為有用。
資源行複製
在 SE String Resource 中,資源行的複製粘貼操作並非簡單的複製一行或多行資料,而是能夠識別複製時所攜帶的地區性資訊,如果粘貼目標上的地區資訊與複製時的地區資訊不同,則自動進行匹配。
例如,A項目包含“中文”、“英文”,B項目包含“英文”、“法文”,那麼從A項目向B項目中複製資源行時,能夠自動將A項目中的英文資源粘貼到B項目的英文資源中,中文資源則被忽略。哪怕兩個項目只是地區資訊的順序不同,亦能自動匹配。
即時錯誤檢查
SE String Resource 能夠即時判斷資源條目中存在的問題,如名稱無效,名稱衝突。
在錯誤清單中,只需雙擊錯誤條目,即能定位到錯誤行,方便您在處理較多的資源行時出現的問題。
藉助專門設計的檢查演算法,即使數千條或更多資源條目,檢查速度亦高效快速。
匯出、匯入 Excel
毫無疑問,匯出匯入Excel 可使您的本地化工作如履平地。
在非常傳統的資源處理技術中,開發人員通常是將 INI格式,XML格式,甚至TXT格式的資源檔直接交於翻譯人員進行翻譯。使用這種方式,開發人員無法一一核對資源行的名稱是否被誤改,資源條目是否因操作失敗而被誤刪。
在項目的迭代周期中,資源檔不斷被修訂,不斷的交給翻譯人員進行翻譯(如版本升級時的新資源檔),在這個過程中,翻譯人員還會利用過去的翻譯成果,損壞資源條目的幾率就成倍的增加。
而使用 Excel 表,除了方便本地化工作人員的工作之外,更重要的是在匯入其翻譯成果時,SE String Resource 將檢查全部資源是否存在錯誤,同時,因為項目的資源使用是基於介面的,如果誤刪了資源條目,產生代碼後,您的開發環境(如 Visual Studio),在編譯代碼時,將直接向您報告錯誤。
運行時
主介面
右側為資源編輯地區,不同的語言是平行顯示在一行中的,也可以理解為將不同的 Resx 資源檔,進行了合并顯示,而無需編輯完一種資源檔再開啟另一種資源檔編輯。
尋找與替換
實現了一個和 Visual Studio 幾乎一樣的尋找與替換功能,方便資源檔的編輯工作。
指定項目的基本屬性
Excel 匯出/匯入
Excel 匯出時,形成的表格是和軟體主介面幾乎一樣的一張表,包括資源 Key,及不同的資源條目,翻譯人員直接在 Excel 中新增列,在新增列中輸入資源條目即可,而無需在原有基礎上修改。
匯入 Excel 時,自動分析 Excel 中的列,對應為相應的地區資訊,不能解析的列,可以手工指定。
匯入完成後,將對匯入結果進行自動的有效性檢查。
產生代碼
支援 C# 及 VB.NET ,在開發過程中可隨時產生相關代碼。
產生結果
後記:
當時喜歡混CNSW,不知道園子裡有沒有CNSWer,受此影響,當年做完這個小工具,感覺到可能有點價值,就做了中英文的網站註冊了網域名稱掛到網上,以共用軟體的形式進行銷售。
雖然慘慘淡淡只賣掉了兩份。
但是這兩份銷售給我帶來了許多喜悅,因為自己的工作成果得到了別人的認可;這種認可我想是非常肯定的,實在的。
此外,過去的這些經曆也不斷的在敲打著我的一些價值觀,我反思過許久:軟體產品的定位和價值等問題,以及中國這樣一個市場,需要的到底是什麼。 :)
小廣告
博主正在留意南京的相關進階職位
江蘇電信10000號前技術經理,現任某外資企業Team Leader
簡曆:http://121.40.198.87:8010/
使用 .NET WinForm 開發所見即所得 (WYSIWYG)的 IDE 開發環境,實現不寫代碼直接產生應用程式:
http://www.cnblogs.com/sheng_chao/p/4387249.html
使用 WPF+ ASP.NET MVC 開發 線上客服系統 (一):
http://www.cnblogs.com/sheng_chao/p/4548146.html
高品質,高效率的多國語言軟體開發(Web/PC/Mobile),使用介面約束/調用不同語言資源