gpt4 book ai didi

javascript - AdonisJS - 如何根据 Antl Provider 的语言环境返回验证消息

转载 作者:行者123 更新时间:2023-12-01 15:03:52 27 4
gpt4 key购买 nike

我正在对我的 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 } })
}
})

但是我有两个带有验证消息的文件:
PT- https://github.com/LauraBeatris/xpack-adonis-api/blob/develop/resources/locales/pt/validation.json

CN - 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

最佳答案

使用 Antl get messages() 中的对象验证器的方法,你需要使用this.ctx.antl .喜欢 :

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

Adonis 不存储 Antl 使用的语言查询之间。所有路由都必须具有应用该语言的中间件(您制作的那个)。例子 :

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

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

如果你想让所有路由都有这个中间件,你必须在 start/kernel.js 中添加它. : https://adonisjs.com/docs/4.1/middleware#_global_middleware

如果您需要更多信息,请不要犹豫:)

关于javascript - AdonisJS - 如何根据 Antl Provider 的语言环境返回验证消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60250605/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com