数十の言語にローカライズされた Web サイト (Flash) があり、コンテンツにアクセスするための手順を最小限に抑えるために、ユーザーのブラウザ設定に応じてデフォルト値を自動定義したいと考えています。
参考までに、プロキシ制限のためサーバー スクリプトを使用できないため、問題を解決するには JavaScript または ActionScript が適切だと思います。
質問:
ユーザーのロケールを「推測」する最良の方法は何でしょうか?
複雑なローカリゼーション バンドルなしで、既存のシンプルなクラスや関数で役立つものはありますか? 特に、スマートな方法で、すべての可能な言語をより少ない数 (私が持っている翻訳) に減らすには。
このような解決策はどの程度信頼できるのでしょうか?
他に回避策や提案はありますか?
ベストアンサー1
正しい方法はHTTPを見ることです受け入れ言語サーバーに送信されるヘッダー。これには、ユーザーがブラウザで優先するように設定した言語の順序付けされた重み付けリストが含まれます。
残念ながら、このヘッダーはJavaScript内では読み取れません。navigator.language
は、インストールされている Web ブラウザのローカライズ版を示します。これは、必ずしもユーザーの優先言語と同じではありません。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';
次に、その外部サービスを指す <script src> を HTML に含め、JavaScript を使用して言語ヘッダーを解析します。ただし、Accept-Language の解析はほとんどの場合サーバー側で行われるため、これを行うための既存のライブラリ コードは知りません。
最終的に何をするにしても、一部のユーザーにとっては常に間違った推測となるため、ユーザーによるオーバーライドは必ず必要です。多くの場合、言語設定を URL 内 (例: http://www.example.com/en/site と http://www.example.com/de/site) に配置し、ユーザーが 2 つの間のリンクをクリックできるようにするのが最も簡単です。両方の言語バージョンに 1 つの URL が必要な場合もあります。その場合は設定を Cookie に保存する必要がありますが、Cookie や検索エンジンをサポートしていないユーザー エージェントを混乱させる可能性があります。