21

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

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

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

4

6 に答える 6

21

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

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

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

于 2008-11-01T23:28:25.500 に答える
6

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

[編集] はい。引用記事では ASP.NET を使用していません。この記事はそうです。

于 2008-11-01T23:19:50.227 に答える
2

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

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

于 2011-04-23T17:23:06.497 に答える
2

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

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

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

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

于 2008-11-01T23:25:21.760 に答える
2

通常、クライアントは HTTP リクエスト ヘッダーにAccept-Languageを、優先言語の定量的にスコア付けされたリストを使用して設定します。慣習的に (必ずしもそうとは限りません)、最も優先される言語から最も優先されない言語の順に並べられます。それを解析することはできますが、Maxam が指摘したように、ASP.NETにはユーザーに代わってそれを行うメカニズムがあります。

于 2008-11-02T03:34:52.537 に答える
1
    /// <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
        { ;}
    }
}

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

于 2013-07-08T16:51:57.303 に答える