国际化HelloWorld程序.NET
我有一个小测试应用程序,它有2个资源文件( Resources.resx
和Resources.de-DE.resx
),具有相同的确切字符串名称,但其中一个将字符串转换为德语。
对于我的表单,我将Localize属性设置为ture。
在我的应用程序中,我得到的字符串是这样的:
this.Text = Properties.Resources.frmCaption;
在我的发布文件夹中,我得到了一个名为International_test.resources.dll
的de-DE
文件夹。
我尝试将其分发到一台设置为德语的机器,所有拉出的字符串仍然是英语。
我尝试将International_test.resources.dll
保存在de-DE
文件夹中,或者只是放入我的apps
目录中。
我做错了什么或者我需要做什么才能使用德语资源文件?
幸运的是,我使用hello world原型项目来测试构建管道中的一大堆东西。
假设您已正确设置资源文件,这里有一些可能有用的示例代码。 为简洁起见,删除了代码文档。
public class HelloWorld { public CultureInfo CultureInfo { get; private set; } public HelloWorld() { CultureInfo = CultureInfo.CurrentCulture; } public HelloWorld(string culture) { CultureInfo = CultureInfo.GetCultureInfo(culture); } public string SayHelloWorld() { return Resources.ResourceManager.GetString("HelloWorld", CultureInfo); } } [TestFixture] public class HelloWorldFixture { HelloWorld helloWorld; [Test] public void Ctor_SetsCultureInfo_ToCurrentCultureForParameterlessCtor() { helloWorld = new HelloWorld(); Assert.AreEqual(helloWorld.CultureInfo, CultureInfo.CurrentCulture, "Expected CultureInfo to be set as CurrentCulture"); } [Test] public void Ctor_SetsCultureInfo_ToAustralianCulture() { helloWorld = new HelloWorld("en-AU"); Assert.AreEqual(helloWorld.CultureInfo.Name, "en-AU", "Expected CultureInfo to be set to Australian culture"); } [Test] [ExpectedException(typeof(ArgumentException))] public void Ctor_ThrowsException_InvalidCultureName() { helloWorld = new HelloWorld("Bogus"); } [Test] public void SayHelloWorld_ReturnsFallbackResource_OnUndefinedResource() { helloWorld = new HelloWorld("en-JM"); string result = helloWorld.SayHelloWorld(); Assert.AreEqual("Hello, World.", result, "Expected fallback resource string to be used"); } [Test] public void SayHelloWorld_ReturnsAustralianResource_OnAustralianResource() { helloWorld = new HelloWorld("en-AU"); string result = helloWorld.SayHelloWorld(); Assert.AreEqual("G'Day, World.", result, "Expected australian resource string to be used"); } }
该项目包含带有HelloWorld字符串键项和“Hello,World”值的Resources.resx文件,以及带有HelloWorld字符串键项和“G’Day,World”值的相应Resources.en-AU.resx ,以及zh等其他项目。 -CH(我只气垫船装满晒鳝。:)来测试非英文字符的显示,因为它显示在相关的hello world web项目中。
最后,添加一些日志记录以显示正在使用的文化(为简洁起见,我将其从此示例中取出),并检查编译器输出以确保调用AL.exe来链接资源程序集(听起来不错)。
我认为我的问题是我使用的是美国版本的XP,其语言设置为德语以及其他文化设置。 CurrentCulture和CurrentUICulture似乎仍然是“en-US”
我想测试的最好方法是在程序开始时手动设置文化,如:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(“de-DE”); Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(“de-DE”);
谢谢一吨Si。
我终于把问题搞清楚了。
我的资源文件位于Properties文件夹中,因此我需要输入以下内容
//using embedded resources ResourceManager rm = new ResourceManager("International_test.Properties.Resources", Assembly.GetExecutingAssembly());