Internationalization Spartacus店面多站点I18n,带后端

Internationalization Spartacus店面多站点I18n,带后端,internationalization,spartacus-storefront,i18next-http-backend,Internationalization,Spartacus Storefront,I18next Http Backend,在执行I18n时,我们的多站点Spartacus设置遇到了一些问题 我们希望每个站点有不同的翻译,因此我们将这些翻译放在一个API上,该API可以返回依赖于基本站点的消息,例如:backend.org/baseSiteX/messages?group=common 但是斯巴达克斯的设置不让我们通过基地?我们可以 通过{{lng}和{{{ns}},但没有基站。 看见 我们可以通过覆盖i18nextInit来实现,但我不确定如何实现这一点 在文档中,它说您可以在配置中使用crossOrigin:t

在执行I18n时,我们的多站点Spartacus设置遇到了一些问题

  • 我们希望每个站点有不同的翻译,因此我们将这些翻译放在一个API上,该API可以返回依赖于基本站点的消息,例如:
    backend.org/baseSiteX/messages?group=common

    但是斯巴达克斯的设置不让我们通过基地?我们可以 通过
    {{lng}
    {{{ns}}
    ,但没有基站。
    看见 我们可以通过覆盖i18nextInit来实现,但我不确定如何实现这一点

  • 在文档中,它说您可以在配置中使用
    crossOrigin:true
    ,但这似乎不起作用。类型检查表明它不受支持,并且仍然显示uw CORS问题


  • 有人对这些问题有想法吗?

    目前只有语言{{lng}和块名{{ns}}作为动态参数在
    i18n.backend.loadPath
    config中受支持

    为了实现您的目标,您可以实现一个定制的Spartacus
    CONFIG\u初始值设定项
    ,以根据
    BaseSiteService.getActive()中的值填充您的
    i18n.backend.loadPath
    配置:

    @Injectable({providedIn:'root'})
    导出类I18nBackendPathConfigInitializer实现ConfigInitializer{
    只读作用域=['i18n.backend.loadPath'];//声明要解析的配置键
    只读配置工厂=()=>this.resolveConfig().toPromise();
    构造函数(受保护的baseSiteService:baseSiteService){}
    受保护的resolveConfig():可观察{
    返回此.baseSiteService.getActive()管道(
    以(1)为例,
    地图((基本站点)=>({
    i18n:{
    后端:{
    //使用basesite值初始化i18n后端路径:
    加载路径:`https://backend.org/${baseSite}/messages?lang={{lng}}和group={{ns}}`,
    },
    },
    }))
    );
    }
    }
    
    并在您的模块(即应用程序模块)中提供:

    @NgModule({
    供应商:[
    {
    提供:CONFIG_初始值设定项,
    useExisting:I18nBackendPathConfigInitializer,
    多:是的,
    },
    ],
    /* ... */
    })
    

    注意:上述解决方案假定在应用程序启动时只设置一次活动的基本站点(默认情况下,Spartacus就是这种情况)