Ionic App之國際化(2) json數組的處理


Ionic App值國際化(1)中我們實現了對單個參數的多語言處理,下面開始如何進行數組的處理。

1.在我們的多語言文件中設置要訪問的json數組,en.json和zh.json,此處就以en.json中的MyLa為例

{
  "LOGIN_REGISTER": "Login/Register",
  "A" : "電動自行車A",
  "B" : "電動三輪車B",
  "MyLa":
  {
    "length" : 2,
   "values":[
    {
      "name" : "Huanhuan","value" : "1"
    },
    {
      "name" : "Alex","value" : "2"
    }
  ]
  }
}

2.在view頁面中訪問MyLa下的values數組。本以為可以像一般的ng-repeate="v in MyLa.Values"這樣去訪問,可以多語言不支持直接訪問數組,應該如下:

<ion-list ng-init="items = [0,1]">
  <ion-item ng-repeat="item in items">
    <h2>
      {{ 'MyLa.values.'+item+'.name'  | translate }}
    </h2>
  </ion-item>
</ion-list>

格式竟然是:MyLa.values.下標.屬性名,仔細想想應該是在app.config函數中解析的時候,事先就是按這種模式處理的,以后用的時候就可以加載了。

雖然這樣可以實現多語言的效果,但卻需要單獨的設置下標數組,本想在多語言文件中增加一個參數length 動態生成數組下標,無奈沒成功。下面的代碼(沒成功)

<ion-list ng-init="items = getItems({{MyLa.length | translate }})"> 
<ion-item ng-repeat="item in items">
<h2>
{{
'MyLa.values.'+item+'.name' | translate }}
</h2>
</ion-item>
</ion-list>
    $scope.getItems = function( len)
    {
       var push = [];
       for(var i =0 ; i< len;i++)
{
           
push.push(i);
            }
return push; }

此處主要是想把參數MyLa.length作為參數傳給函數getItems獲取數組下標素組,這樣我們只需要在多語言文件中維護數據即可。

 

另外一種數組多語言的實現方式:

1.我們需要引入另外我們正常數據的json文件,讀取的內容如下:

{
    "cars":[
        {"name":"A","value":"24"},
        {"name":"B","value":"93"}
    ]
}

2.在en.json和zh.json文件中分別設置A,B對應的多語言,在前面的en.json中已經添加了。

3.在controller的方法中實現語言的翻譯:

        UserService.getCars().then(function(o)
        {
            $scope.carts = o.cars;
            angular.forEach($scope.carts, function(type, index)
            {
                $translate(type.name, {type: type}).then(function(translated)
                {
                    $scope.carts[index].name = translated;
                });
            });
        });

此方法將數組對應的值轉化為了單個讀多語言參數,然后再controller中處理。

這種方法多出兩步,1是要引入多語言之外的一個json文件,2是要在contoller中實現翻譯。

 

兩種方法似乎都不太完美,還未發現更優雅的出路方式。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM