APIに国際化を適用していて、Antlと検証メッセージに関連するいくつかの問題があります。
標準の応答メッセージでは、ユーザーが設定したロケールに従って返されます。ロケールを切り替えるルートを作成し、Cookieとグローバルミドルウェアに設定して、Cookieからロケールを取得した後、ロケールリソースに格納されているメッセージを返すだけです。
グローバルミドルウェア:
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 } })
}
})
しかし、検証メッセージを含む2つのファイルがあります:
PT- https
: //github.com/LauraBeatris/xpack-adonis-api/blob/develop/resources/locales/pt/validation.json
EN- 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