def initLocale( self ): self.log.info( 'initLocale ----------------------------------------' ) # init the locale if sys.platform == 'win32': self.log.info( 'setlocale for windows' ) # on windows this will set to the default locale.setlocale( locale.LC_ALL, '' ) return if sys.platform == 'darwin': # on Mac this will set to the default # note: cannot find any docs on this to confirm its supported if '__CF_USER_TEXT_ENCODING' in os.environ: self.log.info( 'setlocale from __CF_USER_TEXT_ENCODING %s' % os.environ['__CF_USER_TEXT_ENCODING'] ) lang_code = os.environ['__CF_USER_TEXT_ENCODING'].split( ':', 1 )[1] locale.setlocale( locale.LC_ALL, self._all_mac_locales.get( lang_code, 'en_GB.utf-8' ) ) return # generic Posix locale code if 'LC_ALL' in os.environ: try: self.log.info( 'setlocale from LC_ALL %s' % os.environ['LC_ALL'] ) locale.setlocale( locale.LC_ALL, os.environ['LC_ALL'] ) return except locale.Error, e: self.log.info( 'setlocale LC_ALL failed - %r' % (e,) ) pass else: self.log.info( 'LC_ALL is not set' ) for name in sorted( os.environ.keys() ): self.log.info( 'Env %s=%s' % (name, os.environ[ name ]) ) language_code, encoding = locale.getdefaultlocale() self.log.info( 'getdefaultlocale -> %s, %s' % (language_code, encoding) ) if language_code is None: language_code = 'en_US' if encoding is None: encoding = 'UTF-8' if encoding.lower() == 'utf': encoding = 'UTF-8' try: # setlocale fails when params it does not understand are passed self.log.info( 'setlocale language_code, encoding -> %s, %s' % (language_code, encoding) ) locale.setlocale( locale.LC_ALL, '%s.%s' % (language_code, encoding) ) except locale.Error, e: self.log.info( 'setlocale language_code - %r' % (e,) ) try: # force a locale that will work self.log.info( 'setlocale set to en_US.UTF-8' ) locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' ) except locale.Error, e: self.log.info( 'setlocale set to en_US.UTF-8 - %r' % (e,) ) locale.setlocale( locale.LC_ALL, 'C' )