0

angular-traslate-partial-loader を使用して Angular-translate をテストしていますが、ページの読み込み時にデフォルトの翻訳がページに読み込まれません。

ここに再現された問題のplunkrがあります

app.controller('MainCtrl', ['$scope', '$translate', '$translatePartialLoader',
  function($scope, $translate, $translatePartialLoader) {
    $translatePartialLoader.addPart('test');
    $translate.refresh();
    $scope.dotranslate = function() {
      $translate.refresh();
    };
  }
]);

http://plnkr.co/edit/Vts9CW4VoJsXoSdllFsq?p=preview

$translate.refresh() がページの読み込み後に機能することを示す更新ボタンを追加しました。

私は何が欠けていますか?

4

1 に答える 1

3

私は $translate を使用したことがないので、何が問題なのか正確にはわかりませんが、ダイジェスト サイクルで値を変更するのが遅すぎて、更新がそれをキャッチできない可能性があります。

$scope.$evalAsync を使用してこれを修正できます。こちらの角度ドキュメントを参照してください: https://docs.angularjs.org/api/ng/type/$rootScope.Scope

変更を加えた app.js の例を次に示します。

var app = angular.module('plunker', ['pascalprecht.translate']);
app.config(function run($translateProvider, $translatePartialLoaderProvider) {
  $translateProvider.useLoader('$translatePartialLoader', {
    urlTemplate: 'translation-{lang}-{part}.json'
  });

  $translateProvider.preferredLanguage('fr-FR');
});
app.controller('MainCtrl', ['$scope', '$translate', '$translatePartialLoader',
  function($scope, $translate, $translatePartialLoader) {
    $translatePartialLoader.addPart('test');

    //I wrapped your refresh in the eval async function
    $scope.$evalAsync(function() {
      $translate.refresh();
    });

    $scope.dotranslate = function() {
      $translate.refresh();
    };
  }
]);
于 2014-09-24T21:18:38.100 に答える