Internationalization Spartacus店面多站点I18n,带后端
在执行I18n时,我们的多站点Spartacus设置遇到了一些问题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
backend.org/baseSiteX/messages?group=common
但是斯巴达克斯的设置不让我们通过基地?我们可以 通过
{{lng}
和{{{ns}}
,但没有基站。看见 我们可以通过覆盖i18nextInit来实现,但我不确定如何实现这一点
crossOrigin:true
,但这似乎不起作用。类型检查表明它不受支持,并且仍然显示uw CORS问题
有人对这些问题有想法吗?目前只有语言{{lng}和块名{{ns}}作为动态参数在
i18n.backend.loadPath
config中受支持
为了实现您的目标,您可以实现一个定制的SpartacusCONFIG\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就是这种情况)