在没有覆盖的情况下在应用程序之间共享 i18next 实例
Sharing i18next instance between applications without override
我目前正在国际化一个系统,该系统使用 single-spa(微前端)构建,应用程序在 Angular 和 React 上编写。
我开始使用 i18next 并且进展顺利,但是,我在尝试在所有应用程序之间共享 i18next 依赖项时发现了一个问题。
当两个应用程序同时安装在视图上时,最后加载的应用程序会覆盖 i18next 实例,因此永远不会找到第一个应用程序的翻译,因为它们没有加载到后者。
提前致谢!
最好在shell级别用shell命名空间初始化I18next
,每个内部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
我目前正在国际化一个系统,该系统使用 single-spa(微前端)构建,应用程序在 Angular 和 React 上编写。 我开始使用 i18next 并且进展顺利,但是,我在尝试在所有应用程序之间共享 i18next 依赖项时发现了一个问题。
当两个应用程序同时安装在视图上时,最后加载的应用程序会覆盖 i18next 实例,因此永远不会找到第一个应用程序的翻译,因为它们没有加载到后者。
提前致谢!
最好在shell级别用shell命名空间初始化I18next
,每个内部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