微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

i18next-react - 如何在同一个应用程序中拥有 2 个 i18next 实例

如何解决i18next-react - 如何在同一个应用程序中拥有 2 个 i18next 实例

我开发了一个使用 18next 的组件 npm 库。图书馆的消费者,也使用 18next。 我们为每个实例创建了实例,并使用提供程序组件将其向下传递。

出于某种原因,翻译总是被消费者覆盖。

我尝试了解决方here

但是当我删除 .use(initReactI18Next) 时,它破坏了组件中的翻译,并没有帮助消费者解决最初的问题。还有其他可行的解决方案吗?

I18n.js 文件 - 在组件项目中:

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';

const resources = {
  en: {
    translation: require('./translations/messages_en.json'),},bg: {
    translation: require('./translations/messages_bg.json'),}

const widgetInstance = i18n.createInstance();
widgetInstance
  // pass the i18n instance to react-i18next so the t function will be in the context.
  .use(initReactI18next)
  // init i18next
  // for all options read: https://www.i18next.com/overview/configuration-options
  .init({
    resources,react: {
      useSuspense: false,fallbackLng: 'en',debug: true,interpolation: {
      escapeValue: false,// not needed for react as it escapes by default
    },})
  .then(result => result)
  .catch(error => console.error(error));

export default widgetInstance;

使用它的组件:

import i18next from '../../../locale/i18next';

....

<I18nextProvider i18n={i18next}>
<div className="myComponent"/>
</ I18nextProvider i18n={i18next}>

组件 npm 库的使用者中的 i18n.js:

import i18next from ‘i18next’;
import {initReactI18next} from “react-i18next”;
const newInstance1 = i18next.createInstance();
 export default function i18n(locale: string) {
   void  newInstance1.use(initReactI18next)
    .use({
     type: ‘backend’,read: (
        language: string,namespace: string,callback: (
          err: any | null,translations?: Record<string,string>,) => void,) => {
        return import(`./locales/messages_${locale}.json`)
          .then(translation => {
            callback(null,translation);
          })
          .catch(error => {
            callback(error);
          });
     },})
    .init({
      lng: locale,fallbackLng: “en”,keySeparator: false,});
     return newInstance1;
  }

在消费者的提供者中使用它的组件:

import i18n from ‘../../i18n’;
<I18nextProvider i18n={i18n(locale)}>
    <LibrayComponent {...props} />
    </I18nextProvider>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?