首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ISO3166-1 alpha-2到国家/地区名称转换.NET

ISO3166-1 alpha-2到国家/地区名称转换.NET
EN

Stack Overflow用户
提问于 2012-08-08 18:32:53
回答 1查看 1.4K关注 0票数 2

我将处理一个提要,它给我两个字母的国家代码,符合ISO 3166-1 alpha-2标准。例如,英国的代码是GB。我的问题是,当提供"GB“作为某些.NET类或函数的输入时,有什么方法可以轻松地返回”联合王国“吗?换句话说,这个翻译是由.NET在某个地方提供的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-08 23:35:07

有点。.NET使用“文化”,它可以通过语言(使用ISO639双字母标识符)和地区(使用ISO3166)的组合来唯一标识。因此,如果您同时了解语言和区域,则可以获得一个描述性名称:

代码语言:javascript
复制
var cultureInfo = new CultureInfo("en-gb");

var cultureName = cultureInfo.EnglishName; //"English (Great Britain)"

//your answer is now the text between the parentheses
var countryName = cultureName.Split('(',')')[1];

要知道,在这些文化中,区域是语言的第二位;该系统支持的每种语言都有文化,但使用该语言的每个国家不一定都有文化。这意味着两件事:首先,您必须了解该语言(因为,例如,瑞士和比利时有两种官方语言,德语和法语,而印度和荷兰各有4种),其次,如果语言和区域的组合使用的符号和符号与另一种更知名的文化足够接近,则您期望的语言的文化列表中可能不存在ISO代码(例如,说英语的加拿大没有"en-CA“文化,因为它与”en-US“相同;然而,有一个"fr-CA“,因为加拿大的法语文化与大多数其他法语地区非常不同)。

另一种解决方案不是内置的,但也不是特别困难;找到或自己创建一个列表,其中包含国际标准化组织代码和以制表符分隔或逗号分隔的完整国家名称,然后将文件转换为Dictionary<string, string>,以便在固定的时间内进行翻译:

代码语言:javascript
复制
var isoDict = new Dictionary<string, string>();

using(var stream = File.Open("isoCodes.csv"))
{
   using(var reader = new TextReader(stream))
   {
      string currentLine;
      do
      {
        currentLine = reader.ReadLine();
        if(currentLine == null) break;

        //assumes no headers, no format/data errors and 
        //a line format of "cc, Country Name\n";
        //ALWAYS "trust but verify" that the data is sane
        var parts = currentLine.Split(',');
        isoDict.Add(parts[0].Trim(), parts[1].Trim());
      } while(currentLine != null);
   } 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11862627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档