[解決済み] ブラウザの言語設定を検出するためのJavaScript [重複]。
質問
JavaScriptを使って、ブラウザの言語設定を検出することを試みています。
でIEのブラウザ言語を設定すると
Tools>Internet Options>General>Languages
この値をJavaScriptで読み取るにはどうしたらよいですか?
Firefoxでも同じ問題です。の設定を検出できません。
tools>options>content>languages
を使って
navigator.language
.
使用方法
navigator.userLanguage
によって行われた設定を検出します。
Start>ControlPanel>RegionalandLanguageOptions>Regional Options
タブを使用します。
でテストしてみました。
navigator.browserLanguage
と
navigator.systemLanguage
の値を返しますが、どちらも最初の設定(
Tools>InternetOptions>General>Languages
)
を発見しました。 リンク が詳しく説明していますが、疑問は残りますね :(
解決方法は?
ここでの主な問題は、ブラウザの設定が実際には
navigator.language
プロパティを取得します。
これらが影響を与えるのは HTTP の 'Accept-Language' ヘッダーですが、この値は javascript からは全く利用できないようです。(おそらく、@anddoutoi がサーバーサイドを介さないリファレンスが見つからないと述べている理由でしょう)。
私は回避策をコード化しました。google app engineのスクリプトを以下の場所に作成しました。 http://ajaxhttpheaders.appspot.com HTTPリクエストヘッダをJSONPで返します。
(注意: これは、バックエンドがない場合にのみ使用するハックです。一般的には、ホストに対して非常に高いレベルの信頼がない限り、ページ内でサードパーティがホストするJavaScriptファイルを呼び出すべきではありません)。
私はこれを永久に残しておくつもりなので、あなたのコードで自由に使ってください。
以下は、その使用方法についてのサンプルコードです(jQuery)。
$.ajax({
url: "http://ajaxhttpheaders.appspot.com",
dataType: 'jsonp',
success: function(headers) {
language = headers['Accept-Language'];
nowDoSomethingWithIt(language);
}
});
誰かがこれを役に立つと思うことを願っています。
編集:この機能をラップする小さなjQueryプラグインをgithubに書きました。 https://github.com/dansingerman/jQuery-Browser-Language
編集2:ご要望にお応えして、AppEngine上で動作するコードを掲載します(本当に些細なことです)。
class MainPage(webapp.RequestHandler):
def get(self):
headers = self.request.headers
callback = self.request.get('callback')
if callback:
self.response.headers['Content-Type'] = 'application/javascript'
self.response.out.write(callback + "(")
self.response.out.write(headers)
self.response.out.write(")")
else:
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write("I need a callback=")
application = webapp.WSGIApplication(
[('/', MainPage)],
debug=False)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
Edit3: アプリエンジンコードはこちらでオープンソース化しています。 https://github.com/dansingerman/app-engine-headers
関連
-
vueディレクティブv-bindの使用と注意点
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み】エラー。Ionic使用中にモジュール '../lib/utils/unsupported.js' が見つかりませんでした。
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】未定義のオブジェクトプロパティを検出する
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vue3レスポンシブ対応のためのsetup+ref+reactive
-
Vue Element-uiは、アイコンを追加するためのツリーコントロールノードを詳細に実装しています。
-
JSアレイループと効率解析の比較
-
元のイベントが実行されなかった後に要素を追加するためのjQueryソリューション
-
Vueの一般的な組み込みディレクティブの説明
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み] TypeError: $.ajax(...) is not a function?
-
[解決済み】TypeScript-のAngular Frameworkエラー - "exportAsがngFormに設定されたディレクティブはありません"
-
[解決済み】ブラウザ内でユーザーのロケールを判断する方法とは?
-
[解決済み] JavaScriptを使ってブラウザの言語を取得する方法 [重複]について