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

StackOverflow https://stackoverflow.com/questions/256229

質問

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

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

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

役に立ちましたか?

解決

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

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

他のヒント

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

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

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

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

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

ASP.NET のローカライズが見落とされているため、これは素晴らしい質問です。多くの開発者。

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

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

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

クライアントは通常、HTTP要求ヘッダーの Accept-Language を定量的に設定します。優先言語のスコア付きリスト、従来の(ただし、必ずしもそうではない)最も優先度の高いものから最も低いものの順。これを解析できますが、Maxamが指摘したように、 ASP.NET にはメカニズムがありますあなたに代わってそれを行うため。

    /// <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
        { ;}
    }
}

この記事のソースは次のとおりです。 ブラウザの言語を検出する方法

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top