C# 尽管指定了CultureInfo,Resourcemanager仍返回相同的资源
一件很简单的事情,但我不能让它工作。我想全局化我的dll,因此我使用的是资源文件+资源管理器 我这样称呼resourcemanager:C# 尽管指定了CultureInfo,Resourcemanager仍返回相同的资源,c#,dll,globalization,embedded-resource,resourcemanager,C#,Dll,Globalization,Embedded Resource,Resourcemanager,一件很简单的事情,但我不能让它工作。我想全局化我的dll,因此我使用的是资源文件+资源管理器 我这样称呼resourcemanager: var p = new ResourceManager("Appname.Default", Assembly.GetExecutingAssembly()); 像这样得到字符串 System.Diagnostics.Debug.WriteLine(p.GetString("greeting")); System.Diagnostics.Debug.Writ
var p = new ResourceManager("Appname.Default", Assembly.GetExecutingAssembly());
像这样得到字符串
System.Diagnostics.Debug.WriteLine(p.GetString("greeting"));
System.Diagnostics.Debug.WriteLine(p.GetString("greeting", new CultureInfo("nl")));
System.Diagnostics.Debug.WriteLine(p.GetString("greeting", new CultureInfo("nl-NL")));
System.Diagnostics.Debug.WriteLine(p.GetString("greeting", new CultureInfo("en")));
它返回相同字符串的4倍。我的文件被称为
Default.resx
Default.en.resx
Default.nl.resx
Default.nl-NL.resx
所有文件设置都相同,但如上所述-仅使用默认文件中的资源
这里我忽略了什么?有几种使用资源文件的方法,其中一种是使用
.resx
文件。这些文件将根据Thread.CurrentThread.CurrentUICulture
的值自动本地化。默认的.resx
文件被编译到它所属的程序集中(例如您的主可执行文件),而本地化的资源(default.nl.resx
)被编译到它们自己的目录中(在本例中基于区域性标识符,nl
)到一个名为.resources.dll
的程序集中
从这些资源中寻址值与
一样简单,例如Default.Greeting
。要进行测试,请使用以下方法更改区域性:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
Console.WriteLine(Default.Greeting);
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("nl-NL");
Console.WriteLine(Default.Greeting);
哪个会输出
Hello
Hallo
在程序启动时,UI区域性设置为其运行的计算机的区域性,因此您不必自己指定语言来始终显示本地化的资源。因此,.resx
文件似乎是一条出路
使用var p=new ResourceManager中的ResourceManager时(“Appname.Default”,Assembly.getExecutionGassembly())代码>,您必须阅读.resources
文件。如果(在您的情况下)没有Appname.Default.resources
文件,则p.GetString
将失败。所以我猜您之前已经创建了一个.resources
文件,但是没有将本地化的.resx
文件转换为.resources
文件
如果要使用ResourceManager来指定区域性,可以使用:
Default.ResourceManager.GetString("Greeting", new CultureInfo("en-US"));
.resx文件是否实际编译到附属程序集中?在bin\Debug文件夹中查找名为en、nl和nl-nl的子目录。尝试通过Default.ResourceManager.GetString
获取翻译。很可能您正在创建的资源管理器获取了一些错误的参数。谢谢-我不知道为什么我不使用Resources.Default。一定是周末了@你能看看我的问题吗。