Я предлагаю немного другой подход. Не переводите его: сохраняйте в 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
.
Игровая площадка