Ticket #4449: profile_babel.py

File profile_babel.py, 1.3 KB (added by manuq, 11 years ago)
Line 
1import sys
2import subprocess
3
4from babel import Locale as BabelLocale
5from babel.core import UnknownLocaleError as BabelUnknownLocaleError
6
7
8def 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
20def 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
36if __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