Угловой 2 пользовательский локаль

Как создать пользовательскую локаль для углового 2 {{значение | date: 'short'}} pipe? Я хотел бы иметь возможность использовать его следующим образом {{value | date:"MM/dd/yy" }}и отображать соответствующий формат даты.

dateom this answer Я знаю, как установить локаль в угловом режиме с помощью провайдера, но нигде в угловом исходном коде я не могу найти файлы локали, используемые в трубке даты, или как они включены в пакет угловых 2.

Для того, чтобы быть ясно , что я не хочу , чтобы сделать следующее: WARNINGS: - this pipe uses the Internationalization API. Therefore it is only reliable in Chrome and Opera browsers. .

angular,

1

Ответов: 1


1 принят

Короткий ответ

Казалось бы, нет никакого способа сделать это и на самом деле, вероятно, никогда не будет для встроенной dateтрубы Angular2 .

Детальное объяснение

Команда Angular2 решила реализовать поддержку локалей с помощью API интернационализации, как указано в начале исходного файла источника даты:

fr-CH

Теоретически это означает, что нам не нужно беспокоиться о форматировании локали, потому что все это будет доступно через API с контролируемым спецификацией, предоставляемый непосредственно браузером.

На практике, однако, мы сталкиваемся с проблемой необходимости беспокоиться о том, поддерживает ли браузер все будущие локали, которые вам когда-либо понадобятся в вашем приложении. Самый первый язык, который я пробовал ( fr), не работал, что заставило меня опубликовать этот вопрос. Кажется, что в настоящее время Chrome поддерживает только fr(без диалектов), как указано здесь (хотя эта ссылка предназначена для приложений Chrome, я думаю, что можно с уверенностью предположить, что этот код общего доступа с их реализацией Intl)

Альтернативная альтернатива труб

Поскольку в API интернационализации для каких-либо пользовательских локалей не существует каких-либо разрешений, лучшей альтернативой является внедрение пользовательского канала с использованием библиотеки момента; основанный на примере , взятом из этой должности reddit, любезно предоставлено deadcorps3 (только код концепции):

// Locale settings
let locale = getUserSelectedLanguage(); // retrieve from somewhere else

@Pipe({
  name: 'i18nDate'
})
export class I18nDatePipe implements PipeTransform {
  transform(value: string, format: string): string {
    let momentDate = moment(new Date(value));
    if (momentDate.isValid())
      return momentDate.locale(locale).format(format);
    else
      return value;
    }
}

Дополнительная информация

  • Существует polyfill для межд объекта здесь , но я не смотрел на это и не знаю , если вы можете использовать его , чтобы переопределить реализацию браузера по умолчанию. Я лично больше заинтересован в реализации чего-то с той библиотекой, которую я уже использую в своих проектах, вместо того, чтобы начинать добавлять повторяющиеся функции.
  • Я также нашел этот ответ stackoverflow полезным во время моих поисков.
угловая,
Похожие вопросы