From 526cdfd9b2269c1525a03bfcde383498a3bebd9c Mon Sep 17 00:00:00 2001 From: Marcin Kuzminski Date: Thu, 12 Jan 2017 17:05:06 +0100 Subject: [PATCH] i18n: use consistent way of setting user language. --- rhodecode/lib/base.py | 18 +++++------------- rhodecode/subscribers.py | 9 +++++++++ rhodecode/tweens.py | 5 +++-- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/rhodecode/lib/base.py b/rhodecode/lib/base.py index cc21f6c1..2844a4b3 100644 --- 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 index 0cc3fdec..cb2c6bce 100644 --- 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 index eaf59607..807c453f 100644 --- a/rhodecode/tweens.py +++ b/rhodecode/tweens.py @@ -67,8 +67,7 @@ def pylons_compatibility_tween_factory(handler, registry): 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(handler, registry): 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')