Ionic App之国际化(1)单个参数的处理

最近的app开发中需要考虑多语言国际化的问题,经查资料,目前大部分使用的是angular-translate.js这个组件,网站说明是这个:https://angular-translate.github.io

具体步骤:

1.下载angular-translate.min.js和angular-translate-loader-static-files.min.js,并在index.html中添加引用

    <!--多语言模块-->
    <script src="lib/angular-translate/angular-translate.min.js"></script>
    <script src="lib/angular-translate/angular-translate-loader-static-files.min.js"></script>

2.设置依赖项

var app = angular.module("ionicApp", ["ionic","pascalprecht.translate"]);

3.配置多语言,此处是加载本地化的json文件,在www目录下建立languages目录,有两个json文件:en.json和zh.json

{
  "LOGIN_REGISTER": "Login/Register",
  "A" : "电动自行车A",
  "B" : "电动三轮车B",
  "MyLa":
  {
    "length" : 2,
   "values":[
    {
      "name" : "Huanhuan","value" : "1"
    },
    {
      "name" : "Alex","value" : "2"
    }
  ]
  }
}
en.json
{
  "LOGIN_REGISTER": "登录/注册",
  "A" : "电动自行车",
  "B" : "电动三轮车",
  "MyLa":{
    "length" : 2,
    "values":[
    {
      "name" : "郭欢欢","value" : "1"
    },
    {
      "name" : "大海","value" : "2"
    }
  ]}
}
zh.json

这两个文件就是我们的多语言文件,相关内容应该日后都放在这里。

4.加载多语言文件,这个是需要提前加载的(貌似也可以延迟加载,还没研究到)

app.config(function($locationProvider,$stateProvider, $urlRouterProvider, $ionicConfigProvider, $sceDelegateProvider, $compileProvider,$translateProvider)
{
    $ionicConfigProvider.tabs.style("standard");
    $ionicConfigProvider.tabs.position("bottom");

    $ionicConfigProvider.navBar.alignTitle("center");

    $ionicConfigProvider.views.transition("ios");
    $ionicConfigProvider.views.maxCache(2);
    $ionicConfigProvider.views.swipeBackEnabled(false);

    $ionicConfigProvider.backButton.text("");
    $ionicConfigProvider.backButton.previousTitleText(false);

    $ionicConfigProvider.templates.maxPrefetch(5);
/*
       Url replace by dynamic load urls.json 2016.10.25
  */
  $urlRouterProvider.deferIntercept();
  $urlRouterProvider.otherwise('tab/home');
  $locationProvider.html5Mode({enabled: false});
  $stateProviderRef = $stateProvider;
  /*
     添加多语言设置
  */
  $translateProvider.useStaticFilesLoader({
      prefix: 'languages/',
      suffix: '.json'
  });
  $translateProvider.use('en');
})

这里的prefix,suffix和en三个参数,实际上会合成一个类似{prefix}{en}{suffix}的字符串,即languages/en.json,也就是我们的多语言文件地址

5.使用指令实现翻译效果,比如我们在view中有如下一段代码,LOGIN_REGISTER实现不同语言下的显示。

          <div class="sign" ng-if=!$root.user>
              <a href="#/login/">
                <h2 translate>LOGIN_REGISTER</h2>
              </a>
          </div>

由于我们在第4步中默认使用的是英文en,所以第一次启动的时候对应的内容是en.json中LOGIN_REGISTER对应的值"Login/Register"

6.语言的切换,我们设置两个按钮事件,对应中文/英文的切换

$scope.chinese= function()
              {
                $translate.use("zh");
              };
$scope.english= function()
              {
                $translate.use("en");
              };

每点击下中文按钮,LOGIN_REGISTER就即刻变为zh.json中对应的 "登录/注册",点下英文按钮,则写换到"Login/Register"

 

这样我们基本完成了单个值的多语言的实现.

posted on 2016-11-21 14:15  郭欢欢  阅读(1244)  评论(0编辑  收藏  举报

导航