diff --git a/Tools/i18n/makelocalealias.py b/Tools/i18n/makelocalealias.py
new file mode 100644
index 0000000..a52bc28
--- /dev/null
+++ b/Tools/i18n/makelocalealias.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+"""
+    Convert the X11 locale.alias file into a mapping dictionary suitable
+    for locale.py.
+
+    Written by Marc-Andre Lemburg <mal@genix.com>, 2004-12-10.
+
+"""
+import locale
+
+# Location of the alias file
+LOCALE_ALIAS = '/usr/lib/X11/locale/locale.alias'
+
+def parse(filename):
+
+    f = open(filename)
+    lines = f.read().splitlines()
+    data = {}
+    for line in lines:
+        line = line.strip()
+        if not line:
+            continue
+        if line[:1] == '#':
+            continue
+        locale, alias = line.split()
+        # Strip ':'
+        if locale[-1] == ':':
+            locale = locale[:-1]
+        # Lower-case locale
+        locale = locale.lower()
+        # Ignore one letter locale mappings (except for 'c')
+        if len(locale) == 1 and locale != 'c':
+            continue
+        # Normalize encoding, if given
+        if '.' in locale:
+            lang, encoding = locale.split('.')[:2]
+            encoding = encoding.replace('-', '')
+            encoding = encoding.replace('_', '')
+            locale = lang + '.' + encoding
+        data[locale] = alias
+    return data
+
+def pprint(data):
+
+    items = data.items()
+    items.sort()
+    for k,v in items:
+        print '    %-40s%r,' % ('%r:' % k, v)
+
+def print_differences(data, olddata):
+
+    items = olddata.items()
+    items.sort()
+    for k, v in items:
+        if not data.has_key(k):
+            print '#    removed %r' % k
+        elif olddata[k] != data[k]:
+            print '#    updated %r -> %r to %r' % \
+                  (k, olddata[k], data[k])
+        # Additions are not mentioned
+    
+if __name__ == '__main__':
+    data = locale.locale_alias.copy()
+    data.update(parse(LOCALE_ALIAS))
+    print_differences(data, locale.locale_alias)
+    print
+    print 'locale_alias = {'
+    pprint(data)
+    print '}'
+    
