ASP.NET Webアプリケーションを構築していて、すべての文字列がリソースファイルに保存されています。アプリケーションに第2言語を追加したいのですが、理想的には、ユーザーに英語以外の言語を選択させるのではなく、ユーザーのブラウザー言語(またはWindows言語)を自動検出してデフォルトで設定したいと思います。現在、私はすべてのリソース母集団を手動で処理しているので、表示する言語を自動的に把握する簡単な方法があれば、2番目のリソースファイルと言語を追加することは私の観点からは簡単です。
誰かがこれをしたことがありますか、または私がその値を取得する方法について何か考えがありますか? ASP.NETはサーバーベースであるため、特定のブラウザー設定にアクセスできないようです。
[〜#〜]解像度[〜#〜]:これが私がやったことです。 「ForEach」を使用して「HttpContext.Current.Request.UserLanguages」を調べ、サポートしているものを検索しました。まだ方言をサポートしていないので、実際には左の2文字をチェックしています。英語とスペイン語だけです。すべての助けをありがとう!
この 記事(元のリンクが無効になっているため、archive.orgにリンクされています) は、ブラウザの言語設定を自動検出するのに役立つ可能性があります。
[編集]はい。引用された記事はASP.NETを使用していません。これ 記事 します。
Web.configでこれを試してください:
<globalization culture="auto" uiCulture="auto" />
これにより、ASP.NETは要求ヘッダーからクライアントのカルチャを自動検出します。これは、Page属性を使用してページごとに設定することもできます。
ASP.NET 4のRequest.UserLanguagesは、これを文字列配列として解析します。
良い情報: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
クライアントは通常、HTTPリクエストヘッダーに Accept-Language を設定し、優先言語の定量的にスコア付けされたリストを使用します。あなたはそれを解析することができますが、Maxamが指摘したように、 ASP.NET はあなたに代わってそれを行うためのメカニズムを持っています。
ASP.NET でのローカリゼーションは多くの開発者によって見落とされているため、これは素晴らしい質問です。
ASP.NETshouldは、ユーザーのブラウザー設定を自動的に取得し、_CultureInfo.CurrentCulture
_を強制します。ユーザーのブラウザ言語に。 Page_OnInit()
の行で次のように問題を強制できます。
_Thread.CurrentThread.CurrentCulture = new CultureInfo(HttpContext.Current.Request.UserLanguages[0]);
_
これをどのようにテストできますか?ブラウザの言語パネルに入り、設定を変更します。
/// <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
{ ;}
}
}
この記事のソースはここにあります: ブラウザの言語を検出する方法