Angular translate扩展了现有的翻译

时间:2014-06-20 12:08:21

标签: angularjs angular-translate

我正在尝试让外部模块更改主模块上的$translateProvider.translation。将此视为我的应用的“翻译插件”。

似乎无法更改$translate服务的翻译。

mymodule.service('MyService', function ($translateProvider) {
    var lib = function () {
    //EDITED FOR BREVITY
        this._registerTranslations = function (ctrl) {
            if (!ctrl.i18n) return;
            for (var name in ctrl.i18n) {
            /////////////////////////////
            // THIS IS THE PLACE, OBVIOUSLY PROVIDER IS NOT AVAILABLE!!!!
               $translateProvider.translations(name, ctrl.i18n[name]);
            //////////////////////////////
            }
        };
    //EDITED FOR BREVITY
    };
    return new lib();
});
谁有一个好主意?

3 个答案:

答案 0 :(得分:1)

查看Asynchronous loading页面。您可以创建一个工厂,从任何地方加载翻译。

我创建了一个Angular常量来保存新的翻译。如果我想添加一个新的翻译,我将它添加到常量。然后在我的自定义加载器中,我首先检查常量以查看是否存在转换(新转换或更新转换)。如果是这样,我从常量加载它。如果没有,我从.json文件(或从您加载初始翻译的任何地方)加载它。使用$translate.refresh()强制重新加载和重新评估翻译。

Demo here

演示非常简单。如果你只是想改变翻译的一个子集,你需要做更多的工作,但是你会得到一般的想法。

答案 1 :(得分:1)

所以,回答你的问题:在没有使用异步加载的情况下,使用$translate服务在运行时期间无法扩展现有翻译。我想知道你为什么要这样做,因为以这种方式添加翻译意味着它们已经存在(否则你显然会使用异步加载)。

答案 2 :(得分:0)

来自AngularJS文档(https://docs.angularjs.org/guide/providers):

只有当您希望公开API 以便在应用程序启动之前必须进行的应用程序范围配置时,才应使用提供程序配方。这通常仅适用于可重用服务,其行为可能需要在应用程序之间略有不同。

提供者将与应用程序的.config功能一起使用。 $translateProvider用于配置,$translate用于其他服务和控制器。