我有一个小型测试应用,它有2个资源文件(Resources.resx
& Resources.de-DE.resx
),具有相同的字符串名称,但其中一个字符串已转换为德语。
对于我的表单,我将Localize属性设置为ture。
在我的应用程序中,我正在获取字符串:
this.Text = Properties.Resources.frmCaption;
在我的发布文件夹中,我得到一个de-DE
文件夹,其中包含名为International_test.resources.dll
的dll。
我尝试将其分发到一台设置为德语的机器,所有拉出的字符串仍然是英语。
我尝试将International_test.resources.dll
保留在de-DE
文件夹中,或者只是放入我的apps
目录。
我做错了什么或者我需要做些什么才能使用德语资源文件?
答案 0 :(得分:6)
幸运的是,我使用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");
}
}
此项目的 Resources.resx 文件包含 HelloWorld 字符串键项和“Hello,World”值,以及相应的 Resources.en-AU.resx ,带有 HelloWorld 字符串键项和“G'Day,World”值,加上其他如zh-CH(我只)气垫船装满晒鳝。:)来测试非英文字符的显示,因为它显示在相关的hello world web项目中。
最后,添加一些日志记录以显示正在使用的文化(为简洁起见,我将其从此示例中删除),并检查编译器输出以确保调用AL.exe来链接资源程序集(听起来好像没问题)虽然)。
答案 1 :(得分:0)
我认为我的问题是我使用的是美国版本的XP,其语言设置为德语以及其他文化设置。 CurrentCulture和CurrentUICulture似乎仍然是“en-US”
我想测试的最佳方法是在程序开始时手动设置文化,如:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(“de-DE”); Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(“de-DE”);
答案 2 :(得分:0)
感谢一吨。
我终于弄清了我的问题。
我的资源文件位于Properties文件夹中,因此我需要输入以下内容
//using embedded resources
ResourceManager rm = new ResourceManager("International_test.Properties.Resources", Assembly.GetExecutingAssembly());