直接访问备用资源文件

时间:2014-09-28 21:12:46

标签: c# resources

我的程序中有一个工作语言切换。它使用标准资源文件和它支持的每种语言的一个额外副本。它适用于控件和代码中的字符串。

但是,对于一个特殊情况,我想直接访问英语资源文件,无论当前选择哪个语言。

原因是,虽然我可以将命名颜色翻译成德语,但对于我的弹出菜单,我不能使用非英语名称来表示Color.FromName方法。所以我想显示已翻译的名称,但仍然使用英文名称进行方法调用。

我的资源文件名为

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

我试过了:

DrawCtl_strings.en.mnRed;

但它没有编译..

有没有(简单)方法没有实际切换语言?

我看过this帖子,但我想知道是否可以有更简单,更直接的方式..?

1 个答案:

答案 0 :(得分: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]);

我仍然依赖于命名惯例,但至少它是我能控制的一个。 (当然,由我来保证价值观和独特性。)

叹了口气,我原本希望能够正确保存几行代码..