【发布时间】:2020-09-22 09:24:34
【问题描述】:
我在 c# godot 项目中使用 resx 文件。经过一些问题,我现在终于可以使用资源管理器访问翻译了。
我遇到的问题是我只能获得一种文化特定的翻译,当我在另一种语言/文化中调用相同的字符串时,它总是会回到默认的英语。
我有一个 ID: test_string
的字符串英文值:test1
西班牙值:test2
法国值:test3
var translationAssembly = Assembly.GetExecutingAssembly();
var translationAssemblyResource = "GodotFrontend.MultilingualResources.strings";
var resourceManager = new ResourceManager(translationAssemblyResource, translationAssembly);
System.Globalization.CultureInfo ci1 = new System.Globalization.CultureInfo("en");
string temp = resourceManager.GetString("test_string", ci1); // returns test1
System.Globalization.CultureInfo ci2 = new System.Globalization.CultureInfo("es");
string temp2 = resourceManager.GetString("test_string", ci2); // returns test2
System.Globalization.CultureInfo ci3 = new System.Globalization.CultureInfo("fr");
string temp3 = resourceManager.GetString("test_string", ci3); // returns test1 (WRONG)
所以第三种语言不会返回预期的“test 3”字符串,而是返回默认的英文字符串。但我发现更奇怪的是,如果我切换调用字符串的顺序(切换 es 和 fr),我会得到法语字符串,但随后西班牙语字符串会恢复为英语
System.Globalization.CultureInfo ci1 = new System.Globalization.CultureInfo("en");
string temp = resourceManager.GetString("test_string", ci1); // returns test1
System.Globalization.CultureInfo ci2 = new System.Globalization.CultureInfo("fr");
string temp2 = resourceManager.GetString("test_string", ci2); // returns test3
System.Globalization.CultureInfo ci3 = new System.Globalization.CultureInfo("es");
string temp3 = resourceManager.GetString("test_string", ci3); // returns test1 (WRONG)
基本上它适用于第一个不是英语的“翻译”,下一个停止工作。
知道为什么会这样吗?
更新:
发现由于每种语言的 .dll-s 名称相同,无法在第一个语言程序集之后加载正确的语言程序集。
如果我将应用程序切换到“控制台应用程序”,它可以工作,但是当我将它切换回“类库应用程序”时,它无法加载同名程序集,因此程序集保持不变,即使我用不同的方式调用它指定的文化。
如何绕过这个??
【问题讨论】:
标签: c# localization resources godot resourcemanager