簡體   English   中英

跨多個應用程序和共享庫(.net)處理多種語言

[英]Handling multiple languages across multiple applications and shared libraries (.net)

我們正在開發將以以下方式使用的產品:

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

我已經知道諸如RCWinTrans之類的產品,並且可以在VC ++ / MFC應用程序中處理多種語言。 但是,我們在這里面臨的要求更加廣泛,因此要求我們做出一些長期的決定,這些決定可能很難長期改變,因此理想情況下,我們希望現在做出最佳選擇。

根據我自己的知識,我有幾個問題,盡管我可能會缺少一些將很高興獲得的.net技巧。 這是我的問題:

  1. 什么是最好的? 每個VS解決方案將所有資源放入單獨的DLL中,或者將資源放入每個VS項目中。 我對每個解決方案的查看方式更易於管理,修改和允許客戶訪問。 每個項目的解決方案看起來更干凈,並且使單個項目更具可移植性。 此方法將適用於我們基於共享庫的解決方案以及基於最終應用程序的解決方案。
  2. 上面的解決方案仍然適用於網站嗎? 有沒有更好的辦法? 這樣是否需要停機?
  3. 是否可以一次加載兩個單獨的資源文件,即如果我們要用英語記錄例外情況,但以翻譯后的語言將它們提供給整個食物鏈(作為例外情況的消息)? 有什么技巧可以像AOP一樣自動執行嗎?

提前致謝,

羅傑

您是否考慮過使用Inversion of Control容器(例如StructureMapUnity) 這可能使您可以將默認資源與項目(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,您可以為解決方案創建集中式資源供應商,該供應商將檢查用戶提供的替代。 如果沒有提供用戶替代,則可以查詢每個特定於項目的資源供應商(在應用程序啟動時檢測到),直到找到一個返回所需資源的供應商為止。

顯然,根據您的需求,您可能需要調整性能,例如,通過緩存常用資源。 使用IOC的確具有以下優點:只要接口不變,插入替代實現可能是相對瑣碎的任務。

這有幫助嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM