Как перевести перечисления на угловые 6 - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь перевести перечисления в Angular, но проблема в том, что я не знаю, как их перевести.Я могу читать их, я могу показать в раскрывающемся списке, но не перевести.

Ниже мой код

export enum test {
 test1 = '1 - do something',
 test2 = '2 - do anything',
}

Я читаю данные примерно так

public getEnum: any = {};

public ngOnInit(): void {
Object.values(test).map(a: string) => {

const id = a.substr(0, 5);
this.getEnum[id] = a;
}

И в HTML у меня есть что-то вроде этого

 [options]="getEnum"

Перевод это что-то вроде этого.

"dropdown": {
  "doSomething": {
    "test1": "1 - do something"
   }
}

1 Ответ

1 голос
/ 20 марта 2019

Я предлагаю немного другой подход. Не переводите его: сохраняйте в enum ключи для файла translation.json, например,

export enum Test {
 test1 = 'dropdown.doSomething.test1',
 test2 = 'dropdown.doSomething.test2',
}

В этом случае enum не будет зависеть от текущего языка, и вы сможете легко перевести значение из enum следующим образом:

const enTranslations = {
  dropdown: {
    doSomething: {
     test1: "1 - do something"
    }
  }
};

const getTranslatedText = (tranlations, keys: string[]) => keys.reduce((acc, curr) => acc[curr], translations);

const key1 = Test.test1
const translatedEnText = getTranslatedText(enTranslations, key1.split('.'));

Затем вы можете отобразить translatedEnText или передать его в вызов функции. translatedEnText === '1 - do something'

Если вы хотите получить текст с одного и того же ключа на другом языке, просто наберите getTranslatedText с другим объектом перевода, например, deTranslations

Если вы хотите отобразить ваше перечисление в объект с теми же ключами и переведенными значениями, сделайте что-то вроде этого:

const testEng = Object.values(Test).reduce((acc, key) => ({ ...acc, [key]: getTranslatedText(enTranslations, key.split('.'))}), {})

сокращение будет начинаться с {} в acc и на каждом шаге итерации будет добавляться к соответствующему переведенному тексту из getTranslatedText(enTranslations, key.split('.')) (как значение) в ключе key.

Игровая площадка

...