【问题标题】:Sharing i18next instance between applications without override在没有覆盖的应用程序之间共享 i18next 实例
【发布时间】:2020-06-23 09:22:41
【问题描述】:

我目前正在致力于国际化一个使用单 spa(微前端)构建的系统,该系统使用 Angular 和 React 编写的应用程序。 我开始使用 i18next 并且运行良好,但是在尝试在所有应用程序之间共享 i18next 依赖项时发现了一个问题。

当两个应用程序同时安装在视图上时,最后加载的应用程序会覆盖 i18next 实例,因此永远找不到第一个应用程序的翻译,因为它们没有加载到后者上。

提前致谢!

【问题讨论】:

    标签: i18next micro-frontend webpack-externals single-spa


    【解决方案1】:

    I18next 最好在 shell 级别使用 shell 命名空间进行初始化,每个内部 spa 都会将其命名空间添加到共享实例中。

    这样您就不会有重复的实例和代码。

    您可以使用 [i18next.addResourceBundle][1] 来添加与当前内部应用相关的翻译资源。

    
    i18next.addResourceBundle('en', 'app1/namespace-1', {
    // ----------------------------------^ nested namespace allow you to group namespace by inner apps, and avoid namespace collisions
      key: 'hello from namespace 1'
    });
    

    将 i18next 实例作为 props 传递给内部应用。

    // root.application.js
    
    import {i18n} from './i18n';
    // ------^ shells i18next configured instance
    
    singleSpa.registerApplication({
      name: 'app1',
      activeWhen,
      app,
      customProps: { i18n, lang: 'en' }
    });
    
    // app1.js
    
    export function mount(props) {
      const {i18n, lang} = props;
    
      i18n.addResourceBundle(lang, 'app1/namespace-1', {
        key: 'hello from namespace 1',
      });
      return reactLifecycles.mount(props);
    }
    

    希望这个想法很清楚:] [1]:https://www.i18next.com/how-to/add-or-load-translations#add-after-init

    【讨论】:

    • 我用其他问题更新了这个问题,我在按照你的回答后发现了问题。我没有将 i18next 作为道具传递,因为我知道它应该与导入一起使用 (github.com/openmrs/openmrs-react-root-decorator/blob/…)。它与其中一个应用程序一起正常工作,但在下一个应用程序中崩溃,因为它显示为未初始化。我把问题的细节放在了上面。
    • 你已经从库中导入了i18next,因此,它没有被初始化。您需要传递共享(和配置的)实例,注意,我是通过单水疗道具传递它来完成的,在您的情况下,这是 shell 的 initTranslation 变量
    • 我明白了。但是,我很困惑它是如何在另一个应用程序上而不是在那个应用程序上初始化的。
    • 我使用了我拥有的其他标头应用程序之一并且它工作正常,因此问题必须在我的应用程序中,与您或我的解决方案无关。我将再次编辑帖子并将您的答案标记为正确。谢谢!
    • 我在使用模块联合完成的个人微应用中使用 react-i18next。当我第一次在微型应用程序之间导航时,它会为每个应用程序调用 i18n 配置,但是当我再次导航时,它正在加载以前的应用程序配置。导致翻译错误。我做得对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2020-06-08
    • 1970-01-01
    相关资源
    最近更新 更多