我有一个小型测试应用程序,其中有2个资源文件(Resources.resxResources.de-DE.resx)具有相同的确切字符串名称,但其中一个将字符串转换为德语。

对于我的表单,我将Localize属性设置为ture。

在我的应用程序中,我得到这样的字符串:

this.Text = Properties.Resources.frmCaption;


在我的发布文件夹中,我得到一个de-DE文件夹,其中包含一个名为International_test.resources.dll的dll。

我尝试将其分发到设置为德语的机器上,并且拉出的所有字符串仍为英语。

我尝试将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网站项目中。

最后,添加一些日志记录以显示正在使用的区域性(为简洁起见,我从本示例中删除了它),还检查了编译器输出,以确保调用AL.exe来链接资源程序集(听起来不错)。

关于c# - 国际化HelloWorld程序.NET,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1129053/

10-13 05:43