2013-03-20 1 views
0

новичок здесь. Собственно, первый вопрос.Как определить культуру пользователя в Интернете на основе их часового пояса?

Я использую NodaTime (на ASP.Net MVC 3 C#), чтобы обойти различные часовые пояса, и я действительно доволен результатами. Но ... Мне было интересно, есть ли способ получить информацию о культуре пользователя на основе часового пояса - то есть: отобразить дату/время.

Заранее благодарим за любую помощь!

UPDATE

Позвольте мне быть более ясным на этом ...

Я в состоянии определить время пользователя зоны с помощью jsTimeZoneDetect и NodaTime. Он работает отлично. Теперь мне нужно узнать информацию локали пользователя (формат даты/времени и т. Д.), Чтобы иметь возможность правильно отображать эту информацию. т.е.: пользователь, основанный на США, увидит дату как 3/21/2013.

Я попытался получить локаль из Request.UserLanguages ​​безрезультатно. IE правильно возвращает мою локаль (en-GB), но Firefox и Chrome всегда возвращаются в США. Я также изменил web.config и добавил следующий элемент:

<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true" /> 

И это кусок кода, я работал на:

var userLanguages = Request.UserLanguages; 

CultureInfo ci; 

if (userLanguages.Length > 0) 
{ 
    try 
    { 
     ci = new CultureInfo(userLanguages[0]); 
    } 
    catch (CultureNotFoundException) 
    { 
     ci = CultureInfo.InvariantCulture; 
    } 
} 
else 
{ 
    ci = CultureInfo.InvariantCulture; 
} 

string cultureName = ci.Name /* Always returns en-US */ 

Подобно тому, как другой точки, чтобы спросить пользователь, чтобы выбрать свою локальную информацию, не является для меня вариантом. т.е.: DropdownList на сайте и т. д.

Дальнейшая помощь? Заранее спасибо.

UPDATE 2

Следуя совет @JonSkeet, я изменил заголовок вопроса и этикетки, чтобы соответствовать моему вопросу лучше.

UPDATE 3

Только что узнал что-то. Возврат языка (языкового стандарта) зависит от браузера:

  • Internet Explorer возвращает язык, заданный в настройках ОС или в браузере.
  • Firefox, Chrome, Safari и Opera возвращают язык, установленный в настройках браузера.

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

У меня нет подсказки о том, что теперь делать.

+1

Как вы начинаете использовать часовой пояс пользователя? Я ожидаю, что будет легче получить культуру через информацию запроса HTTP. –

+1

Часовой пояс действительно не достаточно гранулирован для определения культуры. Существует несколько часовых поясов, которые содержат несколько типов культуры. – jmoerdyk

ответ

0

Чтобы ответить на вопрос, как просил, независимо от разъяснений запрошенных ...

В 1.0, у нас нет какой-либо географической информации, доступной. В 1.1, мы публикуем информацию от zoneinfo.tab, которая связывает местоположение с каждым часовым поясом (или, по крайней мере, с большинством из них), включая страну. Это не касается полной информации о культуре (например, она не различает французский канадский и английский канадский языки или разные языки, на которых говорят в Швейцарии), но она дает вам идея. Вы получите доступ к информации через TzdbDateTimeZoneSource.GeoLocations. (Доступно только для TZDB.)

Конечно, 1.1 еще не выпущен - но мы надеемся сделать это в ближайшие пару недель, почти наверняка, без каких-либо больших изменений API.

Я бы по-прежнему рекомендовал, чтобы обычно обнаруживать культуру через HTTP-запрос.

+0

Привет @JonSkeet. Спасибо за быстрый ответ. Это код: 'code' var zone1 = tzdb [" UTC "]; var ldt1 = new LocalDateTime (2013, 3 20, 8, 0); var zdt1 = zone1.AtLeniently (ldt1); var zone2 = tzdb ["America/Los_Angeles"]; var zdt2 = zdt1.ToInstant(). InZone (зона2); var ldt2 = zdt2.LocalDateTime; 'code' – melancia

+0

@MelanciaUK: Неясно, что этот код имеет отношение к вашему вопросу, хотя ... этот код вообще не использует культуру и не объясняет, как вы выписываете часовой пояс пользователя. –

+0

Единственная часть информации, которая мне нужна сейчас, это формат даты/времени. Будут исследовать запросы HTTP, как указано вами. Cheers – melancia