nuxt.js 中间件中有没有办法知道用于请求(页面)的语言?
以 nuxt.js ( https://nuxtjs.org/api/pages-middleware/ ) 提出的示例为例,假设一个页面以两种语言(法语和英语)被拒绝,并具有以下 URL:
- /fr/ma-page
- /zh/我的页面
在访问第一个或第二个 url 时,我们可以在中间件中直接使用的语言的指示器吗?还是应该解析页面 url 以找出(路由)?
因为我想根据请求的语言重定向用户......
nuxt.js 中间件中有没有办法知道用于请求(页面)的语言?
以 nuxt.js ( https://nuxtjs.org/api/pages-middleware/ ) 提出的示例为例,假设一个页面以两种语言(法语和英语)被拒绝,并具有以下 URL:
在访问第一个或第二个 url 时,我们可以在中间件中直接使用的语言的指示器吗?还是应该解析页面 url 以找出(路由)?
因为我想根据请求的语言重定向用户......
如果你使用的是nuxt-i18n
模块,那真的很简单,你有两种方法可以做到。我会建议第一个,但我认为就模块的工作原理给出一个观点会很酷。
两种解决方案都有相同的起点,i18n
从中间件获取context
。i18n
应该是从app
参数中访问的context
,所以我们从这里开始:
export default async function({ app: { i18n } }) {}
i18n
模块做硬举与您可以使用该$t
方法访问 Vue 组件中的翻译相同的方式,我们可以直接从i18n
对象中使用它。所以如果你要写一个 Vue 组件
$t('components.login.register')
然后在中间件中你会做
i18n.t('components.login.register')
i18n
更好地了解模块如果您检查i18n
模块公开的对象,您会发现包含以下参数:
locale
- 代表当前语言messages
- 保存每种活动语言的翻译的对象所以你可以很容易地得到前面的示例翻译,如下所示:
const { messages, locale } = i18n
const currentTranslations = messages[locale]
const wantedTranslation = currentTranslations.components.login.register
我建议您使用该i18n.t
模块,因为它可以处理您需要自己重写的一些抽象,但这是更好地理解该模块的一个很好的例子。