【问题标题】:angular-translate: how to reset translation table dynamically in $translationProvider?角度翻译:如何在 $translationProvider 中动态重置翻译表?
【发布时间】:2015-06-05 06:46:54
【问题描述】:

我正在使用 angular-translate 在我的应用程序中显示不同的语言,但是当我在成功登录后或通过其他 Web 服务调用尝试刷新翻译数据时出现错误。

注意:我在“app.config”中成功调用$translateProvider.useLoader 来设置默认翻译数据。但我需要在任何网络服务调用后在应用程序中动态重置该数据,因为语言数据因登录用户的组织而异(或可能随时更改)。

这是我尝试过的代码,它给了我一个 $translateProvider 未引用的错误:

var ctrl = angular.module('app.ctrls', ['pascalprecht.translate']);

ctrl.controller('LoginCtrl', ['$translate' 
                             ,'$translateProvider'   // << error!
                   , function( $translate  
                             , $translateProvider ) {
    ...
    // call web service to refresh "translations" in $translateProvider
}]);

仅供参考,该应用程序是使用基于 angularjs 的 Ionic 框架的移动应用程序。

【问题讨论】:

  • 我现在的解决方法是将任何最近下载的 LanguageData 文件存储到本地存储中——然后在配置阶段再次运行时读取它是否可用。此解决方法的问题在于,用户需要终止或退出在其手机上运行的应用程序才能再次执行配置阶段。理想情况下,我希望新数据立即生效(或至少不必终止应用)。
  • 已解决 - 根据 JB Nizet 的回答,每当 Web 服务调用返回指示语言数据已更改时,我都会调用 $translate.refresh()。这会调用我在“app.config”中设置的 $translateProvider.useLoader(),这是一个令人满意的解决方案。最初我试图根据来自 any Web 服务调用(如果有的话)的有效负载来设置数据,但这让事情变得干净和简单。

标签: angularjs internationalization ionic angular-translate


【解决方案1】:

提供者只能在配置阶段使用。应用程序运行后,只有服务(由提供者创建)可用。

但是$translate 服务有一个refresh() 方法。

【讨论】:

  • 感谢 JB Nizet,我也想通了。那么如何在应用 refresh() 之前将新下载的 languageData JSON 文件加载到 $translate 中?
  • 你读过 refresh() 的文档吗?它说什么?它说它使用加载器来加载新的翻译表。她描述了装载机:angular-translate.github.io/docs/#/guide/… 和自定义装载机(如果你需要的话):angular-translate.github.io/docs/#/guide/13_custom-loaders
  • 你是绝对正确的 JB Nizet!我只是在任何 Web 服务调用之后的适当时刻(例如登录后,或者当服务返回一个指示需要新语言刷新的标志时)添加对“$translate.refresh()”的调用。我已经阅读了该文档,但它似乎更多的是关于数据的部分加载和多种语言。经过漫长的一天,我只见树木不见森林。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 2022-01-23
  • 1970-01-01
相关资源
最近更新 更多