Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions web/pgadmin/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -328,12 +328,12 @@ def get_locale():
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
session['PGADMIN_LANGUAGE'] = language
elif 'PGADMIN_LANGUAGE' in session:
language = session.get('PGADMIN_LANGUAGE', language)
elif 'PGADMIN_LANGUAGE' in request.cookies:
language = request.cookies.get(
'PGADMIN_LANGUAGE', language
Comment thread
coderabbitai[bot] marked this conversation as resolved.
)

return language
Expand Down
2 changes: 1 addition & 1 deletion web/pgadmin/preferences/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ def save():
config.COOKIE_DEFAULT_DOMAIN != 'localhost':
domain['domain'] = config.COOKIE_DEFAULT_DOMAIN

setattr(session, 'PGADMIN_LANGUAGE', language)
session['PGADMIN_LANGUAGE'] = language
response.set_cookie("PGADMIN_LANGUAGE", value=language,
path=config.SESSION_COOKIE_PATH,
secure=config.SESSION_COOKIE_SECURE,
Expand Down
8 changes: 8 additions & 0 deletions web/pgadmin/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2026, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
54 changes: 54 additions & 0 deletions web/pgadmin/tests/test_get_locale.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2026, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################

"""Verify that the Babel locale_selector registered in create_app() reads
the selected UI language back from the session and cookie on requests that
don't include the 'language' form field (issue #10347).
"""

import config
from pgadmin.utils.route import BaseTestGenerator


class GetLocaleTestCase(BaseTestGenerator):
"""Exercises pgadmin.__init__.create_app()'s get_locale() directly via
the Babel extension, bypassing the need for a database connection.
"""

# No server interaction needed, so skip BaseTestGenerator.setUp's
# connect_server().
def setUp(self):
self._orig_server_mode = config.SERVER_MODE
config.SERVER_MODE = True

def tearDown(self):
config.SERVER_MODE = self._orig_server_mode

def _get_locale(self):
return self.app.extensions['babel'].locale_selector()

def runTest(self):
# The 'language' form field sets the language for this request and
# must persist it to the session for subsequent requests.
from flask import session
with self.app.test_request_context(
'/', method='POST', data={'language': 'fr'}):
self.assertEqual(self._get_locale(), 'fr')
self.assertEqual(session.get('PGADMIN_LANGUAGE'), 'fr')

# A request with no 'language' field but an existing session value
# must keep using that language.
with self.app.test_request_context('/'):
session['PGADMIN_LANGUAGE'] = 'de'
self.assertEqual(self._get_locale(), 'de')

# With no session value, the PGADMIN_LANGUAGE cookie must be read.
with self.app.test_request_context(
'/', headers={'Cookie': 'PGADMIN_LANGUAGE=it'}):
self.assertEqual(self._get_locale(), 'it')
Loading