2016-04-01 3 views
0

コントローラ内に$translateを使用したいと思います。言語を変更すると、すべての文字列が翻訳されます。これは私が使用すると動作します:{{'Menu.CANDIDATURES.VIEW' | translate}}でも、コントローラでも使用します。

私は、次のよう $watchを使用し、このため

:あなたは私のコード上で見ることができるよう

.controller('CandidaturesDatatableCtrl', function ($scope, DTOptionsBuilder, DTColumnBuilder, $filter) { 

    $scope.view = ''; 
    $scope.update = ''; 
    $scope.delete = ''; 

    $scope.$watch(
     function() { return $filter('translate')('ACTIONS.VIEW'); }, 
     function(newval) { $scope.view = newval; console.log(newval); } 
    ); 

    $scope.$watch(
     function() { return $filter('translate')('ACTIONS.UPDATE'); }, 
     function(newval) { $scope.update = newval } 
    ); 

    $scope.$watch(
     function() { return $filter('translate')('ACTIONS.DELETE'); }, 
     function(newval) { $scope.delete = newval } 
    ); 

    // deleted code 
     .renderWith(function(data, type, full, meta) { 
      if (true) { 
      return '<button class="btn btn-blue btn-primary btn-ef btn-ef-5 btn-ef-5b mb-10"><i class="fa fa-trash"></i> <span>'+$scope.view+'</span></button>&nbsp;' 
       + '<button class="btn btn-bl btn-success btn-ef btn-ef-5 btn-ef-5b mb-10"><i class="fa fa-trash"></i> <span>'+$scope.update+'</span></button>&nbsp;' 
       + '<button class="btn btn-danger btn-rounded btn-ef btn-ef-5 btn-ef-5b mb-10"><i class="fa fa-trash"></i> <span>'+$scope.delete+'</span></button>'; 
      } else { 
      return ''; 
      } 

     }) 
    ]; 
    }); 

$watchが新しい翻訳をログに記録しますconsole.log(newval)があるが、$ scope.view、$ scope.update正常に動作しています$ scopte.deleteは言語を変更しても翻訳されないので、新しい翻訳を見るためにページを更新する必要があります。

どうすれば解決できますか?

あなたが見ることができるように私が書いたコードは非常に醜いです、もしあなたが他のやり方を知っていれば、私は感謝します。

編集:

私は次のように代わりに$watch$translateChangeSuccessイベントを使用しようとしました:

.controller('CandidaturesDatatableCtrl', function ($scope, DTOptionsBuilder, DTColumnBuilder, $filter, $rootScope, $translate) { 

    $scope.view = $filter('translate')('ACTIONS.VIEW'); 
    $scope.update = $filter('translate')('ACTIONS.UPDATE'); 
    $scope.delete = $filter('translate')('ACTIONS.DELETE'); 

    $rootScope.$on('$translateChangeSuccess', function() { 
     $translate(['ACTIONS.VIEW','ACTIONS.UPDATE','ACTIONS.DELETE']).then(function (newval) { 
     console.log(newval); 
     $scope.view = newval['ACTIONS.VIEW']; 
     $scope.update = newval['ACTIONS.UPDATE']; 
     $scope.delete = newval['ACTIONS.DELETE']; 
     }); 
    }); 
//... 
     DTColumnBuilder.newColumn(null).withTitle('Actions').notSortable() 
     .renderWith(function(data, type, full, meta) { 
      if (true) { 
      return '<button class="btn btn-blue btn-primary btn-ef btn-ef-5 btn-ef-5b mb-10"><i class="fa fa-trash"></i> <span>'+$scope.view+'</span></button>&nbsp;' 
       + '<button class="btn btn-bl btn-success btn-ef btn-ef-5 btn-ef-5b mb-10"><i class="fa fa-trash"></i> <span>'+$scope.update+'</span></button>&nbsp;' 
       + '<button class="btn btn-danger btn-rounded btn-ef btn-ef-5 btn-ef-5b mb-10"><i class="fa fa-trash"></i> <span>'+$scope.delete+'</span></button>'; 
      } else { 
      return ''; 
      } 

     }) 
    ]; 
    }); 

しかし、それは私が$watchを使用したときと同じ動作を持って動作しませんでした。

enter image description here

私は英語に変更したときに、前のページが、その後フランス語であり、かつ::

私はそれをロードするとき、これはページの状態で、私のコードがどのように動作するかを確認するには

enter image description here

あなたはすべてのラベルがAfficherModifierと私はcontrolleに翻訳しSupprimer除いて英語に翻訳してしまった見ることができるようにrであり、コンソール内のログに気づくことがあります。つまり、$translateChangeSuccessが機能しましたが、ビュー内の値を変更できませんでした。

+1

あなたはアンギュラ翻訳使用しています?もしそうなら、$ translateサービスを見てください。 https://angular-translate.github.io/docs/#/guide/03_using-translate-service – sdfacre

+0

@sdfacreはい私はすでにその記事を読んでいましたが、私の質問は、動作すると言ったので$ translateを使用する方法ではありませんでした。私は、私の場合、その効果を見るためにウェブページをリフレッシュする必要があります。 –

答えて

1

が本当にそれらのウォッチャーを見て好きではない....あなたは、実際にいくつかのイベントを聞くことができる、すなわち$ translateChangeSuccessここ

はplunkerです:http://plnkr.co/edit/njVZQ2plsXK95JvuxP1J?p=preview

$rootScope.$on('$translateChangeSuccess', function(){ 
    $translate(['ACTIONS.VIEW', 'ACTIONS.UPDATE']).then(function (result) { 
    $scope.view = result['ACTIONS.VIEW']; 
    $scope.update= result['ACTIONS.UPDATE']; 
    }); 
}); 
+0

あなたの助けていただきありがとうございますが、うまくいかなかったと言わざるを得ません。詳細については最新の編集を確認してください。 –

+0

申し訳ありませんが、ボタンが文字列を使用して実際にレンダリングされたことがわかりました。どうしてそんなことをしました?それを行う角度の方法はありませんか?ボタンを変更できない場合は、ボタンの設定を$ translateリゾルバに移動して、言語が変更された後にボタンを再レンダリングしてください。 – sdfacre

+0

私はangle-datatablesを使用していますが、htmlコードで列を追加する唯一の方法はhtmlをレンダリングすることです。申し訳ありませんが、$ translateリゾルバにhtmlコードを移動する方法はわかりません。 –

関連する問題