[2] [[言語タグ]]で使われる[[拡張]]である [DFN[[CODE(lang)@en[[[U]]]]]] は、
[[LDML]] で使われる[[ロケール]]の識別子における[[ロケール]]の特徴の記述を表します。

* 仕様書

[REFS[
- [1] [CITE@en[RFC 6067 - BCP 47 Extension U]]
<http://tools.ietf.org/html/rfc6067>
- [25] [CITE[Unicode Locale Extension (‘u’) for BCP 47 - CLDR - Unicode Common Locale Data Repository]] ([TIME[2011-09-21 16:15:42 +09:00]] 版) <http://cldr.unicode.org/index/bcp47-extension>
- [30] [CITE@en-us[UTS #35: Unicode Locale Data Markup Language]] ([TIME[2011-07-19 03:14:51 +09:00]] 版) 
-- [26] <http://unicode.org/reports/tr35/#Language_Locale_Field_Definitions>
-- [31] '''<http://unicode.org/reports/tr35/#u_Extension>'''
-- [34] <http://unicode.org/reports/tr35/#Locale_Extension_Key_and_Type_Data>
- [35] <http://unicode.org/repos/cldr/trunk/common/bcp47/>
]REFS]

* 呼称

[52] 
[[Java]] 方面では [CODE[-u-]] のことを[DFN[追加のUnicode言語タグ拡張機能]]などと呼んでいるようで。
この呼称は [[Unicode言語タグ]]と紛らわしいので、避けるべきです。



* LDML

[3] [[LDML]] は [[Unicode Consortium]] による[[ロケール]]情報の記述のための[[マーク付け言語]]です。
現在の [[LDML]] では[[ロケール]]の識別子として [[BCP 47]] [[言語タグ]]を使っていますが、
[[ロケール]]の記述には[[照合順序]]などの純粋な [[BCP 47]] の仕様だけでは表現できない要素が必要です。

[4] そこで [[LDML]] ([[UTS #35]]) は[[言語タグ]]の中の [CODE(lang)[-[[u]]-]] 
よりも後の部分にそのような情報を記述する方法を規定しています。

[5] [[RFC 6067]] は [[BCP 47]] の規定に則り[[言語タグ]]の[[拡張]] [CODE(lang)[[[u]]]]
を定義し、 [[IANA]] 登録簿に追加しています。実際の [CODE(lang)[[[u]]]] の構文と意味は
[[UTS #35]] に委ねられています。

* 構文

[7] [[拡張]] [CODE(lang)@en[[[u]]]] の[RUBYB[[[部分タグ]]]@en[subtag]]は次のような構成を取ることとなっています。

- [8] [CODE(lang)[[[u]]]] (1個)
- [9] [RUBYB[[[属性]]]@en[attribute]] (零個以上) : 3文字以上
- [10] [RUBYB[[[キーワード]]]@en[keyword]]
-- [11] [RUBYB[[[キー]]]@en[key]] (1個) : 2文字
-- [12] [RUBYB[[[型]]]@en[type]] (零個以上) : 3文字以上

[16] [[言語タグ]]は[[大文字・小文字不区別]]です [SRC[>>31]]。

** 属性

[13] 同じ[[属性]]が複数指定されている場合、最初のもの以外は無視されます [SRC[[[RFC 6067]] 2.1.]]。

[17] 順序に意味はありません [SRC[[[RFC 6067]] 2.1., >>31]]。

[27] [[属性]]は将来の利用のために予約されていますが、現在は使われていません [SRC[>>26]]。

** キー

[15] 同じ[[キー]]を複数使っては[['''なりません''']] [SRC[[[RFC 6067]] 2.1.]]。

[14] 同じ[[キー]]が複数指定されている場合、最初のもの以外は無視されます [SRC[[[RFC 6067]] 2.1.]]。

[18] 順序に意味はありません [SRC[[[RFC 6067]] 2.1., >>31]]。

** 型

[19] 順序には意味があります [SRC[[[RFC 6067]] 2.1.]]。

[38] [CODE(lang)@en[[[ka]]]] と [CODE(lang)@en[[[vt]]]] の場合を除き、
[[型]]は[[部分タグ]]1つによって表現されます。 [SRC[>>26]]

;; [39] ただし将来にわたって保証されている性質ではなさそうです。

;; [44] [CODE(lang)@en[[[vt]]]] は1つ以上の[[部分タグ]]によって[[型]]が表現されます。

;; [43] [CODE(lang)@en[[[ka]]]] が[[部分タグ]]1つとは限らないとありますが、どうなり得るのかは不明です。
[CODE[[[blanked]]]] を表すために[[型]]を省略できるということなのでしょうか。

[45] 言及がありませんが、 [CODE(lang)@en[[[kr]]]] も1つ以上の[[部分タグ]]によって[[型]]が表現されます。

[46] 言及がありませんが、 [CODE(lang)@en[[[ca]]]] には間に「[CODE[[[-]]]]」が入る[[型]]が登録されています。

[28] [[型]]が省略されている場合であって、[[型]]に [CODE(lang)[[[true]]]] を指定できる場合には、
これが指定されたものとみなします [SRC[>>26]]。それ以外の場合はどこでも定義されていません。

;; [40] [CODE(lang)@en[[[true]]]] を値として指定できる場合であっても、省略した時の既定値が
[CODE(lang)@en[[[false]]]] とは限りません [SRC[>>26]]。

** 正準形

[21] [[小文字]]が[[正準形]]です [SRC[[[RFC 6067]] 2.1.1., >>31]]。

[22] [[属性]]と[[キー]]の順序は意味がありませんが、[[ASCII]] [[符号位置]]の順序で並べたものが[[正準形]]です
[SRC[[[RFC 6067]] 2.1.1., >>31]]。

[33] [[キー]]と[[型]]が[[正準形]]であるものが[[正準形]]です [SRC[>>31]]。

* 安定性

[20] [[属性]]、[[キー]]、[[型]]は追加されることがあります。
しかし削除されることや本質的な意味が変更されることは無いとされています。
[SRC[[[RFC 6067]] 2.1.]]

[23] 既存の[[属性]]、[[キー]]、[[型]]の意味に本質的な変更が加わったり、
それらの構造自体が変わったりすることはないとされていますが、
仮にそのような変更がなされる場合には新しい [[RFC]] が発行されることとなっています
[SRC[[[RFC 6067]] 2.]]。

;; [24] 追加など互換性のある変更は [[RFC]] の改訂無しに [[UTS #35]]
の改訂だけで行われます。

* 適合性

[37] [CODE(lang)[[[u]]]] [[拡張]]は [[BCP 47]] 
[[言語タグ]]の構文上利用可能なすべての[[拡張]]の[[部分タグ]]の並びを構文的に正しい値として認めています。
従って[[言語タグ]]の [CODE(lang)[[[u]]]] 部分の[[整形式]]性と [CODE(lang)[[[u]]]]
[[拡張]]としての構文的な正しさは等価です。

[36] しかし構文的に正しいすべての [CODE(lang)[[[u]]]] [[拡張]]の[[部分タグ]]に対して意味が定義されているわけではありません。
[[UTS #35]] や >>25 で[[属性]]や[[キー]]や[[型]]で[RUBYB[[[妥当]]]@en[valid]]であるものの一覧が提供されており、
それに基づき [CODE(lang)[[[u]]]] [[拡張]]が[[妥当]]かどうかを判断できます。

* 型の一覧

[41] 次の[[型]]が定義されています。

;; [42] [[型]]は新規に追加されることがたまにあり、次の一覧は最新でないかもしれません。

[FIG(short list)[
- [CODE(lang)[[[ca]]]]
- [CODE(lang)@en[[[cf]]]]
- [CODE(lang)[[[co]]]]
- [CODE(lang)[[[cu]]]]
- [CODE(lang)@en[[[em]]]]
- [CODE(lang)@en[[[fw]]]]
- [CODE(lang)@en[[[hc]]]]
- [CODE(lang)[[[ka]]]]
- [CODE(lang)[[[kb]]]]
- [CODE(lang)[[[kc]]]]
- [CODE(lang)[[[kf]]]]
- [CODE(lang)[[[kh]]]]
- [CODE(lang)@en[[[kk]]]]
- [CODE(lang)[[[kn]]]]
- [CODE(lang)@en[[[kr]]]]
- [CODE(lang)[[[ks]]]]
- [CODE(lang)@en[[[kv]]]]
- [CODE(lang)@en[[[lb]]]]
- [CODE(lang)@en[[[lw]]]]
- [CODE(lang)@en[[[ms]]]]
- [CODE(lang)[[[nu]]]]
- [CODE(lang)@en[[[rg]]]]
- [CODE(lang)@en[[[sd]]]]
- [CODE(lang)@en[[[ss]]]]
- [CODE(lang)[tz][u-tz]]
- [CODE(lang)[[[va]]]]
- [CODE(lang)@en[[[vt]]]]
]FIG]

[49] >>47,>>48 に [[JSON]] 形式の一覧データファイルがあります。

[REFS[
- [47] [CITE@en[data-web-defs/langtags.txt at master · manakai/data-web-defs]] ([TIME[2016-01-14 15:55:10 +09:00]] 版) <https://github.com/manakai/data-web-defs/blob/master/doc/langtags.txt>
- [48] [CITE@en[data-web-defs/langtags.json at master · manakai/data-web-defs]] ([TIME[2016-01-14 15:55:29 +09:00]] 版) <https://github.com/manakai/data-web-defs/blob/master/data/langtags.json>
]REFS]

* 例

[6] [[言語タグ]]
[FIG[
[PRE(lang code)[
de-DE-u-attr-co-phonebk
]PRE]
]FIG]
- [[言語]] [CODE(lang)[[[de]]]]
- [[地域]] [CODE(lang)[[[DE]]]]
- [[拡張]] [CODE(lang)[[[u]]]]
-- [[属性]] [CODE(lang)[attr]]
-- [[キーワード]]
--- [[キー]] [CODE(lang)[[[co]]]]
--- [[型]] [CODE(lang)[[[phonebk]]]]

... を表します [SRC[[[RFC 6067]] 2.1.]]。

[29] [[Unicodeロケール識別子]] [SRC[>>26]]
[FIG[
[PRE(lang code)[
de_DE_u_co_phonebk_cu_ddm
]PRE]
]FIG]

[32] [SRC[>>31]]
[FIG[
[PRE(lang code)[
u-foo-bar-nu-thai-ca-buddhist
]PRE]
... は[[正準形]]ではありません。
[PRE(lang code)[
u-bar-foo-ca-buddhist-nu-thai
]PRE]
... は[[正準形]]です。
]FIG]




* メモ

[50] [CITE@en['''['''css-fonts-4''']''' Clarify precedence of font-presentation versus lang/xml…]]
([[Litherum]]著, [TIME[2018-03-06 19:00:02 +09:00]])
<https://github.com/w3c/csswg-drafts/commit/ee2603f6fd2d90e070a3d393159033651eb0c1b7>

[51] [CITE@en['''['''css-fonts-4''']''' Clarify precedence of font-presentation versus lang/xml:lang · Issue #2138 · w3c/csswg-drafts]]
([TIME[2018-05-08 21:51:26 +09:00]])
<https://github.com/w3c/csswg-drafts/issues/2138>