2

ISO3166-1alpha-2標準に準拠した2文字の国コードを提供するフィードを扱います。たとえば、英国のコードはGBです。私の質問は、.NETクラスまたは関数への入力として「GB」を提供するときに「英国」を簡単に取り戻す方法はありますか?言い換えれば、この翻訳は.NETによってどこかで提供されていますか?

4

1 に答える 1

1

すこし。.NETは「カルチャ」を使用します。これは、言語(ISO 639の2文字の識別子を使用)と地域(ISO 3166を使用)の組み合わせによって一意に識別できます。したがって、言語と地域の両方を知っている場合は、わかりやすい名前を付けることができます。

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];

これらの文化では、地域は言語に次ぐものであることを理解してください。このシステムでサポートされているすべての言語には文化がありますが、必ずしもその言語を使用しているすべての国にあるとは限りません。それは2つのことを意味します。まず、あなたはしなければなりません言語を知っている(たとえば、スイスとベルギーにはドイツ語とフランス語の2つの公用語があり、インドとオランダにはそれぞれ4つの言語があるため)、次に、ISOコードが期待する言語のカルチャリストに存在しない可能性があります。言語と地域の組み合わせで、区別する必要がない、他のより有名な文化に十分近い記号と表記法を使用する場合(たとえば、英語を話すカナダには「en-CA」文化はありません。 「en-US」と同じですが、カナダのフランス語文化は他のほとんどのフランス語圏とは大きく異なるため、「fr-CA」があります。

他のソリューションはそれ自体では組み込まれていませんが、それほど難しくはありません。ISOコードと完全な国名のリストをタブ区切りまたはコンマ区切りの形式で検索または作成し、ファイルをに丸呑みし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);
   } 
}
于 2012-08-08T15:35:07.110 に答える