• 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"

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

  • 相关阅读:
    STL中的map
    HDU 4027 Can you answer these queries?
    HDU 2199 Can you solve this equation?
    USACO section1.2 Name That Number 命名那个数字
    HDU 3790 最短路径问题 (双重权值)
    [笔记]CiscoPT配置RIP
    [笔记]Cisco PT VLANTrunk配置
    iptables感悟Ubuntu
    CentOS网络配置
    Discuz X2 数据库备份功能分析
  • 原文地址:https://www.cnblogs.com/crazyguo/p/6085304.html
Copyright © 2020-2023  润新知