0

ここの初心者。実は初めての質問。

私は 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 設定からの情報です。

私は今何をすべきかについての手がかりがありません。

4

1 に答える 1

0

要求された説明に関係なく、尋ねられたとおりに質問に答えるために...

1.0 では、利用可能な地理情報はありません。1.1 では、zoneinfo.tab場所を国を含む各タイム ゾーン (または少なくともそれらのほとんど) に関連付ける情報を公開しています。完全な文化情報には及びません (たとえば、フランス系カナダ人とイギリス系カナダ人、またはスイスで話されているさまざまな言語を区別していません) が、ある程度のアイデアは得られます。経由で情報にアクセスしますTzdbDateTimeZoneSource.GeoLocations。(TZDB でのみ使用できます。)

もちろん、1.1 はまだリリースされていませんが、今後 2 週間以内にリリースされることを期待しています。ほぼ確実に、大きな API の変更はありません。

ただし、通常は HTTP リクエストを介してカルチャを検出することをお勧めします。

于 2013-03-20T17:30:52.710 に答える