ここの初心者。実は初めての質問。
私は NodaTime (ASP.Net MVC 3 C# 上) を使用してさまざまなタイム ゾーンを移動してきましたが、結果には本当に満足しています。しかし...タイムゾーンに基づいてユーザーの文化情報を取得する方法があるかどうか、つまり、日付/時刻を表示する方法があるかどうか疑問に思っていました。
助けてくれてありがとう!
アップデート
これについてもっと明確にしましょう...
jsTimeZoneDetect と NodaTime を使用して、ユーザーのタイム ゾーンを特定できます。それは完全に機能しています。ここで、ユーザー ロケール情報 (日付/時刻形式など) を見つけて、これらの情報を正しく表示できるようにする必要があります。つまり、米国に拠点を置くユーザーには、日付が 2013 年 3 月 21 日と表示されます。
Request.UserLanguages からロケールを取得しようとしましたが、役に立ちませんでした。IE は正しくロケール (en-GB) を返しますが、Firefox と Chrome は常に en-US を返します。また、web.config を変更し、次の要素を追加しました。
<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true" />
そして、それは私が取り組んできたコードです:
var userLanguages = Request.UserLanguages;
CultureInfo ci;
if (userLanguages.Length > 0)
{
try
{
ci = new CultureInfo(userLanguages[0]);
}
catch (CultureNotFoundException)
{
ci = CultureInfo.InvariantCulture;
}
}
else
{
ci = CultureInfo.InvariantCulture;
}
string cultureName = ci.Name /* Always returns en-US */
別のポイントとして、ユーザーにロケール情報を選択するように求めることは、私にとっては選択肢ではありません。例: サイトの DropdownList など。
さらに助けはありますか?前もって感謝します。
更新 2
@JonSkeet のアドバイスに従い、質問のタイトルとラベルを問題に合わせて変更しました。
更新 3
ちょうど何かを見つけました。言語 (ロケール) が返される方法は、ブラウザーによって次のように異なります。
- Internet Explorer は、OS 設定またはブラウザーの設定で設定された言語を返します。
- Firefox、Chrome、Safari、および Opera は、ブラウザの設定で設定された言語を返します。
これを考慮すると、すべてのユーザーがブラウザーの設定を変更することを保証する方法がないため、この情報をそのまま使用することは考えられません。私が信頼できる唯一の情報は、OS 設定からの情報です。
私は今何をすべきかについての手がかりがありません。