[93] [[言語タグ]]の1つ目の[[部分タグ]]は[DFN[[RUBYB[[[言語]]] @en[[CODE(ABNF)[language]]]]]]です。
[[言語タグ]]全体が[[言語]]を表す識別子ですが、[[言語]][[部分タグ]]は特に狭義の[[言語]]を表します。

;; [94] 例外として、1つ目の[[部分タグ]]が [CODE(lang)[[[x]]]] である場合 ([[私用]])
と [CODE(lang)[[[i]]]] である場合 ([[祖父]]) があります。 [SRC[[[RFC 5646]] 2.2.1.]] (後述)

;; [271] [[言語タグ]]全般については、「[[言語タグ]]」の項も参照してください。

* 仕様書

[REFS[
- [272] '''[[RFC 5646]]'''
- [278] [CITE@en-us[UTS #35: Unicode Locale Data Markup Language]]
-- [280] <http://unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers>
-- [279] <http://unicode.org/reports/tr35/#Language_Locale_Field_Definitions>
]REFS]

* 呼称

[108] [[言語部分タグ]]は、特に他と区別する必要がある場合は[DFN[[RUBYB[一次]@en[primary]][[言語]][[部分タグ]]]]
[SRC[[[RFC 5646]]]] と呼ばれています。

[274] [[Unicode言語識別子]]、[[Unicodeロケール識別子]]では[DFN[[RUBYB[基底言語符号]@en[base language code]]]]、
[DFN[[CODE[unicode_language_subtag]]]] とも呼んでいます
[SRC[>>280]]。

* 文脈

[7] 
[[IETF言語タグ]]の先頭で必ず1個だけ使うことができます。

[8] 
[CODE[ScriptLangTag]] の先頭で使うことができます。省略可能です。

[18] 
[[地域部分タグ]]との組合せについては、
[[言語部分タグと地域部分タグの組合せ]]を参照。

* 語彙

[95] 2文字の[[ラテン文字]]である[[言語部分タグ]]は、
[REFS[
- [103] [[ISO 639-1:2002]] [CITE@en[Codes for the representation of names of languages -- Part 1: Alpha-2 code]]
]REFS]
... で定義、またはそれに基づき登録されたものを更に [[IANA]] に登録したものです。
[SRC[[[RFC 4646]] 2.2.1., [[RFC 5646]] 2.2.1.]]

[96] 3文字の[[ラテン文字]]である[[言語]][[部分タグ]]は、
[REFS[
- [104] [[ISO 639-2:1998]] [CITE@en[Codes for the representation of names of languages -- Part 2: Alpha-3 code - edition 1]]
[SRC[[[RFC 4646]] 2.2.1., [[RFC 5646]] 2.2.1.]]
- [105] [[ISO 639-3:2007]]
[CITE@en[Codes for the representation of names of languages -- Part 3: Alpha-3 code for comprehensive coverage of languages]]
[SRC[[[RFC 5646]] 2.2.1.]]
- [106] [[ISO 639-5:2008]] [CITE@en[Codes for the representation of names of languages -- Part 5: Alpha-3 code for language families and groups]]
[SRC[[[RFC 5646]] 2.2.1.]]
]REFS]
... のいずれかにおいて定義、またはそれに基づき登録されたものを更に
[[IANA]] に登録したものです。
[SRC[[[RFC 4646]] 2.2.1., [[RFC 5646]] 2.2.1.]]

;; [101] [[ISO 639]] で2文字の[[言語符号]]と3文字の[[言語符号]]の両方が定義されている場合、
2文字の方だけが [[IANA]] に登録され、[[言語タグ]]で使ってもよいこととなっています。
既に3文字[[言語符号]]が定義されている[[言語]]に新たに2文字[[言語符号]]が定義されることがあると非互換性が生じてしまいますが、
[[ISO 639/RA-JAC]] はそのような2文字[[言語符号]]の追加は行わないと表明しています。
[SRC[[[RFC 4646]] 2.2.1., [[RFC 5646]] 2.2.1.]]

;; [102] [[ISO 639-2/T]] (Terminology) [[言語符号]]と [[ISO 639-2/B]] ([[Bibliographic]])
[[言語符号]]で2種類の3文字[[言語符号]]がある場合、 Terminology の方だけが [[IANA]]
に登録され、[[言語]]タグで使ってもよいこととなっています。ただし現時点で2種類異なっている[[言語]]はすべて
2文字[[言語符号]]が定義されており、従って >>101 により3文字[[言語符号]]は使えません。
[SRC[[[RFC 4646]] 2.2.1., [[RFC 5646]] 2.2.1.]]

[97] 4文字の[[ラテン文字]]である[[言語]][[部分タグ]]は、将来の拡張のために予約されています。
[SRC[[[RFC 4646]] 2.2.1., [[RFC 5646]] 2.2.1.]]

[98] 5文字から8文字の[[ラテン文字]]である[[言語]][[部分タグ]]は、
[[IANA]] によって登録された[[言語]]です。
ただし、 [[IANA]] に登録しようする前に [[ISO 639]] に従い登録しようと試みなければ[['''ならない''']]
[SRC[[[RFC 5646]] 2.2.1.]]
[WEAK[(以前は試みる[['''べきである''']] [SRC[[[RFC 4646]] 2.2.1.]])]]、またその登録に失敗したものは [[IANA]]
にも登録されそうにないだろう、とされています。
[SRC[[[RFC 4646]] 2.2.1., [[RFC 5646]] 2.2.1.]]

;; [99] 自ら存在意義のない登録制度作って何がしたいんだろう・・・。

[100] [[数字]]その他の[[文字]]や、9文字以上の[[部分タグ]]を先頭に使うことは認められていません。
[CODE(lang)[[[x]]]] や [CODE(lang)[[[i]]]] 以外の1文字の[[部分タグ]]も認められていません。


** [CODE(lang)[mul]]

[216] [CODE(lang)[[[mul]]]] (複数の言語) は、複数個の[[言語タグ]]を指定できるなど他に方法がある時は使う[SHOULD[べきではありません]]。
[SRC[[[RFC 3066]] 2.3, [[RFC 4646]] 4.1., [[RFC 5646]] 4.1.]]

[19] 
「複数の言語」といってもいろいろな意味があり得ます。
[SEE[ [[mul]] ]]


** [CODE(lang)[und]]

[217] [CODE(lang)[[[und]]]] (未決定) は、
[[言語]]が必須である場合を除き使う[SHOULD[べきではありません]]。
[SRC[[[RFC 3066]] 2.3, [[RFC 4646]] 4.1., [[RFC 5646]] 4.1.]]

[10] 
なぜ敢えてこれを [SHOULD[SHOULD]] 要件という強い[[規定]]にしたのかは謎です。
普通はある[[言語]]だと指定したい要求があるから指定する、
それがなければわざわざ指定しないわけであって、
雉も鳴かずば撃たれまい、
この規定はあってもなくても良さそうなものです。
むしろこの規定のせいで、正当な理由で指定したいときにしづらくなっている感があります。
([SHOULD[SHOULD]] なので正当な理由があれば使ってもいいのですが...)
言語不詳だと指定したい気持ちがあるなら、
それは正当な理由ですから、気にせず [CODE[und]] を使うべきです。

;; [11] わざわざ「日本語を [CODE[en]] とするべきではない」と規定するようなもので、
おかしなことは言っていないのですが、言っていること自体がなんだかおかしなことです。

[287] [[RFC 6497]] は、[[言語]]を特に問題とせず、[[用字系]]についてのみ記述したいとき、
[[言語部分タグ]]に [CODE(lang)@en[[[und]]]] を使うとしています。

[EG[
[288] 例えば [CODE(lang)[und-Latn-t-und-cyrl]] は[[キリル文字]]から[[ラテン文字]]に[[転写]]されたものを表します。
]EG]

[6] 
[CODE[weekOfPreference]]
[[要素]]の
[CODE[locales]]
[[属性]]では、
[[ロケール]]固有の指定がない場合に適用される[[既定値]]を記述するときに、
[CODE[und]] 
が使われます。


[9] [CITE@en[Movie Atoms]], [TIME[2022-07-12T17:05:28.000Z]], [TIME[2022-12-31T09:47:20.300Z]] <https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-SW16>

[[RFC 4646]] ([[BCP 47]]) [[言語タグ]]を採用。

適当な値がなければ [CODE[und]] を使えるとしています。

;;
[218] [[HTML]] の [CODE(HTMLa)@en[[[lang]]]] [[属性]]や [[XML]] の
[CODE(XMLa)@en[[[xml:lang]]]] [[属性]]では[[空文字列]]により[[言語情報]]無しを表すことができます。

;; [12] 
[CODE[ScriptLangTag]] は[[言語部分タグ]]を明示したくないとき省略できます。

[29] [CITE@en['''['''malar_braille''']''' BCP 47 tag modified]], [[ramesh-k]], [TIME[2019-09-17 03:05:30 +09:00]], [TIME[2024-05-01T09:49:01.000Z]] <https://github.com/keymanapp/keyboards/commit/d429c808315b27ec520604a37dc546d17d619654>


[30] >>29 は[[点字]]入力[[鍵盤]]。元は [CODE[und-Brai]] で表していたものを、
思いつく[[言語タグ]] + [CODE[Brai]] の羅列に置き換えた。本当にこれでええんか?

[41] 
[CITE@en[Second-Level Reference Label Generation Rules - ICANN]], [TIME[2025-01-15T06:09:45.000Z]] <https://www.icann.org/resources/pages/second-level-lgr-2015-06-21-en>



** [CODE(lang)[mis]]

[221] [DFN[[CODE(lang)[mis]]]] (未符号化) は、[[言語]]はわかっているものの[[言語符号]]が無いことを表していますが、
[[言語タグ]]では使う[['''べきではありません''']]。
[CODE(lang)[[[und]]]] か[[私用]][[部分タグ]]を使うべきです。
[SRC[[[RFC 5646]] 4.1.]]

;; [222] 「[[言語タグ]]の安定性を損なう」ことが理由 [SRC[[[RFC 5646]] 4.1.]]
とされていますが、情報交換の有用性を鑑みると [CODE(lang)[[[und]]]] 
は不適切なんじゃないでしょうか・・・。[[私用]]を使うのがよいですね・・・。

[3] [[フィクション]]の[[言語]]などはこの[[言語符号]]が適当に思われます。

;; [4] [[フィクション]]であっても[[言語学]]的に詳細な設定があるものは、
[[言語符号]]が割り当てられている (または将来的に割り当てられる) 可能性があります。
しかしそこまで凝っていない、断片的に利用例がある程度の[[言語]]の方が圧倒的に多数です。
そのような[[言語]]には、[[言語タグ]]が必要だとしても[[私用]]の[[言語タグ]]を都度作成するほどのものとも思えません
(もちろん需要があれば都度作成しても良いとは思いますが)。


[28] [[人工言語]]参照。



** [CODE[zxx]]

[219] [[歌詞]]の無い[[音楽]]や非言語的な音声、[[計算機言語]]などの[[自然言語]]に属さないものについては、
[DFN[[CODE(lang)[zxx]]]] (非言語的、非適用可能) [[言語]][[部分タグ]]を使うことができます。

;; [5] しかし実用上は[[プログラミング言語]]は[[英語]]など元になった[[言語]]として扱う方が便利なこともあるかもしれません。

[20] [CITE@ja-JP[地図作成 - 地図作成 - HERE Developer]], [TIME[2023-10-20T10:32:01.000Z]], [TIME[2023-11-20T07:01:13.488Z]] <https://jp.developer.here.com/documentation/geojson-map-components-cartography/data_spec_guide/common/globals.html#languagebcp47>

[21] >>20 は[[私用部分タグ]]と組み合わせた
[DFN[[CODE[zxx-x-iat]]]]
を使っています。

** [CODE(lang)[root]]

[273] [[言語タグ]]の変種である [[Unicode言語識別子]]・[[Unicodeロケール識別子]]は、
[[言語部分タグ]]に相当する部分で特別な値 [CODE(lang)[[[root]]]] を使っています。

[1] [[言語タグ]]自体では [CODE[root]] は認められていません。

** 私用

[276] >>96 には [[ISO 639-2]] による[[私用]]の
[CODE(lang)[[[qaa]]]] ... [CODE(lang)[[[qtz]]]] も含まれています [SRC[[[RFC 4646]] 2.2.1., [[RFC 5646]] 2.2.1.]]。

[277] [[Unicode言語識別子]]、[[Unicodeロケール識別子]]はそのうちの
[CODE(lang)[[[qfz]]]] ... [CODE(lang)[[[qtz]]]] について意味を定義しないので他の[[応用]]が使っても問題ないとしています
[SRC[>>279]]。逆に言えばそれ以外の[[私用]]の[[符号]]は (現在は未定義ですが)
将来的に特別な意味で使われる可能性があります。

[2] いずれにせよ、[[私用]]の値は[[相互運用性]]の問題の元ですから、
使うべきではありません。

-*-*-


[14] [DFN[ConLang Code Registry]] ([DFN[CLCR]])
では[[人工言語]]用の[[言語符号]]を私用3文字符号に割り当てています。
[SRC[>>13]]

[REFS[

-
[13] [CITE[ConLang Code Registry]], [TIME[2023-01-11T06:01:54.000Z]] <https://www.kreativekorp.com/clcr/>

]REFS]


[15] 
[[ISO]] 
に正式な[[符号]]が割り当てられたことで[RUBYB[取り下げ][withdraw]]されたものもあります。

[16] 
[DFN[long code]] ([DFN[長符号]])
として示されたものは [[IETF言語タグ]] ([[言語部分タグ]] [CODE[art]] +
[[私用部分タグ]]) のように見えますが、何の説明もありません。

[17] 
似たような別プロジェクトとして、[[CLAコード]]があります。

** マクロ言語

[281] [[Unicode言語識別子]]、[[Unicodeロケール識別子]]は互換性のためにいくつかの[[マクロ言語]]について、
その全体を指す本来の意味ではなく、代表的な[[言語]]を表すことと解釈するとしています [SRC[>>279]]。
例えば、 [CODE(lang)[[[zh]]]] は[[中文]]全体を指すものですが、特に [CODE(lang)[[[cmn]]]]
([[官話]]) のことを意味するものとみなしています [SRC[>>279]]。

;; [282] このような対応付けの一覧表は [[XML]] のデータで提供されています。


** その他の値

[40] [[XSL-FO]] では[[言語タグ]]の登場場面である 
[CODE[xml:lang]]
[[属性値]]に [CODE(XSL)[inherit]] が指定できます。
([[XML]] 的にそんなのありかよ? と思いますが) この値は
[CODE(XML)[xml:lang]] [[属性]]の[[既定値]] [CODE[#IMPLIED]] を明示した形になります。
[SRC[>>308]]

[309] 
これは [[XML]] も[[IETF言語タグ]]も認めていない、
[[XSL-FO]] だけの独自仕様です.

;; [310] [[用字系符号]]には [CODE[Zinh]] という値がありますが、
[[言語タグ]]では使うべきではないとされていますし、
[[言語タグ]]全体ではなく[[用字系]]にだけしか指定できないものです。
[CODE[inherit]] に相当するものは[[IETF言語タグ]]の体系には存在していません。

[REFS[
- [308] 
[CITE[Formatting Properties]] <http://www.w3.org/TR/xsl/slice7.html#xml:lang>
]REFS]


- [47] 一部の [[DOM]] HTML 実装は、 [CODE(DOMa)[[[lang]]]] 属性の値で、 HTML の [CODE(HTML)[[[lang]]]] 属性に値が明示されていない時には [CODE(lang)[unknown]] を返すらしいです。


[22] 
[CITE@ja-JP[[[綜語]] / 宇田川浩行 / デライト]], [[希哲社]], [TIME[2023-11-25T13:29:43.000Z]] <https://dlt.kitetu.com/?fg=KNo.F85E/45E0>

>情報処理では ISO の言語コード・国名コードを独自に拡張し「[B[syn_KTK]]」[WEAK[(三文字)]],「[B[sy_KT]]」[WEAK[(二文字)]]を用いる。これにより,同じ情報を一般的な日本語(ja_JP)と,実験的な綜語で訳し分ける事などが可能になる。 

-*-*-

[23] 
[CITE@ja[デジタルシネマ 名前付け規則 / 付録1ab: 言語コード一覧表 (日本語訳) – シネマテクノロジー]], [TIME[2024-04-03T11:34:43.000Z]], [TIME[2024-04-03T11:36:08.368Z]] <https://cinematechnology.jp/dcnc/dcnc-appendix-1ab-language-codes>

>言語コードは ISO 639-1, 639-2, 639-3 に準拠します。

>特例として、 “[CODE[LAS]]” はラテンアメリカ系スペイン語を表しますが、ISO 639-3 の定義ではラマ語(トーゴで話される言語)を表します。映画配給業界の慣習で “[CODE[LAS]]” はラテンアメリカ系スペイン語として既に広く使用されているため、この名前付け規則ではラテンアメリカ系スペイン語として使い続けることにしました。

>音声言語名または字幕言語名が記載されていない場合、名前付け規則の言語コードには[CODE[XX]]を使用します。
>
このコードは[CODE[ContentTitleText]]要素内でのみ使用します。
>
[CODE[Language]]要素が存在しない場合、音声または字幕言語が存在しないことを意味します。

- [27] 
[CITE@en[Language Codes]], [TIME[2024-03-30T16:02:15.000Z]], [TIME[2024-04-03T11:44:51.548Z]] <https://registry-page.isdcf.com/languages/>
- [25] [CITE[Wayback Machine]], [TIME[2024-04-03T11:43:30.000Z]] <https://web.archive.org/web/20170930013240/http://isdcf.com/papers/ISDCF-Doc7-DigitalCinemaLanguageCodes.pdf>
- [26] [CITE[Wayback Machine]], [TIME[2024-04-03T11:44:21.000Z]] <https://web.archive.org/web/20221211174845/https://isdcf.com/papers/ISDCF-Doc7-DigitalCinemaLanguageCodes.pdf>


[24] 
>>23 この[DFN[名前付け規則言語コード]]はその他にも [CODE[Q]] から始まる[[私用]]の[[符号]]や、
4字の独自の[[符号]]を定めています。それ以外でもいくつか非標準のものが混じってそうな。

-*-*-

[31] 
[CITE[skf]] の[[内部コード]]やプログラム内部で使われる[DFN[言語][skf言語]]は、
[[ISO 639-1]] の英字2字符号 ([[大文字]]) にいくつか追加したものです。
[SRC[>>32, >>35]]

- [34] [N[0x00]] は、 「言語は未規定、または言語を指定していない」です。 [SRC[>>35]]
- [33] [DFN[[CODE[NU]]]] は、「言語ニュートラル」です。 [SRC[>>32]]
- [36] [DFN[[CODE[@N]]]] は、「Unicode であり、言語中立である」です。 [SRC[>>35]]
- [37] [DFN[[CODE[@U]]]] は、 「Unicode でない」です。「言語中立かどうかとは無関係」
です。 [SRC[>>35]]
- [38] [DFN[[CODE[EM]]]] は、「ヨーロッパ系の混在言語」です。 [SRC[>>35]]
- [39] [DFN[[CODE[US]]]] は、「米英語」です。 [SRC[>>35]]


[REFS[

- [32] [CITE@ja[3. charset/codeset handlingの表示 - [[skf]] - simple kanji filter - OSDN]], [TIME[2024-07-06T02:58:48.000Z]] <https://ja.osdn.net/projects/skf/docs/charset.txt/ja/11/charset.txt.txt>
- [35] 
[CITE[skf]] [CODE[skf_2.00.17.tar.xz]] の [CODE[doc/5.languages.txt]]

]REFS]

* 歴史

[127] [[言語]][[部分タグ]]は [[RFC 1766]] 以来ずっと最初の[[部分タグ]]として存在しています。

[269] [[RFC 1766]] は2文字言語符号を使ってもよいとしていました。
[SRC[[[RFC 1766]] 2.]]

[261] [[RFC 3066]] は2文字言語符号、3文字言語符号を使ってもよいとしていました。
[SRC[[[RFC 3066]] 2.2.]]

[270] [[RFC 1766]] と [[RFC 3066]] はその他には[[私用]]の [CODE(lang)[[[x]]]] と 
[[IANA]] 登録用の [CODE(lang)[[[i]]]]
を認めており、それ以外はすべて使用禁止とされていました。 [SRC[[[RFC 3066]] 2.2.]]



[289] [CITE@en[RFC 7033 - WebFinger]]
( ([TIME[2014-10-26 16:32:10 +09:00]] 版))
<https://tools.ietf.org/html/rfc7033#section-4.4.4.4>