通过瑞典国家名称获取C#的RegionInfo、TwoLetterISORegionName

6

我需要获取国家的两位字母的ISO区域代码,即ISO 3166 - ISO 3166-1 alpha 2。我的问题是,我只有用瑞典语写出的国家名称,例如Sverige代表Sweden,Tyskland代表Germany。是否可能仅通过这些信息获取RegionInfo?我知道对于英文国家名称是可以的。

可行方案:

var countryName = "Sweden";
//var countryName = "Denmark";
var regions = CultureInfo.GetCultures(CultureTypes.SpecificCultures).Select(x => new RegionInfo(x.LCID));
var englishRegion = regions.FirstOrDefault(region => region.EnglishName.Contains(countryName));
var twoLetterISORegionName = englishRegion.TwoLetterISORegionName;

https://dev59.com/imYq5IYBdhLWcg3wtCzO#14262292

1个回答

5

尝试与NativeName进行比较:

string nativeName = "Sverige"; // Sweden

var region = CultureInfo
    .GetCultures(CultureTypes.SpecificCultures)
    .Select(ci => new RegionInfo(ci.LCID))
    .FirstOrDefault(rg => rg.NativeName == nativeName);

Console.Write($"{region.TwoLetterISORegionName}");

编辑:看起来我们实际上想通过瑞典名称找到RegionInfo实例

  Sverige  -> Sweden
  Tyskland -> Germany
  ...

在这种情况下,我们应该使用DisplayName而不是NativeName:
string swedishName = "Sverige"; // Sweden

var region = CultureInfo
    .GetCultures(CultureTypes.SpecificCultures)
    .Select(ci => new RegionInfo(ci.LCID))
    .FirstOrDefault(rg => rg.DisplayName == swedishName);

我们需要确保使用本地化的 .Net。

DisplayName 属性以本地化版本的语言显示国家/地区名称。例如,在 .NET Framework 的英文版本中,DisplayName 属性会显示英文国家/地区名称,在西班牙语版本的 .NET Framework 中则会显示西班牙语。


可以很好地处理 SverigeDanmark,但是对于例如 TysklandGermany 处理失败。 - Ogglas
在德国的情况下应该是“Deutschland”(当地名称),在丹麦的情况下应该是“Danmark”,在希腊的情况下应该是“Ελλάδα”等。 - Dmitry Bychenko
是的,但我保存的值是 Tyskland,对应的是 Germany。 :) - Ogglas
另一种可能性是将 DisplayName 放在 NativeName 的位置,但这需要本地化(瑞典)的 .Net 版本,请参见 http://stackoverflow.com/questions/28408154/how-to-force-culture-。 - Dmitry Bychenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接