带有后端的 Spartacus Storefront 多站点 I18n
Spartacus Storefront Multisite I18n with Backend
我们在执行 I18n 时 运行 遇到了 MultiSite Spartacus 设置的一些问题。
我们希望每个站点都有不同的翻译,所以我们将它们放在 API 上,这样可以返回依赖于 baseSite 的消息,例如:backend.org/baseSiteX/messages?group=common
但是 Spartacus 设置不允许我们通过 baseSite?我们可以
传递 {{lng}}
和 {{ns}}
,但没有传递 baseSite。
参见 https://sap.github.io/spartacus-docs/i18n/#lazy-loading
我们可以通过覆盖 i18nextInit
来实现,但我不确定如何实现。
在文档中,它说您可以在配置中使用 crossOrigin: true
,但这似乎不起作用。类型检查说它不受支持,它仍然显示 uw CORS-issues
有人对这些问题有想法吗?
目前 i18n.backend.loadPath
配置中仅支持语言 {{lng}} 和块名称 {{ns}} 作为动态参数。
为了实现您的目标,您可以实施自定义 Spartacus CONFIG_INITIALIZER
以根据 BaseSiteService.getActive()
:
中的值填充您的 i18n.backend.loadPath
配置
@Injectable({ providedIn: 'root' })
export class I18nBackendPathConfigInitializer implements ConfigInitializer {
readonly scopes = ['i18n.backend.loadPath']; // declare config key that you will resolve
readonly configFactory = () => this.resolveConfig().toPromise();
constructor(protected baseSiteService: BaseSiteService) {}
protected resolveConfig(): Observable<I18nConfig> {
return this.baseSiteService.getActive().pipe(
take(1),
map((baseSite) => ({
i18n: {
backend: {
// initialize your i18n backend path using the basesite value:
loadPath: `https://backend.org/${baseSite}/messages?lang={{lng}}&group={{ns}}`,
},
},
}))
);
}
}
并在您的模块中提供(即在 app.module 中):
@NgModule({
providers: [
{
provide: CONFIG_INITIALIZER,
useExisting: I18nBackendPathConfigInitializer,
multi: true,
},
],
/* ... */
})
注意:上述解决方案假定活动基站仅在应用程序启动时设置一次(默认情况下在 Spartacus 中就是这种情况)。
我们在执行 I18n 时 运行 遇到了 MultiSite Spartacus 设置的一些问题。
我们希望每个站点都有不同的翻译,所以我们将它们放在 API 上,这样可以返回依赖于 baseSite 的消息,例如:
backend.org/baseSiteX/messages?group=common
但是 Spartacus 设置不允许我们通过 baseSite?我们可以 传递{{lng}}
和{{ns}}
,但没有传递 baseSite。
参见 https://sap.github.io/spartacus-docs/i18n/#lazy-loading 我们可以通过覆盖i18nextInit
来实现,但我不确定如何实现。在文档中,它说您可以在配置中使用
crossOrigin: true
,但这似乎不起作用。类型检查说它不受支持,它仍然显示 uw CORS-issues
有人对这些问题有想法吗?
目前 i18n.backend.loadPath
配置中仅支持语言 {{lng}} 和块名称 {{ns}} 作为动态参数。
为了实现您的目标,您可以实施自定义 Spartacus CONFIG_INITIALIZER
以根据 BaseSiteService.getActive()
:
i18n.backend.loadPath
配置
@Injectable({ providedIn: 'root' })
export class I18nBackendPathConfigInitializer implements ConfigInitializer {
readonly scopes = ['i18n.backend.loadPath']; // declare config key that you will resolve
readonly configFactory = () => this.resolveConfig().toPromise();
constructor(protected baseSiteService: BaseSiteService) {}
protected resolveConfig(): Observable<I18nConfig> {
return this.baseSiteService.getActive().pipe(
take(1),
map((baseSite) => ({
i18n: {
backend: {
// initialize your i18n backend path using the basesite value:
loadPath: `https://backend.org/${baseSite}/messages?lang={{lng}}&group={{ns}}`,
},
},
}))
);
}
}
并在您的模块中提供(即在 app.module 中):
@NgModule({
providers: [
{
provide: CONFIG_INITIALIZER,
useExisting: I18nBackendPathConfigInitializer,
multi: true,
},
],
/* ... */
})
注意:上述解决方案假定活动基站仅在应用程序启动时设置一次(默认情况下在 Spartacus 中就是这种情况)。