0

私は角度翻訳を使って自分のウェブサイトを翻訳しています。しかし今、問題があるときにエラーダイアログを表示したい(apiリクエスト)。これを行うために、2つのパラメータtitleとエラーメッセージを持つモーダルを表示するサービスを作成しました。サービスでi18nファイルを使用するにはどうすればいいですか?

エラーメッセージの一部は静的なので、角度変換して直接変換することができます。

ここに私のサービス(errorModal.service.js):このサービスでは、特定のパスに国際化ファイルを使用するにはどうすればよい

(function() { 
    'use strict'; 

    angular 
     .module('app.core.project') 
     .factory('errorDialog', ['$mdDialog', '$document', '$translatePartialLoader', '$translate', errorDialog]); 

     /** @ngInject */ 
    function errorDialog($mdDialog, $document, $translatePartialLoaderProvider, $translate) 
    { 
     var service = { 
      displayError : displayError 
     }; 

     // path to i18n folder : /app/core-project/services/i18n/{lang}.json but it can't be used... 
     $translatePartialLoaderProvider.addPart('/app/core-project/services/'); 

     return service; 

     function displayError(title, errorMessage, clickOutsideToClose) 
     { 
      // error_modal.message isn't translated 
      var message = $translate.instant('error_modal.message') + errorMessage; 
      console.log(message); // show "error_modal.message" 

      $mdDialog.show(
       $mdDialog.alert() 
        .parent(angular.element($document.body)) 
        .clickOutsideToClose(clickOutsideToClose) 
        .title(title) 
        .htmlContent(message) 
        .ariaLabel(title) 
        .ok('OK') 
      ); 
     } 

    } 

})(); 

ありがとうございました!

答えて

0

解決策が見つかりました。 translatePartialLoaderプロバイダを自分のコンフィグレーションに追加しました。ここには、翻訳を見つける場所が指定されています。

(function() 
{ 
    'use strict'; 

    angular 
     .module('app.core.project') 
     .config(config); 

    /** @ngInject */ 
    function config($translatePartialLoaderProvider) 
    { 
     // Put your custom configurations here 

     $translatePartialLoaderProvider.addPart('app/core-project/services'); 
    } 

})(); 

と私のerrorModal.service.js

(function() { 
    'use strict'; 

    angular 
     .module('app.core.project') 
     .factory('errorDialog', ['$mdDialog', '$document', '$translate', errorDialog]); 

     /** @ngInject */ 
    function errorDialog($mdDialog, $document, $translate) 
    { 
     var service = { 
      displayError : displayError 
     }; 

     return service; 

     function displayError(statusCode, errorMessage) 
     { 
      var clickOutsideToClose = false; 

      var title = $translate.instant('core_project.dialog.error.status_code', { statusCode: statusCode }); 
      var message = $translate.instant('core_project.dialog.error.message', { message: errorMessage }); 

      $mdDialog.show(
       $mdDialog.alert() 
        .parent(angular.element($document.body)) 
        .clickOutsideToClose(clickOutsideToClose) 
        .title(title) 
        .htmlContent(message) 
        .ariaLabel(title) 
        .ok('OK') 
      ); 
     } 

    } 

})(); 
関連する問題