获取当前语言 next-i18next

Posted

技术标签:

【中文标题】获取当前语言 next-i18next【英文标题】:Get current language next-i18next 【发布时间】:2020-09-26 06:58:39 【问题描述】:

我正在使用 NextJS 和 next-i18next。这是我的主页:

import withTranslation  from '../config/next-i18next';

const Home = function Home() 
  return (<div>test</div>)
;

Home.getInitialProps = async () => 
  return namespacesRequired: ['home']
;

export default withTranslation('home')(Home);

我想要的是在组件/页面中获取当前语言,我该怎么做?

【问题讨论】:

【参考方案1】:

withTranslation 注入 i18n 对象。

import withTranslation  from '../config/next-i18next';

const Home = function Home( i18n ) 
  return (<div>i18n.language</div>)
  // ----------------^
;

Home.getInitialProps = async () => 
  return namespacesRequired: ['home']
;

export default withTranslation('home')(Home);

或者使用 Hooks,

import useTranslation  from '../config/next-i18next';

const Home = function Home() 
  const  i18n  = useTranslation('home');
  return (<div>i18n.language</div>)
  // ----------------^
;

Home.getInitialProps = async () => 
  return namespacesRequired: ['home']
;

export default Home;

【讨论】:

【参考方案2】:

借助 Next.js,您还可以使用 useRouter 挂钩。

import withTranslation  from '../config/next-i18next';
import  useRouter  from 'next/router'

const Home = function Home() 
const router = useRouter()
const currentLang =  router.locale // => locale string eg. "en"
  return (<div>test</div>)
;

Home.getInitialProps = async () => 
  return namespacesRequired: ['home']
;

export default withTranslation('home')(Home);

【讨论】:

只有在修改 next.config.js 后启用它才有效。您可以启用最多 100 个“已知”语言环境(我想支持任何可能的语言环境,我将其设置在 550 个语言环境内,但它会引发错误,说明存在此限制)。此外,它还会更改您的 url,使其始终位于语言环境中的路径上,mysite.com/mypage/ -> mysite.com/en-US/mypage 可能是您不想要的行为。

以上是关于获取当前语言 next-i18next的主要内容,如果未能解决你的问题,请参考以下文章

Next-i18next 初始语言环境参数未传递到 serverSideTranslations

当nextjs中的语言改变时,如何用next-i18next改变<Html“lang”/>?

Next-i18Next 在 NextJS 中阻塞全局状态

如何使用 NextJS 和 next-i18next 翻译路线?

next-i18next 翻译在故事书中不起作用,控制台日志丢失键

Nextjs 动态路由与 next-i18next 构建错误