2010-01-18 96 views
4

我們正在開發的產品,將在下面的方式來使用多國語言:可通過多種產品中使用處理跨多個應用程序和共享庫(.NET)

  • 各種共享庫。我預計這些庫將主要需要訪問包含錯誤消息/異常的字符串資源。
  • 各種基於最終用戶的應用程序,旨在作爲PC上的獨立應用程序運行。他們將被要求在部署/安裝時支持多種語言。
  • 可能需要在部署時或可能在運行時支持多種語言(即最小或零停機時間)的各種網站。如果全球訪問,網站可能需要同時支持多種語言。
  • 我們可能被要求允許客戶訪問我們的語言文件進行編輯。我們不希望允許他們訪問我們的源代碼(除了資源文件/ dll)以實現此目的。
  • 我們可能需要包含一個工具來記錄我們的母語(在這種情況下是英語)的異常,並以翻譯後的語言顯示它們。這將有助於我們在現場調試我們的客戶解決方案。

我已經知道像RCWinTrans這樣的產品,並且在VC++/MFC應用程序中處理多種語言。然而,我們在這裏面臨的要求更爲廣泛,因此要求我們做出一些前期決策,這些決策可能難以長期改變,因此理想情況下我們希望現在做出最佳選擇。

根據我自己的知識,我有幾個問題,雖然我可能會錯過一些技巧與.net將愉快地收到。這裏是我的問題:

  1. 什麼是最好的?將我們所有的資源放入每個VS解決方案的獨立DLL中,或者將資源放入每個VS項目中。我根據解決方案看到的方式更易於管理,修改和允許客戶訪問。每個項目解決方案雖然看起來比較清晰,並且使得各個項目更加便攜這種方法適用於我們基於共享庫的解決方案以及基於終端應用的解決方案。
  2. 上述解決方案是否仍然支持網站?有沒有更好的辦法?這種方式是否需要停機?
  3. 是否有可能一次加載兩個獨立的資源文件,即如果我們想用英文記錄例外情況,但是在翻譯後的語言中爲它們提供了食物鏈(作爲例外消息)?我們可以使用像AOP這樣的自動化技巧嗎?

由於事先

羅傑

回答

2

你有沒有使用Inversion of Control containerStructureMapUnity考慮?這可能會允許您將默認資源與項目(恕我直言,IMHO最有意義)一起保留,同時仍允許客戶根據需要在本地覆蓋資源。

舉個例子,假設您有以下接口:

public interface IResourceSupplier 
{ 
    // Returns the localized text for a given identifier. 
    string Localized(string identifier); 

    // Returns the invariant (English) text for a given identifier. 
    string Invariant(string identifier); 
} 

使用國際奧委會,你可以爲這將檢查用戶提供的替代解決方案創建一個集中的資源供應商。如果沒有提供用戶覆蓋,則可以查詢每個項目特定的資源提供者(在應用程序啓動時檢測到),直到找到返回所需資源的資源。

顯然,根據您的需要,您可能需要調整性能,例如通過緩存經常使用的資源。使用IOC的優點是,只要界面不變,插入替代實現可能是一項相對簡單的任務。

這有幫助嗎?

+0

嗨,理查德,謝謝你。我知道IOC和依賴注入,我理解它的優點。您向我提供了一些關於如何解決問題的好主意。 – RogerD 2010-01-21 13:04:50

相關問題