Angular 多个客户端和回退的本地化
Angular localization for multiple clients and fallbacks
我有一个 Angular 10 应用程序,将服务于多个客户。每个客户都可以拥有(这不是必须的)自己的一套翻译文本。我怎样才能实现这种多重回退?
完整的后备方案应如下所示:
[client.fr-CA]-> [client.fr] -> [client.en] -> (global-fr-CA) -> (global -fr) -> global-en
因此,如果在 client.fr-CA 中找不到该文本,则会在 client.fr 中搜索它,依此类推,直到它到达包含应用程序中所有文本的 global-en .
我也尝试使用 Angular 它自己的 i18n 实现,我也尝试使用 ngx-translate。他们都只有一个回退。我什至找不到像这样实现不同语言环境风格的方法:(fr-CA) -> (fr) -> en.
我应该实施自己的翻译机制吗? :)
提前致谢!
没有好的方法,但我会向您提出一些建议,您可以在其中使用异步管道获得翻译的价值
假设你有这个
<p>{{ 'name' | translate }}</p>
你必须把它改成
<p>{{name$ | async }}</>
并根据您的条件在您的控制器中获取翻译值,假设顺序是 fr -> en -> de
name$: Observable<string> = this.translate.getTranslation(fr).pipe(
switchMap(frTranslations=>
iif(() => !!frTranslations['name'] // check here if exist
, of(frTranslations['name'])
, this.translate.getTranslation(en).pipe(
switchMap(enTranslations=>
iif(() => !!enTranslations['name'] // check here if exist
, of(enTranslations['name'])
, this.translate.getTranslation(de) ...
)
)
)
)
)
);
它需要更多的重构,但我希望你明白这个想法,这个想法是检查翻译是否存在,如果是,你就得到值,如果不存在,你就转到下一个调用
我有一个 Angular 10 应用程序,将服务于多个客户。每个客户都可以拥有(这不是必须的)自己的一套翻译文本。我怎样才能实现这种多重回退? 完整的后备方案应如下所示:
[client.fr-CA]-> [client.fr] -> [client.en] -> (global-fr-CA) -> (global -fr) -> global-en
因此,如果在 client.fr-CA 中找不到该文本,则会在 client.fr 中搜索它,依此类推,直到它到达包含应用程序中所有文本的 global-en .
我也尝试使用 Angular 它自己的 i18n 实现,我也尝试使用 ngx-translate。他们都只有一个回退。我什至找不到像这样实现不同语言环境风格的方法:(fr-CA) -> (fr) -> en.
我应该实施自己的翻译机制吗? :)
提前致谢!
没有好的方法,但我会向您提出一些建议,您可以在其中使用异步管道获得翻译的价值
假设你有这个
<p>{{ 'name' | translate }}</p>
你必须把它改成
<p>{{name$ | async }}</>
并根据您的条件在您的控制器中获取翻译值,假设顺序是 fr -> en -> de
name$: Observable<string> = this.translate.getTranslation(fr).pipe(
switchMap(frTranslations=>
iif(() => !!frTranslations['name'] // check here if exist
, of(frTranslations['name'])
, this.translate.getTranslation(en).pipe(
switchMap(enTranslations=>
iif(() => !!enTranslations['name'] // check here if exist
, of(enTranslations['name'])
, this.translate.getTranslation(de) ...
)
)
)
)
)
);
它需要更多的重构,但我希望你明白这个想法,这个想法是检查翻译是否存在,如果是,你就得到值,如果不存在,你就转到下一个调用