クライアントの国を取得しようとしているので、CultureInfo.CurrentCulture を使用します。問題は、カナダの顧客が私の Web サイトを使用すると、アメリカ人として表示されることです。
CultureInfo.CurrentCulture が自分の国ではなくサーバーの国を返しているようです。では、どうすればクライアントの国を取得できますか?
クライアントの国を取得しようとしているので、CultureInfo.CurrentCulture を使用します。問題は、カナダの顧客が私の Web サイトを使用すると、アメリカ人として表示されることです。
CultureInfo.CurrentCulture が自分の国ではなくサーバーの国を返しているようです。では、どうすればクライアントの国を取得できますか?
web.config ファイルでculture
属性を設定するだけです。auto
<system.web>
<globalization culture="auto" />
<system.web>
CurrentCulture
これにより、 がクライアントのカルチャに自動的に設定されます。
ローカライズされたリソースを使用している場合にuiCulture
も設定できます。auto
着信ブラウザのリクエストからユーザーのカルチャを読み取るコードを記述し、そこから CultureInfo を設定する必要があると思います。
このフェローは、彼らがどのようにそれを行うかを説明しています: 現在のスレッドの表示カルチャを、ユーザーの着信 Http "要求" オブジェクトからの最も適切なカルチャに設定します。
彼はそこで素晴らしい議論をしていますが、これは基本的に彼のやり方です:
ではPage_Load
、次の呼び出しを行います。UIUtilities.setCulture(Request);
これが呼び出される場所は次のとおりです。
/// Set the display culture for the current thread to the most
/// appropriate culture from the user's incoming Http "request" object.
internal static void setCulture(HttpRequest request)
{
if (request != null)
{
if (request.UserLanguages != null)
{
if (request.UserLanguages.Length > -1)
{
string cultureName = request.UserLanguages[0];
UIUtilities.setCulture(cultureName);
}
}
// TODO: Set to a (system-wide, or possibly user-specified) default
// culture if the browser didn't give us any clues.
}
}
/// Set the display culture for the current thread to a particular named culture.
/// <param name="cultureName">The name of the culture to be set
/// for the thread</param>
private static void setCulture(string cultureName)
{
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(cultureName);
Thread.CurrentThread.CurrentUICulture = new
CultureInfo(cultureName);
}