From 450d4e489b1f7a7fca4bc806a0dd1953d3afe984 Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Fri, 30 Jul 2021 18:59:57 +0530 Subject: [PATCH] refactor(lang): frappe.translate.get_language User.language should be given higher priority in terms of authenticated user since they chose it. Even higher than the browser they're using...even if the system locales aren't set properly and browser isn't configured properly --- frappe/auth.py | 1 - frappe/translate.py | 9 +++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/frappe/auth.py b/frappe/auth.py index fc1cb09e1a..2c875c4437 100644 --- a/frappe/auth.py +++ b/frappe/auth.py @@ -154,7 +154,6 @@ class LoginManager: self.make_session() self.setup_boot_cache() self.set_user_info() - self.clear_preferred_language() def get_user_info(self): self.info = frappe.db.get_value("User", self.user, diff --git a/frappe/translate.py b/frappe/translate.py index d5916f1761..102d08bd26 100644 --- a/frappe/translate.py +++ b/frappe/translate.py @@ -27,11 +27,12 @@ def get_language(lang_list: List = None) -> str: Order of priority for setting language: 1. Form Dict => _lang - 2. Cookie => preferred_language - 3. Request Header => Accept-Language + 2. Cookie => preferred_language (Non authorized user) + 3. Request Header => Accept-Language (Non authorized user) 4. User document => language 5. System Settings => language """ + is_logged_in = frappe.session.user != "Guest" # fetch language from form_dict if frappe.form_dict._lang: @@ -41,6 +42,10 @@ def get_language(lang_list: List = None) -> str: if language: return language + # use language set in User or System Settings if user is logged in + if is_logged_in: + return frappe.local.lang + lang_set = set(lang_list or get_all_languages() or []) # fetch language from cookie