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