3

ローカリゼーション用のリソースファイルがいくつかあります。それらは書式設定可能な文字列です。私はそのようにようにすることによって、それを返すFxCop CA1305:CurrentCultureとCurrentUICulture

MyResource.resx 
Title: "MyApp - Ver: {0}" 

:たとえば

public String Title 
{ 
    get { return String.Format(CultureInfo.CurrentUICulture, MyResources.Title, 1); } 
} 

私はCurrentUICultureのとのCurrentCultureの違いを理解しますが、FxCopのではなくのCurrentCultureを使用するように私に言っていますか?

答えて

6

ある程度FxCopが正しいです:この場合はCurrentUICultureを使用しないでください。既に述べたように、CurrentCultureはロケール対応のフォーマットを意味し、CurrentUICultureは翻訳可能な文字列をリソースから読み込むためのものです。
あなたがここで行ったことは、番号を書式設定していたため、FxCopはあなたが間違ったCultureInfoを使用したと訴えています。残念ながら、FxCopがあなたに言わなかったことは、実際にCultureInfo.InvariantCultureを使用すべきです。どうして?バージョン番号はLocaleに依存しないものです。あなたはいつも1.9のようなものを見て、1,9のようなものは見ません。従ってInvariantCultureは行く方法です。
マイクロソフトでは、バージョン情報を格納するための特定のクラスも提供しました。奇妙なことに、その名前はVersionです(AFAIRはSystem名前空間にあります)。これは、あなたがToString()をしたときに、前に言及したようなバージョン番号を常に表示します。そのコンストラクタでは、インスタンス化する際にロケール不変のバージョン文字列も必要です。

5

String.Formatは、CurrentUICultureではなく、CurrentCultureに基づく数値または日付の書式設定に使用されることがよくあります。

3

もう1つのことは、CurrentCultureは常に特定の文化である一方で、CurrentUICultureは中性の文化になることができるということです。

タイプXXXFormatInfoはニュートラルカルチャでは機能しません。NotSupportedException例外が発生します。

関連する問題