我想为该$translate
服务提供一个包装函数:https://angular-translate.github.io/docs/#/guide/03_using-translate-service,以便我们可以通过调用$ language.translate('keyword')而不是promise来在代码中轻松使用这些函数。
因此,我在我的应用程序中创建了一项新服务,该服务可以完成这项工作。这是一个非常简单的函数,但它返回的是undefined
或[Object Object]
。
angularApp.factory("$language", ['$translate', function($translate){
function trans(keyword){
console.log("translate in $language", keyword);
return $translate(keyword).then(function(msg) {
console.log("translation successfull", msg);
return msg;
}, function(translationId){
console.log("translation is not known", translationId);
return translationId
})
}
return {
translate : trans
}
}]);
在两种情况下,无论翻译是否已知,console.log()
都会为我显示正确的字符串,但是在我的页面上,它会显示[object object]或未定义(当我删除第一个return
在$translate(keyword)
之前。
当我使用{{:: "KEYWORD" | translate}}
之类的过滤器时,效果很好。
如何让我的函数返回带有translation或translationId的字符串(当未找到翻译时,该字符串实际上与关键字相同)?
答案 0 :(得分:1)
似乎您期望结果以同步方式进行,如果您使用的是异步变体,无论如何它将返回Promise
对象。
似乎您可以使用synchronous
使用$translate
服务的$translate.instant()
变体,但是这个sync
变体的缺点。如果在翻译过程中发生任何事情,您将不会收到错误代码。
重写
angularApp.factory("$language", ['$translate', '$sce', function($translate, $sce){
function trans(keyword){
console.log("translate in $language", keyword);
var translation = $translate.instant(keyword)
var msg = $sce.valueOf(translation);
if (msg) {
console.log("translation successfull", msg);
return msg;
}
else {
console.log("translation is not known");
return "Error"
}
}
return {
translate : trans
}
}]);