每种语言使用多个 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.MyString
和 NamespaceB.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 等方式管理文本。甚至多个文件。
我正在尝试对我的 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.MyString
和 NamespaceB.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 等方式管理文本。甚至多个文件。