Ускоряющая клавиша n предназначена для пропусков при навигации по страницам. Пропуск для перехода на начало контента.

Данный документ является переводом. В случае каких-либо несоответствий и ошибок последняя версия документа на английском языке должна рассматриваться в качестве официальной. Первоначальное авторское право принадлежит W3C, как то указано ниже.

Переводчик: World translation (Александр Шлапак)

s_gotoW3cHome Internationalization
 

Формати даты

Предполагаемая аудитория: шифровальщики XHTML/HTML (используя редакторы или скрипты), разработчики скриптов (PHP, JSP, и т.д.), менеджеры веб проектов, и каждый, кто хочет знать, как обращаться с международными форматами даты.

Вопрос

Как подготовить мои веб-страницы для отображения различных международных форматов даты?

Вводная информация

Посетителей сайта из разных мест могут запутать форматы даты. Формат MM/DD/YY (месяц/день/год) является уникальным для США. Почти вся Европа использует формат DD/MM/YY (день/месяц/год). Япония использует формат YY/MM/DD (год/месяц/день). Разделителями могут быть: слэш, тире или периоды. В некоторых местах нули, которые ставятся впереди печатают, а в некоторых их упускают. Если пользователь говорящий по японски на Немецком веб сайте читает веб страницу, которая написанная на Английском языке (на котором говорят американцы US), и эта страница содержит дату 03/04/02, то как они будут рассматривать эту дату?

Ответ

Ваш первый шаг может быть следующим: предположить что, эта проблема будет решена при локализации веб страниц - то есть пусть переводчик это исправит. Не делайте этого. Вы действительно хотите сохранять отдельные копии документов для США и Великобритании, которые отличаются только форматом даты? В любом случае вам все равно придется иметь дело с многоязычным пользователям, как в нашем вышеупомянутом примере.

У вас есть три варианта, у всех есть преимущества и недостатки:

  1. Используйте язык в нейтральном формате
  2. Делайте месяц и год очевидными
  3. Используйте Accept-Language HTTP заголовок

1-й вариант: Используйте язык в нейтральном формате

ISO 8601 указывает формат YYYY-MM-DD. 2003-04-02 более понятный формат чем 03/04/02. (Некоторые предпочитают модифицировать ISO 8601 с помощью аббревиатуры для месяца, чтобы сделать его более понятным, например 2003-Apr-02, но тогда это уже не будет нейтральный язык).

Плюсы:

Минусы:

2-й вариант: Делайте месяц и год очевидными

Для этого используйте название месяца (сокращенно или полностью) и используйте 4 цифры для обозначения года по Григорианскому календарю. Например, 2 апреля 2003.

Плюсы:

Минусы:

3-й вариант: Используйте Accept-Language HTTP заголовок

HTTP Accept-Language заголовок определяет только язык, которой пользователи предпочитают, но он также обычно используется для определения того, какой локали предоставляется предпочтение.

Этот метод хорошо работает для динамически создаваемых веб документов, когда дата берется из некоторой внутренней памяти страницы, до тех пор пока понятный формат даты, который ожидает пользователь. Соответствие является функцией речевого контекста, а не просто настройкой пользователя в браузере. Например:

Как это будет варьироваться в зависимости от вашей среды разработки. Вот некоторые советы для некоторых общих сред.

Java/JSP

Вызывайте ServletRequest метод getLocale или объект HttpServletRequest. Используйте возвращенный объект Locale для того, чтобы вызвать DateFormat. Обратите внимание, что SHORT (короткий) формат использует только цифры. Если вы хотите однозначные форматы, то используйте FULL (полный). В некоторых языках даже формат LONG (длинный) - числовой.

Смотрите также ICU4J, так как она содержит более современных данных (и больше функциональности) чем JDK (Набор для Разработки Java).

ASP

Используйте Request.ServerVariables('HTTP_ACCEPT_LANGUAGE'), чтобы получить данные которым пользователи отдают предпочтение. Анализируйте первый язык из списка принятых языков. Вы должны будете сделать свое собственное отображение с буквенного кода локали в числовой Идентификатор Языка. Установите полученное значение в Session.LCID. Для форматирования даты вызывайте FormatDateTime.

Чтобы избежать двусмысленности, используйте vbLongDate.

Perl

Чтобы получить язык, которому отдают предпочтение используйте $ENV{'HTTP_ACCEPT_LANGUAGE'}. Для форматирования значений даты используйте POSIX:strftime. Вы должны будете сделать свое собственное отображение значения принятых языков в строке с форматом даты.

Резюме

Нет идеального решения этой проблемы. Взвесьте варианты и выберите лучший вариант в зависимости от ваших предпочтений и ситуации.

Если, вероятно, будет любая двусмысленность со стороны пользователя то, как правило, лучше использовать очевидные названия месяца и 4-значные года по Григорианскому календарю, или по крайней мере указать на странице как читать даты.

Даты можно переформатировать используя динамические методы согласно лингвистическому контексту страницы.

Кстати говоря

Некоторые выступают за создание тэга <date>, который бы отображал даты в соответствии с языком клиентского приложения. Это зависит от тех же практических вопросов, которые описаны для динамической генерации даты в Японском примере. Соответствующий формат - это обычно функция лингвистического контекста страницы, а не платформа пользователя.

Выскажите своё мнение (по-английски).

Подпишитесь на ленту новостей RSS.

Новые публикации

Новости главной страницы

Twitter (Новости главной страницы)

‎@webi18n

Дополнительные материалы

Автор: Lloyd Honomichl, Lionbridge. Изменения внес: Richard Ishida, W3C. Переводчик: World translation (Александр Шлапак).

Допустимый XHTML 1.0!
Допустимый CSS!
Кодировка UTF-8!

Перевод с английского: 2007-07-04. Последнее внесение изменений в перевод: 2012-01-26 11:00 GMT

Для просмотра истории внесения изменений нажмите qa-date-format в блоге i18n.