1

HTTP 仕様を読んでいると、「言語タグ」と「言語範囲」という用語に出くわしました。標準では、これら 2 つのエンティティの違いを次のように定義しています。

言語範囲は、タグと正確に等しい場合、またはプレフィックスに続く最初のタグ文字が「-」であるなど、タグのプレフィックスと正確に等しい場合、言語タグと一致します。

ただし、ドキュメントでは、このステートメントを例によって補強していません。では、言語範囲は、次の HTTP ヘッダー フィールドの言語タグとどのように異なるのでしょうか。

Accept-Language: en, en-gb, en-us

そして、ここで違いがなければ、違いがある場所の例を挙げていただけますか?

更新しました


前述の引用を次のように言い換えます。

タグまたはタグのプレフィックスが、Accept-Language フィールドで指定された言語範囲と正確に等しい場合、その言語は受け入れられると見なされます。

4

3 に答える 3

3

言語タグは、特定の言語の識別子です。特定の言語で書かれた Web ページは、その言語のタグでタグ付けされることがありますen-USen一般的な英語の有効な言語タグでもあります。

言語範囲は、ブラウザーが Web サーバーから受信することを好むと言うものです。リソースの言語と正確に一致しない可能性があるため、これは範囲です。ブラウザが言語の範囲が好きであると言う場合、enこれは、、、がすべて受け入れられることを意味しenます—範囲は正確にタグと一致するだけでなく、で始まるすべてのタグと一致します.en-USen-UKenenen-

ご覧のとおり、enは言語タグ言語範囲の両方です。タグはコンテンツの特定の言語を識別し、Web サーバーからクライアントに送信されますが、範囲は言語設定を識別し、クライアントから Web サーバーに送信されます。

Accept-Languageリクエスト ヘッダーのすべての値は言語範囲です。言語タグはContent-Language 応答ヘッダーで使用されます。

于 2012-11-20T13:15:22.483 に答える
2

enは範囲であり、の接頭辞(その接頭辞は) とen-gb正確に等しく、接頭辞 ( )に続く最初の文字はであるため、タグと一致します。en-gbenen-

于 2012-11-20T13:12:37.373 に答える
1

RFCは例を提供します。Accept-Languageリクエストヘッダーの仕様を見ると、次のようになります。

Accept-Language request-headerフィールドはAcceptに似ていますが、要求への応答として優先される自然言語のセットを制限します。言語タグはセクション3.10で定義されています。

  Accept-Language = "Accept-Language" ":"
                     1#( language-range [ ";" "q" "=" qvalue ] )
  language-range  = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )

[...]

  Accept-Language: da, en-gb;q=0.8, en;q=0.7

[...]「私はデンマーク語が好きですが、イギリス英語やその他の種類の英語を受け入れます。」

セクション3.10は次のように述べています。

言語タグの名前空間はIANAによって管理されています。

したがって、すべての言語タグがここに登録されます。RFC2616を入力してください。

language-rangeAccept-Languageヘッダーで使用される)は、タグと完全に等しい場合、またはプレフィックスに続く最初のタグ文字が「-」であるようにタグのプレフィックスと完全に等しい場合、言語タグと一致します。

だからenAccept-Language: enマッチen-gben-US。クライアントが単一の範囲に対して複数の一致を期待する場合、;q=最良の結果を得るには、サブタグを指定し、サブタグごとに品質値()を割り当てる必要があります。

そうでない場合、サーバーは、返される使用可能な表現を決定します。

于 2012-11-20T13:16:48.637 に答える