[解決済み】ブラウザ内でユーザーのロケールを判断する方法とは?
質問
数十ヶ国語にローカライズされたウェブサイト(Flash)があるのですが、コンテンツにアクセスするための手順を最小限にするために、ユーザーのブラウザ設定に応じてデフォルト値を自動定義したいのですが、可能でしょうか?
参考までに、サーバースクリプトはプロキシ制限で使えないので、JavaScriptかActionScriptが問題解決には適切かと思います。
質問です。
-
ユーザーのロケールを「推測」するには、どのような方法が良いでしょうか?
-
既存のシンプルなクラス/関数で、私を助けてくれるものはありますか(複雑なローカライゼーションバンドルはありません)?特に、スマートな方法で、すべての可能な言語をより少ない数(私が持っている翻訳)に減らすために。
-
このようなソリューションは、どこまで信頼できるのでしょうか?
-
その他、回避策やご提案があれば教えてください。
解決方法は?
正しい方法は、HTTP 受け入れ言語 ヘッダを送信します。このヘッダには、ユーザーがブラウザに設定した、優先する言語の順序付きリストが含まれています。
残念ながら、このヘッダーはJavaScript内部で読むことができません。
navigator.language
これは、インストールされたウェブブラウザのローカライズされたバージョンを教えてくれるものです。これは、必ずしもユーザーが選択した言語と同じものではありません。IEでは、代わりに
systemLanguage
(OSにインストールされている言語)です。
browserLanguage
(と同じ
language
) と
userLanguage
(ユーザーが設定したOSの領域)であり、これらはすべて同様に役に立ちません。
これらのプロパティのどちらかを選ぶとしたら、私なら
userLanguage
を最初に選択し、その後
language
そして、その後に (どの言語にもマッチしない場合) だけ
browserLanguage
そして最後に
systemLanguage
.
もし、サーバーサイドのスクリプトをネット上のどこかに置いて、単にAccept-Languageヘッダーを読み、ヘッダーの値を文字列に含むJavaScriptファイルとして吐き出すことができれば、例えば.....:
var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3';
であれば、HTML内にその外部サービスを指す <script src> を記述し、JavaScriptで言語ヘッダを解析することができます。Accept-Languageの解析は、ほとんどの場合、サーバー側で行われるので、これを行う既存のライブラリコードを私は知らないのですが。
最終的に何をするにしても、ユーザーによるオーバーライドが必要なのは確かです。なぜなら、人によっては常に間違った推測をするからです。多くの場合、URLの中に言語設定を入れて(例: http://www.example.com/en/site vs http://www.example.com/de/site )、ユーザーが2つのリンクをクリックするようにするのが最も簡単な方法です。この場合、クッキーに設定を保存しなければなりませんが、クッキーをサポートしていないユーザーエージェントや検索エンジンを混乱させる可能性があります。
関連
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み】未定義のプロパティ 'bind' を読み込めない。React.js【重複あり
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] Webフォームのフィールド/入力タグでブラウザのオートコンプリートを無効にするにはどうすればよいですか?
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み】オブジェクトからプロパティを削除する(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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み] 解決済み】clearInterval()が動作しない [重複] [重複]
-
[解決済み】XMLHttpRequestモジュールが定義されていない/見つからない
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み] React with ES7: Uncaught TypeError: Cannot read property 'state' of undefined [duplicate] (未定義のプロパティ'state'を読み込むことはできません。
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み】PhantomJS 2.1.1を使用してReactJSアプリケーションをレンダリングできない理由とは?
-
[解決済み】module.exports "モジュールが定義されていません"
-
[解決済み] JavaScriptでカンマを桁区切りにして数値を表示する方法
-
[解決済み] ブラウザの言語設定を検出するためのJavaScript [重複]。