web-dev-qa-db-ja.com

JavaScriptを使用してブラウザの現在のロケール設定を取得するにはどうすればよいですか?

FirefoxとGoogle Chrome javascriptを使用してブラウザカルチャを取得する方法を知っている人はいますか?注:これはasp.net 3.5 Webアプリケーションです。

要件は、ブラウザカルチャに基づいてアプリケーションのディスプレイカルチャを設定することです。他のブラウザ用の情報はごくわずかしか見つかりませんでしたが、機能していないようです。

次のコードスニペットでIEで取得できます。

var browserCulture = this.clientInformation.browserLanguage;

どんな情報も素晴らしいでしょう!

38
The Sheek Geek

navigatorオブジェクトには次のプロパティがあります(clientInformation on IEですが、その名前を使用する理由はありません)。

  • language(IE以外、ブラウザインストール言語)
  • browserLanguage(IE、ブラウザーインストール言語)
  • userLanguage(IE、OSレベルのOSレベルの言語設定)
  • systemLanguage(IE、OSインストール言語)

だが! これらのプロパティは使用しないでください!多くの場合、これらのプロパティは間違った言語になります。

これらはどれも、ユーザーがブラウザーの「優先言語」UIで実際に設定する言語設定を反映しておらず、ユーザーが変更することは不可能です。言語を切り替えるための追加の手動の簡単な方法なしで、これらの値のいずれかを使用すると、大きなフラストレーションが発生します。

通常のブラウザUIで設定されているように、デフォルトで使用する言語を決定するために嗅ぐべき正しい場所は、HTTPリクエストでサーバーに渡される Accept-Language ヘッダーです。これは、選択可能な優先言語のランク付けされたリストであり、ASP.NETが自動クライアントカルチャを推測するために使用するものです(使用する場合)。

残念ながら、このプロパティはJavaScriptから利用できません!

通常は、サーバー側を使用してAccept-Languageヘッダーを解析し、そこから使用する適切な言語を1つ選択します。 ASP.NETでは、事前に並べ替えられたリストを HttpRequest.UserLanguages から取得し、好きなものを選択できます。

次に、その言語名を<script>要素に吐き出し、言語情報をクライアント側に渡します。

70
bobince

これを試して:

var l_lang;
  if (navigator.userLanguage) // Explorer
    l_lang = navigator.userLanguage;
  else if (navigator.language) // FF
    l_lang = navigator.language;
  else
    l_lang = "en";

ソース: http://forums.digitalpoint.com/showthread.php?t=631706

12
Sologoub

navigator.languagesは配列で、選択したすべての言語が順番に含まれています。そして、ChromeおよびFirefoxでのみ動作します。

navigator.languageとは異なります。つまり、navigator.languagenavigator.languages[0]と必ずしも一致しません。

ただ明確にします。

7
Mats

IEでロケールを取得するには、サーバー側のコードを記述する必要があります。サーブレットを使用してIEの受け入れ言語を取得しました。ユーザーが選択した言語を表示します。クライアント側でロケールを取得します。

String name=request.getHeader("accept-language");
        AcceptClass ac=new AcceptClass();
        ac.setAccLang(name);
        Gson gs=new Gson();
          String json = gs.toJson(ac);
          response.setContentType("application/json");
          response.getWriter().write(json);
0