.NETのCultureInfoのCurrentCultureプロパティとCurrentUICultureプロパティの違いは何ですか?


359

.NETではCultureInfoSystem.Globalization名前空間にクラスがあります。これには、CultureInfoタイプの値を返す2つの類似したプロパティがCurrentCultureありCurrentUICultureます。

それらの違いは何ですか?

いつ、どのような理由で使用すべきですか?


28
マイクロソフトは、賢明なことに、米国英語と(英国)英語またはその他の英語のUIカルチャを分離しないことを覚えておいてください。英語のMUIはありません。つまり、地域設定をローカライズするように設定できるにCurrentUICulture関係なく、英語のマシンでは常にen-USにCurrentCultureなります。
nicodemus13

11
はい。私は英国にいて、CurrentCulture「en-GB」ですがCurrentUICulture、「en-US」です。
パニック大佐

これを詳細に説明しているこの記事を見つけました:github.com/jbe2277/waf/wiki/CurrentCulture-vs.-CurrentUICulture
RinoTom

回答:


347

CurrentCultureシステムのデフォルトのユーザーロケールの.NET表現です。これは、デフォルトの数値や日付のフォーマットなどを制御します。

CurrentUICulture Windows 2000で導入されたデフォルトのユーザーインターフェイス言語を指します。これは主に、アプリのUIローカリゼーション/翻訳部分に関するものです。

システムが持つように構成されている地域オプションは、.NETアプリの「現在の」値になります。

多くの場合、それらは両方とも同じです。しかし、私のシステムでは、それらは異なります。私は数字と日付をドイツ語形式でCurrentCulture好むので、ドイツ語になりますが、すべてのアプリケーションも英語で好むので、CurrentUICulture英語になります。

トピックに関する素晴らしい記事があります:すべてを並べ替える:CurrentCultureとCurrentUICultureの両方がある理由


5
実際、これは詳細な説明の良い代替案になる可能性があります:forums.asp.net/post/1080435.aspx
Michael12345

@ Michael12345ヒントをありがとう。リンクを更新しました。あなたがリンクする投稿もまともで、多分もっと良いです。
Tomalak

5
CurrentUICultureは実際にはCurrentLanguageCultureを意味し、CurrentCultureは実際にはCurrentDataCultureを意味するため、これらはひどい名前です。
Pxtl 2016年

2
@Pxtl:CurrentDataCultureではなくCurrentFormattingCultureを選択します。それでも、これらはあなたの名前でさえ示唆されているほど明らかにばらばらではないかもしれないことに注意してください。たとえば、長い日付形式()にはかなりの「言語」を含めることができると私は主張します。「2018年4月6日金曜日」を返し、「2018年6月」を返します。Den-USru-RU
またはMapper

107

これは、どちらを使用するかを覚えておくための簡単なトリックです。

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture

nicodemus13パニック大佐のコメントが信頼できるものである場合、あなたのトリックの2番目の部分は機能しないはずです。
またはMapper

15

仲間のユーザーが行う素晴らしい説明に加えて、違いを生む良い方法であり、Webアプリケーション開発における重要な側面は次のとおりです。

  • CurrentCultureWebサーバーのセットアップを表します。たとえば、ASP.NET Webアプリケーションがドイツでホストされている場合、の値はCutlureInfo.CurrentCultureおそらくになりますde-DE。したがって、タイプのデフォルトの.ToString()フォーマットはIFormattable、デフォルトのドイツ語のフォーマット、またはサーバーOSでデフォルトとして設定されているものを使用します。

  • CurrentUICultureユーザーエージェントから取得でき、Webサイトに接続するクライアントのユーザーインターフェイスカルチャを表す場合があります。あなたがロシアからそのウェブサイトをロードした場合、ローカルの設定がロシア語を使用するように設定されており、ユーザーエージェントはサーバー(オペラとIEがないことを確認ChromeとFirefoxの場合、これを自動的に行う)にロケール設定を送信し、CurrenUICulture希望を表すru-RU。これにより、ResourceManagerを介して取得されるローカライズされた文字列やASP.NET aspx / ascxファイルのローカリゼーション式などのリソースがロシア語になります(翻訳が利用可能な場合)。


13

違い:

  1. CurrentCultureCurrentUICulture言語/翻訳に伴う日付と通貨のフォーマット用 です。ResourceManager文化別にリソースを検索するために使用されます。
  2. 名前空間 CurrentCultureのクラスはでありSystem.Globalizationながら、 CurrentUICultureから来ていますSystem.Threading
  3. CurrentCultureCurrentUICultureすべてのリクエストで設定する必要がある間、セッション内の異なるリクエスト間で永続化されます。

類似度:

どちらもSystem.Globalization.CultureInfoインスタンスです。


8

CurrentUICulture'en'(ニュートラルカルチャ)CurrentCultureなどの国以外の特定のロケールをサポートするのに対し、 'en-GB'などの国のみのロケールのみをサポートすることに注意してください。CurrentCultureニュートラルカルチャーに設定すると、がスローされますArgumentException

これは、日付や通貨などの形式が国自体に強くリンクしているためと考えられますが、表示される言語は国によって交換可能であることがよくあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.