0

ユーザーに適した DateTimeFormatter を見つけるのに苦労しました。

たとえば、日付を文字列に変換する場合

.ToString("D");

WinRT では常に en-US カルチャが使用されます。

使用すべき新しいグローバリゼーション API があることがわかりました。

例えば

       var langs = Windows.System.UserProfile.GlobalizationPreferences.Languages;

       var homeregion = Windows.System.UserProfile.GlobalizationPreferences.HomeGeographicRegion;


           Windows.Globalization.DateTimeFormatting.DateTimeFormatter dtf = new DateTimeFormatter(homeregion);

しかし、HomeGeographicRegion の結果は、新しい DateTimeformatter が必要とする形式ではありません

私もこれを試しました

 var formatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter(Windows.Globalization.DateTimeFormatting.YearFormat.Default,
                Windows.Globalization.DateTimeFormatting.MonthFormat.Abbreviated,
                Windows.Globalization.DateTimeFormatting.DayFormat.Default,
                Windows.Globalization.DateTimeFormatting.DayOfWeekFormat.Default);

                string result = formatter.Format(Date);

しかし、これも日付文字列を en-Us 形式で返すだけです。

ユーザーのカルチャに従って DateTimeFormatter を取得する正しい方法を教えてください (uid を介したリソースのローカリゼーションにも自動的に使用されます)。

4

1 に答える 1

4

単一引数のDateTimeFormatterコンストラクターは、テンプレート( "month.abbreviated day dayofweek"など)を取ります。これにリージョンを指定すると、無効な引数で失敗します。

Windowsストアアプリケーションの場合、言語パラメーターなしで作成されたDateTimeFormatterは、Windows.Globalization.ApplicationLanguages.Languagesプロパティの値を指定して作成された場合と同等になります。デスクトップアプリケーションの場合、デフォルトはユーザーロケールです。

アプリケーション言語は、ユーザー言語(Windows.System.UserProfile.GlobalizationPreferences.Languagesでクエリできます)と宣言されたアプリケーションマニフェスト言語(Windows.Globalization.ApplicationLanguages.ManifestLanguagesでクエリできます)から解決されることに注意してください

最後に、ResolvedLanguageプロパティを使用すると、DateTimeFormatterによって内部的に使用されている言語を正確に確認できます。

私の経験では、人々が予期しない結果を得る場合、それは一般に、アプリケーションが単一の言語しかサポートしていないためです。その場合、アプリケーションの言語は、ユーザーの好みに関係なく常にその言語になります。それ以外の場合は、期待する言語がユーザー言語リストの一番上にあることを確認してください。

于 2013-02-26T21:52:42.327 に答える