如何根据当前语言 (React / i18n) 显示不同的组件

How can I show a different component based on the current language (React / i18n)

谁能告诉我为什么这段代码不起作用?

编辑:我不能使用键,因为我想格式化文本。

VSC 显示此错误: 属性 'match' 在类型 'ITranslationContext' 上不存在。 ts(2339)

export const Preparation = () => {
  const i18n = useTranslation()
  const locale = i18n.match(["de", "fr", "it"])

  switch (locale) {
    case "de":
      return <PreparationGerman />
    case "fr":
      return <PreparationFrench />
    case "it":
      return <PreparationItalian />
  }
  return <PreparationEnglish />
}


const PreparationGerman = () => (
    <h1>German</h1>
)

const PreparationFrench = () => (
    <h1>French</h1>
)

const PreparationItalian = () => (
    <h1>Italian</h1>
)

const PreparationEnglish = () => (
    <h1>English</h1>
)

match() 方法在 string 中搜索与正则表达式的匹配项,以及 returns 匹配项,作为数组对象。

请查看 i18n 的文档以获得合适的方法。

但是,您不需要创建单独的组件。相反,为所有语言创建一个键(比如 lang)并使用它来显示组件内的语言。

 <h1>{i18n.translate('lang')}</h1>

编辑:

i18n 是包含语言环境的对象 属性。

将语言环境定义更新为:

const {locale} = i18n;