温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - How to use localization in C#

其他 - 如何在C#中使用本地化

发布于 2020-03-29 12:49:52

我似乎无法本地化工作。

我有一个班级图书馆。现在,我想在其中创建resx文件,并根据线程区域性返回一些值。

我怎样才能做到这一点?

查看更多

查看更多

提问者
JL.
被浏览
19
18.7k 2017-07-12 22:48
  • 通过执行以下操作,将资源文件添加到项目中(可以将其称为“ strings.resx”):
    右键单击项目中的“ 属性 ”,在上下文菜单中选择“ 添加”->“新建项... ”,然后在列表中Visual C#项目选择“资源文件”并将其命名strings.resx
  • Add a string resouce in the resx file and give it a good name (example: name it "Hello" with and give it the value "Hello")
  • Save the resource file (note: this will be the default resource file, since it does not have a two-letter language code)
  • Add references to your program: System.Threading and System.Globalization

Run this code:

Console.WriteLine(Properties.strings.Hello);

It should print "Hello".

Now, add a new resource file, named "strings.fr.resx" (note the "fr" part; this one will contain resources in French). Add a string resource with the same name as in strings.resx, but with the value in French (Name="Hello", Value="Salut"). Now, if you run the following code, it should print Salut:

Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr-FR");
Console.WriteLine(Properties.strings.Hello);

发生的情况是系统将寻找“ fr-FR”的资源。它不会找到一个(因为我们在您的文件中指定了“ fr”),然后便退回到检查(找到并使用)“ fr”的位置。

下面的代码,将打印“ Hello”:

Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
Console.WriteLine(Properties.strings.Hello);

那是因为它找不到任何“ en-US”资源,也找不到“ en”资源,因此它将回退到默认值,这是我们从一开始就添加的资源。

如果需要,您可以使用更具体的资源创建文件(例如,分别在法国和加拿大使用French的strings.fr-FR.resx和strings.fr-CA.resx)。在每个这样的文件中,您将需要为那些与后备资源不同的字符串添加资源。因此,如果文本在法国和加拿大是相同的,则可以将其放在strings.fr.resx中,而在加拿大法语中不同的字符串可以输入strings.fr-CA.resx。

发布
问题

分享
好友

手机
浏览

扫码手机浏览