1*cda5da8dSAndroid Build Coastguard Worker"""Locale support module. 2*cda5da8dSAndroid Build Coastguard Worker 3*cda5da8dSAndroid Build Coastguard WorkerThe module provides low-level access to the C lib's locale APIs and adds high 4*cda5da8dSAndroid Build Coastguard Workerlevel number formatting APIs as well as a locale aliasing engine to complement 5*cda5da8dSAndroid Build Coastguard Workerthese. 6*cda5da8dSAndroid Build Coastguard Worker 7*cda5da8dSAndroid Build Coastguard WorkerThe aliasing engine includes support for many commonly used locale names and 8*cda5da8dSAndroid Build Coastguard Workermaps them to values suitable for passing to the C lib's setlocale() function. It 9*cda5da8dSAndroid Build Coastguard Workeralso includes default encodings for all supported locale names. 10*cda5da8dSAndroid Build Coastguard Worker 11*cda5da8dSAndroid Build Coastguard Worker""" 12*cda5da8dSAndroid Build Coastguard Worker 13*cda5da8dSAndroid Build Coastguard Workerimport sys 14*cda5da8dSAndroid Build Coastguard Workerimport encodings 15*cda5da8dSAndroid Build Coastguard Workerimport encodings.aliases 16*cda5da8dSAndroid Build Coastguard Workerimport re 17*cda5da8dSAndroid Build Coastguard Workerimport _collections_abc 18*cda5da8dSAndroid Build Coastguard Workerfrom builtins import str as _builtin_str 19*cda5da8dSAndroid Build Coastguard Workerimport functools 20*cda5da8dSAndroid Build Coastguard Worker 21*cda5da8dSAndroid Build Coastguard Worker# Try importing the _locale module. 22*cda5da8dSAndroid Build Coastguard Worker# 23*cda5da8dSAndroid Build Coastguard Worker# If this fails, fall back on a basic 'C' locale emulation. 24*cda5da8dSAndroid Build Coastguard Worker 25*cda5da8dSAndroid Build Coastguard Worker# Yuck: LC_MESSAGES is non-standard: can't tell whether it exists before 26*cda5da8dSAndroid Build Coastguard Worker# trying the import. So __all__ is also fiddled at the end of the file. 27*cda5da8dSAndroid Build Coastguard Worker__all__ = ["getlocale", "getdefaultlocale", "getpreferredencoding", "Error", 28*cda5da8dSAndroid Build Coastguard Worker "setlocale", "resetlocale", "localeconv", "strcoll", "strxfrm", 29*cda5da8dSAndroid Build Coastguard Worker "str", "atof", "atoi", "format", "format_string", "currency", 30*cda5da8dSAndroid Build Coastguard Worker "normalize", "LC_CTYPE", "LC_COLLATE", "LC_TIME", "LC_MONETARY", 31*cda5da8dSAndroid Build Coastguard Worker "LC_NUMERIC", "LC_ALL", "CHAR_MAX", "getencoding"] 32*cda5da8dSAndroid Build Coastguard Worker 33*cda5da8dSAndroid Build Coastguard Workerdef _strcoll(a,b): 34*cda5da8dSAndroid Build Coastguard Worker """ strcoll(string,string) -> int. 35*cda5da8dSAndroid Build Coastguard Worker Compares two strings according to the locale. 36*cda5da8dSAndroid Build Coastguard Worker """ 37*cda5da8dSAndroid Build Coastguard Worker return (a > b) - (a < b) 38*cda5da8dSAndroid Build Coastguard Worker 39*cda5da8dSAndroid Build Coastguard Workerdef _strxfrm(s): 40*cda5da8dSAndroid Build Coastguard Worker """ strxfrm(string) -> string. 41*cda5da8dSAndroid Build Coastguard Worker Returns a string that behaves for cmp locale-aware. 42*cda5da8dSAndroid Build Coastguard Worker """ 43*cda5da8dSAndroid Build Coastguard Worker return s 44*cda5da8dSAndroid Build Coastguard Worker 45*cda5da8dSAndroid Build Coastguard Workertry: 46*cda5da8dSAndroid Build Coastguard Worker 47*cda5da8dSAndroid Build Coastguard Worker from _locale import * 48*cda5da8dSAndroid Build Coastguard Worker 49*cda5da8dSAndroid Build Coastguard Workerexcept ImportError: 50*cda5da8dSAndroid Build Coastguard Worker 51*cda5da8dSAndroid Build Coastguard Worker # Locale emulation 52*cda5da8dSAndroid Build Coastguard Worker 53*cda5da8dSAndroid Build Coastguard Worker CHAR_MAX = 127 54*cda5da8dSAndroid Build Coastguard Worker LC_ALL = 6 55*cda5da8dSAndroid Build Coastguard Worker LC_COLLATE = 3 56*cda5da8dSAndroid Build Coastguard Worker LC_CTYPE = 0 57*cda5da8dSAndroid Build Coastguard Worker LC_MESSAGES = 5 58*cda5da8dSAndroid Build Coastguard Worker LC_MONETARY = 4 59*cda5da8dSAndroid Build Coastguard Worker LC_NUMERIC = 1 60*cda5da8dSAndroid Build Coastguard Worker LC_TIME = 2 61*cda5da8dSAndroid Build Coastguard Worker Error = ValueError 62*cda5da8dSAndroid Build Coastguard Worker 63*cda5da8dSAndroid Build Coastguard Worker def localeconv(): 64*cda5da8dSAndroid Build Coastguard Worker """ localeconv() -> dict. 65*cda5da8dSAndroid Build Coastguard Worker Returns numeric and monetary locale-specific parameters. 66*cda5da8dSAndroid Build Coastguard Worker """ 67*cda5da8dSAndroid Build Coastguard Worker # 'C' locale default values 68*cda5da8dSAndroid Build Coastguard Worker return {'grouping': [127], 69*cda5da8dSAndroid Build Coastguard Worker 'currency_symbol': '', 70*cda5da8dSAndroid Build Coastguard Worker 'n_sign_posn': 127, 71*cda5da8dSAndroid Build Coastguard Worker 'p_cs_precedes': 127, 72*cda5da8dSAndroid Build Coastguard Worker 'n_cs_precedes': 127, 73*cda5da8dSAndroid Build Coastguard Worker 'mon_grouping': [], 74*cda5da8dSAndroid Build Coastguard Worker 'n_sep_by_space': 127, 75*cda5da8dSAndroid Build Coastguard Worker 'decimal_point': '.', 76*cda5da8dSAndroid Build Coastguard Worker 'negative_sign': '', 77*cda5da8dSAndroid Build Coastguard Worker 'positive_sign': '', 78*cda5da8dSAndroid Build Coastguard Worker 'p_sep_by_space': 127, 79*cda5da8dSAndroid Build Coastguard Worker 'int_curr_symbol': '', 80*cda5da8dSAndroid Build Coastguard Worker 'p_sign_posn': 127, 81*cda5da8dSAndroid Build Coastguard Worker 'thousands_sep': '', 82*cda5da8dSAndroid Build Coastguard Worker 'mon_thousands_sep': '', 83*cda5da8dSAndroid Build Coastguard Worker 'frac_digits': 127, 84*cda5da8dSAndroid Build Coastguard Worker 'mon_decimal_point': '', 85*cda5da8dSAndroid Build Coastguard Worker 'int_frac_digits': 127} 86*cda5da8dSAndroid Build Coastguard Worker 87*cda5da8dSAndroid Build Coastguard Worker def setlocale(category, value=None): 88*cda5da8dSAndroid Build Coastguard Worker """ setlocale(integer,string=None) -> string. 89*cda5da8dSAndroid Build Coastguard Worker Activates/queries locale processing. 90*cda5da8dSAndroid Build Coastguard Worker """ 91*cda5da8dSAndroid Build Coastguard Worker if value not in (None, '', 'C'): 92*cda5da8dSAndroid Build Coastguard Worker raise Error('_locale emulation only supports "C" locale') 93*cda5da8dSAndroid Build Coastguard Worker return 'C' 94*cda5da8dSAndroid Build Coastguard Worker 95*cda5da8dSAndroid Build Coastguard Worker# These may or may not exist in _locale, so be sure to set them. 96*cda5da8dSAndroid Build Coastguard Workerif 'strxfrm' not in globals(): 97*cda5da8dSAndroid Build Coastguard Worker strxfrm = _strxfrm 98*cda5da8dSAndroid Build Coastguard Workerif 'strcoll' not in globals(): 99*cda5da8dSAndroid Build Coastguard Worker strcoll = _strcoll 100*cda5da8dSAndroid Build Coastguard Worker 101*cda5da8dSAndroid Build Coastguard Worker 102*cda5da8dSAndroid Build Coastguard Worker_localeconv = localeconv 103*cda5da8dSAndroid Build Coastguard Worker 104*cda5da8dSAndroid Build Coastguard Worker# With this dict, you can override some items of localeconv's return value. 105*cda5da8dSAndroid Build Coastguard Worker# This is useful for testing purposes. 106*cda5da8dSAndroid Build Coastguard Worker_override_localeconv = {} 107*cda5da8dSAndroid Build Coastguard Worker 108*cda5da8dSAndroid Build Coastguard Worker@functools.wraps(_localeconv) 109*cda5da8dSAndroid Build Coastguard Workerdef localeconv(): 110*cda5da8dSAndroid Build Coastguard Worker d = _localeconv() 111*cda5da8dSAndroid Build Coastguard Worker if _override_localeconv: 112*cda5da8dSAndroid Build Coastguard Worker d.update(_override_localeconv) 113*cda5da8dSAndroid Build Coastguard Worker return d 114*cda5da8dSAndroid Build Coastguard Worker 115*cda5da8dSAndroid Build Coastguard Worker 116*cda5da8dSAndroid Build Coastguard Worker### Number formatting APIs 117*cda5da8dSAndroid Build Coastguard Worker 118*cda5da8dSAndroid Build Coastguard Worker# Author: Martin von Loewis 119*cda5da8dSAndroid Build Coastguard Worker# improved by Georg Brandl 120*cda5da8dSAndroid Build Coastguard Worker 121*cda5da8dSAndroid Build Coastguard Worker# Iterate over grouping intervals 122*cda5da8dSAndroid Build Coastguard Workerdef _grouping_intervals(grouping): 123*cda5da8dSAndroid Build Coastguard Worker last_interval = None 124*cda5da8dSAndroid Build Coastguard Worker for interval in grouping: 125*cda5da8dSAndroid Build Coastguard Worker # if grouping is -1, we are done 126*cda5da8dSAndroid Build Coastguard Worker if interval == CHAR_MAX: 127*cda5da8dSAndroid Build Coastguard Worker return 128*cda5da8dSAndroid Build Coastguard Worker # 0: re-use last group ad infinitum 129*cda5da8dSAndroid Build Coastguard Worker if interval == 0: 130*cda5da8dSAndroid Build Coastguard Worker if last_interval is None: 131*cda5da8dSAndroid Build Coastguard Worker raise ValueError("invalid grouping") 132*cda5da8dSAndroid Build Coastguard Worker while True: 133*cda5da8dSAndroid Build Coastguard Worker yield last_interval 134*cda5da8dSAndroid Build Coastguard Worker yield interval 135*cda5da8dSAndroid Build Coastguard Worker last_interval = interval 136*cda5da8dSAndroid Build Coastguard Worker 137*cda5da8dSAndroid Build Coastguard Worker#perform the grouping from right to left 138*cda5da8dSAndroid Build Coastguard Workerdef _group(s, monetary=False): 139*cda5da8dSAndroid Build Coastguard Worker conv = localeconv() 140*cda5da8dSAndroid Build Coastguard Worker thousands_sep = conv[monetary and 'mon_thousands_sep' or 'thousands_sep'] 141*cda5da8dSAndroid Build Coastguard Worker grouping = conv[monetary and 'mon_grouping' or 'grouping'] 142*cda5da8dSAndroid Build Coastguard Worker if not grouping: 143*cda5da8dSAndroid Build Coastguard Worker return (s, 0) 144*cda5da8dSAndroid Build Coastguard Worker if s[-1] == ' ': 145*cda5da8dSAndroid Build Coastguard Worker stripped = s.rstrip() 146*cda5da8dSAndroid Build Coastguard Worker right_spaces = s[len(stripped):] 147*cda5da8dSAndroid Build Coastguard Worker s = stripped 148*cda5da8dSAndroid Build Coastguard Worker else: 149*cda5da8dSAndroid Build Coastguard Worker right_spaces = '' 150*cda5da8dSAndroid Build Coastguard Worker left_spaces = '' 151*cda5da8dSAndroid Build Coastguard Worker groups = [] 152*cda5da8dSAndroid Build Coastguard Worker for interval in _grouping_intervals(grouping): 153*cda5da8dSAndroid Build Coastguard Worker if not s or s[-1] not in "0123456789": 154*cda5da8dSAndroid Build Coastguard Worker # only non-digit characters remain (sign, spaces) 155*cda5da8dSAndroid Build Coastguard Worker left_spaces = s 156*cda5da8dSAndroid Build Coastguard Worker s = '' 157*cda5da8dSAndroid Build Coastguard Worker break 158*cda5da8dSAndroid Build Coastguard Worker groups.append(s[-interval:]) 159*cda5da8dSAndroid Build Coastguard Worker s = s[:-interval] 160*cda5da8dSAndroid Build Coastguard Worker if s: 161*cda5da8dSAndroid Build Coastguard Worker groups.append(s) 162*cda5da8dSAndroid Build Coastguard Worker groups.reverse() 163*cda5da8dSAndroid Build Coastguard Worker return ( 164*cda5da8dSAndroid Build Coastguard Worker left_spaces + thousands_sep.join(groups) + right_spaces, 165*cda5da8dSAndroid Build Coastguard Worker len(thousands_sep) * (len(groups) - 1) 166*cda5da8dSAndroid Build Coastguard Worker ) 167*cda5da8dSAndroid Build Coastguard Worker 168*cda5da8dSAndroid Build Coastguard Worker# Strip a given amount of excess padding from the given string 169*cda5da8dSAndroid Build Coastguard Workerdef _strip_padding(s, amount): 170*cda5da8dSAndroid Build Coastguard Worker lpos = 0 171*cda5da8dSAndroid Build Coastguard Worker while amount and s[lpos] == ' ': 172*cda5da8dSAndroid Build Coastguard Worker lpos += 1 173*cda5da8dSAndroid Build Coastguard Worker amount -= 1 174*cda5da8dSAndroid Build Coastguard Worker rpos = len(s) - 1 175*cda5da8dSAndroid Build Coastguard Worker while amount and s[rpos] == ' ': 176*cda5da8dSAndroid Build Coastguard Worker rpos -= 1 177*cda5da8dSAndroid Build Coastguard Worker amount -= 1 178*cda5da8dSAndroid Build Coastguard Worker return s[lpos:rpos+1] 179*cda5da8dSAndroid Build Coastguard Worker 180*cda5da8dSAndroid Build Coastguard Worker_percent_re = re.compile(r'%(?:\((?P<key>.*?)\))?' 181*cda5da8dSAndroid Build Coastguard Worker r'(?P<modifiers>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]') 182*cda5da8dSAndroid Build Coastguard Worker 183*cda5da8dSAndroid Build Coastguard Workerdef _format(percent, value, grouping=False, monetary=False, *additional): 184*cda5da8dSAndroid Build Coastguard Worker if additional: 185*cda5da8dSAndroid Build Coastguard Worker formatted = percent % ((value,) + additional) 186*cda5da8dSAndroid Build Coastguard Worker else: 187*cda5da8dSAndroid Build Coastguard Worker formatted = percent % value 188*cda5da8dSAndroid Build Coastguard Worker if percent[-1] in 'eEfFgGdiu': 189*cda5da8dSAndroid Build Coastguard Worker formatted = _localize(formatted, grouping, monetary) 190*cda5da8dSAndroid Build Coastguard Worker return formatted 191*cda5da8dSAndroid Build Coastguard Worker 192*cda5da8dSAndroid Build Coastguard Worker# Transform formatted as locale number according to the locale settings 193*cda5da8dSAndroid Build Coastguard Workerdef _localize(formatted, grouping=False, monetary=False): 194*cda5da8dSAndroid Build Coastguard Worker # floats and decimal ints need special action! 195*cda5da8dSAndroid Build Coastguard Worker if '.' in formatted: 196*cda5da8dSAndroid Build Coastguard Worker seps = 0 197*cda5da8dSAndroid Build Coastguard Worker parts = formatted.split('.') 198*cda5da8dSAndroid Build Coastguard Worker if grouping: 199*cda5da8dSAndroid Build Coastguard Worker parts[0], seps = _group(parts[0], monetary=monetary) 200*cda5da8dSAndroid Build Coastguard Worker decimal_point = localeconv()[monetary and 'mon_decimal_point' 201*cda5da8dSAndroid Build Coastguard Worker or 'decimal_point'] 202*cda5da8dSAndroid Build Coastguard Worker formatted = decimal_point.join(parts) 203*cda5da8dSAndroid Build Coastguard Worker if seps: 204*cda5da8dSAndroid Build Coastguard Worker formatted = _strip_padding(formatted, seps) 205*cda5da8dSAndroid Build Coastguard Worker else: 206*cda5da8dSAndroid Build Coastguard Worker seps = 0 207*cda5da8dSAndroid Build Coastguard Worker if grouping: 208*cda5da8dSAndroid Build Coastguard Worker formatted, seps = _group(formatted, monetary=monetary) 209*cda5da8dSAndroid Build Coastguard Worker if seps: 210*cda5da8dSAndroid Build Coastguard Worker formatted = _strip_padding(formatted, seps) 211*cda5da8dSAndroid Build Coastguard Worker return formatted 212*cda5da8dSAndroid Build Coastguard Worker 213*cda5da8dSAndroid Build Coastguard Workerdef format_string(f, val, grouping=False, monetary=False): 214*cda5da8dSAndroid Build Coastguard Worker """Formats a string in the same way that the % formatting would use, 215*cda5da8dSAndroid Build Coastguard Worker but takes the current locale into account. 216*cda5da8dSAndroid Build Coastguard Worker 217*cda5da8dSAndroid Build Coastguard Worker Grouping is applied if the third parameter is true. 218*cda5da8dSAndroid Build Coastguard Worker Conversion uses monetary thousands separator and grouping strings if 219*cda5da8dSAndroid Build Coastguard Worker forth parameter monetary is true.""" 220*cda5da8dSAndroid Build Coastguard Worker percents = list(_percent_re.finditer(f)) 221*cda5da8dSAndroid Build Coastguard Worker new_f = _percent_re.sub('%s', f) 222*cda5da8dSAndroid Build Coastguard Worker 223*cda5da8dSAndroid Build Coastguard Worker if isinstance(val, _collections_abc.Mapping): 224*cda5da8dSAndroid Build Coastguard Worker new_val = [] 225*cda5da8dSAndroid Build Coastguard Worker for perc in percents: 226*cda5da8dSAndroid Build Coastguard Worker if perc.group()[-1]=='%': 227*cda5da8dSAndroid Build Coastguard Worker new_val.append('%') 228*cda5da8dSAndroid Build Coastguard Worker else: 229*cda5da8dSAndroid Build Coastguard Worker new_val.append(_format(perc.group(), val, grouping, monetary)) 230*cda5da8dSAndroid Build Coastguard Worker else: 231*cda5da8dSAndroid Build Coastguard Worker if not isinstance(val, tuple): 232*cda5da8dSAndroid Build Coastguard Worker val = (val,) 233*cda5da8dSAndroid Build Coastguard Worker new_val = [] 234*cda5da8dSAndroid Build Coastguard Worker i = 0 235*cda5da8dSAndroid Build Coastguard Worker for perc in percents: 236*cda5da8dSAndroid Build Coastguard Worker if perc.group()[-1]=='%': 237*cda5da8dSAndroid Build Coastguard Worker new_val.append('%') 238*cda5da8dSAndroid Build Coastguard Worker else: 239*cda5da8dSAndroid Build Coastguard Worker starcount = perc.group('modifiers').count('*') 240*cda5da8dSAndroid Build Coastguard Worker new_val.append(_format(perc.group(), 241*cda5da8dSAndroid Build Coastguard Worker val[i], 242*cda5da8dSAndroid Build Coastguard Worker grouping, 243*cda5da8dSAndroid Build Coastguard Worker monetary, 244*cda5da8dSAndroid Build Coastguard Worker *val[i+1:i+1+starcount])) 245*cda5da8dSAndroid Build Coastguard Worker i += (1 + starcount) 246*cda5da8dSAndroid Build Coastguard Worker val = tuple(new_val) 247*cda5da8dSAndroid Build Coastguard Worker 248*cda5da8dSAndroid Build Coastguard Worker return new_f % val 249*cda5da8dSAndroid Build Coastguard Worker 250*cda5da8dSAndroid Build Coastguard Workerdef format(percent, value, grouping=False, monetary=False, *additional): 251*cda5da8dSAndroid Build Coastguard Worker """Deprecated, use format_string instead.""" 252*cda5da8dSAndroid Build Coastguard Worker import warnings 253*cda5da8dSAndroid Build Coastguard Worker warnings.warn( 254*cda5da8dSAndroid Build Coastguard Worker "This method will be removed in a future version of Python. " 255*cda5da8dSAndroid Build Coastguard Worker "Use 'locale.format_string()' instead.", 256*cda5da8dSAndroid Build Coastguard Worker DeprecationWarning, stacklevel=2 257*cda5da8dSAndroid Build Coastguard Worker ) 258*cda5da8dSAndroid Build Coastguard Worker 259*cda5da8dSAndroid Build Coastguard Worker match = _percent_re.match(percent) 260*cda5da8dSAndroid Build Coastguard Worker if not match or len(match.group())!= len(percent): 261*cda5da8dSAndroid Build Coastguard Worker raise ValueError(("format() must be given exactly one %%char " 262*cda5da8dSAndroid Build Coastguard Worker "format specifier, %s not valid") % repr(percent)) 263*cda5da8dSAndroid Build Coastguard Worker return _format(percent, value, grouping, monetary, *additional) 264*cda5da8dSAndroid Build Coastguard Worker 265*cda5da8dSAndroid Build Coastguard Workerdef currency(val, symbol=True, grouping=False, international=False): 266*cda5da8dSAndroid Build Coastguard Worker """Formats val according to the currency settings 267*cda5da8dSAndroid Build Coastguard Worker in the current locale.""" 268*cda5da8dSAndroid Build Coastguard Worker conv = localeconv() 269*cda5da8dSAndroid Build Coastguard Worker 270*cda5da8dSAndroid Build Coastguard Worker # check for illegal values 271*cda5da8dSAndroid Build Coastguard Worker digits = conv[international and 'int_frac_digits' or 'frac_digits'] 272*cda5da8dSAndroid Build Coastguard Worker if digits == 127: 273*cda5da8dSAndroid Build Coastguard Worker raise ValueError("Currency formatting is not possible using " 274*cda5da8dSAndroid Build Coastguard Worker "the 'C' locale.") 275*cda5da8dSAndroid Build Coastguard Worker 276*cda5da8dSAndroid Build Coastguard Worker s = _localize(f'{abs(val):.{digits}f}', grouping, monetary=True) 277*cda5da8dSAndroid Build Coastguard Worker # '<' and '>' are markers if the sign must be inserted between symbol and value 278*cda5da8dSAndroid Build Coastguard Worker s = '<' + s + '>' 279*cda5da8dSAndroid Build Coastguard Worker 280*cda5da8dSAndroid Build Coastguard Worker if symbol: 281*cda5da8dSAndroid Build Coastguard Worker smb = conv[international and 'int_curr_symbol' or 'currency_symbol'] 282*cda5da8dSAndroid Build Coastguard Worker precedes = conv[val<0 and 'n_cs_precedes' or 'p_cs_precedes'] 283*cda5da8dSAndroid Build Coastguard Worker separated = conv[val<0 and 'n_sep_by_space' or 'p_sep_by_space'] 284*cda5da8dSAndroid Build Coastguard Worker 285*cda5da8dSAndroid Build Coastguard Worker if precedes: 286*cda5da8dSAndroid Build Coastguard Worker s = smb + (separated and ' ' or '') + s 287*cda5da8dSAndroid Build Coastguard Worker else: 288*cda5da8dSAndroid Build Coastguard Worker if international and smb[-1] == ' ': 289*cda5da8dSAndroid Build Coastguard Worker smb = smb[:-1] 290*cda5da8dSAndroid Build Coastguard Worker s = s + (separated and ' ' or '') + smb 291*cda5da8dSAndroid Build Coastguard Worker 292*cda5da8dSAndroid Build Coastguard Worker sign_pos = conv[val<0 and 'n_sign_posn' or 'p_sign_posn'] 293*cda5da8dSAndroid Build Coastguard Worker sign = conv[val<0 and 'negative_sign' or 'positive_sign'] 294*cda5da8dSAndroid Build Coastguard Worker 295*cda5da8dSAndroid Build Coastguard Worker if sign_pos == 0: 296*cda5da8dSAndroid Build Coastguard Worker s = '(' + s + ')' 297*cda5da8dSAndroid Build Coastguard Worker elif sign_pos == 1: 298*cda5da8dSAndroid Build Coastguard Worker s = sign + s 299*cda5da8dSAndroid Build Coastguard Worker elif sign_pos == 2: 300*cda5da8dSAndroid Build Coastguard Worker s = s + sign 301*cda5da8dSAndroid Build Coastguard Worker elif sign_pos == 3: 302*cda5da8dSAndroid Build Coastguard Worker s = s.replace('<', sign) 303*cda5da8dSAndroid Build Coastguard Worker elif sign_pos == 4: 304*cda5da8dSAndroid Build Coastguard Worker s = s.replace('>', sign) 305*cda5da8dSAndroid Build Coastguard Worker else: 306*cda5da8dSAndroid Build Coastguard Worker # the default if nothing specified; 307*cda5da8dSAndroid Build Coastguard Worker # this should be the most fitting sign position 308*cda5da8dSAndroid Build Coastguard Worker s = sign + s 309*cda5da8dSAndroid Build Coastguard Worker 310*cda5da8dSAndroid Build Coastguard Worker return s.replace('<', '').replace('>', '') 311*cda5da8dSAndroid Build Coastguard Worker 312*cda5da8dSAndroid Build Coastguard Workerdef str(val): 313*cda5da8dSAndroid Build Coastguard Worker """Convert float to string, taking the locale into account.""" 314*cda5da8dSAndroid Build Coastguard Worker return _format("%.12g", val) 315*cda5da8dSAndroid Build Coastguard Worker 316*cda5da8dSAndroid Build Coastguard Workerdef delocalize(string): 317*cda5da8dSAndroid Build Coastguard Worker "Parses a string as a normalized number according to the locale settings." 318*cda5da8dSAndroid Build Coastguard Worker 319*cda5da8dSAndroid Build Coastguard Worker conv = localeconv() 320*cda5da8dSAndroid Build Coastguard Worker 321*cda5da8dSAndroid Build Coastguard Worker #First, get rid of the grouping 322*cda5da8dSAndroid Build Coastguard Worker ts = conv['thousands_sep'] 323*cda5da8dSAndroid Build Coastguard Worker if ts: 324*cda5da8dSAndroid Build Coastguard Worker string = string.replace(ts, '') 325*cda5da8dSAndroid Build Coastguard Worker 326*cda5da8dSAndroid Build Coastguard Worker #next, replace the decimal point with a dot 327*cda5da8dSAndroid Build Coastguard Worker dd = conv['decimal_point'] 328*cda5da8dSAndroid Build Coastguard Worker if dd: 329*cda5da8dSAndroid Build Coastguard Worker string = string.replace(dd, '.') 330*cda5da8dSAndroid Build Coastguard Worker return string 331*cda5da8dSAndroid Build Coastguard Worker 332*cda5da8dSAndroid Build Coastguard Workerdef localize(string, grouping=False, monetary=False): 333*cda5da8dSAndroid Build Coastguard Worker """Parses a string as locale number according to the locale settings.""" 334*cda5da8dSAndroid Build Coastguard Worker return _localize(string, grouping, monetary) 335*cda5da8dSAndroid Build Coastguard Worker 336*cda5da8dSAndroid Build Coastguard Workerdef atof(string, func=float): 337*cda5da8dSAndroid Build Coastguard Worker "Parses a string as a float according to the locale settings." 338*cda5da8dSAndroid Build Coastguard Worker return func(delocalize(string)) 339*cda5da8dSAndroid Build Coastguard Worker 340*cda5da8dSAndroid Build Coastguard Workerdef atoi(string): 341*cda5da8dSAndroid Build Coastguard Worker "Converts a string to an integer according to the locale settings." 342*cda5da8dSAndroid Build Coastguard Worker return int(delocalize(string)) 343*cda5da8dSAndroid Build Coastguard Worker 344*cda5da8dSAndroid Build Coastguard Workerdef _test(): 345*cda5da8dSAndroid Build Coastguard Worker setlocale(LC_ALL, "") 346*cda5da8dSAndroid Build Coastguard Worker #do grouping 347*cda5da8dSAndroid Build Coastguard Worker s1 = format_string("%d", 123456789,1) 348*cda5da8dSAndroid Build Coastguard Worker print(s1, "is", atoi(s1)) 349*cda5da8dSAndroid Build Coastguard Worker #standard formatting 350*cda5da8dSAndroid Build Coastguard Worker s1 = str(3.14) 351*cda5da8dSAndroid Build Coastguard Worker print(s1, "is", atof(s1)) 352*cda5da8dSAndroid Build Coastguard Worker 353*cda5da8dSAndroid Build Coastguard Worker### Locale name aliasing engine 354*cda5da8dSAndroid Build Coastguard Worker 355*cda5da8dSAndroid Build Coastguard Worker# Author: Marc-Andre Lemburg, [email protected] 356*cda5da8dSAndroid Build Coastguard Worker# Various tweaks by Fredrik Lundh <[email protected]> 357*cda5da8dSAndroid Build Coastguard Worker 358*cda5da8dSAndroid Build Coastguard Worker# store away the low-level version of setlocale (it's 359*cda5da8dSAndroid Build Coastguard Worker# overridden below) 360*cda5da8dSAndroid Build Coastguard Worker_setlocale = setlocale 361*cda5da8dSAndroid Build Coastguard Worker 362*cda5da8dSAndroid Build Coastguard Workerdef _replace_encoding(code, encoding): 363*cda5da8dSAndroid Build Coastguard Worker if '.' in code: 364*cda5da8dSAndroid Build Coastguard Worker langname = code[:code.index('.')] 365*cda5da8dSAndroid Build Coastguard Worker else: 366*cda5da8dSAndroid Build Coastguard Worker langname = code 367*cda5da8dSAndroid Build Coastguard Worker # Convert the encoding to a C lib compatible encoding string 368*cda5da8dSAndroid Build Coastguard Worker norm_encoding = encodings.normalize_encoding(encoding) 369*cda5da8dSAndroid Build Coastguard Worker #print('norm encoding: %r' % norm_encoding) 370*cda5da8dSAndroid Build Coastguard Worker norm_encoding = encodings.aliases.aliases.get(norm_encoding.lower(), 371*cda5da8dSAndroid Build Coastguard Worker norm_encoding) 372*cda5da8dSAndroid Build Coastguard Worker #print('aliased encoding: %r' % norm_encoding) 373*cda5da8dSAndroid Build Coastguard Worker encoding = norm_encoding 374*cda5da8dSAndroid Build Coastguard Worker norm_encoding = norm_encoding.lower() 375*cda5da8dSAndroid Build Coastguard Worker if norm_encoding in locale_encoding_alias: 376*cda5da8dSAndroid Build Coastguard Worker encoding = locale_encoding_alias[norm_encoding] 377*cda5da8dSAndroid Build Coastguard Worker else: 378*cda5da8dSAndroid Build Coastguard Worker norm_encoding = norm_encoding.replace('_', '') 379*cda5da8dSAndroid Build Coastguard Worker norm_encoding = norm_encoding.replace('-', '') 380*cda5da8dSAndroid Build Coastguard Worker if norm_encoding in locale_encoding_alias: 381*cda5da8dSAndroid Build Coastguard Worker encoding = locale_encoding_alias[norm_encoding] 382*cda5da8dSAndroid Build Coastguard Worker #print('found encoding %r' % encoding) 383*cda5da8dSAndroid Build Coastguard Worker return langname + '.' + encoding 384*cda5da8dSAndroid Build Coastguard Worker 385*cda5da8dSAndroid Build Coastguard Workerdef _append_modifier(code, modifier): 386*cda5da8dSAndroid Build Coastguard Worker if modifier == 'euro': 387*cda5da8dSAndroid Build Coastguard Worker if '.' not in code: 388*cda5da8dSAndroid Build Coastguard Worker return code + '.ISO8859-15' 389*cda5da8dSAndroid Build Coastguard Worker _, _, encoding = code.partition('.') 390*cda5da8dSAndroid Build Coastguard Worker if encoding in ('ISO8859-15', 'UTF-8'): 391*cda5da8dSAndroid Build Coastguard Worker return code 392*cda5da8dSAndroid Build Coastguard Worker if encoding == 'ISO8859-1': 393*cda5da8dSAndroid Build Coastguard Worker return _replace_encoding(code, 'ISO8859-15') 394*cda5da8dSAndroid Build Coastguard Worker return code + '@' + modifier 395*cda5da8dSAndroid Build Coastguard Worker 396*cda5da8dSAndroid Build Coastguard Workerdef normalize(localename): 397*cda5da8dSAndroid Build Coastguard Worker 398*cda5da8dSAndroid Build Coastguard Worker """ Returns a normalized locale code for the given locale 399*cda5da8dSAndroid Build Coastguard Worker name. 400*cda5da8dSAndroid Build Coastguard Worker 401*cda5da8dSAndroid Build Coastguard Worker The returned locale code is formatted for use with 402*cda5da8dSAndroid Build Coastguard Worker setlocale(). 403*cda5da8dSAndroid Build Coastguard Worker 404*cda5da8dSAndroid Build Coastguard Worker If normalization fails, the original name is returned 405*cda5da8dSAndroid Build Coastguard Worker unchanged. 406*cda5da8dSAndroid Build Coastguard Worker 407*cda5da8dSAndroid Build Coastguard Worker If the given encoding is not known, the function defaults to 408*cda5da8dSAndroid Build Coastguard Worker the default encoding for the locale code just like setlocale() 409*cda5da8dSAndroid Build Coastguard Worker does. 410*cda5da8dSAndroid Build Coastguard Worker 411*cda5da8dSAndroid Build Coastguard Worker """ 412*cda5da8dSAndroid Build Coastguard Worker # Normalize the locale name and extract the encoding and modifier 413*cda5da8dSAndroid Build Coastguard Worker code = localename.lower() 414*cda5da8dSAndroid Build Coastguard Worker if ':' in code: 415*cda5da8dSAndroid Build Coastguard Worker # ':' is sometimes used as encoding delimiter. 416*cda5da8dSAndroid Build Coastguard Worker code = code.replace(':', '.') 417*cda5da8dSAndroid Build Coastguard Worker if '@' in code: 418*cda5da8dSAndroid Build Coastguard Worker code, modifier = code.split('@', 1) 419*cda5da8dSAndroid Build Coastguard Worker else: 420*cda5da8dSAndroid Build Coastguard Worker modifier = '' 421*cda5da8dSAndroid Build Coastguard Worker if '.' in code: 422*cda5da8dSAndroid Build Coastguard Worker langname, encoding = code.split('.')[:2] 423*cda5da8dSAndroid Build Coastguard Worker else: 424*cda5da8dSAndroid Build Coastguard Worker langname = code 425*cda5da8dSAndroid Build Coastguard Worker encoding = '' 426*cda5da8dSAndroid Build Coastguard Worker 427*cda5da8dSAndroid Build Coastguard Worker # First lookup: fullname (possibly with encoding and modifier) 428*cda5da8dSAndroid Build Coastguard Worker lang_enc = langname 429*cda5da8dSAndroid Build Coastguard Worker if encoding: 430*cda5da8dSAndroid Build Coastguard Worker norm_encoding = encoding.replace('-', '') 431*cda5da8dSAndroid Build Coastguard Worker norm_encoding = norm_encoding.replace('_', '') 432*cda5da8dSAndroid Build Coastguard Worker lang_enc += '.' + norm_encoding 433*cda5da8dSAndroid Build Coastguard Worker lookup_name = lang_enc 434*cda5da8dSAndroid Build Coastguard Worker if modifier: 435*cda5da8dSAndroid Build Coastguard Worker lookup_name += '@' + modifier 436*cda5da8dSAndroid Build Coastguard Worker code = locale_alias.get(lookup_name, None) 437*cda5da8dSAndroid Build Coastguard Worker if code is not None: 438*cda5da8dSAndroid Build Coastguard Worker return code 439*cda5da8dSAndroid Build Coastguard Worker #print('first lookup failed') 440*cda5da8dSAndroid Build Coastguard Worker 441*cda5da8dSAndroid Build Coastguard Worker if modifier: 442*cda5da8dSAndroid Build Coastguard Worker # Second try: fullname without modifier (possibly with encoding) 443*cda5da8dSAndroid Build Coastguard Worker code = locale_alias.get(lang_enc, None) 444*cda5da8dSAndroid Build Coastguard Worker if code is not None: 445*cda5da8dSAndroid Build Coastguard Worker #print('lookup without modifier succeeded') 446*cda5da8dSAndroid Build Coastguard Worker if '@' not in code: 447*cda5da8dSAndroid Build Coastguard Worker return _append_modifier(code, modifier) 448*cda5da8dSAndroid Build Coastguard Worker if code.split('@', 1)[1].lower() == modifier: 449*cda5da8dSAndroid Build Coastguard Worker return code 450*cda5da8dSAndroid Build Coastguard Worker #print('second lookup failed') 451*cda5da8dSAndroid Build Coastguard Worker 452*cda5da8dSAndroid Build Coastguard Worker if encoding: 453*cda5da8dSAndroid Build Coastguard Worker # Third try: langname (without encoding, possibly with modifier) 454*cda5da8dSAndroid Build Coastguard Worker lookup_name = langname 455*cda5da8dSAndroid Build Coastguard Worker if modifier: 456*cda5da8dSAndroid Build Coastguard Worker lookup_name += '@' + modifier 457*cda5da8dSAndroid Build Coastguard Worker code = locale_alias.get(lookup_name, None) 458*cda5da8dSAndroid Build Coastguard Worker if code is not None: 459*cda5da8dSAndroid Build Coastguard Worker #print('lookup without encoding succeeded') 460*cda5da8dSAndroid Build Coastguard Worker if '@' not in code: 461*cda5da8dSAndroid Build Coastguard Worker return _replace_encoding(code, encoding) 462*cda5da8dSAndroid Build Coastguard Worker code, modifier = code.split('@', 1) 463*cda5da8dSAndroid Build Coastguard Worker return _replace_encoding(code, encoding) + '@' + modifier 464*cda5da8dSAndroid Build Coastguard Worker 465*cda5da8dSAndroid Build Coastguard Worker if modifier: 466*cda5da8dSAndroid Build Coastguard Worker # Fourth try: langname (without encoding and modifier) 467*cda5da8dSAndroid Build Coastguard Worker code = locale_alias.get(langname, None) 468*cda5da8dSAndroid Build Coastguard Worker if code is not None: 469*cda5da8dSAndroid Build Coastguard Worker #print('lookup without modifier and encoding succeeded') 470*cda5da8dSAndroid Build Coastguard Worker if '@' not in code: 471*cda5da8dSAndroid Build Coastguard Worker code = _replace_encoding(code, encoding) 472*cda5da8dSAndroid Build Coastguard Worker return _append_modifier(code, modifier) 473*cda5da8dSAndroid Build Coastguard Worker code, defmod = code.split('@', 1) 474*cda5da8dSAndroid Build Coastguard Worker if defmod.lower() == modifier: 475*cda5da8dSAndroid Build Coastguard Worker return _replace_encoding(code, encoding) + '@' + defmod 476*cda5da8dSAndroid Build Coastguard Worker 477*cda5da8dSAndroid Build Coastguard Worker return localename 478*cda5da8dSAndroid Build Coastguard Worker 479*cda5da8dSAndroid Build Coastguard Workerdef _parse_localename(localename): 480*cda5da8dSAndroid Build Coastguard Worker 481*cda5da8dSAndroid Build Coastguard Worker """ Parses the locale code for localename and returns the 482*cda5da8dSAndroid Build Coastguard Worker result as tuple (language code, encoding). 483*cda5da8dSAndroid Build Coastguard Worker 484*cda5da8dSAndroid Build Coastguard Worker The localename is normalized and passed through the locale 485*cda5da8dSAndroid Build Coastguard Worker alias engine. A ValueError is raised in case the locale name 486*cda5da8dSAndroid Build Coastguard Worker cannot be parsed. 487*cda5da8dSAndroid Build Coastguard Worker 488*cda5da8dSAndroid Build Coastguard Worker The language code corresponds to RFC 1766. code and encoding 489*cda5da8dSAndroid Build Coastguard Worker can be None in case the values cannot be determined or are 490*cda5da8dSAndroid Build Coastguard Worker unknown to this implementation. 491*cda5da8dSAndroid Build Coastguard Worker 492*cda5da8dSAndroid Build Coastguard Worker """ 493*cda5da8dSAndroid Build Coastguard Worker code = normalize(localename) 494*cda5da8dSAndroid Build Coastguard Worker if '@' in code: 495*cda5da8dSAndroid Build Coastguard Worker # Deal with locale modifiers 496*cda5da8dSAndroid Build Coastguard Worker code, modifier = code.split('@', 1) 497*cda5da8dSAndroid Build Coastguard Worker if modifier == 'euro' and '.' not in code: 498*cda5da8dSAndroid Build Coastguard Worker # Assume Latin-9 for @euro locales. This is bogus, 499*cda5da8dSAndroid Build Coastguard Worker # since some systems may use other encodings for these 500*cda5da8dSAndroid Build Coastguard Worker # locales. Also, we ignore other modifiers. 501*cda5da8dSAndroid Build Coastguard Worker return code, 'iso-8859-15' 502*cda5da8dSAndroid Build Coastguard Worker 503*cda5da8dSAndroid Build Coastguard Worker if '.' in code: 504*cda5da8dSAndroid Build Coastguard Worker return tuple(code.split('.')[:2]) 505*cda5da8dSAndroid Build Coastguard Worker elif code == 'C': 506*cda5da8dSAndroid Build Coastguard Worker return None, None 507*cda5da8dSAndroid Build Coastguard Worker elif code == 'UTF-8': 508*cda5da8dSAndroid Build Coastguard Worker # On macOS "LC_CTYPE=UTF-8" is a valid locale setting 509*cda5da8dSAndroid Build Coastguard Worker # for getting UTF-8 handling for text. 510*cda5da8dSAndroid Build Coastguard Worker return None, 'UTF-8' 511*cda5da8dSAndroid Build Coastguard Worker raise ValueError('unknown locale: %s' % localename) 512*cda5da8dSAndroid Build Coastguard Worker 513*cda5da8dSAndroid Build Coastguard Workerdef _build_localename(localetuple): 514*cda5da8dSAndroid Build Coastguard Worker 515*cda5da8dSAndroid Build Coastguard Worker """ Builds a locale code from the given tuple (language code, 516*cda5da8dSAndroid Build Coastguard Worker encoding). 517*cda5da8dSAndroid Build Coastguard Worker 518*cda5da8dSAndroid Build Coastguard Worker No aliasing or normalizing takes place. 519*cda5da8dSAndroid Build Coastguard Worker 520*cda5da8dSAndroid Build Coastguard Worker """ 521*cda5da8dSAndroid Build Coastguard Worker try: 522*cda5da8dSAndroid Build Coastguard Worker language, encoding = localetuple 523*cda5da8dSAndroid Build Coastguard Worker 524*cda5da8dSAndroid Build Coastguard Worker if language is None: 525*cda5da8dSAndroid Build Coastguard Worker language = 'C' 526*cda5da8dSAndroid Build Coastguard Worker if encoding is None: 527*cda5da8dSAndroid Build Coastguard Worker return language 528*cda5da8dSAndroid Build Coastguard Worker else: 529*cda5da8dSAndroid Build Coastguard Worker return language + '.' + encoding 530*cda5da8dSAndroid Build Coastguard Worker except (TypeError, ValueError): 531*cda5da8dSAndroid Build Coastguard Worker raise TypeError('Locale must be None, a string, or an iterable of ' 532*cda5da8dSAndroid Build Coastguard Worker 'two strings -- language code, encoding.') from None 533*cda5da8dSAndroid Build Coastguard Worker 534*cda5da8dSAndroid Build Coastguard Workerdef getdefaultlocale(envvars=('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')): 535*cda5da8dSAndroid Build Coastguard Worker 536*cda5da8dSAndroid Build Coastguard Worker """ Tries to determine the default locale settings and returns 537*cda5da8dSAndroid Build Coastguard Worker them as tuple (language code, encoding). 538*cda5da8dSAndroid Build Coastguard Worker 539*cda5da8dSAndroid Build Coastguard Worker According to POSIX, a program which has not called 540*cda5da8dSAndroid Build Coastguard Worker setlocale(LC_ALL, "") runs using the portable 'C' locale. 541*cda5da8dSAndroid Build Coastguard Worker Calling setlocale(LC_ALL, "") lets it use the default locale as 542*cda5da8dSAndroid Build Coastguard Worker defined by the LANG variable. Since we don't want to interfere 543*cda5da8dSAndroid Build Coastguard Worker with the current locale setting we thus emulate the behavior 544*cda5da8dSAndroid Build Coastguard Worker in the way described above. 545*cda5da8dSAndroid Build Coastguard Worker 546*cda5da8dSAndroid Build Coastguard Worker To maintain compatibility with other platforms, not only the 547*cda5da8dSAndroid Build Coastguard Worker LANG variable is tested, but a list of variables given as 548*cda5da8dSAndroid Build Coastguard Worker envvars parameter. The first found to be defined will be 549*cda5da8dSAndroid Build Coastguard Worker used. envvars defaults to the search path used in GNU gettext; 550*cda5da8dSAndroid Build Coastguard Worker it must always contain the variable name 'LANG'. 551*cda5da8dSAndroid Build Coastguard Worker 552*cda5da8dSAndroid Build Coastguard Worker Except for the code 'C', the language code corresponds to RFC 553*cda5da8dSAndroid Build Coastguard Worker 1766. code and encoding can be None in case the values cannot 554*cda5da8dSAndroid Build Coastguard Worker be determined. 555*cda5da8dSAndroid Build Coastguard Worker 556*cda5da8dSAndroid Build Coastguard Worker """ 557*cda5da8dSAndroid Build Coastguard Worker 558*cda5da8dSAndroid Build Coastguard Worker import warnings 559*cda5da8dSAndroid Build Coastguard Worker warnings.warn( 560*cda5da8dSAndroid Build Coastguard Worker "Use setlocale(), getencoding() and getlocale() instead", 561*cda5da8dSAndroid Build Coastguard Worker DeprecationWarning, stacklevel=2 562*cda5da8dSAndroid Build Coastguard Worker ) 563*cda5da8dSAndroid Build Coastguard Worker 564*cda5da8dSAndroid Build Coastguard Worker try: 565*cda5da8dSAndroid Build Coastguard Worker # check if it's supported by the _locale module 566*cda5da8dSAndroid Build Coastguard Worker import _locale 567*cda5da8dSAndroid Build Coastguard Worker code, encoding = _locale._getdefaultlocale() 568*cda5da8dSAndroid Build Coastguard Worker except (ImportError, AttributeError): 569*cda5da8dSAndroid Build Coastguard Worker pass 570*cda5da8dSAndroid Build Coastguard Worker else: 571*cda5da8dSAndroid Build Coastguard Worker # make sure the code/encoding values are valid 572*cda5da8dSAndroid Build Coastguard Worker if sys.platform == "win32" and code and code[:2] == "0x": 573*cda5da8dSAndroid Build Coastguard Worker # map windows language identifier to language name 574*cda5da8dSAndroid Build Coastguard Worker code = windows_locale.get(int(code, 0)) 575*cda5da8dSAndroid Build Coastguard Worker # ...add other platform-specific processing here, if 576*cda5da8dSAndroid Build Coastguard Worker # necessary... 577*cda5da8dSAndroid Build Coastguard Worker return code, encoding 578*cda5da8dSAndroid Build Coastguard Worker 579*cda5da8dSAndroid Build Coastguard Worker # fall back on POSIX behaviour 580*cda5da8dSAndroid Build Coastguard Worker import os 581*cda5da8dSAndroid Build Coastguard Worker lookup = os.environ.get 582*cda5da8dSAndroid Build Coastguard Worker for variable in envvars: 583*cda5da8dSAndroid Build Coastguard Worker localename = lookup(variable,None) 584*cda5da8dSAndroid Build Coastguard Worker if localename: 585*cda5da8dSAndroid Build Coastguard Worker if variable == 'LANGUAGE': 586*cda5da8dSAndroid Build Coastguard Worker localename = localename.split(':')[0] 587*cda5da8dSAndroid Build Coastguard Worker break 588*cda5da8dSAndroid Build Coastguard Worker else: 589*cda5da8dSAndroid Build Coastguard Worker localename = 'C' 590*cda5da8dSAndroid Build Coastguard Worker return _parse_localename(localename) 591*cda5da8dSAndroid Build Coastguard Worker 592*cda5da8dSAndroid Build Coastguard Worker 593*cda5da8dSAndroid Build Coastguard Workerdef getlocale(category=LC_CTYPE): 594*cda5da8dSAndroid Build Coastguard Worker 595*cda5da8dSAndroid Build Coastguard Worker """ Returns the current setting for the given locale category as 596*cda5da8dSAndroid Build Coastguard Worker tuple (language code, encoding). 597*cda5da8dSAndroid Build Coastguard Worker 598*cda5da8dSAndroid Build Coastguard Worker category may be one of the LC_* value except LC_ALL. It 599*cda5da8dSAndroid Build Coastguard Worker defaults to LC_CTYPE. 600*cda5da8dSAndroid Build Coastguard Worker 601*cda5da8dSAndroid Build Coastguard Worker Except for the code 'C', the language code corresponds to RFC 602*cda5da8dSAndroid Build Coastguard Worker 1766. code and encoding can be None in case the values cannot 603*cda5da8dSAndroid Build Coastguard Worker be determined. 604*cda5da8dSAndroid Build Coastguard Worker 605*cda5da8dSAndroid Build Coastguard Worker """ 606*cda5da8dSAndroid Build Coastguard Worker localename = _setlocale(category) 607*cda5da8dSAndroid Build Coastguard Worker if category == LC_ALL and ';' in localename: 608*cda5da8dSAndroid Build Coastguard Worker raise TypeError('category LC_ALL is not supported') 609*cda5da8dSAndroid Build Coastguard Worker return _parse_localename(localename) 610*cda5da8dSAndroid Build Coastguard Worker 611*cda5da8dSAndroid Build Coastguard Workerdef setlocale(category, locale=None): 612*cda5da8dSAndroid Build Coastguard Worker 613*cda5da8dSAndroid Build Coastguard Worker """ Set the locale for the given category. The locale can be 614*cda5da8dSAndroid Build Coastguard Worker a string, an iterable of two strings (language code and encoding), 615*cda5da8dSAndroid Build Coastguard Worker or None. 616*cda5da8dSAndroid Build Coastguard Worker 617*cda5da8dSAndroid Build Coastguard Worker Iterables are converted to strings using the locale aliasing 618*cda5da8dSAndroid Build Coastguard Worker engine. Locale strings are passed directly to the C lib. 619*cda5da8dSAndroid Build Coastguard Worker 620*cda5da8dSAndroid Build Coastguard Worker category may be given as one of the LC_* values. 621*cda5da8dSAndroid Build Coastguard Worker 622*cda5da8dSAndroid Build Coastguard Worker """ 623*cda5da8dSAndroid Build Coastguard Worker if locale and not isinstance(locale, _builtin_str): 624*cda5da8dSAndroid Build Coastguard Worker # convert to string 625*cda5da8dSAndroid Build Coastguard Worker locale = normalize(_build_localename(locale)) 626*cda5da8dSAndroid Build Coastguard Worker return _setlocale(category, locale) 627*cda5da8dSAndroid Build Coastguard Worker 628*cda5da8dSAndroid Build Coastguard Workerdef resetlocale(category=LC_ALL): 629*cda5da8dSAndroid Build Coastguard Worker 630*cda5da8dSAndroid Build Coastguard Worker """ Sets the locale for category to the default setting. 631*cda5da8dSAndroid Build Coastguard Worker 632*cda5da8dSAndroid Build Coastguard Worker The default setting is determined by calling 633*cda5da8dSAndroid Build Coastguard Worker getdefaultlocale(). category defaults to LC_ALL. 634*cda5da8dSAndroid Build Coastguard Worker 635*cda5da8dSAndroid Build Coastguard Worker """ 636*cda5da8dSAndroid Build Coastguard Worker import warnings 637*cda5da8dSAndroid Build Coastguard Worker warnings.warn( 638*cda5da8dSAndroid Build Coastguard Worker 'Use locale.setlocale(locale.LC_ALL, "") instead', 639*cda5da8dSAndroid Build Coastguard Worker DeprecationWarning, stacklevel=2 640*cda5da8dSAndroid Build Coastguard Worker ) 641*cda5da8dSAndroid Build Coastguard Worker 642*cda5da8dSAndroid Build Coastguard Worker with warnings.catch_warnings(): 643*cda5da8dSAndroid Build Coastguard Worker warnings.simplefilter('ignore', category=DeprecationWarning) 644*cda5da8dSAndroid Build Coastguard Worker loc = getdefaultlocale() 645*cda5da8dSAndroid Build Coastguard Worker 646*cda5da8dSAndroid Build Coastguard Worker _setlocale(category, _build_localename(loc)) 647*cda5da8dSAndroid Build Coastguard Worker 648*cda5da8dSAndroid Build Coastguard Worker 649*cda5da8dSAndroid Build Coastguard Workertry: 650*cda5da8dSAndroid Build Coastguard Worker from _locale import getencoding 651*cda5da8dSAndroid Build Coastguard Workerexcept ImportError: 652*cda5da8dSAndroid Build Coastguard Worker def getencoding(): 653*cda5da8dSAndroid Build Coastguard Worker if hasattr(sys, 'getandroidapilevel'): 654*cda5da8dSAndroid Build Coastguard Worker # On Android langinfo.h and CODESET are missing, and UTF-8 is 655*cda5da8dSAndroid Build Coastguard Worker # always used in mbstowcs() and wcstombs(). 656*cda5da8dSAndroid Build Coastguard Worker return 'utf-8' 657*cda5da8dSAndroid Build Coastguard Worker encoding = getdefaultlocale()[1] 658*cda5da8dSAndroid Build Coastguard Worker if encoding is None: 659*cda5da8dSAndroid Build Coastguard Worker # LANG not set, default to UTF-8 660*cda5da8dSAndroid Build Coastguard Worker encoding = 'utf-8' 661*cda5da8dSAndroid Build Coastguard Worker return encoding 662*cda5da8dSAndroid Build Coastguard Worker 663*cda5da8dSAndroid Build Coastguard Workertry: 664*cda5da8dSAndroid Build Coastguard Worker CODESET 665*cda5da8dSAndroid Build Coastguard Workerexcept NameError: 666*cda5da8dSAndroid Build Coastguard Worker def getpreferredencoding(do_setlocale=True): 667*cda5da8dSAndroid Build Coastguard Worker """Return the charset that the user is likely using.""" 668*cda5da8dSAndroid Build Coastguard Worker if sys.flags.warn_default_encoding: 669*cda5da8dSAndroid Build Coastguard Worker import warnings 670*cda5da8dSAndroid Build Coastguard Worker warnings.warn( 671*cda5da8dSAndroid Build Coastguard Worker "UTF-8 Mode affects locale.getpreferredencoding(). Consider locale.getencoding() instead.", 672*cda5da8dSAndroid Build Coastguard Worker EncodingWarning, 2) 673*cda5da8dSAndroid Build Coastguard Worker if sys.flags.utf8_mode: 674*cda5da8dSAndroid Build Coastguard Worker return 'utf-8' 675*cda5da8dSAndroid Build Coastguard Worker return getencoding() 676*cda5da8dSAndroid Build Coastguard Workerelse: 677*cda5da8dSAndroid Build Coastguard Worker # On Unix, if CODESET is available, use that. 678*cda5da8dSAndroid Build Coastguard Worker def getpreferredencoding(do_setlocale=True): 679*cda5da8dSAndroid Build Coastguard Worker """Return the charset that the user is likely using, 680*cda5da8dSAndroid Build Coastguard Worker according to the system configuration.""" 681*cda5da8dSAndroid Build Coastguard Worker 682*cda5da8dSAndroid Build Coastguard Worker if sys.flags.warn_default_encoding: 683*cda5da8dSAndroid Build Coastguard Worker import warnings 684*cda5da8dSAndroid Build Coastguard Worker warnings.warn( 685*cda5da8dSAndroid Build Coastguard Worker "UTF-8 Mode affects locale.getpreferredencoding(). Consider locale.getencoding() instead.", 686*cda5da8dSAndroid Build Coastguard Worker EncodingWarning, 2) 687*cda5da8dSAndroid Build Coastguard Worker if sys.flags.utf8_mode: 688*cda5da8dSAndroid Build Coastguard Worker return 'utf-8' 689*cda5da8dSAndroid Build Coastguard Worker 690*cda5da8dSAndroid Build Coastguard Worker if not do_setlocale: 691*cda5da8dSAndroid Build Coastguard Worker return getencoding() 692*cda5da8dSAndroid Build Coastguard Worker 693*cda5da8dSAndroid Build Coastguard Worker old_loc = setlocale(LC_CTYPE) 694*cda5da8dSAndroid Build Coastguard Worker try: 695*cda5da8dSAndroid Build Coastguard Worker try: 696*cda5da8dSAndroid Build Coastguard Worker setlocale(LC_CTYPE, "") 697*cda5da8dSAndroid Build Coastguard Worker except Error: 698*cda5da8dSAndroid Build Coastguard Worker pass 699*cda5da8dSAndroid Build Coastguard Worker return getencoding() 700*cda5da8dSAndroid Build Coastguard Worker finally: 701*cda5da8dSAndroid Build Coastguard Worker setlocale(LC_CTYPE, old_loc) 702*cda5da8dSAndroid Build Coastguard Worker 703*cda5da8dSAndroid Build Coastguard Worker 704*cda5da8dSAndroid Build Coastguard Worker### Database 705*cda5da8dSAndroid Build Coastguard Worker# 706*cda5da8dSAndroid Build Coastguard Worker# The following data was extracted from the locale.alias file which 707*cda5da8dSAndroid Build Coastguard Worker# comes with X11 and then hand edited removing the explicit encoding 708*cda5da8dSAndroid Build Coastguard Worker# definitions and adding some more aliases. The file is usually 709*cda5da8dSAndroid Build Coastguard Worker# available as /usr/lib/X11/locale/locale.alias. 710*cda5da8dSAndroid Build Coastguard Worker# 711*cda5da8dSAndroid Build Coastguard Worker 712*cda5da8dSAndroid Build Coastguard Worker# 713*cda5da8dSAndroid Build Coastguard Worker# The local_encoding_alias table maps lowercase encoding alias names 714*cda5da8dSAndroid Build Coastguard Worker# to C locale encoding names (case-sensitive). Note that normalize() 715*cda5da8dSAndroid Build Coastguard Worker# first looks up the encoding in the encodings.aliases dictionary and 716*cda5da8dSAndroid Build Coastguard Worker# then applies this mapping to find the correct C lib name for the 717*cda5da8dSAndroid Build Coastguard Worker# encoding. 718*cda5da8dSAndroid Build Coastguard Worker# 719*cda5da8dSAndroid Build Coastguard Workerlocale_encoding_alias = { 720*cda5da8dSAndroid Build Coastguard Worker 721*cda5da8dSAndroid Build Coastguard Worker # Mappings for non-standard encoding names used in locale names 722*cda5da8dSAndroid Build Coastguard Worker '437': 'C', 723*cda5da8dSAndroid Build Coastguard Worker 'c': 'C', 724*cda5da8dSAndroid Build Coastguard Worker 'en': 'ISO8859-1', 725*cda5da8dSAndroid Build Coastguard Worker 'jis': 'JIS7', 726*cda5da8dSAndroid Build Coastguard Worker 'jis7': 'JIS7', 727*cda5da8dSAndroid Build Coastguard Worker 'ajec': 'eucJP', 728*cda5da8dSAndroid Build Coastguard Worker 'koi8c': 'KOI8-C', 729*cda5da8dSAndroid Build Coastguard Worker 'microsoftcp1251': 'CP1251', 730*cda5da8dSAndroid Build Coastguard Worker 'microsoftcp1255': 'CP1255', 731*cda5da8dSAndroid Build Coastguard Worker 'microsoftcp1256': 'CP1256', 732*cda5da8dSAndroid Build Coastguard Worker '88591': 'ISO8859-1', 733*cda5da8dSAndroid Build Coastguard Worker '88592': 'ISO8859-2', 734*cda5da8dSAndroid Build Coastguard Worker '88595': 'ISO8859-5', 735*cda5da8dSAndroid Build Coastguard Worker '885915': 'ISO8859-15', 736*cda5da8dSAndroid Build Coastguard Worker 737*cda5da8dSAndroid Build Coastguard Worker # Mappings from Python codec names to C lib encoding names 738*cda5da8dSAndroid Build Coastguard Worker 'ascii': 'ISO8859-1', 739*cda5da8dSAndroid Build Coastguard Worker 'latin_1': 'ISO8859-1', 740*cda5da8dSAndroid Build Coastguard Worker 'iso8859_1': 'ISO8859-1', 741*cda5da8dSAndroid Build Coastguard Worker 'iso8859_10': 'ISO8859-10', 742*cda5da8dSAndroid Build Coastguard Worker 'iso8859_11': 'ISO8859-11', 743*cda5da8dSAndroid Build Coastguard Worker 'iso8859_13': 'ISO8859-13', 744*cda5da8dSAndroid Build Coastguard Worker 'iso8859_14': 'ISO8859-14', 745*cda5da8dSAndroid Build Coastguard Worker 'iso8859_15': 'ISO8859-15', 746*cda5da8dSAndroid Build Coastguard Worker 'iso8859_16': 'ISO8859-16', 747*cda5da8dSAndroid Build Coastguard Worker 'iso8859_2': 'ISO8859-2', 748*cda5da8dSAndroid Build Coastguard Worker 'iso8859_3': 'ISO8859-3', 749*cda5da8dSAndroid Build Coastguard Worker 'iso8859_4': 'ISO8859-4', 750*cda5da8dSAndroid Build Coastguard Worker 'iso8859_5': 'ISO8859-5', 751*cda5da8dSAndroid Build Coastguard Worker 'iso8859_6': 'ISO8859-6', 752*cda5da8dSAndroid Build Coastguard Worker 'iso8859_7': 'ISO8859-7', 753*cda5da8dSAndroid Build Coastguard Worker 'iso8859_8': 'ISO8859-8', 754*cda5da8dSAndroid Build Coastguard Worker 'iso8859_9': 'ISO8859-9', 755*cda5da8dSAndroid Build Coastguard Worker 'iso2022_jp': 'JIS7', 756*cda5da8dSAndroid Build Coastguard Worker 'shift_jis': 'SJIS', 757*cda5da8dSAndroid Build Coastguard Worker 'tactis': 'TACTIS', 758*cda5da8dSAndroid Build Coastguard Worker 'euc_jp': 'eucJP', 759*cda5da8dSAndroid Build Coastguard Worker 'euc_kr': 'eucKR', 760*cda5da8dSAndroid Build Coastguard Worker 'utf_8': 'UTF-8', 761*cda5da8dSAndroid Build Coastguard Worker 'koi8_r': 'KOI8-R', 762*cda5da8dSAndroid Build Coastguard Worker 'koi8_t': 'KOI8-T', 763*cda5da8dSAndroid Build Coastguard Worker 'koi8_u': 'KOI8-U', 764*cda5da8dSAndroid Build Coastguard Worker 'kz1048': 'RK1048', 765*cda5da8dSAndroid Build Coastguard Worker 'cp1251': 'CP1251', 766*cda5da8dSAndroid Build Coastguard Worker 'cp1255': 'CP1255', 767*cda5da8dSAndroid Build Coastguard Worker 'cp1256': 'CP1256', 768*cda5da8dSAndroid Build Coastguard Worker 769*cda5da8dSAndroid Build Coastguard Worker # XXX This list is still incomplete. If you know more 770*cda5da8dSAndroid Build Coastguard Worker # mappings, please file a bug report. Thanks. 771*cda5da8dSAndroid Build Coastguard Worker} 772*cda5da8dSAndroid Build Coastguard Worker 773*cda5da8dSAndroid Build Coastguard Workerfor k, v in sorted(locale_encoding_alias.items()): 774*cda5da8dSAndroid Build Coastguard Worker k = k.replace('_', '') 775*cda5da8dSAndroid Build Coastguard Worker locale_encoding_alias.setdefault(k, v) 776*cda5da8dSAndroid Build Coastguard Workerdel k, v 777*cda5da8dSAndroid Build Coastguard Worker 778*cda5da8dSAndroid Build Coastguard Worker# 779*cda5da8dSAndroid Build Coastguard Worker# The locale_alias table maps lowercase alias names to C locale names 780*cda5da8dSAndroid Build Coastguard Worker# (case-sensitive). Encodings are always separated from the locale 781*cda5da8dSAndroid Build Coastguard Worker# name using a dot ('.'); they should only be given in case the 782*cda5da8dSAndroid Build Coastguard Worker# language name is needed to interpret the given encoding alias 783*cda5da8dSAndroid Build Coastguard Worker# correctly (CJK codes often have this need). 784*cda5da8dSAndroid Build Coastguard Worker# 785*cda5da8dSAndroid Build Coastguard Worker# Note that the normalize() function which uses this tables 786*cda5da8dSAndroid Build Coastguard Worker# removes '_' and '-' characters from the encoding part of the 787*cda5da8dSAndroid Build Coastguard Worker# locale name before doing the lookup. This saves a lot of 788*cda5da8dSAndroid Build Coastguard Worker# space in the table. 789*cda5da8dSAndroid Build Coastguard Worker# 790*cda5da8dSAndroid Build Coastguard Worker# MAL 2004-12-10: 791*cda5da8dSAndroid Build Coastguard Worker# Updated alias mapping to most recent locale.alias file 792*cda5da8dSAndroid Build Coastguard Worker# from X.org distribution using makelocalealias.py. 793*cda5da8dSAndroid Build Coastguard Worker# 794*cda5da8dSAndroid Build Coastguard Worker# These are the differences compared to the old mapping (Python 2.4 795*cda5da8dSAndroid Build Coastguard Worker# and older): 796*cda5da8dSAndroid Build Coastguard Worker# 797*cda5da8dSAndroid Build Coastguard Worker# updated 'bg' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251' 798*cda5da8dSAndroid Build Coastguard Worker# updated 'bg_bg' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251' 799*cda5da8dSAndroid Build Coastguard Worker# updated 'bulgarian' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251' 800*cda5da8dSAndroid Build Coastguard Worker# updated 'cz' -> 'cz_CZ.ISO8859-2' to 'cs_CZ.ISO8859-2' 801*cda5da8dSAndroid Build Coastguard Worker# updated 'cz_cz' -> 'cz_CZ.ISO8859-2' to 'cs_CZ.ISO8859-2' 802*cda5da8dSAndroid Build Coastguard Worker# updated 'czech' -> 'cs_CS.ISO8859-2' to 'cs_CZ.ISO8859-2' 803*cda5da8dSAndroid Build Coastguard Worker# updated 'dutch' -> 'nl_BE.ISO8859-1' to 'nl_NL.ISO8859-1' 804*cda5da8dSAndroid Build Coastguard Worker# updated 'et' -> 'et_EE.ISO8859-4' to 'et_EE.ISO8859-15' 805*cda5da8dSAndroid Build Coastguard Worker# updated 'et_ee' -> 'et_EE.ISO8859-4' to 'et_EE.ISO8859-15' 806*cda5da8dSAndroid Build Coastguard Worker# updated 'fi' -> 'fi_FI.ISO8859-1' to 'fi_FI.ISO8859-15' 807*cda5da8dSAndroid Build Coastguard Worker# updated 'fi_fi' -> 'fi_FI.ISO8859-1' to 'fi_FI.ISO8859-15' 808*cda5da8dSAndroid Build Coastguard Worker# updated 'iw' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' 809*cda5da8dSAndroid Build Coastguard Worker# updated 'iw_il' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' 810*cda5da8dSAndroid Build Coastguard Worker# updated 'japanese' -> 'ja_JP.SJIS' to 'ja_JP.eucJP' 811*cda5da8dSAndroid Build Coastguard Worker# updated 'lt' -> 'lt_LT.ISO8859-4' to 'lt_LT.ISO8859-13' 812*cda5da8dSAndroid Build Coastguard Worker# updated 'lv' -> 'lv_LV.ISO8859-4' to 'lv_LV.ISO8859-13' 813*cda5da8dSAndroid Build Coastguard Worker# updated 'sl' -> 'sl_CS.ISO8859-2' to 'sl_SI.ISO8859-2' 814*cda5da8dSAndroid Build Coastguard Worker# updated 'slovene' -> 'sl_CS.ISO8859-2' to 'sl_SI.ISO8859-2' 815*cda5da8dSAndroid Build Coastguard Worker# updated 'th_th' -> 'th_TH.TACTIS' to 'th_TH.ISO8859-11' 816*cda5da8dSAndroid Build Coastguard Worker# updated 'zh_cn' -> 'zh_CN.eucCN' to 'zh_CN.gb2312' 817*cda5da8dSAndroid Build Coastguard Worker# updated 'zh_cn.big5' -> 'zh_TW.eucTW' to 'zh_TW.big5' 818*cda5da8dSAndroid Build Coastguard Worker# updated 'zh_tw' -> 'zh_TW.eucTW' to 'zh_TW.big5' 819*cda5da8dSAndroid Build Coastguard Worker# 820*cda5da8dSAndroid Build Coastguard Worker# MAL 2008-05-30: 821*cda5da8dSAndroid Build Coastguard Worker# Updated alias mapping to most recent locale.alias file 822*cda5da8dSAndroid Build Coastguard Worker# from X.org distribution using makelocalealias.py. 823*cda5da8dSAndroid Build Coastguard Worker# 824*cda5da8dSAndroid Build Coastguard Worker# These are the differences compared to the old mapping (Python 2.5 825*cda5da8dSAndroid Build Coastguard Worker# and older): 826*cda5da8dSAndroid Build Coastguard Worker# 827*cda5da8dSAndroid Build Coastguard Worker# updated 'cs_cs.iso88592' -> 'cs_CZ.ISO8859-2' to 'cs_CS.ISO8859-2' 828*cda5da8dSAndroid Build Coastguard Worker# updated 'serbocroatian' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2' 829*cda5da8dSAndroid Build Coastguard Worker# updated 'sh' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2' 830*cda5da8dSAndroid Build Coastguard Worker# updated 'sh_hr.iso88592' -> 'sh_HR.ISO8859-2' to 'hr_HR.ISO8859-2' 831*cda5da8dSAndroid Build Coastguard Worker# updated 'sh_sp' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2' 832*cda5da8dSAndroid Build Coastguard Worker# updated 'sh_yu' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2' 833*cda5da8dSAndroid Build Coastguard Worker# updated 'sp' -> 'sp_YU.ISO8859-5' to 'sr_CS.ISO8859-5' 834*cda5da8dSAndroid Build Coastguard Worker# updated 'sp_yu' -> 'sp_YU.ISO8859-5' to 'sr_CS.ISO8859-5' 835*cda5da8dSAndroid Build Coastguard Worker# updated 'sr' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' 836*cda5da8dSAndroid Build Coastguard Worker# updated 'sr@cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' 837*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_sp' -> 'sr_SP.ISO8859-2' to 'sr_CS.ISO8859-2' 838*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_yu' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' 839*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_yu.cp1251@cyrillic' -> 'sr_YU.CP1251' to 'sr_CS.CP1251' 840*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_yu.iso88592' -> 'sr_YU.ISO8859-2' to 'sr_CS.ISO8859-2' 841*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_yu.iso88595' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' 842*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_yu.iso88595@cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' 843*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_yu.microsoftcp1251@cyrillic' -> 'sr_YU.CP1251' to 'sr_CS.CP1251' 844*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_yu.utf8@cyrillic' -> 'sr_YU.UTF-8' to 'sr_CS.UTF-8' 845*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_yu@cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' 846*cda5da8dSAndroid Build Coastguard Worker# 847*cda5da8dSAndroid Build Coastguard Worker# AP 2010-04-12: 848*cda5da8dSAndroid Build Coastguard Worker# Updated alias mapping to most recent locale.alias file 849*cda5da8dSAndroid Build Coastguard Worker# from X.org distribution using makelocalealias.py. 850*cda5da8dSAndroid Build Coastguard Worker# 851*cda5da8dSAndroid Build Coastguard Worker# These are the differences compared to the old mapping (Python 2.6.5 852*cda5da8dSAndroid Build Coastguard Worker# and older): 853*cda5da8dSAndroid Build Coastguard Worker# 854*cda5da8dSAndroid Build Coastguard Worker# updated 'ru' -> 'ru_RU.ISO8859-5' to 'ru_RU.UTF-8' 855*cda5da8dSAndroid Build Coastguard Worker# updated 'ru_ru' -> 'ru_RU.ISO8859-5' to 'ru_RU.UTF-8' 856*cda5da8dSAndroid Build Coastguard Worker# updated 'serbocroatian' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin' 857*cda5da8dSAndroid Build Coastguard Worker# updated 'sh' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin' 858*cda5da8dSAndroid Build Coastguard Worker# updated 'sh_yu' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin' 859*cda5da8dSAndroid Build Coastguard Worker# updated 'sr' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8' 860*cda5da8dSAndroid Build Coastguard Worker# updated 'sr@cyrillic' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8' 861*cda5da8dSAndroid Build Coastguard Worker# updated 'sr@latn' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin' 862*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_cs.utf8@latn' -> 'sr_CS.UTF-8' to 'sr_RS.UTF-8@latin' 863*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_cs@latn' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin' 864*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_yu' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8@latin' 865*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_yu.utf8@cyrillic' -> 'sr_CS.UTF-8' to 'sr_RS.UTF-8' 866*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_yu@cyrillic' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8' 867*cda5da8dSAndroid Build Coastguard Worker# 868*cda5da8dSAndroid Build Coastguard Worker# SS 2013-12-20: 869*cda5da8dSAndroid Build Coastguard Worker# Updated alias mapping to most recent locale.alias file 870*cda5da8dSAndroid Build Coastguard Worker# from X.org distribution using makelocalealias.py. 871*cda5da8dSAndroid Build Coastguard Worker# 872*cda5da8dSAndroid Build Coastguard Worker# These are the differences compared to the old mapping (Python 3.3.3 873*cda5da8dSAndroid Build Coastguard Worker# and older): 874*cda5da8dSAndroid Build Coastguard Worker# 875*cda5da8dSAndroid Build Coastguard Worker# updated 'a3' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C' 876*cda5da8dSAndroid Build Coastguard Worker# updated 'a3_az' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C' 877*cda5da8dSAndroid Build Coastguard Worker# updated 'a3_az.koi8c' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C' 878*cda5da8dSAndroid Build Coastguard Worker# updated 'cs_cs.iso88592' -> 'cs_CS.ISO8859-2' to 'cs_CZ.ISO8859-2' 879*cda5da8dSAndroid Build Coastguard Worker# updated 'hebrew' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' 880*cda5da8dSAndroid Build Coastguard Worker# updated 'hebrew.iso88598' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' 881*cda5da8dSAndroid Build Coastguard Worker# updated 'sd' -> '[email protected]' to 'sd_IN.UTF-8' 882*cda5da8dSAndroid Build Coastguard Worker# updated 'sr@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin' 883*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_cs' -> 'sr_RS.UTF-8' to 'sr_CS.UTF-8' 884*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_cs.utf8@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin' 885*cda5da8dSAndroid Build Coastguard Worker# updated 'sr_cs@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin' 886*cda5da8dSAndroid Build Coastguard Worker# 887*cda5da8dSAndroid Build Coastguard Worker# SS 2014-10-01: 888*cda5da8dSAndroid Build Coastguard Worker# Updated alias mapping with glibc 2.19 supported locales. 889*cda5da8dSAndroid Build Coastguard Worker# 890*cda5da8dSAndroid Build Coastguard Worker# SS 2018-05-05: 891*cda5da8dSAndroid Build Coastguard Worker# Updated alias mapping with glibc 2.27 supported locales. 892*cda5da8dSAndroid Build Coastguard Worker# 893*cda5da8dSAndroid Build Coastguard Worker# These are the differences compared to the old mapping (Python 3.6.5 894*cda5da8dSAndroid Build Coastguard Worker# and older): 895*cda5da8dSAndroid Build Coastguard Worker# 896*cda5da8dSAndroid Build Coastguard Worker# updated 'ca_es@valencia' -> 'ca_ES.ISO8859-15@valencia' to 'ca_ES.UTF-8@valencia' 897*cda5da8dSAndroid Build Coastguard Worker# updated 'kk_kz' -> 'kk_KZ.RK1048' to 'kk_KZ.ptcp154' 898*cda5da8dSAndroid Build Coastguard Worker# updated 'russian' -> 'ru_RU.ISO8859-5' to 'ru_RU.KOI8-R' 899*cda5da8dSAndroid Build Coastguard Worker 900*cda5da8dSAndroid Build Coastguard Workerlocale_alias = { 901*cda5da8dSAndroid Build Coastguard Worker 'a3': 'az_AZ.KOI8-C', 902*cda5da8dSAndroid Build Coastguard Worker 'a3_az': 'az_AZ.KOI8-C', 903*cda5da8dSAndroid Build Coastguard Worker 'a3_az.koic': 'az_AZ.KOI8-C', 904*cda5da8dSAndroid Build Coastguard Worker 'aa_dj': 'aa_DJ.ISO8859-1', 905*cda5da8dSAndroid Build Coastguard Worker 'aa_er': 'aa_ER.UTF-8', 906*cda5da8dSAndroid Build Coastguard Worker 'aa_et': 'aa_ET.UTF-8', 907*cda5da8dSAndroid Build Coastguard Worker 'af': 'af_ZA.ISO8859-1', 908*cda5da8dSAndroid Build Coastguard Worker 'af_za': 'af_ZA.ISO8859-1', 909*cda5da8dSAndroid Build Coastguard Worker 'agr_pe': 'agr_PE.UTF-8', 910*cda5da8dSAndroid Build Coastguard Worker 'ak_gh': 'ak_GH.UTF-8', 911*cda5da8dSAndroid Build Coastguard Worker 'am': 'am_ET.UTF-8', 912*cda5da8dSAndroid Build Coastguard Worker 'am_et': 'am_ET.UTF-8', 913*cda5da8dSAndroid Build Coastguard Worker 'american': 'en_US.ISO8859-1', 914*cda5da8dSAndroid Build Coastguard Worker 'an_es': 'an_ES.ISO8859-15', 915*cda5da8dSAndroid Build Coastguard Worker 'anp_in': 'anp_IN.UTF-8', 916*cda5da8dSAndroid Build Coastguard Worker 'ar': 'ar_AA.ISO8859-6', 917*cda5da8dSAndroid Build Coastguard Worker 'ar_aa': 'ar_AA.ISO8859-6', 918*cda5da8dSAndroid Build Coastguard Worker 'ar_ae': 'ar_AE.ISO8859-6', 919*cda5da8dSAndroid Build Coastguard Worker 'ar_bh': 'ar_BH.ISO8859-6', 920*cda5da8dSAndroid Build Coastguard Worker 'ar_dz': 'ar_DZ.ISO8859-6', 921*cda5da8dSAndroid Build Coastguard Worker 'ar_eg': 'ar_EG.ISO8859-6', 922*cda5da8dSAndroid Build Coastguard Worker 'ar_in': 'ar_IN.UTF-8', 923*cda5da8dSAndroid Build Coastguard Worker 'ar_iq': 'ar_IQ.ISO8859-6', 924*cda5da8dSAndroid Build Coastguard Worker 'ar_jo': 'ar_JO.ISO8859-6', 925*cda5da8dSAndroid Build Coastguard Worker 'ar_kw': 'ar_KW.ISO8859-6', 926*cda5da8dSAndroid Build Coastguard Worker 'ar_lb': 'ar_LB.ISO8859-6', 927*cda5da8dSAndroid Build Coastguard Worker 'ar_ly': 'ar_LY.ISO8859-6', 928*cda5da8dSAndroid Build Coastguard Worker 'ar_ma': 'ar_MA.ISO8859-6', 929*cda5da8dSAndroid Build Coastguard Worker 'ar_om': 'ar_OM.ISO8859-6', 930*cda5da8dSAndroid Build Coastguard Worker 'ar_qa': 'ar_QA.ISO8859-6', 931*cda5da8dSAndroid Build Coastguard Worker 'ar_sa': 'ar_SA.ISO8859-6', 932*cda5da8dSAndroid Build Coastguard Worker 'ar_sd': 'ar_SD.ISO8859-6', 933*cda5da8dSAndroid Build Coastguard Worker 'ar_ss': 'ar_SS.UTF-8', 934*cda5da8dSAndroid Build Coastguard Worker 'ar_sy': 'ar_SY.ISO8859-6', 935*cda5da8dSAndroid Build Coastguard Worker 'ar_tn': 'ar_TN.ISO8859-6', 936*cda5da8dSAndroid Build Coastguard Worker 'ar_ye': 'ar_YE.ISO8859-6', 937*cda5da8dSAndroid Build Coastguard Worker 'arabic': 'ar_AA.ISO8859-6', 938*cda5da8dSAndroid Build Coastguard Worker 'as': 'as_IN.UTF-8', 939*cda5da8dSAndroid Build Coastguard Worker 'as_in': 'as_IN.UTF-8', 940*cda5da8dSAndroid Build Coastguard Worker 'ast_es': 'ast_ES.ISO8859-15', 941*cda5da8dSAndroid Build Coastguard Worker 'ayc_pe': 'ayc_PE.UTF-8', 942*cda5da8dSAndroid Build Coastguard Worker 'az': 'az_AZ.ISO8859-9E', 943*cda5da8dSAndroid Build Coastguard Worker 'az_az': 'az_AZ.ISO8859-9E', 944*cda5da8dSAndroid Build Coastguard Worker 'az_az.iso88599e': 'az_AZ.ISO8859-9E', 945*cda5da8dSAndroid Build Coastguard Worker 'az_ir': 'az_IR.UTF-8', 946*cda5da8dSAndroid Build Coastguard Worker 'be': 'be_BY.CP1251', 947*cda5da8dSAndroid Build Coastguard Worker 'be@latin': 'be_BY.UTF-8@latin', 948*cda5da8dSAndroid Build Coastguard Worker 'be_bg.utf8': 'bg_BG.UTF-8', 949*cda5da8dSAndroid Build Coastguard Worker 'be_by': 'be_BY.CP1251', 950*cda5da8dSAndroid Build Coastguard Worker 'be_by@latin': 'be_BY.UTF-8@latin', 951*cda5da8dSAndroid Build Coastguard Worker 'bem_zm': 'bem_ZM.UTF-8', 952*cda5da8dSAndroid Build Coastguard Worker 'ber_dz': 'ber_DZ.UTF-8', 953*cda5da8dSAndroid Build Coastguard Worker 'ber_ma': 'ber_MA.UTF-8', 954*cda5da8dSAndroid Build Coastguard Worker 'bg': 'bg_BG.CP1251', 955*cda5da8dSAndroid Build Coastguard Worker 'bg_bg': 'bg_BG.CP1251', 956*cda5da8dSAndroid Build Coastguard Worker 'bhb_in.utf8': 'bhb_IN.UTF-8', 957*cda5da8dSAndroid Build Coastguard Worker 'bho_in': 'bho_IN.UTF-8', 958*cda5da8dSAndroid Build Coastguard Worker 'bho_np': 'bho_NP.UTF-8', 959*cda5da8dSAndroid Build Coastguard Worker 'bi_vu': 'bi_VU.UTF-8', 960*cda5da8dSAndroid Build Coastguard Worker 'bn_bd': 'bn_BD.UTF-8', 961*cda5da8dSAndroid Build Coastguard Worker 'bn_in': 'bn_IN.UTF-8', 962*cda5da8dSAndroid Build Coastguard Worker 'bo_cn': 'bo_CN.UTF-8', 963*cda5da8dSAndroid Build Coastguard Worker 'bo_in': 'bo_IN.UTF-8', 964*cda5da8dSAndroid Build Coastguard Worker 'bokmal': 'nb_NO.ISO8859-1', 965*cda5da8dSAndroid Build Coastguard Worker 'bokm\xe5l': 'nb_NO.ISO8859-1', 966*cda5da8dSAndroid Build Coastguard Worker 'br': 'br_FR.ISO8859-1', 967*cda5da8dSAndroid Build Coastguard Worker 'br_fr': 'br_FR.ISO8859-1', 968*cda5da8dSAndroid Build Coastguard Worker 'brx_in': 'brx_IN.UTF-8', 969*cda5da8dSAndroid Build Coastguard Worker 'bs': 'bs_BA.ISO8859-2', 970*cda5da8dSAndroid Build Coastguard Worker 'bs_ba': 'bs_BA.ISO8859-2', 971*cda5da8dSAndroid Build Coastguard Worker 'bulgarian': 'bg_BG.CP1251', 972*cda5da8dSAndroid Build Coastguard Worker 'byn_er': 'byn_ER.UTF-8', 973*cda5da8dSAndroid Build Coastguard Worker 'c': 'C', 974*cda5da8dSAndroid Build Coastguard Worker 'c-french': 'fr_CA.ISO8859-1', 975*cda5da8dSAndroid Build Coastguard Worker 'c.ascii': 'C', 976*cda5da8dSAndroid Build Coastguard Worker 'c.en': 'C', 977*cda5da8dSAndroid Build Coastguard Worker 'c.iso88591': 'en_US.ISO8859-1', 978*cda5da8dSAndroid Build Coastguard Worker 'c.utf8': 'en_US.UTF-8', 979*cda5da8dSAndroid Build Coastguard Worker 'c_c': 'C', 980*cda5da8dSAndroid Build Coastguard Worker 'c_c.c': 'C', 981*cda5da8dSAndroid Build Coastguard Worker 'ca': 'ca_ES.ISO8859-1', 982*cda5da8dSAndroid Build Coastguard Worker 'ca_ad': 'ca_AD.ISO8859-1', 983*cda5da8dSAndroid Build Coastguard Worker 'ca_es': 'ca_ES.ISO8859-1', 984*cda5da8dSAndroid Build Coastguard Worker 'ca_es@valencia': 'ca_ES.UTF-8@valencia', 985*cda5da8dSAndroid Build Coastguard Worker 'ca_fr': 'ca_FR.ISO8859-1', 986*cda5da8dSAndroid Build Coastguard Worker 'ca_it': 'ca_IT.ISO8859-1', 987*cda5da8dSAndroid Build Coastguard Worker 'catalan': 'ca_ES.ISO8859-1', 988*cda5da8dSAndroid Build Coastguard Worker 'ce_ru': 'ce_RU.UTF-8', 989*cda5da8dSAndroid Build Coastguard Worker 'cextend': 'en_US.ISO8859-1', 990*cda5da8dSAndroid Build Coastguard Worker 'chinese-s': 'zh_CN.eucCN', 991*cda5da8dSAndroid Build Coastguard Worker 'chinese-t': 'zh_TW.eucTW', 992*cda5da8dSAndroid Build Coastguard Worker 'chr_us': 'chr_US.UTF-8', 993*cda5da8dSAndroid Build Coastguard Worker 'ckb_iq': 'ckb_IQ.UTF-8', 994*cda5da8dSAndroid Build Coastguard Worker 'cmn_tw': 'cmn_TW.UTF-8', 995*cda5da8dSAndroid Build Coastguard Worker 'crh_ua': 'crh_UA.UTF-8', 996*cda5da8dSAndroid Build Coastguard Worker 'croatian': 'hr_HR.ISO8859-2', 997*cda5da8dSAndroid Build Coastguard Worker 'cs': 'cs_CZ.ISO8859-2', 998*cda5da8dSAndroid Build Coastguard Worker 'cs_cs': 'cs_CZ.ISO8859-2', 999*cda5da8dSAndroid Build Coastguard Worker 'cs_cz': 'cs_CZ.ISO8859-2', 1000*cda5da8dSAndroid Build Coastguard Worker 'csb_pl': 'csb_PL.UTF-8', 1001*cda5da8dSAndroid Build Coastguard Worker 'cv_ru': 'cv_RU.UTF-8', 1002*cda5da8dSAndroid Build Coastguard Worker 'cy': 'cy_GB.ISO8859-1', 1003*cda5da8dSAndroid Build Coastguard Worker 'cy_gb': 'cy_GB.ISO8859-1', 1004*cda5da8dSAndroid Build Coastguard Worker 'cz': 'cs_CZ.ISO8859-2', 1005*cda5da8dSAndroid Build Coastguard Worker 'cz_cz': 'cs_CZ.ISO8859-2', 1006*cda5da8dSAndroid Build Coastguard Worker 'czech': 'cs_CZ.ISO8859-2', 1007*cda5da8dSAndroid Build Coastguard Worker 'da': 'da_DK.ISO8859-1', 1008*cda5da8dSAndroid Build Coastguard Worker 'da_dk': 'da_DK.ISO8859-1', 1009*cda5da8dSAndroid Build Coastguard Worker 'danish': 'da_DK.ISO8859-1', 1010*cda5da8dSAndroid Build Coastguard Worker 'dansk': 'da_DK.ISO8859-1', 1011*cda5da8dSAndroid Build Coastguard Worker 'de': 'de_DE.ISO8859-1', 1012*cda5da8dSAndroid Build Coastguard Worker 'de_at': 'de_AT.ISO8859-1', 1013*cda5da8dSAndroid Build Coastguard Worker 'de_be': 'de_BE.ISO8859-1', 1014*cda5da8dSAndroid Build Coastguard Worker 'de_ch': 'de_CH.ISO8859-1', 1015*cda5da8dSAndroid Build Coastguard Worker 'de_de': 'de_DE.ISO8859-1', 1016*cda5da8dSAndroid Build Coastguard Worker 'de_it': 'de_IT.ISO8859-1', 1017*cda5da8dSAndroid Build Coastguard Worker 'de_li.utf8': 'de_LI.UTF-8', 1018*cda5da8dSAndroid Build Coastguard Worker 'de_lu': 'de_LU.ISO8859-1', 1019*cda5da8dSAndroid Build Coastguard Worker 'deutsch': 'de_DE.ISO8859-1', 1020*cda5da8dSAndroid Build Coastguard Worker 'doi_in': 'doi_IN.UTF-8', 1021*cda5da8dSAndroid Build Coastguard Worker 'dutch': 'nl_NL.ISO8859-1', 1022*cda5da8dSAndroid Build Coastguard Worker 'dutch.iso88591': 'nl_BE.ISO8859-1', 1023*cda5da8dSAndroid Build Coastguard Worker 'dv_mv': 'dv_MV.UTF-8', 1024*cda5da8dSAndroid Build Coastguard Worker 'dz_bt': 'dz_BT.UTF-8', 1025*cda5da8dSAndroid Build Coastguard Worker 'ee': 'ee_EE.ISO8859-4', 1026*cda5da8dSAndroid Build Coastguard Worker 'ee_ee': 'ee_EE.ISO8859-4', 1027*cda5da8dSAndroid Build Coastguard Worker 'eesti': 'et_EE.ISO8859-1', 1028*cda5da8dSAndroid Build Coastguard Worker 'el': 'el_GR.ISO8859-7', 1029*cda5da8dSAndroid Build Coastguard Worker 'el_cy': 'el_CY.ISO8859-7', 1030*cda5da8dSAndroid Build Coastguard Worker 'el_gr': 'el_GR.ISO8859-7', 1031*cda5da8dSAndroid Build Coastguard Worker 'el_gr@euro': 'el_GR.ISO8859-15', 1032*cda5da8dSAndroid Build Coastguard Worker 'en': 'en_US.ISO8859-1', 1033*cda5da8dSAndroid Build Coastguard Worker 'en_ag': 'en_AG.UTF-8', 1034*cda5da8dSAndroid Build Coastguard Worker 'en_au': 'en_AU.ISO8859-1', 1035*cda5da8dSAndroid Build Coastguard Worker 'en_be': 'en_BE.ISO8859-1', 1036*cda5da8dSAndroid Build Coastguard Worker 'en_bw': 'en_BW.ISO8859-1', 1037*cda5da8dSAndroid Build Coastguard Worker 'en_ca': 'en_CA.ISO8859-1', 1038*cda5da8dSAndroid Build Coastguard Worker 'en_dk': 'en_DK.ISO8859-1', 1039*cda5da8dSAndroid Build Coastguard Worker 'en_dl.utf8': 'en_DL.UTF-8', 1040*cda5da8dSAndroid Build Coastguard Worker 'en_gb': 'en_GB.ISO8859-1', 1041*cda5da8dSAndroid Build Coastguard Worker 'en_hk': 'en_HK.ISO8859-1', 1042*cda5da8dSAndroid Build Coastguard Worker 'en_ie': 'en_IE.ISO8859-1', 1043*cda5da8dSAndroid Build Coastguard Worker 'en_il': 'en_IL.UTF-8', 1044*cda5da8dSAndroid Build Coastguard Worker 'en_in': 'en_IN.ISO8859-1', 1045*cda5da8dSAndroid Build Coastguard Worker 'en_ng': 'en_NG.UTF-8', 1046*cda5da8dSAndroid Build Coastguard Worker 'en_nz': 'en_NZ.ISO8859-1', 1047*cda5da8dSAndroid Build Coastguard Worker 'en_ph': 'en_PH.ISO8859-1', 1048*cda5da8dSAndroid Build Coastguard Worker 'en_sc.utf8': 'en_SC.UTF-8', 1049*cda5da8dSAndroid Build Coastguard Worker 'en_sg': 'en_SG.ISO8859-1', 1050*cda5da8dSAndroid Build Coastguard Worker 'en_uk': 'en_GB.ISO8859-1', 1051*cda5da8dSAndroid Build Coastguard Worker 'en_us': 'en_US.ISO8859-1', 1052*cda5da8dSAndroid Build Coastguard Worker 'en_us@euro@euro': 'en_US.ISO8859-15', 1053*cda5da8dSAndroid Build Coastguard Worker 'en_za': 'en_ZA.ISO8859-1', 1054*cda5da8dSAndroid Build Coastguard Worker 'en_zm': 'en_ZM.UTF-8', 1055*cda5da8dSAndroid Build Coastguard Worker 'en_zw': 'en_ZW.ISO8859-1', 1056*cda5da8dSAndroid Build Coastguard Worker 'en_zw.utf8': 'en_ZS.UTF-8', 1057*cda5da8dSAndroid Build Coastguard Worker 'eng_gb': 'en_GB.ISO8859-1', 1058*cda5da8dSAndroid Build Coastguard Worker 'english': 'en_EN.ISO8859-1', 1059*cda5da8dSAndroid Build Coastguard Worker 'english.iso88591': 'en_US.ISO8859-1', 1060*cda5da8dSAndroid Build Coastguard Worker 'english_uk': 'en_GB.ISO8859-1', 1061*cda5da8dSAndroid Build Coastguard Worker 'english_united-states': 'en_US.ISO8859-1', 1062*cda5da8dSAndroid Build Coastguard Worker 'english_united-states.437': 'C', 1063*cda5da8dSAndroid Build Coastguard Worker 'english_us': 'en_US.ISO8859-1', 1064*cda5da8dSAndroid Build Coastguard Worker 'eo': 'eo_XX.ISO8859-3', 1065*cda5da8dSAndroid Build Coastguard Worker 'eo.utf8': 'eo.UTF-8', 1066*cda5da8dSAndroid Build Coastguard Worker 'eo_eo': 'eo_EO.ISO8859-3', 1067*cda5da8dSAndroid Build Coastguard Worker 'eo_us.utf8': 'eo_US.UTF-8', 1068*cda5da8dSAndroid Build Coastguard Worker 'eo_xx': 'eo_XX.ISO8859-3', 1069*cda5da8dSAndroid Build Coastguard Worker 'es': 'es_ES.ISO8859-1', 1070*cda5da8dSAndroid Build Coastguard Worker 'es_ar': 'es_AR.ISO8859-1', 1071*cda5da8dSAndroid Build Coastguard Worker 'es_bo': 'es_BO.ISO8859-1', 1072*cda5da8dSAndroid Build Coastguard Worker 'es_cl': 'es_CL.ISO8859-1', 1073*cda5da8dSAndroid Build Coastguard Worker 'es_co': 'es_CO.ISO8859-1', 1074*cda5da8dSAndroid Build Coastguard Worker 'es_cr': 'es_CR.ISO8859-1', 1075*cda5da8dSAndroid Build Coastguard Worker 'es_cu': 'es_CU.UTF-8', 1076*cda5da8dSAndroid Build Coastguard Worker 'es_do': 'es_DO.ISO8859-1', 1077*cda5da8dSAndroid Build Coastguard Worker 'es_ec': 'es_EC.ISO8859-1', 1078*cda5da8dSAndroid Build Coastguard Worker 'es_es': 'es_ES.ISO8859-1', 1079*cda5da8dSAndroid Build Coastguard Worker 'es_gt': 'es_GT.ISO8859-1', 1080*cda5da8dSAndroid Build Coastguard Worker 'es_hn': 'es_HN.ISO8859-1', 1081*cda5da8dSAndroid Build Coastguard Worker 'es_mx': 'es_MX.ISO8859-1', 1082*cda5da8dSAndroid Build Coastguard Worker 'es_ni': 'es_NI.ISO8859-1', 1083*cda5da8dSAndroid Build Coastguard Worker 'es_pa': 'es_PA.ISO8859-1', 1084*cda5da8dSAndroid Build Coastguard Worker 'es_pe': 'es_PE.ISO8859-1', 1085*cda5da8dSAndroid Build Coastguard Worker 'es_pr': 'es_PR.ISO8859-1', 1086*cda5da8dSAndroid Build Coastguard Worker 'es_py': 'es_PY.ISO8859-1', 1087*cda5da8dSAndroid Build Coastguard Worker 'es_sv': 'es_SV.ISO8859-1', 1088*cda5da8dSAndroid Build Coastguard Worker 'es_us': 'es_US.ISO8859-1', 1089*cda5da8dSAndroid Build Coastguard Worker 'es_uy': 'es_UY.ISO8859-1', 1090*cda5da8dSAndroid Build Coastguard Worker 'es_ve': 'es_VE.ISO8859-1', 1091*cda5da8dSAndroid Build Coastguard Worker 'estonian': 'et_EE.ISO8859-1', 1092*cda5da8dSAndroid Build Coastguard Worker 'et': 'et_EE.ISO8859-15', 1093*cda5da8dSAndroid Build Coastguard Worker 'et_ee': 'et_EE.ISO8859-15', 1094*cda5da8dSAndroid Build Coastguard Worker 'eu': 'eu_ES.ISO8859-1', 1095*cda5da8dSAndroid Build Coastguard Worker 'eu_es': 'eu_ES.ISO8859-1', 1096*cda5da8dSAndroid Build Coastguard Worker 'eu_fr': 'eu_FR.ISO8859-1', 1097*cda5da8dSAndroid Build Coastguard Worker 'fa': 'fa_IR.UTF-8', 1098*cda5da8dSAndroid Build Coastguard Worker 'fa_ir': 'fa_IR.UTF-8', 1099*cda5da8dSAndroid Build Coastguard Worker 'fa_ir.isiri3342': 'fa_IR.ISIRI-3342', 1100*cda5da8dSAndroid Build Coastguard Worker 'ff_sn': 'ff_SN.UTF-8', 1101*cda5da8dSAndroid Build Coastguard Worker 'fi': 'fi_FI.ISO8859-15', 1102*cda5da8dSAndroid Build Coastguard Worker 'fi_fi': 'fi_FI.ISO8859-15', 1103*cda5da8dSAndroid Build Coastguard Worker 'fil_ph': 'fil_PH.UTF-8', 1104*cda5da8dSAndroid Build Coastguard Worker 'finnish': 'fi_FI.ISO8859-1', 1105*cda5da8dSAndroid Build Coastguard Worker 'fo': 'fo_FO.ISO8859-1', 1106*cda5da8dSAndroid Build Coastguard Worker 'fo_fo': 'fo_FO.ISO8859-1', 1107*cda5da8dSAndroid Build Coastguard Worker 'fr': 'fr_FR.ISO8859-1', 1108*cda5da8dSAndroid Build Coastguard Worker 'fr_be': 'fr_BE.ISO8859-1', 1109*cda5da8dSAndroid Build Coastguard Worker 'fr_ca': 'fr_CA.ISO8859-1', 1110*cda5da8dSAndroid Build Coastguard Worker 'fr_ch': 'fr_CH.ISO8859-1', 1111*cda5da8dSAndroid Build Coastguard Worker 'fr_fr': 'fr_FR.ISO8859-1', 1112*cda5da8dSAndroid Build Coastguard Worker 'fr_lu': 'fr_LU.ISO8859-1', 1113*cda5da8dSAndroid Build Coastguard Worker 'fran\xe7ais': 'fr_FR.ISO8859-1', 1114*cda5da8dSAndroid Build Coastguard Worker 'fre_fr': 'fr_FR.ISO8859-1', 1115*cda5da8dSAndroid Build Coastguard Worker 'french': 'fr_FR.ISO8859-1', 1116*cda5da8dSAndroid Build Coastguard Worker 'french.iso88591': 'fr_CH.ISO8859-1', 1117*cda5da8dSAndroid Build Coastguard Worker 'french_france': 'fr_FR.ISO8859-1', 1118*cda5da8dSAndroid Build Coastguard Worker 'fur_it': 'fur_IT.UTF-8', 1119*cda5da8dSAndroid Build Coastguard Worker 'fy_de': 'fy_DE.UTF-8', 1120*cda5da8dSAndroid Build Coastguard Worker 'fy_nl': 'fy_NL.UTF-8', 1121*cda5da8dSAndroid Build Coastguard Worker 'ga': 'ga_IE.ISO8859-1', 1122*cda5da8dSAndroid Build Coastguard Worker 'ga_ie': 'ga_IE.ISO8859-1', 1123*cda5da8dSAndroid Build Coastguard Worker 'galego': 'gl_ES.ISO8859-1', 1124*cda5da8dSAndroid Build Coastguard Worker 'galician': 'gl_ES.ISO8859-1', 1125*cda5da8dSAndroid Build Coastguard Worker 'gd': 'gd_GB.ISO8859-1', 1126*cda5da8dSAndroid Build Coastguard Worker 'gd_gb': 'gd_GB.ISO8859-1', 1127*cda5da8dSAndroid Build Coastguard Worker 'ger_de': 'de_DE.ISO8859-1', 1128*cda5da8dSAndroid Build Coastguard Worker 'german': 'de_DE.ISO8859-1', 1129*cda5da8dSAndroid Build Coastguard Worker 'german.iso88591': 'de_CH.ISO8859-1', 1130*cda5da8dSAndroid Build Coastguard Worker 'german_germany': 'de_DE.ISO8859-1', 1131*cda5da8dSAndroid Build Coastguard Worker 'gez_er': 'gez_ER.UTF-8', 1132*cda5da8dSAndroid Build Coastguard Worker 'gez_et': 'gez_ET.UTF-8', 1133*cda5da8dSAndroid Build Coastguard Worker 'gl': 'gl_ES.ISO8859-1', 1134*cda5da8dSAndroid Build Coastguard Worker 'gl_es': 'gl_ES.ISO8859-1', 1135*cda5da8dSAndroid Build Coastguard Worker 'greek': 'el_GR.ISO8859-7', 1136*cda5da8dSAndroid Build Coastguard Worker 'gu_in': 'gu_IN.UTF-8', 1137*cda5da8dSAndroid Build Coastguard Worker 'gv': 'gv_GB.ISO8859-1', 1138*cda5da8dSAndroid Build Coastguard Worker 'gv_gb': 'gv_GB.ISO8859-1', 1139*cda5da8dSAndroid Build Coastguard Worker 'ha_ng': 'ha_NG.UTF-8', 1140*cda5da8dSAndroid Build Coastguard Worker 'hak_tw': 'hak_TW.UTF-8', 1141*cda5da8dSAndroid Build Coastguard Worker 'he': 'he_IL.ISO8859-8', 1142*cda5da8dSAndroid Build Coastguard Worker 'he_il': 'he_IL.ISO8859-8', 1143*cda5da8dSAndroid Build Coastguard Worker 'hebrew': 'he_IL.ISO8859-8', 1144*cda5da8dSAndroid Build Coastguard Worker 'hi': 'hi_IN.ISCII-DEV', 1145*cda5da8dSAndroid Build Coastguard Worker 'hi_in': 'hi_IN.ISCII-DEV', 1146*cda5da8dSAndroid Build Coastguard Worker 'hi_in.isciidev': 'hi_IN.ISCII-DEV', 1147*cda5da8dSAndroid Build Coastguard Worker 'hif_fj': 'hif_FJ.UTF-8', 1148*cda5da8dSAndroid Build Coastguard Worker 'hne': 'hne_IN.UTF-8', 1149*cda5da8dSAndroid Build Coastguard Worker 'hne_in': 'hne_IN.UTF-8', 1150*cda5da8dSAndroid Build Coastguard Worker 'hr': 'hr_HR.ISO8859-2', 1151*cda5da8dSAndroid Build Coastguard Worker 'hr_hr': 'hr_HR.ISO8859-2', 1152*cda5da8dSAndroid Build Coastguard Worker 'hrvatski': 'hr_HR.ISO8859-2', 1153*cda5da8dSAndroid Build Coastguard Worker 'hsb_de': 'hsb_DE.ISO8859-2', 1154*cda5da8dSAndroid Build Coastguard Worker 'ht_ht': 'ht_HT.UTF-8', 1155*cda5da8dSAndroid Build Coastguard Worker 'hu': 'hu_HU.ISO8859-2', 1156*cda5da8dSAndroid Build Coastguard Worker 'hu_hu': 'hu_HU.ISO8859-2', 1157*cda5da8dSAndroid Build Coastguard Worker 'hungarian': 'hu_HU.ISO8859-2', 1158*cda5da8dSAndroid Build Coastguard Worker 'hy_am': 'hy_AM.UTF-8', 1159*cda5da8dSAndroid Build Coastguard Worker 'hy_am.armscii8': 'hy_AM.ARMSCII_8', 1160*cda5da8dSAndroid Build Coastguard Worker 'ia': 'ia.UTF-8', 1161*cda5da8dSAndroid Build Coastguard Worker 'ia_fr': 'ia_FR.UTF-8', 1162*cda5da8dSAndroid Build Coastguard Worker 'icelandic': 'is_IS.ISO8859-1', 1163*cda5da8dSAndroid Build Coastguard Worker 'id': 'id_ID.ISO8859-1', 1164*cda5da8dSAndroid Build Coastguard Worker 'id_id': 'id_ID.ISO8859-1', 1165*cda5da8dSAndroid Build Coastguard Worker 'ig_ng': 'ig_NG.UTF-8', 1166*cda5da8dSAndroid Build Coastguard Worker 'ik_ca': 'ik_CA.UTF-8', 1167*cda5da8dSAndroid Build Coastguard Worker 'in': 'id_ID.ISO8859-1', 1168*cda5da8dSAndroid Build Coastguard Worker 'in_id': 'id_ID.ISO8859-1', 1169*cda5da8dSAndroid Build Coastguard Worker 'is': 'is_IS.ISO8859-1', 1170*cda5da8dSAndroid Build Coastguard Worker 'is_is': 'is_IS.ISO8859-1', 1171*cda5da8dSAndroid Build Coastguard Worker 'iso-8859-1': 'en_US.ISO8859-1', 1172*cda5da8dSAndroid Build Coastguard Worker 'iso-8859-15': 'en_US.ISO8859-15', 1173*cda5da8dSAndroid Build Coastguard Worker 'iso8859-1': 'en_US.ISO8859-1', 1174*cda5da8dSAndroid Build Coastguard Worker 'iso8859-15': 'en_US.ISO8859-15', 1175*cda5da8dSAndroid Build Coastguard Worker 'iso_8859_1': 'en_US.ISO8859-1', 1176*cda5da8dSAndroid Build Coastguard Worker 'iso_8859_15': 'en_US.ISO8859-15', 1177*cda5da8dSAndroid Build Coastguard Worker 'it': 'it_IT.ISO8859-1', 1178*cda5da8dSAndroid Build Coastguard Worker 'it_ch': 'it_CH.ISO8859-1', 1179*cda5da8dSAndroid Build Coastguard Worker 'it_it': 'it_IT.ISO8859-1', 1180*cda5da8dSAndroid Build Coastguard Worker 'italian': 'it_IT.ISO8859-1', 1181*cda5da8dSAndroid Build Coastguard Worker 'iu': 'iu_CA.NUNACOM-8', 1182*cda5da8dSAndroid Build Coastguard Worker 'iu_ca': 'iu_CA.NUNACOM-8', 1183*cda5da8dSAndroid Build Coastguard Worker 'iu_ca.nunacom8': 'iu_CA.NUNACOM-8', 1184*cda5da8dSAndroid Build Coastguard Worker 'iw': 'he_IL.ISO8859-8', 1185*cda5da8dSAndroid Build Coastguard Worker 'iw_il': 'he_IL.ISO8859-8', 1186*cda5da8dSAndroid Build Coastguard Worker 'iw_il.utf8': 'iw_IL.UTF-8', 1187*cda5da8dSAndroid Build Coastguard Worker 'ja': 'ja_JP.eucJP', 1188*cda5da8dSAndroid Build Coastguard Worker 'ja_jp': 'ja_JP.eucJP', 1189*cda5da8dSAndroid Build Coastguard Worker 'ja_jp.euc': 'ja_JP.eucJP', 1190*cda5da8dSAndroid Build Coastguard Worker 'ja_jp.mscode': 'ja_JP.SJIS', 1191*cda5da8dSAndroid Build Coastguard Worker 'ja_jp.pck': 'ja_JP.SJIS', 1192*cda5da8dSAndroid Build Coastguard Worker 'japan': 'ja_JP.eucJP', 1193*cda5da8dSAndroid Build Coastguard Worker 'japanese': 'ja_JP.eucJP', 1194*cda5da8dSAndroid Build Coastguard Worker 'japanese-euc': 'ja_JP.eucJP', 1195*cda5da8dSAndroid Build Coastguard Worker 'japanese.euc': 'ja_JP.eucJP', 1196*cda5da8dSAndroid Build Coastguard Worker 'jp_jp': 'ja_JP.eucJP', 1197*cda5da8dSAndroid Build Coastguard Worker 'ka': 'ka_GE.GEORGIAN-ACADEMY', 1198*cda5da8dSAndroid Build Coastguard Worker 'ka_ge': 'ka_GE.GEORGIAN-ACADEMY', 1199*cda5da8dSAndroid Build Coastguard Worker 'ka_ge.georgianacademy': 'ka_GE.GEORGIAN-ACADEMY', 1200*cda5da8dSAndroid Build Coastguard Worker 'ka_ge.georgianps': 'ka_GE.GEORGIAN-PS', 1201*cda5da8dSAndroid Build Coastguard Worker 'ka_ge.georgianrs': 'ka_GE.GEORGIAN-ACADEMY', 1202*cda5da8dSAndroid Build Coastguard Worker 'kab_dz': 'kab_DZ.UTF-8', 1203*cda5da8dSAndroid Build Coastguard Worker 'kk_kz': 'kk_KZ.ptcp154', 1204*cda5da8dSAndroid Build Coastguard Worker 'kl': 'kl_GL.ISO8859-1', 1205*cda5da8dSAndroid Build Coastguard Worker 'kl_gl': 'kl_GL.ISO8859-1', 1206*cda5da8dSAndroid Build Coastguard Worker 'km_kh': 'km_KH.UTF-8', 1207*cda5da8dSAndroid Build Coastguard Worker 'kn': 'kn_IN.UTF-8', 1208*cda5da8dSAndroid Build Coastguard Worker 'kn_in': 'kn_IN.UTF-8', 1209*cda5da8dSAndroid Build Coastguard Worker 'ko': 'ko_KR.eucKR', 1210*cda5da8dSAndroid Build Coastguard Worker 'ko_kr': 'ko_KR.eucKR', 1211*cda5da8dSAndroid Build Coastguard Worker 'ko_kr.euc': 'ko_KR.eucKR', 1212*cda5da8dSAndroid Build Coastguard Worker 'kok_in': 'kok_IN.UTF-8', 1213*cda5da8dSAndroid Build Coastguard Worker 'korean': 'ko_KR.eucKR', 1214*cda5da8dSAndroid Build Coastguard Worker 'korean.euc': 'ko_KR.eucKR', 1215*cda5da8dSAndroid Build Coastguard Worker 'ks': 'ks_IN.UTF-8', 1216*cda5da8dSAndroid Build Coastguard Worker 'ks_in': 'ks_IN.UTF-8', 1217*cda5da8dSAndroid Build Coastguard Worker '[email protected]': 'ks_IN.UTF-8@devanagari', 1218*cda5da8dSAndroid Build Coastguard Worker 'ku_tr': 'ku_TR.ISO8859-9', 1219*cda5da8dSAndroid Build Coastguard Worker 'kw': 'kw_GB.ISO8859-1', 1220*cda5da8dSAndroid Build Coastguard Worker 'kw_gb': 'kw_GB.ISO8859-1', 1221*cda5da8dSAndroid Build Coastguard Worker 'ky': 'ky_KG.UTF-8', 1222*cda5da8dSAndroid Build Coastguard Worker 'ky_kg': 'ky_KG.UTF-8', 1223*cda5da8dSAndroid Build Coastguard Worker 'lb_lu': 'lb_LU.UTF-8', 1224*cda5da8dSAndroid Build Coastguard Worker 'lg_ug': 'lg_UG.ISO8859-10', 1225*cda5da8dSAndroid Build Coastguard Worker 'li_be': 'li_BE.UTF-8', 1226*cda5da8dSAndroid Build Coastguard Worker 'li_nl': 'li_NL.UTF-8', 1227*cda5da8dSAndroid Build Coastguard Worker 'lij_it': 'lij_IT.UTF-8', 1228*cda5da8dSAndroid Build Coastguard Worker 'lithuanian': 'lt_LT.ISO8859-13', 1229*cda5da8dSAndroid Build Coastguard Worker 'ln_cd': 'ln_CD.UTF-8', 1230*cda5da8dSAndroid Build Coastguard Worker 'lo': 'lo_LA.MULELAO-1', 1231*cda5da8dSAndroid Build Coastguard Worker 'lo_la': 'lo_LA.MULELAO-1', 1232*cda5da8dSAndroid Build Coastguard Worker 'lo_la.cp1133': 'lo_LA.IBM-CP1133', 1233*cda5da8dSAndroid Build Coastguard Worker 'lo_la.ibmcp1133': 'lo_LA.IBM-CP1133', 1234*cda5da8dSAndroid Build Coastguard Worker 'lo_la.mulelao1': 'lo_LA.MULELAO-1', 1235*cda5da8dSAndroid Build Coastguard Worker 'lt': 'lt_LT.ISO8859-13', 1236*cda5da8dSAndroid Build Coastguard Worker 'lt_lt': 'lt_LT.ISO8859-13', 1237*cda5da8dSAndroid Build Coastguard Worker 'lv': 'lv_LV.ISO8859-13', 1238*cda5da8dSAndroid Build Coastguard Worker 'lv_lv': 'lv_LV.ISO8859-13', 1239*cda5da8dSAndroid Build Coastguard Worker 'lzh_tw': 'lzh_TW.UTF-8', 1240*cda5da8dSAndroid Build Coastguard Worker 'mag_in': 'mag_IN.UTF-8', 1241*cda5da8dSAndroid Build Coastguard Worker 'mai': 'mai_IN.UTF-8', 1242*cda5da8dSAndroid Build Coastguard Worker 'mai_in': 'mai_IN.UTF-8', 1243*cda5da8dSAndroid Build Coastguard Worker 'mai_np': 'mai_NP.UTF-8', 1244*cda5da8dSAndroid Build Coastguard Worker 'mfe_mu': 'mfe_MU.UTF-8', 1245*cda5da8dSAndroid Build Coastguard Worker 'mg_mg': 'mg_MG.ISO8859-15', 1246*cda5da8dSAndroid Build Coastguard Worker 'mhr_ru': 'mhr_RU.UTF-8', 1247*cda5da8dSAndroid Build Coastguard Worker 'mi': 'mi_NZ.ISO8859-1', 1248*cda5da8dSAndroid Build Coastguard Worker 'mi_nz': 'mi_NZ.ISO8859-1', 1249*cda5da8dSAndroid Build Coastguard Worker 'miq_ni': 'miq_NI.UTF-8', 1250*cda5da8dSAndroid Build Coastguard Worker 'mjw_in': 'mjw_IN.UTF-8', 1251*cda5da8dSAndroid Build Coastguard Worker 'mk': 'mk_MK.ISO8859-5', 1252*cda5da8dSAndroid Build Coastguard Worker 'mk_mk': 'mk_MK.ISO8859-5', 1253*cda5da8dSAndroid Build Coastguard Worker 'ml': 'ml_IN.UTF-8', 1254*cda5da8dSAndroid Build Coastguard Worker 'ml_in': 'ml_IN.UTF-8', 1255*cda5da8dSAndroid Build Coastguard Worker 'mn_mn': 'mn_MN.UTF-8', 1256*cda5da8dSAndroid Build Coastguard Worker 'mni_in': 'mni_IN.UTF-8', 1257*cda5da8dSAndroid Build Coastguard Worker 'mr': 'mr_IN.UTF-8', 1258*cda5da8dSAndroid Build Coastguard Worker 'mr_in': 'mr_IN.UTF-8', 1259*cda5da8dSAndroid Build Coastguard Worker 'ms': 'ms_MY.ISO8859-1', 1260*cda5da8dSAndroid Build Coastguard Worker 'ms_my': 'ms_MY.ISO8859-1', 1261*cda5da8dSAndroid Build Coastguard Worker 'mt': 'mt_MT.ISO8859-3', 1262*cda5da8dSAndroid Build Coastguard Worker 'mt_mt': 'mt_MT.ISO8859-3', 1263*cda5da8dSAndroid Build Coastguard Worker 'my_mm': 'my_MM.UTF-8', 1264*cda5da8dSAndroid Build Coastguard Worker 'nan_tw': 'nan_TW.UTF-8', 1265*cda5da8dSAndroid Build Coastguard Worker 'nb': 'nb_NO.ISO8859-1', 1266*cda5da8dSAndroid Build Coastguard Worker 'nb_no': 'nb_NO.ISO8859-1', 1267*cda5da8dSAndroid Build Coastguard Worker 'nds_de': 'nds_DE.UTF-8', 1268*cda5da8dSAndroid Build Coastguard Worker 'nds_nl': 'nds_NL.UTF-8', 1269*cda5da8dSAndroid Build Coastguard Worker 'ne_np': 'ne_NP.UTF-8', 1270*cda5da8dSAndroid Build Coastguard Worker 'nhn_mx': 'nhn_MX.UTF-8', 1271*cda5da8dSAndroid Build Coastguard Worker 'niu_nu': 'niu_NU.UTF-8', 1272*cda5da8dSAndroid Build Coastguard Worker 'niu_nz': 'niu_NZ.UTF-8', 1273*cda5da8dSAndroid Build Coastguard Worker 'nl': 'nl_NL.ISO8859-1', 1274*cda5da8dSAndroid Build Coastguard Worker 'nl_aw': 'nl_AW.UTF-8', 1275*cda5da8dSAndroid Build Coastguard Worker 'nl_be': 'nl_BE.ISO8859-1', 1276*cda5da8dSAndroid Build Coastguard Worker 'nl_nl': 'nl_NL.ISO8859-1', 1277*cda5da8dSAndroid Build Coastguard Worker 'nn': 'nn_NO.ISO8859-1', 1278*cda5da8dSAndroid Build Coastguard Worker 'nn_no': 'nn_NO.ISO8859-1', 1279*cda5da8dSAndroid Build Coastguard Worker 'no': 'no_NO.ISO8859-1', 1280*cda5da8dSAndroid Build Coastguard Worker 'no@nynorsk': 'ny_NO.ISO8859-1', 1281*cda5da8dSAndroid Build Coastguard Worker 'no_no': 'no_NO.ISO8859-1', 1282*cda5da8dSAndroid Build Coastguard Worker 'no_no.iso88591@bokmal': 'no_NO.ISO8859-1', 1283*cda5da8dSAndroid Build Coastguard Worker 'no_no.iso88591@nynorsk': 'no_NO.ISO8859-1', 1284*cda5da8dSAndroid Build Coastguard Worker 'norwegian': 'no_NO.ISO8859-1', 1285*cda5da8dSAndroid Build Coastguard Worker 'nr': 'nr_ZA.ISO8859-1', 1286*cda5da8dSAndroid Build Coastguard Worker 'nr_za': 'nr_ZA.ISO8859-1', 1287*cda5da8dSAndroid Build Coastguard Worker 'nso': 'nso_ZA.ISO8859-15', 1288*cda5da8dSAndroid Build Coastguard Worker 'nso_za': 'nso_ZA.ISO8859-15', 1289*cda5da8dSAndroid Build Coastguard Worker 'ny': 'ny_NO.ISO8859-1', 1290*cda5da8dSAndroid Build Coastguard Worker 'ny_no': 'ny_NO.ISO8859-1', 1291*cda5da8dSAndroid Build Coastguard Worker 'nynorsk': 'nn_NO.ISO8859-1', 1292*cda5da8dSAndroid Build Coastguard Worker 'oc': 'oc_FR.ISO8859-1', 1293*cda5da8dSAndroid Build Coastguard Worker 'oc_fr': 'oc_FR.ISO8859-1', 1294*cda5da8dSAndroid Build Coastguard Worker 'om_et': 'om_ET.UTF-8', 1295*cda5da8dSAndroid Build Coastguard Worker 'om_ke': 'om_KE.ISO8859-1', 1296*cda5da8dSAndroid Build Coastguard Worker 'or': 'or_IN.UTF-8', 1297*cda5da8dSAndroid Build Coastguard Worker 'or_in': 'or_IN.UTF-8', 1298*cda5da8dSAndroid Build Coastguard Worker 'os_ru': 'os_RU.UTF-8', 1299*cda5da8dSAndroid Build Coastguard Worker 'pa': 'pa_IN.UTF-8', 1300*cda5da8dSAndroid Build Coastguard Worker 'pa_in': 'pa_IN.UTF-8', 1301*cda5da8dSAndroid Build Coastguard Worker 'pa_pk': 'pa_PK.UTF-8', 1302*cda5da8dSAndroid Build Coastguard Worker 'pap_an': 'pap_AN.UTF-8', 1303*cda5da8dSAndroid Build Coastguard Worker 'pap_aw': 'pap_AW.UTF-8', 1304*cda5da8dSAndroid Build Coastguard Worker 'pap_cw': 'pap_CW.UTF-8', 1305*cda5da8dSAndroid Build Coastguard Worker 'pd': 'pd_US.ISO8859-1', 1306*cda5da8dSAndroid Build Coastguard Worker 'pd_de': 'pd_DE.ISO8859-1', 1307*cda5da8dSAndroid Build Coastguard Worker 'pd_us': 'pd_US.ISO8859-1', 1308*cda5da8dSAndroid Build Coastguard Worker 'ph': 'ph_PH.ISO8859-1', 1309*cda5da8dSAndroid Build Coastguard Worker 'ph_ph': 'ph_PH.ISO8859-1', 1310*cda5da8dSAndroid Build Coastguard Worker 'pl': 'pl_PL.ISO8859-2', 1311*cda5da8dSAndroid Build Coastguard Worker 'pl_pl': 'pl_PL.ISO8859-2', 1312*cda5da8dSAndroid Build Coastguard Worker 'polish': 'pl_PL.ISO8859-2', 1313*cda5da8dSAndroid Build Coastguard Worker 'portuguese': 'pt_PT.ISO8859-1', 1314*cda5da8dSAndroid Build Coastguard Worker 'portuguese_brazil': 'pt_BR.ISO8859-1', 1315*cda5da8dSAndroid Build Coastguard Worker 'posix': 'C', 1316*cda5da8dSAndroid Build Coastguard Worker 'posix-utf2': 'C', 1317*cda5da8dSAndroid Build Coastguard Worker 'pp': 'pp_AN.ISO8859-1', 1318*cda5da8dSAndroid Build Coastguard Worker 'pp_an': 'pp_AN.ISO8859-1', 1319*cda5da8dSAndroid Build Coastguard Worker 'ps_af': 'ps_AF.UTF-8', 1320*cda5da8dSAndroid Build Coastguard Worker 'pt': 'pt_PT.ISO8859-1', 1321*cda5da8dSAndroid Build Coastguard Worker 'pt_br': 'pt_BR.ISO8859-1', 1322*cda5da8dSAndroid Build Coastguard Worker 'pt_pt': 'pt_PT.ISO8859-1', 1323*cda5da8dSAndroid Build Coastguard Worker 'quz_pe': 'quz_PE.UTF-8', 1324*cda5da8dSAndroid Build Coastguard Worker 'raj_in': 'raj_IN.UTF-8', 1325*cda5da8dSAndroid Build Coastguard Worker 'ro': 'ro_RO.ISO8859-2', 1326*cda5da8dSAndroid Build Coastguard Worker 'ro_ro': 'ro_RO.ISO8859-2', 1327*cda5da8dSAndroid Build Coastguard Worker 'romanian': 'ro_RO.ISO8859-2', 1328*cda5da8dSAndroid Build Coastguard Worker 'ru': 'ru_RU.UTF-8', 1329*cda5da8dSAndroid Build Coastguard Worker 'ru_ru': 'ru_RU.UTF-8', 1330*cda5da8dSAndroid Build Coastguard Worker 'ru_ua': 'ru_UA.KOI8-U', 1331*cda5da8dSAndroid Build Coastguard Worker 'rumanian': 'ro_RO.ISO8859-2', 1332*cda5da8dSAndroid Build Coastguard Worker 'russian': 'ru_RU.KOI8-R', 1333*cda5da8dSAndroid Build Coastguard Worker 'rw': 'rw_RW.ISO8859-1', 1334*cda5da8dSAndroid Build Coastguard Worker 'rw_rw': 'rw_RW.ISO8859-1', 1335*cda5da8dSAndroid Build Coastguard Worker 'sa_in': 'sa_IN.UTF-8', 1336*cda5da8dSAndroid Build Coastguard Worker 'sat_in': 'sat_IN.UTF-8', 1337*cda5da8dSAndroid Build Coastguard Worker 'sc_it': 'sc_IT.UTF-8', 1338*cda5da8dSAndroid Build Coastguard Worker 'sd': 'sd_IN.UTF-8', 1339*cda5da8dSAndroid Build Coastguard Worker 'sd_in': 'sd_IN.UTF-8', 1340*cda5da8dSAndroid Build Coastguard Worker '[email protected]': 'sd_IN.UTF-8@devanagari', 1341*cda5da8dSAndroid Build Coastguard Worker 'sd_pk': 'sd_PK.UTF-8', 1342*cda5da8dSAndroid Build Coastguard Worker 'se_no': 'se_NO.UTF-8', 1343*cda5da8dSAndroid Build Coastguard Worker 'serbocroatian': 'sr_RS.UTF-8@latin', 1344*cda5da8dSAndroid Build Coastguard Worker 'sgs_lt': 'sgs_LT.UTF-8', 1345*cda5da8dSAndroid Build Coastguard Worker 'sh': 'sr_RS.UTF-8@latin', 1346*cda5da8dSAndroid Build Coastguard Worker 'sh_ba.iso88592@bosnia': 'sr_CS.ISO8859-2', 1347*cda5da8dSAndroid Build Coastguard Worker 'sh_hr': 'sh_HR.ISO8859-2', 1348*cda5da8dSAndroid Build Coastguard Worker 'sh_hr.iso88592': 'hr_HR.ISO8859-2', 1349*cda5da8dSAndroid Build Coastguard Worker 'sh_sp': 'sr_CS.ISO8859-2', 1350*cda5da8dSAndroid Build Coastguard Worker 'sh_yu': 'sr_RS.UTF-8@latin', 1351*cda5da8dSAndroid Build Coastguard Worker 'shn_mm': 'shn_MM.UTF-8', 1352*cda5da8dSAndroid Build Coastguard Worker 'shs_ca': 'shs_CA.UTF-8', 1353*cda5da8dSAndroid Build Coastguard Worker 'si': 'si_LK.UTF-8', 1354*cda5da8dSAndroid Build Coastguard Worker 'si_lk': 'si_LK.UTF-8', 1355*cda5da8dSAndroid Build Coastguard Worker 'sid_et': 'sid_ET.UTF-8', 1356*cda5da8dSAndroid Build Coastguard Worker 'sinhala': 'si_LK.UTF-8', 1357*cda5da8dSAndroid Build Coastguard Worker 'sk': 'sk_SK.ISO8859-2', 1358*cda5da8dSAndroid Build Coastguard Worker 'sk_sk': 'sk_SK.ISO8859-2', 1359*cda5da8dSAndroid Build Coastguard Worker 'sl': 'sl_SI.ISO8859-2', 1360*cda5da8dSAndroid Build Coastguard Worker 'sl_cs': 'sl_CS.ISO8859-2', 1361*cda5da8dSAndroid Build Coastguard Worker 'sl_si': 'sl_SI.ISO8859-2', 1362*cda5da8dSAndroid Build Coastguard Worker 'slovak': 'sk_SK.ISO8859-2', 1363*cda5da8dSAndroid Build Coastguard Worker 'slovene': 'sl_SI.ISO8859-2', 1364*cda5da8dSAndroid Build Coastguard Worker 'slovenian': 'sl_SI.ISO8859-2', 1365*cda5da8dSAndroid Build Coastguard Worker 'sm_ws': 'sm_WS.UTF-8', 1366*cda5da8dSAndroid Build Coastguard Worker 'so_dj': 'so_DJ.ISO8859-1', 1367*cda5da8dSAndroid Build Coastguard Worker 'so_et': 'so_ET.UTF-8', 1368*cda5da8dSAndroid Build Coastguard Worker 'so_ke': 'so_KE.ISO8859-1', 1369*cda5da8dSAndroid Build Coastguard Worker 'so_so': 'so_SO.ISO8859-1', 1370*cda5da8dSAndroid Build Coastguard Worker 'sp': 'sr_CS.ISO8859-5', 1371*cda5da8dSAndroid Build Coastguard Worker 'sp_yu': 'sr_CS.ISO8859-5', 1372*cda5da8dSAndroid Build Coastguard Worker 'spanish': 'es_ES.ISO8859-1', 1373*cda5da8dSAndroid Build Coastguard Worker 'spanish_spain': 'es_ES.ISO8859-1', 1374*cda5da8dSAndroid Build Coastguard Worker 'sq': 'sq_AL.ISO8859-2', 1375*cda5da8dSAndroid Build Coastguard Worker 'sq_al': 'sq_AL.ISO8859-2', 1376*cda5da8dSAndroid Build Coastguard Worker 'sq_mk': 'sq_MK.UTF-8', 1377*cda5da8dSAndroid Build Coastguard Worker 'sr': 'sr_RS.UTF-8', 1378*cda5da8dSAndroid Build Coastguard Worker 'sr@cyrillic': 'sr_RS.UTF-8', 1379*cda5da8dSAndroid Build Coastguard Worker 'sr@latn': 'sr_CS.UTF-8@latin', 1380*cda5da8dSAndroid Build Coastguard Worker 'sr_cs': 'sr_CS.UTF-8', 1381*cda5da8dSAndroid Build Coastguard Worker 'sr_cs.iso88592@latn': 'sr_CS.ISO8859-2', 1382*cda5da8dSAndroid Build Coastguard Worker 'sr_cs@latn': 'sr_CS.UTF-8@latin', 1383*cda5da8dSAndroid Build Coastguard Worker 'sr_me': 'sr_ME.UTF-8', 1384*cda5da8dSAndroid Build Coastguard Worker 'sr_rs': 'sr_RS.UTF-8', 1385*cda5da8dSAndroid Build Coastguard Worker 'sr_rs@latn': 'sr_RS.UTF-8@latin', 1386*cda5da8dSAndroid Build Coastguard Worker 'sr_sp': 'sr_CS.ISO8859-2', 1387*cda5da8dSAndroid Build Coastguard Worker 'sr_yu': 'sr_RS.UTF-8@latin', 1388*cda5da8dSAndroid Build Coastguard Worker 'sr_yu.cp1251@cyrillic': 'sr_CS.CP1251', 1389*cda5da8dSAndroid Build Coastguard Worker 'sr_yu.iso88592': 'sr_CS.ISO8859-2', 1390*cda5da8dSAndroid Build Coastguard Worker 'sr_yu.iso88595': 'sr_CS.ISO8859-5', 1391*cda5da8dSAndroid Build Coastguard Worker 'sr_yu.iso88595@cyrillic': 'sr_CS.ISO8859-5', 1392*cda5da8dSAndroid Build Coastguard Worker 'sr_yu.microsoftcp1251@cyrillic': 'sr_CS.CP1251', 1393*cda5da8dSAndroid Build Coastguard Worker 'sr_yu.utf8': 'sr_RS.UTF-8', 1394*cda5da8dSAndroid Build Coastguard Worker 'sr_yu.utf8@cyrillic': 'sr_RS.UTF-8', 1395*cda5da8dSAndroid Build Coastguard Worker 'sr_yu@cyrillic': 'sr_RS.UTF-8', 1396*cda5da8dSAndroid Build Coastguard Worker 'ss': 'ss_ZA.ISO8859-1', 1397*cda5da8dSAndroid Build Coastguard Worker 'ss_za': 'ss_ZA.ISO8859-1', 1398*cda5da8dSAndroid Build Coastguard Worker 'st': 'st_ZA.ISO8859-1', 1399*cda5da8dSAndroid Build Coastguard Worker 'st_za': 'st_ZA.ISO8859-1', 1400*cda5da8dSAndroid Build Coastguard Worker 'sv': 'sv_SE.ISO8859-1', 1401*cda5da8dSAndroid Build Coastguard Worker 'sv_fi': 'sv_FI.ISO8859-1', 1402*cda5da8dSAndroid Build Coastguard Worker 'sv_se': 'sv_SE.ISO8859-1', 1403*cda5da8dSAndroid Build Coastguard Worker 'sw_ke': 'sw_KE.UTF-8', 1404*cda5da8dSAndroid Build Coastguard Worker 'sw_tz': 'sw_TZ.UTF-8', 1405*cda5da8dSAndroid Build Coastguard Worker 'swedish': 'sv_SE.ISO8859-1', 1406*cda5da8dSAndroid Build Coastguard Worker 'szl_pl': 'szl_PL.UTF-8', 1407*cda5da8dSAndroid Build Coastguard Worker 'ta': 'ta_IN.TSCII-0', 1408*cda5da8dSAndroid Build Coastguard Worker 'ta_in': 'ta_IN.TSCII-0', 1409*cda5da8dSAndroid Build Coastguard Worker 'ta_in.tscii': 'ta_IN.TSCII-0', 1410*cda5da8dSAndroid Build Coastguard Worker 'ta_in.tscii0': 'ta_IN.TSCII-0', 1411*cda5da8dSAndroid Build Coastguard Worker 'ta_lk': 'ta_LK.UTF-8', 1412*cda5da8dSAndroid Build Coastguard Worker 'tcy_in.utf8': 'tcy_IN.UTF-8', 1413*cda5da8dSAndroid Build Coastguard Worker 'te': 'te_IN.UTF-8', 1414*cda5da8dSAndroid Build Coastguard Worker 'te_in': 'te_IN.UTF-8', 1415*cda5da8dSAndroid Build Coastguard Worker 'tg': 'tg_TJ.KOI8-C', 1416*cda5da8dSAndroid Build Coastguard Worker 'tg_tj': 'tg_TJ.KOI8-C', 1417*cda5da8dSAndroid Build Coastguard Worker 'th': 'th_TH.ISO8859-11', 1418*cda5da8dSAndroid Build Coastguard Worker 'th_th': 'th_TH.ISO8859-11', 1419*cda5da8dSAndroid Build Coastguard Worker 'th_th.tactis': 'th_TH.TIS620', 1420*cda5da8dSAndroid Build Coastguard Worker 'th_th.tis620': 'th_TH.TIS620', 1421*cda5da8dSAndroid Build Coastguard Worker 'thai': 'th_TH.ISO8859-11', 1422*cda5da8dSAndroid Build Coastguard Worker 'the_np': 'the_NP.UTF-8', 1423*cda5da8dSAndroid Build Coastguard Worker 'ti_er': 'ti_ER.UTF-8', 1424*cda5da8dSAndroid Build Coastguard Worker 'ti_et': 'ti_ET.UTF-8', 1425*cda5da8dSAndroid Build Coastguard Worker 'tig_er': 'tig_ER.UTF-8', 1426*cda5da8dSAndroid Build Coastguard Worker 'tk_tm': 'tk_TM.UTF-8', 1427*cda5da8dSAndroid Build Coastguard Worker 'tl': 'tl_PH.ISO8859-1', 1428*cda5da8dSAndroid Build Coastguard Worker 'tl_ph': 'tl_PH.ISO8859-1', 1429*cda5da8dSAndroid Build Coastguard Worker 'tn': 'tn_ZA.ISO8859-15', 1430*cda5da8dSAndroid Build Coastguard Worker 'tn_za': 'tn_ZA.ISO8859-15', 1431*cda5da8dSAndroid Build Coastguard Worker 'to_to': 'to_TO.UTF-8', 1432*cda5da8dSAndroid Build Coastguard Worker 'tpi_pg': 'tpi_PG.UTF-8', 1433*cda5da8dSAndroid Build Coastguard Worker 'tr': 'tr_TR.ISO8859-9', 1434*cda5da8dSAndroid Build Coastguard Worker 'tr_cy': 'tr_CY.ISO8859-9', 1435*cda5da8dSAndroid Build Coastguard Worker 'tr_tr': 'tr_TR.ISO8859-9', 1436*cda5da8dSAndroid Build Coastguard Worker 'ts': 'ts_ZA.ISO8859-1', 1437*cda5da8dSAndroid Build Coastguard Worker 'ts_za': 'ts_ZA.ISO8859-1', 1438*cda5da8dSAndroid Build Coastguard Worker 'tt': 'tt_RU.TATAR-CYR', 1439*cda5da8dSAndroid Build Coastguard Worker 'tt_ru': 'tt_RU.TATAR-CYR', 1440*cda5da8dSAndroid Build Coastguard Worker 'tt_ru.tatarcyr': 'tt_RU.TATAR-CYR', 1441*cda5da8dSAndroid Build Coastguard Worker 'tt_ru@iqtelif': 'tt_RU.UTF-8@iqtelif', 1442*cda5da8dSAndroid Build Coastguard Worker 'turkish': 'tr_TR.ISO8859-9', 1443*cda5da8dSAndroid Build Coastguard Worker 'ug_cn': 'ug_CN.UTF-8', 1444*cda5da8dSAndroid Build Coastguard Worker 'uk': 'uk_UA.KOI8-U', 1445*cda5da8dSAndroid Build Coastguard Worker 'uk_ua': 'uk_UA.KOI8-U', 1446*cda5da8dSAndroid Build Coastguard Worker 'univ': 'en_US.utf', 1447*cda5da8dSAndroid Build Coastguard Worker 'universal': 'en_US.utf', 1448*cda5da8dSAndroid Build Coastguard Worker 'universal.utf8@ucs4': 'en_US.UTF-8', 1449*cda5da8dSAndroid Build Coastguard Worker 'unm_us': 'unm_US.UTF-8', 1450*cda5da8dSAndroid Build Coastguard Worker 'ur': 'ur_PK.CP1256', 1451*cda5da8dSAndroid Build Coastguard Worker 'ur_in': 'ur_IN.UTF-8', 1452*cda5da8dSAndroid Build Coastguard Worker 'ur_pk': 'ur_PK.CP1256', 1453*cda5da8dSAndroid Build Coastguard Worker 'uz': 'uz_UZ.UTF-8', 1454*cda5da8dSAndroid Build Coastguard Worker 'uz_uz': 'uz_UZ.UTF-8', 1455*cda5da8dSAndroid Build Coastguard Worker 'uz_uz@cyrillic': 'uz_UZ.UTF-8', 1456*cda5da8dSAndroid Build Coastguard Worker 've': 've_ZA.UTF-8', 1457*cda5da8dSAndroid Build Coastguard Worker 've_za': 've_ZA.UTF-8', 1458*cda5da8dSAndroid Build Coastguard Worker 'vi': 'vi_VN.TCVN', 1459*cda5da8dSAndroid Build Coastguard Worker 'vi_vn': 'vi_VN.TCVN', 1460*cda5da8dSAndroid Build Coastguard Worker 'vi_vn.tcvn': 'vi_VN.TCVN', 1461*cda5da8dSAndroid Build Coastguard Worker 'vi_vn.tcvn5712': 'vi_VN.TCVN', 1462*cda5da8dSAndroid Build Coastguard Worker 'vi_vn.viscii': 'vi_VN.VISCII', 1463*cda5da8dSAndroid Build Coastguard Worker 'vi_vn.viscii111': 'vi_VN.VISCII', 1464*cda5da8dSAndroid Build Coastguard Worker 'wa': 'wa_BE.ISO8859-1', 1465*cda5da8dSAndroid Build Coastguard Worker 'wa_be': 'wa_BE.ISO8859-1', 1466*cda5da8dSAndroid Build Coastguard Worker 'wae_ch': 'wae_CH.UTF-8', 1467*cda5da8dSAndroid Build Coastguard Worker 'wal_et': 'wal_ET.UTF-8', 1468*cda5da8dSAndroid Build Coastguard Worker 'wo_sn': 'wo_SN.UTF-8', 1469*cda5da8dSAndroid Build Coastguard Worker 'xh': 'xh_ZA.ISO8859-1', 1470*cda5da8dSAndroid Build Coastguard Worker 'xh_za': 'xh_ZA.ISO8859-1', 1471*cda5da8dSAndroid Build Coastguard Worker 'yi': 'yi_US.CP1255', 1472*cda5da8dSAndroid Build Coastguard Worker 'yi_us': 'yi_US.CP1255', 1473*cda5da8dSAndroid Build Coastguard Worker 'yo_ng': 'yo_NG.UTF-8', 1474*cda5da8dSAndroid Build Coastguard Worker 'yue_hk': 'yue_HK.UTF-8', 1475*cda5da8dSAndroid Build Coastguard Worker 'yuw_pg': 'yuw_PG.UTF-8', 1476*cda5da8dSAndroid Build Coastguard Worker 'zh': 'zh_CN.eucCN', 1477*cda5da8dSAndroid Build Coastguard Worker 'zh_cn': 'zh_CN.gb2312', 1478*cda5da8dSAndroid Build Coastguard Worker 'zh_cn.big5': 'zh_TW.big5', 1479*cda5da8dSAndroid Build Coastguard Worker 'zh_cn.euc': 'zh_CN.eucCN', 1480*cda5da8dSAndroid Build Coastguard Worker 'zh_hk': 'zh_HK.big5hkscs', 1481*cda5da8dSAndroid Build Coastguard Worker 'zh_hk.big5hk': 'zh_HK.big5hkscs', 1482*cda5da8dSAndroid Build Coastguard Worker 'zh_sg': 'zh_SG.GB2312', 1483*cda5da8dSAndroid Build Coastguard Worker 'zh_sg.gbk': 'zh_SG.GBK', 1484*cda5da8dSAndroid Build Coastguard Worker 'zh_tw': 'zh_TW.big5', 1485*cda5da8dSAndroid Build Coastguard Worker 'zh_tw.euc': 'zh_TW.eucTW', 1486*cda5da8dSAndroid Build Coastguard Worker 'zh_tw.euctw': 'zh_TW.eucTW', 1487*cda5da8dSAndroid Build Coastguard Worker 'zu': 'zu_ZA.ISO8859-1', 1488*cda5da8dSAndroid Build Coastguard Worker 'zu_za': 'zu_ZA.ISO8859-1', 1489*cda5da8dSAndroid Build Coastguard Worker} 1490*cda5da8dSAndroid Build Coastguard Worker 1491*cda5da8dSAndroid Build Coastguard Worker# 1492*cda5da8dSAndroid Build Coastguard Worker# This maps Windows language identifiers to locale strings. 1493*cda5da8dSAndroid Build Coastguard Worker# 1494*cda5da8dSAndroid Build Coastguard Worker# This list has been updated from 1495*cda5da8dSAndroid Build Coastguard Worker# http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_238z.asp 1496*cda5da8dSAndroid Build Coastguard Worker# to include every locale up to Windows Vista. 1497*cda5da8dSAndroid Build Coastguard Worker# 1498*cda5da8dSAndroid Build Coastguard Worker# NOTE: this mapping is incomplete. If your language is missing, please 1499*cda5da8dSAndroid Build Coastguard Worker# submit a bug report to the Python bug tracker at http://bugs.python.org/ 1500*cda5da8dSAndroid Build Coastguard Worker# Make sure you include the missing language identifier and the suggested 1501*cda5da8dSAndroid Build Coastguard Worker# locale code. 1502*cda5da8dSAndroid Build Coastguard Worker# 1503*cda5da8dSAndroid Build Coastguard Worker 1504*cda5da8dSAndroid Build Coastguard Workerwindows_locale = { 1505*cda5da8dSAndroid Build Coastguard Worker 0x0436: "af_ZA", # Afrikaans 1506*cda5da8dSAndroid Build Coastguard Worker 0x041c: "sq_AL", # Albanian 1507*cda5da8dSAndroid Build Coastguard Worker 0x0484: "gsw_FR",# Alsatian - France 1508*cda5da8dSAndroid Build Coastguard Worker 0x045e: "am_ET", # Amharic - Ethiopia 1509*cda5da8dSAndroid Build Coastguard Worker 0x0401: "ar_SA", # Arabic - Saudi Arabia 1510*cda5da8dSAndroid Build Coastguard Worker 0x0801: "ar_IQ", # Arabic - Iraq 1511*cda5da8dSAndroid Build Coastguard Worker 0x0c01: "ar_EG", # Arabic - Egypt 1512*cda5da8dSAndroid Build Coastguard Worker 0x1001: "ar_LY", # Arabic - Libya 1513*cda5da8dSAndroid Build Coastguard Worker 0x1401: "ar_DZ", # Arabic - Algeria 1514*cda5da8dSAndroid Build Coastguard Worker 0x1801: "ar_MA", # Arabic - Morocco 1515*cda5da8dSAndroid Build Coastguard Worker 0x1c01: "ar_TN", # Arabic - Tunisia 1516*cda5da8dSAndroid Build Coastguard Worker 0x2001: "ar_OM", # Arabic - Oman 1517*cda5da8dSAndroid Build Coastguard Worker 0x2401: "ar_YE", # Arabic - Yemen 1518*cda5da8dSAndroid Build Coastguard Worker 0x2801: "ar_SY", # Arabic - Syria 1519*cda5da8dSAndroid Build Coastguard Worker 0x2c01: "ar_JO", # Arabic - Jordan 1520*cda5da8dSAndroid Build Coastguard Worker 0x3001: "ar_LB", # Arabic - Lebanon 1521*cda5da8dSAndroid Build Coastguard Worker 0x3401: "ar_KW", # Arabic - Kuwait 1522*cda5da8dSAndroid Build Coastguard Worker 0x3801: "ar_AE", # Arabic - United Arab Emirates 1523*cda5da8dSAndroid Build Coastguard Worker 0x3c01: "ar_BH", # Arabic - Bahrain 1524*cda5da8dSAndroid Build Coastguard Worker 0x4001: "ar_QA", # Arabic - Qatar 1525*cda5da8dSAndroid Build Coastguard Worker 0x042b: "hy_AM", # Armenian 1526*cda5da8dSAndroid Build Coastguard Worker 0x044d: "as_IN", # Assamese - India 1527*cda5da8dSAndroid Build Coastguard Worker 0x042c: "az_AZ", # Azeri - Latin 1528*cda5da8dSAndroid Build Coastguard Worker 0x082c: "az_AZ", # Azeri - Cyrillic 1529*cda5da8dSAndroid Build Coastguard Worker 0x046d: "ba_RU", # Bashkir 1530*cda5da8dSAndroid Build Coastguard Worker 0x042d: "eu_ES", # Basque - Russia 1531*cda5da8dSAndroid Build Coastguard Worker 0x0423: "be_BY", # Belarusian 1532*cda5da8dSAndroid Build Coastguard Worker 0x0445: "bn_IN", # Begali 1533*cda5da8dSAndroid Build Coastguard Worker 0x201a: "bs_BA", # Bosnian - Cyrillic 1534*cda5da8dSAndroid Build Coastguard Worker 0x141a: "bs_BA", # Bosnian - Latin 1535*cda5da8dSAndroid Build Coastguard Worker 0x047e: "br_FR", # Breton - France 1536*cda5da8dSAndroid Build Coastguard Worker 0x0402: "bg_BG", # Bulgarian 1537*cda5da8dSAndroid Build Coastguard Worker# 0x0455: "my_MM", # Burmese - Not supported 1538*cda5da8dSAndroid Build Coastguard Worker 0x0403: "ca_ES", # Catalan 1539*cda5da8dSAndroid Build Coastguard Worker 0x0004: "zh_CHS",# Chinese - Simplified 1540*cda5da8dSAndroid Build Coastguard Worker 0x0404: "zh_TW", # Chinese - Taiwan 1541*cda5da8dSAndroid Build Coastguard Worker 0x0804: "zh_CN", # Chinese - PRC 1542*cda5da8dSAndroid Build Coastguard Worker 0x0c04: "zh_HK", # Chinese - Hong Kong S.A.R. 1543*cda5da8dSAndroid Build Coastguard Worker 0x1004: "zh_SG", # Chinese - Singapore 1544*cda5da8dSAndroid Build Coastguard Worker 0x1404: "zh_MO", # Chinese - Macao S.A.R. 1545*cda5da8dSAndroid Build Coastguard Worker 0x7c04: "zh_CHT",# Chinese - Traditional 1546*cda5da8dSAndroid Build Coastguard Worker 0x0483: "co_FR", # Corsican - France 1547*cda5da8dSAndroid Build Coastguard Worker 0x041a: "hr_HR", # Croatian 1548*cda5da8dSAndroid Build Coastguard Worker 0x101a: "hr_BA", # Croatian - Bosnia 1549*cda5da8dSAndroid Build Coastguard Worker 0x0405: "cs_CZ", # Czech 1550*cda5da8dSAndroid Build Coastguard Worker 0x0406: "da_DK", # Danish 1551*cda5da8dSAndroid Build Coastguard Worker 0x048c: "gbz_AF",# Dari - Afghanistan 1552*cda5da8dSAndroid Build Coastguard Worker 0x0465: "div_MV",# Divehi - Maldives 1553*cda5da8dSAndroid Build Coastguard Worker 0x0413: "nl_NL", # Dutch - The Netherlands 1554*cda5da8dSAndroid Build Coastguard Worker 0x0813: "nl_BE", # Dutch - Belgium 1555*cda5da8dSAndroid Build Coastguard Worker 0x0409: "en_US", # English - United States 1556*cda5da8dSAndroid Build Coastguard Worker 0x0809: "en_GB", # English - United Kingdom 1557*cda5da8dSAndroid Build Coastguard Worker 0x0c09: "en_AU", # English - Australia 1558*cda5da8dSAndroid Build Coastguard Worker 0x1009: "en_CA", # English - Canada 1559*cda5da8dSAndroid Build Coastguard Worker 0x1409: "en_NZ", # English - New Zealand 1560*cda5da8dSAndroid Build Coastguard Worker 0x1809: "en_IE", # English - Ireland 1561*cda5da8dSAndroid Build Coastguard Worker 0x1c09: "en_ZA", # English - South Africa 1562*cda5da8dSAndroid Build Coastguard Worker 0x2009: "en_JA", # English - Jamaica 1563*cda5da8dSAndroid Build Coastguard Worker 0x2409: "en_CB", # English - Caribbean 1564*cda5da8dSAndroid Build Coastguard Worker 0x2809: "en_BZ", # English - Belize 1565*cda5da8dSAndroid Build Coastguard Worker 0x2c09: "en_TT", # English - Trinidad 1566*cda5da8dSAndroid Build Coastguard Worker 0x3009: "en_ZW", # English - Zimbabwe 1567*cda5da8dSAndroid Build Coastguard Worker 0x3409: "en_PH", # English - Philippines 1568*cda5da8dSAndroid Build Coastguard Worker 0x4009: "en_IN", # English - India 1569*cda5da8dSAndroid Build Coastguard Worker 0x4409: "en_MY", # English - Malaysia 1570*cda5da8dSAndroid Build Coastguard Worker 0x4809: "en_IN", # English - Singapore 1571*cda5da8dSAndroid Build Coastguard Worker 0x0425: "et_EE", # Estonian 1572*cda5da8dSAndroid Build Coastguard Worker 0x0438: "fo_FO", # Faroese 1573*cda5da8dSAndroid Build Coastguard Worker 0x0464: "fil_PH",# Filipino 1574*cda5da8dSAndroid Build Coastguard Worker 0x040b: "fi_FI", # Finnish 1575*cda5da8dSAndroid Build Coastguard Worker 0x040c: "fr_FR", # French - France 1576*cda5da8dSAndroid Build Coastguard Worker 0x080c: "fr_BE", # French - Belgium 1577*cda5da8dSAndroid Build Coastguard Worker 0x0c0c: "fr_CA", # French - Canada 1578*cda5da8dSAndroid Build Coastguard Worker 0x100c: "fr_CH", # French - Switzerland 1579*cda5da8dSAndroid Build Coastguard Worker 0x140c: "fr_LU", # French - Luxembourg 1580*cda5da8dSAndroid Build Coastguard Worker 0x180c: "fr_MC", # French - Monaco 1581*cda5da8dSAndroid Build Coastguard Worker 0x0462: "fy_NL", # Frisian - Netherlands 1582*cda5da8dSAndroid Build Coastguard Worker 0x0456: "gl_ES", # Galician 1583*cda5da8dSAndroid Build Coastguard Worker 0x0437: "ka_GE", # Georgian 1584*cda5da8dSAndroid Build Coastguard Worker 0x0407: "de_DE", # German - Germany 1585*cda5da8dSAndroid Build Coastguard Worker 0x0807: "de_CH", # German - Switzerland 1586*cda5da8dSAndroid Build Coastguard Worker 0x0c07: "de_AT", # German - Austria 1587*cda5da8dSAndroid Build Coastguard Worker 0x1007: "de_LU", # German - Luxembourg 1588*cda5da8dSAndroid Build Coastguard Worker 0x1407: "de_LI", # German - Liechtenstein 1589*cda5da8dSAndroid Build Coastguard Worker 0x0408: "el_GR", # Greek 1590*cda5da8dSAndroid Build Coastguard Worker 0x046f: "kl_GL", # Greenlandic - Greenland 1591*cda5da8dSAndroid Build Coastguard Worker 0x0447: "gu_IN", # Gujarati 1592*cda5da8dSAndroid Build Coastguard Worker 0x0468: "ha_NG", # Hausa - Latin 1593*cda5da8dSAndroid Build Coastguard Worker 0x040d: "he_IL", # Hebrew 1594*cda5da8dSAndroid Build Coastguard Worker 0x0439: "hi_IN", # Hindi 1595*cda5da8dSAndroid Build Coastguard Worker 0x040e: "hu_HU", # Hungarian 1596*cda5da8dSAndroid Build Coastguard Worker 0x040f: "is_IS", # Icelandic 1597*cda5da8dSAndroid Build Coastguard Worker 0x0421: "id_ID", # Indonesian 1598*cda5da8dSAndroid Build Coastguard Worker 0x045d: "iu_CA", # Inuktitut - Syllabics 1599*cda5da8dSAndroid Build Coastguard Worker 0x085d: "iu_CA", # Inuktitut - Latin 1600*cda5da8dSAndroid Build Coastguard Worker 0x083c: "ga_IE", # Irish - Ireland 1601*cda5da8dSAndroid Build Coastguard Worker 0x0410: "it_IT", # Italian - Italy 1602*cda5da8dSAndroid Build Coastguard Worker 0x0810: "it_CH", # Italian - Switzerland 1603*cda5da8dSAndroid Build Coastguard Worker 0x0411: "ja_JP", # Japanese 1604*cda5da8dSAndroid Build Coastguard Worker 0x044b: "kn_IN", # Kannada - India 1605*cda5da8dSAndroid Build Coastguard Worker 0x043f: "kk_KZ", # Kazakh 1606*cda5da8dSAndroid Build Coastguard Worker 0x0453: "kh_KH", # Khmer - Cambodia 1607*cda5da8dSAndroid Build Coastguard Worker 0x0486: "qut_GT",# K'iche - Guatemala 1608*cda5da8dSAndroid Build Coastguard Worker 0x0487: "rw_RW", # Kinyarwanda - Rwanda 1609*cda5da8dSAndroid Build Coastguard Worker 0x0457: "kok_IN",# Konkani 1610*cda5da8dSAndroid Build Coastguard Worker 0x0412: "ko_KR", # Korean 1611*cda5da8dSAndroid Build Coastguard Worker 0x0440: "ky_KG", # Kyrgyz 1612*cda5da8dSAndroid Build Coastguard Worker 0x0454: "lo_LA", # Lao - Lao PDR 1613*cda5da8dSAndroid Build Coastguard Worker 0x0426: "lv_LV", # Latvian 1614*cda5da8dSAndroid Build Coastguard Worker 0x0427: "lt_LT", # Lithuanian 1615*cda5da8dSAndroid Build Coastguard Worker 0x082e: "dsb_DE",# Lower Sorbian - Germany 1616*cda5da8dSAndroid Build Coastguard Worker 0x046e: "lb_LU", # Luxembourgish 1617*cda5da8dSAndroid Build Coastguard Worker 0x042f: "mk_MK", # FYROM Macedonian 1618*cda5da8dSAndroid Build Coastguard Worker 0x043e: "ms_MY", # Malay - Malaysia 1619*cda5da8dSAndroid Build Coastguard Worker 0x083e: "ms_BN", # Malay - Brunei Darussalam 1620*cda5da8dSAndroid Build Coastguard Worker 0x044c: "ml_IN", # Malayalam - India 1621*cda5da8dSAndroid Build Coastguard Worker 0x043a: "mt_MT", # Maltese 1622*cda5da8dSAndroid Build Coastguard Worker 0x0481: "mi_NZ", # Maori 1623*cda5da8dSAndroid Build Coastguard Worker 0x047a: "arn_CL",# Mapudungun 1624*cda5da8dSAndroid Build Coastguard Worker 0x044e: "mr_IN", # Marathi 1625*cda5da8dSAndroid Build Coastguard Worker 0x047c: "moh_CA",# Mohawk - Canada 1626*cda5da8dSAndroid Build Coastguard Worker 0x0450: "mn_MN", # Mongolian - Cyrillic 1627*cda5da8dSAndroid Build Coastguard Worker 0x0850: "mn_CN", # Mongolian - PRC 1628*cda5da8dSAndroid Build Coastguard Worker 0x0461: "ne_NP", # Nepali 1629*cda5da8dSAndroid Build Coastguard Worker 0x0414: "nb_NO", # Norwegian - Bokmal 1630*cda5da8dSAndroid Build Coastguard Worker 0x0814: "nn_NO", # Norwegian - Nynorsk 1631*cda5da8dSAndroid Build Coastguard Worker 0x0482: "oc_FR", # Occitan - France 1632*cda5da8dSAndroid Build Coastguard Worker 0x0448: "or_IN", # Oriya - India 1633*cda5da8dSAndroid Build Coastguard Worker 0x0463: "ps_AF", # Pashto - Afghanistan 1634*cda5da8dSAndroid Build Coastguard Worker 0x0429: "fa_IR", # Persian 1635*cda5da8dSAndroid Build Coastguard Worker 0x0415: "pl_PL", # Polish 1636*cda5da8dSAndroid Build Coastguard Worker 0x0416: "pt_BR", # Portuguese - Brazil 1637*cda5da8dSAndroid Build Coastguard Worker 0x0816: "pt_PT", # Portuguese - Portugal 1638*cda5da8dSAndroid Build Coastguard Worker 0x0446: "pa_IN", # Punjabi 1639*cda5da8dSAndroid Build Coastguard Worker 0x046b: "quz_BO",# Quechua (Bolivia) 1640*cda5da8dSAndroid Build Coastguard Worker 0x086b: "quz_EC",# Quechua (Ecuador) 1641*cda5da8dSAndroid Build Coastguard Worker 0x0c6b: "quz_PE",# Quechua (Peru) 1642*cda5da8dSAndroid Build Coastguard Worker 0x0418: "ro_RO", # Romanian - Romania 1643*cda5da8dSAndroid Build Coastguard Worker 0x0417: "rm_CH", # Romansh 1644*cda5da8dSAndroid Build Coastguard Worker 0x0419: "ru_RU", # Russian 1645*cda5da8dSAndroid Build Coastguard Worker 0x243b: "smn_FI",# Sami Finland 1646*cda5da8dSAndroid Build Coastguard Worker 0x103b: "smj_NO",# Sami Norway 1647*cda5da8dSAndroid Build Coastguard Worker 0x143b: "smj_SE",# Sami Sweden 1648*cda5da8dSAndroid Build Coastguard Worker 0x043b: "se_NO", # Sami Northern Norway 1649*cda5da8dSAndroid Build Coastguard Worker 0x083b: "se_SE", # Sami Northern Sweden 1650*cda5da8dSAndroid Build Coastguard Worker 0x0c3b: "se_FI", # Sami Northern Finland 1651*cda5da8dSAndroid Build Coastguard Worker 0x203b: "sms_FI",# Sami Skolt 1652*cda5da8dSAndroid Build Coastguard Worker 0x183b: "sma_NO",# Sami Southern Norway 1653*cda5da8dSAndroid Build Coastguard Worker 0x1c3b: "sma_SE",# Sami Southern Sweden 1654*cda5da8dSAndroid Build Coastguard Worker 0x044f: "sa_IN", # Sanskrit 1655*cda5da8dSAndroid Build Coastguard Worker 0x0c1a: "sr_SP", # Serbian - Cyrillic 1656*cda5da8dSAndroid Build Coastguard Worker 0x1c1a: "sr_BA", # Serbian - Bosnia Cyrillic 1657*cda5da8dSAndroid Build Coastguard Worker 0x081a: "sr_SP", # Serbian - Latin 1658*cda5da8dSAndroid Build Coastguard Worker 0x181a: "sr_BA", # Serbian - Bosnia Latin 1659*cda5da8dSAndroid Build Coastguard Worker 0x045b: "si_LK", # Sinhala - Sri Lanka 1660*cda5da8dSAndroid Build Coastguard Worker 0x046c: "ns_ZA", # Northern Sotho 1661*cda5da8dSAndroid Build Coastguard Worker 0x0432: "tn_ZA", # Setswana - Southern Africa 1662*cda5da8dSAndroid Build Coastguard Worker 0x041b: "sk_SK", # Slovak 1663*cda5da8dSAndroid Build Coastguard Worker 0x0424: "sl_SI", # Slovenian 1664*cda5da8dSAndroid Build Coastguard Worker 0x040a: "es_ES", # Spanish - Spain 1665*cda5da8dSAndroid Build Coastguard Worker 0x080a: "es_MX", # Spanish - Mexico 1666*cda5da8dSAndroid Build Coastguard Worker 0x0c0a: "es_ES", # Spanish - Spain (Modern) 1667*cda5da8dSAndroid Build Coastguard Worker 0x100a: "es_GT", # Spanish - Guatemala 1668*cda5da8dSAndroid Build Coastguard Worker 0x140a: "es_CR", # Spanish - Costa Rica 1669*cda5da8dSAndroid Build Coastguard Worker 0x180a: "es_PA", # Spanish - Panama 1670*cda5da8dSAndroid Build Coastguard Worker 0x1c0a: "es_DO", # Spanish - Dominican Republic 1671*cda5da8dSAndroid Build Coastguard Worker 0x200a: "es_VE", # Spanish - Venezuela 1672*cda5da8dSAndroid Build Coastguard Worker 0x240a: "es_CO", # Spanish - Colombia 1673*cda5da8dSAndroid Build Coastguard Worker 0x280a: "es_PE", # Spanish - Peru 1674*cda5da8dSAndroid Build Coastguard Worker 0x2c0a: "es_AR", # Spanish - Argentina 1675*cda5da8dSAndroid Build Coastguard Worker 0x300a: "es_EC", # Spanish - Ecuador 1676*cda5da8dSAndroid Build Coastguard Worker 0x340a: "es_CL", # Spanish - Chile 1677*cda5da8dSAndroid Build Coastguard Worker 0x380a: "es_UR", # Spanish - Uruguay 1678*cda5da8dSAndroid Build Coastguard Worker 0x3c0a: "es_PY", # Spanish - Paraguay 1679*cda5da8dSAndroid Build Coastguard Worker 0x400a: "es_BO", # Spanish - Bolivia 1680*cda5da8dSAndroid Build Coastguard Worker 0x440a: "es_SV", # Spanish - El Salvador 1681*cda5da8dSAndroid Build Coastguard Worker 0x480a: "es_HN", # Spanish - Honduras 1682*cda5da8dSAndroid Build Coastguard Worker 0x4c0a: "es_NI", # Spanish - Nicaragua 1683*cda5da8dSAndroid Build Coastguard Worker 0x500a: "es_PR", # Spanish - Puerto Rico 1684*cda5da8dSAndroid Build Coastguard Worker 0x540a: "es_US", # Spanish - United States 1685*cda5da8dSAndroid Build Coastguard Worker# 0x0430: "", # Sutu - Not supported 1686*cda5da8dSAndroid Build Coastguard Worker 0x0441: "sw_KE", # Swahili 1687*cda5da8dSAndroid Build Coastguard Worker 0x041d: "sv_SE", # Swedish - Sweden 1688*cda5da8dSAndroid Build Coastguard Worker 0x081d: "sv_FI", # Swedish - Finland 1689*cda5da8dSAndroid Build Coastguard Worker 0x045a: "syr_SY",# Syriac 1690*cda5da8dSAndroid Build Coastguard Worker 0x0428: "tg_TJ", # Tajik - Cyrillic 1691*cda5da8dSAndroid Build Coastguard Worker 0x085f: "tmz_DZ",# Tamazight - Latin 1692*cda5da8dSAndroid Build Coastguard Worker 0x0449: "ta_IN", # Tamil 1693*cda5da8dSAndroid Build Coastguard Worker 0x0444: "tt_RU", # Tatar 1694*cda5da8dSAndroid Build Coastguard Worker 0x044a: "te_IN", # Telugu 1695*cda5da8dSAndroid Build Coastguard Worker 0x041e: "th_TH", # Thai 1696*cda5da8dSAndroid Build Coastguard Worker 0x0851: "bo_BT", # Tibetan - Bhutan 1697*cda5da8dSAndroid Build Coastguard Worker 0x0451: "bo_CN", # Tibetan - PRC 1698*cda5da8dSAndroid Build Coastguard Worker 0x041f: "tr_TR", # Turkish 1699*cda5da8dSAndroid Build Coastguard Worker 0x0442: "tk_TM", # Turkmen - Cyrillic 1700*cda5da8dSAndroid Build Coastguard Worker 0x0480: "ug_CN", # Uighur - Arabic 1701*cda5da8dSAndroid Build Coastguard Worker 0x0422: "uk_UA", # Ukrainian 1702*cda5da8dSAndroid Build Coastguard Worker 0x042e: "wen_DE",# Upper Sorbian - Germany 1703*cda5da8dSAndroid Build Coastguard Worker 0x0420: "ur_PK", # Urdu 1704*cda5da8dSAndroid Build Coastguard Worker 0x0820: "ur_IN", # Urdu - India 1705*cda5da8dSAndroid Build Coastguard Worker 0x0443: "uz_UZ", # Uzbek - Latin 1706*cda5da8dSAndroid Build Coastguard Worker 0x0843: "uz_UZ", # Uzbek - Cyrillic 1707*cda5da8dSAndroid Build Coastguard Worker 0x042a: "vi_VN", # Vietnamese 1708*cda5da8dSAndroid Build Coastguard Worker 0x0452: "cy_GB", # Welsh 1709*cda5da8dSAndroid Build Coastguard Worker 0x0488: "wo_SN", # Wolof - Senegal 1710*cda5da8dSAndroid Build Coastguard Worker 0x0434: "xh_ZA", # Xhosa - South Africa 1711*cda5da8dSAndroid Build Coastguard Worker 0x0485: "sah_RU",# Yakut - Cyrillic 1712*cda5da8dSAndroid Build Coastguard Worker 0x0478: "ii_CN", # Yi - PRC 1713*cda5da8dSAndroid Build Coastguard Worker 0x046a: "yo_NG", # Yoruba - Nigeria 1714*cda5da8dSAndroid Build Coastguard Worker 0x0435: "zu_ZA", # Zulu 1715*cda5da8dSAndroid Build Coastguard Worker} 1716*cda5da8dSAndroid Build Coastguard Worker 1717*cda5da8dSAndroid Build Coastguard Workerdef _print_locale(): 1718*cda5da8dSAndroid Build Coastguard Worker 1719*cda5da8dSAndroid Build Coastguard Worker """ Test function. 1720*cda5da8dSAndroid Build Coastguard Worker """ 1721*cda5da8dSAndroid Build Coastguard Worker categories = {} 1722*cda5da8dSAndroid Build Coastguard Worker def _init_categories(categories=categories): 1723*cda5da8dSAndroid Build Coastguard Worker for k,v in globals().items(): 1724*cda5da8dSAndroid Build Coastguard Worker if k[:3] == 'LC_': 1725*cda5da8dSAndroid Build Coastguard Worker categories[k] = v 1726*cda5da8dSAndroid Build Coastguard Worker _init_categories() 1727*cda5da8dSAndroid Build Coastguard Worker del categories['LC_ALL'] 1728*cda5da8dSAndroid Build Coastguard Worker 1729*cda5da8dSAndroid Build Coastguard Worker print('Locale defaults as determined by getdefaultlocale():') 1730*cda5da8dSAndroid Build Coastguard Worker print('-'*72) 1731*cda5da8dSAndroid Build Coastguard Worker lang, enc = getdefaultlocale() 1732*cda5da8dSAndroid Build Coastguard Worker print('Language: ', lang or '(undefined)') 1733*cda5da8dSAndroid Build Coastguard Worker print('Encoding: ', enc or '(undefined)') 1734*cda5da8dSAndroid Build Coastguard Worker print() 1735*cda5da8dSAndroid Build Coastguard Worker 1736*cda5da8dSAndroid Build Coastguard Worker print('Locale settings on startup:') 1737*cda5da8dSAndroid Build Coastguard Worker print('-'*72) 1738*cda5da8dSAndroid Build Coastguard Worker for name,category in categories.items(): 1739*cda5da8dSAndroid Build Coastguard Worker print(name, '...') 1740*cda5da8dSAndroid Build Coastguard Worker lang, enc = getlocale(category) 1741*cda5da8dSAndroid Build Coastguard Worker print(' Language: ', lang or '(undefined)') 1742*cda5da8dSAndroid Build Coastguard Worker print(' Encoding: ', enc or '(undefined)') 1743*cda5da8dSAndroid Build Coastguard Worker print() 1744*cda5da8dSAndroid Build Coastguard Worker 1745*cda5da8dSAndroid Build Coastguard Worker print() 1746*cda5da8dSAndroid Build Coastguard Worker print('Locale settings after calling resetlocale():') 1747*cda5da8dSAndroid Build Coastguard Worker print('-'*72) 1748*cda5da8dSAndroid Build Coastguard Worker resetlocale() 1749*cda5da8dSAndroid Build Coastguard Worker for name,category in categories.items(): 1750*cda5da8dSAndroid Build Coastguard Worker print(name, '...') 1751*cda5da8dSAndroid Build Coastguard Worker lang, enc = getlocale(category) 1752*cda5da8dSAndroid Build Coastguard Worker print(' Language: ', lang or '(undefined)') 1753*cda5da8dSAndroid Build Coastguard Worker print(' Encoding: ', enc or '(undefined)') 1754*cda5da8dSAndroid Build Coastguard Worker print() 1755*cda5da8dSAndroid Build Coastguard Worker 1756*cda5da8dSAndroid Build Coastguard Worker try: 1757*cda5da8dSAndroid Build Coastguard Worker setlocale(LC_ALL, "") 1758*cda5da8dSAndroid Build Coastguard Worker except: 1759*cda5da8dSAndroid Build Coastguard Worker print('NOTE:') 1760*cda5da8dSAndroid Build Coastguard Worker print('setlocale(LC_ALL, "") does not support the default locale') 1761*cda5da8dSAndroid Build Coastguard Worker print('given in the OS environment variables.') 1762*cda5da8dSAndroid Build Coastguard Worker else: 1763*cda5da8dSAndroid Build Coastguard Worker print() 1764*cda5da8dSAndroid Build Coastguard Worker print('Locale settings after calling setlocale(LC_ALL, ""):') 1765*cda5da8dSAndroid Build Coastguard Worker print('-'*72) 1766*cda5da8dSAndroid Build Coastguard Worker for name,category in categories.items(): 1767*cda5da8dSAndroid Build Coastguard Worker print(name, '...') 1768*cda5da8dSAndroid Build Coastguard Worker lang, enc = getlocale(category) 1769*cda5da8dSAndroid Build Coastguard Worker print(' Language: ', lang or '(undefined)') 1770*cda5da8dSAndroid Build Coastguard Worker print(' Encoding: ', enc or '(undefined)') 1771*cda5da8dSAndroid Build Coastguard Worker print() 1772*cda5da8dSAndroid Build Coastguard Worker 1773*cda5da8dSAndroid Build Coastguard Worker### 1774*cda5da8dSAndroid Build Coastguard Worker 1775*cda5da8dSAndroid Build Coastguard Workertry: 1776*cda5da8dSAndroid Build Coastguard Worker LC_MESSAGES 1777*cda5da8dSAndroid Build Coastguard Workerexcept NameError: 1778*cda5da8dSAndroid Build Coastguard Worker pass 1779*cda5da8dSAndroid Build Coastguard Workerelse: 1780*cda5da8dSAndroid Build Coastguard Worker __all__.append("LC_MESSAGES") 1781*cda5da8dSAndroid Build Coastguard Worker 1782*cda5da8dSAndroid Build Coastguard Workerif __name__=='__main__': 1783*cda5da8dSAndroid Build Coastguard Worker print('Locale aliasing:') 1784*cda5da8dSAndroid Build Coastguard Worker print() 1785*cda5da8dSAndroid Build Coastguard Worker _print_locale() 1786*cda5da8dSAndroid Build Coastguard Worker print() 1787*cda5da8dSAndroid Build Coastguard Worker print('Number formatting:') 1788*cda5da8dSAndroid Build Coastguard Worker print() 1789*cda5da8dSAndroid Build Coastguard Worker _test() 1790