我的程序中有一个工作语言切换。它使用标准资源文件和它支持的每种语言的一个额外副本。它适用于控件和代码中的字符串。
但是,对于一个特殊情况,我想直接访问英语资源文件,无论当前选择哪个语言。
原因是,虽然我可以将命名颜色翻译成德语,但对于我的弹出菜单,我不能使用非英语名称来表示Color.FromName
方法。所以我想显示已翻译的名称,但仍然使用英文名称进行方法调用。
我的资源文件名为
DrawCtl_strings.resx
DrawCtl_strings.en.resx
DrawCtl_strings.de.resx
我试过了:
DrawCtl_strings.en.mnRed;
但它没有编译..
有没有(简单)方法没有实际切换语言?
我看过this帖子,但我想知道是否可以有更简单,更直接的方式..?
答案 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]);
我仍然依赖于命名惯例,但至少它是我能控制的一个。 (当然,由我来保证价值观和独特性。)
叹了口气,我原本希望能够正确和保存几行代码..