如何在 C# 中将两个字母的 ISO-3166 国家/地区代码映射到文化

Gia*_*ini 4 .net c# culture timezone datetime

我需要根据两个字母的 ISO-3166 国家/地区代码本地化我的 C# DateTime 对象

https://en.wikipedia.org/wiki/ISO_3166-2

有办法做到吗?

我只能使用 5 个字符的国家/地区表示(en-US、nl-NL 等..)来应用给定的文化

System.Globalization.CultureInfo cultureinfo =
        new System.Globalization.CultureInfo("nl-NL");
DateTime dt = DateTime.Parse(date, cultureinfo);
Run Code Online (Sandbox Code Playgroud)

即使是满射映射也可以(即多个国家/地区代码映射到单一 C# 文化)

Son*_*nül 5

来自CultureInfo(string)构造函数文档;

有关预定义区域性名称的列表,请参阅国家语言支持 (NLS) API 参考

也来自CultureInfo.TwoLetterISOLanguageName物业

当前 CultureInfo 语言的 ISO 639-1 两字母代码

没有US定义,但有en(如果您确实必须使用两个字母的名称),您可以使用它。所有这些都在标准中定义。

var cultureInfo = new CultureInfo("en");
Run Code Online (Sandbox Code Playgroud)

所有这些两个字母的代码都是有效的,除了ivfor 之外InvariantCulture,所以我们可以忽略它。我写了一个简单的代码来检查它。

foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
     try
     {
          var c = new CultureInfo(culture.TwoLetterISOLanguageName);
     }
     catch (Exception)
     {
          Console.WriteLine(culture.TwoLetterISOLanguageName); // Only prints "iv"
     }
}
Run Code Online (Sandbox Code Playgroud)

如何创建自己的映射?我建议遵循以下步骤;

  • 在 ISO-3166 和 ISO 639-1 标准中查找不同的两字母代码。
  • 创建您自己的KeyValuePair<string, string>结构,其中第一个包含 ISO-3166 双字母代码,第二个包含 ISO 639-1 双字母代码。
  • 如果您的两字母 ISO-3166 两字母代码在此构造函数中失败,请检查其映射的两字母代码并尝试使用CultureInfo字母代码创建您的代码。