2 Helper Module for Locale settings
4 This module is based on a ROX module (LGPL):
6 http://cvs.sourceforge.net/viewcvs.py/rox/ROX-Lib2/python/rox/i18n.py?rev=1.3&view=log
10 from locale import normalize
12 regex = "(\[([a-zA-Z]+)(_[a-zA-Z]+)?(\.[a-zA-Z\-0-9]+)?(@[a-zA-Z]+)?\])?"
14 def _expand_lang(locale):
15 locale = normalize(locale)
16 COMPONENT_CODESET = 1 << 0
17 COMPONENT_MODIFIER = 1 << 1
18 COMPONENT_TERRITORY = 1 << 2
19 # split up the locale into its base components
21 pos = locale.find('@')
23 modifier = locale[pos:]
25 mask |= COMPONENT_MODIFIER
28 pos = locale.find('.')
32 pos = locale.find('_')
34 territory = locale[pos:]
36 mask |= COMPONENT_TERRITORY
41 for i in range(mask+1):
42 if not (i & ~mask): # if all components for this combo exist ...
44 if i & COMPONENT_TERRITORY: val += territory
45 if i & COMPONENT_CODESET: val += codeset
46 if i & COMPONENT_MODIFIER: val += modifier
51 def expand_languages(languages=None):
52 # Get some reasonable defaults for arguments that were not supplied
55 for envar in ('LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG'):
56 val = os.environ.get(envar)
58 languages = val.split(':')
60 #if 'C' not in languages:
61 # languages.append('C')
63 # now normalize and expand the languages
65 for lang in languages:
66 for nelang in _expand_lang(lang):
67 if nelang not in nelangs:
68 nelangs.append(nelang)
71 def update(language=None):
74 langs = expand_languages([language])
76 langs = expand_languages()