c# - 自作 - splitcontainer 上下



なぜᏌᏊᎢᏳᎾᎵᏍᏔᏅᏍᎦᏚᎩは米国の本名ですか? (1)

最初に注意すべきことは、 RegionInfoが、 その領域で使用されているカルチャを見つけることによってリージョンを見つけることです 。 だから、国だけでなく、その国の言語を探しています。

そのソースコードを読んでみると、大文字/小文字の違いは、地域に文化が指定されていないと検索がどのように行われるかのためです。

たとえば、最初にいくつかのことを試みますが、 それから リージョンの静的リストを 調べようとします。 しかし、 Dictionary.ContainsKeyを使用しているため、大文字と小文字を区別した検索です。 だからあなたが"US"を指定すると、それは見つかるでしょうが、 "us"は見つかりません。

その後、あなたが与えた地域のすべての CultureInfo.GetCultures(CultureTypes.SpecificCultures)CultureInfo.GetCultures(CultureTypes.SpecificCultures) )を検索しますが、大文字と小文字を区別しない方法で行います。

私はそのコードを一歩進めることができないので、私は確認できませんが、私の推測では、順番にリストを通っているので、 en-US行く前にchr-Cher-USに行きます。

なぜそれは一貫していないのですか?

LinqPadは大文字でもチェロキーを見つけるとのコメントがありました。 なぜこれがわからないのですか? 私はそれを再現することができましたが、Visual Studioでは"US"とチェロキーを使用するときは"us"を使用すると英語であることがわかりました。 しかし、LinqPadで "実験的なRoslynアセンブリを使用する"をオンにすると、 "US""us"両方に英語が返されることが"us" 。 だから多分それは正確な実行時のバージョンが目標とすることと関係がある、私は確かに言うことはできません。

一貫性に影響を及ぼすことの1つはキャッシングです:文化+地域によって完全に一致しない場合に最初に行うのは、既に発見されたカルチャーのキャッシュをチェックすることです。 そのキャッシュ内のすべてのキーを小文字にするので、このキャッシュは大文字と小文字を区別しません。

これをテストすることができます。 "US""us"すると結果が異なることが"us"ますが、同じプログラムでこれを試してみてください:

var nativeNameus = new RegionInfo("us").NativeName;
var nativeNameUS = new RegionInfo("US").NativeName;

その後、それらを入れ替えてもう一度実行してください:

var nativeNameUS = new RegionInfo("US").NativeName;
var nativeNameus = new RegionInfo("us").NativeName;

最初のカルチャがキャッシュされ、次のカルチャのために使用されるため、両方の結果は常に等しくなります。

コードの外側に同じメソッドを呼び出し、カルチャ値をキャッシュして、同じ結果を得ると結果が変わる可能性があります。

結論

すべてのことが言った、 ドキュメントは実際に言う

文化名(英語(米国)には「en-US」など)を使用してNativeNameプロパティにアクセスすることをお勧めします。

それでは、ちょっとした疑問点です。あなたは言語ではなく地域を求めました。 特定の言語が必要な場合は、地域だけでなくその言語を求めてください。

英語を保証する場合は、次のいずれかを行います。

  1. マイクロソフトでは、地域で言語を指定することを推奨しています: "en-US"、または
  2. EnglishNameプロパティまたはDisplayNameプロパティ( NativeNameがチェロキーの場合でも英語)を使用します。

このコードを使用すると:

var ri = new RegionInfo("us");
var nativeName = ri.NativeName;   // ᏌᏊ ᎢᏳᎾᎵᏍᏔᏅ ᏍᎦᏚᎩ

なぜnativeNameが文字列"ᏌᏊ ᎢᏳᎾᎵᏍᏔᏅ ᏍᎦᏚᎩ"Cherokee )ですか?

私がnew RegionInfo("US") (唯一の違い、資本US )に変更すると、代わりに"United States"ます。

RegionInfoの優先使用法は、特定の文化情報文字列を与えることです:

new RegionInfo("en-US")
new RegionInfo("chr-Cher-US")

など、それは動作します。 しかし、私が小文字を使用する場合にのみ 、なぜチェロキー語は英語よりも優先されますか?

(Windows 10(バージョン1803「2018年4月の更新」)、.NET Framework 4.7.2を参照)。

アップデート:これは、同じマシン上であっても一貫していません。 たとえば、PowerShellを何度も開いて、 [System.Globalization.RegionInfo]'US'を貼り付けて[System.Globalization.RegionInfo]'US'ました。 長い間、PowerShellのすべてのインスタンスが一貫して同じ結果を与えているようです。 しかししばらくすると、PowerShellのインスタンスは逆の結果を返します。 ここに、2つのウィンドウのスクリーンショットがあります.1つは一貫して1つのNativeNameを持ち、もう1つは一貫して反対のものを持っています。 したがって、何らかの非決定論的な決定が行われなければなりません(ケーシングの違いはありません)。





regioninfo