在windows应用程序中以不同语言打印输出c#

时间:2013-06-26 10:38:40

标签: c# .net localization globalization

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

与西班牙语一样,如何设置PrintResource.es-ES.resx。

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

1 个答案:

答案 0 :(得分:2)

除了确保在制作报告时使用正确的文化,您不应该做任何事情。

以下是一个例子:

  1. 创建新的控制台项目
  2. 向其添加资源文件,将其命名为Strings.resx
  3. 将“String1”键重命名为“DisplayName”,并为其指定一个值,例如“English”
  4. 添加另一个资源文件,称之为Strings.nb-NO.resx
  5. 将挪威文件中的“String1”键重命名为“DisplayName”,并为其指定不同的值,例如“Norwegian”
  6. 然后在主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);
            }
        }
    }
    

    执行此操作,您应该在控制台上看到“英语”,然后是“挪威语”。

    从这个例子中可以看出,只要设置了正确的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));