Я применяю интернационализацию для своего API, и у меня возникают некоторые проблемы, связанные с Antl и сообщениями проверки.
Со стандартными ответными сообщениями я возвращаюсь в соответствии с языковым стандартом, установленным пользователем. Я создал маршрут для переключения локалей и установил для cook ie и глобальное промежуточное ПО для получения локали от cook ie, а затем просто возвращаю сообщение, хранящееся в ресурсах локали.
Глобальное промежуточное ПО:
class Locale {
async handle ({ request, antl }, next) {
const lang = request.cookie('lang')
if (lang) {
antl.switchLocale(lang)
}
await next()
}
}
Маршрут:
Route.get('/switch/:lang', ({ params, antl, request, response }) => {
// Getting the current available locales
const locales = antl.availableLocales()
try {
// Saving into cookies
if (locales.indexOf(params.lang) > -1) {
response.cookie('lang', params.lang, { path: '/' })
}
return response.status(200).send({ message: 'Locale changed succesfully' })
} catch (err) {
return response.status(err.status).send({ error: 'Something went wrong while trying to switch locales', data: { message: err.message || 'Error message not found', name: err.name } })
}
})
Но у меня есть два файла с сообщениями проверки: PT - https://github.com/LauraBeatris/xpack-adonis-api/blob/develop/resources/locales/pt/validation.json RU - https://github.com/LauraBeatris/xpack-adonis-api/blob/develop/resources/locales/en/validation.json
И я хочу вернуть сообщения проверки в соответствии с текущей локалью, установленной пользователем, но проблема в том, что метод get класса валидатора не иметь доступ к объекту контекста antl, как и другие промежуточные программы.
Метод сообщений валидатора:
get messages () {
return Antl.list('validation')
}
Но, когда я изменил локаль с помощью объекта antl, предоставленного контекстом промежуточного программного обеспечения, он не изменяется в глобальном провайдере, поэтому сообщения проверки всегда будут возвращаться с языком по умолчанию, а не заданным пользователем в промежуточном программном обеспечении. Я хочу интегрировать маршрут переключения локалей с этим глобальным провайдером antl, чтобы я мог, например, возвращать португальские проверочные сообщения.
Это репо моего проекта: https://github.com/LauraBeatris/xpack-adonis-api