소스 검색

For GUI language switching, use only languages with present translations. Don't allow to switch to unsupported locale.

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@52517 15284696-431f-4ddb-bdfa-cd5b030d7da7
Maris Nartiss 12 년 전
부모
커밋
dd3a51aa1d
2개의 변경된 파일25개의 추가작업 그리고 31개의 파일을 삭제
  1. 3 17
      gui/wxpython/core/settings.py
  2. 22 14
      lib/init/grass.py

+ 3 - 17
gui/wxpython/core/settings.py

@@ -54,24 +54,10 @@ class Settings:
     def _generateLocale(self):
     def _generateLocale(self):
         """!Generate locales
         """!Generate locales
         """
         """
-        # collect available locales
-        self.locs = list(set(locale.locale_alias.values()))
-        self.locs.append('en_GB.UTF-8')
-        self.locs.sort()
-        
-        try:
-            loc = list(locale.getdefaultlocale())
-        except ValueError, e:
-            sys.stderr.write(_('ERROR: %s\n') % str(e))
-            return 'C'
-        
-        if loc[1] == 'UTF8':
-            loc[1] = 'UTF-8'
-        code_loc = "%s.%s" % (loc[0], loc[1])
-        if code_loc in self.locs:
-            return code_loc
+        import os
         
         
-        return 'C'
+        self.locs = os.listdir(os.path.join(os.environ['GISBASE'], 'locale'))
+        self.locs.sort()
         
         
     def _defaultSettings(self):
     def _defaultSettings(self):
         """!Define default settings
         """!Define default settings

+ 22 - 14
lib/init/grass.py

@@ -294,15 +294,6 @@ def read_gui():
         warning(_("GUI <%s> not supported in this version") % grass_gui)
         warning(_("GUI <%s> not supported in this version") % grass_gui)
         grass_gui = default_gui
         grass_gui = default_gui
     
     
-def get_locale():
-    global locale
-    locale = None
-    for var in ['LC_ALL', 'LC_MESSAGES', 'LANG', 'LANGUAGE']: 
-        loc = os.getenv(var) 
-        if loc: 
-            locale = loc[0:2] 
-        return 
-
 def path_prepend(dir, var):
 def path_prepend(dir, var):
     path = os.getenv(var)
     path = os.getenv(var)
     if path:
     if path:
@@ -647,6 +638,7 @@ def load_gisrc():
     location = os.path.join(gisdbase, location_name, mapset)
     location = os.path.join(gisdbase, location_name, mapset)
 
 
 def set_env_from_gisrc():
 def set_env_from_gisrc():
+    import locale
     kv = read_gisrc()
     kv = read_gisrc()
     
     
     ### addons
     ### addons
@@ -658,8 +650,27 @@ def set_env_from_gisrc():
             os.environ['GRASS_ADDON_PATH'] = addon_path
             os.environ['GRASS_ADDON_PATH'] = addon_path
     
     
     ### language
     ### language
-    if kv.get('LANG'):
-        os.environ['LANGUAGE'] = kv.get('LANG')
+    language = kv.get('LANG')
+    if language:
+        language = language.split('.')[0] # Split off ignored .encoding part if present
+        try:
+            locale.setlocale(locale.LC_MESSAGES, 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)
+            except:
+                # If we got so far, provided locale is not supported on this system
+                # C is safe failback.
+                print "Failed to set LC_MESSAGES to %s. Giving up." % language
+                language = 'C'
+        os.environ['LANGUAGE'] = language
+        os.environ['LC_MESSAGES'] = 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)
     
     
 def check_lock():
 def check_lock():
     global lockfile
     global lockfile
@@ -1069,9 +1080,6 @@ read_gui()
 # Get environmental variables from gisenv variables
 # Get environmental variables from gisenv variables
 set_env_from_gisrc()
 set_env_from_gisrc()
 
 
-# Get Locale name
-get_locale()
-
 # Set PATH, PYTHONPATH
 # Set PATH, PYTHONPATH
 set_paths()
 set_paths()