Локализация формата времени (час, минута) в moment.js - PullRequest
0 голосов
/ 16 апреля 2019

Поскольку у моментов есть возможность учитывать формат даты для разных локалей, есть ли у него возможность локализовать формат времени (час: минута)?

В соответствии с форматом времени oracle docs существует некоторая разница в формате времени по регионам https://docs.oracle.com/cd/E19455-01/806-0169/overview-6/index.html

moment (). Locale (somelocale) .format ('L') будет выводить форматированную дату

Однако

moment (). Locale (somelocale) .format ('LT') не имеет такой же способности?

class TimeFormatter extends React.Component {
  render() {
    const browserLocale = window.navigator.userLanguage || window.navigator.language;
    return (
      <div>
        {moment(this.props.value, 'HH:mm').locale(browserLocale).format('LT')}
      </div>);
  }
}

Выше приведен мой код для форматирования ячейки времени в сетке реагирующих данных, но пока я изменяю настройки Chrome, формат остается прежним.

Так что, если я хочу добиться локализации формата времени, могу ли я использовать моменты или мне нужно просто придумать условие if else для настройки конкретного формата времени региона пользователя

Большое спасибо

1 Ответ

1 голос
/ 16 апреля 2019

В формате LT учитывается языковой стандарт.

Вот несколько примеров:

moment().locale('en-CA').format('LT') //=> "1:21 PM"
moment().locale('fr-CA').format('LT') //=> "13:21"
moment().locale('fi-FI').format('LT') //=> "13.21"
moment().locale('de-DE').format('LT') //=> "13:21"
moment().locale('no-NO').format('LT') //=> "1:21 PM"
moment().locale('th-TH').format('LT') //=> "13:21"
moment().locale('en-GB').format('LT') //=> "13:21"

Обратите внимание, что страница Oracle, на которую вы ссылались, является частью документации Solaris 8 - операционной системы, которая вышла в феврале 2000 года и достигла конца срока службы в марте 2012 года. Она крайне ошибочна в отношении форматов времени, используемых в этих страны и языки. Вы не должны использовать это как ссылку.

Также обратите внимание, что он допустил серьезную ошибку, предполагая, что "канадский" был достаточен для полной идентификации локали. Как показано выше, франкоязычные канадцы используют 24-часовые часы, но многие англоязычные канадцы иногда используют 12-часовые часы (см. обозначение времени в Канаде ), и, таким образом, en-CA дает 12-часовой формат в то время как fr-CA дает 24-часовой формат.

Таким образом, одной страны недостаточно. Локаль должна состоять как минимум из языка, но обычно необходимы и язык, и страна. Теперь они называются «языковые теги IETF» и стандартизированы BCP 47 .

Что касается того, почему немецкая локализация Moment не включает в результат строку Uhr, это было то, что было сначала добавлено с # 1601 , но затем удалено с # 2006 - оба в 2014 году. См. Эти вопросы для рассуждения.

Также обратите внимание, что строки локализации Moment взяты из комментариев, предоставленных сообществом, и участников, внесших изменения. Во многих случаях они соответствуют стандартам, сопоставленным с Unicode CLDR , но в некоторых случаях они отличаются. Если вы ищете современную библиотеку дат с поддержкой стандартизированной локализации, рассмотрите Luxon , которая использует API интернационализации, встроенные в современные браузеры.

...