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) ...
          )
         )
       )
     )      
   )
 );

它需要更多的重构,但我希望你明白这个想法,这个想法是检查翻译是否存在,如果是,你就得到值,如果不存在,你就转到下一个调用