1

我的应用程序尚未本地化,但我必须打印不同语言的报告。所以,我想我将为报告文本创建不同的资源,但如何为所选语言设置特定资源。

就像西班牙语一样 PrintResource.es-ES.resx 将如何设置。

我必须使用 if..else..if

4

1 回答 1

3

除了确保在生成报告时使用正确的文化之外,您不需要做任何事情。

这是一个例子:

  1. 创建一个新的控制台项目
  2. 向其中添加一个资源文件,将其命名为 Strings.resx
  3. 将“String1”键重命名为“DisplayName”,并给它一个值,如“English”
  4. 添加另一个资源文件,命名为 Strings.nb-NO.resx
  5. 将挪威文件中的“String1”键也重命名为“DisplayName”,并为其赋予不同的值,例如“Norwegian”

然后在主 Program.cs 中,粘贴以下代码:

using System;
using System.Globalization;
using System.Threading;

namespace ConsoleApplication18
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine(Strings.DisplayName);

            Thread.CurrentThread.CurrentUICulture =
                CultureInfo.GetCultureInfo("nb-NO");

            Console.WriteLine(Strings.DisplayName);
        }
    }
}

执行此操作,您应该会在控制台上看到“English”后跟“Norwegian”。

从这个例子可以看出,只要设置了正确的 UI 文化,就会读取到正确的资源文件。

打印英文文本的代码和打印挪威文本的代码是相同的,但是底层文化发生了变化,因此它将使用不同的资源文件。

如果您不想在生成报告后用西班牙语 UI “弄脏”应用程序的其余部分,只需为报告代码启动一个线程,并将该线程的 UI 文化设置为仅西班牙语。.NET 的资源子系统应该处理其余部分。

还要确保您使用文化感知方法重载格式化数字和日期。

这个:

Console.WriteLine(string.Format(CultureInfo.CurrentUICulture, "{0}: {1}", Strings.DisplayName, 10.31));

可能会产生不同的文本:

Console.WriteLine(string.Format("{0}: {1}", Strings.DisplayName, 10.31));
于 2013-06-26T10:44:12.390 回答