代码之家  ›  专栏  ›  技术社区  ›  Dirkos

子包中的翻译

  •  0
  • Dirkos  · 技术社区  · 6 年前

    我试着在我的React应用程序中翻译一些东西。这在i18next和react-i18next中运行良好。我使用withNamespaces HOC来呈现翻译并用PoEdit扫描它们。到现在为止,一直都还不错。

    然而,我面临着两个问题。我还有一个库,它保存了我所有的UI组件。更像是从语义用户界面本身扩展出来的所有样式。在那里也有一些翻译是适用的,我想使用相同的 react-i18next 那里也有。在故事书中测试的时候一切看起来都很好 npm link 将包链接到我的主应用程序时,突然出现以下错误:

    caught TypeError: (0 , _reactI18next.withNamespaces) is not a function
    

    我的第二个问题是如何扩展翻译?例如,我有一个库,它将字段A转换为“你好吗?”。然而,当为客户运行一个项目时,我注意到客户希望对lib的一部分进行另一个翻译。 有没有办法覆盖它?因为事实上,这些翻译当然是捆绑的,并在组件内部加载。

    下面是一些代码:

    import i18n from 'i18next';
    import { reactI18nextModule } from 'react-i18next';
    import XHR from 'i18next-xhr-backend';
    import LanguageDetector from 'i18next-browser-languagedetector';
    
    i18n
      .use(XHR)
      .use(LanguageDetector)
      .use(reactI18nextModule)
      .init({
        load: 'languageOnly',
        backend: {
          loadPath: '../dist/locales/{{lng}}/{{ns}}.json'
        },
        fallbackLng: {
          'en-US': ['en']
        },
        ns: ['uielements'],
        defaultNS: 'uielements',
        fallbackNS: 'uielements',
        debug: false,
        keySeparator: '##',
        interpolation: {
          escapeValue: false // not needed for react!!
        },
        react: {
          wait: true,
          bindI18n: 'languageChanged loaded',
          bindStore: 'added removed',
          nsMode: 'default'
        }
      });
    
    export default i18n;
    

    以及组件本身:

    export default withNamespaces()(Dialog);
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Alex    6 年前

    npm i i18next@latest react-i18next@latest
    

    我刚刚检查了i18next v12.0.0和react-i18next v8.3.8。一切正常。