IETF 언어 태그
1. 개요
IETF 언어 태그는 1995년 처음 정의된 이후 여러 차례 개정을 거쳐 현재 RFC 5646이 표준으로 사용되고 있으며, 언어, 문자 체계, 지역, 변이형, 확장, 개인용 하위 태그를 하이픈으로 연결하여 언어 정보를 표현한다. IETF 언어 태그는 ISO 639, ISO 15924, ISO 3166, UN M.49 등의 표준을 참조하며, 확장 하위 태그를 통해 변환된 콘텐츠나 유니코드 로케일 속성과 같은 추가 정보를 포함할 수 있다.
| 이름 | IETF 언어 태그 |
|---|---|
| 설명 | IETF (Internet Engineering Task Force)에서 정의한 언어 식별자 |
| 용도 | 컴퓨터 프로그램에서 텍스트나 다른 내용의 언어를 식별 HTTP의 `Accept-Language` 헤더 필드 HTML의 `lang` 속성 XML의 `xml:lang` 속성 PNG의 텍스트 청크 |
|---|---|
| 관련 RFC | RFC 5646: 언어 태그 구조 정의 RFC 4647: 언어 태그 매칭 정의 RFC 7231: HTTP에서 언어 태그 사용 규정 |
| 기본 구조 | language[-script][-region][-variant]*[-extension]*[-privateuse] |
|---|---|
| 언어 | 필수. ISO 639에 정의된 언어 코드 (예: `en` (영어), `ko` (한국어)) |
| 스크립트 | 선택 사항. ISO 15924에 정의된 문자 집합 (예: `Latn` (라틴 문자), `Hang` (한글)) |
| 지역 | 선택 사항. ISO 3166-1 alpha-2에 정의된 국가 코드 또는 UN M.49에 정의된 지역 코드 (예: `US` (미국), `029` (카리브 해)) |
| 변형 | 선택 사항. 언어의 특정 방언이나 변형을 나타냄 |
| 확장 | 선택 사항. 단일 문자 접두사 뒤에 오는 하위 태그 (예: `u` (Unicode), `x` (비공개 사용)) |
| 비공개 사용 | 선택 사항. `x-`로 시작하는 하위 태그로, 특정 당사자 간의 비공개 합의에 따라 사용 |
| 영어 | `en` |
|---|---|
| 스페인어 (라틴 아메리카) | `es-419` |
| 로만슈어 (수르실바 방언) | `rm-sursilv` |
| 세르비아어 (키릴 문자) | `sr-Cyrl` |
| 민난어 (중국어 번체, 대만) | `nan-Hant-TW` |
| 광둥어 (중국어 번체, 홍콩) | `yue-Hant-HK` |
| 스위스 독일어 (Unicode 확장, 추가 지역 정보) | `gsw-u-sd-chzh` |
| IANA 레지스트리 | 언어 하위 태그 레지스트리 언어 태그 확장 레지스트리 |
|---|
-
RFC -
다이제스트 인증
다이제스트 인증은 HTTP 통신에서 클라이언트와 서버 간 사용자 인증 방식으로, 클라이언트가 사용자 이름, 비밀번호, nonce 등을 해싱한 응답 값을 서버에 전송하여 인증하며, RFC 2069의 취약점을 개선한 RFC 2617과 RFC 7616으로 강화되었으나, HTTPS 기본 인증에 비해 단점이 많아 사용이 줄고 있다. -
RFC -
RFC 1149
RFC 1149는 조류 운반체를 이용하여 IP 데이터그램을 전송하는 규격을 다룬 문서로, IPoAC 프로토콜을 통해 IP 데이터를 두루마리에 인쇄하여 조류의 다리에 부착, 전송하는 방식을 설명한다. -
국제화와 지역화 -
언어 현지화
언어 현지화는 특정 지역의 문화, 언어, 법률 등을 고려하여 제품이나 서비스를 적응시키는 포괄적인 과정으로, 세계화 전략의 핵심 단계인 국제화 이후에 수행되며, 다양한 기술과 방법으로 이루어져 시장에서의 성공적인 출시와 성장에 필수적이다. -
국제화와 지역화 -
ISO 3166
ISO 3166은 국가, 속령, 특별 지역 및 그 하위 구분에 대한 코드를 정의하는 국제 표준으로, ISO 3166-1, ISO 3166-2, ISO 3166-3으로 구성되어 있으며 ISO 3166/MA에 의해 관리 및 업데이트된다. -
고유 식별자 -
MAC 주소
MAC 주소는 네트워크 장치를 식별하는 고유한 48비트 식별자로, IEEE 802 MAC 주소로 알려져 있으며, 최근 스푸핑 악용 및 개인 정보 보호를 위한 랜덤화 기술이 논의되고 있다. -
고유 식별자 -
범용 상품 부호
범용 상품 부호(UPC)는 소매점에서 상품을 식별하기 위해 상품 포장에 인쇄되는 널리 사용되는 바코드의 일종으로, 12자리 숫자로 구성된 UPC-A를 포함한 다양한 변형이 존재한다.
2. 역사
IETF 언어 태그는 1995년 5월에 발행된 RFC 1766에서 처음으로 정의되었다. 이후 2001년 1월에 RFC 3066으로 대체되었는데, ISO 639-2 코드가 추가되고(이전에는 ISO 639-1 코드만이 허용) 처음으로 하위 태그에 숫자를 사용하는 것이 허용되었다.
2006년 9월에는 RFC 4646(사양의 주요 부분)과 RFC 4647(매칭의 태도에 대해서)이 발행되었다. RFC 4646은 언어 태그에 구조화된 서식을 도입하고, 이전부터 사용되던 ISO 639(part 1과 2)와 ISO 3166에 더해서 ISO 15924와 UN M.49를 이용하였으며, 하위 태그의 레지스트리를 오래된 것에서 새로운 것으로 바꾸었다. 또한 이 이전에 정의되어 있던 태그 중 새로운 구조에 적합하지 않은 것에 대해서는 RFC 3066과의 호환성을 유지하기 위해서 계승되었다.
현재 IETF 워킹 그룹은 ISO 639-3을 언어 하위 태그 레지스트리에 포함시키는 것을 주요 목표로 하는 다음 버전의 사양을 준비하고 있으며, 승인 절차가 진행 중이다.
2.1. 초기 정의 및 발전 (RFC 1766, RFC 3066)
1995년 3월, Harald Tveit Alvestrand가 편집한 [http://tools.ietf.org/html/rfc1766 RFC 1766]에서 IETF 언어 태그가 처음 정의되었다. 이 태그는 ISO 639-1의 두 글자 언어 코드와 ISO 3166의 두 글자 국가 코드를 기반으로 했으며, 3~8자의 변형 또는 스크립트 하위 태그를 포함하는 전체 태그의 등록을 허용했다.
2001년 1월, [http://tools.ietf.org/html/rfc3066 RFC 3066]으로 업데이트되면서 ISO 639-2의 세 글자 언어 코드를 추가하고, 숫자 하위 태그 사용을 허용했다. 또한, HTTP/1.1에서 언어 태그의 일치를 돕기 위한 언어 범위 개념을 채택했다.
2.2. 구조화된 형식 도입 (RFC 4646, RFC 4647)
2006년 9월, RFC 4646 및 RFC 4647이 발표되면서 언어 태그의 구조가 더욱 정교해졌다. ISO 15924 (문자 체계 코드) 및 UN M.49 (지역 코드)가 추가되어 언어 태그의 표현 범위가 확장되었다. 이전 태그 레지스트리가 새로운 하위 태그 레지스트리로 대체되었으며, 이전 버전과의 호환성을 위해 일부 예외 조항이 마련되었다.
2.3. ISO 639-3 통합 및 현재 표준 (RFC 5646)
2009년 9월에 발행된 현재 표준인 RFC 5646은 ISO 639-3 및 639-5의 세 글자 코드를 언어 하위 태그 레지스트리에 통합하여 ISO 639와 BCP 47 간의 상호 운용성을 높였다. BCP 47 (Best Current Practice 47)은 RFC 5646과 관련 RFC 문서들을 포함하는 IETF 언어 태그의 최신 표준을 나타낸다.
3. 서식
IETF 언어 태그는 하이픈('-')으로 구분된 하나 이상의 '하위 태그(subtag)'로 구성되며, 각 하위 태그는 기본 라틴 문자 또는 숫자로만 구성된다. 하위 태그는 대소문자를 구별하지 않지만, 지역 하위 태그는 모두 대문자, 문자 체계 하위 태그는 머리글자만 대문자, 그 외 모든 하위 태그는 소문자로 작성하는 것이 권장된다.
일반적으로 언어 태그는 언어 하위 태그만 사용하거나, 언어 하위 태그와 지역 하위 태그를 함께 사용한다. 예를 들어, `en`은 영어를 나타내며, `en-CA`는 캐나다 영어를 나타낸다. 언어 태그에 구별되는 정보를 추가하지 않는 경우, 스크립트 및 지역 하위 태그는 생략하는 것이 좋다. 예를 들어, 스페인어는 라틴 문자로 쓰이는 것이 일반적이므로 es-Latn보다 es가 더 선호된다.
3.1. 하위 태그의 종류 및 순서
IETF 언어 태그는 하이픈(-)으로 구분된 하나 이상의 "하위 태그(subtag)"로 구성된다. 일반적으로 하위 태그는 다음 순서로 작성된다.
* language영어
* script영어
* region영어
* variant영어
* extension영어
* private use영어
따라서 형식은 대략 다음과 같다. (이 중 language영어 태그만 필수)
```
언어-문자 체계-지역-변이형-확장-개인용
```
각 하위 태그는 다음 표준에서 파생된다.
* language영어: ISO 639-1, ISO 639-2, ISO 639-3, ISO 639-5
* script영어: ISO 15924
* region영어: ISO 3166-1 alpha-2, UN M.49
* variant영어: (독자적인 것이므로 파생 원본 표준 없음)
* extension영어: (미래 확장을 위한 예약 영역이므로 파생 원본 표준 없음)
* privateuse영어: (사적 이용 부분이므로 파생 원본 표준 없음)
IANA에서 관리하는 [https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry 언어 하위 태그 레지스트리(Language Subtag Registry)]에는 현재 공개되어 있는 유효한 하위 태그 목록이 있다.
하위 태그에서는 알파벳의 대소문자를 구분하지 않지만, 사양에서는 언어 하위 태그 레지스트리와 동일한 방법으로, 즉, region영어 하위 태그에 대해서는 모두 대문자로, script영어 하위 태그에 대해서는 머리글자만 대문자로, 그 외 모든 하위 태그에 대해서는 소문자로 표기하도록 권장하고 있다.
언어 태그의 사용법으로 자주 보이는 스타일은 단순히 language영어 하위 태그만 사용하거나, language영어 하위 태그와 region영어 하위 태그를 사용하는 방법이다. 예를 들어, `en`은 단일 language영어 하위 태그(ISO 639-1에서)로 구성되어 영어를 나타낸다. 한편, `en-CA`는 language영어 하위 태그 다음에 region영어 하위 태그 `CA`(ISO 3166-1에서)를 붙여서 구성되며, 캐나다 영어를 나타낸다.
3.2. 하위 태그 표기 규칙
하위 태그는 대소문자 구분을 하지 않지만, 규약에서는 region영어 하위 태그는 모두 대문자, script영어 하위 태그는 머리글자만 대문자, 그 외의 모든 하위 태그는 소문자로 작성하는 것을 권장하고 있다. 이 대소문자 사용은 기본 ISO 표준의 권장 사항을 따른다.
4. 언어 태그의 예시
BCP 47은 IETF 언어 태그의 표준이다. 다음은 BCP 47에서 제시하는 언어 태그의 예시이다.
* 언어 하위 태그만 사용하는 경우:
* 독일어독일어
* 日本語일본어
* grandfathered 태그의 예i-enochian
* 언어-문자(language-script) 하위 태그:
* 중국어 (번체자)zh-Hant
* 중국어 (간체자)zh-Hans
* 세르비아어 (키릴 문자)sr-Cyrl
* 세르비아어 (라틴 문자)sr-Latn
* 언어-지역(language-region) 하위 태그:
* 영어 (미국)en-US
* 스페인어 (라틴 아메리카), UN 지역 코드 이용es-419
* 언어-변형(language-variant) 하위 태그:
* 슬로베니아어 Nadiza 방언sl-nedis
* 언어-지역-변형(language-region-variant) 하위 태그:
* 스위스에서 사용되는 독일어, 1901년 [[맞춤법]]에 사용된 독일어de-CH-1901
* 이탈리아에서 사용되는 슬로베니아 Nadiza 방언sl-IT-nedis
* 언어-문자-지역-변형(language-script-region-variant) 하위 태그:
* 중국 대륙에서 사용되는 중국어 (간체자)zh-Hans-CN
* 세르비아 몬테네그로에서 사용되는 세르비아어 (라틴 문자)sr-Latn-CS
* 이탈리아에서 사용되는 슬로베니아어 (라틴문자) Nadiza 방언sl-Latn-IT-nedis (권장되지 않음)
4.1. 일반적인 언어 태그
IETF 언어 태그는 BCP47 표준을 따르며, 다양한 형태로 사용된다.
* 언어 하위 태그만 사용하는 경우:
* 독일어독일어
* 日本語일본어
* grandfathered 태그의 예i-enochian
* 언어-문자(language-script) 하위 태그:
* 중국어 (번체자)zh-Hant
* 중국어 (간체자)zh-Hans
* 세르비아어 (키릴 문자)sr-Cyrl
* 세르비아어 (라틴 문자)sr-Latn
* 언어-문자-지역(language-script-region) 하위 태그:
* 중국 대륙에서 사용되는 중국어 (간체자)zh-Hans-CN
* 세르비아 몬테네그로에서 사용되는 세르비아어 (라틴 문자)sr-Latn-CS
* 언어-변형(language-variant) 하위 태그:
* 슬로베니아어 Nadiza 방언sl-nedis
* 언어-지역-변형(language-region-variant) 하위 태그:
* 스위스에서 사용되는 독일어, 1901년 [[맞춤법]]에 사용된 독일어de-CH-1901
* 이탈리아에서 사용되는 슬로베니아 Nadiza 방언sl-IT-nedis
* 언어-문자-지역-변형(language-script-region-variant) 하위 태그:
* 이탈리아에서 사용되는 슬로베니아어 (라틴문자) Nadiza 방언sl-Latn-IT-nedis (권장되지 않음)
* 언어-지역(language-region) 하위 태그:
* 영어 (미국)en-US
* 스페인어 (라틴 아메리카), UN 지역 코드 이용es-419
다음은 일반적으로 사용되는 언어의 IETF 하위 태그를 나타낸 표이다.
| 영어 이름 | 원어 이름 | 하위 태그 |
|---|---|---|
| 아프리칸스어 | Afrikaans아프리칸스어 | af |
| 암하라어 | አማርኛ암하라어 | am |
| 아랍어 | العربية아랍어 | ar |
| 마푸둥군어 | Mapudungunarn | arn |
| 모로코 아랍어 | الدارجة المغربيةary | ary |
| 아삼어 | অসমীয়া아삼어 | as |
| 아제르바이잔어 | Azərbaycan아제르바이잔어 | az |
| 바시키르어 | Башҡорт바시키르어 | ba |
| 벨라루스어 | беларуская벨라루스어 | be |
| 불가리아어 | български불가리아어 | bg |
| 벵골어 | বাংলা벵골어 | bn |
| 티베트어 | བོད་ཡིག티베트어 | bo |
| 브르타뉴어 | brezhoneg브르타뉴어 | br |
| 보스니아어 | bosanski보스니아어/босанскиbs-Cyrl | bs |
| 카탈루냐어 | català카탈루냐어 | ca |
| 중앙 쿠르드어 | کوردیی ناوەندیckb | ckb |
| 코르시카어 | Corsu코르시카어 | co |
| 체코어 | čeština체코어 | cs |
| 웨일스어 | Cymraeg웨일스어 | cy |
| 덴마크어 | dansk덴마크어 | da |
| 독일어 | Deutsch독일어 | de |
| 저지 소르브어 | dolnoserbšćinadsb | dsb |
| 디베히어 | ދިވެހިބަސް디베히어 | dv |
| 그리스어 | Ελληνικά그리스어 | el |
| 영어 | English | en |
| 스페인어 | español스페인어 | es |
| 에스토니아어 | eesti에스토니아어 | et |
| 바스크어 | euskara바스크어 | eu |
| 페르시아어 | فارسى페르시아어 | fa |
| 핀란드어 | suomi핀란드어 | fi |
| 필리피노어 | Filipino필리핀어 | fil |
| 페로어 | føroyskt페로어 | fo |
| 프랑스어 | français프랑스어 | fr |
| 프리지아어 | Frysk서프리슬란트어 | fy |
| 아일랜드어 | Gaeilge아일랜드어 | ga |
| 스코틀랜드 게일어 | Gàidhlig스코틀랜드 게일어 | gd |
| 길버트어 | Taetae ni Kiribati | gil |
| 갈리시아어 | galego갈리시아어 | gl |
| 스위스 독일어 | Schweizerdeutschgsw | gsw |
| 구자라트어 | ગુજરાતી구자라트어 | gu |
| 하우사어 | Hausa하우사어 | ha |
| 히브리어 | עברית히브리어 | he |
| 힌디어 | हिंदी힌디어 | hi |
| 크로아티아어 | hrvatski크로아티아어 | hr |
| 세르보크로아티아어 | srpskohrvatski세르보크로아트어 српскохрватскиsh-Cyrl | hrv |
| 상 소르브어 | hornjoserbšćinahsb | hsb |
| 헝가리어 | magyar헝가리어 | hu |
| 아르메니아어 | Հայերեն아르메니아어 | hy |
| 인도네시아어 | Bahasa Indonesia인도네시아어 | id |
| 이그보어 | Igbo이그보어 | ig |
| 이족어 | ꆈꌠꁱꂷ쓰촨 이어 | ii |
| 아이슬란드어 | íslenska아이슬란드어 | is |
| 이탈리아어 | italiano이탈리아어 | it |
| 이누이트어 | Inuktitut이누크티투트어 ᐃᓄᒃᑎᑐᑦ이누크티투트어 (ᑲᓇᑕ이누크티투트어) | iu |
| 일본어 | 日本語일본어 | ja |
| 조지아어 | ქართული조지아어 | ka |
| 카자흐어 | Қазақша카자흐어 | kk |
| 그린란드어 | kalaallisut그린란드어 | kl |
| 크메르어 | ខ្មែរ크메르어 | km |
| 칸나다어 | ಕನ್ನಡ칸나다어 | kn |
| 한국어 | 한국어한국어 | ko |
| 콘칸어 | कोंकणी콩칸어 | kok |
| 쿠르드어 | Kurdîku-Latn/کوردیku-Arab | ku |
| 키르기스어 | Кыргыз키르기스어 | ky |
| 룩셈부르크어 | Lëtzebuergesch룩셈부르크어 | lb |
| 라오어 | ລາວ라오어 | lo |
| 리투아니아어 | lietuvių리투아니아어 | lt |
| 라트비아어 | latviešu라트비아어 | lv |
| 마오리어 | Reo Māori마오리어 | mi |
| 마케도니아어 | македонски јазик마케도니아어 | mk |
| 말라얄람어 | മലയാളം말라얄람어 | ml |
| 몽골어 | Монгол хэл몽골어 ᠮᠤᠨᠭᠭᠤᠯ ᠬᠡᠯᠡmn-Mong | mn |
| 모호크어 | Kanien'kéhamoh | moh |
| 마라티어 | मराठी마라티어 | mr |
| 말레이어 | Bahasa Malaysia말레이어 | ms |
| 몰타어 | Malti몰타어 | mt |
| 미얀마어 | မြန်မာဘာသာ미얀마어 | my |
| 노르웨이어(부크몰) | norsk (bokmål)노르웨이어(보크몰) | nb |
| 네팔어 | नेपाली (नेपाल)네팔어 | ne |
| 네덜란드어 | Nederlands네덜란드어 | nl |
| 노르웨이어(뉘노르스크) | norsk (nynorsk)노르웨이어(뉘노르스크) | nn |
| 노르웨이어 | norsk노르웨이어 | no |
| 오크어 | occitan오크어 | oc |
| 오리야어 | ଓଡ଼ିଆ오리야어 | or |
| 파피아멘토어 | Papiamentupap | pap |
| 펀자브어 | ਪੰਜਾਬੀ펀자브어 / پنجابیpnb | pa |
| 폴란드어 | polski폴란드어 | pl |
| 다리어 | درىprs | prs |
| 파슈토어 | پښتو파슈토어 | ps |
| 포르투갈어 | português포르투갈어 | pt |
| 키체어 | K'ichequc | quc |
| 케추아어 | runasimi케추아어 | qu |
| 로만슈어 | Rumantsch로만슈어 | rm |
| 루마니아어 | română루마니아어 | ro |
| 러시아어 | русский러시아어 | ru |
| 키냐르완다어 | Kinyarwanda르완다어 | rw |
| 산스크리트어 | संस्कृत산스크리트어 | sa |
| 사하어 | сахаsah | sah |
| 사미어(북부) | davvisámegiella북부 사미어 | se |
| 신할라어 | සිංහල신할라어 | si |
| 슬로바키아어 | slovenčina슬로바키아어 | sk |
| 슬로베니아어 | slovenski슬로베니아어 | sl |
| 사미어(남부) | åarjelsaemiengielesma | sma |
| 사미어(룰레) | julevusámegiellasmj | smj |
| 사미어(이나리) | sämikielâsmn | smn |
| 사미어(콜트) | sääʹmǩiõllsms | sms |
| 알바니아어 | shqip알바니아어 | sq |
| 세르비아어 | srpski세르비아어/српски세르비아어 | sr |
| 세소토어 | Sesotho소토어 | st |
| 스웨덴어 | svenska스웨덴어 | sv |
| 스와힐리어 | Kiswahili스와힐리어 | sw |
| 시리아어 | ܣܘܪܝܝܐsyc | syc |
| 타밀어 | தமிழ்타밀어 | ta |
| 텔루구어 | తెలుగు텔루구어 | te |
| 타지크어 | Тоҷикӣ타지크어 | tg |
| 태국어 | ไทย태국어 | th |
| 투르크멘어 | türkmençe투르크멘어 | tk |
| 츠와나어 | Setswana츠와나어 | tn |
| 튀르키예어 | Türkçe튀르키예어 | tr |
| 타타르어 | Татарча타타르어 | tt |
| 타마지트어 | Tamazighttzm | tzm |
| 위구르어 | ئۇيغۇرچە위구르어 | ug |
| 우크라이나어 | українська우크라이나어 | uk |
| 우르두어 | اُردو우르두어 | ur |
| 우즈베크어 | Uzbek우즈베크어/Ўзбек우즈베크어 | uz |
| 베트남어 | Tiếng Việt베트남어 | vi |
| 왈로프어 | Wolof월로프어 | wo |
| 코사어 | isiXhosa코사어 | xh |
| 요루바어 | Yoruba요루바어 | yo |
| 중국어 | 中文zh-Hani | zh |
| 줄루어 | isiZulu줄루어 | zu |
이 표는 전체 언어 하위 태그의 일부(약 2%)만 나타내며, 전체 정보는 언어 하위 태그 레지스트리를 직접 참조해야 한다.
4.2. 복잡한 언어 태그
다음은 BCP47에서 발췌한 내용이다.
* language영어 하위 태그만:
* de영어
* ja영어
* i-enochian영어
* language영어-script영어:
* zh-Hant영어
* zh-Hans영어
* sr-Cyrl영어
* sr-Latn영어
* language영어-script영어-region영어:
* zh-Hans-CN영어
* sr-Latn-CS영어
* language영어-variant영어:
* sl-nedis영어
* language영어-region영어-variant영어:
* de-CH-1901영어
* sl-IT-nedis영어
* language영어-script영어-region영어-variant영어:
* sl-Latn-IT-nedis영어
* language영어-region영어:
* en-US영어
* es-419영어
5. 다른 표준과의 관계
IETF 언어 태그는 ISO나 UN의 표준을 일부 따르지만, 완전히 종속되지는 않는다. 시간이 지나면서 언어 태그의 의미가 변할 수 있기 때문이다.
ISO 639, ISO 15924, ISO 3166, UN M49에서 코드가 삭제되더라도, 이미 할당된 IETF 언어 하위 태그는 유효하게 유지된다. 심지어 해당 표준에서 코드가 다른 의미로 재사용되더라도, IETF 언어 하위 태그는 원래 의미를 유지한다. 이러한 안정성은 RFC 4646에서 도입되었다.
5.1. ISO 639
ISO 639는 언어 코드에 대한 국제 표준이다. BCP 47은 ISO 639-1 (2자 코드), ISO 639-2 (3자 코드), ISO 639-3 (3자 코드), 그리고 ISO 639-5 (언어 집합 코드)를 사용한다.
RFC 5645와 RFC 5646은 이미 레지스트리에 존재하지 않는 모든 언어에 대해 ISO 639-3 코드에 해당하는 기본 언어 하위 태그를 추가하였다. 또한, 특정 매크로 언어에 포함된 언어에 대한 코드는 확장 언어 하위 태그로 등록되었다.
ISO 639-5는 ISO 639-2에서 처음 인코딩된 방식과 다른 방식으로 알파-3 코드를 사용하여 언어 컬렉션을 정의한다. 특히, 언어 컬렉션은 이제 모두 ISO 639-5에서 배타적이지 않고 포괄적으로 정의된다.
BCP 47은 언어 컬렉션에 대한 하위 태그를 식별하기 위해 "범위" 속성을 정의한다. 그러나 어떤 컬렉션도 포괄적 또는 배타적으로 정의하지 않으며, ISO 639-5 그룹화 유형 속성을 사용하지 않는다.
반대로, ISO 639-3과 언어 하위 태그 레지스트리 모두에서 개별 언어의 매크로 언어 내 분류가 표준화되어 있다.
5.2. ISO 15924
ISO 15924는 문자 체계 코드에 대한 국제 표준이다. BCP 47은 ISO 15924의 4자 코드를 문자 체계 하위 태그로 사용한다.
문자 체계 하위 태그는 RFC 4646이 발표되었을 때 처음 언어 하위 태그 레지스트리에 추가되었으며, 이는 ISO 15924에 정의된 코드 목록에서 가져온 것이다. 문자 체계 하위 태그는 기본 및 확장 언어 하위 태그 뒤에, 그리고 지역 및 변형 하위 태그를 포함한 다른 유형의 하위 태그 앞에 언어 태그에 인코딩된다.
일부 기본 언어 하위 태그는 "Suppress-Script"라는 속성으로 정의되어 있는데, 이는 다른 스크립트로 작성될 수 있더라도 일반적으로 해당 언어에 대해 단일 스크립트가 기본적으로 가정될 수 있는 경우를 나타낸다. 이 경우, 성공적인 일치 가능성을 높이기 위해 스크립트 하위 태그를 생략하는 것이 좋다. 필요한 경우 다른 스크립트 하위 태그를 추가하여 구별할 수 있다. 예를 들어, 이디시어의 경우 히브리 문자 하위 태그가 가정되므로 대부분의 상황에서 yi-Hebr보다 yi가 선호된다.
ISO 15924에는 유니코드 및 ISO/IEC 10646 내에서 통합된 스크립트 변형에 대한 일부 코드(예: 중국어 간체 및 번체에 대한 Hans 및 Hant)가 포함되어 있다. 이러한 스크립트 변형은 주로 서지 목적으로 인코딩되지만 언어학적 관점에서는 항상 중요하지는 않다(예: 유니코드 및 ISO/IEC 10646에서 일반 라틴 문자로 주로 인코딩되는 라틴 스크립트의 프락투어 및 게일 변형에 대한 Latf 및 Latg 스크립트 코드). 때때로 언어 태그에서 문자의 다른 분석, 발음 구별 기호 및 이중/삼중 자음 클러스터(digraphs/trigraphs) 또는 대소문자 규칙의 차이와 함께, 철자법 또는 의미론적 차이를 드러내는 데 유용할 수 있다.
5.3. ISO 3166
ISO 3166-1에서 할당되거나 "예외적으로 예약된" 코드에 기반한 두 글자 지역 하위 태그가 사용된다. ISO 3166 유지 관리 기관이 이전에 다른 국가에 할당되었던 코드를 재할당하는 경우, 해당 코드에 해당하는 기존 BCP 47 하위 태그는 그 의미를 유지하고, 새로운 국가에 대한 UN M.49를 기반으로 하는 새로운 지역 하위 태그가 등록된다. UN M.49는 남아메리카의 `005`와 같은 지리적 지역에 대한 숫자 지역 하위 태그의 소스이기도 하다. 경제 지역에 대한 UN M.49 코드는 허용되지 않는다.
지역 하위 태그는 특정 지역에서 사용되는 언어의 변형을 지정하는 데 사용된다. 이는 변형이 본질적으로 지역적이며, 영국 영어 (en-GB)와 미국 영어 (en-US)를 구별하는 경우와 같이 관련된 국가를 식별하여 적절하게 포착할 수 있을 때 적합하다. 차이점이 간체와 번체와 같은 스크립트 또는 스크립트 변형인 경우, 지역 하위 태그 대신 스크립트 하위 태그로 표현해야 한다. 이 예에서 zh-CN/zh-SG/zh-MY 및 zh-TW/zh-HK/zh-MO 대신 zh-Hans 및 zh-Hant를 사용해야 한다.
지역적 변형으로 간주될 수 있는 언어에 대해 별도의 언어 하위 태그가 존재하는 경우, 언어-지역 조합 대신 더 구체적인 하위 태그를 사용하는 것이 더 좋다. 예를 들어, ar-DZ (아랍어 알제리)는 알제리 구어 아랍어의 arq로 더 잘 표현될 수 있다.
5.4. UN M.49
UN에서 사용하는 통계용 지역 코드이다. BCP 47은 UN M.49의 3자리 숫자 코드를 지역 하위 태그로 사용한다. 경제 지역에 대한 UN M.49 코드는 허용되지 않는다.
UN M.49는 남아메리카의 `005`와 같은 지리적 지역에 대한 숫자 지역 하위 태그의 소스이기도 하다.
6. 확장
확장 하위 태그('확장된 언어 하위 태그'와 혼동하지 않도록 주의)는 언어 식별에 필수적인 것은 아니지만, 언어 태그에 추가 정보를 제공한다. 확장의 한 가지 용도는 달력, 통화 등 로케일 정보를 담는 것이다.
확장 하위 태그는 '싱글톤'이라는 단일 문자(x 제외)로 시작해 하이픈으로 구분된 여러 문자열로 구성된다. 각 확장은 해당 확장의 데이터를 관리하는 등록 기관을 나타내는 자체 IETF RFC 문서에 설명되어 있다. IANA가 싱글톤 할당을 담당한다.
2014년 1월 기준으로 두 가지 확장이 할당되었다.