我有一个API<> SPA架构。
但我并不确切知道翻译的位置,特别是在发送错误时。
我更愿意在我的角度应用程序中翻译文本(i18n等)。 API应该只发送英文文本。
但我不知道如何
想象一下这样的错误信息:(nodejs + restify)
server.get('/api/', function (req, res, next) {
return next(new server.errors.UnauthorizedError('You are not authorized'));
});
这将发送一个带有json的401。
如果API只说英语,我怎样才能在SPA中最好地翻译它?
我怎样才能将其作为其中一种翻译方法:
<span>{{message | translate}}</span>
或
<span>{{lang.message}}</span>
当然我在Angular使用$ translateProvider并且在其中有一个包含翻译的定位文件。
发送语言密钥没有别的办法吗?像这样:
server.get('/api/', function (req, res, next) {
return next(new server.errors.UnauthorizedError('NOT_AUTHORIZED_ERROR'));
});
有了这个,我可以有一个locate-en.json文件,如:
{
errors: {
NOT_AUTHORIZED_ERROR: "You are not authorized"
}
}
我发现这种情况并不常见。
答案 0 :(得分:2)
您有两个选择:要么您认为您的客户首先知道API可以抛出的所有错误。通常情况下,如果API和客户端都由同一个团队实现。在这种情况下,让您的API返回一个错误对象,其中包含代码:
{
"code": "unauthorized",
"message": "some reason in english, usefull for debugging/logging"
}
然后使用此代码翻译错误客户端:
<span>{{error.code | translate}}</span>
第二个选项是让API转换错误消息。如果API可以在不知道客户端的情况下发展(并抛出新错误),请使用此选项。当然,在这种情况下,您受限于API支持的语言。
答案 1 :(得分:2)
如何将带有代码和消息的dictonary放入$ translateProvider并从本地存储中读取错误,如下所示:
app.config(['$translateProvider', function ($translateProvider) {
$translateProvider.translations('en', {
error : 'messageEN'
})
$translateProvider.translations('de', {
error : 'messageDE'
})
$translateProvider.preferredLanguage('en');
// remember language
$translateProvider.useLocalStorage();
}]);