diff --git a/src/translation/en.json b/src/translation/en.json index d26e01070..1a995f089 100644 --- a/src/translation/en.json +++ b/src/translation/en.json @@ -1337,5 +1337,11 @@ "resetAction": "Click to reset your password", "expireNote": "Please note that the password reset link will expire in 24 hours.", "resetActionText": "To reset your password, please visit the following page: <%- resetLink %>" + }, + "lang": { + "en": "English", + "de": "German", + "fr": "French", + "it": "Italian" } } diff --git a/src/views/profile.html b/src/views/profile.html index a39aead67..415e5c0c1 100644 --- a/src/views/profile.html +++ b/src/views/profile.html @@ -359,7 +359,7 @@ {{ 'profile.language' | tr }} - + diff --git a/src/views/profile.js b/src/views/profile.js index 7f8655f11..f368a1be6 100644 --- a/src/views/profile.js +++ b/src/views/profile.js @@ -10,16 +10,11 @@ angular.module('Application').controller('ProfileController', ['$scope', '$trans $scope.apps = Client.getInstalledApps(); $scope.language; - $scope.languages = Client.getAvailableLanguages(); - - $translate.onReady(function () { - var usedLang = $translate.use() || $translate.fallbackLanguage(); - $scope.language = $scope.languages.find(function (l) { return l === usedLang; }); - }); + $scope.languages; $scope.$watch('language', function (newVal, oldVal) { if (newVal === oldVal) return; - $translate.use(newVal); + $translate.use(newVal.id); }); $scope.twoFactorAuthentication = { @@ -604,6 +599,13 @@ angular.module('Application').controller('ProfileController', ['$scope', '$trans Client.onReady(function () { $scope.appPassword.refresh(); $scope.tokens.refresh(); + + $translate.onReady(function () { + var usedLang = $translate.use() || $translate.fallbackLanguage(); + + $scope.languages = Client.getAvailableLanguages().map(function (l) { return { display: $translate.instant('lang.'+l), id: l }}); + $scope.language = $scope.languages.find(function (l) { return l.id === usedLang; }); + }); }); $('#avatarFileInput').get(0).onchange = function (event) { diff --git a/src/views/settings.html b/src/views/settings.html index f630bdb90..d4f751653 100644 --- a/src/views/settings.html +++ b/src/views/settings.html @@ -203,7 +203,7 @@
-

+


{{ timeZone.error }}

@@ -230,7 +230,7 @@

{{ 'settings.language.description' | tr }}

- +
diff --git a/src/views/settings.js b/src/views/settings.js index 90fb56840..b9631dc5a 100644 --- a/src/views/settings.js +++ b/src/views/settings.js @@ -3,7 +3,7 @@ /* global angular:false */ /* global $:false */ -angular.module('Application').controller('SettingsController', ['$scope', '$location', '$rootScope', '$timeout', 'Client', function ($scope, $location, $rootScope, $timeout, Client) { +angular.module('Application').controller('SettingsController', ['$scope', '$location', '$translate', '$rootScope', '$timeout', 'Client', function ($scope, $location, $translate, $rootScope, $timeout, Client) { Client.onReady(function () { if (!Client.getUserInfo().isAtLeastAdmin) $location.path('/'); }); $scope.client = Client; @@ -212,7 +212,7 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca $scope.language.busy = true; $scope.language.success = false; - Client.setLanguage($scope.language.language, function (error) { + Client.setLanguage($scope.language.language.id, function (error) { if (error) $scope.language.error = error.message; else $scope.language.currentLanguage = $scope.language.language; @@ -293,15 +293,6 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca }); } - function getLanguage() { - Client.getLanguage(function (error, languageKey) { - if (error) return console.error(error); - - $scope.language.currentLanguage = Client.getAvailableLanguages().find(function (key) { return key === languageKey; }); - $scope.language.language = $scope.language.currentLanguage; - }); - } - function getAutoupdatePattern() { Client.getAutoupdatePattern(function (error, result) { if (error) return console.error(error); @@ -394,7 +385,16 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca getAutoupdatePattern(); getRegistryConfig(); getTimeZone(); - getLanguage(); + + $translate.onReady(function () { + Client.getLanguage(function (error, usedLang) { + if (error) return console.error('Unable to fetch language:', error); + + $scope.language.availableLanguages = Client.getAvailableLanguages().map(function (l) { return { display: $translate.instant('lang.'+l), id: l }}); + $scope.language.currentLanguage = $scope.language.availableLanguages.find(function (l) { return l.id === usedLang; }); + $scope.language.language = $scope.language.currentLanguage; + }); + }); $scope.update.checkStatus();