【问题标题】:How can I show a different component based on the current language (React / i18n)如何根据当前语言显示不同的组件(React / i18n)
【发布时间】:2021-05-29 13:43:19
【问题描述】:

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

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

VSC 显示此错误: 类型“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>
)

【问题讨论】:

    标签: reactjs internationalization


    【解决方案1】:

    match() 方法在 string 中搜索与正则表达式的匹配项,并将匹配项作为 Array 对象返回。

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

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

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

    编辑

    i18n 是一个包含 locale 属性的对象。

    将语言环境定义更新为:

    const {locale} = i18n;
    

    【讨论】:

    • 感谢您的回答!我使用键,但在这种情况下我想要复杂的格式。
    • 你能分享一下i18n里面收到的值吗?
    • 你是这个意思吗? availableLocales: (4) ["de-CH", "en", "fr-CH", "it-CH"] defaultLocale: "de-CH" elem: ƒ elem(key, values) locale: "de-CH " text: ƒ text(key, values) proto: Object
    • 好的,谢谢!!在这里您可以看到 i18n 是一个 object,其中包含 locale 属性。更新答案以获取语言环境值。
    猜你喜欢
    • 2023-01-24
    • 2017-10-25
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    相关资源
    最近更新 更多