【问题标题】:ngx-translate default text if key is missing or translation file is being loaded如果缺少密钥或正在加载翻译文件,则 ngx-translate 默认文本
【发布时间】:2019-04-13 05:47:41
【问题描述】:

我正在设置一个新的 Angular 7 应用程序。我想为翻译设置默认文本。所以在翻译 {{ 'wait' |翻译}},如果有任何后备,我想将文本“Waiting Now”设置为默认文本。表示如果正在加载数据或缺少键,则应显示传递的值(在本例中为 Waiting Now)。

我试图做类似{{ 'Intro' | translate:'localizedText' }}

没有成功

{{ 'Intro' | translate:'localizedText' }}

我希望结果应该是

{{ '简介' |翻译:'localizedText' }} => 介绍(如果正在加载或缺少键)

{{ '简介' |翻译:'localizedText' }} => 翻译文本

【问题讨论】:

    标签: angular typescript translation ngx-translate


    【解决方案1】:

    我按照说明在此处创建了缺少的翻译处理程序:https://github.com/ngx-translate/core#how-to-handle-missing-translations

    但我的版本允许像这样将默认值传递给管道

    <span>{{"MyTranslateKey" | translate: {Default: "Default Translation"} }}</span>
    

    默认值可以是上面的特定字符串,也可以是变量。

    这是我的处理程序:

    import {MissingTranslationHandler, MissingTranslationHandlerParams} from '@ngx-translate/core';
    
    export class MissingTranslationHelper implements MissingTranslationHandler {
      handle(params: MissingTranslationHandlerParams) {
        if (params.interpolateParams) {
          return params.interpolateParams["Default"] || params.key;
        }
        return params.key;
      }
    }
    

    【讨论】:

      【解决方案2】:

      你需要使用自定义的MissingTranslationHandler 像这样:

      在您的 app.module 或您正在加载的任何地方 TranslateModule.forRoot 执行此操作:

      @Injectable()
      export class MyMissingTranslationHandler implements MissingTranslationHandler {
          handle(params: MissingTranslationHandlerParams): string {
              return `**MISSING KEY: ${params.key}**`;
          }
      }
      

      在你的providers:[] 中添加这个:(在你导入MissingTranslationHandler 之后)

      {
          provide: MissingTranslationHandler,
          useClass: MyMissingTranslationHandler
      },
      

      查看此链接了解更多详情:

      https://github.com/ngx-translate/core#how-to-handle-missing-translations

      要返回缺少的默认值,您可以尝试以下操作:

      1- 创建一个对象/json 以包含默认值,该 json 应包含与原始 json 相同的结构。

      const alternativeJson = {  
             value1: 'default1'
      }
      
      handle(params: MissingTranslationHandlerParams): string {
              return this.alternativeJson[params.key];
      }
      

      【讨论】:

      • 我使用的和你在这里提到的一样。问题是它将返回您传递的相同密钥。但是我想为每个单独的键返回一个默认值,如下所示:-{{ 'key1' | translate: 'Text 1' }} 如果缺少 key1 文本,它应该返回 Text 1。 {{ 'key2' | translate: 'Text 2' }} 如果缺少 key2 文本,它应该返回 Text 2。我正在寻求实现这一目标。如果可能的话,分享一些例子。
      • 是的,您可以实现这一点,因为您可以访问params.key,您需要的是另一个包含替代/默认值的对象/json,其结构与原始 json 相同,但是只是具有不同的值。
      • 意思是,我不能从组件本身做到这一点。什么,如果我想声明类似&lt;span translate="TRANSLATION_KEY" translate-default="Default text"&gt;&lt;/span&gt; 的东西。与我们在 AngularJS 中所做的相同
      • 我无法在 ngx-translate 上找到任何相同的文档
      • 你有什么想法吗?
      猜你喜欢
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      相关资源
      最近更新 更多