###実現したいこと
この条件分岐の形式で、JavaScriptでブラウザ言語を取得したいです。
(jQueyrでも構いません。)
js
1if( language == 'ja' ){ 2 alert('日本語'); 3}else if( language == 'en' ){ 4 alert('English') 5}
下記のソースコードが悪いのか、それとも添付画像の設定が悪いのでしょうか。
###ソースコード1
こちらを書いてみましたが、「日本語」と出てしまします。
js
1var language = (window.navigator.languages && window.navigator.languages[0]) || 2 window.navigator.language || 3 window.navigator.userLanguage || 4 window.navigator.browserLanguage;
###ソースコード2
次にこちらで試したみたのですがやはり「日本語」です。
js
1var language = function() { 2 var ua = window.navigator.userAgent.toLowerCase(); 3 try { 4 // chrome 5 if( ua.indexOf( 'chrome' ) != -1 ){ 6 return ( navigator.languages[0] || navigator.browserLanguage || navigator.language || navigator.userLanguage).substr(0,2); 7 } 8 // それ以外 9 else{ 10 return ( navigator.browserLanguage || navigator.language || navigator.userLanguage).substr(0,2); 11 } 12 } 13 catch( e ) { 14 return undefined; 15 } 16}
###設定画面
自分のブラウザ設定画面はこのように「English」になっているのですが、この設定がおかしいのでしょうか?
それともやはり上のソースコードがおかしいでしょうか?
###追記
下図のようにPC言語設定も変えたのですが、相変わらず「ja」でした。
設定は間違って無さそうなので、language に代入した直後に、その値を表示してみては?
ブラウザ自体もそうなのですが、
PCの言語設定も変えてみて、試されるといいかもしれません。
Qiitaの記事にて、
>navigator.languagesはAccept-Language HTTPヘッダと同じ値を返す
とありますので、この場合は、サーバー側でPCの元の設定から取得するような仕組みに思います。
また、
>Chromeの場合、「言語と入力の設定」から言語の優先順位を変えてもnavigator.languageは変わりません。
とあるので、ブラウザの言語設定だけでは、質問者さんの意向に沿わない結果になる可能性があるでしょう。
otnさん
firefoxでふつうにこれだけでも「ja」です。
var language = window.navigator.language;
alert(language);
miyabi_takatsukさん
やってみます。ありがとうございます。
miyabi_takatsukさんの懸念事項が当たってそうに思います。navigator自体がネットワーク接続の有無(online)のチェックに使われたりもするのでブラウザの言語設定いじるくらいでは確認できなさそうに思います。
window.navigator.languages で返される値は言語のリストです(例えば、["en-US", "zh-CN", "ja-JP"])。
それを論理積(&&)や論理和(||)で演算しようとしているのは間違いです(&&や||で演算されるのは論理値(TRUE,FALSE)であるべきです)。
&&や||で演算すると、とりあえずFALSE(0)でなければTRUEと判断して演算をしますから、エラーは出ないですが、意味のある値にはなりません。
みなさんお世話になってます。ブラウザとPCの言語設定を両方変えた上で、firefoxで下記をやっても「ja」でした。果たして正解は…
var language = window.navigator.language;
alert(language);








