繁体   English   中英

从 nuxt.js 中间件获取语言

[英]Get language from nuxt.js middleware

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

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

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

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

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

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

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

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模块,因为它可以处理您需要自己重写的一些抽象,但这是更好地理解该模块的一个很好的例子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM