mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2026-08-19 01:15:04 -05:00
Allow users to select UI language at login or from Preferences rather than unpredictable behaviour from browsers. Fixes #2190
This commit is contained in:
committed by
Dave Page
parent
6cb9ece6fd
commit
0eda6033df
+47
-3
@@ -14,7 +14,7 @@ import os, sys, time
|
||||
from collections import defaultdict
|
||||
from importlib import import_module
|
||||
|
||||
from flask import Flask, abort, request, current_app
|
||||
from flask import Flask, abort, request, current_app, session
|
||||
from flask_babel import Babel, gettext
|
||||
from flask_htmlmin import HTMLMIN
|
||||
from flask_login import user_logged_in
|
||||
@@ -29,6 +29,8 @@ from pgadmin.utils.session import create_session_interface
|
||||
from werkzeug.local import LocalProxy
|
||||
from werkzeug.utils import find_modules
|
||||
|
||||
from pgadmin.utils.preferences import Preferences
|
||||
|
||||
from pgadmin.model import db, Role, Server, ServerGroup, User, Version, Keys
|
||||
|
||||
# If script is running under python3, it will not have the xrange function
|
||||
@@ -189,8 +191,29 @@ def create_app(app_name=None):
|
||||
|
||||
@babel.localeselector
|
||||
def get_locale():
|
||||
"""Get the best language for the user."""
|
||||
language = request.accept_languages.best_match(config.LANGUAGES.keys())
|
||||
"""Get the language for the user."""
|
||||
language = 'en'
|
||||
if config.SERVER_MODE is False:
|
||||
# Get the user language preference from the miscellaneous module
|
||||
misc_preference = Preferences.module('miscellaneous', False)
|
||||
if misc_preference:
|
||||
user_languages = misc_preference.preference(
|
||||
'user_language'
|
||||
)
|
||||
if user_languages:
|
||||
language = user_languages.get() or language
|
||||
else:
|
||||
# If language is available in get request then return the same
|
||||
# otherwise check the session or cookie
|
||||
data = request.form
|
||||
if 'language' in data:
|
||||
language = data['language'] or language
|
||||
setattr(session, 'PGADMIN_LANGUAGE', language)
|
||||
elif hasattr(session, 'PGADMIN_LANGUAGE'):
|
||||
language = getattr(session, 'PGADMIN_LANGUAGE', language)
|
||||
elif hasattr(request.cookies, 'PGADMIN_LANGUAGE'):
|
||||
language = getattr(request.cookies, 'PGADMIN_LANGUAGE', language)
|
||||
|
||||
return language
|
||||
|
||||
##########################################################################
|
||||
@@ -269,6 +292,27 @@ def create_app(app_name=None):
|
||||
##########################################################################
|
||||
driver.init_app(app)
|
||||
|
||||
##########################################################################
|
||||
# Register language to the preferences after login
|
||||
##########################################################################
|
||||
@user_logged_in.connect_via(app)
|
||||
def register_language(sender, user):
|
||||
# After logged in, set the language in the preferences if we get from
|
||||
# the login page
|
||||
data = request.form
|
||||
if 'language' in data:
|
||||
language = data['language']
|
||||
|
||||
# Set the user language preference
|
||||
misc_preference = Preferences.module('miscellaneous')
|
||||
user_languages = misc_preference.preference(
|
||||
'user_language'
|
||||
)
|
||||
|
||||
if user_languages and language:
|
||||
language = user_languages.set(language)
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Register any local servers we can discover
|
||||
##########################################################################
|
||||
|
||||
Reference in New Issue
Block a user