c# - GetResourceSet 不加载回退值

标签 c# resources

我有两个文件:Resources.resx 和 Resources.de.resx。

enter image description here

Resources.de.resx 仅包含一个翻译后的值。我正在使用以下方法加载所有资源键/值:

        ResourceSet resourceSet = Resources.ResourceManager.GetResourceSet(Thread.CurrentThread.CurrentCulture, true, true);

当我第一次加载资源集时,我的 Thread.CurrentThread.CurrentCulture.Name 是空字符串,Thread.CurrentThread.CurrentCulture.NativeName = "Invariant Language (Invariant Country)", Thread.CurrentThread.CurrentCulture.LCID = 127。

因此,资源集有 200 个键,其值按预期从 Resources.resx 加载。然后,我使用以下通过单击按钮触发的代码切换当前文化:

        Thread.CurrentThread.CurrentCulture = new CultureInfo("de");
        Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

当我现在加载资源集时,资源集中只有一个键。它是来自 Resources.de.resx 的翻译 key 。但我仍然希望有 200 个键,只有一个项目翻译成德语 (de)。

当前德语(德)文化的父文化与我第一次调用获取资源集的方法时相同的不变语言文化。基本上,由于某些原因,回退似乎不起作用。你能告诉我我做错了什么吗?

最佳答案

您必须从不变文化中获取所有键,然后才能查找所有翻译。所以回退有效。

查找到的资源可以存储在字典中。

var keys = Resources.ResourceManager
    .GetResourceSet(CultureInfo.InvariantCulture, true, true)
    .Cast<DictionaryEntry>()
    .Select(entry => entry.Key)
    .Cast<string>();

var enUsResources = keys.ToDictionary(
    key => key, 
    key => Resources.ResourceManager.GetString(key, CultureInfo.GetCultureInfo("de")));

关于c# - GetResourceSet 不加载回退值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24786931/

相关文章:

amazon-web-services - 是否可以让AWS根据 block 大小和VPC CIDR为您分配CIDR block ?

c# - 需要从 C# 中的字符串中提取字段

c# - 使用 TextReader 读取字节

c# - OpenCV C++ vector DMatch 到 C#

android - 自定义资源文件夹名称(例如 res\drawable-gamepad)

c# - 在启动时加载所有本地化资源

c# - 找不到适合指定文化或中性文化的任何资源

c# - 订购 xamarin 形成可观察的集合

c# - 重写相等运算符时按引用比较两个对象

java - 从类路径目录中获取资源列表