1. ホーム
  2. ジャバスクリプト

[解決済み】ブラウザ内でユーザーのロケールを判断する方法とは?

2022-04-20 20:50:12

質問

数十ヶ国語にローカライズされたウェブサイト(Flash)があるのですが、コンテンツにアクセスするための手順を最小限にするために、ユーザーのブラウザ設定に応じてデフォルト値を自動定義したいのですが、可能でしょうか?

参考までに、サーバースクリプトはプロキシ制限で使えないので、JavaScriptかActionScriptが問題解決には適切かと思います。

質問です。

  1. ユーザーのロケールを「推測」するには、どのような方法が良いでしょうか?

  2. 既存のシンプルなクラス/関数で、私を助けてくれるものはありますか(複雑なローカライゼーションバンドルはありません)?特に、スマートな方法で、すべての可能な言語をより少ない数(私が持っている翻訳)に減らすために。

  3. このようなソリューションは、どこまで信頼できるのでしょうか?

  4. その他、回避策やご提案があれば教えてください。

解決方法は?

正しい方法は、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つのリンクをクリックするようにするのが最も簡単な方法です。この場合、クッキーに設定を保存しなければなりませんが、クッキーをサポートしていないユーザーエージェントや検索エンジンを混乱させる可能性があります。