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

标签 c# localization cultureinfo

我似乎无法让本地化发挥作用。

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

我该怎么做?

最佳答案

  • 通过执行以下操作将资源文件添加到您的项目(您可以将其称为“strings.resx”):
    右键单击项目中的Properties,选择Add -> New Item... 在上下文菜单中,然后在 Visual C# Items 列表中选择 "Resources file" 并将其命名为 strings .resx.
  • 在resx文件中添加一个字符串资源,并给它起一个好听的名字(例如:将它命名为“Hello”并赋予它值“Hello”)
  • 保存资源文件(注意:这将是默认资源文件,因为它没有两个字母的语言代码)
  • 添加对您的程序的引用:System.ThreadingSystem.Globalization

运行这段代码:

Console.WriteLine(Properties.strings.Hello);

它应该打印“Hello”。

现在,添加一个新的资源文件,命名为“strings.fr.resx”(注意“fr”部分;这个文件将包含法语资源)。添加一个字符串资源,其名称与 strings.resx 中的名称相同,但值采用法语 (Name="Hello", Value="Salut")。现在,如果您运行以下代码,它应该打印 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”资源,所以它会回退到默认值,这是我们从一开始就添加的。

如果需要,您可以创建包含更多特定资源的文件(例如分别用于法国和加拿大法语的 strings.fr-FR.resx 和 strings.fr-CA.resx)。在每个这样的文件中,您需要为那些不同于它将回退到的资源的字符串添加资源。因此,如果法国和加拿大的文本相同,您可以将其放入 strings.fr.resx,而加拿大法语中不同的字符串可以放入 strings.fr-CA.resx。

关于c# - 如何在 C# 中使用本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1142802/

相关文章:

c# - 从内存加载 C# 中的数据 LOCAL INFILE

c# - 对 List<String> 进行排序时出现意外行为

c# - Convert.ToDouble 和 double.Parse 与 InvariantCulture 的区别

c# - 如果从其他 ViewModel 调用该函数,则不会触发依赖属性?

c# - WebBrowser 在 ObjectForScripting 上声明 "object type is not visible to COM"

java - 如何在格式化时从 Java 8 中的日期获取月份的全名

c# - 在 aspx 页面中使用 Asp.Net WebForms 上的属性资源本地化文本

javascript - 根据浏览器语言显示特定的 div 或内容?

c# - C#中的字符串排序问题

c# - 通过 C# 递归通知子控件