language: use compact tags
Change-Id: Iecd38d92cfbd38d84067d1e7184e996f3eab4712
Reviewed-on: https://go-review.googlesource.com/95828
Run-TryBot: Marcel van Lohuizen <mpvl@golang.org>
Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/internal/colltab/colltab_test.go b/internal/colltab/colltab_test.go
index c403ac3..36943f0 100644
--- a/internal/colltab/colltab_test.go
+++ b/internal/colltab/colltab_test.go
@@ -57,8 +57,10 @@
{0, language.MustParse("und-Jpan-BR")}, // Infers "ja", so no match.
{0, language.MustParse("zu")}, // No match past index.
} {
- if x := MatchLang(tc.t, tags); x != tc.x {
- t.Errorf("%d: MatchLang(%q, tags) = %d; want %d", i, tc.t, x, tc.x)
- }
+ t.Run(tc.t.String(), func(t *testing.T) {
+ if x := MatchLang(tc.t, tags); x != tc.x {
+ t.Errorf("%d: MatchLang(%q, tags) = %d; want %d", i, tc.t, x, tc.x)
+ }
+ })
}
}
diff --git a/language/coverage.go b/language/coverage.go
index 3e7377d..e99fd34 100644
--- a/language/coverage.go
+++ b/language/coverage.go
@@ -124,7 +124,7 @@
}
a := make([]Base, len(tags))
for i, t := range tags {
- a[i] = Base{language.Language(t.tag.LangID)}
+ a[i] = Base{language.Language(t.lang())}
}
sort.Sort(bases(a))
k := 0
diff --git a/language/gen.go b/language/gen.go
index 62bf6e4..30c8c97 100644
--- a/language/gen.go
+++ b/language/gen.go
@@ -97,16 +97,7 @@
// TODO: region inclusion data will probably not be use used in future matchers.
var langConsts = []string{
- "af", "am", "ar", "az", "bg", "bn", "ca", "cs", "da", "de", "el", "en", "es",
- "et", "fa", "fi", "fil", "fr", "gu", "he", "hi", "hr", "hu", "hy", "id", "is",
- "it", "ja", "ka", "kk", "km", "kn", "ko", "ky", "lo", "lt", "lv", "mk", "ml",
- "mn", "mo", "mr", "ms", "mul", "my", "nb", "ne", "nl", "no", "pa", "pl", "pt",
- "ro", "ru", "sh", "si", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th",
- "tl", "tn", "tr", "uk", "ur", "uz", "vi", "zh", "zu",
-
- // constants for grandfathered tags (if not already defined)
- "jbo", "ami", "bnn", "hak", "tlh", "lb", "nv", "pwn", "tao", "tay", "tsu",
- "nn", "sfb", "vgt", "sgg", "cmn", "nan", "hsn",
+ "de", "en", "fr", "it", "mo", "no", "nb", "pt", "sh", "mul", "und",
}
var scriptConsts = []string{
diff --git a/language/gen_index.go b/language/gen_index.go
index d476874..349bbf9 100644
--- a/language/gen_index.go
+++ b/language/gen_index.go
@@ -104,5 +104,5 @@
}
func ident(s string) string {
- return "x" + strings.Replace(s, "-", "", -1)
+ return strings.Replace(s, "-", "", -1) + "Index"
}
diff --git a/language/language.go b/language/language.go
index 94ec8f1..74b939d 100644
--- a/language/language.go
+++ b/language/language.go
@@ -19,12 +19,66 @@
// specific language or locale. All language tag values are guaranteed to be
// well-formed.
type Tag struct {
- tag language.Tag
+ language compactID
+ locale compactID
+ full fullTag // always a language.Tag for now.
}
-func (t *Tag) lang() language.Language { return t.tag.LangID }
-func (t *Tag) region() language.Region { return t.tag.RegionID }
-func (t *Tag) script() language.Script { return t.tag.ScriptID }
+type fullTag interface {
+ IsRoot() bool
+ Parent() language.Tag
+}
+
+func makeTag(t language.Tag) (tag Tag) {
+ if region := t.TypeForKey("rg"); len(region) > 2 {
+ if r, err := language.ParseRegion(region[:2]); err == nil {
+ tFull := t
+ t, _ = t.SetTypeForKey("rg", "")
+ var exact1, exact2 bool
+ tag.language, exact1 = compactIndex(t)
+ t.RegionID = r
+ tag.locale, exact2 = compactIndex(t)
+ if !exact1 || !exact2 {
+ tag.full = tFull
+ }
+ return tag
+ }
+ }
+ lang, ok := compactIndex(t)
+ tag.language = lang
+ tag.locale = lang
+ if !ok {
+ tag.full = t
+ }
+ return tag
+}
+
+func (t *Tag) tag() language.Tag {
+ if t.full != nil {
+ return t.full.(language.Tag)
+ }
+ tag := t.language.tag()
+ if t.language != t.locale {
+ loc := t.locale.tag()
+ tag.SetTypeForKey("rg", strings.ToLower(loc.RegionID.String())+"zzzz")
+ }
+ return tag
+}
+
+func (t *Tag) mayHaveVariants() bool {
+ return t.full != nil || int(t.language) >= len(coreTags)
+}
+
+func (t *Tag) mayHaveExtensions() bool {
+ return t.full != nil ||
+ int(t.language) >= len(coreTags) ||
+ t.language != t.locale
+}
+
+// TODO: improve performance.
+func (t *Tag) lang() language.Language { return t.tag().LangID }
+func (t *Tag) region() language.Region { return t.tag().RegionID }
+func (t *Tag) script() language.Script { return t.tag().ScriptID }
// Make is a convenience wrapper for Parse that omits the error.
// In case of an error, a sensible default is returned.
@@ -42,17 +96,16 @@
// Raw returns the raw base language, script and region, without making an
// attempt to infer their values.
func (t Tag) Raw() (b Base, s Script, r Region) {
- return Base{t.tag.LangID}, Script{t.tag.ScriptID}, Region{t.tag.RegionID}
+ tt := t.tag()
+ return Base{tt.LangID}, Script{tt.ScriptID}, Region{tt.RegionID}
}
// IsRoot returns true if t is equal to language "und".
func (t Tag) IsRoot() bool {
- return t.tag.IsRoot()
-}
-
-// private reports whether the Tag consists solely of a private use tag.
-func (t Tag) private() bool {
- return t.tag.IsPrivateUse()
+ if t.full != nil {
+ return t.full.IsRoot()
+ }
+ return t.language == _und
}
// CanonType can be used to enable or disable various types of canonicalization.
@@ -178,11 +231,20 @@
// Canonicalize returns the canonicalized equivalent of the tag.
func (c CanonType) Canonicalize(t Tag) (Tag, error) {
- tt, changed := canonicalize(c, t.tag)
- if changed {
- tt.RemakeString()
+ // First try fast path.
+ if t.full == nil {
+ if _, changed := canonicalize(c, t.language.tag()); !changed {
+ return t, nil
+ }
}
- return Tag{tt}, nil
+ // It is unlikely that one will canonicalize a tag after matching. So do
+ // a slow but simple approach here.
+ if tag, changed := canonicalize(c, t.tag()); changed {
+ tag.RemakeString()
+ return makeTag(tag), nil
+ }
+ return t, nil
+
}
// Confidence indicates the level of certainty for a given return value.
@@ -207,17 +269,20 @@
// String returns the canonical string representation of the language tag.
func (t Tag) String() string {
- return t.tag.String()
+ return t.tag().String()
}
// MarshalText implements encoding.TextMarshaler.
func (t Tag) MarshalText() (text []byte, err error) {
- return t.tag.MarshalText()
+ return t.tag().MarshalText()
}
// UnmarshalText implements encoding.TextUnmarshaler.
func (t *Tag) UnmarshalText(text []byte) error {
- return t.tag.UnmarshalText(text)
+ var tag language.Tag
+ err := tag.UnmarshalText(text)
+ *t = makeTag(tag)
+ return err
}
// Base returns the base language of the language tag. If the base language is
@@ -227,7 +292,7 @@
if b := t.lang(); b != 0 {
return Base{b}, Exact
}
- tt := t.tag
+ tt := t.tag()
c := High
if tt.ScriptID == 0 && !tt.RegionID.IsCountry() {
c = Low
@@ -253,10 +318,10 @@
// in the past. Also, the script that is commonly used may change over time.
// It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change.
func (t Tag) Script() (Script, Confidence) {
- if t.script() != 0 {
- return Script{t.script()}, Exact
+ if scr := t.script(); scr != 0 {
+ return Script{scr}, Exact
}
- tt := t.tag
+ tt := t.tag()
sc, c := language.Script(_Zzzz), No
if scr := tt.LangID.SuppressScript(); scr != 0 {
// Note: it is not always the case that a language with a suppress
@@ -271,8 +336,8 @@
sc, c = tag.ScriptID, Low
}
} else {
- t, _ = (Deprecated | Macro).Canonicalize(t)
- if tag, err := t.tag.Maximize(); err == nil && tag.ScriptID != sc {
+ tt, _ = canonicalize(Deprecated|Macro, tt)
+ if tag, err := tt.Maximize(); err == nil && tag.ScriptID != sc {
sc, c = tag.ScriptID, Low
}
}
@@ -283,15 +348,15 @@
// infer a most likely candidate from the context.
// It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change.
func (t Tag) Region() (Region, Confidence) {
- if t.region() != 0 {
- return Region{t.region()}, Exact
+ if r := t.region(); r != 0 {
+ return Region{r}, Exact
}
- tt := t.tag
+ tt := t.tag()
if tt, err := tt.Maximize(); err == nil {
return Region{tt.RegionID}, Low // TODO: differentiate between high and low.
}
- t, _ = (Deprecated | Macro).Canonicalize(t)
- if tag, err := t.tag.Maximize(); err == nil {
+ tt, _ = canonicalize(Deprecated|Macro, tt)
+ if tag, err := tt.Maximize(); err == nil {
return Region{tag.RegionID}, Low
}
return Region{_ZZ}, No // TODO: return world instead of undetermined?
@@ -300,8 +365,11 @@
// Variants returns the variants specified explicitly for this language tag.
// or nil if no variant was specified.
func (t Tag) Variants() []Variant {
+ if !t.mayHaveVariants() {
+ return nil
+ }
v := []Variant{}
- x, str := "", t.tag.Variants()
+ x, str := "", t.tag().Variants()
for str != "" {
x, str = nextToken(str)
v = append(v, Variant{x})
@@ -313,7 +381,19 @@
// specific language are substituted with fields from the parent language.
// The parent for a language may change for newer versions of CLDR.
func (t Tag) Parent() Tag {
- return Tag{t.tag.Parent()}
+ if t.full != nil {
+ return makeTag(t.full.Parent())
+ }
+ if t.language != t.locale {
+ // Simulate stripping -u-rg-xxxxxx
+ return Tag{language: t.language, locale: t.language}
+ }
+ // TODO: use parent lookup table once cycle from internal package is
+ // removed. Probably by internalizing the table and declaring this fast
+ // enough.
+ // lang := compactID(internal.Parent(uint16(t.language)))
+ lang, _ := compactIndex(t.language.tag().Parent())
+ return Tag{language: lang, locale: lang}
}
// returns token t and the rest of the string.
@@ -361,14 +441,20 @@
// false for ok if t does not have the requested extension. The returned
// extension will be invalid in this case.
func (t Tag) Extension(x byte) (ext Extension, ok bool) {
- e, ok := t.tag.Extension(x)
+ if !t.mayHaveExtensions() {
+ return Extension{}, false
+ }
+ e, ok := t.tag().Extension(x)
return Extension{e}, ok
}
// Extensions returns all extensions of t.
func (t Tag) Extensions() []Extension {
+ if !t.mayHaveExtensions() {
+ return nil
+ }
e := []Extension{}
- for _, ext := range t.tag.Extensions() {
+ for _, ext := range t.tag().Extensions() {
e = append(e, Extension{ext})
}
return e
@@ -379,7 +465,12 @@
// http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
// TypeForKey will traverse the inheritance chain to get the correct value.
func (t Tag) TypeForKey(key string) string {
- return t.tag.TypeForKey(key)
+ if !t.mayHaveExtensions() {
+ if key != "rg" && key != "va" {
+ return ""
+ }
+ }
+ return t.tag().TypeForKey(key)
}
// SetTypeForKey returns a new Tag with the key set to type, where key and type
@@ -387,8 +478,8 @@
// http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
// An empty value removes an existing pair with the same key.
func (t Tag) SetTypeForKey(key, value string) (Tag, error) {
- tt, err := t.tag.SetTypeForKey(key, value)
- return Tag{tt}, err
+ tt, err := t.tag().SetTypeForKey(key, value)
+ return makeTag(tt), err
}
// CompactIndex returns an index, where 0 <= index < NumCompactTags, for tags
@@ -397,6 +488,10 @@
// index, exact will be false and the compact index will be returned for the
// first match after repeatedly taking the Parent of t.
func CompactIndex(t Tag) (index int, exact bool) {
+ return int(t.locale), t.language == t.locale && t.full == nil
+}
+
+func compactIndex(t language.Tag) (index compactID, exact bool) {
// TODO: perhaps give more frequent tags a lower index.
// TODO: we could make the indexes stable. This will excluded some
// possibilities for optimization, so don't do this quite yet.
@@ -404,16 +499,19 @@
b, s, r := t.Raw()
switch {
- case t.tag.HasString():
- if t.private() {
+ case t.HasString():
+ if t.IsPrivateUse() {
// We have no entries for user-defined tags.
return 0, false
}
hasExtra := false
- if t.tag.HasVariants() {
- if t.tag.HasExtensions() {
+ if t.HasVariants() {
+ if t.HasExtensions() {
+ build := language.Builder{}
+ build.SetTag(t)
+ build.Private, build.Ext = "", nil
exact = false
- t, _ = Raw.Compose(b, s, r, t.Variants())
+ t = build.Make()
}
hasExtra = true
} else if _, ok := t.Extension('u'); ok {
@@ -421,45 +519,49 @@
// Strip all but the 'va' entry.
old := t
variant := t.TypeForKey("va")
- t, _ = Raw.Compose(b, s, r)
+ t = language.Tag{LangID: b, ScriptID: s, RegionID: r}
if variant != "" {
t, _ = t.SetTypeForKey("va", variant)
hasExtra = true
}
exact = old == t
+ } else {
+ exact = false
}
if hasExtra {
// We have some variants.
for i, s := range specialTags {
- if s == t.tag {
- return i + len(coreTags), exact
+ if s == t {
+ return compactID(i + len(coreTags)), exact
}
}
exact = false
}
}
- if x, ok := getCoreIndex(t.tag); ok {
- return int(x), exact
+ if x, ok := getCoreIndex(t); ok {
+ return x, exact
}
exact = false
- if r.regionID != 0 && s.scriptID == 0 {
+ if r != 0 && s == 0 {
// Deal with cases where an extra script is inserted for the region.
- t, _ := t.tag.Maximize()
+ t, _ := t.Maximize()
if x, ok := getCoreIndex(t); ok {
- return int(x), exact
+ return x, exact
}
}
- for t = t.Parent(); t != Und; t = t.Parent() {
+ for t = t.Parent(); t != root; t = t.Parent() {
// No variants specified: just compare core components.
// The key has the form lllssrrr, where l, s, and r are nibbles for
// respectively the langID, scriptID, and regionID.
- if x, ok := getCoreIndex(t.tag); ok {
- return int(x), exact
+ if x, ok := getCoreIndex(t); ok {
+ return x, exact
}
}
- return int(0), exact
+ return 0, exact
}
+var root = language.Tag{}
+
// Base is an ISO 639 language code, used for encoding the base language
// of a language tag.
type Base struct {
diff --git a/language/language_test.go b/language/language_test.go
index 11c5dda..273f61f 100644
--- a/language/language_test.go
+++ b/language/language_test.go
@@ -32,7 +32,7 @@
}
func TestEquality(t *testing.T) {
- for i, tt := range parseTests()[48:49] {
+ for i, tt := range parseTests() {
s := tt.in
tag := Make(s)
t1 := Make(tag.String())
@@ -54,26 +54,26 @@
}{
// TODO: these values will change with each CLDR update. This issue
// will be solved if we decide to fix the indexes.
- {"und", xund, true},
- {"ca-ES-valencia", xcaESvalencia, true},
- {"ca-ES-valencia-u-va-posix", xcaESvalencia, false},
- {"ca-ES-valencia-u-co-phonebk", xcaESvalencia, false},
- {"ca-ES-valencia-u-co-phonebk-va-posix", xcaESvalencia, false},
+ {"und", undIndex, true},
+ {"ca-ES-valencia", caESvalenciaIndex, true},
+ {"ca-ES-valencia-u-va-posix", caESvalenciaIndex, false},
+ {"ca-ES-valencia-u-co-phonebk", caESvalenciaIndex, false},
+ {"ca-ES-valencia-u-co-phonebk-va-posix", caESvalenciaIndex, false},
{"x-klingon", 0, false},
- {"en-US", xenUS, true},
- {"en-US-u-va-posix", xenUSuvaposix, true},
- {"en", xen, true},
- {"en-u-co-phonebk", xen, false},
- {"en-001", xen001, true},
- {"zh-Hant-HK", xzhHantHK, true},
- {"zh-HK", xzhHantHK, false}, // maximized to zh-Hant-HK
- {"nl-Beng", 0, false}, // parent skips script
- {"nl-NO", xnl, false}, // region is ignored
- {"nl-Latn-NO", xnl, false},
- {"nl-Latn-NO-u-co-phonebk", xnl, false},
- {"nl-Latn-NO-valencia", xnl, false},
- {"nl-Latn-NO-oxendict", xnl, false},
- {"sh", xsh, true}, // From plural rules.
+ {"en-US", enUSIndex, true},
+ {"en-US-u-va-posix", enUSuvaposixIndex, true},
+ {"en", enIndex, true},
+ {"en-u-co-phonebk", enIndex, false},
+ {"en-001", en001Index, true},
+ {"zh-Hant-HK", zhHantHKIndex, true},
+ {"zh-HK", zhHantHKIndex, false}, // maximized to zh-Hant-HK
+ {"nl-Beng", 0, false}, // parent skips script
+ {"nl-NO", nlIndex, false}, // region is ignored
+ {"nl-Latn-NO", nlIndex, false},
+ {"nl-Latn-NO-u-co-phonebk", nlIndex, false},
+ {"nl-Latn-NO-valencia", nlIndex, false},
+ {"nl-Latn-NO-oxendict", nlIndex, false},
+ {"sh", shIndex, true}, // From plural rules.
}
for _, tt := range tests {
x, ok := CompactIndex(Raw.MustParse(tt.tag))
diff --git a/language/match.go b/language/match.go
index e4ad447..d84e972 100644
--- a/language/match.go
+++ b/language/match.go
@@ -105,23 +105,22 @@
// TODO: select first language tag based on script.
}
if w.RegionID != 0 && tt.RegionID != 0 && tt.RegionID.Contains(w.RegionID) {
- t, _ := Raw.Compose(Tag{tt}, Region{w.RegionID})
- tt = t.tag
+ tt.RegionID = w.RegionID
+ tt.RemakeString()
}
// Copy options from the user-provided tag into the result tag. This is hard
// to do after the fact, so we do it here.
// TODO: add in alternative variants to -u-va-.
// TODO: add preferred region to -u-rg-.
if e := w.Extensions(); len(e) > 0 {
- // TODO: improve performance.
- ext := make([]Extension, len(e))
- for _, ee := range e {
- ext = append(ext, Extension{ee})
+ b := language.Builder{}
+ b.SetTag(tt)
+ for _, e := range e {
+ b.AddExt(e)
}
- t, _ := Raw.Compose(Tag{tt}, ext)
- tt = t.tag
+ tt = b.Make()
}
- return Tag{tt}, index, c
+ return makeTag(tt), index, c
}
// ErrMissingLikelyTagsData indicates no information was available
@@ -375,16 +374,18 @@
// Add supported languages to the index. Add exact matches first to give
// them precedence.
for i, tag := range supported {
- pair, _ := makeHaveTag(tag.tag, i)
- m.header(tag.tag.LangID).addIfNew(pair, true)
+ tt := tag.tag()
+ pair, _ := makeHaveTag(tt, i)
+ m.header(tt.LangID).addIfNew(pair, true)
m.supported = append(m.supported, &pair)
}
- m.default_ = m.header(supported[0].tag.LangID).haveTags[0]
+ m.default_ = m.header(supported[0].lang()).haveTags[0]
// Keep these in two different loops to support the case that two equivalent
// languages are distinguished, such as iw and he.
for i, tag := range supported {
- pair, max := makeHaveTag(tag.tag, i)
- if max != tag.tag.LangID {
+ tt := tag.tag()
+ pair, max := makeHaveTag(tt, i)
+ if max != tt.LangID {
m.header(max).addIfNew(pair, true)
}
}
@@ -446,7 +447,7 @@
func (m *matcher) getBest(want ...Tag) (got *haveTag, orig language.Tag, c Confidence) {
best := bestMatch{}
for i, ww := range want {
- w := ww.tag
+ w := ww.tag()
var max language.Tag
// Check for exact match first.
h := m.index[w.LangID]
@@ -486,7 +487,7 @@
}
pin := true
for _, t := range want[i+1:] {
- if w.LangID == t.tag.LangID {
+ if w.LangID == t.lang() {
pin = false
break
}
@@ -506,7 +507,7 @@
}
if best.conf <= No {
if len(want) != 0 {
- return nil, want[0].tag, No
+ return nil, want[0].tag(), No
}
return nil, language.Tag{}, No
}
diff --git a/language/match_test.go b/language/match_test.go
index fd36983..3bfefff 100644
--- a/language/match_test.go
+++ b/language/match_test.go
@@ -172,7 +172,7 @@
t.Errorf("scripts differ: %q vs %q", aScript, bScript)
continue
}
- d, _ := regionGroupDist(a.tag.RegionID, b.tag.RegionID, aScript.scriptID, a.tag.LangID)
+ d, _ := regionGroupDist(a.region(), b.region(), aScript.scriptID, a.lang())
if d != tc.distance {
t.Errorf("got %q; want %q", d, tc.distance)
}
@@ -189,7 +189,8 @@
"es-419": true,
}
for str, want := range testCases {
- tag := Make(str).tag
+ tt := Make(str)
+ tag := tt.tag()
got := isParadigmLocale(tag.LangID, tag.RegionID)
if got != want {
t.Errorf("isPL(%q) = %v; want %v", str, got, want)
diff --git a/language/parse.go b/language/parse.go
index b68c02a..78122f6 100644
--- a/language/parse.go
+++ b/language/parse.go
@@ -45,13 +45,13 @@
func (c CanonType) Parse(s string) (t Tag, err error) {
tt, err := language.Parse(s)
if err != nil {
- return Tag{tt}, err
+ return makeTag(tt), err
}
tt, changed := canonicalize(c, tt)
if changed {
tt.RemakeString()
}
- return Tag{tt}, err
+ return makeTag(tt), err
}
// Compose creates a Tag from individual parts, which may be of type Tag, Base,
@@ -82,7 +82,7 @@
return und, err
}
b.Tag, _ = canonicalize(c, b.Tag)
- return Tag{b.Make()}, err
+ return makeTag(b.Make()), err
}
var errInvalidArgument = errors.New("invalid Extension or Variant")
@@ -104,18 +104,7 @@
for _, x := range part {
switch v := x.(type) {
case Tag:
- b.Tag.LangID = v.lang()
- b.Tag.RegionID = v.region()
- b.Tag.ScriptID = v.script()
- // TODO: optimize
- b.Variant = b.Variant[:0]
- for _, vr := range v.Variants() {
- b.Variant = append(b.Variant, vr.String())
- }
- b.Ext, b.Private = b.Ext[:0], ""
- for _, e := range v.Extensions() {
- b.AddExt(e.String())
- }
+ b.SetTag(v.tag())
case Base:
b.Tag.LangID = v.langID
case Script:
@@ -173,7 +162,7 @@
if !ok {
return nil, nil, err
}
- t = Tag{tag: language.Tag{LangID: id}}
+ t = makeTag(language.Tag{LangID: id})
}
// Scan the optional weight.
diff --git a/language/parse_test.go b/language/parse_test.go
index fe6bc0d..0982d92 100644
--- a/language/parse_test.go
+++ b/language/parse_test.go
@@ -179,14 +179,14 @@
if r, _ := language.ParseRegion(tt.region); r != tag.region() {
t.Errorf("%d: region was %q; want %q", i, tag.region(), r)
}
- v := tag.tag.Variants()
+ v := tag.tag().Variants()
if v != "" {
v = v[1:]
}
if v != tt.variants {
t.Errorf("%d: variants was %q; want %q", i, v, tt.variants)
}
- if e := strings.Join(tag.tag.Extensions(), "-"); e != tt.ext {
+ if e := strings.Join(tag.tag().Extensions(), "-"); e != tt.ext {
t.Errorf("%d: extensions were %q; want %q", i, e, tt.ext)
}
}
diff --git a/language/tables.go b/language/tables.go
index bc3ba6d..52f4af4 100644
--- a/language/tables.go
+++ b/language/tables.go
@@ -8,98 +8,17 @@
const CLDRVersion = "32"
const (
- _af = 22
- _am = 39
- _ar = 58
- _az = 88
- _bg = 126
- _bn = 165
- _ca = 215
- _cs = 250
- _da = 257
_de = 269
- _el = 310
_en = 313
- _es = 318
- _et = 320
- _fa = 328
- _fi = 337
- _fil = 339
_fr = 350
- _gu = 420
- _he = 444
- _hi = 446
- _hr = 465
- _hu = 469
- _hy = 471
- _id = 481
- _is = 504
_it = 505
- _ja = 512
- _ka = 528
- _kk = 578
- _km = 586
- _kn = 593
- _ko = 596
- _ky = 650
- _lo = 696
- _lt = 704
- _lv = 711
- _mk = 767
- _ml = 772
- _mn = 779
_mo = 784
- _mr = 795
- _ms = 799
- _mul = 806
- _my = 817
- _nb = 839
- _ne = 849
- _nl = 871
_no = 879
- _pa = 925
- _pl = 947
+ _nb = 839
_pt = 960
- _ro = 988
- _ru = 994
_sh = 1031
- _si = 1036
- _sk = 1042
- _sl = 1046
- _sq = 1073
- _sr = 1074
- _sv = 1092
- _sw = 1093
- _ta = 1104
- _te = 1121
- _th = 1131
- _tl = 1146
- _tn = 1152
- _tr = 1162
- _uk = 1198
- _ur = 1204
- _uz = 1212
- _vi = 1219
- _zh = 1321
- _zu = 1327
- _jbo = 515
- _ami = 1650
- _bnn = 2357
- _hak = 438
- _tlh = 14467
- _lb = 661
- _nv = 899
- _pwn = 12055
- _tao = 14188
- _tay = 14198
- _tsu = 14662
- _nn = 874
- _sfb = 13629
- _vgt = 15701
- _sgg = 13660
- _cmn = 3007
- _nan = 835
- _hsn = 467
+ _mul = 806
+ _und = 0
)
const (
_001 = 1
@@ -134,781 +53,781 @@
// NumCompactTags-1.
const NumCompactTags = 775
const (
- xund compactID = 0
- xaf compactID = 1
- xafNA compactID = 2
- xafZA compactID = 3
- xagq compactID = 4
- xagqCM compactID = 5
- xak compactID = 6
- xakGH compactID = 7
- xam compactID = 8
- xamET compactID = 9
- xar compactID = 10
- xar001 compactID = 11
- xarAE compactID = 12
- xarBH compactID = 13
- xarDJ compactID = 14
- xarDZ compactID = 15
- xarEG compactID = 16
- xarEH compactID = 17
- xarER compactID = 18
- xarIL compactID = 19
- xarIQ compactID = 20
- xarJO compactID = 21
- xarKM compactID = 22
- xarKW compactID = 23
- xarLB compactID = 24
- xarLY compactID = 25
- xarMA compactID = 26
- xarMR compactID = 27
- xarOM compactID = 28
- xarPS compactID = 29
- xarQA compactID = 30
- xarSA compactID = 31
- xarSD compactID = 32
- xarSO compactID = 33
- xarSS compactID = 34
- xarSY compactID = 35
- xarTD compactID = 36
- xarTN compactID = 37
- xarYE compactID = 38
- xars compactID = 39
- xas compactID = 40
- xasIN compactID = 41
- xasa compactID = 42
- xasaTZ compactID = 43
- xast compactID = 44
- xastES compactID = 45
- xaz compactID = 46
- xazCyrl compactID = 47
- xazCyrlAZ compactID = 48
- xazLatn compactID = 49
- xazLatnAZ compactID = 50
- xbas compactID = 51
- xbasCM compactID = 52
- xbe compactID = 53
- xbeBY compactID = 54
- xbem compactID = 55
- xbemZM compactID = 56
- xbez compactID = 57
- xbezTZ compactID = 58
- xbg compactID = 59
- xbgBG compactID = 60
- xbh compactID = 61
- xbm compactID = 62
- xbmML compactID = 63
- xbn compactID = 64
- xbnBD compactID = 65
- xbnIN compactID = 66
- xbo compactID = 67
- xboCN compactID = 68
- xboIN compactID = 69
- xbr compactID = 70
- xbrFR compactID = 71
- xbrx compactID = 72
- xbrxIN compactID = 73
- xbs compactID = 74
- xbsCyrl compactID = 75
- xbsCyrlBA compactID = 76
- xbsLatn compactID = 77
- xbsLatnBA compactID = 78
- xca compactID = 79
- xcaAD compactID = 80
- xcaES compactID = 81
- xcaFR compactID = 82
- xcaIT compactID = 83
- xccp compactID = 84
- xccpBD compactID = 85
- xccpIN compactID = 86
- xce compactID = 87
- xceRU compactID = 88
- xcgg compactID = 89
- xcggUG compactID = 90
- xchr compactID = 91
- xchrUS compactID = 92
- xckb compactID = 93
- xckbIQ compactID = 94
- xckbIR compactID = 95
- xcs compactID = 96
- xcsCZ compactID = 97
- xcu compactID = 98
- xcuRU compactID = 99
- xcy compactID = 100
- xcyGB compactID = 101
- xda compactID = 102
- xdaDK compactID = 103
- xdaGL compactID = 104
- xdav compactID = 105
- xdavKE compactID = 106
- xde compactID = 107
- xdeAT compactID = 108
- xdeBE compactID = 109
- xdeCH compactID = 110
- xdeDE compactID = 111
- xdeIT compactID = 112
- xdeLI compactID = 113
- xdeLU compactID = 114
- xdje compactID = 115
- xdjeNE compactID = 116
- xdsb compactID = 117
- xdsbDE compactID = 118
- xdua compactID = 119
- xduaCM compactID = 120
- xdv compactID = 121
- xdyo compactID = 122
- xdyoSN compactID = 123
- xdz compactID = 124
- xdzBT compactID = 125
- xebu compactID = 126
- xebuKE compactID = 127
- xee compactID = 128
- xeeGH compactID = 129
- xeeTG compactID = 130
- xel compactID = 131
- xelCY compactID = 132
- xelGR compactID = 133
- xen compactID = 134
- xen001 compactID = 135
- xen150 compactID = 136
- xenAG compactID = 137
- xenAI compactID = 138
- xenAS compactID = 139
- xenAT compactID = 140
- xenAU compactID = 141
- xenBB compactID = 142
- xenBE compactID = 143
- xenBI compactID = 144
- xenBM compactID = 145
- xenBS compactID = 146
- xenBW compactID = 147
- xenBZ compactID = 148
- xenCA compactID = 149
- xenCC compactID = 150
- xenCH compactID = 151
- xenCK compactID = 152
- xenCM compactID = 153
- xenCX compactID = 154
- xenCY compactID = 155
- xenDE compactID = 156
- xenDG compactID = 157
- xenDK compactID = 158
- xenDM compactID = 159
- xenER compactID = 160
- xenFI compactID = 161
- xenFJ compactID = 162
- xenFK compactID = 163
- xenFM compactID = 164
- xenGB compactID = 165
- xenGD compactID = 166
- xenGG compactID = 167
- xenGH compactID = 168
- xenGI compactID = 169
- xenGM compactID = 170
- xenGU compactID = 171
- xenGY compactID = 172
- xenHK compactID = 173
- xenIE compactID = 174
- xenIL compactID = 175
- xenIM compactID = 176
- xenIN compactID = 177
- xenIO compactID = 178
- xenJE compactID = 179
- xenJM compactID = 180
- xenKE compactID = 181
- xenKI compactID = 182
- xenKN compactID = 183
- xenKY compactID = 184
- xenLC compactID = 185
- xenLR compactID = 186
- xenLS compactID = 187
- xenMG compactID = 188
- xenMH compactID = 189
- xenMO compactID = 190
- xenMP compactID = 191
- xenMS compactID = 192
- xenMT compactID = 193
- xenMU compactID = 194
- xenMW compactID = 195
- xenMY compactID = 196
- xenNA compactID = 197
- xenNF compactID = 198
- xenNG compactID = 199
- xenNL compactID = 200
- xenNR compactID = 201
- xenNU compactID = 202
- xenNZ compactID = 203
- xenPG compactID = 204
- xenPH compactID = 205
- xenPK compactID = 206
- xenPN compactID = 207
- xenPR compactID = 208
- xenPW compactID = 209
- xenRW compactID = 210
- xenSB compactID = 211
- xenSC compactID = 212
- xenSD compactID = 213
- xenSE compactID = 214
- xenSG compactID = 215
- xenSH compactID = 216
- xenSI compactID = 217
- xenSL compactID = 218
- xenSS compactID = 219
- xenSX compactID = 220
- xenSZ compactID = 221
- xenTC compactID = 222
- xenTK compactID = 223
- xenTO compactID = 224
- xenTT compactID = 225
- xenTV compactID = 226
- xenTZ compactID = 227
- xenUG compactID = 228
- xenUM compactID = 229
- xenUS compactID = 230
- xenVC compactID = 231
- xenVG compactID = 232
- xenVI compactID = 233
- xenVU compactID = 234
- xenWS compactID = 235
- xenZA compactID = 236
- xenZM compactID = 237
- xenZW compactID = 238
- xeo compactID = 239
- xeo001 compactID = 240
- xes compactID = 241
- xes419 compactID = 242
- xesAR compactID = 243
- xesBO compactID = 244
- xesBR compactID = 245
- xesBZ compactID = 246
- xesCL compactID = 247
- xesCO compactID = 248
- xesCR compactID = 249
- xesCU compactID = 250
- xesDO compactID = 251
- xesEA compactID = 252
- xesEC compactID = 253
- xesES compactID = 254
- xesGQ compactID = 255
- xesGT compactID = 256
- xesHN compactID = 257
- xesIC compactID = 258
- xesMX compactID = 259
- xesNI compactID = 260
- xesPA compactID = 261
- xesPE compactID = 262
- xesPH compactID = 263
- xesPR compactID = 264
- xesPY compactID = 265
- xesSV compactID = 266
- xesUS compactID = 267
- xesUY compactID = 268
- xesVE compactID = 269
- xet compactID = 270
- xetEE compactID = 271
- xeu compactID = 272
- xeuES compactID = 273
- xewo compactID = 274
- xewoCM compactID = 275
- xfa compactID = 276
- xfaAF compactID = 277
- xfaIR compactID = 278
- xff compactID = 279
- xffCM compactID = 280
- xffGN compactID = 281
- xffMR compactID = 282
- xffSN compactID = 283
- xfi compactID = 284
- xfiFI compactID = 285
- xfil compactID = 286
- xfilPH compactID = 287
- xfo compactID = 288
- xfoDK compactID = 289
- xfoFO compactID = 290
- xfr compactID = 291
- xfrBE compactID = 292
- xfrBF compactID = 293
- xfrBI compactID = 294
- xfrBJ compactID = 295
- xfrBL compactID = 296
- xfrCA compactID = 297
- xfrCD compactID = 298
- xfrCF compactID = 299
- xfrCG compactID = 300
- xfrCH compactID = 301
- xfrCI compactID = 302
- xfrCM compactID = 303
- xfrDJ compactID = 304
- xfrDZ compactID = 305
- xfrFR compactID = 306
- xfrGA compactID = 307
- xfrGF compactID = 308
- xfrGN compactID = 309
- xfrGP compactID = 310
- xfrGQ compactID = 311
- xfrHT compactID = 312
- xfrKM compactID = 313
- xfrLU compactID = 314
- xfrMA compactID = 315
- xfrMC compactID = 316
- xfrMF compactID = 317
- xfrMG compactID = 318
- xfrML compactID = 319
- xfrMQ compactID = 320
- xfrMR compactID = 321
- xfrMU compactID = 322
- xfrNC compactID = 323
- xfrNE compactID = 324
- xfrPF compactID = 325
- xfrPM compactID = 326
- xfrRE compactID = 327
- xfrRW compactID = 328
- xfrSC compactID = 329
- xfrSN compactID = 330
- xfrSY compactID = 331
- xfrTD compactID = 332
- xfrTG compactID = 333
- xfrTN compactID = 334
- xfrVU compactID = 335
- xfrWF compactID = 336
- xfrYT compactID = 337
- xfur compactID = 338
- xfurIT compactID = 339
- xfy compactID = 340
- xfyNL compactID = 341
- xga compactID = 342
- xgaIE compactID = 343
- xgd compactID = 344
- xgdGB compactID = 345
- xgl compactID = 346
- xglES compactID = 347
- xgsw compactID = 348
- xgswCH compactID = 349
- xgswFR compactID = 350
- xgswLI compactID = 351
- xgu compactID = 352
- xguIN compactID = 353
- xguw compactID = 354
- xguz compactID = 355
- xguzKE compactID = 356
- xgv compactID = 357
- xgvIM compactID = 358
- xha compactID = 359
- xhaGH compactID = 360
- xhaNE compactID = 361
- xhaNG compactID = 362
- xhaw compactID = 363
- xhawUS compactID = 364
- xhe compactID = 365
- xheIL compactID = 366
- xhi compactID = 367
- xhiIN compactID = 368
- xhr compactID = 369
- xhrBA compactID = 370
- xhrHR compactID = 371
- xhsb compactID = 372
- xhsbDE compactID = 373
- xhu compactID = 374
- xhuHU compactID = 375
- xhy compactID = 376
- xhyAM compactID = 377
- xid compactID = 378
- xidID compactID = 379
- xig compactID = 380
- xigNG compactID = 381
- xii compactID = 382
- xiiCN compactID = 383
- xin compactID = 384
- xio compactID = 385
- xis compactID = 386
- xisIS compactID = 387
- xit compactID = 388
- xitCH compactID = 389
- xitIT compactID = 390
- xitSM compactID = 391
- xitVA compactID = 392
- xiu compactID = 393
- xiw compactID = 394
- xja compactID = 395
- xjaJP compactID = 396
- xjbo compactID = 397
- xjgo compactID = 398
- xjgoCM compactID = 399
- xji compactID = 400
- xjmc compactID = 401
- xjmcTZ compactID = 402
- xjv compactID = 403
- xjw compactID = 404
- xka compactID = 405
- xkaGE compactID = 406
- xkab compactID = 407
- xkabDZ compactID = 408
- xkaj compactID = 409
- xkam compactID = 410
- xkamKE compactID = 411
- xkcg compactID = 412
- xkde compactID = 413
- xkdeTZ compactID = 414
- xkea compactID = 415
- xkeaCV compactID = 416
- xkhq compactID = 417
- xkhqML compactID = 418
- xki compactID = 419
- xkiKE compactID = 420
- xkk compactID = 421
- xkkKZ compactID = 422
- xkkj compactID = 423
- xkkjCM compactID = 424
- xkl compactID = 425
- xklGL compactID = 426
- xkln compactID = 427
- xklnKE compactID = 428
- xkm compactID = 429
- xkmKH compactID = 430
- xkn compactID = 431
- xknIN compactID = 432
- xko compactID = 433
- xkoKP compactID = 434
- xkoKR compactID = 435
- xkok compactID = 436
- xkokIN compactID = 437
- xks compactID = 438
- xksIN compactID = 439
- xksb compactID = 440
- xksbTZ compactID = 441
- xksf compactID = 442
- xksfCM compactID = 443
- xksh compactID = 444
- xkshDE compactID = 445
- xku compactID = 446
- xkw compactID = 447
- xkwGB compactID = 448
- xky compactID = 449
- xkyKG compactID = 450
- xlag compactID = 451
- xlagTZ compactID = 452
- xlb compactID = 453
- xlbLU compactID = 454
- xlg compactID = 455
- xlgUG compactID = 456
- xlkt compactID = 457
- xlktUS compactID = 458
- xln compactID = 459
- xlnAO compactID = 460
- xlnCD compactID = 461
- xlnCF compactID = 462
- xlnCG compactID = 463
- xlo compactID = 464
- xloLA compactID = 465
- xlrc compactID = 466
- xlrcIQ compactID = 467
- xlrcIR compactID = 468
- xlt compactID = 469
- xltLT compactID = 470
- xlu compactID = 471
- xluCD compactID = 472
- xluo compactID = 473
- xluoKE compactID = 474
- xluy compactID = 475
- xluyKE compactID = 476
- xlv compactID = 477
- xlvLV compactID = 478
- xmas compactID = 479
- xmasKE compactID = 480
- xmasTZ compactID = 481
- xmer compactID = 482
- xmerKE compactID = 483
- xmfe compactID = 484
- xmfeMU compactID = 485
- xmg compactID = 486
- xmgMG compactID = 487
- xmgh compactID = 488
- xmghMZ compactID = 489
- xmgo compactID = 490
- xmgoCM compactID = 491
- xmk compactID = 492
- xmkMK compactID = 493
- xml compactID = 494
- xmlIN compactID = 495
- xmn compactID = 496
- xmnMN compactID = 497
- xmo compactID = 498
- xmr compactID = 499
- xmrIN compactID = 500
- xms compactID = 501
- xmsBN compactID = 502
- xmsMY compactID = 503
- xmsSG compactID = 504
- xmt compactID = 505
- xmtMT compactID = 506
- xmua compactID = 507
- xmuaCM compactID = 508
- xmy compactID = 509
- xmyMM compactID = 510
- xmzn compactID = 511
- xmznIR compactID = 512
- xnah compactID = 513
- xnaq compactID = 514
- xnaqNA compactID = 515
- xnb compactID = 516
- xnbNO compactID = 517
- xnbSJ compactID = 518
- xnd compactID = 519
- xndZW compactID = 520
- xnds compactID = 521
- xndsDE compactID = 522
- xndsNL compactID = 523
- xne compactID = 524
- xneIN compactID = 525
- xneNP compactID = 526
- xnl compactID = 527
- xnlAW compactID = 528
- xnlBE compactID = 529
- xnlBQ compactID = 530
- xnlCW compactID = 531
- xnlNL compactID = 532
- xnlSR compactID = 533
- xnlSX compactID = 534
- xnmg compactID = 535
- xnmgCM compactID = 536
- xnn compactID = 537
- xnnNO compactID = 538
- xnnh compactID = 539
- xnnhCM compactID = 540
- xno compactID = 541
- xnqo compactID = 542
- xnr compactID = 543
- xnso compactID = 544
- xnus compactID = 545
- xnusSS compactID = 546
- xny compactID = 547
- xnyn compactID = 548
- xnynUG compactID = 549
- xom compactID = 550
- xomET compactID = 551
- xomKE compactID = 552
- xor compactID = 553
- xorIN compactID = 554
- xos compactID = 555
- xosGE compactID = 556
- xosRU compactID = 557
- xpa compactID = 558
- xpaArab compactID = 559
- xpaArabPK compactID = 560
- xpaGuru compactID = 561
- xpaGuruIN compactID = 562
- xpap compactID = 563
- xpl compactID = 564
- xplPL compactID = 565
- xprg compactID = 566
- xprg001 compactID = 567
- xps compactID = 568
- xpsAF compactID = 569
- xpt compactID = 570
- xptAO compactID = 571
- xptBR compactID = 572
- xptCH compactID = 573
- xptCV compactID = 574
- xptGQ compactID = 575
- xptGW compactID = 576
- xptLU compactID = 577
- xptMO compactID = 578
- xptMZ compactID = 579
- xptPT compactID = 580
- xptST compactID = 581
- xptTL compactID = 582
- xqu compactID = 583
- xquBO compactID = 584
- xquEC compactID = 585
- xquPE compactID = 586
- xrm compactID = 587
- xrmCH compactID = 588
- xrn compactID = 589
- xrnBI compactID = 590
- xro compactID = 591
- xroMD compactID = 592
- xroRO compactID = 593
- xrof compactID = 594
- xrofTZ compactID = 595
- xru compactID = 596
- xruBY compactID = 597
- xruKG compactID = 598
- xruKZ compactID = 599
- xruMD compactID = 600
- xruRU compactID = 601
- xruUA compactID = 602
- xrw compactID = 603
- xrwRW compactID = 604
- xrwk compactID = 605
- xrwkTZ compactID = 606
- xsah compactID = 607
- xsahRU compactID = 608
- xsaq compactID = 609
- xsaqKE compactID = 610
- xsbp compactID = 611
- xsbpTZ compactID = 612
- xsd compactID = 613
- xsdPK compactID = 614
- xsdh compactID = 615
- xse compactID = 616
- xseFI compactID = 617
- xseNO compactID = 618
- xseSE compactID = 619
- xseh compactID = 620
- xsehMZ compactID = 621
- xses compactID = 622
- xsesML compactID = 623
- xsg compactID = 624
- xsgCF compactID = 625
- xsh compactID = 626
- xshi compactID = 627
- xshiLatn compactID = 628
- xshiLatnMA compactID = 629
- xshiTfng compactID = 630
- xshiTfngMA compactID = 631
- xsi compactID = 632
- xsiLK compactID = 633
- xsk compactID = 634
- xskSK compactID = 635
- xsl compactID = 636
- xslSI compactID = 637
- xsma compactID = 638
- xsmi compactID = 639
- xsmj compactID = 640
- xsmn compactID = 641
- xsmnFI compactID = 642
- xsms compactID = 643
- xsn compactID = 644
- xsnZW compactID = 645
- xso compactID = 646
- xsoDJ compactID = 647
- xsoET compactID = 648
- xsoKE compactID = 649
- xsoSO compactID = 650
- xsq compactID = 651
- xsqAL compactID = 652
- xsqMK compactID = 653
- xsqXK compactID = 654
- xsr compactID = 655
- xsrCyrl compactID = 656
- xsrCyrlBA compactID = 657
- xsrCyrlME compactID = 658
- xsrCyrlRS compactID = 659
- xsrCyrlXK compactID = 660
- xsrLatn compactID = 661
- xsrLatnBA compactID = 662
- xsrLatnME compactID = 663
- xsrLatnRS compactID = 664
- xsrLatnXK compactID = 665
- xss compactID = 666
- xssy compactID = 667
- xst compactID = 668
- xsv compactID = 669
- xsvAX compactID = 670
- xsvFI compactID = 671
- xsvSE compactID = 672
- xsw compactID = 673
- xswCD compactID = 674
- xswKE compactID = 675
- xswTZ compactID = 676
- xswUG compactID = 677
- xsyr compactID = 678
- xta compactID = 679
- xtaIN compactID = 680
- xtaLK compactID = 681
- xtaMY compactID = 682
- xtaSG compactID = 683
- xte compactID = 684
- xteIN compactID = 685
- xteo compactID = 686
- xteoKE compactID = 687
- xteoUG compactID = 688
- xtg compactID = 689
- xtgTJ compactID = 690
- xth compactID = 691
- xthTH compactID = 692
- xti compactID = 693
- xtiER compactID = 694
- xtiET compactID = 695
- xtig compactID = 696
- xtk compactID = 697
- xtkTM compactID = 698
- xtl compactID = 699
- xtn compactID = 700
- xto compactID = 701
- xtoTO compactID = 702
- xtr compactID = 703
- xtrCY compactID = 704
- xtrTR compactID = 705
- xts compactID = 706
- xtt compactID = 707
- xttRU compactID = 708
- xtwq compactID = 709
- xtwqNE compactID = 710
- xtzm compactID = 711
- xtzmMA compactID = 712
- xug compactID = 713
- xugCN compactID = 714
- xuk compactID = 715
- xukUA compactID = 716
- xur compactID = 717
- xurIN compactID = 718
- xurPK compactID = 719
- xuz compactID = 720
- xuzArab compactID = 721
- xuzArabAF compactID = 722
- xuzCyrl compactID = 723
- xuzCyrlUZ compactID = 724
- xuzLatn compactID = 725
- xuzLatnUZ compactID = 726
- xvai compactID = 727
- xvaiLatn compactID = 728
- xvaiLatnLR compactID = 729
- xvaiVaii compactID = 730
- xvaiVaiiLR compactID = 731
- xve compactID = 732
- xvi compactID = 733
- xviVN compactID = 734
- xvo compactID = 735
- xvo001 compactID = 736
- xvun compactID = 737
- xvunTZ compactID = 738
- xwa compactID = 739
- xwae compactID = 740
- xwaeCH compactID = 741
- xwo compactID = 742
- xwoSN compactID = 743
- xxh compactID = 744
- xxog compactID = 745
- xxogUG compactID = 746
- xyav compactID = 747
- xyavCM compactID = 748
- xyi compactID = 749
- xyi001 compactID = 750
- xyo compactID = 751
- xyoBJ compactID = 752
- xyoNG compactID = 753
- xyue compactID = 754
- xyueHans compactID = 755
- xyueHansCN compactID = 756
- xyueHant compactID = 757
- xyueHantHK compactID = 758
- xzgh compactID = 759
- xzghMA compactID = 760
- xzh compactID = 761
- xzhHans compactID = 762
- xzhHansCN compactID = 763
- xzhHansHK compactID = 764
- xzhHansMO compactID = 765
- xzhHansSG compactID = 766
- xzhHant compactID = 767
- xzhHantHK compactID = 768
- xzhHantMO compactID = 769
- xzhHantTW compactID = 770
- xzu compactID = 771
- xzuZA compactID = 772
- xcaESvalencia compactID = 773
- xenUSuvaposix compactID = 774
+ undIndex compactID = 0
+ afIndex compactID = 1
+ afNAIndex compactID = 2
+ afZAIndex compactID = 3
+ agqIndex compactID = 4
+ agqCMIndex compactID = 5
+ akIndex compactID = 6
+ akGHIndex compactID = 7
+ amIndex compactID = 8
+ amETIndex compactID = 9
+ arIndex compactID = 10
+ ar001Index compactID = 11
+ arAEIndex compactID = 12
+ arBHIndex compactID = 13
+ arDJIndex compactID = 14
+ arDZIndex compactID = 15
+ arEGIndex compactID = 16
+ arEHIndex compactID = 17
+ arERIndex compactID = 18
+ arILIndex compactID = 19
+ arIQIndex compactID = 20
+ arJOIndex compactID = 21
+ arKMIndex compactID = 22
+ arKWIndex compactID = 23
+ arLBIndex compactID = 24
+ arLYIndex compactID = 25
+ arMAIndex compactID = 26
+ arMRIndex compactID = 27
+ arOMIndex compactID = 28
+ arPSIndex compactID = 29
+ arQAIndex compactID = 30
+ arSAIndex compactID = 31
+ arSDIndex compactID = 32
+ arSOIndex compactID = 33
+ arSSIndex compactID = 34
+ arSYIndex compactID = 35
+ arTDIndex compactID = 36
+ arTNIndex compactID = 37
+ arYEIndex compactID = 38
+ arsIndex compactID = 39
+ asIndex compactID = 40
+ asINIndex compactID = 41
+ asaIndex compactID = 42
+ asaTZIndex compactID = 43
+ astIndex compactID = 44
+ astESIndex compactID = 45
+ azIndex compactID = 46
+ azCyrlIndex compactID = 47
+ azCyrlAZIndex compactID = 48
+ azLatnIndex compactID = 49
+ azLatnAZIndex compactID = 50
+ basIndex compactID = 51
+ basCMIndex compactID = 52
+ beIndex compactID = 53
+ beBYIndex compactID = 54
+ bemIndex compactID = 55
+ bemZMIndex compactID = 56
+ bezIndex compactID = 57
+ bezTZIndex compactID = 58
+ bgIndex compactID = 59
+ bgBGIndex compactID = 60
+ bhIndex compactID = 61
+ bmIndex compactID = 62
+ bmMLIndex compactID = 63
+ bnIndex compactID = 64
+ bnBDIndex compactID = 65
+ bnINIndex compactID = 66
+ boIndex compactID = 67
+ boCNIndex compactID = 68
+ boINIndex compactID = 69
+ brIndex compactID = 70
+ brFRIndex compactID = 71
+ brxIndex compactID = 72
+ brxINIndex compactID = 73
+ bsIndex compactID = 74
+ bsCyrlIndex compactID = 75
+ bsCyrlBAIndex compactID = 76
+ bsLatnIndex compactID = 77
+ bsLatnBAIndex compactID = 78
+ caIndex compactID = 79
+ caADIndex compactID = 80
+ caESIndex compactID = 81
+ caFRIndex compactID = 82
+ caITIndex compactID = 83
+ ccpIndex compactID = 84
+ ccpBDIndex compactID = 85
+ ccpINIndex compactID = 86
+ ceIndex compactID = 87
+ ceRUIndex compactID = 88
+ cggIndex compactID = 89
+ cggUGIndex compactID = 90
+ chrIndex compactID = 91
+ chrUSIndex compactID = 92
+ ckbIndex compactID = 93
+ ckbIQIndex compactID = 94
+ ckbIRIndex compactID = 95
+ csIndex compactID = 96
+ csCZIndex compactID = 97
+ cuIndex compactID = 98
+ cuRUIndex compactID = 99
+ cyIndex compactID = 100
+ cyGBIndex compactID = 101
+ daIndex compactID = 102
+ daDKIndex compactID = 103
+ daGLIndex compactID = 104
+ davIndex compactID = 105
+ davKEIndex compactID = 106
+ deIndex compactID = 107
+ deATIndex compactID = 108
+ deBEIndex compactID = 109
+ deCHIndex compactID = 110
+ deDEIndex compactID = 111
+ deITIndex compactID = 112
+ deLIIndex compactID = 113
+ deLUIndex compactID = 114
+ djeIndex compactID = 115
+ djeNEIndex compactID = 116
+ dsbIndex compactID = 117
+ dsbDEIndex compactID = 118
+ duaIndex compactID = 119
+ duaCMIndex compactID = 120
+ dvIndex compactID = 121
+ dyoIndex compactID = 122
+ dyoSNIndex compactID = 123
+ dzIndex compactID = 124
+ dzBTIndex compactID = 125
+ ebuIndex compactID = 126
+ ebuKEIndex compactID = 127
+ eeIndex compactID = 128
+ eeGHIndex compactID = 129
+ eeTGIndex compactID = 130
+ elIndex compactID = 131
+ elCYIndex compactID = 132
+ elGRIndex compactID = 133
+ enIndex compactID = 134
+ en001Index compactID = 135
+ en150Index compactID = 136
+ enAGIndex compactID = 137
+ enAIIndex compactID = 138
+ enASIndex compactID = 139
+ enATIndex compactID = 140
+ enAUIndex compactID = 141
+ enBBIndex compactID = 142
+ enBEIndex compactID = 143
+ enBIIndex compactID = 144
+ enBMIndex compactID = 145
+ enBSIndex compactID = 146
+ enBWIndex compactID = 147
+ enBZIndex compactID = 148
+ enCAIndex compactID = 149
+ enCCIndex compactID = 150
+ enCHIndex compactID = 151
+ enCKIndex compactID = 152
+ enCMIndex compactID = 153
+ enCXIndex compactID = 154
+ enCYIndex compactID = 155
+ enDEIndex compactID = 156
+ enDGIndex compactID = 157
+ enDKIndex compactID = 158
+ enDMIndex compactID = 159
+ enERIndex compactID = 160
+ enFIIndex compactID = 161
+ enFJIndex compactID = 162
+ enFKIndex compactID = 163
+ enFMIndex compactID = 164
+ enGBIndex compactID = 165
+ enGDIndex compactID = 166
+ enGGIndex compactID = 167
+ enGHIndex compactID = 168
+ enGIIndex compactID = 169
+ enGMIndex compactID = 170
+ enGUIndex compactID = 171
+ enGYIndex compactID = 172
+ enHKIndex compactID = 173
+ enIEIndex compactID = 174
+ enILIndex compactID = 175
+ enIMIndex compactID = 176
+ enINIndex compactID = 177
+ enIOIndex compactID = 178
+ enJEIndex compactID = 179
+ enJMIndex compactID = 180
+ enKEIndex compactID = 181
+ enKIIndex compactID = 182
+ enKNIndex compactID = 183
+ enKYIndex compactID = 184
+ enLCIndex compactID = 185
+ enLRIndex compactID = 186
+ enLSIndex compactID = 187
+ enMGIndex compactID = 188
+ enMHIndex compactID = 189
+ enMOIndex compactID = 190
+ enMPIndex compactID = 191
+ enMSIndex compactID = 192
+ enMTIndex compactID = 193
+ enMUIndex compactID = 194
+ enMWIndex compactID = 195
+ enMYIndex compactID = 196
+ enNAIndex compactID = 197
+ enNFIndex compactID = 198
+ enNGIndex compactID = 199
+ enNLIndex compactID = 200
+ enNRIndex compactID = 201
+ enNUIndex compactID = 202
+ enNZIndex compactID = 203
+ enPGIndex compactID = 204
+ enPHIndex compactID = 205
+ enPKIndex compactID = 206
+ enPNIndex compactID = 207
+ enPRIndex compactID = 208
+ enPWIndex compactID = 209
+ enRWIndex compactID = 210
+ enSBIndex compactID = 211
+ enSCIndex compactID = 212
+ enSDIndex compactID = 213
+ enSEIndex compactID = 214
+ enSGIndex compactID = 215
+ enSHIndex compactID = 216
+ enSIIndex compactID = 217
+ enSLIndex compactID = 218
+ enSSIndex compactID = 219
+ enSXIndex compactID = 220
+ enSZIndex compactID = 221
+ enTCIndex compactID = 222
+ enTKIndex compactID = 223
+ enTOIndex compactID = 224
+ enTTIndex compactID = 225
+ enTVIndex compactID = 226
+ enTZIndex compactID = 227
+ enUGIndex compactID = 228
+ enUMIndex compactID = 229
+ enUSIndex compactID = 230
+ enVCIndex compactID = 231
+ enVGIndex compactID = 232
+ enVIIndex compactID = 233
+ enVUIndex compactID = 234
+ enWSIndex compactID = 235
+ enZAIndex compactID = 236
+ enZMIndex compactID = 237
+ enZWIndex compactID = 238
+ eoIndex compactID = 239
+ eo001Index compactID = 240
+ esIndex compactID = 241
+ es419Index compactID = 242
+ esARIndex compactID = 243
+ esBOIndex compactID = 244
+ esBRIndex compactID = 245
+ esBZIndex compactID = 246
+ esCLIndex compactID = 247
+ esCOIndex compactID = 248
+ esCRIndex compactID = 249
+ esCUIndex compactID = 250
+ esDOIndex compactID = 251
+ esEAIndex compactID = 252
+ esECIndex compactID = 253
+ esESIndex compactID = 254
+ esGQIndex compactID = 255
+ esGTIndex compactID = 256
+ esHNIndex compactID = 257
+ esICIndex compactID = 258
+ esMXIndex compactID = 259
+ esNIIndex compactID = 260
+ esPAIndex compactID = 261
+ esPEIndex compactID = 262
+ esPHIndex compactID = 263
+ esPRIndex compactID = 264
+ esPYIndex compactID = 265
+ esSVIndex compactID = 266
+ esUSIndex compactID = 267
+ esUYIndex compactID = 268
+ esVEIndex compactID = 269
+ etIndex compactID = 270
+ etEEIndex compactID = 271
+ euIndex compactID = 272
+ euESIndex compactID = 273
+ ewoIndex compactID = 274
+ ewoCMIndex compactID = 275
+ faIndex compactID = 276
+ faAFIndex compactID = 277
+ faIRIndex compactID = 278
+ ffIndex compactID = 279
+ ffCMIndex compactID = 280
+ ffGNIndex compactID = 281
+ ffMRIndex compactID = 282
+ ffSNIndex compactID = 283
+ fiIndex compactID = 284
+ fiFIIndex compactID = 285
+ filIndex compactID = 286
+ filPHIndex compactID = 287
+ foIndex compactID = 288
+ foDKIndex compactID = 289
+ foFOIndex compactID = 290
+ frIndex compactID = 291
+ frBEIndex compactID = 292
+ frBFIndex compactID = 293
+ frBIIndex compactID = 294
+ frBJIndex compactID = 295
+ frBLIndex compactID = 296
+ frCAIndex compactID = 297
+ frCDIndex compactID = 298
+ frCFIndex compactID = 299
+ frCGIndex compactID = 300
+ frCHIndex compactID = 301
+ frCIIndex compactID = 302
+ frCMIndex compactID = 303
+ frDJIndex compactID = 304
+ frDZIndex compactID = 305
+ frFRIndex compactID = 306
+ frGAIndex compactID = 307
+ frGFIndex compactID = 308
+ frGNIndex compactID = 309
+ frGPIndex compactID = 310
+ frGQIndex compactID = 311
+ frHTIndex compactID = 312
+ frKMIndex compactID = 313
+ frLUIndex compactID = 314
+ frMAIndex compactID = 315
+ frMCIndex compactID = 316
+ frMFIndex compactID = 317
+ frMGIndex compactID = 318
+ frMLIndex compactID = 319
+ frMQIndex compactID = 320
+ frMRIndex compactID = 321
+ frMUIndex compactID = 322
+ frNCIndex compactID = 323
+ frNEIndex compactID = 324
+ frPFIndex compactID = 325
+ frPMIndex compactID = 326
+ frREIndex compactID = 327
+ frRWIndex compactID = 328
+ frSCIndex compactID = 329
+ frSNIndex compactID = 330
+ frSYIndex compactID = 331
+ frTDIndex compactID = 332
+ frTGIndex compactID = 333
+ frTNIndex compactID = 334
+ frVUIndex compactID = 335
+ frWFIndex compactID = 336
+ frYTIndex compactID = 337
+ furIndex compactID = 338
+ furITIndex compactID = 339
+ fyIndex compactID = 340
+ fyNLIndex compactID = 341
+ gaIndex compactID = 342
+ gaIEIndex compactID = 343
+ gdIndex compactID = 344
+ gdGBIndex compactID = 345
+ glIndex compactID = 346
+ glESIndex compactID = 347
+ gswIndex compactID = 348
+ gswCHIndex compactID = 349
+ gswFRIndex compactID = 350
+ gswLIIndex compactID = 351
+ guIndex compactID = 352
+ guINIndex compactID = 353
+ guwIndex compactID = 354
+ guzIndex compactID = 355
+ guzKEIndex compactID = 356
+ gvIndex compactID = 357
+ gvIMIndex compactID = 358
+ haIndex compactID = 359
+ haGHIndex compactID = 360
+ haNEIndex compactID = 361
+ haNGIndex compactID = 362
+ hawIndex compactID = 363
+ hawUSIndex compactID = 364
+ heIndex compactID = 365
+ heILIndex compactID = 366
+ hiIndex compactID = 367
+ hiINIndex compactID = 368
+ hrIndex compactID = 369
+ hrBAIndex compactID = 370
+ hrHRIndex compactID = 371
+ hsbIndex compactID = 372
+ hsbDEIndex compactID = 373
+ huIndex compactID = 374
+ huHUIndex compactID = 375
+ hyIndex compactID = 376
+ hyAMIndex compactID = 377
+ idIndex compactID = 378
+ idIDIndex compactID = 379
+ igIndex compactID = 380
+ igNGIndex compactID = 381
+ iiIndex compactID = 382
+ iiCNIndex compactID = 383
+ inIndex compactID = 384
+ ioIndex compactID = 385
+ isIndex compactID = 386
+ isISIndex compactID = 387
+ itIndex compactID = 388
+ itCHIndex compactID = 389
+ itITIndex compactID = 390
+ itSMIndex compactID = 391
+ itVAIndex compactID = 392
+ iuIndex compactID = 393
+ iwIndex compactID = 394
+ jaIndex compactID = 395
+ jaJPIndex compactID = 396
+ jboIndex compactID = 397
+ jgoIndex compactID = 398
+ jgoCMIndex compactID = 399
+ jiIndex compactID = 400
+ jmcIndex compactID = 401
+ jmcTZIndex compactID = 402
+ jvIndex compactID = 403
+ jwIndex compactID = 404
+ kaIndex compactID = 405
+ kaGEIndex compactID = 406
+ kabIndex compactID = 407
+ kabDZIndex compactID = 408
+ kajIndex compactID = 409
+ kamIndex compactID = 410
+ kamKEIndex compactID = 411
+ kcgIndex compactID = 412
+ kdeIndex compactID = 413
+ kdeTZIndex compactID = 414
+ keaIndex compactID = 415
+ keaCVIndex compactID = 416
+ khqIndex compactID = 417
+ khqMLIndex compactID = 418
+ kiIndex compactID = 419
+ kiKEIndex compactID = 420
+ kkIndex compactID = 421
+ kkKZIndex compactID = 422
+ kkjIndex compactID = 423
+ kkjCMIndex compactID = 424
+ klIndex compactID = 425
+ klGLIndex compactID = 426
+ klnIndex compactID = 427
+ klnKEIndex compactID = 428
+ kmIndex compactID = 429
+ kmKHIndex compactID = 430
+ knIndex compactID = 431
+ knINIndex compactID = 432
+ koIndex compactID = 433
+ koKPIndex compactID = 434
+ koKRIndex compactID = 435
+ kokIndex compactID = 436
+ kokINIndex compactID = 437
+ ksIndex compactID = 438
+ ksINIndex compactID = 439
+ ksbIndex compactID = 440
+ ksbTZIndex compactID = 441
+ ksfIndex compactID = 442
+ ksfCMIndex compactID = 443
+ kshIndex compactID = 444
+ kshDEIndex compactID = 445
+ kuIndex compactID = 446
+ kwIndex compactID = 447
+ kwGBIndex compactID = 448
+ kyIndex compactID = 449
+ kyKGIndex compactID = 450
+ lagIndex compactID = 451
+ lagTZIndex compactID = 452
+ lbIndex compactID = 453
+ lbLUIndex compactID = 454
+ lgIndex compactID = 455
+ lgUGIndex compactID = 456
+ lktIndex compactID = 457
+ lktUSIndex compactID = 458
+ lnIndex compactID = 459
+ lnAOIndex compactID = 460
+ lnCDIndex compactID = 461
+ lnCFIndex compactID = 462
+ lnCGIndex compactID = 463
+ loIndex compactID = 464
+ loLAIndex compactID = 465
+ lrcIndex compactID = 466
+ lrcIQIndex compactID = 467
+ lrcIRIndex compactID = 468
+ ltIndex compactID = 469
+ ltLTIndex compactID = 470
+ luIndex compactID = 471
+ luCDIndex compactID = 472
+ luoIndex compactID = 473
+ luoKEIndex compactID = 474
+ luyIndex compactID = 475
+ luyKEIndex compactID = 476
+ lvIndex compactID = 477
+ lvLVIndex compactID = 478
+ masIndex compactID = 479
+ masKEIndex compactID = 480
+ masTZIndex compactID = 481
+ merIndex compactID = 482
+ merKEIndex compactID = 483
+ mfeIndex compactID = 484
+ mfeMUIndex compactID = 485
+ mgIndex compactID = 486
+ mgMGIndex compactID = 487
+ mghIndex compactID = 488
+ mghMZIndex compactID = 489
+ mgoIndex compactID = 490
+ mgoCMIndex compactID = 491
+ mkIndex compactID = 492
+ mkMKIndex compactID = 493
+ mlIndex compactID = 494
+ mlINIndex compactID = 495
+ mnIndex compactID = 496
+ mnMNIndex compactID = 497
+ moIndex compactID = 498
+ mrIndex compactID = 499
+ mrINIndex compactID = 500
+ msIndex compactID = 501
+ msBNIndex compactID = 502
+ msMYIndex compactID = 503
+ msSGIndex compactID = 504
+ mtIndex compactID = 505
+ mtMTIndex compactID = 506
+ muaIndex compactID = 507
+ muaCMIndex compactID = 508
+ myIndex compactID = 509
+ myMMIndex compactID = 510
+ mznIndex compactID = 511
+ mznIRIndex compactID = 512
+ nahIndex compactID = 513
+ naqIndex compactID = 514
+ naqNAIndex compactID = 515
+ nbIndex compactID = 516
+ nbNOIndex compactID = 517
+ nbSJIndex compactID = 518
+ ndIndex compactID = 519
+ ndZWIndex compactID = 520
+ ndsIndex compactID = 521
+ ndsDEIndex compactID = 522
+ ndsNLIndex compactID = 523
+ neIndex compactID = 524
+ neINIndex compactID = 525
+ neNPIndex compactID = 526
+ nlIndex compactID = 527
+ nlAWIndex compactID = 528
+ nlBEIndex compactID = 529
+ nlBQIndex compactID = 530
+ nlCWIndex compactID = 531
+ nlNLIndex compactID = 532
+ nlSRIndex compactID = 533
+ nlSXIndex compactID = 534
+ nmgIndex compactID = 535
+ nmgCMIndex compactID = 536
+ nnIndex compactID = 537
+ nnNOIndex compactID = 538
+ nnhIndex compactID = 539
+ nnhCMIndex compactID = 540
+ noIndex compactID = 541
+ nqoIndex compactID = 542
+ nrIndex compactID = 543
+ nsoIndex compactID = 544
+ nusIndex compactID = 545
+ nusSSIndex compactID = 546
+ nyIndex compactID = 547
+ nynIndex compactID = 548
+ nynUGIndex compactID = 549
+ omIndex compactID = 550
+ omETIndex compactID = 551
+ omKEIndex compactID = 552
+ orIndex compactID = 553
+ orINIndex compactID = 554
+ osIndex compactID = 555
+ osGEIndex compactID = 556
+ osRUIndex compactID = 557
+ paIndex compactID = 558
+ paArabIndex compactID = 559
+ paArabPKIndex compactID = 560
+ paGuruIndex compactID = 561
+ paGuruINIndex compactID = 562
+ papIndex compactID = 563
+ plIndex compactID = 564
+ plPLIndex compactID = 565
+ prgIndex compactID = 566
+ prg001Index compactID = 567
+ psIndex compactID = 568
+ psAFIndex compactID = 569
+ ptIndex compactID = 570
+ ptAOIndex compactID = 571
+ ptBRIndex compactID = 572
+ ptCHIndex compactID = 573
+ ptCVIndex compactID = 574
+ ptGQIndex compactID = 575
+ ptGWIndex compactID = 576
+ ptLUIndex compactID = 577
+ ptMOIndex compactID = 578
+ ptMZIndex compactID = 579
+ ptPTIndex compactID = 580
+ ptSTIndex compactID = 581
+ ptTLIndex compactID = 582
+ quIndex compactID = 583
+ quBOIndex compactID = 584
+ quECIndex compactID = 585
+ quPEIndex compactID = 586
+ rmIndex compactID = 587
+ rmCHIndex compactID = 588
+ rnIndex compactID = 589
+ rnBIIndex compactID = 590
+ roIndex compactID = 591
+ roMDIndex compactID = 592
+ roROIndex compactID = 593
+ rofIndex compactID = 594
+ rofTZIndex compactID = 595
+ ruIndex compactID = 596
+ ruBYIndex compactID = 597
+ ruKGIndex compactID = 598
+ ruKZIndex compactID = 599
+ ruMDIndex compactID = 600
+ ruRUIndex compactID = 601
+ ruUAIndex compactID = 602
+ rwIndex compactID = 603
+ rwRWIndex compactID = 604
+ rwkIndex compactID = 605
+ rwkTZIndex compactID = 606
+ sahIndex compactID = 607
+ sahRUIndex compactID = 608
+ saqIndex compactID = 609
+ saqKEIndex compactID = 610
+ sbpIndex compactID = 611
+ sbpTZIndex compactID = 612
+ sdIndex compactID = 613
+ sdPKIndex compactID = 614
+ sdhIndex compactID = 615
+ seIndex compactID = 616
+ seFIIndex compactID = 617
+ seNOIndex compactID = 618
+ seSEIndex compactID = 619
+ sehIndex compactID = 620
+ sehMZIndex compactID = 621
+ sesIndex compactID = 622
+ sesMLIndex compactID = 623
+ sgIndex compactID = 624
+ sgCFIndex compactID = 625
+ shIndex compactID = 626
+ shiIndex compactID = 627
+ shiLatnIndex compactID = 628
+ shiLatnMAIndex compactID = 629
+ shiTfngIndex compactID = 630
+ shiTfngMAIndex compactID = 631
+ siIndex compactID = 632
+ siLKIndex compactID = 633
+ skIndex compactID = 634
+ skSKIndex compactID = 635
+ slIndex compactID = 636
+ slSIIndex compactID = 637
+ smaIndex compactID = 638
+ smiIndex compactID = 639
+ smjIndex compactID = 640
+ smnIndex compactID = 641
+ smnFIIndex compactID = 642
+ smsIndex compactID = 643
+ snIndex compactID = 644
+ snZWIndex compactID = 645
+ soIndex compactID = 646
+ soDJIndex compactID = 647
+ soETIndex compactID = 648
+ soKEIndex compactID = 649
+ soSOIndex compactID = 650
+ sqIndex compactID = 651
+ sqALIndex compactID = 652
+ sqMKIndex compactID = 653
+ sqXKIndex compactID = 654
+ srIndex compactID = 655
+ srCyrlIndex compactID = 656
+ srCyrlBAIndex compactID = 657
+ srCyrlMEIndex compactID = 658
+ srCyrlRSIndex compactID = 659
+ srCyrlXKIndex compactID = 660
+ srLatnIndex compactID = 661
+ srLatnBAIndex compactID = 662
+ srLatnMEIndex compactID = 663
+ srLatnRSIndex compactID = 664
+ srLatnXKIndex compactID = 665
+ ssIndex compactID = 666
+ ssyIndex compactID = 667
+ stIndex compactID = 668
+ svIndex compactID = 669
+ svAXIndex compactID = 670
+ svFIIndex compactID = 671
+ svSEIndex compactID = 672
+ swIndex compactID = 673
+ swCDIndex compactID = 674
+ swKEIndex compactID = 675
+ swTZIndex compactID = 676
+ swUGIndex compactID = 677
+ syrIndex compactID = 678
+ taIndex compactID = 679
+ taINIndex compactID = 680
+ taLKIndex compactID = 681
+ taMYIndex compactID = 682
+ taSGIndex compactID = 683
+ teIndex compactID = 684
+ teINIndex compactID = 685
+ teoIndex compactID = 686
+ teoKEIndex compactID = 687
+ teoUGIndex compactID = 688
+ tgIndex compactID = 689
+ tgTJIndex compactID = 690
+ thIndex compactID = 691
+ thTHIndex compactID = 692
+ tiIndex compactID = 693
+ tiERIndex compactID = 694
+ tiETIndex compactID = 695
+ tigIndex compactID = 696
+ tkIndex compactID = 697
+ tkTMIndex compactID = 698
+ tlIndex compactID = 699
+ tnIndex compactID = 700
+ toIndex compactID = 701
+ toTOIndex compactID = 702
+ trIndex compactID = 703
+ trCYIndex compactID = 704
+ trTRIndex compactID = 705
+ tsIndex compactID = 706
+ ttIndex compactID = 707
+ ttRUIndex compactID = 708
+ twqIndex compactID = 709
+ twqNEIndex compactID = 710
+ tzmIndex compactID = 711
+ tzmMAIndex compactID = 712
+ ugIndex compactID = 713
+ ugCNIndex compactID = 714
+ ukIndex compactID = 715
+ ukUAIndex compactID = 716
+ urIndex compactID = 717
+ urINIndex compactID = 718
+ urPKIndex compactID = 719
+ uzIndex compactID = 720
+ uzArabIndex compactID = 721
+ uzArabAFIndex compactID = 722
+ uzCyrlIndex compactID = 723
+ uzCyrlUZIndex compactID = 724
+ uzLatnIndex compactID = 725
+ uzLatnUZIndex compactID = 726
+ vaiIndex compactID = 727
+ vaiLatnIndex compactID = 728
+ vaiLatnLRIndex compactID = 729
+ vaiVaiiIndex compactID = 730
+ vaiVaiiLRIndex compactID = 731
+ veIndex compactID = 732
+ viIndex compactID = 733
+ viVNIndex compactID = 734
+ voIndex compactID = 735
+ vo001Index compactID = 736
+ vunIndex compactID = 737
+ vunTZIndex compactID = 738
+ waIndex compactID = 739
+ waeIndex compactID = 740
+ waeCHIndex compactID = 741
+ woIndex compactID = 742
+ woSNIndex compactID = 743
+ xhIndex compactID = 744
+ xogIndex compactID = 745
+ xogUGIndex compactID = 746
+ yavIndex compactID = 747
+ yavCMIndex compactID = 748
+ yiIndex compactID = 749
+ yi001Index compactID = 750
+ yoIndex compactID = 751
+ yoBJIndex compactID = 752
+ yoNGIndex compactID = 753
+ yueIndex compactID = 754
+ yueHansIndex compactID = 755
+ yueHansCNIndex compactID = 756
+ yueHantIndex compactID = 757
+ yueHantHKIndex compactID = 758
+ zghIndex compactID = 759
+ zghMAIndex compactID = 760
+ zhIndex compactID = 761
+ zhHansIndex compactID = 762
+ zhHansCNIndex compactID = 763
+ zhHansHKIndex compactID = 764
+ zhHansMOIndex compactID = 765
+ zhHansSGIndex compactID = 766
+ zhHantIndex compactID = 767
+ zhHantHKIndex compactID = 768
+ zhHantMOIndex compactID = 769
+ zhHantTWIndex compactID = 770
+ zuIndex compactID = 771
+ zuZAIndex compactID = 772
+ caESvalenciaIndex compactID = 773
+ enUSuvaposixIndex compactID = 774
)
var coreTags = []language.CompactCoreInfo{ // 773 elements
diff --git a/language/tags.go b/language/tags.go
index 1d1b7f8..acc482a 100644
--- a/language/tags.go
+++ b/language/tags.go
@@ -61,85 +61,83 @@
Und Tag = Tag{}
- // TODO: use compact tags once the transition is completed.
-
- Afrikaans Tag = Raw.MustParse("af") // Tag{lang: _af} // af
- Amharic Tag = Raw.MustParse("am") // Tag{lang: _am} // am
- Arabic Tag = Raw.MustParse("ar") // Tag{lang: _ar} // ar
- ModernStandardArabic Tag = Raw.MustParse("ar-001") // Tag{lang: _ar, region: _001} // ar-001
- Azerbaijani Tag = Raw.MustParse("az") // Tag{lang: _az} // az
- Bulgarian Tag = Raw.MustParse("bg") // Tag{lang: _bg} // bg
- Bengali Tag = Raw.MustParse("bn") // Tag{lang: _bn} // bn
- Catalan Tag = Raw.MustParse("ca") // Tag{lang: _ca} // ca
- Czech Tag = Raw.MustParse("cs") // Tag{lang: _cs} // cs
- Danish Tag = Raw.MustParse("da") // Tag{lang: _da} // da
- German Tag = Raw.MustParse("de") // Tag{lang: _de} // de
- Greek Tag = Raw.MustParse("el") // Tag{lang: _el} // el
- English Tag = Raw.MustParse("en") // Tag{lang: _en} // en
- AmericanEnglish Tag = Raw.MustParse("en-US") // Tag{lang: _en, region: _US} // en-US
- BritishEnglish Tag = Raw.MustParse("en-GB") // Tag{lang: _en, region: _GB} // en-GB
- Spanish Tag = Raw.MustParse("es") // Tag{lang: _es} // es
- EuropeanSpanish Tag = Raw.MustParse("es-ES") // Tag{lang: _es, region: _ES} // es-ES
- LatinAmericanSpanish Tag = Raw.MustParse("es-419") // Tag{lang: _es, region: _419} // es-419
- Estonian Tag = Raw.MustParse("et") // Tag{lang: _et} // et
- Persian Tag = Raw.MustParse("fa") // Tag{lang: _fa} // fa
- Finnish Tag = Raw.MustParse("fi") // Tag{lang: _fi} // fi
- Filipino Tag = Raw.MustParse("fil") // Tag{lang: _fil} // fil
- French Tag = Raw.MustParse("fr") // Tag{lang: _fr} // fr
- CanadianFrench Tag = Raw.MustParse("fr-CA") // Tag{lang: _fr, region: _CA} // fr-CA
- Gujarati Tag = Raw.MustParse("gu") // Tag{lang: _gu} // gu
- Hebrew Tag = Raw.MustParse("he") // Tag{lang: _he} // he
- Hindi Tag = Raw.MustParse("hi") // Tag{lang: _hi} // hi
- Croatian Tag = Raw.MustParse("hr") // Tag{lang: _hr} // hr
- Hungarian Tag = Raw.MustParse("hu") // Tag{lang: _hu} // hu
- Armenian Tag = Raw.MustParse("hy") // Tag{lang: _hy} // hy
- Indonesian Tag = Raw.MustParse("id") // Tag{lang: _id} // id
- Icelandic Tag = Raw.MustParse("is") // Tag{lang: _is} // is
- Italian Tag = Raw.MustParse("it") // Tag{lang: _it} // it
- Japanese Tag = Raw.MustParse("ja") // Tag{lang: _ja} // ja
- Georgian Tag = Raw.MustParse("ka") // Tag{lang: _ka} // ka
- Kazakh Tag = Raw.MustParse("kk") // Tag{lang: _kk} // kk
- Khmer Tag = Raw.MustParse("km") // Tag{lang: _km} // km
- Kannada Tag = Raw.MustParse("kn") // Tag{lang: _kn} // kn
- Korean Tag = Raw.MustParse("ko") // Tag{lang: _ko} // ko
- Kirghiz Tag = Raw.MustParse("ky") // Tag{lang: _ky} // ky
- Lao Tag = Raw.MustParse("lo") // Tag{lang: _lo} // lo
- Lithuanian Tag = Raw.MustParse("lt") // Tag{lang: _lt} // lt
- Latvian Tag = Raw.MustParse("lv") // Tag{lang: _lv} // lv
- Macedonian Tag = Raw.MustParse("mk") // Tag{lang: _mk} // mk
- Malayalam Tag = Raw.MustParse("ml") // Tag{lang: _ml} // ml
- Mongolian Tag = Raw.MustParse("mn") // Tag{lang: _mn} // mn
- Marathi Tag = Raw.MustParse("mr") // Tag{lang: _mr} // mr
- Malay Tag = Raw.MustParse("ms") // Tag{lang: _ms} // ms
- Burmese Tag = Raw.MustParse("my") // Tag{lang: _my} // my
- Nepali Tag = Raw.MustParse("ne") // Tag{lang: _ne} // ne
- Dutch Tag = Raw.MustParse("nl") // Tag{lang: _nl} // nl
- Norwegian Tag = Raw.MustParse("no") // Tag{lang: _no} // no
- Punjabi Tag = Raw.MustParse("pa") // Tag{lang: _pa} // pa
- Polish Tag = Raw.MustParse("pl") // Tag{lang: _pl} // pl
- Portuguese Tag = Raw.MustParse("pt") // Tag{lang: _pt} // pt
- BrazilianPortuguese Tag = Raw.MustParse("pt-BR") // Tag{lang: _pt, region: _BR} // pt-BR
- EuropeanPortuguese Tag = Raw.MustParse("pt-PT") // Tag{lang: _pt, region: _PT} // pt-PT
- Romanian Tag = Raw.MustParse("ro") // Tag{lang: _ro} // ro
- Russian Tag = Raw.MustParse("ru") // Tag{lang: _ru} // ru
- Sinhala Tag = Raw.MustParse("si") // Tag{lang: _si} // si
- Slovak Tag = Raw.MustParse("sk") // Tag{lang: _sk} // sk
- Slovenian Tag = Raw.MustParse("sl") // Tag{lang: _sl} // sl
- Albanian Tag = Raw.MustParse("sq") // Tag{lang: _sq} // sq
- Serbian Tag = Raw.MustParse("sr") // Tag{lang: _sr} // sr
- SerbianLatin Tag = Raw.MustParse("sr-Latn") // Tag{lang: _sr, script: _Latn} // sr-Latn
- Swedish Tag = Raw.MustParse("sv") // Tag{lang: _sv} // sv
- Swahili Tag = Raw.MustParse("sw") // Tag{lang: _sw} // sw
- Tamil Tag = Raw.MustParse("ta") // Tag{lang: _ta} // ta
- Telugu Tag = Raw.MustParse("te") // Tag{lang: _te} // te
- Thai Tag = Raw.MustParse("th") // Tag{lang: _th} // th
- Turkish Tag = Raw.MustParse("tr") // Tag{lang: _tr} // tr
- Ukrainian Tag = Raw.MustParse("uk") // Tag{lang: _uk} // uk
- Urdu Tag = Raw.MustParse("ur") // Tag{lang: _ur} // ur
- Uzbek Tag = Raw.MustParse("uz") // Tag{lang: _uz} // uz
- Vietnamese Tag = Raw.MustParse("vi") // Tag{lang: _vi} // vi
- Chinese Tag = Raw.MustParse("zh") // Tag{lang: _zh} // zh
- SimplifiedChinese Tag = Raw.MustParse("zh-Hans") // Tag{lang: _zh, script: _Hans} // zh-Hans
- TraditionalChinese Tag = Raw.MustParse("zh-Hant") // Tag{lang: _zh, script: _Hant} // zh-Hant
- Zulu Tag = Raw.MustParse("zu") // Tag{lang: _zu} // zu
+ Afrikaans Tag = Tag{language: afIndex, locale: afIndex}
+ Amharic Tag = Tag{language: amIndex, locale: amIndex}
+ Arabic Tag = Tag{language: arIndex, locale: arIndex}
+ ModernStandardArabic Tag = Tag{language: ar001Index, locale: ar001Index}
+ Azerbaijani Tag = Tag{language: azIndex, locale: azIndex}
+ Bulgarian Tag = Tag{language: bgIndex, locale: bgIndex}
+ Bengali Tag = Tag{language: bnIndex, locale: bnIndex}
+ Catalan Tag = Tag{language: caIndex, locale: caIndex}
+ Czech Tag = Tag{language: csIndex, locale: csIndex}
+ Danish Tag = Tag{language: daIndex, locale: daIndex}
+ German Tag = Tag{language: deIndex, locale: deIndex}
+ Greek Tag = Tag{language: elIndex, locale: elIndex}
+ English Tag = Tag{language: enIndex, locale: enIndex}
+ AmericanEnglish Tag = Tag{language: enUSIndex, locale: enUSIndex}
+ BritishEnglish Tag = Tag{language: enGBIndex, locale: enGBIndex}
+ Spanish Tag = Tag{language: esIndex, locale: esIndex}
+ EuropeanSpanish Tag = Tag{language: esESIndex, locale: esESIndex}
+ LatinAmericanSpanish Tag = Tag{language: es419Index, locale: es419Index}
+ Estonian Tag = Tag{language: etIndex, locale: etIndex}
+ Persian Tag = Tag{language: faIndex, locale: faIndex}
+ Finnish Tag = Tag{language: fiIndex, locale: fiIndex}
+ Filipino Tag = Tag{language: filIndex, locale: filIndex}
+ French Tag = Tag{language: frIndex, locale: frIndex}
+ CanadianFrench Tag = Tag{language: frCAIndex, locale: frCAIndex}
+ Gujarati Tag = Tag{language: guIndex, locale: guIndex}
+ Hebrew Tag = Tag{language: heIndex, locale: heIndex}
+ Hindi Tag = Tag{language: hiIndex, locale: hiIndex}
+ Croatian Tag = Tag{language: hrIndex, locale: hrIndex}
+ Hungarian Tag = Tag{language: huIndex, locale: huIndex}
+ Armenian Tag = Tag{language: hyIndex, locale: hyIndex}
+ Indonesian Tag = Tag{language: idIndex, locale: idIndex}
+ Icelandic Tag = Tag{language: isIndex, locale: isIndex}
+ Italian Tag = Tag{language: itIndex, locale: itIndex}
+ Japanese Tag = Tag{language: jaIndex, locale: jaIndex}
+ Georgian Tag = Tag{language: kaIndex, locale: kaIndex}
+ Kazakh Tag = Tag{language: kkIndex, locale: kkIndex}
+ Khmer Tag = Tag{language: kmIndex, locale: kmIndex}
+ Kannada Tag = Tag{language: knIndex, locale: knIndex}
+ Korean Tag = Tag{language: koIndex, locale: koIndex}
+ Kirghiz Tag = Tag{language: kyIndex, locale: kyIndex}
+ Lao Tag = Tag{language: loIndex, locale: loIndex}
+ Lithuanian Tag = Tag{language: ltIndex, locale: ltIndex}
+ Latvian Tag = Tag{language: lvIndex, locale: lvIndex}
+ Macedonian Tag = Tag{language: mkIndex, locale: mkIndex}
+ Malayalam Tag = Tag{language: mlIndex, locale: mlIndex}
+ Mongolian Tag = Tag{language: mnIndex, locale: mnIndex}
+ Marathi Tag = Tag{language: mrIndex, locale: mrIndex}
+ Malay Tag = Tag{language: msIndex, locale: msIndex}
+ Burmese Tag = Tag{language: myIndex, locale: myIndex}
+ Nepali Tag = Tag{language: neIndex, locale: neIndex}
+ Dutch Tag = Tag{language: nlIndex, locale: nlIndex}
+ Norwegian Tag = Tag{language: noIndex, locale: noIndex}
+ Punjabi Tag = Tag{language: paIndex, locale: paIndex}
+ Polish Tag = Tag{language: plIndex, locale: plIndex}
+ Portuguese Tag = Tag{language: ptIndex, locale: ptIndex}
+ BrazilianPortuguese Tag = Tag{language: ptBRIndex, locale: ptBRIndex}
+ EuropeanPortuguese Tag = Tag{language: ptPTIndex, locale: ptPTIndex}
+ Romanian Tag = Tag{language: roIndex, locale: roIndex}
+ Russian Tag = Tag{language: ruIndex, locale: ruIndex}
+ Sinhala Tag = Tag{language: siIndex, locale: siIndex}
+ Slovak Tag = Tag{language: skIndex, locale: skIndex}
+ Slovenian Tag = Tag{language: slIndex, locale: slIndex}
+ Albanian Tag = Tag{language: sqIndex, locale: sqIndex}
+ Serbian Tag = Tag{language: srIndex, locale: srIndex}
+ SerbianLatin Tag = Tag{language: srLatnIndex, locale: srLatnIndex}
+ Swedish Tag = Tag{language: svIndex, locale: svIndex}
+ Swahili Tag = Tag{language: swIndex, locale: swIndex}
+ Tamil Tag = Tag{language: taIndex, locale: taIndex}
+ Telugu Tag = Tag{language: teIndex, locale: teIndex}
+ Thai Tag = Tag{language: thIndex, locale: thIndex}
+ Turkish Tag = Tag{language: trIndex, locale: trIndex}
+ Ukrainian Tag = Tag{language: ukIndex, locale: ukIndex}
+ Urdu Tag = Tag{language: urIndex, locale: urIndex}
+ Uzbek Tag = Tag{language: uzIndex, locale: uzIndex}
+ Vietnamese Tag = Tag{language: viIndex, locale: viIndex}
+ Chinese Tag = Tag{language: zhIndex, locale: zhIndex}
+ SimplifiedChinese Tag = Tag{language: zhHansIndex, locale: zhHansIndex}
+ TraditionalChinese Tag = Tag{language: zhHantIndex, locale: zhHantIndex}
+ Zulu Tag = Tag{language: zuIndex, locale: zuIndex}
)