2014-02-24 58 views
0

我正在嘗試應用程序中的多語言功能。我創建了資源文件GlobalTexts.en-EN.resx GlobalTexts.fr-FR.resx和設置文化和返回類似文本(我不會在所有的細節去,只顯示結構)類:如何從多個(多語言)資源文件讀取數據?

public class Multilanguage 
{ 
    ... 
    _res_man_global = new ResourceManager("GlobalResources.Resources.GlobalTexts", System.Reflection.Assembly.GetExecutingAssembly()); 
    ... 
    public virtual string GetText(string _key) 
    { 
     return = _res_man_global.GetString(_key, _culture); 
    } 
} 
... 
Multilanguage _translations = new Multilanguage(); 
... 
someText = _translations.GetText(_someKey); 
... 

這一切正常。 現在,我想,基本上將其擴展(多窗口等),另一種解決方案來使用這個應用程序,它也有資源文件ExtendedTexts.en-En.resx ExtendedTexts.fr-FR.resx和一個新的類,如:

public class ExtendedMultilanguage : Multilanguage 
{ 
    ... 
    _res_man_local = new ResourceManager("ExtendedResources.Resources.ExtendedTexts", System.Reflection.Assembly.GetExecutingAssembly()); 
    ... 
    public override string GetText(string _key) 
    { 
     string _result; 
     try 
     { 
      _result = _res_man_local.GetString(_key, _culture); 
     } 
     catch (Exception ex) 
     { 
      _result = base.GetText(_key); 
     } 
} 
... 
ExtendedMultilanguage _translations = new Multilanguage(); 
... 
someText = _translations.GetText(_someKey); 
... 

這個想法是,如果在ExtendedTexts中找不到鍵,該方法將調用正在查看GlobalTexts的基類。我這樣做是爲了在代碼中到處使用呼叫的getText(wantedKey),而不必關心資源的位置(我不希望包括在GlobalTexts文件從擴展翻譯);它突出了與項目不同的使用類。

我面臨的問題是,當異常提高時,try/catch 非常慢 - 我等待一個窗口填充秒。我直接調用測試和工程快得多,但後來我需要關心在資源所在的所有時間...

的問題是:有沒有這樣做的各種文件本(具有資源傳播的另一種方式並且只有一個方法可以提供所需的資源而不會引發錯誤)?

回答

0

最後我花了解決方法和解決方案中加載字典的資源文件的所有內容。這樣我可以使用ContainsKey並查看該鍵是否存在。