Changeset 59163
- Timestamp:
- Mar 2, 2014, 6:00:52 AM (10 years ago)
- File:
-
- 1 edited
-
grass/trunk/lib/init/grass.py (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
grass/trunk/lib/init/grass.py
r59106 r59163 494 494 495 495 def grass_intro(): 496 intro = r"""496 intro = _(r""" 497 497 WELCOME TO GRASS %s 498 498 … … 506 506 3) heck the GRASS GIS web pages for supporting mailing lists and more: 507 507 http://grass.osgeo.org 508 """ % grass_version508 """) % grass_version 509 509 sys.stderr.write(intro) 510 510 … … 754 754 755 755 def set_language(): 756 # This function is used to override system default language and locale 757 # Such override can be requested only from wxGUI 758 # An override if user has provided correct environmental variables as 759 # LC_MESSAGES or LANG is not necessary. 760 # Unfortunately currently a working solution for Windows is lacking 761 # thus it always on Vista and XP will print an error. 762 # See discussion for Windows not following its own documentation and 763 # not accepting ISO codes as valid locale identifiers http://bugs.python.org/issue10466 756 764 import locale 757 758 language = os.getenv('LANG') 759 if not language: 765 766 # Override value is stored in wxGUI preferences file. 767 # As it's the only thing required, we'll just grep it out. 768 try: 769 fd = open(os.path.join(grass_config_dir, 'wx'), 'r') 770 except: 771 # Language override has not been defined or is inaccessible 760 772 return 761 762 language = language.split('.')[0] # Split off ignored .encoding part if present 763 orig_language = language 773 for line in fd: 774 if re.search('^language', line): 775 line = line.rstrip('%s' % os.linesep) 776 language = ''.join(line.split(';')[-1:]) 777 break 778 if language == 'None': 779 # Language override is disabled (system language specified) 780 return 781 782 warning("A language override has been requested. Trying to switch GRASS into '%s'..." % language) 783 784 # Even if setting locale will fail, let's set LANG in a hope, 785 # that UI will use it GRASS texts will be in selected language, 786 # system messages (i.e. OK, Cancel etc.) - in system default 787 # language 788 os.environ['LANGUAGE'] = language 789 os.environ['LANG'] = language 790 764 791 try: 765 792 locale.setlocale(locale.LC_ALL, language) 766 793 except locale.Error, e: 767 if sys.platform != 'win32': # Don't try on Windows, it will probably not work 768 # sys.stderr.write("Failed to set LC_ALL to %s (%s)\n" % (language, e)) 794 try: 795 # Locale lang.encoding might be missing. Let's try 796 # UTF-8 encoding before giving up as on Linux systems 797 # lang.UTF-8 locales are more common than legacy 798 # ISO-8859 ones. 799 language = locale.normalize('%s.UTF-8' % (language)) 800 locale.setlocale(locale.LC_ALL, language) 801 except locale.Error, e: 802 # The last attempt... 769 803 try: 770 # Locale lang.encoding might be missing. Let's try 771 # UTF-8 encoding before giving up as on Linux systems 772 # lang.UTF-8 locales are more common than legacy 773 # ISO-8859 ones. 774 language = locale.normalize('%s.UTF-8' % (language)) 804 language = locale.normalize('%s.%s' % (language, locale.getpreferredencoding())) 775 805 locale.setlocale(locale.LC_ALL, language) 776 806 except locale.Error, e: 777 # If we got so far, provided locale is not supported807 # If we got so far, attempts to set up language and locale have failed 778 808 # on this system 779 sys.stderr.write("Failed to set LC_ALL to %s (%s)\n" % (language, e)) 780 ### locale.getdefaultlocale() is probably related to gettext? 781 # try: 782 # default_locale = locale.getdefaultlocale() 783 # except: 784 # default_locale = None 785 # if default_locale and default_locale[0]: 786 # language = default_locale[0] 787 # else: 788 language = 'C' 809 sys.stderr.write("Failed to enforce user specified language '%s' with error: '%s'\n" % (language, e)) 810 sys.stderr.write("A LANGUAGE environmental variable has been set.\nPart of messages will be displayed in the requested language.\n") 811 return 789 812 790 813 # Set up environment for subprocesses … … 801 824 del os.environ['LC_ALL'] # Remove LC_ALL to not override LC_NUMERIC 802 825 803 # Even if setting locale has failed, let's set LANG in a hope, 804 # that UI will use it GRASS texts will be in selected language, 805 # system messages (i.e. OK, Cancel etc.) - in system default 806 # language 807 os.environ['LANGUAGE'] = orig_language 808 os.environ['LANG'] = orig_language 809 810 # Calling gettext.install twice seems to allow to see also 811 # localized startup messages Black magic ;) 826 # From now on enforce the new language 812 827 gettext.install('grasslibs', os.path.join(gisbase, 'locale'), unicode=True) 813 828 … … 1258 1273 parse_cmdline() 1259 1274 1275 # Set language 1276 # This has to be called before any _() function call! 1277 # Subsequent functions are using _() calls and 1278 # thus must be called only after Language has been set. 1279 set_language() 1280 1260 1281 # Create the temporary directory and session grassrc file 1261 1282 create_tmp() … … 1320 1341 else: 1321 1342 non_interactive(args[0]) 1322 1323 # Set language1324 set_language()1325 1343 1326 1344 # User selects LOCATION and MAPSET if not set
Note:
See TracChangeset
for help on using the changeset viewer.
