如何在服务中使用i18n文件(angular-translate)?

时间:2017-05-11 16:18:31

标签: javascript angularjs internationalization angular-translate

我正在使用angular-translate翻译我的网站并且它有效。但现在,我想在出现问题时显示错误对话框(api请求)。为此,我创建了一个服务来显示一个带有两个参数title和错误消息的模态。

错误信息的一部分是静态的,因此我可以使用angular-translate直接翻译它。

这是我的服务(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')
            );
        }

    }

})();

如何在此服务的特定路径中使用i18n文件?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分: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')
            );
        }

    }

})();