我试着在我的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);