Angular: как изменить значение на основе значения ключа

Здравствуйте, я получаю строковое значение и хочу передать его другой функции. Так, например, если я получаю «eng», я хочу, чтобы это было «en». Я не хочу использовать slice или if. Я пытался сделать перечисление, но это не сработало.

ngOnInit(): void {    
this.setLocaleDateFormat(this.translateService.currentLang);
    }

 setLocaleDateFormat(language: Languages): void {
    this.dateAdapter.setLocale(language);   } 

export enum Languages {   
'eng' = 'en',   
'slk' = 'sk',   
'cze' = 'cz',
 }

Итак, я хочу передать значение и на основе какого-то шаблона изменить его на что-то другое. Я получаю eng, но я хочу, например, установить Locale на en.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
176
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Судя по вашему сообщению, this.translateService.currentLang вернет «eng». Я сомневаюсь в этом, но возвращаясь к вашему вопросу. Языки не должны быть перечислением. Это должен быть постоянный объект.

export const Languages = {
  eng: 'en',
  slk: 'sk',
  cze:  'cz',
};

setLocaleDateFormat(): void {
    this.dateAdapter.setLocale(Languages[this.translateService.currentLang]);
}

Тип language не Language, который является "en" | "sk" | "cz", а keyof typeof Languages.

Детская площадка

function setLocale(locale: Languages) {
  console.info('setLocale to', locale);
}

enum Languages {   
 'eng' = 'en',   
 'slk' = 'sk',   
 'cze' = 'cz',
}

function setLocaleDateFormat(language: keyof typeof Languages): void {
  setLocale(Languages[language]);
} 

setLocaleDateFormat('eng');

Сначала вам нужен ссылочный объект:

const map = {eng: 'en', slk: 'sk', cze: 'cz'};

Затем вы можете использовать его в своем коде следующим образом:

ngOnInit(): void {    
    this.setLocaleDateFormat(map[this.translateService.currentLang] || 'defaultLocale');
}

setLocaleDateFormat(language: string): void {
    this.dateAdapter.setLocale(language);   
} 

Другие вопросы по теме