Мне нужно показать начальный день недели в зависимости от языкового стандарта и настроить средство выбора даты, чтобы отображать дни недели. Поскольку 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 был первоначально создан для улучшения интерактивности веб-страниц.
En-fr
— недопустимый локаль, проверьте полный список локалей, чтобы использовать действительный, поэтому он возвращается к значению по умолчанию, которое zero
(воскресенье)
Согласно угловым документам,
Получает первый день недели для данного языкового стандарта.
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
(понедельник)!