[6] [DFN[[[ISO 15924]]]] は、世界各地で用いられる[[用字系]]に対して[[符号]]を与えるものです。

* 仕様書

[REFS[
- [123] [[ISO 15924]] [CITE@en[Information and documentation -- Codes for the representation of names of scripts]]
(有料)
- [244] [CITE@en-us[ISO 15924 Registration Authority]] ([TIME[2009-09-26 07:40:01 +09:00]] 版) <http://unicode.org/iso15924/>
]REFS]



* 英字符号

[22] 
各[[用字系]]に[[ラテン文字]]4文字の[[符号]]が割り当てられています
(一覧: >>251)。

[23] 
通常、1文字目は[[大文字]]、2文字目以降は[[小文字]]で表記されます。

[27] 
[[用字系符号]]を採用した各種プロトコルで[[大文字と小文字]]をどう扱うかは、
それぞれです。

;; [26] [[capitalize]] は奇妙な表記にも見えますが、
[[小文字]]表記する[[言語符号]]や[[大文字]]表記する[[国符号]]と書き分けているようです。

** 私用

[24] 
[[ISO]] (と [[RA]]) が定める標準の[[符号]]の他に、
[[私用]]が認められる[[符号]]群があります。

[25] 
各種[[規格]]や実装がその一部を使っています。

[235] >>123 には[[私用]]の [CODE(lang)[[[Qaaa]]]] .. [CODE(lang)[[[Qabx]]]] も含まれます。
[SRC[[[RFC 4646]] 2.2.3., [[RFC 5646]] 2.2.3.]]

[241] [[Unicode言語識別子]]・[[Unicodeロケール識別子]]では [CODE(lang)[[[Qaaq]]]]-[CODE(lang)[[[Qabx]]]]
は将来も意味を割り当てないので[[私用]]として使って良いとしています [SRC[>>233]]。
それ以外の >>235 の[[用字系]][[部分タグ]]は特別な意味に使う意図があるようで、
>>236、>>239、>>240 の3つが定義されている他、残りも将来の拡張で使用できるように予約しているようです (明記されていませんが)。

*** [CODE(lang)[Qaai]]

[236] [[Unicode言語識別子]]・[[Unicodeロケール識別子]]では [DFN[[CODE(lang)[[[Qaai]]]]]]
に「[RUBYB[継承]@en[inherited]]」という意味を割り当てています [SRC[>>233]]。

[237] ただし、 [CODE(lang)[[[Zinh]]]] を使うのがより好ましいともしています [SRC[>>233]]。

;; [238] [CODE(lang)[[[Zinh]]]] は後から正式に [[ISO 15924]] の[[符号]]として割り当てられたようです。

*** [CODE(lang)[Qaac]]

[255] 
[[Unicode用字系特性値]]の別名として[[用字系符号]]に相当するものを定める
[[PropertyValueAliases.txt]] によれば、
[CODE(lang)[[[Qaac]]]] は [CODE(lang)@en[[[Coptic]]]] / [CODE(lang)@en[[[Copt]]]]
と同義とされています。

*** その他

[13] [[絵文字]]に [DFN[[CODE[Qaae]]]] が用いられたことがありますが、
現在は [CODE[Zsye]] が好ましいと考えられています [SRC[>>1]]。

[14] [[Klingon]] に [DFN[[CODE[Qaak]]]] が用いられたことがあります [SRC[>>1, >>2]] が、
現在は [CODE[Piqd]] が好ましいと考えられています。

