home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 April / com_0405_1.iso / opensource / BTpp-0.5.4-bin.exe / $INSTDIR / BT++.exe / locale.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2003-04-19  |  15.9 KB  |  609 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.2)
  3.  
  4. import sys
  5. __all__ = [
  6.     'setlocale',
  7.     'Error',
  8.     'localeconv',
  9.     'strcoll',
  10.     'strxfrm',
  11.     'format',
  12.     'str',
  13.     'atof',
  14.     'atoi',
  15.     'LC_CTYPE',
  16.     'LC_COLLATE',
  17.     'LC_TIME',
  18.     'LC_MONETARY',
  19.     'LC_NUMERIC',
  20.     'LC_ALL',
  21.     'CHAR_MAX']
  22.  
  23. try:
  24.     from _locale import *
  25. except ImportError:
  26.     CHAR_MAX = 127
  27.     LC_ALL = 6
  28.     LC_COLLATE = 3
  29.     LC_CTYPE = 0
  30.     LC_MESSAGES = 5
  31.     LC_MONETARY = 4
  32.     LC_NUMERIC = 1
  33.     LC_TIME = 2
  34.     Error = ValueError
  35.     
  36.     def localeconv():
  37.         return {
  38.             'grouping': [
  39.                 127],
  40.             'currency_symbol': '',
  41.             'n_sign_posn': 127,
  42.             'p_cs_precedes': 127,
  43.             'n_cs_precedes': 127,
  44.             'mon_grouping': [],
  45.             'n_sep_by_space': 127,
  46.             'decimal_point': '.',
  47.             'negative_sign': '',
  48.             'positive_sign': '',
  49.             'p_sep_by_space': 127,
  50.             'int_curr_symbol': '',
  51.             'p_sign_posn': 127,
  52.             'thousands_sep': '',
  53.             'mon_thousands_sep': '',
  54.             'frac_digits': 127,
  55.             'mon_decimal_point': '',
  56.             'int_frac_digits': 127 }
  57.  
  58.     
  59.     def setlocale(category, value = None):
  60.         if value is not None and value != 'C':
  61.             raise Error, '_locale emulation only supports "C" locale'
  62.         
  63.         return 'C'
  64.  
  65.     
  66.     def strcoll(a, b):
  67.         return cmp(a, b)
  68.  
  69.     
  70.     def strxfrm(s):
  71.         return s
  72.  
  73.  
  74.  
  75. def _group(s):
  76.     conv = localeconv()
  77.     grouping = conv['grouping']
  78.     if not grouping:
  79.         return (s, 0)
  80.     
  81.     result = ''
  82.     seps = 0
  83.     spaces = ''
  84.     if s[-1] == ' ':
  85.         sp = s.find(' ')
  86.         spaces = s[sp:]
  87.         s = s[:sp]
  88.     
  89.     while s and grouping:
  90.         if grouping[0] == CHAR_MAX:
  91.             break
  92.         elif grouping[0] != 0:
  93.             group = grouping[0]
  94.             grouping = grouping[1:]
  95.         
  96.         if result:
  97.             result = s[-group:] + conv['thousands_sep'] + result
  98.             seps += 1
  99.         else:
  100.             result = s[-group:]
  101.         s = s[:-group]
  102.         if s and s[-1] not in '0123456789':
  103.             return (s + result + spaces, seps)
  104.         
  105.     if not result:
  106.         return (s + spaces, seps)
  107.     
  108.     if s:
  109.         result = s + conv['thousands_sep'] + result
  110.         seps += 1
  111.     
  112.     return (result + spaces, seps)
  113.  
  114.  
  115. def format(f, val, grouping = 0):
  116.     result = f % val
  117.     fields = result.split('.')
  118.     seps = 0
  119.     if grouping:
  120.         (fields[0], seps) = _group(fields[0])
  121.     
  122.     if len(fields) == 2:
  123.         result = fields[0] + localeconv()['decimal_point'] + fields[1]
  124.     elif len(fields) == 1:
  125.         result = fields[0]
  126.     else:
  127.         raise Error, 'Too many decimal points in result string'
  128.     while seps:
  129.         sp = result.find(' ')
  130.         if sp == -1:
  131.             break
  132.         
  133.         result = result[:sp] + result[sp + 1:]
  134.         seps -= 1
  135.     return result
  136.  
  137.  
  138. def str(val):
  139.     return format('%.12g', val)
  140.  
  141.  
  142. def atof(str, func = float):
  143.     ts = localeconv()['thousands_sep']
  144.     if ts:
  145.         s = str.split(ts)
  146.         str = ''.join(s)
  147.     
  148.     dd = localeconv()['decimal_point']
  149.     if dd:
  150.         s = str.split(dd)
  151.         str = '.'.join(s)
  152.     
  153.     return func(str)
  154.  
  155.  
  156. def atoi(str):
  157.     return atof(str, int)
  158.  
  159.  
  160. def _test():
  161.     setlocale(LC_ALL, '')
  162.     s1 = format('%d', 123456789, 1)
  163.     print s1, 'is', atoi(s1)
  164.     s1 = str(3.1400000000000001)
  165.     print s1, 'is', atof(s1)
  166.  
  167. _setlocale = setlocale
  168.  
  169. def normalize(localename):
  170.     fullname = localename.lower()
  171.     if ':' in fullname:
  172.         fullname = fullname.replace(':', '.')
  173.     
  174.     if '.' in fullname:
  175.         (langname, encoding) = fullname.split('.')[:2]
  176.         fullname = langname + '.' + encoding
  177.     else:
  178.         langname = fullname
  179.         encoding = ''
  180.     code = locale_alias.get(fullname, None)
  181.     if code is not None:
  182.         return code
  183.     
  184.     code = locale_alias.get(langname, None)
  185.     if code is not None:
  186.         if '.' in code:
  187.             (langname, defenc) = code.split('.')
  188.         else:
  189.             langname = code
  190.             defenc = ''
  191.         if encoding:
  192.             encoding = encoding_alias.get(encoding, encoding)
  193.         else:
  194.             encoding = defenc
  195.         if encoding:
  196.             return langname + '.' + encoding
  197.         else:
  198.             return langname
  199.     else:
  200.         return localename
  201.  
  202.  
  203. def _parse_localename(localename):
  204.     code = normalize(localename)
  205.     if '.' in code:
  206.         return code.split('.')[:2]
  207.     elif code == 'C':
  208.         return (None, None)
  209.     
  210.     raise ValueError, 'unknown locale: %s' % localename
  211.  
  212.  
  213. def _build_localename(localetuple):
  214.     (language, encoding) = localetuple
  215.     if language is None:
  216.         language = 'C'
  217.     
  218.     if encoding is None:
  219.         return language
  220.     else:
  221.         return language + '.' + encoding
  222.  
  223.  
  224. def getdefaultlocale(envvars = ('LANGUAGE', 'LC_ALL', 'LC_CTYPE', 'LANG')):
  225.     
  226.     try:
  227.         import _locale
  228.         (code, encoding) = _locale._getdefaultlocale()
  229.     except (ImportError, AttributeError):
  230.         pass
  231.  
  232.     if sys.platform == 'win32' and code and code[:2] == '0x':
  233.         code = windows_locale.get(int(code, 0))
  234.     
  235.     return (code, encoding)
  236.     import os
  237.     lookup = os.environ.get
  238.     for variable in envvars:
  239.         localename = lookup(variable, None)
  240.         if localename is not None:
  241.             break
  242.         
  243.     else:
  244.         localename = 'C'
  245.     return _parse_localename(localename)
  246.  
  247.  
  248. def getlocale(category = LC_CTYPE):
  249.     localename = _setlocale(category)
  250.     if category == LC_ALL and ';' in localename:
  251.         raise TypeError, 'category LC_ALL is not supported'
  252.     
  253.     return _parse_localename(localename)
  254.  
  255.  
  256. def setlocale(category, locale = None):
  257.     if locale and type(locale) is not type(''):
  258.         locale = normalize(_build_localename(locale))
  259.     
  260.     return _setlocale(category, locale)
  261.  
  262.  
  263. def resetlocale(category = LC_ALL):
  264.     _setlocale(category, _build_localename(getdefaultlocale()))
  265.  
  266. encoding_alias = {
  267.     '437': 'C',
  268.     'c': 'C',
  269.     'iso8859': 'ISO8859-1',
  270.     '8859': 'ISO8859-1',
  271.     '88591': 'ISO8859-1',
  272.     'ascii': 'ISO8859-1',
  273.     'en': 'ISO8859-1',
  274.     'iso88591': 'ISO8859-1',
  275.     'iso_8859-1': 'ISO8859-1',
  276.     '885915': 'ISO8859-15',
  277.     'iso885915': 'ISO8859-15',
  278.     'iso_8859-15': 'ISO8859-15',
  279.     'iso8859-2': 'ISO8859-2',
  280.     'iso88592': 'ISO8859-2',
  281.     'iso_8859-2': 'ISO8859-2',
  282.     'iso88595': 'ISO8859-5',
  283.     'iso88596': 'ISO8859-6',
  284.     'iso88597': 'ISO8859-7',
  285.     'iso88598': 'ISO8859-8',
  286.     'iso88599': 'ISO8859-9',
  287.     'iso-2022-jp': 'JIS7',
  288.     'jis': 'JIS7',
  289.     'jis7': 'JIS7',
  290.     'sjis': 'SJIS',
  291.     'tis620': 'TACTIS',
  292.     'ajec': 'eucJP',
  293.     'eucjp': 'eucJP',
  294.     'ujis': 'eucJP',
  295.     'utf-8': 'utf',
  296.     'utf8': 'utf',
  297.     'utf8@ucs4': 'utf' }
  298. locale_alias = {
  299.     'american': 'en_US.ISO8859-1',
  300.     'ar': 'ar_AA.ISO8859-6',
  301.     'ar_aa': 'ar_AA.ISO8859-6',
  302.     'ar_sa': 'ar_SA.ISO8859-6',
  303.     'arabic': 'ar_AA.ISO8859-6',
  304.     'bg': 'bg_BG.ISO8859-5',
  305.     'bg_bg': 'bg_BG.ISO8859-5',
  306.     'bulgarian': 'bg_BG.ISO8859-5',
  307.     'c-french': 'fr_CA.ISO8859-1',
  308.     'c': 'C',
  309.     'c_c': 'C',
  310.     'cextend': 'en_US.ISO8859-1',
  311.     'chinese-s': 'zh_CN.eucCN',
  312.     'chinese-t': 'zh_TW.eucTW',
  313.     'croatian': 'hr_HR.ISO8859-2',
  314.     'cs': 'cs_CZ.ISO8859-2',
  315.     'cs_cs': 'cs_CZ.ISO8859-2',
  316.     'cs_cz': 'cs_CZ.ISO8859-2',
  317.     'cz': 'cz_CZ.ISO8859-2',
  318.     'cz_cz': 'cz_CZ.ISO8859-2',
  319.     'czech': 'cs_CS.ISO8859-2',
  320.     'da': 'da_DK.ISO8859-1',
  321.     'da_dk': 'da_DK.ISO8859-1',
  322.     'danish': 'da_DK.ISO8859-1',
  323.     'de': 'de_DE.ISO8859-1',
  324.     'de_at': 'de_AT.ISO8859-1',
  325.     'de_ch': 'de_CH.ISO8859-1',
  326.     'de_de': 'de_DE.ISO8859-1',
  327.     'dutch': 'nl_BE.ISO8859-1',
  328.     'ee': 'ee_EE.ISO8859-4',
  329.     'el': 'el_GR.ISO8859-7',
  330.     'el_gr': 'el_GR.ISO8859-7',
  331.     'en': 'en_US.ISO8859-1',
  332.     'en_au': 'en_AU.ISO8859-1',
  333.     'en_ca': 'en_CA.ISO8859-1',
  334.     'en_gb': 'en_GB.ISO8859-1',
  335.     'en_ie': 'en_IE.ISO8859-1',
  336.     'en_nz': 'en_NZ.ISO8859-1',
  337.     'en_uk': 'en_GB.ISO8859-1',
  338.     'en_us': 'en_US.ISO8859-1',
  339.     'eng_gb': 'en_GB.ISO8859-1',
  340.     'english': 'en_EN.ISO8859-1',
  341.     'english_uk': 'en_GB.ISO8859-1',
  342.     'english_united-states': 'en_US.ISO8859-1',
  343.     'english_us': 'en_US.ISO8859-1',
  344.     'es': 'es_ES.ISO8859-1',
  345.     'es_ar': 'es_AR.ISO8859-1',
  346.     'es_bo': 'es_BO.ISO8859-1',
  347.     'es_cl': 'es_CL.ISO8859-1',
  348.     'es_co': 'es_CO.ISO8859-1',
  349.     'es_cr': 'es_CR.ISO8859-1',
  350.     'es_ec': 'es_EC.ISO8859-1',
  351.     'es_es': 'es_ES.ISO8859-1',
  352.     'es_gt': 'es_GT.ISO8859-1',
  353.     'es_mx': 'es_MX.ISO8859-1',
  354.     'es_ni': 'es_NI.ISO8859-1',
  355.     'es_pa': 'es_PA.ISO8859-1',
  356.     'es_pe': 'es_PE.ISO8859-1',
  357.     'es_py': 'es_PY.ISO8859-1',
  358.     'es_sv': 'es_SV.ISO8859-1',
  359.     'es_uy': 'es_UY.ISO8859-1',
  360.     'es_ve': 'es_VE.ISO8859-1',
  361.     'et': 'et_EE.ISO8859-4',
  362.     'et_ee': 'et_EE.ISO8859-4',
  363.     'fi': 'fi_FI.ISO8859-1',
  364.     'fi_fi': 'fi_FI.ISO8859-1',
  365.     'finnish': 'fi_FI.ISO8859-1',
  366.     'fr': 'fr_FR.ISO8859-1',
  367.     'fr_be': 'fr_BE.ISO8859-1',
  368.     'fr_ca': 'fr_CA.ISO8859-1',
  369.     'fr_ch': 'fr_CH.ISO8859-1',
  370.     'fr_fr': 'fr_FR.ISO8859-1',
  371.     'fre_fr': 'fr_FR.ISO8859-1',
  372.     'french': 'fr_FR.ISO8859-1',
  373.     'french_france': 'fr_FR.ISO8859-1',
  374.     'ger_de': 'de_DE.ISO8859-1',
  375.     'german': 'de_DE.ISO8859-1',
  376.     'german_germany': 'de_DE.ISO8859-1',
  377.     'greek': 'el_GR.ISO8859-7',
  378.     'hebrew': 'iw_IL.ISO8859-8',
  379.     'hr': 'hr_HR.ISO8859-2',
  380.     'hr_hr': 'hr_HR.ISO8859-2',
  381.     'hu': 'hu_HU.ISO8859-2',
  382.     'hu_hu': 'hu_HU.ISO8859-2',
  383.     'hungarian': 'hu_HU.ISO8859-2',
  384.     'icelandic': 'is_IS.ISO8859-1',
  385.     'id': 'id_ID.ISO8859-1',
  386.     'id_id': 'id_ID.ISO8859-1',
  387.     'is': 'is_IS.ISO8859-1',
  388.     'is_is': 'is_IS.ISO8859-1',
  389.     'iso-8859-1': 'en_US.ISO8859-1',
  390.     'iso-8859-15': 'en_US.ISO8859-15',
  391.     'iso8859-1': 'en_US.ISO8859-1',
  392.     'iso8859-15': 'en_US.ISO8859-15',
  393.     'iso_8859_1': 'en_US.ISO8859-1',
  394.     'iso_8859_15': 'en_US.ISO8859-15',
  395.     'it': 'it_IT.ISO8859-1',
  396.     'it_ch': 'it_CH.ISO8859-1',
  397.     'it_it': 'it_IT.ISO8859-1',
  398.     'italian': 'it_IT.ISO8859-1',
  399.     'iw': 'iw_IL.ISO8859-8',
  400.     'iw_il': 'iw_IL.ISO8859-8',
  401.     'ja': 'ja_JP.eucJP',
  402.     'ja.jis': 'ja_JP.JIS7',
  403.     'ja.sjis': 'ja_JP.SJIS',
  404.     'ja_jp': 'ja_JP.eucJP',
  405.     'ja_jp.ajec': 'ja_JP.eucJP',
  406.     'ja_jp.euc': 'ja_JP.eucJP',
  407.     'ja_jp.eucjp': 'ja_JP.eucJP',
  408.     'ja_jp.iso-2022-jp': 'ja_JP.JIS7',
  409.     'ja_jp.jis': 'ja_JP.JIS7',
  410.     'ja_jp.jis7': 'ja_JP.JIS7',
  411.     'ja_jp.mscode': 'ja_JP.SJIS',
  412.     'ja_jp.sjis': 'ja_JP.SJIS',
  413.     'ja_jp.ujis': 'ja_JP.eucJP',
  414.     'japan': 'ja_JP.eucJP',
  415.     'japanese': 'ja_JP.SJIS',
  416.     'japanese-euc': 'ja_JP.eucJP',
  417.     'japanese.euc': 'ja_JP.eucJP',
  418.     'jp_jp': 'ja_JP.eucJP',
  419.     'ko': 'ko_KR.eucKR',
  420.     'ko_kr': 'ko_KR.eucKR',
  421.     'ko_kr.euc': 'ko_KR.eucKR',
  422.     'korean': 'ko_KR.eucKR',
  423.     'lt': 'lt_LT.ISO8859-4',
  424.     'lv': 'lv_LV.ISO8859-4',
  425.     'mk': 'mk_MK.ISO8859-5',
  426.     'mk_mk': 'mk_MK.ISO8859-5',
  427.     'nl': 'nl_NL.ISO8859-1',
  428.     'nl_be': 'nl_BE.ISO8859-1',
  429.     'nl_nl': 'nl_NL.ISO8859-1',
  430.     'no': 'no_NO.ISO8859-1',
  431.     'no_no': 'no_NO.ISO8859-1',
  432.     'norwegian': 'no_NO.ISO8859-1',
  433.     'pl': 'pl_PL.ISO8859-2',
  434.     'pl_pl': 'pl_PL.ISO8859-2',
  435.     'polish': 'pl_PL.ISO8859-2',
  436.     'portuguese': 'pt_PT.ISO8859-1',
  437.     'portuguese_brazil': 'pt_BR.ISO8859-1',
  438.     'posix': 'C',
  439.     'posix-utf2': 'C',
  440.     'pt': 'pt_PT.ISO8859-1',
  441.     'pt_br': 'pt_BR.ISO8859-1',
  442.     'pt_pt': 'pt_PT.ISO8859-1',
  443.     'ro': 'ro_RO.ISO8859-2',
  444.     'ro_ro': 'ro_RO.ISO8859-2',
  445.     'ru': 'ru_RU.ISO8859-5',
  446.     'ru_ru': 'ru_RU.ISO8859-5',
  447.     'rumanian': 'ro_RO.ISO8859-2',
  448.     'russian': 'ru_RU.ISO8859-5',
  449.     'serbocroatian': 'sh_YU.ISO8859-2',
  450.     'sh': 'sh_YU.ISO8859-2',
  451.     'sh_hr': 'sh_HR.ISO8859-2',
  452.     'sh_sp': 'sh_YU.ISO8859-2',
  453.     'sh_yu': 'sh_YU.ISO8859-2',
  454.     'sk': 'sk_SK.ISO8859-2',
  455.     'sk_sk': 'sk_SK.ISO8859-2',
  456.     'sl': 'sl_CS.ISO8859-2',
  457.     'sl_cs': 'sl_CS.ISO8859-2',
  458.     'sl_si': 'sl_SI.ISO8859-2',
  459.     'slovak': 'sk_SK.ISO8859-2',
  460.     'slovene': 'sl_CS.ISO8859-2',
  461.     'sp': 'sp_YU.ISO8859-5',
  462.     'sp_yu': 'sp_YU.ISO8859-5',
  463.     'spanish': 'es_ES.ISO8859-1',
  464.     'spanish_spain': 'es_ES.ISO8859-1',
  465.     'sr_sp': 'sr_SP.ISO8859-2',
  466.     'sv': 'sv_SE.ISO8859-1',
  467.     'sv_se': 'sv_SE.ISO8859-1',
  468.     'swedish': 'sv_SE.ISO8859-1',
  469.     'th_th': 'th_TH.TACTIS',
  470.     'tr': 'tr_TR.ISO8859-9',
  471.     'tr_tr': 'tr_TR.ISO8859-9',
  472.     'turkish': 'tr_TR.ISO8859-9',
  473.     'univ': 'en_US.utf',
  474.     'universal': 'en_US.utf',
  475.     'zh': 'zh_CN.eucCN',
  476.     'zh_cn': 'zh_CN.eucCN',
  477.     'zh_cn.big5': 'zh_TW.eucTW',
  478.     'zh_cn.euc': 'zh_CN.eucCN',
  479.     'zh_tw': 'zh_TW.eucTW',
  480.     'zh_tw.euc': 'zh_TW.eucTW' }
  481. windows_locale = {
  482.     1028: 'zh_TW',
  483.     2052: 'zh_CN',
  484.     1030: 'da_DK',
  485.     1043: 'nl_NL',
  486.     1033: 'en_US',
  487.     2057: 'en_UK',
  488.     3081: 'en_AU',
  489.     4105: 'en_CA',
  490.     5129: 'en_NZ',
  491.     6153: 'en_IE',
  492.     7177: 'en_ZA',
  493.     1035: 'fi_FI',
  494.     1036: 'fr_FR',
  495.     2060: 'fr_BE',
  496.     3084: 'fr_CA',
  497.     4108: 'fr_CH',
  498.     1031: 'de_DE',
  499.     1032: 'el_GR',
  500.     1037: 'iw_IL',
  501.     1039: 'is_IS',
  502.     1040: 'it_IT',
  503.     1041: 'ja_JA',
  504.     1044: 'no_NO',
  505.     2070: 'pt_PT',
  506.     3082: 'es_ES',
  507.     1089: 'sw_KE',
  508.     1053: 'sv_SE',
  509.     2077: 'sv_FI',
  510.     1055: 'tr_TR' }
  511.  
  512. def _print_locale():
  513.     categories = { }
  514.     
  515.     def _init_categories(categories = categories):
  516.         for k, v in globals().items():
  517.             if k[:3] == 'LC_':
  518.                 categories[k] = v
  519.             
  520.         
  521.  
  522.     _init_categories()
  523.     del categories['LC_ALL']
  524.     print 'Locale defaults as determined by getdefaultlocale():'
  525.     print '-' * 72
  526.     (lang, enc) = getdefaultlocale()
  527.     print 'Language: ',
  528.     if not lang:
  529.         pass
  530.     print '(undefined)'
  531.     print 'Encoding: ',
  532.     if not enc:
  533.         pass
  534.     print '(undefined)'
  535.     print 
  536.     print 'Locale settings on startup:'
  537.     print '-' * 72
  538.     for name, category in categories.items():
  539.         print name, '...'
  540.         (lang, enc) = getlocale(category)
  541.         print '   Language: ',
  542.         if not lang:
  543.             pass
  544.         print '(undefined)'
  545.         print '   Encoding: ',
  546.         if not enc:
  547.             pass
  548.         print '(undefined)'
  549.         print 
  550.     
  551.     print 
  552.     print 'Locale settings after calling resetlocale():'
  553.     print '-' * 72
  554.     resetlocale()
  555.     for name, category in categories.items():
  556.         print name, '...'
  557.         (lang, enc) = getlocale(category)
  558.         print '   Language: ',
  559.         if not lang:
  560.             pass
  561.         print '(undefined)'
  562.         print '   Encoding: ',
  563.         if not enc:
  564.             pass
  565.         print '(undefined)'
  566.         print 
  567.     
  568.     
  569.     try:
  570.         setlocale(LC_ALL, '')
  571.     except:
  572.         print 'NOTE:'
  573.         print 'setlocale(LC_ALL, "") does not support the default locale'
  574.         print 'given in the OS environment variables.'
  575.  
  576.     print 
  577.     print 'Locale settings after calling setlocale(LC_ALL, ""):'
  578.     print '-' * 72
  579.     for name, category in categories.items():
  580.         print name, '...'
  581.         (lang, enc) = getlocale(category)
  582.         print '   Language: ',
  583.         if not lang:
  584.             pass
  585.         print '(undefined)'
  586.         print '   Encoding: ',
  587.         if not enc:
  588.             pass
  589.         print '(undefined)'
  590.         print 
  591.     
  592.  
  593.  
  594. try:
  595.     LC_MESSAGES
  596. except:
  597.     pass
  598.  
  599. __all__.append('LC_MESSAGES')
  600. if __name__ == '__main__':
  601.     print 'Locale aliasing:'
  602.     print 
  603.     _print_locale()
  604.     print 
  605.     print 'Number formatting:'
  606.     print 
  607.     _test()
  608.  
  609.