生成できないニュートラルカルチャと生成できるニュートラルカルチャ?

カルチャとフォールバックといえば、CultureInfo.CreateSpecificCulture() の動き。
このメソッド、通常はニュートラルカルチャを指定すると

    ... CultureInfo.CreateSpecificCulture("zh-CHT")...

    呼び出しのターゲットが例外をスローしました。
    zh-CN、zh-HK、zh-TW、zh-MO、zh-SG などの、具体的なカルチャを選択してください。

などと例外が飛んでおわるのだが、いくつかのニュートラルカルチャを指定して生成すると成功しちゃうものがある。たとえば、"ja" とか "en" が生成に成功し、それぞれ "ja-JP" と "en-US" の具体カルチャが生成されるようになっている。
"ja" なんて "ja-JP" と "ja-OSAKA" ぐらいしか存在しないので、"ja-JP" が生成されるのは良いとして、"en" の具体カルチャは多量にあるにもかかわらず、なぜ "en-US" が選択されるのだろう?
なんらかの理由で "en" が "en-US" にマップされるなら、同じ理由で "zh-CHT" を "zh-TW" なんかにマップしたりはしないのだろうか?


アプリケーションを多言語対応するとき、ユーザに OS の動作言語とは別に、アプリケーションの動作言語の選択を行えるようにする場合、ほとんどのアプリケーションのローカライズの度合いでは UI にはニュートラルカルチャをリストアップすることになる*1のだが、前述の通りニュートラルカルチャは直接生成できないものがある。
また .NET の現実問題として、ニュートラルカルチャは CurrentCulture に対して代入できない*2ので、ユーザが選択した結果として、なんらかの具体カルチャが必要になるのだが、ニュートラルカルチャの名前が手に入っても CreateSpecificCulture() にそのまま渡すと失敗する場合があり、具体カルチャを簡単に入手することはできないという事態が発生する。


ま、実際の所ローカライズしたニュートラルカルチャのリストを元に、各ニュートラルカルチャを親にもった具体カルチャをリストアップして保持し、UI にはリスト内のカルチャに対して CultureInfo.Parent.DisplayName を表示しておけば、ほとんどの場合に解決できる問題なんだけども。

*1:翻訳などのローカライズのコストなどの都合もあるし、個別地域の風習まで実装の手がまわらない

*2:当然? だが CurrentUICulture には代入できる