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