Edgewall Software

Ticket #9439: 9439-log-missing-r10145.patch

File 9439-log-missing-r10145.patch, 3.9 KB (added by rblank, 20 months ago)

Log missing locale data.

  • trac/admin/console.py

    diff --git a/trac/admin/console.py b/trac/admin/console.py
    a b Type: '?' or 'help' for help on command 
    169169        # fixup language according to env settings 
    170170        if has_babel: 
    171171            default = env.config.get('trac', 'default_language', '') 
    172             negotiated = get_negotiated_locale([LANG, default]) 
     172            negotiated = get_negotiated_locale([LANG, default], env.log) 
    173173            if negotiated: 
    174                 translation.activate(negotiated) 
     174                translation.activate(negotiated, env.path) 
    175175         
    176176    ## 
    177177    ## Utility methods 
  • trac/prefs/web_ui.py

    diff --git a/trac/prefs/web_ui.py b/trac/prefs/web_ui.py
    a b class PreferencesModule(Component): 
    106106        } 
    107107 
    108108        if Locale: 
    109             locales = map(Locale.parse, get_available_locales()) 
     109            locales = map(Locale.parse, get_available_locales(self.log)) 
    110110            languages = sorted([(str(locale).replace('_','-'), 
    111111                                 locale.display_name) for locale in locales]) 
    112112            data['locales'] = locales 
  • trac/util/translation.py

    diff --git a/trac/util/translation.py b/trac/util/translation.py
    a b try: 
    143143                locale_dir = pkg_resources.resource_filename('trac', 'locale') 
    144144            except pkg_resources.ExtractionError: 
    145145                return # delay extraction 
    146             except KeyError: 
    147                 return # No locale data in egg 
     146            except Exception: 
     147                return 
    148148            t = Translations.load(locale_dir, locale or 'en_US') 
    149149            if not t or t.__class__ is NullTranslations: 
    150150                t = self._null_translations 
    try: 
    325325    def get_translations(): 
    326326        return translations 
    327327 
    328     def get_available_locales(): 
     328    def get_available_locales(log=None): 
    329329        """Return a list of locale identifiers of the locales for which 
    330330        translations are available. 
    331331        """ 
    332         return [dirname for dirname 
    333                 in pkg_resources.resource_listdir('trac', 'locale') 
    334                 if '.' not in dirname] 
     332        try: 
     333            locales = [dirname for dirname 
     334                       in pkg_resources.resource_listdir('trac', 'locale') 
     335                       if '.' not in dirname] 
     336        except Exception: 
     337            locales = [] 
     338        if not locales and log is not None: 
     339            log.warning("Locale data not found") 
     340        return locales 
     341                    
    335342 
    336     def get_negotiated_locale(preferred_locales): 
     343    def get_negotiated_locale(preferred_locales, log=None): 
    337344        def normalize(locale_ids): 
    338345            return [id.replace('_', '-') for id in locale_ids if id] 
    339346        return Locale.negotiate(normalize(preferred_locales), 
    340                                 normalize(get_available_locales()), sep='-') 
     347                                normalize(get_available_locales(log)), sep='-') 
    341348         
    342349    has_babel = True 
    343350 
    except ImportError: # fall back on 0.11  
    368375    def get_translations(): 
    369376        return translations 
    370377 
    371     def get_available_locales(): 
     378    def get_available_locales(log=None): 
    372379        return [] 
    373380 
    374     def get_negotiated_locale(preferred=None, default=None): 
     381    def get_negotiated_locale(preferred=None, log=None): 
    375382        return None 
  • trac/web/main.py

    diff --git a/trac/web/main.py b/trac/web/main.py
    a b class RequestDispatcher(Component): 
    308308            preferred = req.session.get('language') 
    309309            default = self.env.config.get('trac', 'default_language', '') 
    310310            negotiated = get_negotiated_locale([preferred, default] + 
    311                                                req.languages) 
     311                                               req.languages, self.log) 
    312312            self.log.debug("Negotiated locale: %s -> %s", preferred, negotiated) 
    313313            return negotiated 
    314314