AdonisJS - Antlプロバイダーのロケールに応じた検証メッセージを返す方法

ローラBeatris:

私は私のAPIへの国際化を適用していると私はAntlと検証メッセージに関連したいくつかの問題を抱えています。

標準の応答メッセージで、私は、ユーザのロケールセットに従って帰国しています。私は、クッキーとクッキーからロケールを取得するための世界的なミドルウェアにスイッチロケールとセットへのルートを作成し、その後、私はちょうどロケールのリソースに格納されたメッセージを返します。

グローバル・ミドルウェア:

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-アドニス-API /ブロブ/開発/リソース/ロケール/ EN / validation.json

そして私は、ユーザーが現在のロケール設定に応じた検証メッセージを返すようにしたいが、問題は、バリデータクラスのgetメソッドは、他のミドルウェアなどのantlコンテキストオブジェクトへのアクセス権を持っていないということです。

バリのメッセージ方法:

    get messages () {
    return Antl.list('validation')
  }

私はミドルウェア・コンテキストによって提供さantlオブジェクトにロケールを変更したときに検証メッセージが常にミドルウェアで、ユーザが代わりに1セットで、デフォルトのロケールを返しますので、しかし、それは、世界的プロバイダーでは変更されません。 。私は、たとえば、ポルトガルの検証メッセージを返すことができますので、そのantlグローバルプロバイダとロケールスイッチルートを統合したいです。

それは私のプロジェクトのレポです:https://github.com/LauraBeatris/xpack-adonis-api

CrBast:

使用するにはAntl、オブジェクトをget messages()バリの方法、あなたは使用する必要がありますthis.ctx.antlお気に入り :

var antl = this.ctx.antl;
...
antl.formatMessage(...)


アドニスはで使用される言語は格納されませんAntlクエリの間を。すべてのルートは、言語(あなたが作ったもの)を適用するミドルウェアを持っている必要があります。例:

Route.get('/user', 'UserController.Get').middleware(['Locale']); // Use cookie language

Route.get('/user', 'UserController.Get'); // Use default language

あなたはすべてのルートは、このミドルウェアを持っているしたい場合は、それを追加する必要がありますstart/kernel.jshttps://adonisjs.com/docs/4.1/middleware#_global_middleware

あなたはより多くの情報が必要な場合は躊躇しないでください:)

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=7506&siteId=1