diff --git a/rhodecode/lib/base.py b/rhodecode/lib/base.py --- a/rhodecode/lib/base.py +++ b/rhodecode/lib/base.py @@ -443,20 +443,12 @@ class BaseController(WSGIController): self.sa = meta.Session self.scm_model = ScmModel(self.sa) - default_lang = c.language - user_lang = c.language - try: - user_obj = self._rhodecode_user.get_instance() - if user_obj: - user_lang = user_obj.user_data.get('language') - except Exception: - log.exception('Failed to fetch user language for user %s', - self._rhodecode_user) - - if user_lang and user_lang != default_lang: - log.debug('set language to %s for user %s', user_lang, - self._rhodecode_user) + # set user language + user_lang = getattr(c.pyramid_request, '_LOCALE_', None) + if user_lang: translation.set_lang(user_lang) + log.debug('set language to %s for user %s', + user_lang, self._rhodecode_user) def _dispatch_redirect(self, with_url, environ, start_response): resp = HTTPFound(with_url) diff --git a/rhodecode/subscribers.py b/rhodecode/subscribers.py --- a/rhodecode/subscribers.py +++ b/rhodecode/subscribers.py @@ -63,6 +63,15 @@ def add_localizer(event): request.plularize = localizer.pluralize +def set_user_lang(event): + cur_user = getattr(event.request, 'user', None) + + if cur_user: + user_lang = cur_user.get_instance().user_data.get('language') + if user_lang: + event.request._LOCALE_ = user_lang + + def scan_repositories_if_enabled(event): """ This is subscribed to the `pyramid.events.ApplicationCreated` event. It diff --git a/rhodecode/tweens.py b/rhodecode/tweens.py --- a/rhodecode/tweens.py +++ b/rhodecode/tweens.py @@ -67,8 +67,7 @@ def pylons_compatibility_tween_factory(h session_key = ( config['pylons.environ_config'].get('session', 'beaker.session')) environ[session_key] = session - pylons.url._push_object(URLGenerator(config['routes.map'], - environ)) + pylons.url._push_object(URLGenerator(config['routes.map'], environ)) # TODO: Maybe we should use the language from pyramid. translator = _get_translator(config.get('lang')) @@ -92,6 +91,8 @@ def pylons_compatibility_tween_factory(h def includeme(config): config.add_subscriber('rhodecode.subscribers.add_renderer_globals', 'pyramid.events.BeforeRender') + config.add_subscriber('rhodecode.subscribers.set_user_lang', + 'pyramid.events.NewRequest') config.add_subscriber('rhodecode.subscribers.add_localizer', 'pyramid.events.NewRequest') config.add_tween('rhodecode.tweens.pylons_compatibility_tween_factory')