每种语言使用多个 resx 文件进行本地化

Localizing using multiple resx files per language

我正在尝试对我的 C# .NET 3.5 项目(游戏 mod)实施本地化。我让它使用每种语言的单个 resx 文件,但由于字符串的数量很长,我想将它们分成每种语言的多个文件。

现在,我有 A.resx、A.fr.resx 和 A.de.resx。使用 using Project.Localization,我可以调用 A.MyString 并在游戏中正确翻译。

但是我添加了 B.resx 和 B.fr.resx 和 B.de.resx,虽然我可以在我的代码中调用 B.MyOtherString,当我构建和 运行项目只有 A 中的字符串显示为已翻译 - B 字符串使用默认英语,无论游戏语言如何。

快速查看生成的 fr/Project.resources.dll 表明 A 和 B 的翻译字符串都在文件中。我不知道我在看什么,但字符串就在那里。

我尝试将不同的命名空间属性添加到 A 文件和 B 文件,但这似乎只影响代码 - 例如,我不得不将调用更改为 NamespaceA.A.MyStringNamespaceB.B.MyOtherString 但是在游戏中发生了同样的翻译失败。

您可以通过 System.Windows.Forms.ResXResourceWriter 制作自定义 .resx 生成器。

static void WriteResX(Dictionary<string, object> dictionary, string resxPath)
{
    using ResXResourceWriter writer = new ResXResourceWriter(resxPath);
    foreach (var item in dictionary)
    {
        writer.AddResource(item.Key, item.Value);
    }
}

现在您可以通过 .txt、.csv、.xml、.json 等方式管理文本。甚至多个文件。