|
| 1 | +; ABNF derived from RFC 5646 section 2.1 |
| 2 | +Language-Tag = langtag ; normal language tags |
| 3 | + / privateuse ; private use tag |
| 4 | + / grandfathered ; grandfathered tags |
| 5 | +langtag = language |
| 6 | + ["-" script] |
| 7 | + ["-" region] |
| 8 | + *("-" variant) |
| 9 | + *("-" extension) |
| 10 | + ["-" privateuse] |
| 11 | + |
| 12 | +language = 2*3ALPHA ; shortest ISO 639 code |
| 13 | + ["-" extlang] ; sometimes followed by |
| 14 | + ; extended language subtags |
| 15 | + / 4ALPHA ; or reserved for future use |
| 16 | + / 5*8ALPHA ; or registered language subtag |
| 17 | + |
| 18 | +extlang = 3ALPHA ; selected ISO 639 codes |
| 19 | + *2("-" 3ALPHA) ; permanently reserved |
| 20 | + |
| 21 | +script = 4ALPHA ; ISO 15924 code |
| 22 | + |
| 23 | +region = 2ALPHA ; ISO 3166-1 code |
| 24 | + / 3digit ; UN M.49 code |
| 25 | + |
| 26 | +variant = 5*8alphanum ; registered variants |
| 27 | + / (digit 3alphanum) |
| 28 | + |
| 29 | +extension = singleton 1*("-" (2*8alphanum)) |
| 30 | + |
| 31 | + ; Single alphanumerics |
| 32 | + ; "x" reserved for private use |
| 33 | +singleton = digit ; 0 - 9 |
| 34 | + / %x41-57 ; A - W |
| 35 | + / %x59-5A ; Y - Z |
| 36 | + / %x61-77 ; a - w |
| 37 | + / %x79-7A ; y - z |
| 38 | + |
| 39 | +privateuse = "x" 1*("-" (1*8alphanum)) |
| 40 | + |
| 41 | +grandfathered = irregular ; non-redundant tags registered |
| 42 | + / regular ; during the RFC 3066 era |
| 43 | + |
| 44 | +irregular = "en-GB-oed" ; irregular tags do not match |
| 45 | + / "i-ami" ; the 'langtag' production and |
| 46 | + / "i-bnn" ; would not otherwise be |
| 47 | + / "i-default" ; considered 'well-formed' |
| 48 | + / "i-enochian" ; These tags are all valid, |
| 49 | + / "i-hak" ; but most are deprecated |
| 50 | + / "i-klingon" ; in favor of more modern |
| 51 | + / "i-lux" ; subtags or subtag |
| 52 | + / "i-mingo" ; combination |
| 53 | + / "i-navajo" |
| 54 | + / "i-pwn" |
| 55 | + / "i-tao" |
| 56 | + / "i-tay" |
| 57 | + / "i-tsu" |
| 58 | + / "sgn-BE-FR" |
| 59 | + / "sgn-BE-NL" |
| 60 | + / "sgn-CH-DE" |
| 61 | + |
| 62 | +regular = "art-lojban" ; these tags match the 'langtag' |
| 63 | + / "cel-gaulish" ; production, but their subtags |
| 64 | + / "no-bok" ; are not extended language |
| 65 | + / "no-nyn" ; or variant subtags: their meaning |
| 66 | + / "zh-guoyu" ; is defined by their registration |
| 67 | + / "zh-hakka" ; and all of these are deprecated |
| 68 | + / "zh-min" ; in favor of a more modern |
| 69 | + / "zh-min-nan" ; subtag or sequence of subtags |
| 70 | + / "zh-xiang" |
| 71 | + |
| 72 | +alphanum = (ALPHA / digit) ; letters and numbers |
0 commit comments