1 | import sys |
---|
2 | import subprocess |
---|
3 | |
---|
4 | from babel import Locale as BabelLocale |
---|
5 | from babel.core import UnknownLocaleError as BabelUnknownLocaleError |
---|
6 | |
---|
7 | |
---|
8 | def get_locale_name_babel(code): |
---|
9 | language, country = code[:-(len('.utf8'))].split('_') |
---|
10 | try: |
---|
11 | locale = BabelLocale(language, country) |
---|
12 | except BabelUnknownLocaleError: |
---|
13 | sys.stderr.write("babel raised BabelUnknownLocaleError for %s\n" % code) |
---|
14 | return u"Unknown (Unknown)" |
---|
15 | if locale.display_name is None: |
---|
16 | sys.stderr.write("babel got display_name = None for %s\n" % code) |
---|
17 | return u"Unknown (Unknown)" |
---|
18 | return locale.display_name |
---|
19 | |
---|
20 | def read_all_codes(): |
---|
21 | fdp = subprocess.Popen(['locale', '-a'], stdout=subprocess.PIPE) |
---|
22 | lines = fdp.stdout.read().split('\n') |
---|
23 | codes = [] |
---|
24 | |
---|
25 | for line in lines: |
---|
26 | if line.endswith('utf8'): |
---|
27 | codes.append(line) |
---|
28 | |
---|
29 | #FIXME: This is a temporary workaround for locales that are essential to |
---|
30 | # OLPC, but are not in Glibc yet. |
---|
31 | for code in ['ht_HT.utf8', 'fa_AF.utf8', 'ps_AF.utf8']: |
---|
32 | codes.append(code) |
---|
33 | |
---|
34 | return codes |
---|
35 | |
---|
36 | if __name__ == '__main__': |
---|
37 | available_codes = read_all_codes() |
---|
38 | |
---|
39 | names_babel = {} |
---|
40 | for code in available_codes: |
---|
41 | locale_name = get_locale_name_babel(code) |
---|
42 | names_babel[code] = locale_name |
---|