AngularJS dynamic lang attribute of html

别等时光非礼了梦想. 提交于 2019-12-01 17:05:38

问题


I need some help for change dynamically the lang attribute of HTML:

<html lang="en">

I'm making a multilanguage web application with AngularJS and rest backend. Initially I can specify a default lang attribute, but I want to change it depending on the user browser or change it if the user selects inside the web application some language option.

There is some way to do it?


回答1:


If you don't want to add controller to your <html> tag and if you are using angular-translate then you can use a simple directive to achieve the same.

Angular-translates gives an event $translateChangeSuccess when your translation loaded successfully or when you change the language (I assume you will use $translate.use to change the current language). We can create a custom directive using that event.

Directive Code Snippet:

function updateLanguage( $rootScope ) {
    return {
      link: function( scope, element ) {
        var listener = function( event, translationResp ) {
          var defaultLang = "en",
              currentlang = translationResp.language;

          element.attr("lang", currentlang || defaultLang );
        };

        $rootScope.$on('$translateChangeSuccess', listener);
      }
   };
}
angular.module('app').directive( 'updateLanguage', updateLanguage );

And you have add the same directive in you html attribute.

<html update-language>



回答2:


If you want to change the language dynamically. simply you can add one controller to html tag and then change the language.

Try this:

<html ng-app="langChange" ng-controller="langCtrl" lang={{lang}}>

</html>

js code:

var app = angular.module(langChange,[]);
app.controller("langCtrl",[$scope,function($scope){
            $scope.lang = "en";//here you can change the language dynamically
}])



回答3:


If you are making a single page web application, why would that even matter? But sure, you can change it as any attribute, using e.g. <html lang="{{ lang }}">. If you want to have localized content, then you could use angular-translate .




回答4:


To improve Debajit's answer, I tweaked his directive to make sure it also works when creating new elements and when preferredLanguage is set:

function updateLanguage( $rootScope, $translate ) {
    return {
      link: function( scope, element ) {
        var defaultLang = "en";
        element.attr("lang", $translate.use() || defaultLang );

        var listener = function( event, translationResp ) {
          var currentlang = translationResp.language;   
          element.attr("lang", currentlang || $translate.use() || defaultLang );
        };

        $rootScope.$on('$translateChangeSuccess', listener);
      }
   };
}
angular.module('app').directive( 'updateLanguage', updateLanguage );

Just add the 'update-language' attribute to any element, e.g. <html update-language>



来源:https://stackoverflow.com/questions/26461711/angularjs-dynamic-lang-attribute-of-html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!