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