thingsboard-aplcache

Improve user language management.

10/11/2017 4:00:22 PM

Details

diff --git a/ui/src/app/api/user.service.js b/ui/src/app/api/user.service.js
index 3e552dc..1785582 100644
--- a/ui/src/app/api/user.service.js
+++ b/ui/src/app/api/user.service.js
@@ -283,6 +283,12 @@ function UserService($http, $q, $rootScope, adminService, dashboardService, logi
             );
         }
 
+        function updateUserLang() {
+            if (currentUserDetails.additionalInfo && currentUserDetails.additionalInfo.lang) {
+                $translate.use(currentUserDetails.additionalInfo.lang);
+            }
+        }
+
         function procceedJwtTokenValidate() {
             validateJwtToken(doTokenRefresh).then(function success() {
                 var jwtToken = store.get('jwt_token');
@@ -299,6 +305,7 @@ function UserService($http, $q, $rootScope, adminService, dashboardService, logi
                     getUser(currentUser.userId).then(
                         function success(user) {
                             currentUserDetails = user;
+                            updateUserLang();
                             $rootScope.forceFullscreen = false;
                             if (userForceFullscreen()) {
                                 $rootScope.forceFullscreen = true;
diff --git a/ui/src/app/app.config.js b/ui/src/app/app.config.js
index 074437d..102c41a 100644
--- a/ui/src/app/app.config.js
+++ b/ui/src/app/app.config.js
@@ -46,7 +46,7 @@ export default function AppConfig($provide,
     $urlRouterProvider.otherwise(UrlHandler);
     storeProvider.setCaching(false);
 
-    $translateProvider.useSanitizeValueStrategy('sce');
+    $translateProvider.useSanitizeValueStrategy(null);
     $translateProvider.preferredLanguage('en_US');
     $translateProvider.useLocalStorage();
     $translateProvider.useMissingTranslationHandler('tbMissingTranslationHandler');
@@ -59,15 +59,17 @@ export default function AppConfig($provide,
 
     var $window = angular.injector(['ng']).get('$window');
     var lang = $window.navigator.language || $window.navigator.userLanguage;
-    if (lang === 'ko') {
-        $translateProvider.useSanitizeValueStrategy(null);
-        $translateProvider.preferredLanguage('ko_KR');
-    } else if (lang === 'zh') {
-        $translateProvider.useSanitizeValueStrategy(null);
-        $translateProvider.preferredLanguage('zh_CN');
-    } else if (lang === 'es') {
-        $translateProvider.useSanitizeValueStrategy(null);
-        $translateProvider.preferredLanguage('es_ES');
+    if (lang) {
+        lang = lang.toLowerCase();
+        if (lang.startsWith('ko')) {
+            $translateProvider.preferredLanguage('ko_KR');
+        } else if (lang.startsWith('zh')) {
+            $translateProvider.preferredLanguage('zh_CN');
+        } else if (lang.startsWith('es')) {
+            $translateProvider.preferredLanguage('es_ES');
+        } else if (lang.startsWith('ru')) {
+            $translateProvider.preferredLanguage('ru_RU');
+        }
     }
 
     for (var langKey in locales) {
diff --git a/ui/src/app/profile/profile.controller.js b/ui/src/app/profile/profile.controller.js
index 187a9d2..2fec403 100644
--- a/ui/src/app/profile/profile.controller.js
+++ b/ui/src/app/profile/profile.controller.js
@@ -40,15 +40,19 @@ export default function ProfileController(userService, $scope, $document, $mdDia
     function loadProfile() {
         userService.getUser(userService.getCurrentUser().userId).then(function success(user) {
             vm.profileUser = user;
-            vm.profileUser.lang = $translate.use();
+            if (!vm.profileUser.additionalInfo) {
+                vm.profileUser.additionalInfo = {};
+            }
+            if (!vm.profileUser.additionalInfo.lang) {
+                vm.profileUser.additionalInfo.lang = $translate.use();
+            }
         });
     }
 
     function save() {
         userService.saveUser(vm.profileUser).then(function success(user) {
-            $translate.use(vm.profileUser.lang);
+            $translate.use(vm.profileUser.additionalInfo.lang);
             vm.profileUser = user;
-            vm.profileUser.lang = $translate.use();
             $scope.theForm.$setPristine();
         });
     }
diff --git a/ui/src/app/profile/profile.tpl.html b/ui/src/app/profile/profile.tpl.html
index 5d59047..39401f7 100644
--- a/ui/src/app/profile/profile.tpl.html
+++ b/ui/src/app/profile/profile.tpl.html
@@ -42,7 +42,7 @@
                     </md-input-container>
                     <md-input-container class="md-block">
                         <label translate>language.language</label>
-                        <md-select name="language" ng-model="vm.profileUser.lang">
+                        <md-select name="language" ng-model="vm.profileUser.additionalInfo.lang">
                             <md-option ng-repeat="lang in vm.languageList" ng-value="lang.value">
                                 {{lang.name | translate}}
                             </md-option>