我们使用角度翻译来处理网站的本地化,使用我们自己的自定义加载器从服务器获取翻译。在服务器端,我们有处理丢失的翻译键的逻辑,这样我们既可以返回一些东西(来自备用语言的翻译或键本身),也可以向系统报告请求了键(因此它会显示在翻译 UI 中网站上的其他地方)。现在,我正在努力在客户端构建类似的东西。
$translateProvider
有一个我们已经成功配置的方法,useMissingTranslationHandler(factory)
使用以下命令退出控制台缺少密钥:
app.config(function ($translateProvider) {
$translateProvider.useMissingTranslationHandler('translationMissingHandler');
});
app.factory('translationMissingHandler', translationMissingHandler);
translationMissingHandler.$inject = ['$window', '$log', '$http'];
function translationMissingHandler($window, $log, $http) {
return function (translationId) {
var culture = $window.preferredCulture, // workaround for another problem
errorInfo = {
key: translationId,
culture: culture
};
$log.warning('Translation missing:', errorInfo);
// $http.post('/api/v2/localization/missing', errorInfo);
}
}
但是,然后我取消对POST
服务器的注释,通知丢失的密钥,页面挂在angular.js
-的第 14394 行throw e
,在哪里e.message
[$rootScope:infdig] 达到 10 次 $digest() 迭代。中止!在最后 5 次迭代中触发的观察者:[]
我已经尝试了各种方法来解决这个问题 - 例如将调用包装起来$http.post()
或$timeout
但$rootScope.$apply
无济于事;我仍然收到相同的错误消息。
有没有办法安排$http.post()
从这里调用而不导致此错误?如果是这样,怎么做?