home *** CD-ROM | disk | FTP | other *** search
/ Freelog 116 / FreelogNo116-JuilletSeptembre2013.iso / GestionFichiers / metamorphose / metamorphose2_0.8.2_setup.exe / metamorphose2.exe / locale.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2011-01-12  |  42KB  |  1,521 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. import sys
  5. import encodings
  6. import encodings.aliases as encodings
  7. import functools
  8. __all__ = [
  9.     'getlocale',
  10.     'getdefaultlocale',
  11.     'getpreferredencoding',
  12.     'Error',
  13.     'setlocale',
  14.     'resetlocale',
  15.     'localeconv',
  16.     'strcoll',
  17.     'strxfrm',
  18.     'str',
  19.     'atof',
  20.     'atoi',
  21.     'format',
  22.     'format_string',
  23.     'currency',
  24.     'normalize',
  25.     'LC_CTYPE',
  26.     'LC_COLLATE',
  27.     'LC_TIME',
  28.     'LC_MONETARY',
  29.     'LC_NUMERIC',
  30.     'LC_ALL',
  31.     'CHAR_MAX']
  32.  
  33. try:
  34.     from _locale import *
  35. except ImportError:
  36.     CHAR_MAX = 127
  37.     LC_ALL = 6
  38.     LC_COLLATE = 3
  39.     LC_CTYPE = 0
  40.     LC_MESSAGES = 5
  41.     LC_MONETARY = 4
  42.     LC_NUMERIC = 1
  43.     LC_TIME = 2
  44.     Error = ValueError
  45.     
  46.     def localeconv():
  47.         return {
  48.             'grouping': [
  49.                 127],
  50.             'currency_symbol': '',
  51.             'n_sign_posn': 127,
  52.             'p_cs_precedes': 127,
  53.             'n_cs_precedes': 127,
  54.             'mon_grouping': [],
  55.             'n_sep_by_space': 127,
  56.             'decimal_point': '.',
  57.             'negative_sign': '',
  58.             'positive_sign': '',
  59.             'p_sep_by_space': 127,
  60.             'int_curr_symbol': '',
  61.             'p_sign_posn': 127,
  62.             'thousands_sep': '',
  63.             'mon_thousands_sep': '',
  64.             'frac_digits': 127,
  65.             'mon_decimal_point': '',
  66.             'int_frac_digits': 127 }
  67.  
  68.     
  69.     def setlocale(category, value = None):
  70.         if value not in (None, '', 'C'):
  71.             raise Error, '_locale emulation only supports "C" locale'
  72.         value not in (None, '', 'C')
  73.         return 'C'
  74.  
  75.     
  76.     def strcoll(a, b):
  77.         return cmp(a, b)
  78.  
  79.     
  80.     def strxfrm(s):
  81.         return s
  82.  
  83.  
  84. _localeconv = localeconv
  85. _override_localeconv = { }
  86.  
  87. def localeconv():
  88.     d = _localeconv()
  89.     if _override_localeconv:
  90.         d.update(_override_localeconv)
  91.     
  92.     return d
  93.  
  94. localeconv = functools.wraps(_localeconv)(localeconv)
  95.  
  96. def _grouping_intervals(grouping):
  97.     for interval in grouping:
  98.         if interval == CHAR_MAX:
  99.             return None
  100.         yield interval
  101.         None if interval == 0 else interval == CHAR_MAX
  102.         last_interval = interval
  103.     
  104.  
  105.  
  106. def _group(s, monetary = False):
  107.     conv = localeconv()
  108.     if not monetary or 'mon_thousands_sep':
  109.         pass
  110.     thousands_sep = conv['thousands_sep']
  111.     if not monetary or 'mon_grouping':
  112.         pass
  113.     grouping = conv['grouping']
  114.     if not grouping:
  115.         return (s, 0)
  116.     result = ''
  117.     seps = 0
  118.     if s[-1] == ' ':
  119.         stripped = s.rstrip()
  120.         right_spaces = s[len(stripped):]
  121.         s = stripped
  122.     else:
  123.         right_spaces = ''
  124.     left_spaces = ''
  125.     groups = []
  126.     for interval in _grouping_intervals(grouping):
  127.         if not s or s[-1] not in '0123456789':
  128.             left_spaces = s
  129.             s = ''
  130.             break
  131.         
  132.         groups.append(s[-interval:])
  133.         s = s[:-interval]
  134.     
  135.     if s:
  136.         groups.append(s)
  137.     
  138.     groups.reverse()
  139.     return (left_spaces + thousands_sep.join(groups) + right_spaces, len(thousands_sep) * (len(groups) - 1))
  140.  
  141.  
  142. def _strip_padding(s, amount):
  143.     lpos = 0
  144.     while amount and s[lpos] == ' ':
  145.         lpos += 1
  146.         amount -= 1
  147.     rpos = len(s) - 1
  148.     while amount and s[rpos] == ' ':
  149.         rpos -= 1
  150.         amount -= 1
  151.     return s[lpos:rpos + 1]
  152.  
  153.  
  154. def format(percent, value, grouping = False, monetary = False, *additional):
  155.     if percent[0] != '%':
  156.         raise ValueError('format() must be given exactly one %char format specifier')
  157.     percent[0] != '%'
  158.     if additional:
  159.         formatted = percent % ((value,) + additional)
  160.     else:
  161.         formatted = percent % value
  162.     if percent[-1] in 'eEfFgG':
  163.         seps = 0
  164.         parts = formatted.split('.')
  165.         if grouping:
  166.             (parts[0], seps) = _group(parts[0], monetary = monetary)
  167.         
  168.         if not monetary or 'mon_decimal_point':
  169.             pass
  170.         decimal_point = localeconv()['decimal_point']
  171.         formatted = decimal_point.join(parts)
  172.         if seps:
  173.             formatted = _strip_padding(formatted, seps)
  174.         
  175.     elif percent[-1] in 'diu':
  176.         seps = 0
  177.         if grouping:
  178.             (formatted, seps) = _group(formatted, monetary = monetary)
  179.         
  180.         if seps:
  181.             formatted = _strip_padding(formatted, seps)
  182.         
  183.     
  184.     return formatted
  185.  
  186. import re
  187. import operator
  188. _percent_re = re.compile('%(?:\\((?P<key>.*?)\\))?(?P<modifiers>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')
  189.  
  190. def format_string(f, val, grouping = False):
  191.     percents = list(_percent_re.finditer(f))
  192.     new_f = _percent_re.sub('%s', f)
  193.     if isinstance(val, tuple):
  194.         new_val = list(val)
  195.         i = 0
  196.         for perc in percents:
  197.             starcount = perc.group('modifiers').count('*')
  198.             new_val[i] = format(perc.group(), new_val[i], grouping, False, *new_val[i + 1:i + 1 + starcount])
  199.             del new_val[i + 1:i + 1 + starcount]
  200.             i += 1 + starcount
  201.         
  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.         
  208.     else:
  209.         val = format(percents[0].group(), val, grouping)
  210.     return new_f % val
  211.  
  212.  
  213. def currency(val, symbol = True, grouping = False, international = False):
  214.     conv = localeconv()
  215.     if not international or 'int_frac_digits':
  216.         pass
  217.     digits = conv['frac_digits']
  218.     if digits == 127:
  219.         raise ValueError("Currency formatting is not possible using the 'C' locale.")
  220.     digits == 127
  221.     s = format('%%.%if' % digits, abs(val), grouping, monetary = True)
  222.     s = '<' + s + '>'
  223.     if symbol:
  224.         if not international or 'int_curr_symbol':
  225.             pass
  226.         smb = conv['currency_symbol']
  227.         if not val < 0 or 'n_cs_precedes':
  228.             pass
  229.         precedes = conv['p_cs_precedes']
  230.         if not val < 0 or 'n_sep_by_space':
  231.             pass
  232.         separated = conv['p_sep_by_space']
  233.         s = None + s if precedes else '' + smb
  234.     
  235.     if not val < 0 or 'n_sign_posn':
  236.         pass
  237.     sign_pos = conv['p_sign_posn']
  238.     if not val < 0 or 'negative_sign':
  239.         pass
  240.     sign = conv['positive_sign']
  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.         s = sign + s
  253.     return s.replace('<', '').replace('>', '')
  254.  
  255.  
  256. def str(val):
  257.     return format('%.12g', val)
  258.  
  259.  
  260. def atof(string, func = float):
  261.     ts = localeconv()['thousands_sep']
  262.     if ts:
  263.         string = string.replace(ts, '')
  264.     
  265.     dd = localeconv()['decimal_point']
  266.     if dd:
  267.         string = string.replace(dd, '.')
  268.     
  269.     return func(string)
  270.  
  271.  
  272. def atoi(str):
  273.     return atof(str, int)
  274.  
  275.  
  276. def _test():
  277.     setlocale(LC_ALL, '')
  278.     s1 = format('%d', 123456789, 1)
  279.     print s1, 'is', atoi(s1)
  280.     s1 = str(3.14)
  281.     print s1, 'is', atof(s1)
  282.  
  283. _setlocale = setlocale
  284.  
  285. def normalize(localename):
  286.     fullname = localename.lower()
  287.     if ':' in fullname:
  288.         fullname = fullname.replace(':', '.')
  289.     
  290.     if '.' in fullname:
  291.         (langname, encoding) = fullname.split('.')[:2]
  292.         fullname = langname + '.' + encoding
  293.     else:
  294.         langname = fullname
  295.         encoding = ''
  296.     norm_encoding = encoding.replace('-', '')
  297.     norm_encoding = norm_encoding.replace('_', '')
  298.     lookup_name = langname + '.' + encoding
  299.     code = locale_alias.get(lookup_name, None)
  300.     if code is not None:
  301.         return code
  302.     code = locale_alias.get(langname, None)
  303.     if code is not None:
  304.         if '.' in code:
  305.             (langname, defenc) = code.split('.')
  306.         else:
  307.             langname = code
  308.             defenc = ''
  309.         if encoding:
  310.             norm_encoding = encodings.normalize_encoding(encoding)
  311.             norm_encoding = encodings.aliases.aliases.get(norm_encoding, norm_encoding)
  312.             encoding = locale_encoding_alias.get(norm_encoding, norm_encoding)
  313.         else:
  314.             encoding = defenc
  315.         if encoding:
  316.             return langname + '.' + encoding
  317.         return langname
  318.     code is not None
  319.     return localename
  320.  
  321.  
  322. def _parse_localename(localename):
  323.     code = normalize(localename)
  324.     if '@' in code:
  325.         (code, modifier) = code.split('@')
  326.         if modifier == 'euro' and '.' not in code:
  327.             return (code, 'iso-8859-15')
  328.     
  329.     if '.' in code:
  330.         return tuple(code.split('.')[:2])
  331.     if code == 'C':
  332.         return (None, None)
  333.     raise ValueError, 'unknown locale: %s' % localename
  334.  
  335.  
  336. def _build_localename(localetuple):
  337.     (language, encoding) = localetuple
  338.     if language is None:
  339.         language = 'C'
  340.     
  341.     if encoding is None:
  342.         return language
  343.     return language + '.' + encoding
  344.  
  345.  
  346. def getdefaultlocale(envvars = ('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')):
  347.     
  348.     try:
  349.         import _locale as _locale
  350.         (code, encoding) = _locale._getdefaultlocale()
  351.     except (ImportError, AttributeError):
  352.         pass
  353.  
  354.     if sys.platform == 'win32' and code and code[:2] == '0x':
  355.         code = windows_locale.get(int(code, 0))
  356.     
  357.     return (code, encoding)
  358.     import os as os
  359.     lookup = os.environ.get
  360.     for variable in envvars:
  361.         localename = lookup(variable, None)
  362.         if localename:
  363.             if variable == 'LANGUAGE':
  364.                 localename = localename.split(':')[0]
  365.             
  366.             break
  367.             continue
  368.     else:
  369.         localename = 'C'
  370.     return _parse_localename(localename)
  371.  
  372.  
  373. def getlocale(category = LC_CTYPE):
  374.     localename = _setlocale(category)
  375.     if category == LC_ALL and ';' in localename:
  376.         raise TypeError, 'category LC_ALL is not supported'
  377.     ';' in localename
  378.     return _parse_localename(localename)
  379.  
  380.  
  381. def setlocale(category, locale = None):
  382.     if locale and type(locale) is not type(''):
  383.         locale = normalize(_build_localename(locale))
  384.     
  385.     return _setlocale(category, locale)
  386.  
  387.  
  388. def resetlocale(category = LC_ALL):
  389.     _setlocale(category, _build_localename(getdefaultlocale()))
  390.  
  391. if sys.platform in ('win32', 'darwin', 'mac'):
  392.     
  393.     def getpreferredencoding(do_setlocale = True):
  394.         import _locale
  395.         return _locale._getdefaultlocale()[1]
  396.  
  397. else:
  398.     
  399.     try:
  400.         CODESET
  401.     except NameError:
  402.         
  403.         def getpreferredencoding(do_setlocale = True):
  404.             return getdefaultlocale()[1]
  405.  
  406.  
  407.     
  408.     def getpreferredencoding(do_setlocale = True):
  409.         if do_setlocale:
  410.             oldloc = setlocale(LC_CTYPE)
  411.             
  412.             try:
  413.                 setlocale(LC_CTYPE, '')
  414.             except Error:
  415.                 pass
  416.  
  417.             result = nl_langinfo(CODESET)
  418.             setlocale(LC_CTYPE, oldloc)
  419.             return result
  420.         return nl_langinfo(CODESET)
  421.  
  422. locale_encoding_alias = {
  423.     '437': 'C',
  424.     'c': 'C',
  425.     'en': 'ISO8859-1',
  426.     'jis': 'JIS7',
  427.     'jis7': 'JIS7',
  428.     'ajec': 'eucJP',
  429.     'ascii': 'ISO8859-1',
  430.     'latin_1': 'ISO8859-1',
  431.     'iso8859_1': 'ISO8859-1',
  432.     'iso8859_10': 'ISO8859-10',
  433.     'iso8859_11': 'ISO8859-11',
  434.     'iso8859_13': 'ISO8859-13',
  435.     'iso8859_14': 'ISO8859-14',
  436.     'iso8859_15': 'ISO8859-15',
  437.     'iso8859_2': 'ISO8859-2',
  438.     'iso8859_3': 'ISO8859-3',
  439.     'iso8859_4': 'ISO8859-4',
  440.     'iso8859_5': 'ISO8859-5',
  441.     'iso8859_6': 'ISO8859-6',
  442.     'iso8859_7': 'ISO8859-7',
  443.     'iso8859_8': 'ISO8859-8',
  444.     'iso8859_9': 'ISO8859-9',
  445.     'iso2022_jp': 'JIS7',
  446.     'shift_jis': 'SJIS',
  447.     'tactis': 'TACTIS',
  448.     'euc_jp': 'eucJP',
  449.     'euc_kr': 'eucKR',
  450.     'utf_8': 'UTF8',
  451.     'koi8_r': 'KOI8-R',
  452.     'koi8_u': 'KOI8-U' }
  453. locale_alias = {
  454.     'a3': 'a3_AZ.KOI8-C',
  455.     'a3_az': 'a3_AZ.KOI8-C',
  456.     'a3_az.koi8c': 'a3_AZ.KOI8-C',
  457.     'af': 'af_ZA.ISO8859-1',
  458.     'af_za': 'af_ZA.ISO8859-1',
  459.     'af_za.iso88591': 'af_ZA.ISO8859-1',
  460.     'am': 'am_ET.UTF-8',
  461.     'am_et': 'am_ET.UTF-8',
  462.     'american': 'en_US.ISO8859-1',
  463.     'american.iso88591': 'en_US.ISO8859-1',
  464.     'ar': 'ar_AA.ISO8859-6',
  465.     'ar_aa': 'ar_AA.ISO8859-6',
  466.     'ar_aa.iso88596': 'ar_AA.ISO8859-6',
  467.     'ar_ae': 'ar_AE.ISO8859-6',
  468.     'ar_ae.iso88596': 'ar_AE.ISO8859-6',
  469.     'ar_bh': 'ar_BH.ISO8859-6',
  470.     'ar_bh.iso88596': 'ar_BH.ISO8859-6',
  471.     'ar_dz': 'ar_DZ.ISO8859-6',
  472.     'ar_dz.iso88596': 'ar_DZ.ISO8859-6',
  473.     'ar_eg': 'ar_EG.ISO8859-6',
  474.     'ar_eg.iso88596': 'ar_EG.ISO8859-6',
  475.     'ar_iq': 'ar_IQ.ISO8859-6',
  476.     'ar_iq.iso88596': 'ar_IQ.ISO8859-6',
  477.     'ar_jo': 'ar_JO.ISO8859-6',
  478.     'ar_jo.iso88596': 'ar_JO.ISO8859-6',
  479.     'ar_kw': 'ar_KW.ISO8859-6',
  480.     'ar_kw.iso88596': 'ar_KW.ISO8859-6',
  481.     'ar_lb': 'ar_LB.ISO8859-6',
  482.     'ar_lb.iso88596': 'ar_LB.ISO8859-6',
  483.     'ar_ly': 'ar_LY.ISO8859-6',
  484.     'ar_ly.iso88596': 'ar_LY.ISO8859-6',
  485.     'ar_ma': 'ar_MA.ISO8859-6',
  486.     'ar_ma.iso88596': 'ar_MA.ISO8859-6',
  487.     'ar_om': 'ar_OM.ISO8859-6',
  488.     'ar_om.iso88596': 'ar_OM.ISO8859-6',
  489.     'ar_qa': 'ar_QA.ISO8859-6',
  490.     'ar_qa.iso88596': 'ar_QA.ISO8859-6',
  491.     'ar_sa': 'ar_SA.ISO8859-6',
  492.     'ar_sa.iso88596': 'ar_SA.ISO8859-6',
  493.     'ar_sd': 'ar_SD.ISO8859-6',
  494.     'ar_sd.iso88596': 'ar_SD.ISO8859-6',
  495.     'ar_sy': 'ar_SY.ISO8859-6',
  496.     'ar_sy.iso88596': 'ar_SY.ISO8859-6',
  497.     'ar_tn': 'ar_TN.ISO8859-6',
  498.     'ar_tn.iso88596': 'ar_TN.ISO8859-6',
  499.     'ar_ye': 'ar_YE.ISO8859-6',
  500.     'ar_ye.iso88596': 'ar_YE.ISO8859-6',
  501.     'arabic': 'ar_AA.ISO8859-6',
  502.     'arabic.iso88596': 'ar_AA.ISO8859-6',
  503.     'az': 'az_AZ.ISO8859-9E',
  504.     'az_az': 'az_AZ.ISO8859-9E',
  505.     'az_az.iso88599e': 'az_AZ.ISO8859-9E',
  506.     'be': 'be_BY.CP1251',
  507.     'be_by': 'be_BY.CP1251',
  508.     'be_by.cp1251': 'be_BY.CP1251',
  509.     'be_by.microsoftcp1251': 'be_BY.CP1251',
  510.     'bg': 'bg_BG.CP1251',
  511.     'bg_bg': 'bg_BG.CP1251',
  512.     'bg_bg.cp1251': 'bg_BG.CP1251',
  513.     'bg_bg.iso88595': 'bg_BG.ISO8859-5',
  514.     'bg_bg.koi8r': 'bg_BG.KOI8-R',
  515.     'bg_bg.microsoftcp1251': 'bg_BG.CP1251',
  516.     'bn_in': 'bn_IN.UTF-8',
  517.     'bokmal': 'nb_NO.ISO8859-1',
  518.     'bokm\xe5l': 'nb_NO.ISO8859-1',
  519.     'br': 'br_FR.ISO8859-1',
  520.     'br_fr': 'br_FR.ISO8859-1',
  521.     'br_fr.iso88591': 'br_FR.ISO8859-1',
  522.     'br_fr.iso885914': 'br_FR.ISO8859-14',
  523.     'br_fr.iso885915': 'br_FR.ISO8859-15',
  524.     'br_fr.iso885915@euro': 'br_FR.ISO8859-15',
  525.     'br_fr.utf8@euro': 'br_FR.UTF-8',
  526.     'br_fr@euro': 'br_FR.ISO8859-15',
  527.     'bs': 'bs_BA.ISO8859-2',
  528.     'bs_ba': 'bs_BA.ISO8859-2',
  529.     'bs_ba.iso88592': 'bs_BA.ISO8859-2',
  530.     'bulgarian': 'bg_BG.CP1251',
  531.     'c': 'C',
  532.     'c-french': 'fr_CA.ISO8859-1',
  533.     'c-french.iso88591': 'fr_CA.ISO8859-1',
  534.     'c.en': 'C',
  535.     'c.iso88591': 'en_US.ISO8859-1',
  536.     'c_c': 'C',
  537.     'c_c.c': 'C',
  538.     'ca': 'ca_ES.ISO8859-1',
  539.     'ca_es': 'ca_ES.ISO8859-1',
  540.     'ca_es.iso88591': 'ca_ES.ISO8859-1',
  541.     'ca_es.iso885915': 'ca_ES.ISO8859-15',
  542.     'ca_es.iso885915@euro': 'ca_ES.ISO8859-15',
  543.     'ca_es.utf8@euro': 'ca_ES.UTF-8',
  544.     'ca_es@euro': 'ca_ES.ISO8859-15',
  545.     'catalan': 'ca_ES.ISO8859-1',
  546.     'cextend': 'en_US.ISO8859-1',
  547.     'cextend.en': 'en_US.ISO8859-1',
  548.     'chinese-s': 'zh_CN.eucCN',
  549.     'chinese-t': 'zh_TW.eucTW',
  550.     'croatian': 'hr_HR.ISO8859-2',
  551.     'cs': 'cs_CZ.ISO8859-2',
  552.     'cs_cs': 'cs_CZ.ISO8859-2',
  553.     'cs_cs.iso88592': 'cs_CS.ISO8859-2',
  554.     'cs_cz': 'cs_CZ.ISO8859-2',
  555.     'cs_cz.iso88592': 'cs_CZ.ISO8859-2',
  556.     'cy': 'cy_GB.ISO8859-1',
  557.     'cy_gb': 'cy_GB.ISO8859-1',
  558.     'cy_gb.iso88591': 'cy_GB.ISO8859-1',
  559.     'cy_gb.iso885914': 'cy_GB.ISO8859-14',
  560.     'cy_gb.iso885915': 'cy_GB.ISO8859-15',
  561.     'cy_gb@euro': 'cy_GB.ISO8859-15',
  562.     'cz': 'cs_CZ.ISO8859-2',
  563.     'cz_cz': 'cs_CZ.ISO8859-2',
  564.     'czech': 'cs_CZ.ISO8859-2',
  565.     'da': 'da_DK.ISO8859-1',
  566.     'da_dk': 'da_DK.ISO8859-1',
  567.     'da_dk.88591': 'da_DK.ISO8859-1',
  568.     'da_dk.885915': 'da_DK.ISO8859-15',
  569.     'da_dk.iso88591': 'da_DK.ISO8859-1',
  570.     'da_dk.iso885915': 'da_DK.ISO8859-15',
  571.     'da_dk@euro': 'da_DK.ISO8859-15',
  572.     'danish': 'da_DK.ISO8859-1',
  573.     'danish.iso88591': 'da_DK.ISO8859-1',
  574.     'dansk': 'da_DK.ISO8859-1',
  575.     'de': 'de_DE.ISO8859-1',
  576.     'de_at': 'de_AT.ISO8859-1',
  577.     'de_at.iso88591': 'de_AT.ISO8859-1',
  578.     'de_at.iso885915': 'de_AT.ISO8859-15',
  579.     'de_at.iso885915@euro': 'de_AT.ISO8859-15',
  580.     'de_at.utf8@euro': 'de_AT.UTF-8',
  581.     'de_at@euro': 'de_AT.ISO8859-15',
  582.     'de_be': 'de_BE.ISO8859-1',
  583.     'de_be.iso88591': 'de_BE.ISO8859-1',
  584.     'de_be.iso885915': 'de_BE.ISO8859-15',
  585.     'de_be.iso885915@euro': 'de_BE.ISO8859-15',
  586.     'de_be.utf8@euro': 'de_BE.UTF-8',
  587.     'de_be@euro': 'de_BE.ISO8859-15',
  588.     'de_ch': 'de_CH.ISO8859-1',
  589.     'de_ch.iso88591': 'de_CH.ISO8859-1',
  590.     'de_ch.iso885915': 'de_CH.ISO8859-15',
  591.     'de_ch@euro': 'de_CH.ISO8859-15',
  592.     'de_de': 'de_DE.ISO8859-1',
  593.     'de_de.88591': 'de_DE.ISO8859-1',
  594.     'de_de.885915': 'de_DE.ISO8859-15',
  595.     'de_de.885915@euro': 'de_DE.ISO8859-15',
  596.     'de_de.iso88591': 'de_DE.ISO8859-1',
  597.     'de_de.iso885915': 'de_DE.ISO8859-15',
  598.     'de_de.iso885915@euro': 'de_DE.ISO8859-15',
  599.     'de_de.utf8@euro': 'de_DE.UTF-8',
  600.     'de_de@euro': 'de_DE.ISO8859-15',
  601.     'de_lu': 'de_LU.ISO8859-1',
  602.     'de_lu.iso88591': 'de_LU.ISO8859-1',
  603.     'de_lu.iso885915': 'de_LU.ISO8859-15',
  604.     'de_lu.iso885915@euro': 'de_LU.ISO8859-15',
  605.     'de_lu.utf8@euro': 'de_LU.UTF-8',
  606.     'de_lu@euro': 'de_LU.ISO8859-15',
  607.     'deutsch': 'de_DE.ISO8859-1',
  608.     'dutch': 'nl_NL.ISO8859-1',
  609.     'dutch.iso88591': 'nl_BE.ISO8859-1',
  610.     'ee': 'ee_EE.ISO8859-4',
  611.     'ee_ee': 'ee_EE.ISO8859-4',
  612.     'ee_ee.iso88594': 'ee_EE.ISO8859-4',
  613.     'eesti': 'et_EE.ISO8859-1',
  614.     'el': 'el_GR.ISO8859-7',
  615.     'el_gr': 'el_GR.ISO8859-7',
  616.     'el_gr.iso88597': 'el_GR.ISO8859-7',
  617.     'el_gr@euro': 'el_GR.ISO8859-15',
  618.     'en': 'en_US.ISO8859-1',
  619.     'en.iso88591': 'en_US.ISO8859-1',
  620.     'en_au': 'en_AU.ISO8859-1',
  621.     'en_au.iso88591': 'en_AU.ISO8859-1',
  622.     'en_be': 'en_BE.ISO8859-1',
  623.     'en_be@euro': 'en_BE.ISO8859-15',
  624.     'en_bw': 'en_BW.ISO8859-1',
  625.     'en_bw.iso88591': 'en_BW.ISO8859-1',
  626.     'en_ca': 'en_CA.ISO8859-1',
  627.     'en_ca.iso88591': 'en_CA.ISO8859-1',
  628.     'en_gb': 'en_GB.ISO8859-1',
  629.     'en_gb.88591': 'en_GB.ISO8859-1',
  630.     'en_gb.iso88591': 'en_GB.ISO8859-1',
  631.     'en_gb.iso885915': 'en_GB.ISO8859-15',
  632.     'en_gb@euro': 'en_GB.ISO8859-15',
  633.     'en_hk': 'en_HK.ISO8859-1',
  634.     'en_hk.iso88591': 'en_HK.ISO8859-1',
  635.     'en_ie': 'en_IE.ISO8859-1',
  636.     'en_ie.iso88591': 'en_IE.ISO8859-1',
  637.     'en_ie.iso885915': 'en_IE.ISO8859-15',
  638.     'en_ie.iso885915@euro': 'en_IE.ISO8859-15',
  639.     'en_ie.utf8@euro': 'en_IE.UTF-8',
  640.     'en_ie@euro': 'en_IE.ISO8859-15',
  641.     'en_in': 'en_IN.ISO8859-1',
  642.     'en_nz': 'en_NZ.ISO8859-1',
  643.     'en_nz.iso88591': 'en_NZ.ISO8859-1',
  644.     'en_ph': 'en_PH.ISO8859-1',
  645.     'en_ph.iso88591': 'en_PH.ISO8859-1',
  646.     'en_sg': 'en_SG.ISO8859-1',
  647.     'en_sg.iso88591': 'en_SG.ISO8859-1',
  648.     'en_uk': 'en_GB.ISO8859-1',
  649.     'en_us': 'en_US.ISO8859-1',
  650.     'en_us.88591': 'en_US.ISO8859-1',
  651.     'en_us.885915': 'en_US.ISO8859-15',
  652.     'en_us.iso88591': 'en_US.ISO8859-1',
  653.     'en_us.iso885915': 'en_US.ISO8859-15',
  654.     'en_us.iso885915@euro': 'en_US.ISO8859-15',
  655.     'en_us@euro': 'en_US.ISO8859-15',
  656.     'en_us@euro@euro': 'en_US.ISO8859-15',
  657.     'en_za': 'en_ZA.ISO8859-1',
  658.     'en_za.88591': 'en_ZA.ISO8859-1',
  659.     'en_za.iso88591': 'en_ZA.ISO8859-1',
  660.     'en_za.iso885915': 'en_ZA.ISO8859-15',
  661.     'en_za@euro': 'en_ZA.ISO8859-15',
  662.     'en_zw': 'en_ZW.ISO8859-1',
  663.     'en_zw.iso88591': 'en_ZW.ISO8859-1',
  664.     'eng_gb': 'en_GB.ISO8859-1',
  665.     'eng_gb.8859': 'en_GB.ISO8859-1',
  666.     'english': 'en_EN.ISO8859-1',
  667.     'english.iso88591': 'en_EN.ISO8859-1',
  668.     'english_uk': 'en_GB.ISO8859-1',
  669.     'english_uk.8859': 'en_GB.ISO8859-1',
  670.     'english_united-states': 'en_US.ISO8859-1',
  671.     'english_united-states.437': 'C',
  672.     'english_us': 'en_US.ISO8859-1',
  673.     'english_us.8859': 'en_US.ISO8859-1',
  674.     'english_us.ascii': 'en_US.ISO8859-1',
  675.     'eo': 'eo_XX.ISO8859-3',
  676.     'eo_eo': 'eo_EO.ISO8859-3',
  677.     'eo_eo.iso88593': 'eo_EO.ISO8859-3',
  678.     'eo_xx': 'eo_XX.ISO8859-3',
  679.     'eo_xx.iso88593': 'eo_XX.ISO8859-3',
  680.     'es': 'es_ES.ISO8859-1',
  681.     'es_ar': 'es_AR.ISO8859-1',
  682.     'es_ar.iso88591': 'es_AR.ISO8859-1',
  683.     'es_bo': 'es_BO.ISO8859-1',
  684.     'es_bo.iso88591': 'es_BO.ISO8859-1',
  685.     'es_cl': 'es_CL.ISO8859-1',
  686.     'es_cl.iso88591': 'es_CL.ISO8859-1',
  687.     'es_co': 'es_CO.ISO8859-1',
  688.     'es_co.iso88591': 'es_CO.ISO8859-1',
  689.     'es_cr': 'es_CR.ISO8859-1',
  690.     'es_cr.iso88591': 'es_CR.ISO8859-1',
  691.     'es_do': 'es_DO.ISO8859-1',
  692.     'es_do.iso88591': 'es_DO.ISO8859-1',
  693.     'es_ec': 'es_EC.ISO8859-1',
  694.     'es_ec.iso88591': 'es_EC.ISO8859-1',
  695.     'es_es': 'es_ES.ISO8859-1',
  696.     'es_es.88591': 'es_ES.ISO8859-1',
  697.     'es_es.iso88591': 'es_ES.ISO8859-1',
  698.     'es_es.iso885915': 'es_ES.ISO8859-15',
  699.     'es_es.iso885915@euro': 'es_ES.ISO8859-15',
  700.     'es_es.utf8@euro': 'es_ES.UTF-8',
  701.     'es_es@euro': 'es_ES.ISO8859-15',
  702.     'es_gt': 'es_GT.ISO8859-1',
  703.     'es_gt.iso88591': 'es_GT.ISO8859-1',
  704.     'es_hn': 'es_HN.ISO8859-1',
  705.     'es_hn.iso88591': 'es_HN.ISO8859-1',
  706.     'es_mx': 'es_MX.ISO8859-1',
  707.     'es_mx.iso88591': 'es_MX.ISO8859-1',
  708.     'es_ni': 'es_NI.ISO8859-1',
  709.     'es_ni.iso88591': 'es_NI.ISO8859-1',
  710.     'es_pa': 'es_PA.ISO8859-1',
  711.     'es_pa.iso88591': 'es_PA.ISO8859-1',
  712.     'es_pa.iso885915': 'es_PA.ISO8859-15',
  713.     'es_pa@euro': 'es_PA.ISO8859-15',
  714.     'es_pe': 'es_PE.ISO8859-1',
  715.     'es_pe.iso88591': 'es_PE.ISO8859-1',
  716.     'es_pe.iso885915': 'es_PE.ISO8859-15',
  717.     'es_pe@euro': 'es_PE.ISO8859-15',
  718.     'es_pr': 'es_PR.ISO8859-1',
  719.     'es_pr.iso88591': 'es_PR.ISO8859-1',
  720.     'es_py': 'es_PY.ISO8859-1',
  721.     'es_py.iso88591': 'es_PY.ISO8859-1',
  722.     'es_py.iso885915': 'es_PY.ISO8859-15',
  723.     'es_py@euro': 'es_PY.ISO8859-15',
  724.     'es_sv': 'es_SV.ISO8859-1',
  725.     'es_sv.iso88591': 'es_SV.ISO8859-1',
  726.     'es_sv.iso885915': 'es_SV.ISO8859-15',
  727.     'es_sv@euro': 'es_SV.ISO8859-15',
  728.     'es_us': 'es_US.ISO8859-1',
  729.     'es_us.iso88591': 'es_US.ISO8859-1',
  730.     'es_uy': 'es_UY.ISO8859-1',
  731.     'es_uy.iso88591': 'es_UY.ISO8859-1',
  732.     'es_uy.iso885915': 'es_UY.ISO8859-15',
  733.     'es_uy@euro': 'es_UY.ISO8859-15',
  734.     'es_ve': 'es_VE.ISO8859-1',
  735.     'es_ve.iso88591': 'es_VE.ISO8859-1',
  736.     'es_ve.iso885915': 'es_VE.ISO8859-15',
  737.     'es_ve@euro': 'es_VE.ISO8859-15',
  738.     'estonian': 'et_EE.ISO8859-1',
  739.     'et': 'et_EE.ISO8859-15',
  740.     'et_ee': 'et_EE.ISO8859-15',
  741.     'et_ee.iso88591': 'et_EE.ISO8859-1',
  742.     'et_ee.iso885913': 'et_EE.ISO8859-13',
  743.     'et_ee.iso885915': 'et_EE.ISO8859-15',
  744.     'et_ee.iso88594': 'et_EE.ISO8859-4',
  745.     'et_ee@euro': 'et_EE.ISO8859-15',
  746.     'eu': 'eu_ES.ISO8859-1',
  747.     'eu_es': 'eu_ES.ISO8859-1',
  748.     'eu_es.iso88591': 'eu_ES.ISO8859-1',
  749.     'eu_es.iso885915': 'eu_ES.ISO8859-15',
  750.     'eu_es.iso885915@euro': 'eu_ES.ISO8859-15',
  751.     'eu_es.utf8@euro': 'eu_ES.UTF-8',
  752.     'eu_es@euro': 'eu_ES.ISO8859-15',
  753.     'fa': 'fa_IR.UTF-8',
  754.     'fa_ir': 'fa_IR.UTF-8',
  755.     'fa_ir.isiri3342': 'fa_IR.ISIRI-3342',
  756.     'fi': 'fi_FI.ISO8859-15',
  757.     'fi_fi': 'fi_FI.ISO8859-15',
  758.     'fi_fi.88591': 'fi_FI.ISO8859-1',
  759.     'fi_fi.iso88591': 'fi_FI.ISO8859-1',
  760.     'fi_fi.iso885915': 'fi_FI.ISO8859-15',
  761.     'fi_fi.iso885915@euro': 'fi_FI.ISO8859-15',
  762.     'fi_fi.utf8@euro': 'fi_FI.UTF-8',
  763.     'fi_fi@euro': 'fi_FI.ISO8859-15',
  764.     'finnish': 'fi_FI.ISO8859-1',
  765.     'finnish.iso88591': 'fi_FI.ISO8859-1',
  766.     'fo': 'fo_FO.ISO8859-1',
  767.     'fo_fo': 'fo_FO.ISO8859-1',
  768.     'fo_fo.iso88591': 'fo_FO.ISO8859-1',
  769.     'fo_fo.iso885915': 'fo_FO.ISO8859-15',
  770.     'fo_fo@euro': 'fo_FO.ISO8859-15',
  771.     'fr': 'fr_FR.ISO8859-1',
  772.     'fr_be': 'fr_BE.ISO8859-1',
  773.     'fr_be.88591': 'fr_BE.ISO8859-1',
  774.     'fr_be.iso88591': 'fr_BE.ISO8859-1',
  775.     'fr_be.iso885915': 'fr_BE.ISO8859-15',
  776.     'fr_be.iso885915@euro': 'fr_BE.ISO8859-15',
  777.     'fr_be.utf8@euro': 'fr_BE.UTF-8',
  778.     'fr_be@euro': 'fr_BE.ISO8859-15',
  779.     'fr_ca': 'fr_CA.ISO8859-1',
  780.     'fr_ca.88591': 'fr_CA.ISO8859-1',
  781.     'fr_ca.iso88591': 'fr_CA.ISO8859-1',
  782.     'fr_ca.iso885915': 'fr_CA.ISO8859-15',
  783.     'fr_ca@euro': 'fr_CA.ISO8859-15',
  784.     'fr_ch': 'fr_CH.ISO8859-1',
  785.     'fr_ch.88591': 'fr_CH.ISO8859-1',
  786.     'fr_ch.iso88591': 'fr_CH.ISO8859-1',
  787.     'fr_ch.iso885915': 'fr_CH.ISO8859-15',
  788.     'fr_ch@euro': 'fr_CH.ISO8859-15',
  789.     'fr_fr': 'fr_FR.ISO8859-1',
  790.     'fr_fr.88591': 'fr_FR.ISO8859-1',
  791.     'fr_fr.iso88591': 'fr_FR.ISO8859-1',
  792.     'fr_fr.iso885915': 'fr_FR.ISO8859-15',
  793.     'fr_fr.iso885915@euro': 'fr_FR.ISO8859-15',
  794.     'fr_fr.utf8@euro': 'fr_FR.UTF-8',
  795.     'fr_fr@euro': 'fr_FR.ISO8859-15',
  796.     'fr_lu': 'fr_LU.ISO8859-1',
  797.     'fr_lu.88591': 'fr_LU.ISO8859-1',
  798.     'fr_lu.iso88591': 'fr_LU.ISO8859-1',
  799.     'fr_lu.iso885915': 'fr_LU.ISO8859-15',
  800.     'fr_lu.iso885915@euro': 'fr_LU.ISO8859-15',
  801.     'fr_lu.utf8@euro': 'fr_LU.UTF-8',
  802.     'fr_lu@euro': 'fr_LU.ISO8859-15',
  803.     'fran\xe7ais': 'fr_FR.ISO8859-1',
  804.     'fre_fr': 'fr_FR.ISO8859-1',
  805.     'fre_fr.8859': 'fr_FR.ISO8859-1',
  806.     'french': 'fr_FR.ISO8859-1',
  807.     'french.iso88591': 'fr_CH.ISO8859-1',
  808.     'french_france': 'fr_FR.ISO8859-1',
  809.     'french_france.8859': 'fr_FR.ISO8859-1',
  810.     'ga': 'ga_IE.ISO8859-1',
  811.     'ga_ie': 'ga_IE.ISO8859-1',
  812.     'ga_ie.iso88591': 'ga_IE.ISO8859-1',
  813.     'ga_ie.iso885914': 'ga_IE.ISO8859-14',
  814.     'ga_ie.iso885915': 'ga_IE.ISO8859-15',
  815.     'ga_ie.iso885915@euro': 'ga_IE.ISO8859-15',
  816.     'ga_ie.utf8@euro': 'ga_IE.UTF-8',
  817.     'ga_ie@euro': 'ga_IE.ISO8859-15',
  818.     'galego': 'gl_ES.ISO8859-1',
  819.     'galician': 'gl_ES.ISO8859-1',
  820.     'gd': 'gd_GB.ISO8859-1',
  821.     'gd_gb': 'gd_GB.ISO8859-1',
  822.     'gd_gb.iso88591': 'gd_GB.ISO8859-1',
  823.     'gd_gb.iso885914': 'gd_GB.ISO8859-14',
  824.     'gd_gb.iso885915': 'gd_GB.ISO8859-15',
  825.     'gd_gb@euro': 'gd_GB.ISO8859-15',
  826.     'ger_de': 'de_DE.ISO8859-1',
  827.     'ger_de.8859': 'de_DE.ISO8859-1',
  828.     'german': 'de_DE.ISO8859-1',
  829.     'german.iso88591': 'de_CH.ISO8859-1',
  830.     'german_germany': 'de_DE.ISO8859-1',
  831.     'german_germany.8859': 'de_DE.ISO8859-1',
  832.     'gl': 'gl_ES.ISO8859-1',
  833.     'gl_es': 'gl_ES.ISO8859-1',
  834.     'gl_es.iso88591': 'gl_ES.ISO8859-1',
  835.     'gl_es.iso885915': 'gl_ES.ISO8859-15',
  836.     'gl_es.iso885915@euro': 'gl_ES.ISO8859-15',
  837.     'gl_es.utf8@euro': 'gl_ES.UTF-8',
  838.     'gl_es@euro': 'gl_ES.ISO8859-15',
  839.     'greek': 'el_GR.ISO8859-7',
  840.     'greek.iso88597': 'el_GR.ISO8859-7',
  841.     'gu_in': 'gu_IN.UTF-8',
  842.     'gv': 'gv_GB.ISO8859-1',
  843.     'gv_gb': 'gv_GB.ISO8859-1',
  844.     'gv_gb.iso88591': 'gv_GB.ISO8859-1',
  845.     'gv_gb.iso885914': 'gv_GB.ISO8859-14',
  846.     'gv_gb.iso885915': 'gv_GB.ISO8859-15',
  847.     'gv_gb@euro': 'gv_GB.ISO8859-15',
  848.     'he': 'he_IL.ISO8859-8',
  849.     'he_il': 'he_IL.ISO8859-8',
  850.     'he_il.cp1255': 'he_IL.CP1255',
  851.     'he_il.iso88598': 'he_IL.ISO8859-8',
  852.     'he_il.microsoftcp1255': 'he_IL.CP1255',
  853.     'hebrew': 'iw_IL.ISO8859-8',
  854.     'hebrew.iso88598': 'iw_IL.ISO8859-8',
  855.     'hi': 'hi_IN.ISCII-DEV',
  856.     'hi_in': 'hi_IN.ISCII-DEV',
  857.     'hi_in.isciidev': 'hi_IN.ISCII-DEV',
  858.     'hr': 'hr_HR.ISO8859-2',
  859.     'hr_hr': 'hr_HR.ISO8859-2',
  860.     'hr_hr.iso88592': 'hr_HR.ISO8859-2',
  861.     'hrvatski': 'hr_HR.ISO8859-2',
  862.     'hu': 'hu_HU.ISO8859-2',
  863.     'hu_hu': 'hu_HU.ISO8859-2',
  864.     'hu_hu.iso88592': 'hu_HU.ISO8859-2',
  865.     'hungarian': 'hu_HU.ISO8859-2',
  866.     'icelandic': 'is_IS.ISO8859-1',
  867.     'icelandic.iso88591': 'is_IS.ISO8859-1',
  868.     'id': 'id_ID.ISO8859-1',
  869.     'id_id': 'id_ID.ISO8859-1',
  870.     'in': 'id_ID.ISO8859-1',
  871.     'in_id': 'id_ID.ISO8859-1',
  872.     'is': 'is_IS.ISO8859-1',
  873.     'is_is': 'is_IS.ISO8859-1',
  874.     'is_is.iso88591': 'is_IS.ISO8859-1',
  875.     'is_is.iso885915': 'is_IS.ISO8859-15',
  876.     'is_is@euro': 'is_IS.ISO8859-15',
  877.     'iso-8859-1': 'en_US.ISO8859-1',
  878.     'iso-8859-15': 'en_US.ISO8859-15',
  879.     'iso8859-1': 'en_US.ISO8859-1',
  880.     'iso8859-15': 'en_US.ISO8859-15',
  881.     'iso_8859_1': 'en_US.ISO8859-1',
  882.     'iso_8859_15': 'en_US.ISO8859-15',
  883.     'it': 'it_IT.ISO8859-1',
  884.     'it_ch': 'it_CH.ISO8859-1',
  885.     'it_ch.iso88591': 'it_CH.ISO8859-1',
  886.     'it_ch.iso885915': 'it_CH.ISO8859-15',
  887.     'it_ch@euro': 'it_CH.ISO8859-15',
  888.     'it_it': 'it_IT.ISO8859-1',
  889.     'it_it.88591': 'it_IT.ISO8859-1',
  890.     'it_it.iso88591': 'it_IT.ISO8859-1',
  891.     'it_it.iso885915': 'it_IT.ISO8859-15',
  892.     'it_it.iso885915@euro': 'it_IT.ISO8859-15',
  893.     'it_it.utf8@euro': 'it_IT.UTF-8',
  894.     'it_it@euro': 'it_IT.ISO8859-15',
  895.     'italian': 'it_IT.ISO8859-1',
  896.     'italian.iso88591': 'it_IT.ISO8859-1',
  897.     'iu': 'iu_CA.NUNACOM-8',
  898.     'iu_ca': 'iu_CA.NUNACOM-8',
  899.     'iu_ca.nunacom8': 'iu_CA.NUNACOM-8',
  900.     'iw': 'he_IL.ISO8859-8',
  901.     'iw_il': 'he_IL.ISO8859-8',
  902.     'iw_il.iso88598': 'he_IL.ISO8859-8',
  903.     'ja': 'ja_JP.eucJP',
  904.     'ja.jis': 'ja_JP.JIS7',
  905.     'ja.sjis': 'ja_JP.SJIS',
  906.     'ja_jp': 'ja_JP.eucJP',
  907.     'ja_jp.ajec': 'ja_JP.eucJP',
  908.     'ja_jp.euc': 'ja_JP.eucJP',
  909.     'ja_jp.eucjp': 'ja_JP.eucJP',
  910.     'ja_jp.iso-2022-jp': 'ja_JP.JIS7',
  911.     'ja_jp.iso2022jp': 'ja_JP.JIS7',
  912.     'ja_jp.jis': 'ja_JP.JIS7',
  913.     'ja_jp.jis7': 'ja_JP.JIS7',
  914.     'ja_jp.mscode': 'ja_JP.SJIS',
  915.     'ja_jp.sjis': 'ja_JP.SJIS',
  916.     'ja_jp.ujis': 'ja_JP.eucJP',
  917.     'japan': 'ja_JP.eucJP',
  918.     'japanese': 'ja_JP.eucJP',
  919.     'japanese-euc': 'ja_JP.eucJP',
  920.     'japanese.euc': 'ja_JP.eucJP',
  921.     'japanese.sjis': 'ja_JP.SJIS',
  922.     'jp_jp': 'ja_JP.eucJP',
  923.     'ka': 'ka_GE.GEORGIAN-ACADEMY',
  924.     'ka_ge': 'ka_GE.GEORGIAN-ACADEMY',
  925.     'ka_ge.georgianacademy': 'ka_GE.GEORGIAN-ACADEMY',
  926.     'ka_ge.georgianps': 'ka_GE.GEORGIAN-PS',
  927.     'ka_ge.georgianrs': 'ka_GE.GEORGIAN-ACADEMY',
  928.     'kl': 'kl_GL.ISO8859-1',
  929.     'kl_gl': 'kl_GL.ISO8859-1',
  930.     'kl_gl.iso88591': 'kl_GL.ISO8859-1',
  931.     'kl_gl.iso885915': 'kl_GL.ISO8859-15',
  932.     'kl_gl@euro': 'kl_GL.ISO8859-15',
  933.     'km_kh': 'km_KH.UTF-8',
  934.     'kn_in': 'kn_IN.UTF-8',
  935.     'ko': 'ko_KR.eucKR',
  936.     'ko_kr': 'ko_KR.eucKR',
  937.     'ko_kr.euc': 'ko_KR.eucKR',
  938.     'ko_kr.euckr': 'ko_KR.eucKR',
  939.     'korean': 'ko_KR.eucKR',
  940.     'korean.euc': 'ko_KR.eucKR',
  941.     'kw': 'kw_GB.ISO8859-1',
  942.     'kw_gb': 'kw_GB.ISO8859-1',
  943.     'kw_gb.iso88591': 'kw_GB.ISO8859-1',
  944.     'kw_gb.iso885914': 'kw_GB.ISO8859-14',
  945.     'kw_gb.iso885915': 'kw_GB.ISO8859-15',
  946.     'kw_gb@euro': 'kw_GB.ISO8859-15',
  947.     'ky': 'ky_KG.UTF-8',
  948.     'ky_kg': 'ky_KG.UTF-8',
  949.     'lithuanian': 'lt_LT.ISO8859-13',
  950.     'lo': 'lo_LA.MULELAO-1',
  951.     'lo_la': 'lo_LA.MULELAO-1',
  952.     'lo_la.cp1133': 'lo_LA.IBM-CP1133',
  953.     'lo_la.ibmcp1133': 'lo_LA.IBM-CP1133',
  954.     'lo_la.mulelao1': 'lo_LA.MULELAO-1',
  955.     'lt': 'lt_LT.ISO8859-13',
  956.     'lt_lt': 'lt_LT.ISO8859-13',
  957.     'lt_lt.iso885913': 'lt_LT.ISO8859-13',
  958.     'lt_lt.iso88594': 'lt_LT.ISO8859-4',
  959.     'lv': 'lv_LV.ISO8859-13',
  960.     'lv_lv': 'lv_LV.ISO8859-13',
  961.     'lv_lv.iso885913': 'lv_LV.ISO8859-13',
  962.     'lv_lv.iso88594': 'lv_LV.ISO8859-4',
  963.     'mi': 'mi_NZ.ISO8859-1',
  964.     'mi_nz': 'mi_NZ.ISO8859-1',
  965.     'mi_nz.iso88591': 'mi_NZ.ISO8859-1',
  966.     'mk': 'mk_MK.ISO8859-5',
  967.     'mk_mk': 'mk_MK.ISO8859-5',
  968.     'mk_mk.cp1251': 'mk_MK.CP1251',
  969.     'mk_mk.iso88595': 'mk_MK.ISO8859-5',
  970.     'mk_mk.microsoftcp1251': 'mk_MK.CP1251',
  971.     'mr_in': 'mr_IN.UTF-8',
  972.     'ms': 'ms_MY.ISO8859-1',
  973.     'ms_my': 'ms_MY.ISO8859-1',
  974.     'ms_my.iso88591': 'ms_MY.ISO8859-1',
  975.     'mt': 'mt_MT.ISO8859-3',
  976.     'mt_mt': 'mt_MT.ISO8859-3',
  977.     'mt_mt.iso88593': 'mt_MT.ISO8859-3',
  978.     'nb': 'nb_NO.ISO8859-1',
  979.     'nb_no': 'nb_NO.ISO8859-1',
  980.     'nb_no.88591': 'nb_NO.ISO8859-1',
  981.     'nb_no.iso88591': 'nb_NO.ISO8859-1',
  982.     'nb_no.iso885915': 'nb_NO.ISO8859-15',
  983.     'nb_no@euro': 'nb_NO.ISO8859-15',
  984.     'nl': 'nl_NL.ISO8859-1',
  985.     'nl_be': 'nl_BE.ISO8859-1',
  986.     'nl_be.88591': 'nl_BE.ISO8859-1',
  987.     'nl_be.iso88591': 'nl_BE.ISO8859-1',
  988.     'nl_be.iso885915': 'nl_BE.ISO8859-15',
  989.     'nl_be.iso885915@euro': 'nl_BE.ISO8859-15',
  990.     'nl_be.utf8@euro': 'nl_BE.UTF-8',
  991.     'nl_be@euro': 'nl_BE.ISO8859-15',
  992.     'nl_nl': 'nl_NL.ISO8859-1',
  993.     'nl_nl.88591': 'nl_NL.ISO8859-1',
  994.     'nl_nl.iso88591': 'nl_NL.ISO8859-1',
  995.     'nl_nl.iso885915': 'nl_NL.ISO8859-15',
  996.     'nl_nl.iso885915@euro': 'nl_NL.ISO8859-15',
  997.     'nl_nl.utf8@euro': 'nl_NL.UTF-8',
  998.     'nl_nl@euro': 'nl_NL.ISO8859-15',
  999.     'nn': 'nn_NO.ISO8859-1',
  1000.     'nn_no': 'nn_NO.ISO8859-1',
  1001.     'nn_no.88591': 'nn_NO.ISO8859-1',
  1002.     'nn_no.iso88591': 'nn_NO.ISO8859-1',
  1003.     'nn_no.iso885915': 'nn_NO.ISO8859-15',
  1004.     'nn_no@euro': 'nn_NO.ISO8859-15',
  1005.     'no': 'no_NO.ISO8859-1',
  1006.     'no@nynorsk': 'ny_NO.ISO8859-1',
  1007.     'no_no': 'no_NO.ISO8859-1',
  1008.     'no_no.88591': 'no_NO.ISO8859-1',
  1009.     'no_no.iso88591': 'no_NO.ISO8859-1',
  1010.     'no_no.iso885915': 'no_NO.ISO8859-15',
  1011.     'no_no@euro': 'no_NO.ISO8859-15',
  1012.     'norwegian': 'no_NO.ISO8859-1',
  1013.     'norwegian.iso88591': 'no_NO.ISO8859-1',
  1014.     'nr': 'nr_ZA.ISO8859-1',
  1015.     'nr_za': 'nr_ZA.ISO8859-1',
  1016.     'nr_za.iso88591': 'nr_ZA.ISO8859-1',
  1017.     'nso': 'nso_ZA.ISO8859-15',
  1018.     'nso_za': 'nso_ZA.ISO8859-15',
  1019.     'nso_za.iso885915': 'nso_ZA.ISO8859-15',
  1020.     'ny': 'ny_NO.ISO8859-1',
  1021.     'ny_no': 'ny_NO.ISO8859-1',
  1022.     'ny_no.88591': 'ny_NO.ISO8859-1',
  1023.     'ny_no.iso88591': 'ny_NO.ISO8859-1',
  1024.     'ny_no.iso885915': 'ny_NO.ISO8859-15',
  1025.     'ny_no@euro': 'ny_NO.ISO8859-15',
  1026.     'nynorsk': 'nn_NO.ISO8859-1',
  1027.     'oc': 'oc_FR.ISO8859-1',
  1028.     'oc_fr': 'oc_FR.ISO8859-1',
  1029.     'oc_fr.iso88591': 'oc_FR.ISO8859-1',
  1030.     'oc_fr.iso885915': 'oc_FR.ISO8859-15',
  1031.     'oc_fr@euro': 'oc_FR.ISO8859-15',
  1032.     'pa_in': 'pa_IN.UTF-8',
  1033.     'pd': 'pd_US.ISO8859-1',
  1034.     'pd_de': 'pd_DE.ISO8859-1',
  1035.     'pd_de.iso88591': 'pd_DE.ISO8859-1',
  1036.     'pd_de.iso885915': 'pd_DE.ISO8859-15',
  1037.     'pd_de@euro': 'pd_DE.ISO8859-15',
  1038.     'pd_us': 'pd_US.ISO8859-1',
  1039.     'pd_us.iso88591': 'pd_US.ISO8859-1',
  1040.     'pd_us.iso885915': 'pd_US.ISO8859-15',
  1041.     'pd_us@euro': 'pd_US.ISO8859-15',
  1042.     'ph': 'ph_PH.ISO8859-1',
  1043.     'ph_ph': 'ph_PH.ISO8859-1',
  1044.     'ph_ph.iso88591': 'ph_PH.ISO8859-1',
  1045.     'pl': 'pl_PL.ISO8859-2',
  1046.     'pl_pl': 'pl_PL.ISO8859-2',
  1047.     'pl_pl.iso88592': 'pl_PL.ISO8859-2',
  1048.     'polish': 'pl_PL.ISO8859-2',
  1049.     'portuguese': 'pt_PT.ISO8859-1',
  1050.     'portuguese.iso88591': 'pt_PT.ISO8859-1',
  1051.     'portuguese_brazil': 'pt_BR.ISO8859-1',
  1052.     'portuguese_brazil.8859': 'pt_BR.ISO8859-1',
  1053.     'posix': 'C',
  1054.     'posix-utf2': 'C',
  1055.     'pp': 'pp_AN.ISO8859-1',
  1056.     'pp_an': 'pp_AN.ISO8859-1',
  1057.     'pp_an.iso88591': 'pp_AN.ISO8859-1',
  1058.     'pt': 'pt_PT.ISO8859-1',
  1059.     'pt_br': 'pt_BR.ISO8859-1',
  1060.     'pt_br.88591': 'pt_BR.ISO8859-1',
  1061.     'pt_br.iso88591': 'pt_BR.ISO8859-1',
  1062.     'pt_br.iso885915': 'pt_BR.ISO8859-15',
  1063.     'pt_br@euro': 'pt_BR.ISO8859-15',
  1064.     'pt_pt': 'pt_PT.ISO8859-1',
  1065.     'pt_pt.88591': 'pt_PT.ISO8859-1',
  1066.     'pt_pt.iso88591': 'pt_PT.ISO8859-1',
  1067.     'pt_pt.iso885915': 'pt_PT.ISO8859-15',
  1068.     'pt_pt.iso885915@euro': 'pt_PT.ISO8859-15',
  1069.     'pt_pt.utf8@euro': 'pt_PT.UTF-8',
  1070.     'pt_pt@euro': 'pt_PT.ISO8859-15',
  1071.     'ro': 'ro_RO.ISO8859-2',
  1072.     'ro_ro': 'ro_RO.ISO8859-2',
  1073.     'ro_ro.iso88592': 'ro_RO.ISO8859-2',
  1074.     'romanian': 'ro_RO.ISO8859-2',
  1075.     'ru': 'ru_RU.ISO8859-5',
  1076.     'ru_ru': 'ru_RU.ISO8859-5',
  1077.     'ru_ru.cp1251': 'ru_RU.CP1251',
  1078.     'ru_ru.iso88595': 'ru_RU.ISO8859-5',
  1079.     'ru_ru.koi8r': 'ru_RU.KOI8-R',
  1080.     'ru_ru.microsoftcp1251': 'ru_RU.CP1251',
  1081.     'ru_ua': 'ru_UA.KOI8-U',
  1082.     'ru_ua.cp1251': 'ru_UA.CP1251',
  1083.     'ru_ua.koi8u': 'ru_UA.KOI8-U',
  1084.     'ru_ua.microsoftcp1251': 'ru_UA.CP1251',
  1085.     'rumanian': 'ro_RO.ISO8859-2',
  1086.     'russian': 'ru_RU.ISO8859-5',
  1087.     'rw': 'rw_RW.ISO8859-1',
  1088.     'rw_rw': 'rw_RW.ISO8859-1',
  1089.     'rw_rw.iso88591': 'rw_RW.ISO8859-1',
  1090.     'se_no': 'se_NO.UTF-8',
  1091.     'serbocroatian': 'sr_CS.ISO8859-2',
  1092.     'sh': 'sr_CS.ISO8859-2',
  1093.     'sh_hr': 'sh_HR.ISO8859-2',
  1094.     'sh_hr.iso88592': 'hr_HR.ISO8859-2',
  1095.     'sh_sp': 'sr_CS.ISO8859-2',
  1096.     'sh_yu': 'sr_CS.ISO8859-2',
  1097.     'si': 'si_LK.UTF-8',
  1098.     'si_lk': 'si_LK.UTF-8',
  1099.     'sinhala': 'si_LK.UTF-8',
  1100.     'sk': 'sk_SK.ISO8859-2',
  1101.     'sk_sk': 'sk_SK.ISO8859-2',
  1102.     'sk_sk.iso88592': 'sk_SK.ISO8859-2',
  1103.     'sl': 'sl_SI.ISO8859-2',
  1104.     'sl_cs': 'sl_CS.ISO8859-2',
  1105.     'sl_si': 'sl_SI.ISO8859-2',
  1106.     'sl_si.iso88592': 'sl_SI.ISO8859-2',
  1107.     'slovak': 'sk_SK.ISO8859-2',
  1108.     'slovene': 'sl_SI.ISO8859-2',
  1109.     'slovenian': 'sl_SI.ISO8859-2',
  1110.     'sp': 'sr_CS.ISO8859-5',
  1111.     'sp_yu': 'sr_CS.ISO8859-5',
  1112.     'spanish': 'es_ES.ISO8859-1',
  1113.     'spanish.iso88591': 'es_ES.ISO8859-1',
  1114.     'spanish_spain': 'es_ES.ISO8859-1',
  1115.     'spanish_spain.8859': 'es_ES.ISO8859-1',
  1116.     'sq': 'sq_AL.ISO8859-2',
  1117.     'sq_al': 'sq_AL.ISO8859-2',
  1118.     'sq_al.iso88592': 'sq_AL.ISO8859-2',
  1119.     'sr': 'sr_CS.ISO8859-5',
  1120.     'sr@cyrillic': 'sr_CS.ISO8859-5',
  1121.     'sr@latn': 'sr_CS.ISO8859-2',
  1122.     'sr_cs.iso88592': 'sr_CS.ISO8859-2',
  1123.     'sr_cs.iso88592@latn': 'sr_CS.ISO8859-2',
  1124.     'sr_cs.iso88595': 'sr_CS.ISO8859-5',
  1125.     'sr_cs.utf8@latn': 'sr_CS.UTF-8',
  1126.     'sr_cs@latn': 'sr_CS.ISO8859-2',
  1127.     'sr_sp': 'sr_CS.ISO8859-2',
  1128.     'sr_yu': 'sr_CS.ISO8859-5',
  1129.     'sr_yu.cp1251@cyrillic': 'sr_CS.CP1251',
  1130.     'sr_yu.iso88592': 'sr_CS.ISO8859-2',
  1131.     'sr_yu.iso88595': 'sr_CS.ISO8859-5',
  1132.     'sr_yu.iso88595@cyrillic': 'sr_CS.ISO8859-5',
  1133.     'sr_yu.microsoftcp1251@cyrillic': 'sr_CS.CP1251',
  1134.     'sr_yu.utf8@cyrillic': 'sr_CS.UTF-8',
  1135.     'sr_yu@cyrillic': 'sr_CS.ISO8859-5',
  1136.     'ss': 'ss_ZA.ISO8859-1',
  1137.     'ss_za': 'ss_ZA.ISO8859-1',
  1138.     'ss_za.iso88591': 'ss_ZA.ISO8859-1',
  1139.     'st': 'st_ZA.ISO8859-1',
  1140.     'st_za': 'st_ZA.ISO8859-1',
  1141.     'st_za.iso88591': 'st_ZA.ISO8859-1',
  1142.     'sv': 'sv_SE.ISO8859-1',
  1143.     'sv_fi': 'sv_FI.ISO8859-1',
  1144.     'sv_fi.iso88591': 'sv_FI.ISO8859-1',
  1145.     'sv_fi.iso885915': 'sv_FI.ISO8859-15',
  1146.     'sv_fi.iso885915@euro': 'sv_FI.ISO8859-15',
  1147.     'sv_fi.utf8@euro': 'sv_FI.UTF-8',
  1148.     'sv_fi@euro': 'sv_FI.ISO8859-15',
  1149.     'sv_se': 'sv_SE.ISO8859-1',
  1150.     'sv_se.88591': 'sv_SE.ISO8859-1',
  1151.     'sv_se.iso88591': 'sv_SE.ISO8859-1',
  1152.     'sv_se.iso885915': 'sv_SE.ISO8859-15',
  1153.     'sv_se@euro': 'sv_SE.ISO8859-15',
  1154.     'swedish': 'sv_SE.ISO8859-1',
  1155.     'swedish.iso88591': 'sv_SE.ISO8859-1',
  1156.     'ta': 'ta_IN.TSCII-0',
  1157.     'ta_in': 'ta_IN.TSCII-0',
  1158.     'ta_in.tscii': 'ta_IN.TSCII-0',
  1159.     'ta_in.tscii0': 'ta_IN.TSCII-0',
  1160.     'tg': 'tg_TJ.KOI8-C',
  1161.     'tg_tj': 'tg_TJ.KOI8-C',
  1162.     'tg_tj.koi8c': 'tg_TJ.KOI8-C',
  1163.     'th': 'th_TH.ISO8859-11',
  1164.     'th_th': 'th_TH.ISO8859-11',
  1165.     'th_th.iso885911': 'th_TH.ISO8859-11',
  1166.     'th_th.tactis': 'th_TH.TIS620',
  1167.     'th_th.tis620': 'th_TH.TIS620',
  1168.     'thai': 'th_TH.ISO8859-11',
  1169.     'tl': 'tl_PH.ISO8859-1',
  1170.     'tl_ph': 'tl_PH.ISO8859-1',
  1171.     'tl_ph.iso88591': 'tl_PH.ISO8859-1',
  1172.     'tn': 'tn_ZA.ISO8859-15',
  1173.     'tn_za': 'tn_ZA.ISO8859-15',
  1174.     'tn_za.iso885915': 'tn_ZA.ISO8859-15',
  1175.     'tr': 'tr_TR.ISO8859-9',
  1176.     'tr_tr': 'tr_TR.ISO8859-9',
  1177.     'tr_tr.iso88599': 'tr_TR.ISO8859-9',
  1178.     'ts': 'ts_ZA.ISO8859-1',
  1179.     'ts_za': 'ts_ZA.ISO8859-1',
  1180.     'ts_za.iso88591': 'ts_ZA.ISO8859-1',
  1181.     'tt': 'tt_RU.TATAR-CYR',
  1182.     'tt_ru': 'tt_RU.TATAR-CYR',
  1183.     'tt_ru.koi8c': 'tt_RU.KOI8-C',
  1184.     'tt_ru.tatarcyr': 'tt_RU.TATAR-CYR',
  1185.     'turkish': 'tr_TR.ISO8859-9',
  1186.     'turkish.iso88599': 'tr_TR.ISO8859-9',
  1187.     'uk': 'uk_UA.KOI8-U',
  1188.     'uk_ua': 'uk_UA.KOI8-U',
  1189.     'uk_ua.cp1251': 'uk_UA.CP1251',
  1190.     'uk_ua.iso88595': 'uk_UA.ISO8859-5',
  1191.     'uk_ua.koi8u': 'uk_UA.KOI8-U',
  1192.     'uk_ua.microsoftcp1251': 'uk_UA.CP1251',
  1193.     'univ': 'en_US.utf',
  1194.     'universal': 'en_US.utf',
  1195.     'universal.utf8@ucs4': 'en_US.UTF-8',
  1196.     'ur': 'ur_PK.CP1256',
  1197.     'ur_pk': 'ur_PK.CP1256',
  1198.     'ur_pk.cp1256': 'ur_PK.CP1256',
  1199.     'ur_pk.microsoftcp1256': 'ur_PK.CP1256',
  1200.     'uz': 'uz_UZ.UTF-8',
  1201.     'uz_uz': 'uz_UZ.UTF-8',
  1202.     'uz_uz.iso88591': 'uz_UZ.ISO8859-1',
  1203.     'uz_uz.utf8@cyrillic': 'uz_UZ.UTF-8',
  1204.     'uz_uz@cyrillic': 'uz_UZ.UTF-8',
  1205.     've': 've_ZA.UTF-8',
  1206.     've_za': 've_ZA.UTF-8',
  1207.     'vi': 'vi_VN.TCVN',
  1208.     'vi_vn': 'vi_VN.TCVN',
  1209.     'vi_vn.tcvn': 'vi_VN.TCVN',
  1210.     'vi_vn.tcvn5712': 'vi_VN.TCVN',
  1211.     'vi_vn.viscii': 'vi_VN.VISCII',
  1212.     'vi_vn.viscii111': 'vi_VN.VISCII',
  1213.     'wa': 'wa_BE.ISO8859-1',
  1214.     'wa_be': 'wa_BE.ISO8859-1',
  1215.     'wa_be.iso88591': 'wa_BE.ISO8859-1',
  1216.     'wa_be.iso885915': 'wa_BE.ISO8859-15',
  1217.     'wa_be.iso885915@euro': 'wa_BE.ISO8859-15',
  1218.     'wa_be@euro': 'wa_BE.ISO8859-15',
  1219.     'xh': 'xh_ZA.ISO8859-1',
  1220.     'xh_za': 'xh_ZA.ISO8859-1',
  1221.     'xh_za.iso88591': 'xh_ZA.ISO8859-1',
  1222.     'yi': 'yi_US.CP1255',
  1223.     'yi_us': 'yi_US.CP1255',
  1224.     'yi_us.cp1255': 'yi_US.CP1255',
  1225.     'yi_us.microsoftcp1255': 'yi_US.CP1255',
  1226.     'zh': 'zh_CN.eucCN',
  1227.     'zh_cn': 'zh_CN.gb2312',
  1228.     'zh_cn.big5': 'zh_TW.big5',
  1229.     'zh_cn.euc': 'zh_CN.eucCN',
  1230.     'zh_cn.gb18030': 'zh_CN.gb18030',
  1231.     'zh_cn.gb2312': 'zh_CN.gb2312',
  1232.     'zh_cn.gbk': 'zh_CN.gbk',
  1233.     'zh_hk': 'zh_HK.big5hkscs',
  1234.     'zh_hk.big5': 'zh_HK.big5',
  1235.     'zh_hk.big5hkscs': 'zh_HK.big5hkscs',
  1236.     'zh_tw': 'zh_TW.big5',
  1237.     'zh_tw.big5': 'zh_TW.big5',
  1238.     'zh_tw.euc': 'zh_TW.eucTW',
  1239.     'zh_tw.euctw': 'zh_TW.eucTW',
  1240.     'zu': 'zu_ZA.ISO8859-1',
  1241.     'zu_za': 'zu_ZA.ISO8859-1',
  1242.     'zu_za.iso88591': 'zu_ZA.ISO8859-1' }
  1243. windows_locale = {
  1244.     1078: 'af_ZA',
  1245.     1052: 'sq_AL',
  1246.     1025: 'ar_SA',
  1247.     2049: 'ar_IQ',
  1248.     3073: 'ar_EG',
  1249.     4097: 'ar_LY',
  1250.     5121: 'ar_DZ',
  1251.     6145: 'ar_MA',
  1252.     7169: 'ar_TN',
  1253.     8193: 'ar_OM',
  1254.     9217: 'ar_YE',
  1255.     10241: 'ar_SY',
  1256.     11265: 'ar_JO',
  1257.     12289: 'ar_LB',
  1258.     13313: 'ar_KW',
  1259.     14337: 'ar_AE',
  1260.     15361: 'ar_BH',
  1261.     16385: 'ar_QA',
  1262.     1067: 'hy_AM',
  1263.     1068: 'az_AZ',
  1264.     2092: 'az_AZ',
  1265.     1069: 'eu_ES',
  1266.     1059: 'be_BY',
  1267.     1093: 'bn_IN',
  1268.     8218: 'bs_BA',
  1269.     5146: 'bs_BA',
  1270.     1150: 'br_FR',
  1271.     1026: 'bg_BG',
  1272.     1027: 'ca_ES',
  1273.     4: 'zh_CHS',
  1274.     1028: 'zh_TW',
  1275.     2052: 'zh_CN',
  1276.     3076: 'zh_HK',
  1277.     4100: 'zh_SG',
  1278.     5124: 'zh_MO',
  1279.     31748: 'zh_CHT',
  1280.     1050: 'hr_HR',
  1281.     4122: 'hr_BA',
  1282.     1029: 'cs_CZ',
  1283.     1030: 'da_DK',
  1284.     1164: 'gbz_AF',
  1285.     1125: 'div_MV',
  1286.     1043: 'nl_NL',
  1287.     2067: 'nl_BE',
  1288.     1033: 'en_US',
  1289.     2057: 'en_GB',
  1290.     3081: 'en_AU',
  1291.     4105: 'en_CA',
  1292.     5129: 'en_NZ',
  1293.     6153: 'en_IE',
  1294.     7177: 'en_ZA',
  1295.     8201: 'en_JA',
  1296.     9225: 'en_CB',
  1297.     10249: 'en_BZ',
  1298.     11273: 'en_TT',
  1299.     12297: 'en_ZW',
  1300.     13321: 'en_PH',
  1301.     1061: 'et_EE',
  1302.     1080: 'fo_FO',
  1303.     1124: 'fil_PH',
  1304.     1035: 'fi_FI',
  1305.     1036: 'fr_FR',
  1306.     2060: 'fr_BE',
  1307.     3084: 'fr_CA',
  1308.     4108: 'fr_CH',
  1309.     5132: 'fr_LU',
  1310.     6156: 'fr_MC',
  1311.     1122: 'fy_NL',
  1312.     1110: 'gl_ES',
  1313.     1079: 'ka_GE',
  1314.     1031: 'de_DE',
  1315.     2055: 'de_CH',
  1316.     3079: 'de_AT',
  1317.     4103: 'de_LU',
  1318.     5127: 'de_LI',
  1319.     1032: 'el_GR',
  1320.     1095: 'gu_IN',
  1321.     1037: 'he_IL',
  1322.     1081: 'hi_IN',
  1323.     1038: 'hu_HU',
  1324.     1039: 'is_IS',
  1325.     1057: 'id_ID',
  1326.     1117: 'iu_CA',
  1327.     2141: 'iu_CA',
  1328.     2108: 'ga_IE',
  1329.     1076: 'xh_ZA',
  1330.     1077: 'zu_ZA',
  1331.     1040: 'it_IT',
  1332.     2064: 'it_CH',
  1333.     1041: 'ja_JP',
  1334.     1099: 'kn_IN',
  1335.     1087: 'kk_KZ',
  1336.     1111: 'kok_IN',
  1337.     1042: 'ko_KR',
  1338.     1088: 'ky_KG',
  1339.     1062: 'lv_LV',
  1340.     1063: 'lt_LT',
  1341.     1134: 'lb_LU',
  1342.     1071: 'mk_MK',
  1343.     1086: 'ms_MY',
  1344.     2110: 'ms_BN',
  1345.     1100: 'ml_IN',
  1346.     1082: 'mt_MT',
  1347.     1153: 'mi_NZ',
  1348.     1146: 'arn_CL',
  1349.     1102: 'mr_IN',
  1350.     1148: 'moh_CA',
  1351.     1104: 'mn_MN',
  1352.     1121: 'ne_NP',
  1353.     1044: 'nb_NO',
  1354.     2068: 'nn_NO',
  1355.     1154: 'oc_FR',
  1356.     1096: 'or_IN',
  1357.     1123: 'ps_AF',
  1358.     1065: 'fa_IR',
  1359.     1045: 'pl_PL',
  1360.     1046: 'pt_BR',
  1361.     2070: 'pt_PT',
  1362.     1094: 'pa_IN',
  1363.     1131: 'quz_BO',
  1364.     2155: 'quz_EC',
  1365.     3179: 'quz_PE',
  1366.     1048: 'ro_RO',
  1367.     1047: 'rm_CH',
  1368.     1049: 'ru_RU',
  1369.     9275: 'smn_FI',
  1370.     4155: 'smj_NO',
  1371.     5179: 'smj_SE',
  1372.     1083: 'se_NO',
  1373.     2107: 'se_SE',
  1374.     3131: 'se_FI',
  1375.     8251: 'sms_FI',
  1376.     6203: 'sma_NO',
  1377.     7227: 'sma_SE',
  1378.     1103: 'sa_IN',
  1379.     3098: 'sr_SP',
  1380.     7194: 'sr_BA',
  1381.     2074: 'sr_SP',
  1382.     6170: 'sr_BA',
  1383.     1132: 'ns_ZA',
  1384.     1074: 'tn_ZA',
  1385.     1051: 'sk_SK',
  1386.     1060: 'sl_SI',
  1387.     1034: 'es_ES',
  1388.     2058: 'es_MX',
  1389.     3082: 'es_ES',
  1390.     4106: 'es_GT',
  1391.     5130: 'es_CR',
  1392.     6154: 'es_PA',
  1393.     7178: 'es_DO',
  1394.     8202: 'es_VE',
  1395.     9226: 'es_CO',
  1396.     10250: 'es_PE',
  1397.     11274: 'es_AR',
  1398.     12298: 'es_EC',
  1399.     13322: 'es_CL',
  1400.     14346: 'es_UR',
  1401.     15370: 'es_PY',
  1402.     16394: 'es_BO',
  1403.     17418: 'es_SV',
  1404.     18442: 'es_HN',
  1405.     19466: 'es_NI',
  1406.     20490: 'es_PR',
  1407.     1089: 'sw_KE',
  1408.     1053: 'sv_SE',
  1409.     2077: 'sv_FI',
  1410.     1114: 'syr_SY',
  1411.     1097: 'ta_IN',
  1412.     1092: 'tt_RU',
  1413.     1098: 'te_IN',
  1414.     1054: 'th_TH',
  1415.     1055: 'tr_TR',
  1416.     1058: 'uk_UA',
  1417.     1056: 'ur_PK',
  1418.     2080: 'ur_IN',
  1419.     1091: 'uz_UZ',
  1420.     2115: 'uz_UZ',
  1421.     1066: 'vi_VN',
  1422.     1106: 'cy_GB' }
  1423.  
  1424. def _print_locale():
  1425.     categories = { }
  1426.     
  1427.     def _init_categories(categories = categories):
  1428.         for k, v in globals().items():
  1429.             if k[:3] == 'LC_':
  1430.                 categories[k] = v
  1431.                 continue
  1432.         
  1433.  
  1434.     _init_categories()
  1435.     del categories['LC_ALL']
  1436.     print 'Locale defaults as determined by getdefaultlocale():'
  1437.     print '-' * 72
  1438.     (lang, enc) = getdefaultlocale()
  1439.     print 'Language: ',
  1440.     if not lang:
  1441.         pass
  1442.     print '(undefined)'
  1443.     print 'Encoding: ',
  1444.     if not enc:
  1445.         pass
  1446.     print '(undefined)'
  1447.     print 
  1448.     print 'Locale settings on startup:'
  1449.     print '-' * 72
  1450.     for name, category in categories.items():
  1451.         print name, '...'
  1452.         (lang, enc) = getlocale(category)
  1453.         print '   Language: ',
  1454.         if not lang:
  1455.             pass
  1456.         print '(undefined)'
  1457.         print '   Encoding: ',
  1458.         if not enc:
  1459.             pass
  1460.         print '(undefined)'
  1461.         print 
  1462.     
  1463.     print 
  1464.     print 'Locale settings after calling resetlocale():'
  1465.     print '-' * 72
  1466.     resetlocale()
  1467.     for name, category in categories.items():
  1468.         print name, '...'
  1469.         (lang, enc) = getlocale(category)
  1470.         print '   Language: ',
  1471.         if not lang:
  1472.             pass
  1473.         print '(undefined)'
  1474.         print '   Encoding: ',
  1475.         if not enc:
  1476.             pass
  1477.         print '(undefined)'
  1478.         print 
  1479.     
  1480.     
  1481.     try:
  1482.         setlocale(LC_ALL, '')
  1483.     except:
  1484.         print 'NOTE:'
  1485.         print 'setlocale(LC_ALL, "") does not support the default locale'
  1486.         print 'given in the OS environment variables.'
  1487.  
  1488.     print 
  1489.     print 'Locale settings after calling setlocale(LC_ALL, ""):'
  1490.     print '-' * 72
  1491.     for name, category in categories.items():
  1492.         print name, '...'
  1493.         (lang, enc) = getlocale(category)
  1494.         print '   Language: ',
  1495.         if not lang:
  1496.             pass
  1497.         print '(undefined)'
  1498.         print '   Encoding: ',
  1499.         if not enc:
  1500.             pass
  1501.         print '(undefined)'
  1502.         print 
  1503.     
  1504.  
  1505.  
  1506. try:
  1507.     LC_MESSAGES
  1508. except NameError:
  1509.     pass
  1510.  
  1511. __all__.append('LC_MESSAGES')
  1512. if __name__ == '__main__':
  1513.     print 'Locale aliasing:'
  1514.     print 
  1515.     _print_locale()
  1516.     print 
  1517.     print 'Number formatting:'
  1518.     print 
  1519.     _test()
  1520.  
  1521.