随着技术的发展,越来越多的项目需要适应市场需求,拓展海外市场必不可少的就是支持多国语言,庆幸的是angularjs提供了实现国际化的功能,那么就让我们来看看angularjs是如何实现国家化的呢?
$translateProvider.preferredLanguage('en_US');
angular.module('login', ["ui.bootstrap",
"ui.router",
"pascalprecht.translate",
"ngCookies",
"toastr"
])
.config(['$translateProvider', function($translateProvider){
//international json file path in nginx
$translateProvider.useStaticFilesLoader({
prefix: '/static/data/',
suffix: '.json'
});
$translateProvider.preferredLanguage('en_US');
$translateProvider.useCookieStorage();
}])
在
这里我们需要注入angularjs国际化所依赖的translate和ngCookie,以便我们在后期使用时来实现国家化。
angular.module('login')
.run(['$rootScope','$location','wizardService',function($rootScope,$location,wizardService) {
// lock screen initialization
}])
.controller("loginCtrl", ['$translate', '$http', '$scope', '$interval', '$modal', 'toastr', 'wizardService','$cookieStore','$timeout',
function($translate, $http, $scope, $interval, $modal, toastr, wizardService,$cookieStore,$timeout) {
}]);
controller中注入$translate和$cookieStore,使用的Demo如下图,我想要实现的结果是选择其中一种语言,就会翻译成对应的国际化语言,页面默认使用的是English。
中文界面:
韩语:
等其他版本。现在需要一个切换功能:
当我切换成不同语言的时候会去调用某个方法,在该方法中去处理josn文件
$scope.setLang = function(langKeyNum) {
var langKey = "en_US";
switch (langKeyNum) {
case 0:
langKey = "en_US";
$cookieStore.put("lang", "en");
break;
case 1:
langKey = "zh_CH";
$cookieStore.put("lang", "zh");
break;
case 2:
langKey = "de_DE";
$cookieStore.put("lang", "de");
break;
case 3:
langKey = "fr_FR";
$cookieStore.put("lang", "fr");
break;
case 4:
langKey = "es_ES";
$cookieStore.put("lang", "es");
break;
case 5:
langKey = "tr_TR";
$cookieStore.put("lang", "tr");
break;
case 6:
langKey = "kr_KR";
$cookieStore.put("lang", "kr");
break;
case 7:
langKey = "it_IT";
$cookieStore.put("lang", "it");
break;
case 8:
$interval.cancel($scope.langInterval);
langKey = "en_US";
break;
}
$translate.use(langKey);
};
$cookieStore.put("lang", "it");
将当前选择的语言使用一个简写将其保存到cookie中,以便在其他的APP中使用。
$translate.use(langKey);
切换该语言,并引用对应的json国际化文件。
切换到指定语言之后,跳转到其他应用的时候,国际化的引用注入方式跟登录页的是一样的,这个不能在登录页面定义了就在其他页面buy9ong定义了,APP之间是不共享config的,所以需要在主页面中同样配置一下。配置这里就不在列出了。只是在加载主页面的时候,在controller中初始化调用一下就行了。
getLang();
function getLang (){
if($cookieStore.get("lang") == null||$cookieStore.get("lang") == "en"){
$translate.use("en_US");
}else if($cookieStore.get("lang") == "zh"){
$translate.use("zh_CH");
}else if($cookieStore.get("lang") == "de"){
$translate.use("de_DE");
}else{
//other language
}
}
到此,国际化文件就可以在整个项目中活起来了。