summaryrefslogtreecommitdiff
path: root/Tools/i18n
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2014-10-01 23:42:30 +0300
committerSerhiy Storchaka <storchaka@gmail.com>2014-10-01 23:42:30 +0300
commite2ea2902ba92485d5b2ab9fa2b8c9f7ac5221aab (patch)
tree73149ab5a3fd2713b8279de86f87ccc4a65a1dce /Tools/i18n
parentcca3dd4a3755f11ef6d00fcb54258fdc89e70ce3 (diff)
downloadcpython-e2ea2902ba92485d5b2ab9fa2b8c9f7ac5221aab.tar.gz
Issue #20079: Added locales supported in glibc 2.18 to locale alias table.
The makelocalealias.py script now can parse the SUPPORTED file from glibc sources and supports command line options for source paths.
Diffstat (limited to 'Tools/i18n')
-rwxr-xr-xTools/i18n/makelocalealias.py45
1 files changed, 44 insertions, 1 deletions
diff --git a/Tools/i18n/makelocalealias.py b/Tools/i18n/makelocalealias.py
index 10887ce338..ca69daa7a8 100755
--- a/Tools/i18n/makelocalealias.py
+++ b/Tools/i18n/makelocalealias.py
@@ -8,6 +8,7 @@
"""
import locale
import sys
+_locale = locale
# Location of the alias file
LOCALE_ALIAS = '/usr/share/X11/locale/locale.alias'
@@ -51,6 +52,37 @@ def parse(filename):
data[locale] = alias
return data
+def parse_glibc_supported(filename):
+
+ with open(filename, encoding='latin1') as f:
+ lines = list(f)
+ data = {}
+ for line in lines:
+ line = line.strip()
+ if not line:
+ continue
+ if line[:1] == '#':
+ continue
+ if '/' not in line:
+ continue
+ line = line.rstrip('\\').rstrip()
+ alias, _, alias_encoding = line.partition('/')
+ # Lower-case locale
+ locale = alias.lower()
+ # Normalize encoding, if given
+ if '.' in locale:
+ lang, encoding = locale.split('.')[:2]
+ encoding = encoding.replace('-', '')
+ encoding = encoding.replace('_', '')
+ locale = lang + '.' + encoding
+ # Add an encoding to alias
+ alias, _, modifier = alias.partition('@')
+ alias = _locale._replace_encoding(alias, alias_encoding)
+ if modifier and not (modifier == 'euro' and alias_encoding == 'ISO-8859-15'):
+ alias += '@' + modifier
+ data[locale] = alias
+ return data
+
def pprint(data):
items = sorted(data.items())
for k, v in items:
@@ -92,8 +124,19 @@ def check(data):
return errors
if __name__ == '__main__':
+ import argparse
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--locale-alias', default=LOCALE_ALIAS,
+ help='location of the X11 alias file '
+ '(default: %a)' % LOCALE_ALIAS)
+ parser.add_argument('--glibc-supported',
+ help='location of the glibc SUPPORTED locales file')
+ args = parser.parse_args()
+
data = locale.locale_alias.copy()
- data.update(parse(LOCALE_ALIAS))
+ if args.glibc_supported:
+ data.update(parse_glibc_supported(args.glibc_supported))
+ data.update(parse(args.locale_alias))
data = optimize(data)
print_differences(data, locale.locale_alias)
print()