web-dev-qa-db-ja.com

多言語Webアプリケーション-ASP.NETでユーザーの言語を検出するにはどうすればよいですか?

ASP.NET Webアプリケーションを構築していて、すべての文字列がリソースファイルに保存されています。アプリケーションに第2言語を追加したいのですが、理想的には、ユーザーに英語以外の言語を選択させるのではなく、ユーザーのブラウザー言語(またはWindows言語)を自動検出してデフォルトで設定したいと思います。現在、私はすべてのリソース母集団を手動で処理しているので、表示する言語を自動的に把握する簡単な方法があれば、2番目のリソースファイルと言語を追加することは私の観点からは簡単です。

誰かがこれをしたことがありますか、または私がその値を取得する方法について何か考えがありますか? ASP.NETはサーバーベースであるため、特定のブラウザー設定にアクセスできないようです。

[〜#〜]解像度[〜#〜]:これが私がやったことです。 「ForEach」を使用して「HttpContext.Current.Request.UserLanguages」を調べ、サポートしているものを検索しました。まだ方言をサポートしていないので、実際には左の2文字をチェックしています。英語とスペイン語だけです。すべての助けをありがとう!

21
SqlRyan

この 記事(元のリンクが無効になっているため、archive.orgにリンクされています) は、ブラウザの言語設定を自動検出するのに役立つ可能性があります。

[編集]はい。引用された記事はASP.NETを使用していません。これ 記事 します。

6

Web.configでこれを試してください:

<globalization culture="auto" uiCulture="auto" />

これにより、ASP.NETは要求ヘッダーからクライアントのカルチャを自動検出します。これは、Page属性を使用してページごとに設定することもできます。

21
Maxam

ASP.NET 4のRequest.UserLanguagesは、これを文字列配列として解析します。

良い情報: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

2
Jason Sebring

クライアントは通常、HTTPリクエストヘッダーに Accept-Language を設定し、優先言語の定量的にスコア付けされたリストを使用します。あなたはそれを解析することができますが、Maxamが指摘したように、 ASP.NET はあなたに代わってそれを行うためのメカニズムを持っています。

2
JasonTrue

ASP.NET でのローカリゼーションは多くの開発者によって見落とされているため、これは素晴らしい質問です。

ASP.NETshouldは、ユーザーのブラウザー設定を自動的に取得し、_CultureInfo.CurrentCulture_を強制します。ユーザーのブラウザ言語に。 Page_OnInit()の行で次のように問題を強制できます。

_Thread.CurrentThread.CurrentCulture = new CultureInfo(HttpContext.Current.Request.UserLanguages[0]);
_

これをどのようにテストできますか?ブラウザの言語パネルに入り、設定を変更します。

2
Jeff Fritz
    /// <summary>
    /// Sets a user's Locale based on the browser's Locale setting. If no setting
    /// is provided the default Locale is used.
    /// </summary>

public static void SetUserLocale(string CurrencySymbol, bool SetUiCulture)
{
    HttpRequest Request = HttpContext.Current.Request;
    if (Request.UserLanguages == null)
        return;

    string Lang = Request.UserLanguages[0];
    if (Lang != null)
    {
        // *** Problems with Turkish Locale and upper/lower case
        // *** DataRow/DataTable indexes
        if (Lang.StartsWith("tr"))
            return;

        if (Lang.Length < 3)
            Lang = Lang + "-" + Lang.ToUpper();
        try
        {
            System.Globalization.CultureInfo Culture = new System.Globalization.CultureInfo(Lang);
            if (CurrencySymbol != null && CurrencySymbol != "")
                Culture.NumberFormat.CurrencySymbol = CurrencySymbol;

            System.Threading.Thread.CurrentThread.CurrentCulture = Culture;

            if (SetUiCulture)
                System.Threading.Thread.CurrentThread.CurrentUICulture = Culture;
        }
        catch
        { ;}
    }
}

この記事のソースはここにあります: ブラウザの言語を検出する方法

1
Mazdak Shojaie