From 9dd0e140e900c739ae3b8476df8e5751e9673176 Mon Sep 17 00:00:00 2001 From: dezhidki Date: Wed, 19 Feb 2025 14:08:06 +0200 Subject: [PATCH] i18n: add DEFAULT_UI_LANGUAGE server setting The DEFAULT_UI_LANGUAGE server setting allows to override the "Use browser's default" when detecting the locale to use. This allows to e.g., force the default language of the users server-wide, which can be useful in specific use cases (e.g., exams). --- timApp/defaultconfig.py | 6 ++++++ timApp/util/locale.py | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/timApp/defaultconfig.py b/timApp/defaultconfig.py index ffc6287850..8aedff7ac4 100644 --- a/timApp/defaultconfig.py +++ b/timApp/defaultconfig.py @@ -179,6 +179,12 @@ SESSION_COOKIE_SAMESITE = "Lax" if HAS_HTTPS else None SESSION_COOKIE_SECURE = HAS_HTTPS # Require HTTPS or localhost for session cookies +DEFAULT_UI_LANGUAGE = None +""" +The default UI language to use when user's language is not explicitly set. +If not set, determines the language based on the user's browser settings. +""" + BOOKMARKS_ENABLED = True # If False, only admins can create folders and documents. diff --git a/timApp/util/locale.py b/timApp/util/locale.py index 9a5d76c69c..d46cd94451 100644 --- a/timApp/util/locale.py +++ b/timApp/util/locale.py @@ -12,13 +12,18 @@ def get_locale(force_refresh: bool = False) -> str: KNOWN_LANGUAGES, default="en-US" ) # type: ignore lng = request.cookies.get("lang") + default_language: str | None = current_app.config["DEFAULT_UI_LANGUAGE"] + if default_language not in KNOWN_LANGUAGES: + default_language = None if not lng or force_refresh: if not logged_in(): - return header_lang + return default_language or header_lang u = get_current_user_object() lng = u.get_prefs().language if lng in KNOWN_LANGUAGES: header_lang = lng + elif default_language is not None: + header_lang = default_language override = get_document_lang_override() if override and override in KNOWN_LANGUAGES: header_lang = override