Checks the LC_ALL, LC_MESSAGES, LANG precedence with empty and unset
variables, that other categories are not read, and the LANGUAGE rules: its
entries come first under a real locale, empty entries are skipped, and it is
ignored under C, POSIX, C.UTF-8 and when nothing else is set.
Checks that every console language is reached by a tag of its own, that
unrecognised locales (empty, C, POSIX, malformed, languages the console has no
entry for such as lt, he, hi, ca and sr) give English (United States) and are
reported as unrecognised, and that a recognised language with an unknown
region or script takes its main row.
Checks every language of the group, the three Norwegian codes, and that the
Baltic and other Slavic languages the console has no entry for (lt, lv, et, sk,
sl, bg, sr, hr, be, is) are not mapped to a neighbour.
Checks Simplified and Traditional by region (CN, SG, TW, HK, MO), by script
(Hans, Hant), a script that contradicts the region (zh-Hans-TW, zh-Hant-CN),
an unknown script and region falling back to Simplified, and the Mandarin and
Cantonese rows.
Checks the Spain row, every Latin American country row, the es-419 region, the
Brazilian default for a bare pt, the Portuguese territories, and spellings
with case differences, POSIX codesets and an explicit script.
Maps English, French, German, Italian, Dutch and Romanian locales in BCP-47
and POSIX spellings, including the regional rows (en-GB, en-IE, en-AU, en-NZ,
fr-CA) and the regions that fall back to the main row (en-CA, en-IN, fr-BE,
fr-CH, de-AT, de-CH, nl-BE).
Checks that BCP-47 and POSIX spellings of the same locale give the same
language, script and region, that the @latin modifier supplies a script, and
that C, POSIX, empty and malformed texts are refused without writing the tag.
Checks NormalizePosixLocale on codesets, modifiers, the Latn and Cyrl script
modifiers (also where the name already has a script), names that are already
BCP-47, and C, POSIX and empty names, which must normalise to no locale.
Adds a host-only test, system_service_language_locale, for ParseTag: case
normalisation of the language, script and region subtags, the three-digit
region of es-419, variants and extensions that are ignored, and the inputs it
must reject (empty and oversized subtags, one-letter and long languages, the
POSIX underscore and codeset forms) without touching the output tag.