2014-09-28 106 views
1

我的程序中有一個工作語言切換。它使用標準的資源文件和它支持的每種語言的一個額外副本。它工作正常,無論是控制和代碼中的字符串。直接訪問備用資源文件

但是,對於一種特殊情況,我想直接訪問英文資源文件,無論當前選擇哪種語言。

原因是,儘管我可以將命名的顏色翻譯爲德語,但對於我的彈出式菜單,我無法使用Color.FromName方法的非英文名稱。所以我想顯示翻譯後的名稱,但仍然使用英文名稱作爲方法調用。

我的資源文件被稱爲

DrawCtl_strings.resx 
DrawCtl_strings.en.resx 
DrawCtl_strings.de.resx 

我想:

DrawCtl_strings.en.mnRed; 

,但它不會編譯..

是否有一個(簡單)的方式來做到這一點實際切換語言?

我看過this後,但我不知道是否有更簡單,更直接的方法..?

回答

0

環顧很多後,我懷疑我可以繞過使用ResourceManager,畢竟。

所以這對我的作品,創造兩本字典,一個始終爲英語,其他的CurrentUICulture

ResourceManager rm = new ResourceManager("Knips.DrawCtl_strings", 
          typeof(Knips.DrawCtl_strings).Assembly); 

CultureInfo culture = CultureInfo.CreateSpecificCulture("en"); 
ResourceSet resourceSet = rm.GetResourceSet(culture, true, true); 

var englishResDict = resourceSet.Cast<DictionaryEntry>() 
    .ToDictionary(r => r.Key.ToString(), r => r.Value.ToString()); 

resourceSet = rm.GetResourceSet(Thread.CurrentThread.CurrentUICulture, true, true); 

var currentResDict = resourceSet.Cast<DictionaryEntry>() 
    .ToDictionary(r => r.Key.ToString(), r => r.Value.ToString()); 

我然後將它們結合起來,以創建我的顏色字典(Dictionary<string, string> ColorDict):

foreach (var resEn in englishResDict.Keys) 
    if (resEn.StartsWith("col_")) 
     ColorDict.Add(englishResDict[resEn], currentResDict[resEn]); 

我仍然依靠一個命名約定,但至少它是我可以控制的一個.. (當然,這取決於我保證值的唯一性。)

感慨,我本來希望得到它的正確保存幾行代碼..