我将处理一个提要,它给我两个字母的国家代码,符合ISO 3166-1 alpha-2标准。例如,英国的代码是GB。我的问题是,当提供"GB“作为某些.NET类或函数的输入时,有什么方法可以轻松地返回”联合王国“吗?换句话说,这个翻译是由.NET在某个地方提供的吗?
发布于 2012-08-08 23:35:07
有点。.NET使用“文化”,它可以通过语言(使用ISO639双字母标识符)和地区(使用ISO3166)的组合来唯一标识。因此,如果您同时了解语言和区域,则可以获得一个描述性名称:
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>,以便在固定的时间内进行翻译:
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);
}
}https://stackoverflow.com/questions/11862627
复制相似问题