多言語Webアプリケーション-ASP.NETでユーザーの言語を検出するにはどうすればよいですか?
-
05-07-2019 - |
質問
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
{ ;}
}
}
この記事のソースは次のとおりです。 ブラウザの言語を検出する方法