コントローラ内に$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> '
+ '<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> '
+ '<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> '
+ '<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> '
+ '<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
を使用したときと同じ動作を持って動作しませんでした。
私は英語に変更したときに、前のページが、その後フランス語であり、かつ::
私はそれをロードするとき、これはページの状態で、私のコードがどのように動作するかを確認するには
あなたはすべてのラベルがAfficher
、Modifier
と私はcontrolleに翻訳しSupprimer
除いて英語に翻訳してしまった見ることができるようにrであり、コンソール内のログに気づくことがあります。つまり、$translateChangeSuccess
が機能しましたが、ビュー内の値を変更できませんでした。
あなたはアンギュラ翻訳使用しています?もしそうなら、$ translateサービスを見てください。 https://angular-translate.github.io/docs/#/guide/03_using-translate-service – sdfacre
@sdfacreはい私はすでにその記事を読んでいましたが、私の質問は、動作すると言ったので$ translateを使用する方法ではありませんでした。私は、私の場合、その効果を見るためにウェブページをリフレッシュする必要があります。 –