ASP.NETグローバリゼーション—日付の表示
-
08-07-2019 - |
質問
おはようございます
初心者の質問に対する謝罪。 ASP.NET国際化設定を始めたばかりです。
背景情報:
< table>
HTMLオブジェクトを表示するWebサイトがあります。 < table>
HTMLオブジェクトには、日付を表示する列があります。私のサーバーは米国にあり、これらの日付は MM / DD / YYYY
として表示されます。私のユーザーの多くは、Excelからデータを介してこのWebページに接続します->外部データのインポート-> Web Queryインターフェースをインポートします。ほとんどの場合、ユーザーは米国にいるため、これらの日付はExcel画面に正しく表示されます。
ここで、英国のユーザー向けにWebページを機能させる必要があります。現状では、日付を MM / DD / YYYY
としてダウンロードしているため、地域設定が DD / MM / YYYY
に設定されているため、スプレッドシートは使用できません。
私の質問:
受信リクエストにカルチャ設定 en-GB
があることをWebサーバーが認識するようにするにはどうすればよいですか?独自の小さなカスタム回避策を設計することもできますが、これに出会った最初のプログラマーではないと確信しています。プロはこれをどのように処理しますか?私は比較的簡単ですぐに我慢できるソリューションを探していますが、6か月後に恐ろしくなりそうな自分自身のロジックのごちゃごちゃしたバギーな部分を単に置きたくはありません。
事前に感謝します。 -アラン。
解決
いくつかのポイント:
-
<グローバリゼーション>要素には、属性culture =" auto"も必要です。 uiCulture属性は、リソースの取得に使用される言語に影響します。カルチャ属性は、数値と日付の書式設定に使用されるカルチャに影響します。
-
このMSDN記事に記載されているように、ブラウザの設定のみに依存してページのUIカルチャを決定することはベストプラクティスではありません。ユーザーは、自分の好みに設定されていないブラウザー(インターネットカフェなど)を頻繁に使用します。ユーザーがページの言語または言語と文化(CultureInfo名)を明示的に選択する方法を提供する必要があります。
他のヒント
次のようにweb.configを開くことで、必要に応じてブラウザがUIカルチャを自動的に設定できるようにすることができます。
<configuration>
<system.web>
<globalization uiCulture="auto" />
...
そして、ブラウザによって設定されたカルチャがアプリに自動的に設定されます。つまり、フレームワークに日付/時刻値を表示させると、現在のスレッドのUIカルチャに従ってフォーマットされます。
これは、通貨やローカライズされたテキストを使用している場合にも役立ちます(ただし、サポートする各カルチャにローカライズされたリソースを提供する必要があります)。
また、カルチャ設定をオーバーライドするためのクエリ文字列パラメータを受け入れることもできます。
文化の初期化はPage.InitializeCultureメソッドで行う必要があります。
protected override void InitializeCulture ( )
{
Thread.CurrentThread.CurrentCulture
= Thread.CurrentThread.CurrentUICulture
= Request.QueryString [ "culture" ] != null ? new CultureInfo ( Request.QueryString [ "culture" ] ) : CultureInfo.InvariantCulture;
//base.InitializeCulture ( );
}