我正在尝试让外部模块更改主模块上的$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();
});
谁有一个好主意?
答案 0 :(得分:1)
查看Asynchronous loading页面。您可以创建一个工厂,从任何地方加载翻译。
我创建了一个Angular常量来保存新的翻译。如果我想添加一个新的翻译,我将它添加到常量。然后在我的自定义加载器中,我首先检查常量以查看是否存在转换(新转换或更新转换)。如果是这样,我从常量加载它。如果没有,我从.json文件(或从您加载初始翻译的任何地方)加载它。使用$translate.refresh()
强制重新加载和重新评估翻译。
演示非常简单。如果你只是想改变翻译的一个子集,你需要做更多的工作,但是你会得到一般的想法。
答案 1 :(得分:1)
所以,回答你的问题:在没有使用异步加载的情况下,使用$translate
服务在运行时期间无法扩展现有翻译。我想知道你为什么要这样做,因为以这种方式添加翻译意味着它们已经存在(否则你显然会使用异步加载)。
答案 2 :(得分:0)
来自AngularJS文档(https://docs.angularjs.org/guide/providers):
只有当您希望公开API 以便在应用程序启动之前必须进行的应用程序范围配置时,才应使用提供程序配方。这通常仅适用于可重用服务,其行为可能需要在应用程序之间略有不同。
提供者将与应用程序的.config
功能一起使用。 $translateProvider
用于配置,$translate
用于其他服务和控制器。