ngx-translate текст по умолчанию, если ключ отсутствует или загружается файл перевода

Я настраиваю новое приложение Angular 7. Я хочу установить текст по умолчанию для перевода. Так что в переводе {{ 'ждать' | перевести }}, я хочу установить текст «Ожидание сейчас» в качестве текста по умолчанию, если есть какой-либо запасной вариант. Означает, что если данные загружаются или ключ отсутствует, должно появиться переданное значение (в данном случае «Ожидание сейчас»).

Я пытался сделать что-то вроде {{ 'Intro' | translate:'localizedText' }}

Не не работал

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

Я ожидаю, что результат должен прийти как

{{ 'Введение' | translate:'localizedText' }} => Intro (если загружается или отсутствует ключ)

{{ 'Введение' | translate:'localizedText' }} => переведенный текст


person Sushil Kumar Gupta    schedule 13.04.2019    source источник


Ответы (2)


Я следовал инструкциям по созданию обработчика отсутствующих переводов здесь: 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;
  }
}
person GeekyMonkey    schedule 26.07.2019

вам нужно будет использовать пользовательский 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];
}
person Nadhir Falta    schedule 13.04.2019
comment
Я использую то же, что вы упомянули здесь. Проблема в том, что он вернет тот же ключ, который вы передали. Но я хочу вернуть значение по умолчанию для каждого отдельного ключа, как показано ниже: - {{ 'key1' | translate: 'Text 1' }} Он должен возвращать текст 1, если текст key1 отсутствует. {{ 'key2' | translate: 'Text 2' }} Должен возвращаться текст 2, если текст key2 отсутствует. Я ищу, чтобы достичь этого. Если можно поделитесь примером. - person Sushil Kumar Gupta; 13.04.2019
comment
да, вы можете добиться этого, поскольку у вас есть доступ к params.key, вам нужен другой объект/json, который содержит альтернативы/значения по умолчанию, который будет иметь ту же структуру, что и ваш исходный json, но только с другими значениями. - person Nadhir Falta; 14.04.2019
comment
Значит, я не могу сделать это из самого компонента. Что, если я хочу объявить что-то вроде <span translate="TRANSLATION_KEY" translate-default="Default text"></span>. То же, что мы делали в AngularJS. - person Sushil Kumar Gupta; 14.04.2019
comment
Я не могу найти какую-либо документацию для того же на ngx-translate. - person Sushil Kumar Gupta; 15.04.2019
comment
у вас есть идеи по этому поводу? - person Sushil Kumar Gupta; 28.04.2019