JavaScript を使用してブラウザの言語設定を検出しようとしています。
IE でブラウザ言語を設定した場合Tools>Internet Options>General>Languages
、JavaScript を使用してこの値を読み取るにはどうすればよいですか?
tools>options>content>languages
Firefox でも同じ問題です。を使用するための設定を検出できませんnavigator.language
。
を使用すると、タブnavigator.userLanguage
を通じて行われた設定を検出します。Start>ControlPanel>RegionalandLanguageOptions>Regional Options
と でテストしましたnavigator.browserLanguage
が、どちらも最初の設定( )navigator.systemLanguage
の値を返しません。Tools>InternetOptions>General>Languages
私は見つけたリンクこれについては詳細に議論されていますが、質問は未回答のままです :(
ベストアンサー1
navigator.language
ここでの主な問題は、ブラウザの設定がJavaScript 経由で取得されるプロパティに実際には影響を及ぼさないということだと思います。
これらが影響を与えるのは HTTP の「Accept-Language」ヘッダーですが、この値は JavaScript ではまったく利用できないようです。(おそらくこれが、@anddoutoi がサーバー側を伴わない参照が見つからないと述べている理由です。)
私は回避策をコーディングしました。Google App Engineスクリプトを作成しました。http://ajaxhttpheaders.appspot.comJSONP 経由で HTTP リクエスト ヘッダーを返します。
(注: これは、これを実行できるバックエンドがない場合にのみ使用するハックです。一般に、ホストに対する信頼度が非常に高い場合を除き、ページ内でサードパーティがホストする JavaScript ファイルを呼び出すべきではありません。)
永久に残しておくつもりですので、コード内で自由に使用してください。
使用例のコード(jQuery)を以下に示します。
$.ajax({
url: "http://ajaxhttpheaders.appspot.com",
dataType: 'jsonp',
success: function(headers) {
language = headers['Accept-Language'];
nowDoSomethingWithIt(language);
}
});
誰かにとってこれが役に立つことを願っています。
編集: github に、この機能をラップする小さな jQuery プラグインを作成しました:https://github.com/dansingerman/jQuery-ブラウザ言語
編集 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()
編集3: アプリエンジンのコードをここでオープンソース化しました:https://github.com/dansingerman/app-engine-headers