3

nuxt.js 中间件中有没有办法知道用于请求(页面)的语言?

以 nuxt.js ( https://nuxtjs.org/api/pages-middleware/ ) 提出的示例为例,假设一个页面以两种语言(法语和英语)被拒绝,并具有以下 URL:

  • /fr/ma-page
  • /zh/我的页面

在访问第一个或第二个 url 时,我们可以在中间件中直接使用的语言的指示器吗?还是应该解析页面 url 以找出(路由)?

因为我想根据请求的语言重定向用户......

4

1 回答 1

3

如果你使用的是nuxt-i18n模块,那真的很简单,你有两种方法可以做到。我会建议第一个,但我认为就模块的工作原理给出一个观点会很酷。

两种解决方案都有相同的起点,i18n从中间件获取contexti18n应该是从app参数中访问的context,所以我们从这里开始:

export default async function({ app: { i18n } }) {}

1. 最好的办法:让i18n模块做硬举

与您可以使用该$t方法访问 Vue 组件中的翻译相同的方式,我们可以直接从i18n对象中使用它。所以如果你要写一个 Vue 组件

$t('components.login.register')

然后在中间件中你会做

i18n.t('components.login.register')

2. 其他选择:i18n更好地了解模块

如果您检查i18n模块公开的对象,您会发现包含以下参数:

  • locale- 代表当前语言
  • messages- 保存每种活动语言的翻译的对象

所以你可以很容易地得到前面的示例翻译,如下所示:

const { messages, locale } = i18n
const currentTranslations = messages[locale]
const wantedTranslation = currentTranslations.components.login.register

我建议您使用该i18n.t模块,因为它可以处理您需要自己重写的一些抽象,但这是更好地理解该模块的一个很好的例子。

于 2020-08-09T10:21:45.057 回答