17db96d56Sopenharmony_ci"""Locale support module.
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ciThe module provides low-level access to the C lib's locale APIs and adds high
47db96d56Sopenharmony_cilevel number formatting APIs as well as a locale aliasing engine to complement
57db96d56Sopenharmony_cithese.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ciThe aliasing engine includes support for many commonly used locale names and
87db96d56Sopenharmony_cimaps them to values suitable for passing to the C lib's setlocale() function. It
97db96d56Sopenharmony_cialso includes default encodings for all supported locale names.
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci"""
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ciimport sys
147db96d56Sopenharmony_ciimport encodings
157db96d56Sopenharmony_ciimport encodings.aliases
167db96d56Sopenharmony_ciimport re
177db96d56Sopenharmony_ciimport _collections_abc
187db96d56Sopenharmony_cifrom builtins import str as _builtin_str
197db96d56Sopenharmony_ciimport functools
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci# Try importing the _locale module.
227db96d56Sopenharmony_ci#
237db96d56Sopenharmony_ci# If this fails, fall back on a basic 'C' locale emulation.
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ci# Yuck:  LC_MESSAGES is non-standard:  can't tell whether it exists before
267db96d56Sopenharmony_ci# trying the import.  So __all__ is also fiddled at the end of the file.
277db96d56Sopenharmony_ci__all__ = ["getlocale", "getdefaultlocale", "getpreferredencoding", "Error",
287db96d56Sopenharmony_ci           "setlocale", "resetlocale", "localeconv", "strcoll", "strxfrm",
297db96d56Sopenharmony_ci           "str", "atof", "atoi", "format", "format_string", "currency",
307db96d56Sopenharmony_ci           "normalize", "LC_CTYPE", "LC_COLLATE", "LC_TIME", "LC_MONETARY",
317db96d56Sopenharmony_ci           "LC_NUMERIC", "LC_ALL", "CHAR_MAX", "getencoding"]
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_cidef _strcoll(a,b):
347db96d56Sopenharmony_ci    """ strcoll(string,string) -> int.
357db96d56Sopenharmony_ci        Compares two strings according to the locale.
367db96d56Sopenharmony_ci    """
377db96d56Sopenharmony_ci    return (a > b) - (a < b)
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_cidef _strxfrm(s):
407db96d56Sopenharmony_ci    """ strxfrm(string) -> string.
417db96d56Sopenharmony_ci        Returns a string that behaves for cmp locale-aware.
427db96d56Sopenharmony_ci    """
437db96d56Sopenharmony_ci    return s
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_citry:
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci    from _locale import *
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ciexcept ImportError:
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci    # Locale emulation
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci    CHAR_MAX = 127
547db96d56Sopenharmony_ci    LC_ALL = 6
557db96d56Sopenharmony_ci    LC_COLLATE = 3
567db96d56Sopenharmony_ci    LC_CTYPE = 0
577db96d56Sopenharmony_ci    LC_MESSAGES = 5
587db96d56Sopenharmony_ci    LC_MONETARY = 4
597db96d56Sopenharmony_ci    LC_NUMERIC = 1
607db96d56Sopenharmony_ci    LC_TIME = 2
617db96d56Sopenharmony_ci    Error = ValueError
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci    def localeconv():
647db96d56Sopenharmony_ci        """ localeconv() -> dict.
657db96d56Sopenharmony_ci            Returns numeric and monetary locale-specific parameters.
667db96d56Sopenharmony_ci        """
677db96d56Sopenharmony_ci        # 'C' locale default values
687db96d56Sopenharmony_ci        return {'grouping': [127],
697db96d56Sopenharmony_ci                'currency_symbol': '',
707db96d56Sopenharmony_ci                'n_sign_posn': 127,
717db96d56Sopenharmony_ci                'p_cs_precedes': 127,
727db96d56Sopenharmony_ci                'n_cs_precedes': 127,
737db96d56Sopenharmony_ci                'mon_grouping': [],
747db96d56Sopenharmony_ci                'n_sep_by_space': 127,
757db96d56Sopenharmony_ci                'decimal_point': '.',
767db96d56Sopenharmony_ci                'negative_sign': '',
777db96d56Sopenharmony_ci                'positive_sign': '',
787db96d56Sopenharmony_ci                'p_sep_by_space': 127,
797db96d56Sopenharmony_ci                'int_curr_symbol': '',
807db96d56Sopenharmony_ci                'p_sign_posn': 127,
817db96d56Sopenharmony_ci                'thousands_sep': '',
827db96d56Sopenharmony_ci                'mon_thousands_sep': '',
837db96d56Sopenharmony_ci                'frac_digits': 127,
847db96d56Sopenharmony_ci                'mon_decimal_point': '',
857db96d56Sopenharmony_ci                'int_frac_digits': 127}
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci    def setlocale(category, value=None):
887db96d56Sopenharmony_ci        """ setlocale(integer,string=None) -> string.
897db96d56Sopenharmony_ci            Activates/queries locale processing.
907db96d56Sopenharmony_ci        """
917db96d56Sopenharmony_ci        if value not in (None, '', 'C'):
927db96d56Sopenharmony_ci            raise Error('_locale emulation only supports "C" locale')
937db96d56Sopenharmony_ci        return 'C'
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci# These may or may not exist in _locale, so be sure to set them.
967db96d56Sopenharmony_ciif 'strxfrm' not in globals():
977db96d56Sopenharmony_ci    strxfrm = _strxfrm
987db96d56Sopenharmony_ciif 'strcoll' not in globals():
997db96d56Sopenharmony_ci    strcoll = _strcoll
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci_localeconv = localeconv
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci# With this dict, you can override some items of localeconv's return value.
1057db96d56Sopenharmony_ci# This is useful for testing purposes.
1067db96d56Sopenharmony_ci_override_localeconv = {}
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ci@functools.wraps(_localeconv)
1097db96d56Sopenharmony_cidef localeconv():
1107db96d56Sopenharmony_ci    d = _localeconv()
1117db96d56Sopenharmony_ci    if _override_localeconv:
1127db96d56Sopenharmony_ci        d.update(_override_localeconv)
1137db96d56Sopenharmony_ci    return d
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_ci### Number formatting APIs
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci# Author: Martin von Loewis
1197db96d56Sopenharmony_ci# improved by Georg Brandl
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ci# Iterate over grouping intervals
1227db96d56Sopenharmony_cidef _grouping_intervals(grouping):
1237db96d56Sopenharmony_ci    last_interval = None
1247db96d56Sopenharmony_ci    for interval in grouping:
1257db96d56Sopenharmony_ci        # if grouping is -1, we are done
1267db96d56Sopenharmony_ci        if interval == CHAR_MAX:
1277db96d56Sopenharmony_ci            return
1287db96d56Sopenharmony_ci        # 0: re-use last group ad infinitum
1297db96d56Sopenharmony_ci        if interval == 0:
1307db96d56Sopenharmony_ci            if last_interval is None:
1317db96d56Sopenharmony_ci                raise ValueError("invalid grouping")
1327db96d56Sopenharmony_ci            while True:
1337db96d56Sopenharmony_ci                yield last_interval
1347db96d56Sopenharmony_ci        yield interval
1357db96d56Sopenharmony_ci        last_interval = interval
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci#perform the grouping from right to left
1387db96d56Sopenharmony_cidef _group(s, monetary=False):
1397db96d56Sopenharmony_ci    conv = localeconv()
1407db96d56Sopenharmony_ci    thousands_sep = conv[monetary and 'mon_thousands_sep' or 'thousands_sep']
1417db96d56Sopenharmony_ci    grouping = conv[monetary and 'mon_grouping' or 'grouping']
1427db96d56Sopenharmony_ci    if not grouping:
1437db96d56Sopenharmony_ci        return (s, 0)
1447db96d56Sopenharmony_ci    if s[-1] == ' ':
1457db96d56Sopenharmony_ci        stripped = s.rstrip()
1467db96d56Sopenharmony_ci        right_spaces = s[len(stripped):]
1477db96d56Sopenharmony_ci        s = stripped
1487db96d56Sopenharmony_ci    else:
1497db96d56Sopenharmony_ci        right_spaces = ''
1507db96d56Sopenharmony_ci    left_spaces = ''
1517db96d56Sopenharmony_ci    groups = []
1527db96d56Sopenharmony_ci    for interval in _grouping_intervals(grouping):
1537db96d56Sopenharmony_ci        if not s or s[-1] not in "0123456789":
1547db96d56Sopenharmony_ci            # only non-digit characters remain (sign, spaces)
1557db96d56Sopenharmony_ci            left_spaces = s
1567db96d56Sopenharmony_ci            s = ''
1577db96d56Sopenharmony_ci            break
1587db96d56Sopenharmony_ci        groups.append(s[-interval:])
1597db96d56Sopenharmony_ci        s = s[:-interval]
1607db96d56Sopenharmony_ci    if s:
1617db96d56Sopenharmony_ci        groups.append(s)
1627db96d56Sopenharmony_ci    groups.reverse()
1637db96d56Sopenharmony_ci    return (
1647db96d56Sopenharmony_ci        left_spaces + thousands_sep.join(groups) + right_spaces,
1657db96d56Sopenharmony_ci        len(thousands_sep) * (len(groups) - 1)
1667db96d56Sopenharmony_ci    )
1677db96d56Sopenharmony_ci
1687db96d56Sopenharmony_ci# Strip a given amount of excess padding from the given string
1697db96d56Sopenharmony_cidef _strip_padding(s, amount):
1707db96d56Sopenharmony_ci    lpos = 0
1717db96d56Sopenharmony_ci    while amount and s[lpos] == ' ':
1727db96d56Sopenharmony_ci        lpos += 1
1737db96d56Sopenharmony_ci        amount -= 1
1747db96d56Sopenharmony_ci    rpos = len(s) - 1
1757db96d56Sopenharmony_ci    while amount and s[rpos] == ' ':
1767db96d56Sopenharmony_ci        rpos -= 1
1777db96d56Sopenharmony_ci        amount -= 1
1787db96d56Sopenharmony_ci    return s[lpos:rpos+1]
1797db96d56Sopenharmony_ci
1807db96d56Sopenharmony_ci_percent_re = re.compile(r'%(?:\((?P<key>.*?)\))?'
1817db96d56Sopenharmony_ci                         r'(?P<modifiers>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_cidef _format(percent, value, grouping=False, monetary=False, *additional):
1847db96d56Sopenharmony_ci    if additional:
1857db96d56Sopenharmony_ci        formatted = percent % ((value,) + additional)
1867db96d56Sopenharmony_ci    else:
1877db96d56Sopenharmony_ci        formatted = percent % value
1887db96d56Sopenharmony_ci    if percent[-1] in 'eEfFgGdiu':
1897db96d56Sopenharmony_ci        formatted = _localize(formatted, grouping, monetary)
1907db96d56Sopenharmony_ci    return formatted
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ci# Transform formatted as locale number according to the locale settings
1937db96d56Sopenharmony_cidef _localize(formatted, grouping=False, monetary=False):
1947db96d56Sopenharmony_ci    # floats and decimal ints need special action!
1957db96d56Sopenharmony_ci    if '.' in formatted:
1967db96d56Sopenharmony_ci        seps = 0
1977db96d56Sopenharmony_ci        parts = formatted.split('.')
1987db96d56Sopenharmony_ci        if grouping:
1997db96d56Sopenharmony_ci            parts[0], seps = _group(parts[0], monetary=monetary)
2007db96d56Sopenharmony_ci        decimal_point = localeconv()[monetary and 'mon_decimal_point'
2017db96d56Sopenharmony_ci                                              or 'decimal_point']
2027db96d56Sopenharmony_ci        formatted = decimal_point.join(parts)
2037db96d56Sopenharmony_ci        if seps:
2047db96d56Sopenharmony_ci            formatted = _strip_padding(formatted, seps)
2057db96d56Sopenharmony_ci    else:
2067db96d56Sopenharmony_ci        seps = 0
2077db96d56Sopenharmony_ci        if grouping:
2087db96d56Sopenharmony_ci            formatted, seps = _group(formatted, monetary=monetary)
2097db96d56Sopenharmony_ci        if seps:
2107db96d56Sopenharmony_ci            formatted = _strip_padding(formatted, seps)
2117db96d56Sopenharmony_ci    return formatted
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_cidef format_string(f, val, grouping=False, monetary=False):
2147db96d56Sopenharmony_ci    """Formats a string in the same way that the % formatting would use,
2157db96d56Sopenharmony_ci    but takes the current locale into account.
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ci    Grouping is applied if the third parameter is true.
2187db96d56Sopenharmony_ci    Conversion uses monetary thousands separator and grouping strings if
2197db96d56Sopenharmony_ci    forth parameter monetary is true."""
2207db96d56Sopenharmony_ci    percents = list(_percent_re.finditer(f))
2217db96d56Sopenharmony_ci    new_f = _percent_re.sub('%s', f)
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ci    if isinstance(val, _collections_abc.Mapping):
2247db96d56Sopenharmony_ci        new_val = []
2257db96d56Sopenharmony_ci        for perc in percents:
2267db96d56Sopenharmony_ci            if perc.group()[-1]=='%':
2277db96d56Sopenharmony_ci                new_val.append('%')
2287db96d56Sopenharmony_ci            else:
2297db96d56Sopenharmony_ci                new_val.append(_format(perc.group(), val, grouping, monetary))
2307db96d56Sopenharmony_ci    else:
2317db96d56Sopenharmony_ci        if not isinstance(val, tuple):
2327db96d56Sopenharmony_ci            val = (val,)
2337db96d56Sopenharmony_ci        new_val = []
2347db96d56Sopenharmony_ci        i = 0
2357db96d56Sopenharmony_ci        for perc in percents:
2367db96d56Sopenharmony_ci            if perc.group()[-1]=='%':
2377db96d56Sopenharmony_ci                new_val.append('%')
2387db96d56Sopenharmony_ci            else:
2397db96d56Sopenharmony_ci                starcount = perc.group('modifiers').count('*')
2407db96d56Sopenharmony_ci                new_val.append(_format(perc.group(),
2417db96d56Sopenharmony_ci                                      val[i],
2427db96d56Sopenharmony_ci                                      grouping,
2437db96d56Sopenharmony_ci                                      monetary,
2447db96d56Sopenharmony_ci                                      *val[i+1:i+1+starcount]))
2457db96d56Sopenharmony_ci                i += (1 + starcount)
2467db96d56Sopenharmony_ci    val = tuple(new_val)
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci    return new_f % val
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_cidef format(percent, value, grouping=False, monetary=False, *additional):
2517db96d56Sopenharmony_ci    """Deprecated, use format_string instead."""
2527db96d56Sopenharmony_ci    import warnings
2537db96d56Sopenharmony_ci    warnings.warn(
2547db96d56Sopenharmony_ci        "This method will be removed in a future version of Python. "
2557db96d56Sopenharmony_ci        "Use 'locale.format_string()' instead.",
2567db96d56Sopenharmony_ci        DeprecationWarning, stacklevel=2
2577db96d56Sopenharmony_ci    )
2587db96d56Sopenharmony_ci
2597db96d56Sopenharmony_ci    match = _percent_re.match(percent)
2607db96d56Sopenharmony_ci    if not match or len(match.group())!= len(percent):
2617db96d56Sopenharmony_ci        raise ValueError(("format() must be given exactly one %%char "
2627db96d56Sopenharmony_ci                         "format specifier, %s not valid") % repr(percent))
2637db96d56Sopenharmony_ci    return _format(percent, value, grouping, monetary, *additional)
2647db96d56Sopenharmony_ci
2657db96d56Sopenharmony_cidef currency(val, symbol=True, grouping=False, international=False):
2667db96d56Sopenharmony_ci    """Formats val according to the currency settings
2677db96d56Sopenharmony_ci    in the current locale."""
2687db96d56Sopenharmony_ci    conv = localeconv()
2697db96d56Sopenharmony_ci
2707db96d56Sopenharmony_ci    # check for illegal values
2717db96d56Sopenharmony_ci    digits = conv[international and 'int_frac_digits' or 'frac_digits']
2727db96d56Sopenharmony_ci    if digits == 127:
2737db96d56Sopenharmony_ci        raise ValueError("Currency formatting is not possible using "
2747db96d56Sopenharmony_ci                         "the 'C' locale.")
2757db96d56Sopenharmony_ci
2767db96d56Sopenharmony_ci    s = _localize(f'{abs(val):.{digits}f}', grouping, monetary=True)
2777db96d56Sopenharmony_ci    # '<' and '>' are markers if the sign must be inserted between symbol and value
2787db96d56Sopenharmony_ci    s = '<' + s + '>'
2797db96d56Sopenharmony_ci
2807db96d56Sopenharmony_ci    if symbol:
2817db96d56Sopenharmony_ci        smb = conv[international and 'int_curr_symbol' or 'currency_symbol']
2827db96d56Sopenharmony_ci        precedes = conv[val<0 and 'n_cs_precedes' or 'p_cs_precedes']
2837db96d56Sopenharmony_ci        separated = conv[val<0 and 'n_sep_by_space' or 'p_sep_by_space']
2847db96d56Sopenharmony_ci
2857db96d56Sopenharmony_ci        if precedes:
2867db96d56Sopenharmony_ci            s = smb + (separated and ' ' or '') + s
2877db96d56Sopenharmony_ci        else:
2887db96d56Sopenharmony_ci            if international and smb[-1] == ' ':
2897db96d56Sopenharmony_ci                smb = smb[:-1]
2907db96d56Sopenharmony_ci            s = s + (separated and ' ' or '') + smb
2917db96d56Sopenharmony_ci
2927db96d56Sopenharmony_ci    sign_pos = conv[val<0 and 'n_sign_posn' or 'p_sign_posn']
2937db96d56Sopenharmony_ci    sign = conv[val<0 and 'negative_sign' or 'positive_sign']
2947db96d56Sopenharmony_ci
2957db96d56Sopenharmony_ci    if sign_pos == 0:
2967db96d56Sopenharmony_ci        s = '(' + s + ')'
2977db96d56Sopenharmony_ci    elif sign_pos == 1:
2987db96d56Sopenharmony_ci        s = sign + s
2997db96d56Sopenharmony_ci    elif sign_pos == 2:
3007db96d56Sopenharmony_ci        s = s + sign
3017db96d56Sopenharmony_ci    elif sign_pos == 3:
3027db96d56Sopenharmony_ci        s = s.replace('<', sign)
3037db96d56Sopenharmony_ci    elif sign_pos == 4:
3047db96d56Sopenharmony_ci        s = s.replace('>', sign)
3057db96d56Sopenharmony_ci    else:
3067db96d56Sopenharmony_ci        # the default if nothing specified;
3077db96d56Sopenharmony_ci        # this should be the most fitting sign position
3087db96d56Sopenharmony_ci        s = sign + s
3097db96d56Sopenharmony_ci
3107db96d56Sopenharmony_ci    return s.replace('<', '').replace('>', '')
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_cidef str(val):
3137db96d56Sopenharmony_ci    """Convert float to string, taking the locale into account."""
3147db96d56Sopenharmony_ci    return _format("%.12g", val)
3157db96d56Sopenharmony_ci
3167db96d56Sopenharmony_cidef delocalize(string):
3177db96d56Sopenharmony_ci    "Parses a string as a normalized number according to the locale settings."
3187db96d56Sopenharmony_ci
3197db96d56Sopenharmony_ci    conv = localeconv()
3207db96d56Sopenharmony_ci
3217db96d56Sopenharmony_ci    #First, get rid of the grouping
3227db96d56Sopenharmony_ci    ts = conv['thousands_sep']
3237db96d56Sopenharmony_ci    if ts:
3247db96d56Sopenharmony_ci        string = string.replace(ts, '')
3257db96d56Sopenharmony_ci
3267db96d56Sopenharmony_ci    #next, replace the decimal point with a dot
3277db96d56Sopenharmony_ci    dd = conv['decimal_point']
3287db96d56Sopenharmony_ci    if dd:
3297db96d56Sopenharmony_ci        string = string.replace(dd, '.')
3307db96d56Sopenharmony_ci    return string
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_cidef localize(string, grouping=False, monetary=False):
3337db96d56Sopenharmony_ci    """Parses a string as locale number according to the locale settings."""
3347db96d56Sopenharmony_ci    return _localize(string, grouping, monetary)
3357db96d56Sopenharmony_ci
3367db96d56Sopenharmony_cidef atof(string, func=float):
3377db96d56Sopenharmony_ci    "Parses a string as a float according to the locale settings."
3387db96d56Sopenharmony_ci    return func(delocalize(string))
3397db96d56Sopenharmony_ci
3407db96d56Sopenharmony_cidef atoi(string):
3417db96d56Sopenharmony_ci    "Converts a string to an integer according to the locale settings."
3427db96d56Sopenharmony_ci    return int(delocalize(string))
3437db96d56Sopenharmony_ci
3447db96d56Sopenharmony_cidef _test():
3457db96d56Sopenharmony_ci    setlocale(LC_ALL, "")
3467db96d56Sopenharmony_ci    #do grouping
3477db96d56Sopenharmony_ci    s1 = format_string("%d", 123456789,1)
3487db96d56Sopenharmony_ci    print(s1, "is", atoi(s1))
3497db96d56Sopenharmony_ci    #standard formatting
3507db96d56Sopenharmony_ci    s1 = str(3.14)
3517db96d56Sopenharmony_ci    print(s1, "is", atof(s1))
3527db96d56Sopenharmony_ci
3537db96d56Sopenharmony_ci### Locale name aliasing engine
3547db96d56Sopenharmony_ci
3557db96d56Sopenharmony_ci# Author: Marc-Andre Lemburg, mal@lemburg.com
3567db96d56Sopenharmony_ci# Various tweaks by Fredrik Lundh <fredrik@pythonware.com>
3577db96d56Sopenharmony_ci
3587db96d56Sopenharmony_ci# store away the low-level version of setlocale (it's
3597db96d56Sopenharmony_ci# overridden below)
3607db96d56Sopenharmony_ci_setlocale = setlocale
3617db96d56Sopenharmony_ci
3627db96d56Sopenharmony_cidef _replace_encoding(code, encoding):
3637db96d56Sopenharmony_ci    if '.' in code:
3647db96d56Sopenharmony_ci        langname = code[:code.index('.')]
3657db96d56Sopenharmony_ci    else:
3667db96d56Sopenharmony_ci        langname = code
3677db96d56Sopenharmony_ci    # Convert the encoding to a C lib compatible encoding string
3687db96d56Sopenharmony_ci    norm_encoding = encodings.normalize_encoding(encoding)
3697db96d56Sopenharmony_ci    #print('norm encoding: %r' % norm_encoding)
3707db96d56Sopenharmony_ci    norm_encoding = encodings.aliases.aliases.get(norm_encoding.lower(),
3717db96d56Sopenharmony_ci                                                  norm_encoding)
3727db96d56Sopenharmony_ci    #print('aliased encoding: %r' % norm_encoding)
3737db96d56Sopenharmony_ci    encoding = norm_encoding
3747db96d56Sopenharmony_ci    norm_encoding = norm_encoding.lower()
3757db96d56Sopenharmony_ci    if norm_encoding in locale_encoding_alias:
3767db96d56Sopenharmony_ci        encoding = locale_encoding_alias[norm_encoding]
3777db96d56Sopenharmony_ci    else:
3787db96d56Sopenharmony_ci        norm_encoding = norm_encoding.replace('_', '')
3797db96d56Sopenharmony_ci        norm_encoding = norm_encoding.replace('-', '')
3807db96d56Sopenharmony_ci        if norm_encoding in locale_encoding_alias:
3817db96d56Sopenharmony_ci            encoding = locale_encoding_alias[norm_encoding]
3827db96d56Sopenharmony_ci    #print('found encoding %r' % encoding)
3837db96d56Sopenharmony_ci    return langname + '.' + encoding
3847db96d56Sopenharmony_ci
3857db96d56Sopenharmony_cidef _append_modifier(code, modifier):
3867db96d56Sopenharmony_ci    if modifier == 'euro':
3877db96d56Sopenharmony_ci        if '.' not in code:
3887db96d56Sopenharmony_ci            return code + '.ISO8859-15'
3897db96d56Sopenharmony_ci        _, _, encoding = code.partition('.')
3907db96d56Sopenharmony_ci        if encoding in ('ISO8859-15', 'UTF-8'):
3917db96d56Sopenharmony_ci            return code
3927db96d56Sopenharmony_ci        if encoding == 'ISO8859-1':
3937db96d56Sopenharmony_ci            return _replace_encoding(code, 'ISO8859-15')
3947db96d56Sopenharmony_ci    return code + '@' + modifier
3957db96d56Sopenharmony_ci
3967db96d56Sopenharmony_cidef normalize(localename):
3977db96d56Sopenharmony_ci
3987db96d56Sopenharmony_ci    """ Returns a normalized locale code for the given locale
3997db96d56Sopenharmony_ci        name.
4007db96d56Sopenharmony_ci
4017db96d56Sopenharmony_ci        The returned locale code is formatted for use with
4027db96d56Sopenharmony_ci        setlocale().
4037db96d56Sopenharmony_ci
4047db96d56Sopenharmony_ci        If normalization fails, the original name is returned
4057db96d56Sopenharmony_ci        unchanged.
4067db96d56Sopenharmony_ci
4077db96d56Sopenharmony_ci        If the given encoding is not known, the function defaults to
4087db96d56Sopenharmony_ci        the default encoding for the locale code just like setlocale()
4097db96d56Sopenharmony_ci        does.
4107db96d56Sopenharmony_ci
4117db96d56Sopenharmony_ci    """
4127db96d56Sopenharmony_ci    # Normalize the locale name and extract the encoding and modifier
4137db96d56Sopenharmony_ci    code = localename.lower()
4147db96d56Sopenharmony_ci    if ':' in code:
4157db96d56Sopenharmony_ci        # ':' is sometimes used as encoding delimiter.
4167db96d56Sopenharmony_ci        code = code.replace(':', '.')
4177db96d56Sopenharmony_ci    if '@' in code:
4187db96d56Sopenharmony_ci        code, modifier = code.split('@', 1)
4197db96d56Sopenharmony_ci    else:
4207db96d56Sopenharmony_ci        modifier = ''
4217db96d56Sopenharmony_ci    if '.' in code:
4227db96d56Sopenharmony_ci        langname, encoding = code.split('.')[:2]
4237db96d56Sopenharmony_ci    else:
4247db96d56Sopenharmony_ci        langname = code
4257db96d56Sopenharmony_ci        encoding = ''
4267db96d56Sopenharmony_ci
4277db96d56Sopenharmony_ci    # First lookup: fullname (possibly with encoding and modifier)
4287db96d56Sopenharmony_ci    lang_enc = langname
4297db96d56Sopenharmony_ci    if encoding:
4307db96d56Sopenharmony_ci        norm_encoding = encoding.replace('-', '')
4317db96d56Sopenharmony_ci        norm_encoding = norm_encoding.replace('_', '')
4327db96d56Sopenharmony_ci        lang_enc += '.' + norm_encoding
4337db96d56Sopenharmony_ci    lookup_name = lang_enc
4347db96d56Sopenharmony_ci    if modifier:
4357db96d56Sopenharmony_ci        lookup_name += '@' + modifier
4367db96d56Sopenharmony_ci    code = locale_alias.get(lookup_name, None)
4377db96d56Sopenharmony_ci    if code is not None:
4387db96d56Sopenharmony_ci        return code
4397db96d56Sopenharmony_ci    #print('first lookup failed')
4407db96d56Sopenharmony_ci
4417db96d56Sopenharmony_ci    if modifier:
4427db96d56Sopenharmony_ci        # Second try: fullname without modifier (possibly with encoding)
4437db96d56Sopenharmony_ci        code = locale_alias.get(lang_enc, None)
4447db96d56Sopenharmony_ci        if code is not None:
4457db96d56Sopenharmony_ci            #print('lookup without modifier succeeded')
4467db96d56Sopenharmony_ci            if '@' not in code:
4477db96d56Sopenharmony_ci                return _append_modifier(code, modifier)
4487db96d56Sopenharmony_ci            if code.split('@', 1)[1].lower() == modifier:
4497db96d56Sopenharmony_ci                return code
4507db96d56Sopenharmony_ci        #print('second lookup failed')
4517db96d56Sopenharmony_ci
4527db96d56Sopenharmony_ci    if encoding:
4537db96d56Sopenharmony_ci        # Third try: langname (without encoding, possibly with modifier)
4547db96d56Sopenharmony_ci        lookup_name = langname
4557db96d56Sopenharmony_ci        if modifier:
4567db96d56Sopenharmony_ci            lookup_name += '@' + modifier
4577db96d56Sopenharmony_ci        code = locale_alias.get(lookup_name, None)
4587db96d56Sopenharmony_ci        if code is not None:
4597db96d56Sopenharmony_ci            #print('lookup without encoding succeeded')
4607db96d56Sopenharmony_ci            if '@' not in code:
4617db96d56Sopenharmony_ci                return _replace_encoding(code, encoding)
4627db96d56Sopenharmony_ci            code, modifier = code.split('@', 1)
4637db96d56Sopenharmony_ci            return _replace_encoding(code, encoding) + '@' + modifier
4647db96d56Sopenharmony_ci
4657db96d56Sopenharmony_ci        if modifier:
4667db96d56Sopenharmony_ci            # Fourth try: langname (without encoding and modifier)
4677db96d56Sopenharmony_ci            code = locale_alias.get(langname, None)
4687db96d56Sopenharmony_ci            if code is not None:
4697db96d56Sopenharmony_ci                #print('lookup without modifier and encoding succeeded')
4707db96d56Sopenharmony_ci                if '@' not in code:
4717db96d56Sopenharmony_ci                    code = _replace_encoding(code, encoding)
4727db96d56Sopenharmony_ci                    return _append_modifier(code, modifier)
4737db96d56Sopenharmony_ci                code, defmod = code.split('@', 1)
4747db96d56Sopenharmony_ci                if defmod.lower() == modifier:
4757db96d56Sopenharmony_ci                    return _replace_encoding(code, encoding) + '@' + defmod
4767db96d56Sopenharmony_ci
4777db96d56Sopenharmony_ci    return localename
4787db96d56Sopenharmony_ci
4797db96d56Sopenharmony_cidef _parse_localename(localename):
4807db96d56Sopenharmony_ci
4817db96d56Sopenharmony_ci    """ Parses the locale code for localename and returns the
4827db96d56Sopenharmony_ci        result as tuple (language code, encoding).
4837db96d56Sopenharmony_ci
4847db96d56Sopenharmony_ci        The localename is normalized and passed through the locale
4857db96d56Sopenharmony_ci        alias engine. A ValueError is raised in case the locale name
4867db96d56Sopenharmony_ci        cannot be parsed.
4877db96d56Sopenharmony_ci
4887db96d56Sopenharmony_ci        The language code corresponds to RFC 1766.  code and encoding
4897db96d56Sopenharmony_ci        can be None in case the values cannot be determined or are
4907db96d56Sopenharmony_ci        unknown to this implementation.
4917db96d56Sopenharmony_ci
4927db96d56Sopenharmony_ci    """
4937db96d56Sopenharmony_ci    code = normalize(localename)
4947db96d56Sopenharmony_ci    if '@' in code:
4957db96d56Sopenharmony_ci        # Deal with locale modifiers
4967db96d56Sopenharmony_ci        code, modifier = code.split('@', 1)
4977db96d56Sopenharmony_ci        if modifier == 'euro' and '.' not in code:
4987db96d56Sopenharmony_ci            # Assume Latin-9 for @euro locales. This is bogus,
4997db96d56Sopenharmony_ci            # since some systems may use other encodings for these
5007db96d56Sopenharmony_ci            # locales. Also, we ignore other modifiers.
5017db96d56Sopenharmony_ci            return code, 'iso-8859-15'
5027db96d56Sopenharmony_ci
5037db96d56Sopenharmony_ci    if '.' in code:
5047db96d56Sopenharmony_ci        return tuple(code.split('.')[:2])
5057db96d56Sopenharmony_ci    elif code == 'C':
5067db96d56Sopenharmony_ci        return None, None
5077db96d56Sopenharmony_ci    elif code == 'UTF-8':
5087db96d56Sopenharmony_ci        # On macOS "LC_CTYPE=UTF-8" is a valid locale setting
5097db96d56Sopenharmony_ci        # for getting UTF-8 handling for text.
5107db96d56Sopenharmony_ci        return None, 'UTF-8'
5117db96d56Sopenharmony_ci    raise ValueError('unknown locale: %s' % localename)
5127db96d56Sopenharmony_ci
5137db96d56Sopenharmony_cidef _build_localename(localetuple):
5147db96d56Sopenharmony_ci
5157db96d56Sopenharmony_ci    """ Builds a locale code from the given tuple (language code,
5167db96d56Sopenharmony_ci        encoding).
5177db96d56Sopenharmony_ci
5187db96d56Sopenharmony_ci        No aliasing or normalizing takes place.
5197db96d56Sopenharmony_ci
5207db96d56Sopenharmony_ci    """
5217db96d56Sopenharmony_ci    try:
5227db96d56Sopenharmony_ci        language, encoding = localetuple
5237db96d56Sopenharmony_ci
5247db96d56Sopenharmony_ci        if language is None:
5257db96d56Sopenharmony_ci            language = 'C'
5267db96d56Sopenharmony_ci        if encoding is None:
5277db96d56Sopenharmony_ci            return language
5287db96d56Sopenharmony_ci        else:
5297db96d56Sopenharmony_ci            return language + '.' + encoding
5307db96d56Sopenharmony_ci    except (TypeError, ValueError):
5317db96d56Sopenharmony_ci        raise TypeError('Locale must be None, a string, or an iterable of '
5327db96d56Sopenharmony_ci                        'two strings -- language code, encoding.') from None
5337db96d56Sopenharmony_ci
5347db96d56Sopenharmony_cidef getdefaultlocale(envvars=('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')):
5357db96d56Sopenharmony_ci
5367db96d56Sopenharmony_ci    """ Tries to determine the default locale settings and returns
5377db96d56Sopenharmony_ci        them as tuple (language code, encoding).
5387db96d56Sopenharmony_ci
5397db96d56Sopenharmony_ci        According to POSIX, a program which has not called
5407db96d56Sopenharmony_ci        setlocale(LC_ALL, "") runs using the portable 'C' locale.
5417db96d56Sopenharmony_ci        Calling setlocale(LC_ALL, "") lets it use the default locale as
5427db96d56Sopenharmony_ci        defined by the LANG variable. Since we don't want to interfere
5437db96d56Sopenharmony_ci        with the current locale setting we thus emulate the behavior
5447db96d56Sopenharmony_ci        in the way described above.
5457db96d56Sopenharmony_ci
5467db96d56Sopenharmony_ci        To maintain compatibility with other platforms, not only the
5477db96d56Sopenharmony_ci        LANG variable is tested, but a list of variables given as
5487db96d56Sopenharmony_ci        envvars parameter. The first found to be defined will be
5497db96d56Sopenharmony_ci        used. envvars defaults to the search path used in GNU gettext;
5507db96d56Sopenharmony_ci        it must always contain the variable name 'LANG'.
5517db96d56Sopenharmony_ci
5527db96d56Sopenharmony_ci        Except for the code 'C', the language code corresponds to RFC
5537db96d56Sopenharmony_ci        1766.  code and encoding can be None in case the values cannot
5547db96d56Sopenharmony_ci        be determined.
5557db96d56Sopenharmony_ci
5567db96d56Sopenharmony_ci    """
5577db96d56Sopenharmony_ci
5587db96d56Sopenharmony_ci    import warnings
5597db96d56Sopenharmony_ci    warnings.warn(
5607db96d56Sopenharmony_ci        "Use setlocale(), getencoding() and getlocale() instead",
5617db96d56Sopenharmony_ci        DeprecationWarning, stacklevel=2
5627db96d56Sopenharmony_ci    )
5637db96d56Sopenharmony_ci
5647db96d56Sopenharmony_ci    try:
5657db96d56Sopenharmony_ci        # check if it's supported by the _locale module
5667db96d56Sopenharmony_ci        import _locale
5677db96d56Sopenharmony_ci        code, encoding = _locale._getdefaultlocale()
5687db96d56Sopenharmony_ci    except (ImportError, AttributeError):
5697db96d56Sopenharmony_ci        pass
5707db96d56Sopenharmony_ci    else:
5717db96d56Sopenharmony_ci        # make sure the code/encoding values are valid
5727db96d56Sopenharmony_ci        if sys.platform == "win32" and code and code[:2] == "0x":
5737db96d56Sopenharmony_ci            # map windows language identifier to language name
5747db96d56Sopenharmony_ci            code = windows_locale.get(int(code, 0))
5757db96d56Sopenharmony_ci        # ...add other platform-specific processing here, if
5767db96d56Sopenharmony_ci        # necessary...
5777db96d56Sopenharmony_ci        return code, encoding
5787db96d56Sopenharmony_ci
5797db96d56Sopenharmony_ci    # fall back on POSIX behaviour
5807db96d56Sopenharmony_ci    import os
5817db96d56Sopenharmony_ci    lookup = os.environ.get
5827db96d56Sopenharmony_ci    for variable in envvars:
5837db96d56Sopenharmony_ci        localename = lookup(variable,None)
5847db96d56Sopenharmony_ci        if localename:
5857db96d56Sopenharmony_ci            if variable == 'LANGUAGE':
5867db96d56Sopenharmony_ci                localename = localename.split(':')[0]
5877db96d56Sopenharmony_ci            break
5887db96d56Sopenharmony_ci    else:
5897db96d56Sopenharmony_ci        localename = 'C'
5907db96d56Sopenharmony_ci    return _parse_localename(localename)
5917db96d56Sopenharmony_ci
5927db96d56Sopenharmony_ci
5937db96d56Sopenharmony_cidef getlocale(category=LC_CTYPE):
5947db96d56Sopenharmony_ci
5957db96d56Sopenharmony_ci    """ Returns the current setting for the given locale category as
5967db96d56Sopenharmony_ci        tuple (language code, encoding).
5977db96d56Sopenharmony_ci
5987db96d56Sopenharmony_ci        category may be one of the LC_* value except LC_ALL. It
5997db96d56Sopenharmony_ci        defaults to LC_CTYPE.
6007db96d56Sopenharmony_ci
6017db96d56Sopenharmony_ci        Except for the code 'C', the language code corresponds to RFC
6027db96d56Sopenharmony_ci        1766.  code and encoding can be None in case the values cannot
6037db96d56Sopenharmony_ci        be determined.
6047db96d56Sopenharmony_ci
6057db96d56Sopenharmony_ci    """
6067db96d56Sopenharmony_ci    localename = _setlocale(category)
6077db96d56Sopenharmony_ci    if category == LC_ALL and ';' in localename:
6087db96d56Sopenharmony_ci        raise TypeError('category LC_ALL is not supported')
6097db96d56Sopenharmony_ci    return _parse_localename(localename)
6107db96d56Sopenharmony_ci
6117db96d56Sopenharmony_cidef setlocale(category, locale=None):
6127db96d56Sopenharmony_ci
6137db96d56Sopenharmony_ci    """ Set the locale for the given category.  The locale can be
6147db96d56Sopenharmony_ci        a string, an iterable of two strings (language code and encoding),
6157db96d56Sopenharmony_ci        or None.
6167db96d56Sopenharmony_ci
6177db96d56Sopenharmony_ci        Iterables are converted to strings using the locale aliasing
6187db96d56Sopenharmony_ci        engine.  Locale strings are passed directly to the C lib.
6197db96d56Sopenharmony_ci
6207db96d56Sopenharmony_ci        category may be given as one of the LC_* values.
6217db96d56Sopenharmony_ci
6227db96d56Sopenharmony_ci    """
6237db96d56Sopenharmony_ci    if locale and not isinstance(locale, _builtin_str):
6247db96d56Sopenharmony_ci        # convert to string
6257db96d56Sopenharmony_ci        locale = normalize(_build_localename(locale))
6267db96d56Sopenharmony_ci    return _setlocale(category, locale)
6277db96d56Sopenharmony_ci
6287db96d56Sopenharmony_cidef resetlocale(category=LC_ALL):
6297db96d56Sopenharmony_ci
6307db96d56Sopenharmony_ci    """ Sets the locale for category to the default setting.
6317db96d56Sopenharmony_ci
6327db96d56Sopenharmony_ci        The default setting is determined by calling
6337db96d56Sopenharmony_ci        getdefaultlocale(). category defaults to LC_ALL.
6347db96d56Sopenharmony_ci
6357db96d56Sopenharmony_ci    """
6367db96d56Sopenharmony_ci    import warnings
6377db96d56Sopenharmony_ci    warnings.warn(
6387db96d56Sopenharmony_ci        'Use locale.setlocale(locale.LC_ALL, "") instead',
6397db96d56Sopenharmony_ci        DeprecationWarning, stacklevel=2
6407db96d56Sopenharmony_ci    )
6417db96d56Sopenharmony_ci
6427db96d56Sopenharmony_ci    with warnings.catch_warnings():
6437db96d56Sopenharmony_ci        warnings.simplefilter('ignore', category=DeprecationWarning)
6447db96d56Sopenharmony_ci        loc = getdefaultlocale()
6457db96d56Sopenharmony_ci
6467db96d56Sopenharmony_ci    _setlocale(category, _build_localename(loc))
6477db96d56Sopenharmony_ci
6487db96d56Sopenharmony_ci
6497db96d56Sopenharmony_citry:
6507db96d56Sopenharmony_ci    from _locale import getencoding
6517db96d56Sopenharmony_ciexcept ImportError:
6527db96d56Sopenharmony_ci    def getencoding():
6537db96d56Sopenharmony_ci        if hasattr(sys, 'getandroidapilevel'):
6547db96d56Sopenharmony_ci            # On Android langinfo.h and CODESET are missing, and UTF-8 is
6557db96d56Sopenharmony_ci            # always used in mbstowcs() and wcstombs().
6567db96d56Sopenharmony_ci            return 'utf-8'
6577db96d56Sopenharmony_ci        encoding = getdefaultlocale()[1]
6587db96d56Sopenharmony_ci        if encoding is None:
6597db96d56Sopenharmony_ci            # LANG not set, default to UTF-8
6607db96d56Sopenharmony_ci            encoding = 'utf-8'
6617db96d56Sopenharmony_ci        return encoding
6627db96d56Sopenharmony_ci
6637db96d56Sopenharmony_citry:
6647db96d56Sopenharmony_ci    CODESET
6657db96d56Sopenharmony_ciexcept NameError:
6667db96d56Sopenharmony_ci    def getpreferredencoding(do_setlocale=True):
6677db96d56Sopenharmony_ci        """Return the charset that the user is likely using."""
6687db96d56Sopenharmony_ci        if sys.flags.warn_default_encoding:
6697db96d56Sopenharmony_ci            import warnings
6707db96d56Sopenharmony_ci            warnings.warn(
6717db96d56Sopenharmony_ci                "UTF-8 Mode affects locale.getpreferredencoding(). Consider locale.getencoding() instead.",
6727db96d56Sopenharmony_ci                EncodingWarning, 2)
6737db96d56Sopenharmony_ci        if sys.flags.utf8_mode:
6747db96d56Sopenharmony_ci            return 'utf-8'
6757db96d56Sopenharmony_ci        return getencoding()
6767db96d56Sopenharmony_cielse:
6777db96d56Sopenharmony_ci    # On Unix, if CODESET is available, use that.
6787db96d56Sopenharmony_ci    def getpreferredencoding(do_setlocale=True):
6797db96d56Sopenharmony_ci        """Return the charset that the user is likely using,
6807db96d56Sopenharmony_ci        according to the system configuration."""
6817db96d56Sopenharmony_ci
6827db96d56Sopenharmony_ci        if sys.flags.warn_default_encoding:
6837db96d56Sopenharmony_ci            import warnings
6847db96d56Sopenharmony_ci            warnings.warn(
6857db96d56Sopenharmony_ci                "UTF-8 Mode affects locale.getpreferredencoding(). Consider locale.getencoding() instead.",
6867db96d56Sopenharmony_ci                EncodingWarning, 2)
6877db96d56Sopenharmony_ci        if sys.flags.utf8_mode:
6887db96d56Sopenharmony_ci            return 'utf-8'
6897db96d56Sopenharmony_ci
6907db96d56Sopenharmony_ci        if not do_setlocale:
6917db96d56Sopenharmony_ci            return getencoding()
6927db96d56Sopenharmony_ci
6937db96d56Sopenharmony_ci        old_loc = setlocale(LC_CTYPE)
6947db96d56Sopenharmony_ci        try:
6957db96d56Sopenharmony_ci            try:
6967db96d56Sopenharmony_ci                setlocale(LC_CTYPE, "")
6977db96d56Sopenharmony_ci            except Error:
6987db96d56Sopenharmony_ci                pass
6997db96d56Sopenharmony_ci            return getencoding()
7007db96d56Sopenharmony_ci        finally:
7017db96d56Sopenharmony_ci            setlocale(LC_CTYPE, old_loc)
7027db96d56Sopenharmony_ci
7037db96d56Sopenharmony_ci
7047db96d56Sopenharmony_ci### Database
7057db96d56Sopenharmony_ci#
7067db96d56Sopenharmony_ci# The following data was extracted from the locale.alias file which
7077db96d56Sopenharmony_ci# comes with X11 and then hand edited removing the explicit encoding
7087db96d56Sopenharmony_ci# definitions and adding some more aliases. The file is usually
7097db96d56Sopenharmony_ci# available as /usr/lib/X11/locale/locale.alias.
7107db96d56Sopenharmony_ci#
7117db96d56Sopenharmony_ci
7127db96d56Sopenharmony_ci#
7137db96d56Sopenharmony_ci# The local_encoding_alias table maps lowercase encoding alias names
7147db96d56Sopenharmony_ci# to C locale encoding names (case-sensitive). Note that normalize()
7157db96d56Sopenharmony_ci# first looks up the encoding in the encodings.aliases dictionary and
7167db96d56Sopenharmony_ci# then applies this mapping to find the correct C lib name for the
7177db96d56Sopenharmony_ci# encoding.
7187db96d56Sopenharmony_ci#
7197db96d56Sopenharmony_cilocale_encoding_alias = {
7207db96d56Sopenharmony_ci
7217db96d56Sopenharmony_ci    # Mappings for non-standard encoding names used in locale names
7227db96d56Sopenharmony_ci    '437':                          'C',
7237db96d56Sopenharmony_ci    'c':                            'C',
7247db96d56Sopenharmony_ci    'en':                           'ISO8859-1',
7257db96d56Sopenharmony_ci    'jis':                          'JIS7',
7267db96d56Sopenharmony_ci    'jis7':                         'JIS7',
7277db96d56Sopenharmony_ci    'ajec':                         'eucJP',
7287db96d56Sopenharmony_ci    'koi8c':                        'KOI8-C',
7297db96d56Sopenharmony_ci    'microsoftcp1251':              'CP1251',
7307db96d56Sopenharmony_ci    'microsoftcp1255':              'CP1255',
7317db96d56Sopenharmony_ci    'microsoftcp1256':              'CP1256',
7327db96d56Sopenharmony_ci    '88591':                        'ISO8859-1',
7337db96d56Sopenharmony_ci    '88592':                        'ISO8859-2',
7347db96d56Sopenharmony_ci    '88595':                        'ISO8859-5',
7357db96d56Sopenharmony_ci    '885915':                       'ISO8859-15',
7367db96d56Sopenharmony_ci
7377db96d56Sopenharmony_ci    # Mappings from Python codec names to C lib encoding names
7387db96d56Sopenharmony_ci    'ascii':                        'ISO8859-1',
7397db96d56Sopenharmony_ci    'latin_1':                      'ISO8859-1',
7407db96d56Sopenharmony_ci    'iso8859_1':                    'ISO8859-1',
7417db96d56Sopenharmony_ci    'iso8859_10':                   'ISO8859-10',
7427db96d56Sopenharmony_ci    'iso8859_11':                   'ISO8859-11',
7437db96d56Sopenharmony_ci    'iso8859_13':                   'ISO8859-13',
7447db96d56Sopenharmony_ci    'iso8859_14':                   'ISO8859-14',
7457db96d56Sopenharmony_ci    'iso8859_15':                   'ISO8859-15',
7467db96d56Sopenharmony_ci    'iso8859_16':                   'ISO8859-16',
7477db96d56Sopenharmony_ci    'iso8859_2':                    'ISO8859-2',
7487db96d56Sopenharmony_ci    'iso8859_3':                    'ISO8859-3',
7497db96d56Sopenharmony_ci    'iso8859_4':                    'ISO8859-4',
7507db96d56Sopenharmony_ci    'iso8859_5':                    'ISO8859-5',
7517db96d56Sopenharmony_ci    'iso8859_6':                    'ISO8859-6',
7527db96d56Sopenharmony_ci    'iso8859_7':                    'ISO8859-7',
7537db96d56Sopenharmony_ci    'iso8859_8':                    'ISO8859-8',
7547db96d56Sopenharmony_ci    'iso8859_9':                    'ISO8859-9',
7557db96d56Sopenharmony_ci    'iso2022_jp':                   'JIS7',
7567db96d56Sopenharmony_ci    'shift_jis':                    'SJIS',
7577db96d56Sopenharmony_ci    'tactis':                       'TACTIS',
7587db96d56Sopenharmony_ci    'euc_jp':                       'eucJP',
7597db96d56Sopenharmony_ci    'euc_kr':                       'eucKR',
7607db96d56Sopenharmony_ci    'utf_8':                        'UTF-8',
7617db96d56Sopenharmony_ci    'koi8_r':                       'KOI8-R',
7627db96d56Sopenharmony_ci    'koi8_t':                       'KOI8-T',
7637db96d56Sopenharmony_ci    'koi8_u':                       'KOI8-U',
7647db96d56Sopenharmony_ci    'kz1048':                       'RK1048',
7657db96d56Sopenharmony_ci    'cp1251':                       'CP1251',
7667db96d56Sopenharmony_ci    'cp1255':                       'CP1255',
7677db96d56Sopenharmony_ci    'cp1256':                       'CP1256',
7687db96d56Sopenharmony_ci
7697db96d56Sopenharmony_ci    # XXX This list is still incomplete. If you know more
7707db96d56Sopenharmony_ci    # mappings, please file a bug report. Thanks.
7717db96d56Sopenharmony_ci}
7727db96d56Sopenharmony_ci
7737db96d56Sopenharmony_cifor k, v in sorted(locale_encoding_alias.items()):
7747db96d56Sopenharmony_ci    k = k.replace('_', '')
7757db96d56Sopenharmony_ci    locale_encoding_alias.setdefault(k, v)
7767db96d56Sopenharmony_cidel k, v
7777db96d56Sopenharmony_ci
7787db96d56Sopenharmony_ci#
7797db96d56Sopenharmony_ci# The locale_alias table maps lowercase alias names to C locale names
7807db96d56Sopenharmony_ci# (case-sensitive). Encodings are always separated from the locale
7817db96d56Sopenharmony_ci# name using a dot ('.'); they should only be given in case the
7827db96d56Sopenharmony_ci# language name is needed to interpret the given encoding alias
7837db96d56Sopenharmony_ci# correctly (CJK codes often have this need).
7847db96d56Sopenharmony_ci#
7857db96d56Sopenharmony_ci# Note that the normalize() function which uses this tables
7867db96d56Sopenharmony_ci# removes '_' and '-' characters from the encoding part of the
7877db96d56Sopenharmony_ci# locale name before doing the lookup. This saves a lot of
7887db96d56Sopenharmony_ci# space in the table.
7897db96d56Sopenharmony_ci#
7907db96d56Sopenharmony_ci# MAL 2004-12-10:
7917db96d56Sopenharmony_ci# Updated alias mapping to most recent locale.alias file
7927db96d56Sopenharmony_ci# from X.org distribution using makelocalealias.py.
7937db96d56Sopenharmony_ci#
7947db96d56Sopenharmony_ci# These are the differences compared to the old mapping (Python 2.4
7957db96d56Sopenharmony_ci# and older):
7967db96d56Sopenharmony_ci#
7977db96d56Sopenharmony_ci#    updated 'bg' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251'
7987db96d56Sopenharmony_ci#    updated 'bg_bg' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251'
7997db96d56Sopenharmony_ci#    updated 'bulgarian' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251'
8007db96d56Sopenharmony_ci#    updated 'cz' -> 'cz_CZ.ISO8859-2' to 'cs_CZ.ISO8859-2'
8017db96d56Sopenharmony_ci#    updated 'cz_cz' -> 'cz_CZ.ISO8859-2' to 'cs_CZ.ISO8859-2'
8027db96d56Sopenharmony_ci#    updated 'czech' -> 'cs_CS.ISO8859-2' to 'cs_CZ.ISO8859-2'
8037db96d56Sopenharmony_ci#    updated 'dutch' -> 'nl_BE.ISO8859-1' to 'nl_NL.ISO8859-1'
8047db96d56Sopenharmony_ci#    updated 'et' -> 'et_EE.ISO8859-4' to 'et_EE.ISO8859-15'
8057db96d56Sopenharmony_ci#    updated 'et_ee' -> 'et_EE.ISO8859-4' to 'et_EE.ISO8859-15'
8067db96d56Sopenharmony_ci#    updated 'fi' -> 'fi_FI.ISO8859-1' to 'fi_FI.ISO8859-15'
8077db96d56Sopenharmony_ci#    updated 'fi_fi' -> 'fi_FI.ISO8859-1' to 'fi_FI.ISO8859-15'
8087db96d56Sopenharmony_ci#    updated 'iw' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8'
8097db96d56Sopenharmony_ci#    updated 'iw_il' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8'
8107db96d56Sopenharmony_ci#    updated 'japanese' -> 'ja_JP.SJIS' to 'ja_JP.eucJP'
8117db96d56Sopenharmony_ci#    updated 'lt' -> 'lt_LT.ISO8859-4' to 'lt_LT.ISO8859-13'
8127db96d56Sopenharmony_ci#    updated 'lv' -> 'lv_LV.ISO8859-4' to 'lv_LV.ISO8859-13'
8137db96d56Sopenharmony_ci#    updated 'sl' -> 'sl_CS.ISO8859-2' to 'sl_SI.ISO8859-2'
8147db96d56Sopenharmony_ci#    updated 'slovene' -> 'sl_CS.ISO8859-2' to 'sl_SI.ISO8859-2'
8157db96d56Sopenharmony_ci#    updated 'th_th' -> 'th_TH.TACTIS' to 'th_TH.ISO8859-11'
8167db96d56Sopenharmony_ci#    updated 'zh_cn' -> 'zh_CN.eucCN' to 'zh_CN.gb2312'
8177db96d56Sopenharmony_ci#    updated 'zh_cn.big5' -> 'zh_TW.eucTW' to 'zh_TW.big5'
8187db96d56Sopenharmony_ci#    updated 'zh_tw' -> 'zh_TW.eucTW' to 'zh_TW.big5'
8197db96d56Sopenharmony_ci#
8207db96d56Sopenharmony_ci# MAL 2008-05-30:
8217db96d56Sopenharmony_ci# Updated alias mapping to most recent locale.alias file
8227db96d56Sopenharmony_ci# from X.org distribution using makelocalealias.py.
8237db96d56Sopenharmony_ci#
8247db96d56Sopenharmony_ci# These are the differences compared to the old mapping (Python 2.5
8257db96d56Sopenharmony_ci# and older):
8267db96d56Sopenharmony_ci#
8277db96d56Sopenharmony_ci#    updated 'cs_cs.iso88592' -> 'cs_CZ.ISO8859-2' to 'cs_CS.ISO8859-2'
8287db96d56Sopenharmony_ci#    updated 'serbocroatian' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2'
8297db96d56Sopenharmony_ci#    updated 'sh' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2'
8307db96d56Sopenharmony_ci#    updated 'sh_hr.iso88592' -> 'sh_HR.ISO8859-2' to 'hr_HR.ISO8859-2'
8317db96d56Sopenharmony_ci#    updated 'sh_sp' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2'
8327db96d56Sopenharmony_ci#    updated 'sh_yu' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2'
8337db96d56Sopenharmony_ci#    updated 'sp' -> 'sp_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
8347db96d56Sopenharmony_ci#    updated 'sp_yu' -> 'sp_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
8357db96d56Sopenharmony_ci#    updated 'sr' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
8367db96d56Sopenharmony_ci#    updated 'sr@cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
8377db96d56Sopenharmony_ci#    updated 'sr_sp' -> 'sr_SP.ISO8859-2' to 'sr_CS.ISO8859-2'
8387db96d56Sopenharmony_ci#    updated 'sr_yu' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
8397db96d56Sopenharmony_ci#    updated 'sr_yu.cp1251@cyrillic' -> 'sr_YU.CP1251' to 'sr_CS.CP1251'
8407db96d56Sopenharmony_ci#    updated 'sr_yu.iso88592' -> 'sr_YU.ISO8859-2' to 'sr_CS.ISO8859-2'
8417db96d56Sopenharmony_ci#    updated 'sr_yu.iso88595' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
8427db96d56Sopenharmony_ci#    updated 'sr_yu.iso88595@cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
8437db96d56Sopenharmony_ci#    updated 'sr_yu.microsoftcp1251@cyrillic' -> 'sr_YU.CP1251' to 'sr_CS.CP1251'
8447db96d56Sopenharmony_ci#    updated 'sr_yu.utf8@cyrillic' -> 'sr_YU.UTF-8' to 'sr_CS.UTF-8'
8457db96d56Sopenharmony_ci#    updated 'sr_yu@cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
8467db96d56Sopenharmony_ci#
8477db96d56Sopenharmony_ci# AP 2010-04-12:
8487db96d56Sopenharmony_ci# Updated alias mapping to most recent locale.alias file
8497db96d56Sopenharmony_ci# from X.org distribution using makelocalealias.py.
8507db96d56Sopenharmony_ci#
8517db96d56Sopenharmony_ci# These are the differences compared to the old mapping (Python 2.6.5
8527db96d56Sopenharmony_ci# and older):
8537db96d56Sopenharmony_ci#
8547db96d56Sopenharmony_ci#    updated 'ru' -> 'ru_RU.ISO8859-5' to 'ru_RU.UTF-8'
8557db96d56Sopenharmony_ci#    updated 'ru_ru' -> 'ru_RU.ISO8859-5' to 'ru_RU.UTF-8'
8567db96d56Sopenharmony_ci#    updated 'serbocroatian' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin'
8577db96d56Sopenharmony_ci#    updated 'sh' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin'
8587db96d56Sopenharmony_ci#    updated 'sh_yu' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin'
8597db96d56Sopenharmony_ci#    updated 'sr' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8'
8607db96d56Sopenharmony_ci#    updated 'sr@cyrillic' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8'
8617db96d56Sopenharmony_ci#    updated 'sr@latn' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin'
8627db96d56Sopenharmony_ci#    updated 'sr_cs.utf8@latn' -> 'sr_CS.UTF-8' to 'sr_RS.UTF-8@latin'
8637db96d56Sopenharmony_ci#    updated 'sr_cs@latn' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin'
8647db96d56Sopenharmony_ci#    updated 'sr_yu' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8@latin'
8657db96d56Sopenharmony_ci#    updated 'sr_yu.utf8@cyrillic' -> 'sr_CS.UTF-8' to 'sr_RS.UTF-8'
8667db96d56Sopenharmony_ci#    updated 'sr_yu@cyrillic' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8'
8677db96d56Sopenharmony_ci#
8687db96d56Sopenharmony_ci# SS 2013-12-20:
8697db96d56Sopenharmony_ci# Updated alias mapping to most recent locale.alias file
8707db96d56Sopenharmony_ci# from X.org distribution using makelocalealias.py.
8717db96d56Sopenharmony_ci#
8727db96d56Sopenharmony_ci# These are the differences compared to the old mapping (Python 3.3.3
8737db96d56Sopenharmony_ci# and older):
8747db96d56Sopenharmony_ci#
8757db96d56Sopenharmony_ci#    updated 'a3' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C'
8767db96d56Sopenharmony_ci#    updated 'a3_az' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C'
8777db96d56Sopenharmony_ci#    updated 'a3_az.koi8c' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C'
8787db96d56Sopenharmony_ci#    updated 'cs_cs.iso88592' -> 'cs_CS.ISO8859-2' to 'cs_CZ.ISO8859-2'
8797db96d56Sopenharmony_ci#    updated 'hebrew' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8'
8807db96d56Sopenharmony_ci#    updated 'hebrew.iso88598' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8'
8817db96d56Sopenharmony_ci#    updated 'sd' -> 'sd_IN@devanagari.UTF-8' to 'sd_IN.UTF-8'
8827db96d56Sopenharmony_ci#    updated 'sr@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin'
8837db96d56Sopenharmony_ci#    updated 'sr_cs' -> 'sr_RS.UTF-8' to 'sr_CS.UTF-8'
8847db96d56Sopenharmony_ci#    updated 'sr_cs.utf8@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin'
8857db96d56Sopenharmony_ci#    updated 'sr_cs@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin'
8867db96d56Sopenharmony_ci#
8877db96d56Sopenharmony_ci# SS 2014-10-01:
8887db96d56Sopenharmony_ci# Updated alias mapping with glibc 2.19 supported locales.
8897db96d56Sopenharmony_ci#
8907db96d56Sopenharmony_ci# SS 2018-05-05:
8917db96d56Sopenharmony_ci# Updated alias mapping with glibc 2.27 supported locales.
8927db96d56Sopenharmony_ci#
8937db96d56Sopenharmony_ci# These are the differences compared to the old mapping (Python 3.6.5
8947db96d56Sopenharmony_ci# and older):
8957db96d56Sopenharmony_ci#
8967db96d56Sopenharmony_ci#    updated 'ca_es@valencia' -> 'ca_ES.ISO8859-15@valencia' to 'ca_ES.UTF-8@valencia'
8977db96d56Sopenharmony_ci#    updated 'kk_kz' -> 'kk_KZ.RK1048' to 'kk_KZ.ptcp154'
8987db96d56Sopenharmony_ci#    updated 'russian' -> 'ru_RU.ISO8859-5' to 'ru_RU.KOI8-R'
8997db96d56Sopenharmony_ci
9007db96d56Sopenharmony_cilocale_alias = {
9017db96d56Sopenharmony_ci    'a3':                                   'az_AZ.KOI8-C',
9027db96d56Sopenharmony_ci    'a3_az':                                'az_AZ.KOI8-C',
9037db96d56Sopenharmony_ci    'a3_az.koic':                           'az_AZ.KOI8-C',
9047db96d56Sopenharmony_ci    'aa_dj':                                'aa_DJ.ISO8859-1',
9057db96d56Sopenharmony_ci    'aa_er':                                'aa_ER.UTF-8',
9067db96d56Sopenharmony_ci    'aa_et':                                'aa_ET.UTF-8',
9077db96d56Sopenharmony_ci    'af':                                   'af_ZA.ISO8859-1',
9087db96d56Sopenharmony_ci    'af_za':                                'af_ZA.ISO8859-1',
9097db96d56Sopenharmony_ci    'agr_pe':                               'agr_PE.UTF-8',
9107db96d56Sopenharmony_ci    'ak_gh':                                'ak_GH.UTF-8',
9117db96d56Sopenharmony_ci    'am':                                   'am_ET.UTF-8',
9127db96d56Sopenharmony_ci    'am_et':                                'am_ET.UTF-8',
9137db96d56Sopenharmony_ci    'american':                             'en_US.ISO8859-1',
9147db96d56Sopenharmony_ci    'an_es':                                'an_ES.ISO8859-15',
9157db96d56Sopenharmony_ci    'anp_in':                               'anp_IN.UTF-8',
9167db96d56Sopenharmony_ci    'ar':                                   'ar_AA.ISO8859-6',
9177db96d56Sopenharmony_ci    'ar_aa':                                'ar_AA.ISO8859-6',
9187db96d56Sopenharmony_ci    'ar_ae':                                'ar_AE.ISO8859-6',
9197db96d56Sopenharmony_ci    'ar_bh':                                'ar_BH.ISO8859-6',
9207db96d56Sopenharmony_ci    'ar_dz':                                'ar_DZ.ISO8859-6',
9217db96d56Sopenharmony_ci    'ar_eg':                                'ar_EG.ISO8859-6',
9227db96d56Sopenharmony_ci    'ar_in':                                'ar_IN.UTF-8',
9237db96d56Sopenharmony_ci    'ar_iq':                                'ar_IQ.ISO8859-6',
9247db96d56Sopenharmony_ci    'ar_jo':                                'ar_JO.ISO8859-6',
9257db96d56Sopenharmony_ci    'ar_kw':                                'ar_KW.ISO8859-6',
9267db96d56Sopenharmony_ci    'ar_lb':                                'ar_LB.ISO8859-6',
9277db96d56Sopenharmony_ci    'ar_ly':                                'ar_LY.ISO8859-6',
9287db96d56Sopenharmony_ci    'ar_ma':                                'ar_MA.ISO8859-6',
9297db96d56Sopenharmony_ci    'ar_om':                                'ar_OM.ISO8859-6',
9307db96d56Sopenharmony_ci    'ar_qa':                                'ar_QA.ISO8859-6',
9317db96d56Sopenharmony_ci    'ar_sa':                                'ar_SA.ISO8859-6',
9327db96d56Sopenharmony_ci    'ar_sd':                                'ar_SD.ISO8859-6',
9337db96d56Sopenharmony_ci    'ar_ss':                                'ar_SS.UTF-8',
9347db96d56Sopenharmony_ci    'ar_sy':                                'ar_SY.ISO8859-6',
9357db96d56Sopenharmony_ci    'ar_tn':                                'ar_TN.ISO8859-6',
9367db96d56Sopenharmony_ci    'ar_ye':                                'ar_YE.ISO8859-6',
9377db96d56Sopenharmony_ci    'arabic':                               'ar_AA.ISO8859-6',
9387db96d56Sopenharmony_ci    'as':                                   'as_IN.UTF-8',
9397db96d56Sopenharmony_ci    'as_in':                                'as_IN.UTF-8',
9407db96d56Sopenharmony_ci    'ast_es':                               'ast_ES.ISO8859-15',
9417db96d56Sopenharmony_ci    'ayc_pe':                               'ayc_PE.UTF-8',
9427db96d56Sopenharmony_ci    'az':                                   'az_AZ.ISO8859-9E',
9437db96d56Sopenharmony_ci    'az_az':                                'az_AZ.ISO8859-9E',
9447db96d56Sopenharmony_ci    'az_az.iso88599e':                      'az_AZ.ISO8859-9E',
9457db96d56Sopenharmony_ci    'az_ir':                                'az_IR.UTF-8',
9467db96d56Sopenharmony_ci    'be':                                   'be_BY.CP1251',
9477db96d56Sopenharmony_ci    'be@latin':                             'be_BY.UTF-8@latin',
9487db96d56Sopenharmony_ci    'be_bg.utf8':                           'bg_BG.UTF-8',
9497db96d56Sopenharmony_ci    'be_by':                                'be_BY.CP1251',
9507db96d56Sopenharmony_ci    'be_by@latin':                          'be_BY.UTF-8@latin',
9517db96d56Sopenharmony_ci    'bem_zm':                               'bem_ZM.UTF-8',
9527db96d56Sopenharmony_ci    'ber_dz':                               'ber_DZ.UTF-8',
9537db96d56Sopenharmony_ci    'ber_ma':                               'ber_MA.UTF-8',
9547db96d56Sopenharmony_ci    'bg':                                   'bg_BG.CP1251',
9557db96d56Sopenharmony_ci    'bg_bg':                                'bg_BG.CP1251',
9567db96d56Sopenharmony_ci    'bhb_in.utf8':                          'bhb_IN.UTF-8',
9577db96d56Sopenharmony_ci    'bho_in':                               'bho_IN.UTF-8',
9587db96d56Sopenharmony_ci    'bho_np':                               'bho_NP.UTF-8',
9597db96d56Sopenharmony_ci    'bi_vu':                                'bi_VU.UTF-8',
9607db96d56Sopenharmony_ci    'bn_bd':                                'bn_BD.UTF-8',
9617db96d56Sopenharmony_ci    'bn_in':                                'bn_IN.UTF-8',
9627db96d56Sopenharmony_ci    'bo_cn':                                'bo_CN.UTF-8',
9637db96d56Sopenharmony_ci    'bo_in':                                'bo_IN.UTF-8',
9647db96d56Sopenharmony_ci    'bokmal':                               'nb_NO.ISO8859-1',
9657db96d56Sopenharmony_ci    'bokm\xe5l':                            'nb_NO.ISO8859-1',
9667db96d56Sopenharmony_ci    'br':                                   'br_FR.ISO8859-1',
9677db96d56Sopenharmony_ci    'br_fr':                                'br_FR.ISO8859-1',
9687db96d56Sopenharmony_ci    'brx_in':                               'brx_IN.UTF-8',
9697db96d56Sopenharmony_ci    'bs':                                   'bs_BA.ISO8859-2',
9707db96d56Sopenharmony_ci    'bs_ba':                                'bs_BA.ISO8859-2',
9717db96d56Sopenharmony_ci    'bulgarian':                            'bg_BG.CP1251',
9727db96d56Sopenharmony_ci    'byn_er':                               'byn_ER.UTF-8',
9737db96d56Sopenharmony_ci    'c':                                    'C',
9747db96d56Sopenharmony_ci    'c-french':                             'fr_CA.ISO8859-1',
9757db96d56Sopenharmony_ci    'c.ascii':                              'C',
9767db96d56Sopenharmony_ci    'c.en':                                 'C',
9777db96d56Sopenharmony_ci    'c.iso88591':                           'en_US.ISO8859-1',
9787db96d56Sopenharmony_ci    'c.utf8':                               'en_US.UTF-8',
9797db96d56Sopenharmony_ci    'c_c':                                  'C',
9807db96d56Sopenharmony_ci    'c_c.c':                                'C',
9817db96d56Sopenharmony_ci    'ca':                                   'ca_ES.ISO8859-1',
9827db96d56Sopenharmony_ci    'ca_ad':                                'ca_AD.ISO8859-1',
9837db96d56Sopenharmony_ci    'ca_es':                                'ca_ES.ISO8859-1',
9847db96d56Sopenharmony_ci    'ca_es@valencia':                       'ca_ES.UTF-8@valencia',
9857db96d56Sopenharmony_ci    'ca_fr':                                'ca_FR.ISO8859-1',
9867db96d56Sopenharmony_ci    'ca_it':                                'ca_IT.ISO8859-1',
9877db96d56Sopenharmony_ci    'catalan':                              'ca_ES.ISO8859-1',
9887db96d56Sopenharmony_ci    'ce_ru':                                'ce_RU.UTF-8',
9897db96d56Sopenharmony_ci    'cextend':                              'en_US.ISO8859-1',
9907db96d56Sopenharmony_ci    'chinese-s':                            'zh_CN.eucCN',
9917db96d56Sopenharmony_ci    'chinese-t':                            'zh_TW.eucTW',
9927db96d56Sopenharmony_ci    'chr_us':                               'chr_US.UTF-8',
9937db96d56Sopenharmony_ci    'ckb_iq':                               'ckb_IQ.UTF-8',
9947db96d56Sopenharmony_ci    'cmn_tw':                               'cmn_TW.UTF-8',
9957db96d56Sopenharmony_ci    'crh_ua':                               'crh_UA.UTF-8',
9967db96d56Sopenharmony_ci    'croatian':                             'hr_HR.ISO8859-2',
9977db96d56Sopenharmony_ci    'cs':                                   'cs_CZ.ISO8859-2',
9987db96d56Sopenharmony_ci    'cs_cs':                                'cs_CZ.ISO8859-2',
9997db96d56Sopenharmony_ci    'cs_cz':                                'cs_CZ.ISO8859-2',
10007db96d56Sopenharmony_ci    'csb_pl':                               'csb_PL.UTF-8',
10017db96d56Sopenharmony_ci    'cv_ru':                                'cv_RU.UTF-8',
10027db96d56Sopenharmony_ci    'cy':                                   'cy_GB.ISO8859-1',
10037db96d56Sopenharmony_ci    'cy_gb':                                'cy_GB.ISO8859-1',
10047db96d56Sopenharmony_ci    'cz':                                   'cs_CZ.ISO8859-2',
10057db96d56Sopenharmony_ci    'cz_cz':                                'cs_CZ.ISO8859-2',
10067db96d56Sopenharmony_ci    'czech':                                'cs_CZ.ISO8859-2',
10077db96d56Sopenharmony_ci    'da':                                   'da_DK.ISO8859-1',
10087db96d56Sopenharmony_ci    'da_dk':                                'da_DK.ISO8859-1',
10097db96d56Sopenharmony_ci    'danish':                               'da_DK.ISO8859-1',
10107db96d56Sopenharmony_ci    'dansk':                                'da_DK.ISO8859-1',
10117db96d56Sopenharmony_ci    'de':                                   'de_DE.ISO8859-1',
10127db96d56Sopenharmony_ci    'de_at':                                'de_AT.ISO8859-1',
10137db96d56Sopenharmony_ci    'de_be':                                'de_BE.ISO8859-1',
10147db96d56Sopenharmony_ci    'de_ch':                                'de_CH.ISO8859-1',
10157db96d56Sopenharmony_ci    'de_de':                                'de_DE.ISO8859-1',
10167db96d56Sopenharmony_ci    'de_it':                                'de_IT.ISO8859-1',
10177db96d56Sopenharmony_ci    'de_li.utf8':                           'de_LI.UTF-8',
10187db96d56Sopenharmony_ci    'de_lu':                                'de_LU.ISO8859-1',
10197db96d56Sopenharmony_ci    'deutsch':                              'de_DE.ISO8859-1',
10207db96d56Sopenharmony_ci    'doi_in':                               'doi_IN.UTF-8',
10217db96d56Sopenharmony_ci    'dutch':                                'nl_NL.ISO8859-1',
10227db96d56Sopenharmony_ci    'dutch.iso88591':                       'nl_BE.ISO8859-1',
10237db96d56Sopenharmony_ci    'dv_mv':                                'dv_MV.UTF-8',
10247db96d56Sopenharmony_ci    'dz_bt':                                'dz_BT.UTF-8',
10257db96d56Sopenharmony_ci    'ee':                                   'ee_EE.ISO8859-4',
10267db96d56Sopenharmony_ci    'ee_ee':                                'ee_EE.ISO8859-4',
10277db96d56Sopenharmony_ci    'eesti':                                'et_EE.ISO8859-1',
10287db96d56Sopenharmony_ci    'el':                                   'el_GR.ISO8859-7',
10297db96d56Sopenharmony_ci    'el_cy':                                'el_CY.ISO8859-7',
10307db96d56Sopenharmony_ci    'el_gr':                                'el_GR.ISO8859-7',
10317db96d56Sopenharmony_ci    'el_gr@euro':                           'el_GR.ISO8859-15',
10327db96d56Sopenharmony_ci    'en':                                   'en_US.ISO8859-1',
10337db96d56Sopenharmony_ci    'en_ag':                                'en_AG.UTF-8',
10347db96d56Sopenharmony_ci    'en_au':                                'en_AU.ISO8859-1',
10357db96d56Sopenharmony_ci    'en_be':                                'en_BE.ISO8859-1',
10367db96d56Sopenharmony_ci    'en_bw':                                'en_BW.ISO8859-1',
10377db96d56Sopenharmony_ci    'en_ca':                                'en_CA.ISO8859-1',
10387db96d56Sopenharmony_ci    'en_dk':                                'en_DK.ISO8859-1',
10397db96d56Sopenharmony_ci    'en_dl.utf8':                           'en_DL.UTF-8',
10407db96d56Sopenharmony_ci    'en_gb':                                'en_GB.ISO8859-1',
10417db96d56Sopenharmony_ci    'en_hk':                                'en_HK.ISO8859-1',
10427db96d56Sopenharmony_ci    'en_ie':                                'en_IE.ISO8859-1',
10437db96d56Sopenharmony_ci    'en_il':                                'en_IL.UTF-8',
10447db96d56Sopenharmony_ci    'en_in':                                'en_IN.ISO8859-1',
10457db96d56Sopenharmony_ci    'en_ng':                                'en_NG.UTF-8',
10467db96d56Sopenharmony_ci    'en_nz':                                'en_NZ.ISO8859-1',
10477db96d56Sopenharmony_ci    'en_ph':                                'en_PH.ISO8859-1',
10487db96d56Sopenharmony_ci    'en_sc.utf8':                           'en_SC.UTF-8',
10497db96d56Sopenharmony_ci    'en_sg':                                'en_SG.ISO8859-1',
10507db96d56Sopenharmony_ci    'en_uk':                                'en_GB.ISO8859-1',
10517db96d56Sopenharmony_ci    'en_us':                                'en_US.ISO8859-1',
10527db96d56Sopenharmony_ci    'en_us@euro@euro':                      'en_US.ISO8859-15',
10537db96d56Sopenharmony_ci    'en_za':                                'en_ZA.ISO8859-1',
10547db96d56Sopenharmony_ci    'en_zm':                                'en_ZM.UTF-8',
10557db96d56Sopenharmony_ci    'en_zw':                                'en_ZW.ISO8859-1',
10567db96d56Sopenharmony_ci    'en_zw.utf8':                           'en_ZS.UTF-8',
10577db96d56Sopenharmony_ci    'eng_gb':                               'en_GB.ISO8859-1',
10587db96d56Sopenharmony_ci    'english':                              'en_EN.ISO8859-1',
10597db96d56Sopenharmony_ci    'english.iso88591':                     'en_US.ISO8859-1',
10607db96d56Sopenharmony_ci    'english_uk':                           'en_GB.ISO8859-1',
10617db96d56Sopenharmony_ci    'english_united-states':                'en_US.ISO8859-1',
10627db96d56Sopenharmony_ci    'english_united-states.437':            'C',
10637db96d56Sopenharmony_ci    'english_us':                           'en_US.ISO8859-1',
10647db96d56Sopenharmony_ci    'eo':                                   'eo_XX.ISO8859-3',
10657db96d56Sopenharmony_ci    'eo.utf8':                              'eo.UTF-8',
10667db96d56Sopenharmony_ci    'eo_eo':                                'eo_EO.ISO8859-3',
10677db96d56Sopenharmony_ci    'eo_us.utf8':                           'eo_US.UTF-8',
10687db96d56Sopenharmony_ci    'eo_xx':                                'eo_XX.ISO8859-3',
10697db96d56Sopenharmony_ci    'es':                                   'es_ES.ISO8859-1',
10707db96d56Sopenharmony_ci    'es_ar':                                'es_AR.ISO8859-1',
10717db96d56Sopenharmony_ci    'es_bo':                                'es_BO.ISO8859-1',
10727db96d56Sopenharmony_ci    'es_cl':                                'es_CL.ISO8859-1',
10737db96d56Sopenharmony_ci    'es_co':                                'es_CO.ISO8859-1',
10747db96d56Sopenharmony_ci    'es_cr':                                'es_CR.ISO8859-1',
10757db96d56Sopenharmony_ci    'es_cu':                                'es_CU.UTF-8',
10767db96d56Sopenharmony_ci    'es_do':                                'es_DO.ISO8859-1',
10777db96d56Sopenharmony_ci    'es_ec':                                'es_EC.ISO8859-1',
10787db96d56Sopenharmony_ci    'es_es':                                'es_ES.ISO8859-1',
10797db96d56Sopenharmony_ci    'es_gt':                                'es_GT.ISO8859-1',
10807db96d56Sopenharmony_ci    'es_hn':                                'es_HN.ISO8859-1',
10817db96d56Sopenharmony_ci    'es_mx':                                'es_MX.ISO8859-1',
10827db96d56Sopenharmony_ci    'es_ni':                                'es_NI.ISO8859-1',
10837db96d56Sopenharmony_ci    'es_pa':                                'es_PA.ISO8859-1',
10847db96d56Sopenharmony_ci    'es_pe':                                'es_PE.ISO8859-1',
10857db96d56Sopenharmony_ci    'es_pr':                                'es_PR.ISO8859-1',
10867db96d56Sopenharmony_ci    'es_py':                                'es_PY.ISO8859-1',
10877db96d56Sopenharmony_ci    'es_sv':                                'es_SV.ISO8859-1',
10887db96d56Sopenharmony_ci    'es_us':                                'es_US.ISO8859-1',
10897db96d56Sopenharmony_ci    'es_uy':                                'es_UY.ISO8859-1',
10907db96d56Sopenharmony_ci    'es_ve':                                'es_VE.ISO8859-1',
10917db96d56Sopenharmony_ci    'estonian':                             'et_EE.ISO8859-1',
10927db96d56Sopenharmony_ci    'et':                                   'et_EE.ISO8859-15',
10937db96d56Sopenharmony_ci    'et_ee':                                'et_EE.ISO8859-15',
10947db96d56Sopenharmony_ci    'eu':                                   'eu_ES.ISO8859-1',
10957db96d56Sopenharmony_ci    'eu_es':                                'eu_ES.ISO8859-1',
10967db96d56Sopenharmony_ci    'eu_fr':                                'eu_FR.ISO8859-1',
10977db96d56Sopenharmony_ci    'fa':                                   'fa_IR.UTF-8',
10987db96d56Sopenharmony_ci    'fa_ir':                                'fa_IR.UTF-8',
10997db96d56Sopenharmony_ci    'fa_ir.isiri3342':                      'fa_IR.ISIRI-3342',
11007db96d56Sopenharmony_ci    'ff_sn':                                'ff_SN.UTF-8',
11017db96d56Sopenharmony_ci    'fi':                                   'fi_FI.ISO8859-15',
11027db96d56Sopenharmony_ci    'fi_fi':                                'fi_FI.ISO8859-15',
11037db96d56Sopenharmony_ci    'fil_ph':                               'fil_PH.UTF-8',
11047db96d56Sopenharmony_ci    'finnish':                              'fi_FI.ISO8859-1',
11057db96d56Sopenharmony_ci    'fo':                                   'fo_FO.ISO8859-1',
11067db96d56Sopenharmony_ci    'fo_fo':                                'fo_FO.ISO8859-1',
11077db96d56Sopenharmony_ci    'fr':                                   'fr_FR.ISO8859-1',
11087db96d56Sopenharmony_ci    'fr_be':                                'fr_BE.ISO8859-1',
11097db96d56Sopenharmony_ci    'fr_ca':                                'fr_CA.ISO8859-1',
11107db96d56Sopenharmony_ci    'fr_ch':                                'fr_CH.ISO8859-1',
11117db96d56Sopenharmony_ci    'fr_fr':                                'fr_FR.ISO8859-1',
11127db96d56Sopenharmony_ci    'fr_lu':                                'fr_LU.ISO8859-1',
11137db96d56Sopenharmony_ci    'fran\xe7ais':                          'fr_FR.ISO8859-1',
11147db96d56Sopenharmony_ci    'fre_fr':                               'fr_FR.ISO8859-1',
11157db96d56Sopenharmony_ci    'french':                               'fr_FR.ISO8859-1',
11167db96d56Sopenharmony_ci    'french.iso88591':                      'fr_CH.ISO8859-1',
11177db96d56Sopenharmony_ci    'french_france':                        'fr_FR.ISO8859-1',
11187db96d56Sopenharmony_ci    'fur_it':                               'fur_IT.UTF-8',
11197db96d56Sopenharmony_ci    'fy_de':                                'fy_DE.UTF-8',
11207db96d56Sopenharmony_ci    'fy_nl':                                'fy_NL.UTF-8',
11217db96d56Sopenharmony_ci    'ga':                                   'ga_IE.ISO8859-1',
11227db96d56Sopenharmony_ci    'ga_ie':                                'ga_IE.ISO8859-1',
11237db96d56Sopenharmony_ci    'galego':                               'gl_ES.ISO8859-1',
11247db96d56Sopenharmony_ci    'galician':                             'gl_ES.ISO8859-1',
11257db96d56Sopenharmony_ci    'gd':                                   'gd_GB.ISO8859-1',
11267db96d56Sopenharmony_ci    'gd_gb':                                'gd_GB.ISO8859-1',
11277db96d56Sopenharmony_ci    'ger_de':                               'de_DE.ISO8859-1',
11287db96d56Sopenharmony_ci    'german':                               'de_DE.ISO8859-1',
11297db96d56Sopenharmony_ci    'german.iso88591':                      'de_CH.ISO8859-1',
11307db96d56Sopenharmony_ci    'german_germany':                       'de_DE.ISO8859-1',
11317db96d56Sopenharmony_ci    'gez_er':                               'gez_ER.UTF-8',
11327db96d56Sopenharmony_ci    'gez_et':                               'gez_ET.UTF-8',
11337db96d56Sopenharmony_ci    'gl':                                   'gl_ES.ISO8859-1',
11347db96d56Sopenharmony_ci    'gl_es':                                'gl_ES.ISO8859-1',
11357db96d56Sopenharmony_ci    'greek':                                'el_GR.ISO8859-7',
11367db96d56Sopenharmony_ci    'gu_in':                                'gu_IN.UTF-8',
11377db96d56Sopenharmony_ci    'gv':                                   'gv_GB.ISO8859-1',
11387db96d56Sopenharmony_ci    'gv_gb':                                'gv_GB.ISO8859-1',
11397db96d56Sopenharmony_ci    'ha_ng':                                'ha_NG.UTF-8',
11407db96d56Sopenharmony_ci    'hak_tw':                               'hak_TW.UTF-8',
11417db96d56Sopenharmony_ci    'he':                                   'he_IL.ISO8859-8',
11427db96d56Sopenharmony_ci    'he_il':                                'he_IL.ISO8859-8',
11437db96d56Sopenharmony_ci    'hebrew':                               'he_IL.ISO8859-8',
11447db96d56Sopenharmony_ci    'hi':                                   'hi_IN.ISCII-DEV',
11457db96d56Sopenharmony_ci    'hi_in':                                'hi_IN.ISCII-DEV',
11467db96d56Sopenharmony_ci    'hi_in.isciidev':                       'hi_IN.ISCII-DEV',
11477db96d56Sopenharmony_ci    'hif_fj':                               'hif_FJ.UTF-8',
11487db96d56Sopenharmony_ci    'hne':                                  'hne_IN.UTF-8',
11497db96d56Sopenharmony_ci    'hne_in':                               'hne_IN.UTF-8',
11507db96d56Sopenharmony_ci    'hr':                                   'hr_HR.ISO8859-2',
11517db96d56Sopenharmony_ci    'hr_hr':                                'hr_HR.ISO8859-2',
11527db96d56Sopenharmony_ci    'hrvatski':                             'hr_HR.ISO8859-2',
11537db96d56Sopenharmony_ci    'hsb_de':                               'hsb_DE.ISO8859-2',
11547db96d56Sopenharmony_ci    'ht_ht':                                'ht_HT.UTF-8',
11557db96d56Sopenharmony_ci    'hu':                                   'hu_HU.ISO8859-2',
11567db96d56Sopenharmony_ci    'hu_hu':                                'hu_HU.ISO8859-2',
11577db96d56Sopenharmony_ci    'hungarian':                            'hu_HU.ISO8859-2',
11587db96d56Sopenharmony_ci    'hy_am':                                'hy_AM.UTF-8',
11597db96d56Sopenharmony_ci    'hy_am.armscii8':                       'hy_AM.ARMSCII_8',
11607db96d56Sopenharmony_ci    'ia':                                   'ia.UTF-8',
11617db96d56Sopenharmony_ci    'ia_fr':                                'ia_FR.UTF-8',
11627db96d56Sopenharmony_ci    'icelandic':                            'is_IS.ISO8859-1',
11637db96d56Sopenharmony_ci    'id':                                   'id_ID.ISO8859-1',
11647db96d56Sopenharmony_ci    'id_id':                                'id_ID.ISO8859-1',
11657db96d56Sopenharmony_ci    'ig_ng':                                'ig_NG.UTF-8',
11667db96d56Sopenharmony_ci    'ik_ca':                                'ik_CA.UTF-8',
11677db96d56Sopenharmony_ci    'in':                                   'id_ID.ISO8859-1',
11687db96d56Sopenharmony_ci    'in_id':                                'id_ID.ISO8859-1',
11697db96d56Sopenharmony_ci    'is':                                   'is_IS.ISO8859-1',
11707db96d56Sopenharmony_ci    'is_is':                                'is_IS.ISO8859-1',
11717db96d56Sopenharmony_ci    'iso-8859-1':                           'en_US.ISO8859-1',
11727db96d56Sopenharmony_ci    'iso-8859-15':                          'en_US.ISO8859-15',
11737db96d56Sopenharmony_ci    'iso8859-1':                            'en_US.ISO8859-1',
11747db96d56Sopenharmony_ci    'iso8859-15':                           'en_US.ISO8859-15',
11757db96d56Sopenharmony_ci    'iso_8859_1':                           'en_US.ISO8859-1',
11767db96d56Sopenharmony_ci    'iso_8859_15':                          'en_US.ISO8859-15',
11777db96d56Sopenharmony_ci    'it':                                   'it_IT.ISO8859-1',
11787db96d56Sopenharmony_ci    'it_ch':                                'it_CH.ISO8859-1',
11797db96d56Sopenharmony_ci    'it_it':                                'it_IT.ISO8859-1',
11807db96d56Sopenharmony_ci    'italian':                              'it_IT.ISO8859-1',
11817db96d56Sopenharmony_ci    'iu':                                   'iu_CA.NUNACOM-8',
11827db96d56Sopenharmony_ci    'iu_ca':                                'iu_CA.NUNACOM-8',
11837db96d56Sopenharmony_ci    'iu_ca.nunacom8':                       'iu_CA.NUNACOM-8',
11847db96d56Sopenharmony_ci    'iw':                                   'he_IL.ISO8859-8',
11857db96d56Sopenharmony_ci    'iw_il':                                'he_IL.ISO8859-8',
11867db96d56Sopenharmony_ci    'iw_il.utf8':                           'iw_IL.UTF-8',
11877db96d56Sopenharmony_ci    'ja':                                   'ja_JP.eucJP',
11887db96d56Sopenharmony_ci    'ja_jp':                                'ja_JP.eucJP',
11897db96d56Sopenharmony_ci    'ja_jp.euc':                            'ja_JP.eucJP',
11907db96d56Sopenharmony_ci    'ja_jp.mscode':                         'ja_JP.SJIS',
11917db96d56Sopenharmony_ci    'ja_jp.pck':                            'ja_JP.SJIS',
11927db96d56Sopenharmony_ci    'japan':                                'ja_JP.eucJP',
11937db96d56Sopenharmony_ci    'japanese':                             'ja_JP.eucJP',
11947db96d56Sopenharmony_ci    'japanese-euc':                         'ja_JP.eucJP',
11957db96d56Sopenharmony_ci    'japanese.euc':                         'ja_JP.eucJP',
11967db96d56Sopenharmony_ci    'jp_jp':                                'ja_JP.eucJP',
11977db96d56Sopenharmony_ci    'ka':                                   'ka_GE.GEORGIAN-ACADEMY',
11987db96d56Sopenharmony_ci    'ka_ge':                                'ka_GE.GEORGIAN-ACADEMY',
11997db96d56Sopenharmony_ci    'ka_ge.georgianacademy':                'ka_GE.GEORGIAN-ACADEMY',
12007db96d56Sopenharmony_ci    'ka_ge.georgianps':                     'ka_GE.GEORGIAN-PS',
12017db96d56Sopenharmony_ci    'ka_ge.georgianrs':                     'ka_GE.GEORGIAN-ACADEMY',
12027db96d56Sopenharmony_ci    'kab_dz':                               'kab_DZ.UTF-8',
12037db96d56Sopenharmony_ci    'kk_kz':                                'kk_KZ.ptcp154',
12047db96d56Sopenharmony_ci    'kl':                                   'kl_GL.ISO8859-1',
12057db96d56Sopenharmony_ci    'kl_gl':                                'kl_GL.ISO8859-1',
12067db96d56Sopenharmony_ci    'km_kh':                                'km_KH.UTF-8',
12077db96d56Sopenharmony_ci    'kn':                                   'kn_IN.UTF-8',
12087db96d56Sopenharmony_ci    'kn_in':                                'kn_IN.UTF-8',
12097db96d56Sopenharmony_ci    'ko':                                   'ko_KR.eucKR',
12107db96d56Sopenharmony_ci    'ko_kr':                                'ko_KR.eucKR',
12117db96d56Sopenharmony_ci    'ko_kr.euc':                            'ko_KR.eucKR',
12127db96d56Sopenharmony_ci    'kok_in':                               'kok_IN.UTF-8',
12137db96d56Sopenharmony_ci    'korean':                               'ko_KR.eucKR',
12147db96d56Sopenharmony_ci    'korean.euc':                           'ko_KR.eucKR',
12157db96d56Sopenharmony_ci    'ks':                                   'ks_IN.UTF-8',
12167db96d56Sopenharmony_ci    'ks_in':                                'ks_IN.UTF-8',
12177db96d56Sopenharmony_ci    'ks_in@devanagari.utf8':                'ks_IN.UTF-8@devanagari',
12187db96d56Sopenharmony_ci    'ku_tr':                                'ku_TR.ISO8859-9',
12197db96d56Sopenharmony_ci    'kw':                                   'kw_GB.ISO8859-1',
12207db96d56Sopenharmony_ci    'kw_gb':                                'kw_GB.ISO8859-1',
12217db96d56Sopenharmony_ci    'ky':                                   'ky_KG.UTF-8',
12227db96d56Sopenharmony_ci    'ky_kg':                                'ky_KG.UTF-8',
12237db96d56Sopenharmony_ci    'lb_lu':                                'lb_LU.UTF-8',
12247db96d56Sopenharmony_ci    'lg_ug':                                'lg_UG.ISO8859-10',
12257db96d56Sopenharmony_ci    'li_be':                                'li_BE.UTF-8',
12267db96d56Sopenharmony_ci    'li_nl':                                'li_NL.UTF-8',
12277db96d56Sopenharmony_ci    'lij_it':                               'lij_IT.UTF-8',
12287db96d56Sopenharmony_ci    'lithuanian':                           'lt_LT.ISO8859-13',
12297db96d56Sopenharmony_ci    'ln_cd':                                'ln_CD.UTF-8',
12307db96d56Sopenharmony_ci    'lo':                                   'lo_LA.MULELAO-1',
12317db96d56Sopenharmony_ci    'lo_la':                                'lo_LA.MULELAO-1',
12327db96d56Sopenharmony_ci    'lo_la.cp1133':                         'lo_LA.IBM-CP1133',
12337db96d56Sopenharmony_ci    'lo_la.ibmcp1133':                      'lo_LA.IBM-CP1133',
12347db96d56Sopenharmony_ci    'lo_la.mulelao1':                       'lo_LA.MULELAO-1',
12357db96d56Sopenharmony_ci    'lt':                                   'lt_LT.ISO8859-13',
12367db96d56Sopenharmony_ci    'lt_lt':                                'lt_LT.ISO8859-13',
12377db96d56Sopenharmony_ci    'lv':                                   'lv_LV.ISO8859-13',
12387db96d56Sopenharmony_ci    'lv_lv':                                'lv_LV.ISO8859-13',
12397db96d56Sopenharmony_ci    'lzh_tw':                               'lzh_TW.UTF-8',
12407db96d56Sopenharmony_ci    'mag_in':                               'mag_IN.UTF-8',
12417db96d56Sopenharmony_ci    'mai':                                  'mai_IN.UTF-8',
12427db96d56Sopenharmony_ci    'mai_in':                               'mai_IN.UTF-8',
12437db96d56Sopenharmony_ci    'mai_np':                               'mai_NP.UTF-8',
12447db96d56Sopenharmony_ci    'mfe_mu':                               'mfe_MU.UTF-8',
12457db96d56Sopenharmony_ci    'mg_mg':                                'mg_MG.ISO8859-15',
12467db96d56Sopenharmony_ci    'mhr_ru':                               'mhr_RU.UTF-8',
12477db96d56Sopenharmony_ci    'mi':                                   'mi_NZ.ISO8859-1',
12487db96d56Sopenharmony_ci    'mi_nz':                                'mi_NZ.ISO8859-1',
12497db96d56Sopenharmony_ci    'miq_ni':                               'miq_NI.UTF-8',
12507db96d56Sopenharmony_ci    'mjw_in':                               'mjw_IN.UTF-8',
12517db96d56Sopenharmony_ci    'mk':                                   'mk_MK.ISO8859-5',
12527db96d56Sopenharmony_ci    'mk_mk':                                'mk_MK.ISO8859-5',
12537db96d56Sopenharmony_ci    'ml':                                   'ml_IN.UTF-8',
12547db96d56Sopenharmony_ci    'ml_in':                                'ml_IN.UTF-8',
12557db96d56Sopenharmony_ci    'mn_mn':                                'mn_MN.UTF-8',
12567db96d56Sopenharmony_ci    'mni_in':                               'mni_IN.UTF-8',
12577db96d56Sopenharmony_ci    'mr':                                   'mr_IN.UTF-8',
12587db96d56Sopenharmony_ci    'mr_in':                                'mr_IN.UTF-8',
12597db96d56Sopenharmony_ci    'ms':                                   'ms_MY.ISO8859-1',
12607db96d56Sopenharmony_ci    'ms_my':                                'ms_MY.ISO8859-1',
12617db96d56Sopenharmony_ci    'mt':                                   'mt_MT.ISO8859-3',
12627db96d56Sopenharmony_ci    'mt_mt':                                'mt_MT.ISO8859-3',
12637db96d56Sopenharmony_ci    'my_mm':                                'my_MM.UTF-8',
12647db96d56Sopenharmony_ci    'nan_tw':                               'nan_TW.UTF-8',
12657db96d56Sopenharmony_ci    'nb':                                   'nb_NO.ISO8859-1',
12667db96d56Sopenharmony_ci    'nb_no':                                'nb_NO.ISO8859-1',
12677db96d56Sopenharmony_ci    'nds_de':                               'nds_DE.UTF-8',
12687db96d56Sopenharmony_ci    'nds_nl':                               'nds_NL.UTF-8',
12697db96d56Sopenharmony_ci    'ne_np':                                'ne_NP.UTF-8',
12707db96d56Sopenharmony_ci    'nhn_mx':                               'nhn_MX.UTF-8',
12717db96d56Sopenharmony_ci    'niu_nu':                               'niu_NU.UTF-8',
12727db96d56Sopenharmony_ci    'niu_nz':                               'niu_NZ.UTF-8',
12737db96d56Sopenharmony_ci    'nl':                                   'nl_NL.ISO8859-1',
12747db96d56Sopenharmony_ci    'nl_aw':                                'nl_AW.UTF-8',
12757db96d56Sopenharmony_ci    'nl_be':                                'nl_BE.ISO8859-1',
12767db96d56Sopenharmony_ci    'nl_nl':                                'nl_NL.ISO8859-1',
12777db96d56Sopenharmony_ci    'nn':                                   'nn_NO.ISO8859-1',
12787db96d56Sopenharmony_ci    'nn_no':                                'nn_NO.ISO8859-1',
12797db96d56Sopenharmony_ci    'no':                                   'no_NO.ISO8859-1',
12807db96d56Sopenharmony_ci    'no@nynorsk':                           'ny_NO.ISO8859-1',
12817db96d56Sopenharmony_ci    'no_no':                                'no_NO.ISO8859-1',
12827db96d56Sopenharmony_ci    'no_no.iso88591@bokmal':                'no_NO.ISO8859-1',
12837db96d56Sopenharmony_ci    'no_no.iso88591@nynorsk':               'no_NO.ISO8859-1',
12847db96d56Sopenharmony_ci    'norwegian':                            'no_NO.ISO8859-1',
12857db96d56Sopenharmony_ci    'nr':                                   'nr_ZA.ISO8859-1',
12867db96d56Sopenharmony_ci    'nr_za':                                'nr_ZA.ISO8859-1',
12877db96d56Sopenharmony_ci    'nso':                                  'nso_ZA.ISO8859-15',
12887db96d56Sopenharmony_ci    'nso_za':                               'nso_ZA.ISO8859-15',
12897db96d56Sopenharmony_ci    'ny':                                   'ny_NO.ISO8859-1',
12907db96d56Sopenharmony_ci    'ny_no':                                'ny_NO.ISO8859-1',
12917db96d56Sopenharmony_ci    'nynorsk':                              'nn_NO.ISO8859-1',
12927db96d56Sopenharmony_ci    'oc':                                   'oc_FR.ISO8859-1',
12937db96d56Sopenharmony_ci    'oc_fr':                                'oc_FR.ISO8859-1',
12947db96d56Sopenharmony_ci    'om_et':                                'om_ET.UTF-8',
12957db96d56Sopenharmony_ci    'om_ke':                                'om_KE.ISO8859-1',
12967db96d56Sopenharmony_ci    'or':                                   'or_IN.UTF-8',
12977db96d56Sopenharmony_ci    'or_in':                                'or_IN.UTF-8',
12987db96d56Sopenharmony_ci    'os_ru':                                'os_RU.UTF-8',
12997db96d56Sopenharmony_ci    'pa':                                   'pa_IN.UTF-8',
13007db96d56Sopenharmony_ci    'pa_in':                                'pa_IN.UTF-8',
13017db96d56Sopenharmony_ci    'pa_pk':                                'pa_PK.UTF-8',
13027db96d56Sopenharmony_ci    'pap_an':                               'pap_AN.UTF-8',
13037db96d56Sopenharmony_ci    'pap_aw':                               'pap_AW.UTF-8',
13047db96d56Sopenharmony_ci    'pap_cw':                               'pap_CW.UTF-8',
13057db96d56Sopenharmony_ci    'pd':                                   'pd_US.ISO8859-1',
13067db96d56Sopenharmony_ci    'pd_de':                                'pd_DE.ISO8859-1',
13077db96d56Sopenharmony_ci    'pd_us':                                'pd_US.ISO8859-1',
13087db96d56Sopenharmony_ci    'ph':                                   'ph_PH.ISO8859-1',
13097db96d56Sopenharmony_ci    'ph_ph':                                'ph_PH.ISO8859-1',
13107db96d56Sopenharmony_ci    'pl':                                   'pl_PL.ISO8859-2',
13117db96d56Sopenharmony_ci    'pl_pl':                                'pl_PL.ISO8859-2',
13127db96d56Sopenharmony_ci    'polish':                               'pl_PL.ISO8859-2',
13137db96d56Sopenharmony_ci    'portuguese':                           'pt_PT.ISO8859-1',
13147db96d56Sopenharmony_ci    'portuguese_brazil':                    'pt_BR.ISO8859-1',
13157db96d56Sopenharmony_ci    'posix':                                'C',
13167db96d56Sopenharmony_ci    'posix-utf2':                           'C',
13177db96d56Sopenharmony_ci    'pp':                                   'pp_AN.ISO8859-1',
13187db96d56Sopenharmony_ci    'pp_an':                                'pp_AN.ISO8859-1',
13197db96d56Sopenharmony_ci    'ps_af':                                'ps_AF.UTF-8',
13207db96d56Sopenharmony_ci    'pt':                                   'pt_PT.ISO8859-1',
13217db96d56Sopenharmony_ci    'pt_br':                                'pt_BR.ISO8859-1',
13227db96d56Sopenharmony_ci    'pt_pt':                                'pt_PT.ISO8859-1',
13237db96d56Sopenharmony_ci    'quz_pe':                               'quz_PE.UTF-8',
13247db96d56Sopenharmony_ci    'raj_in':                               'raj_IN.UTF-8',
13257db96d56Sopenharmony_ci    'ro':                                   'ro_RO.ISO8859-2',
13267db96d56Sopenharmony_ci    'ro_ro':                                'ro_RO.ISO8859-2',
13277db96d56Sopenharmony_ci    'romanian':                             'ro_RO.ISO8859-2',
13287db96d56Sopenharmony_ci    'ru':                                   'ru_RU.UTF-8',
13297db96d56Sopenharmony_ci    'ru_ru':                                'ru_RU.UTF-8',
13307db96d56Sopenharmony_ci    'ru_ua':                                'ru_UA.KOI8-U',
13317db96d56Sopenharmony_ci    'rumanian':                             'ro_RO.ISO8859-2',
13327db96d56Sopenharmony_ci    'russian':                              'ru_RU.KOI8-R',
13337db96d56Sopenharmony_ci    'rw':                                   'rw_RW.ISO8859-1',
13347db96d56Sopenharmony_ci    'rw_rw':                                'rw_RW.ISO8859-1',
13357db96d56Sopenharmony_ci    'sa_in':                                'sa_IN.UTF-8',
13367db96d56Sopenharmony_ci    'sat_in':                               'sat_IN.UTF-8',
13377db96d56Sopenharmony_ci    'sc_it':                                'sc_IT.UTF-8',
13387db96d56Sopenharmony_ci    'sd':                                   'sd_IN.UTF-8',
13397db96d56Sopenharmony_ci    'sd_in':                                'sd_IN.UTF-8',
13407db96d56Sopenharmony_ci    'sd_in@devanagari.utf8':                'sd_IN.UTF-8@devanagari',
13417db96d56Sopenharmony_ci    'sd_pk':                                'sd_PK.UTF-8',
13427db96d56Sopenharmony_ci    'se_no':                                'se_NO.UTF-8',
13437db96d56Sopenharmony_ci    'serbocroatian':                        'sr_RS.UTF-8@latin',
13447db96d56Sopenharmony_ci    'sgs_lt':                               'sgs_LT.UTF-8',
13457db96d56Sopenharmony_ci    'sh':                                   'sr_RS.UTF-8@latin',
13467db96d56Sopenharmony_ci    'sh_ba.iso88592@bosnia':                'sr_CS.ISO8859-2',
13477db96d56Sopenharmony_ci    'sh_hr':                                'sh_HR.ISO8859-2',
13487db96d56Sopenharmony_ci    'sh_hr.iso88592':                       'hr_HR.ISO8859-2',
13497db96d56Sopenharmony_ci    'sh_sp':                                'sr_CS.ISO8859-2',
13507db96d56Sopenharmony_ci    'sh_yu':                                'sr_RS.UTF-8@latin',
13517db96d56Sopenharmony_ci    'shn_mm':                               'shn_MM.UTF-8',
13527db96d56Sopenharmony_ci    'shs_ca':                               'shs_CA.UTF-8',
13537db96d56Sopenharmony_ci    'si':                                   'si_LK.UTF-8',
13547db96d56Sopenharmony_ci    'si_lk':                                'si_LK.UTF-8',
13557db96d56Sopenharmony_ci    'sid_et':                               'sid_ET.UTF-8',
13567db96d56Sopenharmony_ci    'sinhala':                              'si_LK.UTF-8',
13577db96d56Sopenharmony_ci    'sk':                                   'sk_SK.ISO8859-2',
13587db96d56Sopenharmony_ci    'sk_sk':                                'sk_SK.ISO8859-2',
13597db96d56Sopenharmony_ci    'sl':                                   'sl_SI.ISO8859-2',
13607db96d56Sopenharmony_ci    'sl_cs':                                'sl_CS.ISO8859-2',
13617db96d56Sopenharmony_ci    'sl_si':                                'sl_SI.ISO8859-2',
13627db96d56Sopenharmony_ci    'slovak':                               'sk_SK.ISO8859-2',
13637db96d56Sopenharmony_ci    'slovene':                              'sl_SI.ISO8859-2',
13647db96d56Sopenharmony_ci    'slovenian':                            'sl_SI.ISO8859-2',
13657db96d56Sopenharmony_ci    'sm_ws':                                'sm_WS.UTF-8',
13667db96d56Sopenharmony_ci    'so_dj':                                'so_DJ.ISO8859-1',
13677db96d56Sopenharmony_ci    'so_et':                                'so_ET.UTF-8',
13687db96d56Sopenharmony_ci    'so_ke':                                'so_KE.ISO8859-1',
13697db96d56Sopenharmony_ci    'so_so':                                'so_SO.ISO8859-1',
13707db96d56Sopenharmony_ci    'sp':                                   'sr_CS.ISO8859-5',
13717db96d56Sopenharmony_ci    'sp_yu':                                'sr_CS.ISO8859-5',
13727db96d56Sopenharmony_ci    'spanish':                              'es_ES.ISO8859-1',
13737db96d56Sopenharmony_ci    'spanish_spain':                        'es_ES.ISO8859-1',
13747db96d56Sopenharmony_ci    'sq':                                   'sq_AL.ISO8859-2',
13757db96d56Sopenharmony_ci    'sq_al':                                'sq_AL.ISO8859-2',
13767db96d56Sopenharmony_ci    'sq_mk':                                'sq_MK.UTF-8',
13777db96d56Sopenharmony_ci    'sr':                                   'sr_RS.UTF-8',
13787db96d56Sopenharmony_ci    'sr@cyrillic':                          'sr_RS.UTF-8',
13797db96d56Sopenharmony_ci    'sr@latn':                              'sr_CS.UTF-8@latin',
13807db96d56Sopenharmony_ci    'sr_cs':                                'sr_CS.UTF-8',
13817db96d56Sopenharmony_ci    'sr_cs.iso88592@latn':                  'sr_CS.ISO8859-2',
13827db96d56Sopenharmony_ci    'sr_cs@latn':                           'sr_CS.UTF-8@latin',
13837db96d56Sopenharmony_ci    'sr_me':                                'sr_ME.UTF-8',
13847db96d56Sopenharmony_ci    'sr_rs':                                'sr_RS.UTF-8',
13857db96d56Sopenharmony_ci    'sr_rs@latn':                           'sr_RS.UTF-8@latin',
13867db96d56Sopenharmony_ci    'sr_sp':                                'sr_CS.ISO8859-2',
13877db96d56Sopenharmony_ci    'sr_yu':                                'sr_RS.UTF-8@latin',
13887db96d56Sopenharmony_ci    'sr_yu.cp1251@cyrillic':                'sr_CS.CP1251',
13897db96d56Sopenharmony_ci    'sr_yu.iso88592':                       'sr_CS.ISO8859-2',
13907db96d56Sopenharmony_ci    'sr_yu.iso88595':                       'sr_CS.ISO8859-5',
13917db96d56Sopenharmony_ci    'sr_yu.iso88595@cyrillic':              'sr_CS.ISO8859-5',
13927db96d56Sopenharmony_ci    'sr_yu.microsoftcp1251@cyrillic':       'sr_CS.CP1251',
13937db96d56Sopenharmony_ci    'sr_yu.utf8':                           'sr_RS.UTF-8',
13947db96d56Sopenharmony_ci    'sr_yu.utf8@cyrillic':                  'sr_RS.UTF-8',
13957db96d56Sopenharmony_ci    'sr_yu@cyrillic':                       'sr_RS.UTF-8',
13967db96d56Sopenharmony_ci    'ss':                                   'ss_ZA.ISO8859-1',
13977db96d56Sopenharmony_ci    'ss_za':                                'ss_ZA.ISO8859-1',
13987db96d56Sopenharmony_ci    'st':                                   'st_ZA.ISO8859-1',
13997db96d56Sopenharmony_ci    'st_za':                                'st_ZA.ISO8859-1',
14007db96d56Sopenharmony_ci    'sv':                                   'sv_SE.ISO8859-1',
14017db96d56Sopenharmony_ci    'sv_fi':                                'sv_FI.ISO8859-1',
14027db96d56Sopenharmony_ci    'sv_se':                                'sv_SE.ISO8859-1',
14037db96d56Sopenharmony_ci    'sw_ke':                                'sw_KE.UTF-8',
14047db96d56Sopenharmony_ci    'sw_tz':                                'sw_TZ.UTF-8',
14057db96d56Sopenharmony_ci    'swedish':                              'sv_SE.ISO8859-1',
14067db96d56Sopenharmony_ci    'szl_pl':                               'szl_PL.UTF-8',
14077db96d56Sopenharmony_ci    'ta':                                   'ta_IN.TSCII-0',
14087db96d56Sopenharmony_ci    'ta_in':                                'ta_IN.TSCII-0',
14097db96d56Sopenharmony_ci    'ta_in.tscii':                          'ta_IN.TSCII-0',
14107db96d56Sopenharmony_ci    'ta_in.tscii0':                         'ta_IN.TSCII-0',
14117db96d56Sopenharmony_ci    'ta_lk':                                'ta_LK.UTF-8',
14127db96d56Sopenharmony_ci    'tcy_in.utf8':                          'tcy_IN.UTF-8',
14137db96d56Sopenharmony_ci    'te':                                   'te_IN.UTF-8',
14147db96d56Sopenharmony_ci    'te_in':                                'te_IN.UTF-8',
14157db96d56Sopenharmony_ci    'tg':                                   'tg_TJ.KOI8-C',
14167db96d56Sopenharmony_ci    'tg_tj':                                'tg_TJ.KOI8-C',
14177db96d56Sopenharmony_ci    'th':                                   'th_TH.ISO8859-11',
14187db96d56Sopenharmony_ci    'th_th':                                'th_TH.ISO8859-11',
14197db96d56Sopenharmony_ci    'th_th.tactis':                         'th_TH.TIS620',
14207db96d56Sopenharmony_ci    'th_th.tis620':                         'th_TH.TIS620',
14217db96d56Sopenharmony_ci    'thai':                                 'th_TH.ISO8859-11',
14227db96d56Sopenharmony_ci    'the_np':                               'the_NP.UTF-8',
14237db96d56Sopenharmony_ci    'ti_er':                                'ti_ER.UTF-8',
14247db96d56Sopenharmony_ci    'ti_et':                                'ti_ET.UTF-8',
14257db96d56Sopenharmony_ci    'tig_er':                               'tig_ER.UTF-8',
14267db96d56Sopenharmony_ci    'tk_tm':                                'tk_TM.UTF-8',
14277db96d56Sopenharmony_ci    'tl':                                   'tl_PH.ISO8859-1',
14287db96d56Sopenharmony_ci    'tl_ph':                                'tl_PH.ISO8859-1',
14297db96d56Sopenharmony_ci    'tn':                                   'tn_ZA.ISO8859-15',
14307db96d56Sopenharmony_ci    'tn_za':                                'tn_ZA.ISO8859-15',
14317db96d56Sopenharmony_ci    'to_to':                                'to_TO.UTF-8',
14327db96d56Sopenharmony_ci    'tpi_pg':                               'tpi_PG.UTF-8',
14337db96d56Sopenharmony_ci    'tr':                                   'tr_TR.ISO8859-9',
14347db96d56Sopenharmony_ci    'tr_cy':                                'tr_CY.ISO8859-9',
14357db96d56Sopenharmony_ci    'tr_tr':                                'tr_TR.ISO8859-9',
14367db96d56Sopenharmony_ci    'ts':                                   'ts_ZA.ISO8859-1',
14377db96d56Sopenharmony_ci    'ts_za':                                'ts_ZA.ISO8859-1',
14387db96d56Sopenharmony_ci    'tt':                                   'tt_RU.TATAR-CYR',
14397db96d56Sopenharmony_ci    'tt_ru':                                'tt_RU.TATAR-CYR',
14407db96d56Sopenharmony_ci    'tt_ru.tatarcyr':                       'tt_RU.TATAR-CYR',
14417db96d56Sopenharmony_ci    'tt_ru@iqtelif':                        'tt_RU.UTF-8@iqtelif',
14427db96d56Sopenharmony_ci    'turkish':                              'tr_TR.ISO8859-9',
14437db96d56Sopenharmony_ci    'ug_cn':                                'ug_CN.UTF-8',
14447db96d56Sopenharmony_ci    'uk':                                   'uk_UA.KOI8-U',
14457db96d56Sopenharmony_ci    'uk_ua':                                'uk_UA.KOI8-U',
14467db96d56Sopenharmony_ci    'univ':                                 'en_US.utf',
14477db96d56Sopenharmony_ci    'universal':                            'en_US.utf',
14487db96d56Sopenharmony_ci    'universal.utf8@ucs4':                  'en_US.UTF-8',
14497db96d56Sopenharmony_ci    'unm_us':                               'unm_US.UTF-8',
14507db96d56Sopenharmony_ci    'ur':                                   'ur_PK.CP1256',
14517db96d56Sopenharmony_ci    'ur_in':                                'ur_IN.UTF-8',
14527db96d56Sopenharmony_ci    'ur_pk':                                'ur_PK.CP1256',
14537db96d56Sopenharmony_ci    'uz':                                   'uz_UZ.UTF-8',
14547db96d56Sopenharmony_ci    'uz_uz':                                'uz_UZ.UTF-8',
14557db96d56Sopenharmony_ci    'uz_uz@cyrillic':                       'uz_UZ.UTF-8',
14567db96d56Sopenharmony_ci    've':                                   've_ZA.UTF-8',
14577db96d56Sopenharmony_ci    've_za':                                've_ZA.UTF-8',
14587db96d56Sopenharmony_ci    'vi':                                   'vi_VN.TCVN',
14597db96d56Sopenharmony_ci    'vi_vn':                                'vi_VN.TCVN',
14607db96d56Sopenharmony_ci    'vi_vn.tcvn':                           'vi_VN.TCVN',
14617db96d56Sopenharmony_ci    'vi_vn.tcvn5712':                       'vi_VN.TCVN',
14627db96d56Sopenharmony_ci    'vi_vn.viscii':                         'vi_VN.VISCII',
14637db96d56Sopenharmony_ci    'vi_vn.viscii111':                      'vi_VN.VISCII',
14647db96d56Sopenharmony_ci    'wa':                                   'wa_BE.ISO8859-1',
14657db96d56Sopenharmony_ci    'wa_be':                                'wa_BE.ISO8859-1',
14667db96d56Sopenharmony_ci    'wae_ch':                               'wae_CH.UTF-8',
14677db96d56Sopenharmony_ci    'wal_et':                               'wal_ET.UTF-8',
14687db96d56Sopenharmony_ci    'wo_sn':                                'wo_SN.UTF-8',
14697db96d56Sopenharmony_ci    'xh':                                   'xh_ZA.ISO8859-1',
14707db96d56Sopenharmony_ci    'xh_za':                                'xh_ZA.ISO8859-1',
14717db96d56Sopenharmony_ci    'yi':                                   'yi_US.CP1255',
14727db96d56Sopenharmony_ci    'yi_us':                                'yi_US.CP1255',
14737db96d56Sopenharmony_ci    'yo_ng':                                'yo_NG.UTF-8',
14747db96d56Sopenharmony_ci    'yue_hk':                               'yue_HK.UTF-8',
14757db96d56Sopenharmony_ci    'yuw_pg':                               'yuw_PG.UTF-8',
14767db96d56Sopenharmony_ci    'zh':                                   'zh_CN.eucCN',
14777db96d56Sopenharmony_ci    'zh_cn':                                'zh_CN.gb2312',
14787db96d56Sopenharmony_ci    'zh_cn.big5':                           'zh_TW.big5',
14797db96d56Sopenharmony_ci    'zh_cn.euc':                            'zh_CN.eucCN',
14807db96d56Sopenharmony_ci    'zh_hk':                                'zh_HK.big5hkscs',
14817db96d56Sopenharmony_ci    'zh_hk.big5hk':                         'zh_HK.big5hkscs',
14827db96d56Sopenharmony_ci    'zh_sg':                                'zh_SG.GB2312',
14837db96d56Sopenharmony_ci    'zh_sg.gbk':                            'zh_SG.GBK',
14847db96d56Sopenharmony_ci    'zh_tw':                                'zh_TW.big5',
14857db96d56Sopenharmony_ci    'zh_tw.euc':                            'zh_TW.eucTW',
14867db96d56Sopenharmony_ci    'zh_tw.euctw':                          'zh_TW.eucTW',
14877db96d56Sopenharmony_ci    'zu':                                   'zu_ZA.ISO8859-1',
14887db96d56Sopenharmony_ci    'zu_za':                                'zu_ZA.ISO8859-1',
14897db96d56Sopenharmony_ci}
14907db96d56Sopenharmony_ci
14917db96d56Sopenharmony_ci#
14927db96d56Sopenharmony_ci# This maps Windows language identifiers to locale strings.
14937db96d56Sopenharmony_ci#
14947db96d56Sopenharmony_ci# This list has been updated from
14957db96d56Sopenharmony_ci# http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_238z.asp
14967db96d56Sopenharmony_ci# to include every locale up to Windows Vista.
14977db96d56Sopenharmony_ci#
14987db96d56Sopenharmony_ci# NOTE: this mapping is incomplete.  If your language is missing, please
14997db96d56Sopenharmony_ci# submit a bug report to the Python bug tracker at http://bugs.python.org/
15007db96d56Sopenharmony_ci# Make sure you include the missing language identifier and the suggested
15017db96d56Sopenharmony_ci# locale code.
15027db96d56Sopenharmony_ci#
15037db96d56Sopenharmony_ci
15047db96d56Sopenharmony_ciwindows_locale = {
15057db96d56Sopenharmony_ci    0x0436: "af_ZA", # Afrikaans
15067db96d56Sopenharmony_ci    0x041c: "sq_AL", # Albanian
15077db96d56Sopenharmony_ci    0x0484: "gsw_FR",# Alsatian - France
15087db96d56Sopenharmony_ci    0x045e: "am_ET", # Amharic - Ethiopia
15097db96d56Sopenharmony_ci    0x0401: "ar_SA", # Arabic - Saudi Arabia
15107db96d56Sopenharmony_ci    0x0801: "ar_IQ", # Arabic - Iraq
15117db96d56Sopenharmony_ci    0x0c01: "ar_EG", # Arabic - Egypt
15127db96d56Sopenharmony_ci    0x1001: "ar_LY", # Arabic - Libya
15137db96d56Sopenharmony_ci    0x1401: "ar_DZ", # Arabic - Algeria
15147db96d56Sopenharmony_ci    0x1801: "ar_MA", # Arabic - Morocco
15157db96d56Sopenharmony_ci    0x1c01: "ar_TN", # Arabic - Tunisia
15167db96d56Sopenharmony_ci    0x2001: "ar_OM", # Arabic - Oman
15177db96d56Sopenharmony_ci    0x2401: "ar_YE", # Arabic - Yemen
15187db96d56Sopenharmony_ci    0x2801: "ar_SY", # Arabic - Syria
15197db96d56Sopenharmony_ci    0x2c01: "ar_JO", # Arabic - Jordan
15207db96d56Sopenharmony_ci    0x3001: "ar_LB", # Arabic - Lebanon
15217db96d56Sopenharmony_ci    0x3401: "ar_KW", # Arabic - Kuwait
15227db96d56Sopenharmony_ci    0x3801: "ar_AE", # Arabic - United Arab Emirates
15237db96d56Sopenharmony_ci    0x3c01: "ar_BH", # Arabic - Bahrain
15247db96d56Sopenharmony_ci    0x4001: "ar_QA", # Arabic - Qatar
15257db96d56Sopenharmony_ci    0x042b: "hy_AM", # Armenian
15267db96d56Sopenharmony_ci    0x044d: "as_IN", # Assamese - India
15277db96d56Sopenharmony_ci    0x042c: "az_AZ", # Azeri - Latin
15287db96d56Sopenharmony_ci    0x082c: "az_AZ", # Azeri - Cyrillic
15297db96d56Sopenharmony_ci    0x046d: "ba_RU", # Bashkir
15307db96d56Sopenharmony_ci    0x042d: "eu_ES", # Basque - Russia
15317db96d56Sopenharmony_ci    0x0423: "be_BY", # Belarusian
15327db96d56Sopenharmony_ci    0x0445: "bn_IN", # Begali
15337db96d56Sopenharmony_ci    0x201a: "bs_BA", # Bosnian - Cyrillic
15347db96d56Sopenharmony_ci    0x141a: "bs_BA", # Bosnian - Latin
15357db96d56Sopenharmony_ci    0x047e: "br_FR", # Breton - France
15367db96d56Sopenharmony_ci    0x0402: "bg_BG", # Bulgarian
15377db96d56Sopenharmony_ci#    0x0455: "my_MM", # Burmese - Not supported
15387db96d56Sopenharmony_ci    0x0403: "ca_ES", # Catalan
15397db96d56Sopenharmony_ci    0x0004: "zh_CHS",# Chinese - Simplified
15407db96d56Sopenharmony_ci    0x0404: "zh_TW", # Chinese - Taiwan
15417db96d56Sopenharmony_ci    0x0804: "zh_CN", # Chinese - PRC
15427db96d56Sopenharmony_ci    0x0c04: "zh_HK", # Chinese - Hong Kong S.A.R.
15437db96d56Sopenharmony_ci    0x1004: "zh_SG", # Chinese - Singapore
15447db96d56Sopenharmony_ci    0x1404: "zh_MO", # Chinese - Macao S.A.R.
15457db96d56Sopenharmony_ci    0x7c04: "zh_CHT",# Chinese - Traditional
15467db96d56Sopenharmony_ci    0x0483: "co_FR", # Corsican - France
15477db96d56Sopenharmony_ci    0x041a: "hr_HR", # Croatian
15487db96d56Sopenharmony_ci    0x101a: "hr_BA", # Croatian - Bosnia
15497db96d56Sopenharmony_ci    0x0405: "cs_CZ", # Czech
15507db96d56Sopenharmony_ci    0x0406: "da_DK", # Danish
15517db96d56Sopenharmony_ci    0x048c: "gbz_AF",# Dari - Afghanistan
15527db96d56Sopenharmony_ci    0x0465: "div_MV",# Divehi - Maldives
15537db96d56Sopenharmony_ci    0x0413: "nl_NL", # Dutch - The Netherlands
15547db96d56Sopenharmony_ci    0x0813: "nl_BE", # Dutch - Belgium
15557db96d56Sopenharmony_ci    0x0409: "en_US", # English - United States
15567db96d56Sopenharmony_ci    0x0809: "en_GB", # English - United Kingdom
15577db96d56Sopenharmony_ci    0x0c09: "en_AU", # English - Australia
15587db96d56Sopenharmony_ci    0x1009: "en_CA", # English - Canada
15597db96d56Sopenharmony_ci    0x1409: "en_NZ", # English - New Zealand
15607db96d56Sopenharmony_ci    0x1809: "en_IE", # English - Ireland
15617db96d56Sopenharmony_ci    0x1c09: "en_ZA", # English - South Africa
15627db96d56Sopenharmony_ci    0x2009: "en_JA", # English - Jamaica
15637db96d56Sopenharmony_ci    0x2409: "en_CB", # English - Caribbean
15647db96d56Sopenharmony_ci    0x2809: "en_BZ", # English - Belize
15657db96d56Sopenharmony_ci    0x2c09: "en_TT", # English - Trinidad
15667db96d56Sopenharmony_ci    0x3009: "en_ZW", # English - Zimbabwe
15677db96d56Sopenharmony_ci    0x3409: "en_PH", # English - Philippines
15687db96d56Sopenharmony_ci    0x4009: "en_IN", # English - India
15697db96d56Sopenharmony_ci    0x4409: "en_MY", # English - Malaysia
15707db96d56Sopenharmony_ci    0x4809: "en_IN", # English - Singapore
15717db96d56Sopenharmony_ci    0x0425: "et_EE", # Estonian
15727db96d56Sopenharmony_ci    0x0438: "fo_FO", # Faroese
15737db96d56Sopenharmony_ci    0x0464: "fil_PH",# Filipino
15747db96d56Sopenharmony_ci    0x040b: "fi_FI", # Finnish
15757db96d56Sopenharmony_ci    0x040c: "fr_FR", # French - France
15767db96d56Sopenharmony_ci    0x080c: "fr_BE", # French - Belgium
15777db96d56Sopenharmony_ci    0x0c0c: "fr_CA", # French - Canada
15787db96d56Sopenharmony_ci    0x100c: "fr_CH", # French - Switzerland
15797db96d56Sopenharmony_ci    0x140c: "fr_LU", # French - Luxembourg
15807db96d56Sopenharmony_ci    0x180c: "fr_MC", # French - Monaco
15817db96d56Sopenharmony_ci    0x0462: "fy_NL", # Frisian - Netherlands
15827db96d56Sopenharmony_ci    0x0456: "gl_ES", # Galician
15837db96d56Sopenharmony_ci    0x0437: "ka_GE", # Georgian
15847db96d56Sopenharmony_ci    0x0407: "de_DE", # German - Germany
15857db96d56Sopenharmony_ci    0x0807: "de_CH", # German - Switzerland
15867db96d56Sopenharmony_ci    0x0c07: "de_AT", # German - Austria
15877db96d56Sopenharmony_ci    0x1007: "de_LU", # German - Luxembourg
15887db96d56Sopenharmony_ci    0x1407: "de_LI", # German - Liechtenstein
15897db96d56Sopenharmony_ci    0x0408: "el_GR", # Greek
15907db96d56Sopenharmony_ci    0x046f: "kl_GL", # Greenlandic - Greenland
15917db96d56Sopenharmony_ci    0x0447: "gu_IN", # Gujarati
15927db96d56Sopenharmony_ci    0x0468: "ha_NG", # Hausa - Latin
15937db96d56Sopenharmony_ci    0x040d: "he_IL", # Hebrew
15947db96d56Sopenharmony_ci    0x0439: "hi_IN", # Hindi
15957db96d56Sopenharmony_ci    0x040e: "hu_HU", # Hungarian
15967db96d56Sopenharmony_ci    0x040f: "is_IS", # Icelandic
15977db96d56Sopenharmony_ci    0x0421: "id_ID", # Indonesian
15987db96d56Sopenharmony_ci    0x045d: "iu_CA", # Inuktitut - Syllabics
15997db96d56Sopenharmony_ci    0x085d: "iu_CA", # Inuktitut - Latin
16007db96d56Sopenharmony_ci    0x083c: "ga_IE", # Irish - Ireland
16017db96d56Sopenharmony_ci    0x0410: "it_IT", # Italian - Italy
16027db96d56Sopenharmony_ci    0x0810: "it_CH", # Italian - Switzerland
16037db96d56Sopenharmony_ci    0x0411: "ja_JP", # Japanese
16047db96d56Sopenharmony_ci    0x044b: "kn_IN", # Kannada - India
16057db96d56Sopenharmony_ci    0x043f: "kk_KZ", # Kazakh
16067db96d56Sopenharmony_ci    0x0453: "kh_KH", # Khmer - Cambodia
16077db96d56Sopenharmony_ci    0x0486: "qut_GT",# K'iche - Guatemala
16087db96d56Sopenharmony_ci    0x0487: "rw_RW", # Kinyarwanda - Rwanda
16097db96d56Sopenharmony_ci    0x0457: "kok_IN",# Konkani
16107db96d56Sopenharmony_ci    0x0412: "ko_KR", # Korean
16117db96d56Sopenharmony_ci    0x0440: "ky_KG", # Kyrgyz
16127db96d56Sopenharmony_ci    0x0454: "lo_LA", # Lao - Lao PDR
16137db96d56Sopenharmony_ci    0x0426: "lv_LV", # Latvian
16147db96d56Sopenharmony_ci    0x0427: "lt_LT", # Lithuanian
16157db96d56Sopenharmony_ci    0x082e: "dsb_DE",# Lower Sorbian - Germany
16167db96d56Sopenharmony_ci    0x046e: "lb_LU", # Luxembourgish
16177db96d56Sopenharmony_ci    0x042f: "mk_MK", # FYROM Macedonian
16187db96d56Sopenharmony_ci    0x043e: "ms_MY", # Malay - Malaysia
16197db96d56Sopenharmony_ci    0x083e: "ms_BN", # Malay - Brunei Darussalam
16207db96d56Sopenharmony_ci    0x044c: "ml_IN", # Malayalam - India
16217db96d56Sopenharmony_ci    0x043a: "mt_MT", # Maltese
16227db96d56Sopenharmony_ci    0x0481: "mi_NZ", # Maori
16237db96d56Sopenharmony_ci    0x047a: "arn_CL",# Mapudungun
16247db96d56Sopenharmony_ci    0x044e: "mr_IN", # Marathi
16257db96d56Sopenharmony_ci    0x047c: "moh_CA",# Mohawk - Canada
16267db96d56Sopenharmony_ci    0x0450: "mn_MN", # Mongolian - Cyrillic
16277db96d56Sopenharmony_ci    0x0850: "mn_CN", # Mongolian - PRC
16287db96d56Sopenharmony_ci    0x0461: "ne_NP", # Nepali
16297db96d56Sopenharmony_ci    0x0414: "nb_NO", # Norwegian - Bokmal
16307db96d56Sopenharmony_ci    0x0814: "nn_NO", # Norwegian - Nynorsk
16317db96d56Sopenharmony_ci    0x0482: "oc_FR", # Occitan - France
16327db96d56Sopenharmony_ci    0x0448: "or_IN", # Oriya - India
16337db96d56Sopenharmony_ci    0x0463: "ps_AF", # Pashto - Afghanistan
16347db96d56Sopenharmony_ci    0x0429: "fa_IR", # Persian
16357db96d56Sopenharmony_ci    0x0415: "pl_PL", # Polish
16367db96d56Sopenharmony_ci    0x0416: "pt_BR", # Portuguese - Brazil
16377db96d56Sopenharmony_ci    0x0816: "pt_PT", # Portuguese - Portugal
16387db96d56Sopenharmony_ci    0x0446: "pa_IN", # Punjabi
16397db96d56Sopenharmony_ci    0x046b: "quz_BO",# Quechua (Bolivia)
16407db96d56Sopenharmony_ci    0x086b: "quz_EC",# Quechua (Ecuador)
16417db96d56Sopenharmony_ci    0x0c6b: "quz_PE",# Quechua (Peru)
16427db96d56Sopenharmony_ci    0x0418: "ro_RO", # Romanian - Romania
16437db96d56Sopenharmony_ci    0x0417: "rm_CH", # Romansh
16447db96d56Sopenharmony_ci    0x0419: "ru_RU", # Russian
16457db96d56Sopenharmony_ci    0x243b: "smn_FI",# Sami Finland
16467db96d56Sopenharmony_ci    0x103b: "smj_NO",# Sami Norway
16477db96d56Sopenharmony_ci    0x143b: "smj_SE",# Sami Sweden
16487db96d56Sopenharmony_ci    0x043b: "se_NO", # Sami Northern Norway
16497db96d56Sopenharmony_ci    0x083b: "se_SE", # Sami Northern Sweden
16507db96d56Sopenharmony_ci    0x0c3b: "se_FI", # Sami Northern Finland
16517db96d56Sopenharmony_ci    0x203b: "sms_FI",# Sami Skolt
16527db96d56Sopenharmony_ci    0x183b: "sma_NO",# Sami Southern Norway
16537db96d56Sopenharmony_ci    0x1c3b: "sma_SE",# Sami Southern Sweden
16547db96d56Sopenharmony_ci    0x044f: "sa_IN", # Sanskrit
16557db96d56Sopenharmony_ci    0x0c1a: "sr_SP", # Serbian - Cyrillic
16567db96d56Sopenharmony_ci    0x1c1a: "sr_BA", # Serbian - Bosnia Cyrillic
16577db96d56Sopenharmony_ci    0x081a: "sr_SP", # Serbian - Latin
16587db96d56Sopenharmony_ci    0x181a: "sr_BA", # Serbian - Bosnia Latin
16597db96d56Sopenharmony_ci    0x045b: "si_LK", # Sinhala - Sri Lanka
16607db96d56Sopenharmony_ci    0x046c: "ns_ZA", # Northern Sotho
16617db96d56Sopenharmony_ci    0x0432: "tn_ZA", # Setswana - Southern Africa
16627db96d56Sopenharmony_ci    0x041b: "sk_SK", # Slovak
16637db96d56Sopenharmony_ci    0x0424: "sl_SI", # Slovenian
16647db96d56Sopenharmony_ci    0x040a: "es_ES", # Spanish - Spain
16657db96d56Sopenharmony_ci    0x080a: "es_MX", # Spanish - Mexico
16667db96d56Sopenharmony_ci    0x0c0a: "es_ES", # Spanish - Spain (Modern)
16677db96d56Sopenharmony_ci    0x100a: "es_GT", # Spanish - Guatemala
16687db96d56Sopenharmony_ci    0x140a: "es_CR", # Spanish - Costa Rica
16697db96d56Sopenharmony_ci    0x180a: "es_PA", # Spanish - Panama
16707db96d56Sopenharmony_ci    0x1c0a: "es_DO", # Spanish - Dominican Republic
16717db96d56Sopenharmony_ci    0x200a: "es_VE", # Spanish - Venezuela
16727db96d56Sopenharmony_ci    0x240a: "es_CO", # Spanish - Colombia
16737db96d56Sopenharmony_ci    0x280a: "es_PE", # Spanish - Peru
16747db96d56Sopenharmony_ci    0x2c0a: "es_AR", # Spanish - Argentina
16757db96d56Sopenharmony_ci    0x300a: "es_EC", # Spanish - Ecuador
16767db96d56Sopenharmony_ci    0x340a: "es_CL", # Spanish - Chile
16777db96d56Sopenharmony_ci    0x380a: "es_UR", # Spanish - Uruguay
16787db96d56Sopenharmony_ci    0x3c0a: "es_PY", # Spanish - Paraguay
16797db96d56Sopenharmony_ci    0x400a: "es_BO", # Spanish - Bolivia
16807db96d56Sopenharmony_ci    0x440a: "es_SV", # Spanish - El Salvador
16817db96d56Sopenharmony_ci    0x480a: "es_HN", # Spanish - Honduras
16827db96d56Sopenharmony_ci    0x4c0a: "es_NI", # Spanish - Nicaragua
16837db96d56Sopenharmony_ci    0x500a: "es_PR", # Spanish - Puerto Rico
16847db96d56Sopenharmony_ci    0x540a: "es_US", # Spanish - United States
16857db96d56Sopenharmony_ci#    0x0430: "", # Sutu - Not supported
16867db96d56Sopenharmony_ci    0x0441: "sw_KE", # Swahili
16877db96d56Sopenharmony_ci    0x041d: "sv_SE", # Swedish - Sweden
16887db96d56Sopenharmony_ci    0x081d: "sv_FI", # Swedish - Finland
16897db96d56Sopenharmony_ci    0x045a: "syr_SY",# Syriac
16907db96d56Sopenharmony_ci    0x0428: "tg_TJ", # Tajik - Cyrillic
16917db96d56Sopenharmony_ci    0x085f: "tmz_DZ",# Tamazight - Latin
16927db96d56Sopenharmony_ci    0x0449: "ta_IN", # Tamil
16937db96d56Sopenharmony_ci    0x0444: "tt_RU", # Tatar
16947db96d56Sopenharmony_ci    0x044a: "te_IN", # Telugu
16957db96d56Sopenharmony_ci    0x041e: "th_TH", # Thai
16967db96d56Sopenharmony_ci    0x0851: "bo_BT", # Tibetan - Bhutan
16977db96d56Sopenharmony_ci    0x0451: "bo_CN", # Tibetan - PRC
16987db96d56Sopenharmony_ci    0x041f: "tr_TR", # Turkish
16997db96d56Sopenharmony_ci    0x0442: "tk_TM", # Turkmen - Cyrillic
17007db96d56Sopenharmony_ci    0x0480: "ug_CN", # Uighur - Arabic
17017db96d56Sopenharmony_ci    0x0422: "uk_UA", # Ukrainian
17027db96d56Sopenharmony_ci    0x042e: "wen_DE",# Upper Sorbian - Germany
17037db96d56Sopenharmony_ci    0x0420: "ur_PK", # Urdu
17047db96d56Sopenharmony_ci    0x0820: "ur_IN", # Urdu - India
17057db96d56Sopenharmony_ci    0x0443: "uz_UZ", # Uzbek - Latin
17067db96d56Sopenharmony_ci    0x0843: "uz_UZ", # Uzbek - Cyrillic
17077db96d56Sopenharmony_ci    0x042a: "vi_VN", # Vietnamese
17087db96d56Sopenharmony_ci    0x0452: "cy_GB", # Welsh
17097db96d56Sopenharmony_ci    0x0488: "wo_SN", # Wolof - Senegal
17107db96d56Sopenharmony_ci    0x0434: "xh_ZA", # Xhosa - South Africa
17117db96d56Sopenharmony_ci    0x0485: "sah_RU",# Yakut - Cyrillic
17127db96d56Sopenharmony_ci    0x0478: "ii_CN", # Yi - PRC
17137db96d56Sopenharmony_ci    0x046a: "yo_NG", # Yoruba - Nigeria
17147db96d56Sopenharmony_ci    0x0435: "zu_ZA", # Zulu
17157db96d56Sopenharmony_ci}
17167db96d56Sopenharmony_ci
17177db96d56Sopenharmony_cidef _print_locale():
17187db96d56Sopenharmony_ci
17197db96d56Sopenharmony_ci    """ Test function.
17207db96d56Sopenharmony_ci    """
17217db96d56Sopenharmony_ci    categories = {}
17227db96d56Sopenharmony_ci    def _init_categories(categories=categories):
17237db96d56Sopenharmony_ci        for k,v in globals().items():
17247db96d56Sopenharmony_ci            if k[:3] == 'LC_':
17257db96d56Sopenharmony_ci                categories[k] = v
17267db96d56Sopenharmony_ci    _init_categories()
17277db96d56Sopenharmony_ci    del categories['LC_ALL']
17287db96d56Sopenharmony_ci
17297db96d56Sopenharmony_ci    print('Locale defaults as determined by getdefaultlocale():')
17307db96d56Sopenharmony_ci    print('-'*72)
17317db96d56Sopenharmony_ci    lang, enc = getdefaultlocale()
17327db96d56Sopenharmony_ci    print('Language: ', lang or '(undefined)')
17337db96d56Sopenharmony_ci    print('Encoding: ', enc or '(undefined)')
17347db96d56Sopenharmony_ci    print()
17357db96d56Sopenharmony_ci
17367db96d56Sopenharmony_ci    print('Locale settings on startup:')
17377db96d56Sopenharmony_ci    print('-'*72)
17387db96d56Sopenharmony_ci    for name,category in categories.items():
17397db96d56Sopenharmony_ci        print(name, '...')
17407db96d56Sopenharmony_ci        lang, enc = getlocale(category)
17417db96d56Sopenharmony_ci        print('   Language: ', lang or '(undefined)')
17427db96d56Sopenharmony_ci        print('   Encoding: ', enc or '(undefined)')
17437db96d56Sopenharmony_ci        print()
17447db96d56Sopenharmony_ci
17457db96d56Sopenharmony_ci    print()
17467db96d56Sopenharmony_ci    print('Locale settings after calling resetlocale():')
17477db96d56Sopenharmony_ci    print('-'*72)
17487db96d56Sopenharmony_ci    resetlocale()
17497db96d56Sopenharmony_ci    for name,category in categories.items():
17507db96d56Sopenharmony_ci        print(name, '...')
17517db96d56Sopenharmony_ci        lang, enc = getlocale(category)
17527db96d56Sopenharmony_ci        print('   Language: ', lang or '(undefined)')
17537db96d56Sopenharmony_ci        print('   Encoding: ', enc or '(undefined)')
17547db96d56Sopenharmony_ci        print()
17557db96d56Sopenharmony_ci
17567db96d56Sopenharmony_ci    try:
17577db96d56Sopenharmony_ci        setlocale(LC_ALL, "")
17587db96d56Sopenharmony_ci    except:
17597db96d56Sopenharmony_ci        print('NOTE:')
17607db96d56Sopenharmony_ci        print('setlocale(LC_ALL, "") does not support the default locale')
17617db96d56Sopenharmony_ci        print('given in the OS environment variables.')
17627db96d56Sopenharmony_ci    else:
17637db96d56Sopenharmony_ci        print()
17647db96d56Sopenharmony_ci        print('Locale settings after calling setlocale(LC_ALL, ""):')
17657db96d56Sopenharmony_ci        print('-'*72)
17667db96d56Sopenharmony_ci        for name,category in categories.items():
17677db96d56Sopenharmony_ci            print(name, '...')
17687db96d56Sopenharmony_ci            lang, enc = getlocale(category)
17697db96d56Sopenharmony_ci            print('   Language: ', lang or '(undefined)')
17707db96d56Sopenharmony_ci            print('   Encoding: ', enc or '(undefined)')
17717db96d56Sopenharmony_ci            print()
17727db96d56Sopenharmony_ci
17737db96d56Sopenharmony_ci###
17747db96d56Sopenharmony_ci
17757db96d56Sopenharmony_citry:
17767db96d56Sopenharmony_ci    LC_MESSAGES
17777db96d56Sopenharmony_ciexcept NameError:
17787db96d56Sopenharmony_ci    pass
17797db96d56Sopenharmony_cielse:
17807db96d56Sopenharmony_ci    __all__.append("LC_MESSAGES")
17817db96d56Sopenharmony_ci
17827db96d56Sopenharmony_ciif __name__=='__main__':
17837db96d56Sopenharmony_ci    print('Locale aliasing:')
17847db96d56Sopenharmony_ci    print()
17857db96d56Sopenharmony_ci    _print_locale()
17867db96d56Sopenharmony_ci    print()
17877db96d56Sopenharmony_ci    print('Number formatting:')
17887db96d56Sopenharmony_ci    print()
17897db96d56Sopenharmony_ci    _test()
1790