Angular getLocaleFirstDayOfWeek('en-FR') возвращает 0 (воскресенье) в качестве начального дня недели, тогда как он возвращает 1 (понедельник) для en-NL

Мне нужно показать начальный день недели в зависимости от языкового стандарта и настроить средство выбора даты, чтобы отображать дни недели. Поскольку NativeAdaptor всегда возвращает воскресенье в качестве дня начала недели, написан специальный адаптер для переопределения собственного метода getFirstDayOfWeek() с предоставленным angular https://angular.io/api/common/getLocaleFirstDayOfWeek. Ниже приведен класс CustomAdaptor.

import { getLocaleFirstDayOfWeek } from '@angular/common';
import { Inject, Injectable, LOCALE_ID } from '@angular/core';
import { NativeDateAdapter } from '@angular/material/core';
@Injectable()
export class CustomDateAdapter extends NativeDateAdapter {
  constructor(
    @Inject(LOCALE_ID) public locale: string
  ) {
    super(locale);
  }
  override getFirstDayOfWeek(): number {
    return getLocaleFirstDayOfWeek(this.locale);
  }
}

Этот CustomAdaptor отлично работает для «nl-NL» и «fr-FR», которые возвращают понедельник как начало недели. Но getLocaleFirstDayOfWeek('en-FR') возвращает воскресенье, а getLocaleFirstDayOfWeek('en-NL') возвращает понедельник. Таким образом, приложение несовместимо. При сравнении с https://www.google.com/travel/flights?gl=NL «en-NL» и «en-FR» должны возвращать понедельник как начало недели. Так что же является единственным источником истины для определения первого дня недели? Или в моей реализации требуется какая-то коррекция?

🤔 А знаете ли вы, что...
JavaScript был первоначально создан для улучшения интерактивности веб-страниц.


1
76
1

Ответ:

Решено

En-fr — недопустимый локаль, проверьте полный список локалей, чтобы использовать действительный, поэтому он возвращается к значению по умолчанию, которое zero (воскресенье)


Согласно угловым документам,

getLocaleFirstDayOfWeek(FUNCTION)

Получает первый день недели для данного языкового стандарта.

getLocaleFirstDayOfWeek (локаль: строка): WeekDay

Параметры

строка локали -> код локали для использования правил формата локали.

Возврат

WeekDay: номер индекса дня, использующий индекс дня недели, отсчитываемый от 0, для en-US (воскресенье = 0, понедельник = 1, ...). Например, для fr-FR возвращается 1, указывающее, что первый день — понедельник.

Исправление будет заключаться в том, чтобы всегда просто возвращать ноль!

  override getFirstDayOfWeek(): number {
    return 0;
  }

Исходный код: angular/packages/common/locales /closure-locale.ts

Здесь 8-й индекс — это firstDay of the week number недвижимости locale_fr, то есть 1 (понедельник)!