Normalized Locale IDs
The rules for locale identifiers are specified in RFC 4646, and they are pretty loose: order (after the language) and capitalization don't matter.
However, in order to make comparisons possible, I normalize the locale identifiers to be xx-XX-Xxxx.
Also see Unicode's Normalization Process.
Specific Changes
Google Translate: iw
to he
ICU: underscores to dashes,
nn
to no
,
extraneous script removed if non-script version doesn't exist.
Java: underscores to dashes,
reorder script to be at the end,
iw
to he
,
in
to id
,
hi
has no language-only variant, only hi-IN
.Net: no changes