2009-07-06 4 views
5

Предположим, у меня есть дата, которую я могу представить в культурно-инвариантном формате (ISO 8601).Локализовать даты в браузере?

Я заеду 6 июля 2009, 3:54 вечера UTC время в Париже, а.к.а. 5:54 вечера по местному времени в Париже наблюдения сбережения дневного света.

2009-07-06T15: 54: 12,000 + 02: 00

OK ... есть ли скрытая жемчужина разметки, которая будет сказать браузеру, чтобы преобразовать эту строку в локализованной версии Это?

Ближайшим решением является использование Date.prototype.toLocaleString JavaScript (в). Это, безусловно, неплохая работа, но она может быть медленной итерации в течение многих дат, и она полагается на Javascript.

Есть ли HTML, CSS, XSLT, или в противном случае семантическая разметка, что браузер будет распознавать и автоматически создает корректную локализованную строку?

Edit:

Метод В настоящее время я использую заменить текст в HTML-элемента с локализованной строки:

Начиная с:

<span class="date">2009/07/06 15:54:12 GMT</span> 

Использование Javascript (с JQuery):

var dates = $("span.date", context); 
// use for loop instead of .each() for speed 
for(var i=0,len=dates.length; i < len; i++) { 
    // parse the date 
    var d = new Date(dates.eq(i).text()); 
    // set the text to the localized string 
    dates.eq(i).text(d.toLocaleString()); 
} 

С практической точки зрения, это делает текст «flash» новым значением при запуске Javascript, и мне это не нравится.

С точки зрения принципов, я не понимаю, почему мы должны это делать - браузер должен иметь возможность локализовать стандартные вещи, такие как валюта, даты, числа, если мы помечаем ее как таковую.


Следить за вопрос: Почему браузеры/веб не имеют такую ​​простую функцию - взять стандартный элемент данных, и отформатировать его в соответствии с настройками клиента?

+0

Я не знаю, что так или иначе, используя прямые языки разметки. Я почти уверен, что у вас будет какой-то скрипт. – Peter

ответ

2

Я использую toLocaleString() на своем сайте, и у меня никогда не было проблемы со скоростью его. Как вы получаете дату сервера в объект Date? Синтаксический?

Я добавляю узел комментариев прямо перед отображением даты, когда сервер видит его. Внутри узла комментариев указывается дата/время этого сообщения как количество миллисекунд с эпохи. В Rails, например:

<!--<%= post.created_at.to_i * 1000 %>--> 

Если включена JS, я использую JQuery, чтобы захватить те узлы, получить значение комментария, то:

var date = new Date(); 
date.setTime(msFromEpoch); 
// output date.toLocaleString() 

Если они не имеют JS они могут свободно делать конверсию в своей голове.

Если вы пытаетесь проанализировать время ISO, это может стать причиной вашей медлительности. Кроме того, сколько дат мы говорим?

+0

Я попробую использовать тики вместо формата ISO - я думаю, что это должно быть быстрее. Даты находятся где-то между 50 и 100. Это заметная «вспышка» на экране, когда даты локализуются. –

2

К сожалению, нет.

HTML & CSS строго используются для презентации, поэтому нет встроенных «умников», чтобы изменить способ отображения вещей.

Лучше всего было бы использовать на стороне сервера язык (например, .NET, Python и т.д.) испускать даты в HTML в формат, который вы хотите, чтобы они показали своему пользователю.

+0

Я хочу, чтобы у сервера был хороший способ узнать локализованные настройки клиента. –

+0

Не все мы :) – annakata

+4

Я видел хороший «трюк» для этого. На логине или на подобной странице поместите скрытое поле формы и используйте JavaScript для записи текущего времени пользователя на него.Затем, когда форма отправляется на ваш сервер, сравните время системы пользователей (согласно JavaScript) с временем сервера и вы можете определить их настройки часового пояса. – nikmd23

2

Это не представляется возможным сделать это с помощью HTML, он не имеет смарт-теги, которые могут сделать любые решения, как это. Это строго презентация. Я задаюсь вопросом, хотя, если возможно, HTML5 имеет тег для что-то вроде этого ...

В любом случае, как я понимаю, у вас есть 3 варианта:

  1. Придерживайтесь пути Javascript.Там же вопросы с более подробной информацией о нем на этом сайте, такие как How do I display a date/time in the user’s locale format and time offset? и How can I determine a web user’s time zone?

  2. Try использовать геолокации. То есть ваш сценарий на стороне сервера запускает запрос к одной из многих служб геолокатора, присутствующих на первой странице посещения пользователя, чтобы попытаться угадать, где находится пользователь. Недостатком этого является то, что он будет ошибочным примерно в 10% случаев, поэтому он не намного лучше, чем доля на рынке. Javascript собирается получить вас .... (в общем, это не очень хороший метод. ..)

  3. Спросите пользователя! Вы увидите, что большинство веб-сайтов, которые хотят отобразить индивидуальный опыт для вас, спросят вас об этом, потому что его просто невозможно узнать. Как аккуратный откат, вы можете обернуть вопрос вокруг тегов <noscript>, чтобы вы только спрашивали тех, у кого отключен Javascript, предлагая опыт Javascript тем, у кого он есть.

1

Язык и локаль пользователя должны быть отправлены по HTTP-заголовку. Вы можете использовать их для создания правильной даты на стороне сервера для отображения пользователю. Однако это часто нежелательно, потому что многие пользователи полностью игнорируют свои настройки локали в своей ОС и/или браузере. Таким образом, вы можете кормить образцы времени в стиле США для новозеландцев.

Мне понравился трюк, опубликованный в комментарии выше, но это звучит как головная боль QA, поскольку вы можете иметь дело с большим количеством клиентов, которые применяют временные метки по-разному.

Самое эффективное решение, которое я видел, это просто предоставить панель, чтобы пользователи могли выбирать, какой формат времени им нравится. Некоторые пользователи даже прогоняют **** как ISO-форматы. Затем вы делаете сервер преобразования формата времени. Если ваш язык приложения не имеет хорошего языкового стандарта для сопоставления форматирования часового пояса, проверьте свою базу данных. Во многих базах данных также поддерживается форматирование часового пояса на основе языка.

2

Додзе имеет довольно хорошее localizations for dates and currencies. Используя этот метод, вы также можете выбрать различные форматы (например: короткая дата и длительная дата) и принудительные локали.

Смежные вопросы