[REFS[
- [1] [CITE@en[Replace private use tags for emoji (Qaae) and Klingon (Qaak) with new ISO 15924 tags · Issue #139 · googlei18n/nototools]]
([TIME[2016-01-13 16:01:04 +09:00]] 版)
<https://github.com/googlei18n/nototools/issues/139>

[FIG(quote)[
[FIGCAPTION[
[2] [CITE@en[Klingon alphabets - Wikipedia, the free encyclopedia]]
([TIME[2016-01-03 02:49:04 +09:00]] 版)
<https://en.wikipedia.org/wiki/Klingon_alphabets>
]FIGCAPTION]

> Bing currently uses the Qaak private use script code for pIqaD until an official ISO 15924 script code is assigned.

]FIG]

]REFS]

** [CODE(lang)[Zinh]]

[5] 
[DFN[[CODE[Zinh]]]] は「inherited script」を表すとされています。

[7] 
ただし [[IANA登録簿]]では、 [[言語タグ]]での利用は想定していないとされています。

[8] 
[[Unicode言語識別子]]・[[Unicodeロケール識別子]]には他に [CODE[Qaai]]
がありますが、より新しい [CODE[Zinh]] がより好ましいとされています [SRC[>>233]]。

[9] 
[[UCD]] では [CODE[Inherited][Inherited (UCD)]] と同義とされています。

;; [15] [[IETF言語タグ]]にはない [[XSL-FO]] の独自の拡張で [CODE[inherit]]
という値がありますが、[[言語タグ]]全体の "inherit" を表していて、
[[用字系]]だけが対象の [CODE[Zinh]] とは少し違います。
>>17 も参照。

[44] 
[CODE[ScriptLangTag]]
では使う[RUBYB[べきではありません][should not]]
[SRC[>>43]]。

** [CODE(lang)[Zxxx]]

[12] 
[DFN[[CODE[Zxxx]]]]
は unwritten document
を表すとされています。

[46] 
[CODE[ScriptLangTag]]
では使う[RUBYB[べきではありません][should never]]
[SRC[>>43]]。


** [CODE(lang)[Zyyy]]

[239] [[Unicode言語識別子]]・[[Unicodeロケール識別子]]では [DFN[[CODE(lang)[[[Zyyy]]]]]]
に「[RUBYB[共通]@en[common]]」という意味を割り当てています [SRC[>>233]]。

[3] [[UCD]] では [CODE[Common][Common (UCD)]] と同義です。

[45] 
[CODE[ScriptLangTag]]
では使う[RUBYB[べきではありません][should not]]
[SRC[>>43]]。


** [CODE(lang)[Zzzz]]

[240] [[Unicode言語識別子]]・[[Unicodeロケール識別子]]では [DFN[[CODE(lang)[[[Zzzz]]]]]]
に「[RUBYB[不明]@en[unknown]]」という意味を割り当てています [SRC[>>233]]。

[4] [[UCD]] では [CODE[Unknown][Unknown (UCD)]] と同義です。

[250] [CODE(lang)@en[[[kr]]]] (>>246) においては [CODE(lang)@en[[[Zzzz]]]] は [CODE(lang)@en[[[others]]]]
と同義とされており、明示されていない[[符号]]すべてを表す [SRC[>>247]] ことになっています。

[47] 
[CODE[ScriptLangTag]]
では使う[RUBYB[べきではありません][should never]]
[SRC[>>43]]。


** その他

[10] [DFN[[CODE[Zmth]]]] は Mathmatical notation
を表すとされています。

[11] [DFN[[CODE[Zsye]]]] は記号 (絵文字版) を、
[DFN[[CODE[Zsym]]]] は記号を表すとされています。


[48] 
[[Kana]] が[[仮名]]じゃなくて[[片仮名]]だけしかない罠にまたハマってしまった。
わかっているのについやってしまう、ほんと誰がこんなクソ仕様にしたんだよ



* 数字符号

[31] 
[[0埋め]]ありで[[ASCII数字]]3桁で表される数値符号があります。

[32] >>244 に登録済み符号の一覧があります。

[33] 利用されているのかは不明です。


* 一覧

[251] [[ISO 15924]] の[[用字系符号]]の一覧は >>244 にあり、 [[HTML]] および[[平文]]形式で公開されています。
[[Unicode用字系特性値]]との対応関係も記述されています (>>249)。

[252] [[BCP 47]] の登録簿にも[[用字系部分タグ]]の一覧が含まれています。 [[BCP 47]] の項を参照してください。

[REFS[
- [253] [CITE[manakai/data-web-defs]] ([TIME[2014-03-08 02:20:43 +09:00]] 版) <https://github.com/manakai/data-web-defs>
]REFS]

[254] >>253 にも[[用字系部分タグ]]や [CODE(lang)@en[[[kr]]]] の値とその実装に必要な情報が [[JSON]] として含まれています。


- [36] [CITE@en[iso-codes / iso-codes · [[GitLab]]]], [TIME[2022-11-14T11:38:21.000Z]] <https://salsa.debian.org/iso-codes-team/iso-codes>
-- [34] [CITE@en[data/iso_15924.json · main · iso-codes / iso-codes · [[GitLab]]]], [TIME[2022-11-14T11:37:55.000Z]] <https://salsa.debian.org/iso-codes-team/iso-codes/-/blob/main/data/iso_15924.json>

[37] >>34 符号の一覧および >>36 その名称の各言語[[翻訳テキスト]]データ。

- [38] [CITE@en[GitHub - wooorm/iso-15924: ISO 15924 codes]], [TIME[2022-11-14T11:39:05.000Z]] <https://github.com/wooorm/iso-15924>
-- [39] [CITE@en[iso-15924/index.js at main · wooorm/iso-15924 · GitHub]], [TIME[2022-11-14T11:39:40.000Z]] <https://github.com/wooorm/iso-15924/blob/main/index.js>

[40] >>39 符号の一覧、 [[Unicode用字系特性値]]との対応関係入り。

* 文脈

[245] [[ラテン文字]]4文字の[[用字系符号]]は、次のように使われています。

[FIG(list)[ [29] [[用字系符号]]の用法
- [[言語タグ]]の[[用字系部分タグ]]として (>>230)
- [[言語タグ]]の[[拡張U]]の [CODE(lang)@en[[[kr]]]] の[[型]]の一部として (>>246)
- [[言語タグ]]の[[拡張U]] の [CODE(lang)@en[[[nu]]]] の[[型]]として (>>256)
- [[Unicode用字系特性値]]の[[別名]]として (>>28)
- [[XSL-FO]] [CODE['script']] [[特性]]の値として (>>17)
- [[PLS]] [CODE[orthography]] [[属性値]]として (>>18)
- [CODE(HTTP)@en[[[Content-Script:]]]]/[CODE(HTTP)@en[[[Accept-Script:]]]] の値として
- [[用字系札]]の[[用字系部分タグ]]として
- [[用字系識別符号]]として
]FIG]

-*-*-

[17] [[XSL-FO]] の [CODE(XSL)['script']] 特性では値に 
[CODE(ABNF)[<ISO Script Code> / 'auto' / 'none' / 'inherit']] 
を採用しています。

仕様書: [CSECTION[Formatting Properties]]
<http://www.w3.org/TR/xsl/slice7.html#script>

-*-*-

[18] 
[CITE[Pronunciation Lexicon Specification (PLS) Version 1.0]] 
<http://www.w3.org/TR/pronunciation-lexicon/#S4.5>
では [CODE(XMLa)[[[orthography]]]] 属性に
[[ISO 15924]] の名前を採用しています。

[21] 同仕様 (や関連仕様) の [CODE(XMLa)[[[alphabet]]]]
属性では [CODE(XML)[[[ipa]]]] など表音字母の種類を指定しますが、
それもここでいう[Q[用字系札]]の範疇のような気もしますしむしろ[[言語札]]の特殊なもののような気もしますが自然言語は別レイヤで更に存在していますし(謎)。
結局言語と文字(の種類)と文字の使い方(の体系)は切っても切り離せないのに多対多対応なのが悪いのだ(謎)。



* 言語タグの用字系部分タグ

[120] [[IETF言語タグ]]における[DFN[[RUBYB[[[用字系]]] @en[[CODE(ABNF)[script]]]]]][[部分タグ]]は、
[[言語]]を書き表す時に使う[[用字系]]や[RUBYB[[[書字体系]]]@en[writing system]]を表します。
[[ISO 15924]] のラテン文字4文字による[[用字系符号]]がそのまま利用されています。

;; [231] [[言語タグ]]全体については、「[[言語タグ]]」の項を参照してください。

[234] [[Unicode言語識別子]]・[[Unicodeロケール識別子]]では [DFN[[[Unicode]] [RUBYB[用字系符号]@en[script code]]]]
または [DFN[[CODE[unicode_script_subtag]]]] と呼ばれています [SRC[>>233]]。

** 仕様書

[REFS[
- [232] [[BCP 47]]
- [233] [CITE@en-us[UTS #35: Unicode Locale Data Markup Language]] ([TIME[2011-07-19 03:14:51 +09:00]] 版) <http://unicode.org/reports/tr35/#Language_Locale_Field_Definitions>
- [247] [CITE@en-us[UTS #35: Unicode LDML: Collation]] ([TIME[2013-09-18 19:18:43 +09:00]] 版) <http://www.unicode.org/reports/tr35/tr35-collation.html#Script_Reordering>
- [43] 
[CITE@ja-jp[[[meta]] — Meta table (OpenType 1.9) - Typography | Microsoft Learn]], [[PeterCon]], [TIME[2022-12-03T02:39:04.000Z]] <https://learn.microsoft.com/ja-jp/typography/opentype/spec/meta#scriptlangtag-values>


]REFS]



** 意味

[230] [[用字系]][[部分タグ]]はその[[言語タグ]]によって表される[[言語]]で主として使う[[用字系]]を表しているだけであって、
その[[言語タグ]]が付された対象がその[[用字系]]だけによって構成されるとは限りません。
[SRC[[[RFC 5646]] 4.2.]]

** 構文

[122] [[用字系部分タグ]]として用いられる4文字の[[ラテン文字]]である[[用字系]]は、 [[ISO 15924]]
で定義、またはそれに従い登録されたものを、更に [[IANA]] に登録したものです。
[SRC[[[RFC 4646]] 2.2.3., [[RFC 5646]] 2.2.3.]]

;; [125] [[用字系]]として [[ISO 15924]] に含まれていないものは [[IANA]]
に登録することはできません。 [[RFC 4646]] には必要があれば[[異体]]として登録できると記述されていました
[SRC[[[RFC 4646]] 2.2.3.]] が、 [[RFC 5646]] では削除されています。

** 文脈

[121] 
[[IETF言語タグ]]では、
[[用字系]]は[[言語]]や[[拡張言語]]の後で、他の[[部分タグ]]の前に高々1つだけ置かなければ[MUST[なりません]]
[SRC[[[RFC 4646]] 2.2.3., [[RFC 5646]] 2.2.3.]]。

[124] 
[[IETF言語タグ]]に[[用字系部分タグ]]を含めても他と区別する上で意味が無い時、
[[言語部分タグ]]や[[拡張言語部分タグ]]の[[登録][IANA登録簿]]に
[CODE[Suppress-Script]]
が含まれている時には、
[[用字系]]は省略する[SHOULD[べきです]]。 
[SRC[[[RFC 4646]] 2.2.3., [[RFC 5646]] 2.2.3.]]

[41] 
[CODE[ScriptLangTag]] では[[用字系部分タグ]]は必須で、ちょうど1個だけ書けます。
[[言語部分タグ]]の次に書きますが、
[[言語部分タグ]]が省略された場合は先頭に来ます。

-*-*-

[50] 
[[後方互換性]]を崩してまで[[言語部分タグ]]と[[地域部分タグ]]の間に[[用字系部分タグ]]を挟み込むことに関しては激論がありましたが、
地域よりも[[用字系]]の方が言語に密接しているという主張が通りました。
[SRC[>>49]]

[51] 
この「地域よりも用字系の方が言語に近い」というのは本当に処理を複雑にして[[後方互換性]]を犠牲にしてまで守るべき価値がある真理だったのかは中々に怪しいもので、
例えば[[中文言語タグ]]の現在に至る混乱はこれに起因するところが大きいといえます。
[[中華人民共和国]]と[[中華民国]]の事案の他にも、
[[大韓民国]]と[[朝鮮民主主義人民共和国]]の[[朝鮮語]]の事案や、
[[蒙古国]]と[[中華人民共和国]]の[[蒙古語]]の事案、
旧ソ連諸語の[[キリル文字]]と[[ラテン文字]]の事案など、
[[国家]]というものの[[用字系]]に対する影響力は絶大で、
順序を逆にしていた方が簡単に扱えたケースが多そうにも思われます。



[REFS[

-
[49] 
[CITE@en[Understanding the New Language Tags]], [TIME[2016-01-30T07:01:56.000Z]], [TIME[2024-04-16T12:57:22.368Z]] <https://www.w3.org/International/articles/bcp47/#script>

]REFS]


[52] [CITE@ja[Xユーザーのざぎん 𒎎𒍝𒆳さん: 「@draftcode @osa_k 中国語の方は事実上 zh-CN と zh-TW / zh-HK で代替できることが多いものの、例えばセルビア語はラテン文字表記とキリル文字表記の両方が一般に使われている(sr-SR-Latn と sr-SR-Cyrl)があるので script 必須ですしね」 / X]], [TIME[午後1:24 · 2021年4月11日][2021-04-11T04:24:03.000Z]], [TIME[2024-05-01T07:29:01.000Z]] <https://twitter.com/na4zagin3/status/1381100709924405250>


[53] >>52 この書き方は間違っているが、こう書きたくなるよなあ

** 言語タグの用字系抑制

[200] [[IANA]] 登録簿には [[Suppress-Prefix]] (用字系抑制) 欄があります。
これは[[言語]]と[[拡張言語]]の登録にのみ使われ、
当該[[言語]]・[[拡張言語]]と指定された[[用字系]]を組み合わせて使う[['''べきではない''']]ことを表します。
[SRC[[[RFC 4646]] 3.1., [[RFC 5646]] 3.1.2.]]。

[201] 使うべきではないというのは不適切な組み合わせというわけではなく、
自明な組み合わせであるので必要がない限り明示しなくても良いということです。
使わないことにより [[RFC 3066]] 以前の[[用字系]]が無い頃の[[言語タグ]]との互換性を維持できます
[SRC[[[RFC 5646]] 3.1.9.]]。

;; [207] ほんと、なんで[[用字系]]を間に挟んだんでしょうね・・・。
>>50

[EG[
[208] 例えば [CODE(lang)[[[is]]]] ([[アイスランド語]]) は普通 [CODE(lang)[[[Latn]]]]
([[ラテン文字]]) で表記されるので、 [CODE(lang)[[[is]]]] の用字系抑制には
[CODE(lang)[[[Latn]]]] が指定されています。従って [CODE(lang)[[[is-Latn]]]]
ではなく、単に [CODE(lang)[[[is]]]] とするべきです。

[211] しかし他の[[用字系]]と併用する場合には、敢えて明示する意味があるかもしれません。
例えば[[アイスランド語]]を [CODE(lang)[[[Brai]]]] ([[点字]]) 表記した[[文書]]と[[ラテン文字]]で表記した[[文書]]が選択できるなら、それぞれ
[CODE(lang)[[[is-Brai]]]] と [CODE(lang)[[[is-Latn]]]] と表すのが良いでしょう。
[SRC[[[RFC 4646]] 4.1., [[RFC 5646]] 4.1.]]
]EG]

[EG[
[212] 複数の[[用字系]]が使われることがある[[言語]]であっても、
[[用字系]]を明示せずに省略した方が良いこともあります。例えば[[音声]]だけなら、
[[用字系]]は意味が無いので省略して [CODE(lang)[[[uz]]]] のように表すことができます。
あるいは、「書かれていない」ことを表す [CODE(lang)[[[Zxxx]]]] を使って
[CODE(lang)[[[uz-Zxxx]]]] のように表すこともできます。
[SRC[[[RFC 4646]] 4.1., [[RFC 5646]] 4.1.]]
]EG]


[42] 
[CODE[ScriptLangTag]] では[[用字系部分タグ]]は必須で、
[[IETF言語タグ]]の[[用字系抑制]]側の設計とは真逆です。

* 拡張Uの [CODE(lang)@en[kr]] における用字系符号

[242] [[用字系]]は、[[U拡張]]の [CODE(lang)@en[[[kr]]]] の[[型]]の一部としても使うことができます。

[246] [[言語タグ]]の[[拡張U]]の [CODE(lang)@en[[[kr]]]] では[[用字系符号]]以外の[[文字]]の種別を表す値も使える他、
利用可能な[[用字系]]の値も制限されています [SRC[>>247]]。

* 拡張Uの [CODE(lang)@en[nu]] における用字系符号

[256] [[LDML]] および[[言語タグ]]の[[拡張U]]の [CODE(lang)@en[[[nu]]]] では[[数字]]の種類に識別子を与えていますが、
対応する[[用字系符号]]をそのまま用いるのを原則とし、それで表現できないものに対してはそれより長い識別子を与えています。


* Unicode用字系特性値における用字系符号

[248] [[Unicode用字系特性値]]も[[用字系]]を識別するものですが、 [[Unicode]] と 
[[ISO 15924]]
では[[用字系]]の粒度が異なっているため、必ずしも[[一対一対応]]していません。

[28] 
が、対応関係にあるものについては、 
[[ISO 15924]]
の符号と同じ4文字符号が
[[Unicode用字系特性値]]側でも短い[[別名]]となっていて、
区別なく使えます。
[SEE[ [[Unicode用字系特性値]] ]]

[249] [[ISO 15924]] の登録簿 (>>244) には、両者の対応関係も「[[Property Value Alias]]」として記載されています。


* 関連


[16] 
その他の符号体系は[[用字系]]参照。

* 歴史

[126] [[RFC 1766]] や [[RFC 3066]] の頃は[[用字系]][[部分タグ]]はありませんでした。

[19] RFC 1766 は[[用字系]]の識別までを含めた例として [CODE(LANG)[az-arabic]] と
[CODE(LANG)[az-cyrillic]] を挙げていますが、 RFC 3066 
にはそのような用途の例示さえありません。 [639FAQ] (>>3) は用字系の識別には言語符号より
[[ISO15924]] を使うようにと言っているのと関係があるかもしれません
(しないかもしれません)。

[20] しかしなんにせよ用字系の指定も含めた言語札が使えた方が、
(用字系を別途指定出来る規格なんて多分ないので) 良いと思います。

[30] [[正書法]]がどうこうを含んだ奴は用字系込みに近いよな。違うことは違うが。

[35] >>19-30 [[用字系札]]を使えるようにしる!

[148] [[RFC 3066]] までは[[用字系]][[部分タグ]]はなかったので、
[CODE(lang)[[[zh-TW]]]] のように[[言語]]と[[地域]]を直接つなげたものが一般的で、
現在でも広く用いられていますが、 [[RFC 4646]] はなぜか[[用字系]]を間に挟む構文としました。
そのため [CODE(lang)[[[zh-Hant-TW]]]] のような表記がより厳密なものとされ、
実質的な非互換変更となっています。
[[前方一致]]などの一般的な比較方法でも [CODE(lang)[[[zh-TW]]]] と 
[CODE(lang)[[[zh-Hant-TW]]]] は一致しません。

;; [149] [CODE(lang)[[[zh-TW]]]] は[[台湾]]で使われている[[伝統字]]の[[中文]]を表す[[言語タグ]]として広く使われていますが、
[[RFC 4646]] 以降の定義に従うなら単に[[台湾]]の[[中文]]を表すに過ぎず、
[[伝統字]]であることまで含めた意味でこの[[言語タグ]]を使うことは不正確になります。
意味的な一貫性を考えれば確かにその方が良いのでしょうが、既存の慣習的解釈に対して非互換変更を行う価値があるようには到底思えません。
現に [[RFC 4646]] が出版されてから数年が立ちますが、 [CODE(lang)[[[zh-Hant-TW]]]]
のような表記が普及している、あるいは普及していくようにはまったく思えません。


