keycloak-aplcache

Details

diff --git a/themes/src/main/resources/theme/base/admin/messages/admin-messages_en.properties b/themes/src/main/resources/theme/base/admin/messages/admin-messages_en.properties
index bb2782d..6d547f7 100644
--- a/themes/src/main/resources/theme/base/admin/messages/admin-messages_en.properties
+++ b/themes/src/main/resources/theme/base/admin/messages/admin-messages_en.properties
@@ -831,6 +831,7 @@ additional-grants=Additional Grants
 revoke=Revoke
 new-password=New Password
 password-confirmation=Password Confirmation
+reset-password=Reset Password
 credentials.temporary.tooltip=If enabled user is required to change password on next login
 remove-totp=Remove TOTP
 credentials.remove-totp.tooltip=Remove one time password generator for user.
diff --git a/themes/src/main/resources/theme/base/admin/resources/js/app.js b/themes/src/main/resources/theme/base/admin/resources/js/app.js
index 69df83e..ca78bac 100755
--- a/themes/src/main/resources/theme/base/admin/resources/js/app.js
+++ b/themes/src/main/resources/theme/base/admin/resources/js/app.js
@@ -6,6 +6,8 @@ consoleBaseUrl = consoleBaseUrl + "/console";
 var configUrl = consoleBaseUrl + "/config";
 
 var auth = {};
+var resourceBundle;
+var locale = 'en';
 
 var module = angular.module('keycloak', [ 'keycloak.services', 'keycloak.loaders', 'ui.bootstrap', 'ui.select2', 'angularFileUpload', 'angularTreeview', 'pascalprecht.translate', 'ngCookies', 'ngSanitize']);
 var resourceRequests = 0;
@@ -34,6 +36,25 @@ angular.element(document).ready(function () {
         req.send();
     }
 
+    function loadResourceBundle(success, error) {
+        var req = new XMLHttpRequest();
+        req.open('GET', consoleBaseUrl + '/messages.json?lang=' + locale, true);
+        req.setRequestHeader('Accept', 'application/json');
+
+        req.onreadystatechange = function () {
+            if (req.readyState == 4) {
+                if (req.status == 200) {
+                    var data = JSON.parse(req.responseText);
+                    success && success(data);
+                } else {
+                    error && error();
+                }
+            }
+        }
+
+        req.send();
+    }
+
     function hasAnyAccess(user) {
         return user && user['realm_access'];
     }
@@ -45,6 +66,10 @@ angular.element(document).ready(function () {
     keycloakAuth.init({ onLoad: 'login-required' }).success(function () {
         auth.authz = keycloakAuth;
 
+        if (auth.authz.idTokenParsed.locale) {
+            locale = auth.authz.idTokenParsed.locale;
+        }
+
         auth.refreshPermissions = function(success, error) {
             whoAmI(function(data) {
                 auth.user = data;
@@ -57,17 +82,19 @@ angular.element(document).ready(function () {
             });
         };
 
-        auth.refreshPermissions(function() {
-            module.factory('Auth', function() {
-                return auth;
-            });
-            var injector = angular.bootstrap(document, ["keycloak"]);
+        loadResourceBundle(function(data) {
+            resourceBundle = data;
+
+            auth.refreshPermissions(function () {
+                module.factory('Auth', function () {
+                    return auth;
+                });
+                var injector = angular.bootstrap(document, ["keycloak"]);
 
-            injector.get('$translate')('consoleTitle').then(function(consoleTitle) {
-                document.title=consoleTitle;
+                injector.get('$translate')('consoleTitle').then(function (consoleTitle) {
+                    document.title = consoleTitle;
+                });
             });
-        }, function() {
-            window.location.reload();
         });
     }).error(function () {
         window.location.reload();
@@ -99,15 +126,8 @@ module.factory('authInterceptor', function($q, Auth) {
 
 module.config(['$translateProvider', function($translateProvider) {
     $translateProvider.useSanitizeValueStrategy('sanitizeParameters');
-    
-    var locale = auth.authz.idTokenParsed.locale;
-    if (locale !== undefined) {
-        $translateProvider.preferredLanguage(locale);
-    } else {
-        $translateProvider.preferredLanguage('en');
-    }
-    
-    $translateProvider.useUrlLoader('messages.json');
+    $translateProvider.preferredLanguage(locale);
+    $translateProvider.translations(locale, resourceBundle);
 }]);
 
 module.config([ '$routeProvider', function($routeProvider) {