i18n: use consistent way of setting user language.

This commit is contained in:
Marcin Kuzminski 2017-01-12 17:05:06 +01:00
parent 4be3097bae
commit 526cdfd9b2
3 changed files with 17 additions and 15 deletions

View file

@ -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)

View file

@ -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

View file

@ -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')