|
@@ -653,25 +653,40 @@ def set_env_from_gisrc():
|
|
|
language = kv.get('LANG')
|
|
|
if language:
|
|
|
language = language.split('.')[0] # Split off ignored .encoding part if present
|
|
|
+ orig_language = language
|
|
|
try:
|
|
|
- locale.setlocale(locale.LC_MESSAGES, language)
|
|
|
+ locale.setlocale(locale.LC_ALL, language)
|
|
|
except:
|
|
|
try:
|
|
|
# Locale lang.encoding might be missing. Let's try UTF-8 encoding before giving up
|
|
|
# as on Linux systems lang.UTF-8 locales are more common than legacy ISO-8859 ones.
|
|
|
language = locale.normalize('%s.UTF-8' % language)
|
|
|
- locale.setlocale(locale.LC_MESSAGES, language)
|
|
|
+ locale.setlocale(locale.LC_ALL, language)
|
|
|
except:
|
|
|
# If we got so far, provided locale is not supported on this system
|
|
|
- print "Failed to set LC_MESSAGES to %s as defined by g.gisenv LANG parameter" % language
|
|
|
+ print "Failed to set LC_ALL to %s" % language
|
|
|
default_locale = locale.getdefaultlocale()
|
|
|
if default_locale[0]:
|
|
|
language = default_locale[0]
|
|
|
else:
|
|
|
language = 'C'
|
|
|
- os.environ['LANGUAGE'] = language
|
|
|
- os.environ['LANG'] = language
|
|
|
- os.environ['LC_MESSAGES'] = language
|
|
|
+
|
|
|
+ # Set up environment for subprocesses
|
|
|
+ for lc in ('LC_CTYPE', 'LC_MESSAGES', 'LC_TIME', 'LC_COLLATE', 'LC_MONETARY', 'LC_PAPER', 'LC_NAME', 'LC_ADDRESS', 'LC_TELEPHONE', 'LC_MEASUREMENT', 'LC_IDENTIFICATION'):
|
|
|
+ os.environ[lc] = language
|
|
|
+
|
|
|
+ # Some code in GRASS might not like other decimal separators than .
|
|
|
+ # Other potential sources for problems are: LC_TIME LC_CTYPE
|
|
|
+ locale.setlocale(locale.LC_NUMERIC, 'C')
|
|
|
+ os.environ['LC_NUMERIC'] = 'C'
|
|
|
+ if os.getenv('LC_ALL'):
|
|
|
+ del os.environ['LC_ALL'] # Remove LC_ALL to not override LC_NUMERIC
|
|
|
+
|
|
|
+ # Even if setting locale has failed, let's set LANG in a hope, that UI will use it
|
|
|
+ # GRASS texts will be in selected language, system messages (i.e. OK, Cancel etc.) - in system default language
|
|
|
+ os.environ['LANGUAGE'] = orig_language
|
|
|
+ os.environ['LANG'] = orig_language
|
|
|
+
|
|
|
# Calling gettext.install twice seems to allow to see also localized startup messages
|
|
|
# Black magic ;)
|
|
|
gettext.install('grasslibs', os.path.join(gisbase, 'locale'), unicode = True)
|