[1] 各種のプラットフォームや応用は利用者の言語の概念を持っています。
[2] 自然言語はロケールの根幹となる構成要素です。 現代の多くのプラットフォームはプロセスごとにロケールを決められます。
[3] 通常はロケールの言語は1つだけですが、 Webブラウザーのように複数の言語を利用者の好みとして指定できるようになっている応用もあります。
[16] 一般的には利用者の言語はロケールの言語であり、 利用者インターフェイスの翻訳テキストの選択に使う言語であり、 数値や日時の表示や入力に使う言語であるべきです。
[17] 複数の言語が通用する地域の利用者や、 外国の言語を解する利用者などは、 利用者インターフェイスの言語と違う言語も良しとすることがあります。 多くの Webブラウザーは複数の言語を選ぶ機能を持っています。
[5] Webプラットフォームは利用者の言語にアクセスする機能をいくつか提供しています。
[10] いくつかの処理は利用者の言語に依存する挙動を持ちます。
[18] こうした挙動が(広義の)ロケールを構成する諸言語のうちどれを使うべきか、 諸仕様は必ずしも整理されておらず曖昧なところがありますが、 表示する文言の決定は利用者インターフェイスの言語によるべきであり、 API が返すのは利用者の言語の設定によるべきであり、 判定や表示のアルゴリズムで参照するのは利用者の言語の設定によるべきでしょう。
[8] 利用者のプライバシーの保護のため、Webブラウザーは利用者情報を秘匿することが認められています。 その場合は代替となる値を使うことになっています。 >>418
[9]
このため HTML Standard は
navigator.language の値を
either a plausible language or the user's most preferred language
とし、
navigator.languages
の値を
either one or more plausible languages, or the user's preferred languages
とし、
Accept-Language:
の値をそれらと同じリストを使うべきとしています。
>>418
[412] 利用者エージェントは何らかの形で利用者の望む言語を利用者が指定できるようにする必要があります。
利用者にそのような方法を提供しない利用者エージェントは、
Accept-Language: ヘッダーを送信してはなりません。 >>35
[50] 一般的な Webブラウザーは、設定画面に自然言語の指定機能が用意されているのが普通です。 選択肢からいくつかの言語を選んだり、それ以外の言語タグを追加したりできるのが普通です。
[51] 既定では、プラットフォームの言語設定が Webブラウザーにも反映されるようになっているのが一般的です。 プラットフォームの言語設定を変化させた時に自動的に Webブラウザーにも反映されるのかどうかは不明です。 自動的に反映されるべきかもしれませんし、利用者の個別設定があればそれが優先されるべきかもしれません。
[413] 利用者は普通言語範囲の一致の仕組みに詳しくないですから、
利用者エージェントは何らかの配慮をするべきです。
例えば利用者が eb-GB を選択した時に、
en も追加することを提案するとよさそうです。 >>35
[52] 一般的な実装では、利用者が非論理的な指定をできてしまい、
特に何の警告も発されないことがあります。例えば、
en-GB, ja, en のような指定は、
利用者が英語と日本語のどちらを求めているのか、
真意が定かではありません。サーバーは決めかねて、
利用者の意図に沿わない動作をするかもしれません。
利用者が試行錯誤している場合など、深い意図もなくそのような指定をしてしまうこともありますから、
利用者エージェントが問題のありそうな指定を検出して利用者に警告できれば良いのですが、
どのような指定方法だと問題となるかもあまり明確ではありませんし、
利用者がそう頻繁に使いそうな設定項目でもありませんから、
実装を複雑化させるコストに見合わないかもしれません。むしろ設定画面の奥の方に押し込んで、
不注意な利用者がうっかり触ることが内容にした方が良いのかもしれません。
[7]
利用者の言語の情報は fingerprinting vector です。
かなり繊細な利用者のプライバシーに関わる情報であり、
慎重な取り扱いが求められます。
[410] Accept-Language: ヘッダーは利用者のプライバシーに関わる情報を漏らすものですから、
注意が必要です。
[411] とはいえどの Webブラウザーもこのヘッダーをすべての要求につけて送信するようです。
[416] 実際には言語の情報だけでは個人を特定することはできないでしょうが、 話者が少数の言語の場合や、言語の組み合わせ、あるいは言語とそれ以外の情報の組み合わせによって、 個人を特定したり、複数の要求や複数のサイトにわたった行動の追跡に用いたりすることができるかもしれません。 また、話者が多数の言語であっても、あまりその言語の話者がいない Webサイトを閲覧すると、同様に特定したり追跡したりできるかもしれません。
[421] 匿名化サービスを使っている場合、言語としては en-US
を用いることが提案されています >>418。
[419] 利用者エージェントは、
Accept-Language:
と
navigator.languages
で同じ言語リストを用いるべきです >>418。