summaryrefslogtreecommitdiffstats
path: root/Tools/i18n
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/i18n')
-rwxr-xr-xTools/i18n/makelocalealias.py49
1 files changed, 44 insertions, 5 deletions
diff --git a/Tools/i18n/makelocalealias.py b/Tools/i18n/makelocalealias.py
index 10887ce..980465b 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'
@@ -44,10 +45,37 @@ def parse(filename):
encoding = encoding.replace('-', '')
encoding = encoding.replace('_', '')
locale = lang + '.' + encoding
- if encoding.lower() == 'utf8':
- # Ignore UTF-8 mappings - this encoding should be
- # available for all locales
- continue
+ 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
@@ -92,8 +120,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()