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