1

У меня есть API <> Архитектура SPA.Лучшая практика обработки ошибок API с угловым переводом

Но я точно не знаю, куда отправлять переводы, особенно когда отправляются ошибки.

Я бы предпочел просто перевести текст (i18n и т. Д.) В свое угловое приложение. API должен отправлять только английские тексты.

Но я не знаю, как

Представьте себе сообщение об ошибке, как это: (nodejs + restify)

server.get('/api/', function (req, res, next) { 
    return next(new server.errors.UnauthorizedError('You are not authorized')); 
}); 

Это направит 401 с JSON в теле.

Если API говорит только по-английски, как я могу перевести его в лучшем случае в SPA?

Как я могу поместить это, один из этих переводов подходов:

<span>{{message | translate}}</span>

или

<span>{{lang.message}}</span>

Конечно я использую $ translateProvider в угловом и имею местонахождение файлов с переводом в нем.

Нет другого способа, посылая языковые ключи? Как это:

server.get('/api/', function (req, res, next) { 
    return next(new server.errors.UnauthorizedError('NOT_AUTHORIZED_ERROR')); 
}); 

С этим я мог бы определить местонахождение-en.json файл как:

{ 
    errors: { 
     NOT_AUTHORIZED_ERROR: "You are not authorized" 
    } 
} 

я нахожу этот вид редко.

ответ

1

У вас есть 2 варианта: вы можете предположить, что ваш клиент знает все ошибки, которые API может бросить. Обычно это происходит только в том случае, если API и клиент реализуются одной командой. В таком случае, пусть ваш API возвращает объект ошибки, который содержит код:

{ 
    "code": "unauthorized", 
    "message": "some reason in english, usefull for debugging/logging" 
} 

Затем использовать этот код, чтобы перевести на стороне клиента ошибка:

<span>{{error.code | translate}}</span> 

Второй вариант, чтобы API переводит сообщение об ошибке. Используйте этот параметр, если API может развиваться (и бросать новые ошибки) без ведома клиента. Конечно, в этом случае вы будете ограничены языками, поддерживаемыми API.

+0

Спасибо за ответ. Оба клиента и api разрабатываются одной командой. Мне не нравится второй вариант, потому что api должен знать язык клиентов, и мне придется реализовать файлы локализации в обоих местах: клиент и api. К сожалению, я должен создать ошибки, подобные этому, с помощью restify: 'next (new server.errors.UnauthorizedError ({body: {code: 'my_unauthorized_code', message: 'Вы не авторизованы'}})); ' Кроме того, есть ошибки проверки мангуста, с которыми мне приходится обращаться: -/ – Stefan

+0

Используя первый вариант, быть моим предпочтением. Просто убедитесь, что у вас есть резерв для любого неизвестного кода ошибки, например. внедрить фильтр errorcodetranslate, который отображает общее сообщение об ошибке, если код неизвестен. – fikkatra

2

Как насчет поместить справочник с кодом и сообщением в $ translateProvider и прочитать ошибку из локального хранилища, например:

app.config(['$translateProvider', function ($translateProvider) { 
    $translateProvider.translations('en', { 
     error : 'messageEN' 
    }) 
    $translateProvider.translations('de', { 
     error : 'messageDE' 
    }) 
    $translateProvider.preferredLanguage('en'); 
    // remember language 
    $translateProvider.useLocalStorage(); 
}]); 
Смежные вопросы