页面的多种语言(react-i18next)

时间:2019-10-16 06:23:04

标签: javascript reactjs i18next react-i18next

我正在将react-i18next lib用于语言。

问题:我需要为网站使用用户语言,但对于文章,我需要使用本文的语言。

我的解决方案:我想将当前文章包装在另一个I18nextProvider中,并将文章lang传递给它。我希望一切都会好起来:)如果可以,我会在这里写解决方案。

我的问题:也许存在该问题的另一种解决方案?

2 个答案:

答案 0 :(得分:0)

有效:

export const LanguageContainer: React.FC<Props> = (props) => {
  const i18n = React.useMemo(() => {
    const xhr = new XHR(undefined, {
      loadPath: (languages, namespace) => {
        const version = app.Version ? `?v=${app.Version}` : '';
        const dir = app.Production ? Configuration.Localization.RootDir : Configuration.Localization.DefaultRootDir;
        return url.resolve(dir, `./${props.lang}/${namespace}.json${version}`);
      },
    });
    const I18n = i18next.createInstance().use(xhr);

    I18n.init({
      ns: ['general'],
      defaultNS: 'general',
      fallbackLng: Configuration.Localization.DefaultLanguage,
      whitelist: Configuration.Localization.Languages.map((x) => x.key),
    });

    return I18n;
  }, [props.lang]);

  return (
    <I18nextProvider i18n={i18n}>
      {props.children}
    </I18nextProvider>
  );
};

以及使用方法:

<LanguageContainer lang="en">
   // here components which need to use lang en     
</LanguageContainer>

答案 1 :(得分:0)

<LanguageContainer lang=({language})>
  // here components which need to use lang en     
</LanguageContainer>

这是最好的选择,因为此值是您从客户组件发送的对象。在这种情况下,可以使用上下文