From ddb588e7519d450823be782cee39990357957ef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Wed, 18 Mar 2015 15:49:29 +0100 Subject: [PATCH] Language settings now work, both global and per user Still need to test if reload of current user settings works upon change of those. --- src/octoprint/server/__init__.py | 4 ++-- src/octoprint/settings.py | 2 +- .../static/js/app/viewmodels/loginstate.js | 12 ++++++++++++ .../static/js/app/viewmodels/settings.js | 5 ++--- .../static/js/app/viewmodels/usersettings.js | 16 ++++++++-------- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/octoprint/server/__init__.py b/src/octoprint/server/__init__.py index d3d48ee1..8191a612 100644 --- a/src/octoprint/server/__init__.py +++ b/src/octoprint/server/__init__.py @@ -109,13 +109,13 @@ def get_locale(): userid = g.identity.id try: user_language = userManager.getUserSetting(userid, ("interface", "language")) - if user_language is not None: + if user_language is not None and not user_language == "_default": return Locale.negotiate([user_language], LANGUAGES) except octoprint.users.UnknownUser: pass default_language = settings().get(["appearance", "defaultLanguage"]) - if default_language and default_language in LANGUAGES: + if default_language is not None and not default_language == "_default" and default_language in LANGUAGES: return Locale.negotiate([default_language], LANGUAGES) return request.accept_languages.best_match(LANGUAGES) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index 3be76c78..baa78816 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -168,7 +168,7 @@ default_settings = { "name": "", "color": "default", "colorTransparent": False, - "defaultLanguage": None, + "defaultLanguage": "_default", "components": { "order": { "navbar": ["settings", "systemmenu", "login"], diff --git a/src/octoprint/static/js/app/viewmodels/loginstate.js b/src/octoprint/static/js/app/viewmodels/loginstate.js index 279b34bb..74c91b54 100644 --- a/src/octoprint/static/js/app/viewmodels/loginstate.js +++ b/src/octoprint/static/js/app/viewmodels/loginstate.js @@ -27,6 +27,18 @@ $(function() { self.subscribers.push(callback); }; + self.reloadUser = function() { + if (self.currentUser() == undefined) { + return; + } + + $.ajax({ + url: API_BASEURL + "users/" + self.currentUser().name, + type: "GET", + success: self.fromResponse + }) + }; + self.requestData = function() { $.ajax({ url: API_BASEURL + "login", diff --git a/src/octoprint/static/js/app/viewmodels/settings.js b/src/octoprint/static/js/app/viewmodels/settings.js index 4e003094..4dbb756f 100644 --- a/src/octoprint/static/js/app/viewmodels/settings.js +++ b/src/octoprint/static/js/app/viewmodels/settings.js @@ -54,7 +54,7 @@ $(function() { } }; - var auto_locale = {language: undefined, display: gettext("Autodetect from browser"), english: undefined}; + var auto_locale = {language: "_default", display: gettext("Autodetect from browser"), english: undefined}; self.locales = ko.observableArray([auto_locale].concat(_.sortBy(_.values(AVAILABLE_LOCALES), function(n) { return n.display; }))); @@ -194,10 +194,9 @@ $(function() { self.appearance_name(response.appearance.name); self.appearance_color(response.appearance.color); self.appearance_colorTransparent(response.appearance.colorTransparent); + self.appearance_defaultLanguage("_default"); if (_.includes(self.locale_languages, response.appearance.defaultLanguage)) { self.appearance_defaultLanguage(response.appearance.defaultLanguage); - } else { - self.appearance_defaultLanguage(undefined); } self.printer_defaultExtrusionLength(response.printer.defaultExtrusionLength); diff --git a/src/octoprint/static/js/app/viewmodels/usersettings.js b/src/octoprint/static/js/app/viewmodels/usersettings.js index f5498d20..d92a13fc 100644 --- a/src/octoprint/static/js/app/viewmodels/usersettings.js +++ b/src/octoprint/static/js/app/viewmodels/usersettings.js @@ -7,7 +7,7 @@ $(function() { self.userSettingsDialog = undefined; - var auto_locale = {language: undefined, display: gettext("Site default"), english: undefined}; + var auto_locale = {language: "_default", display: gettext("Site default"), english: undefined}; self.locales = ko.observableArray([auto_locale].concat(_.sortBy(_.values(AVAILABLE_LOCALES), function(n) { return n.display; }))); @@ -20,14 +20,13 @@ $(function() { self.currentUser = ko.observable(undefined); self.currentUser.subscribe(function(newUser) { - if (newUser == undefined) { - self.access_password(undefined); - self.access_repeatedPassword(undefined); - self.access_apikey(undefined); - self.interface_language(LOCALE); - } else { + self.access_password(undefined); + self.access_repeatedPassword(undefined); + self.access_apikey(undefined); + self.interface_language("_default"); + + if (newUser != undefined) { self.access_apikey(newUser.apikey); - self.interface_language(undefined); if (newUser.settings.hasOwnProperty("interface") && newUser.settings.interface.hasOwnProperty("language")) { self.interface_language(newUser.settings.interface.language); } @@ -65,6 +64,7 @@ $(function() { // close dialog self.currentUser(undefined); self.userSettingsDialog.modal("hide"); + self.loginState.reloadUser(); }); };