Локализация дескрипторов формата даты - PullRequest
16 голосов
/ 03 августа 2008

Каков наилучший способ локализации дескриптора формата даты?

Как известно любому человеку из культуры, которая не использует формат mm / dd / yyyy, досадно вводить даты в этом формате. .NET Framework обеспечивает очень хорошую поддержку локализации, поэтому тривиально анализировать даты в соответствии с культурой пользователей, но вы часто хотите также показать полезную подсказку относительно требуемого формата (особенно для различия между yy и yyyy, которые взаимозаменяемы большинство культур).

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

Ответы [ 7 ]

6 голосов
/ 03 августа 2008

Просто используйте ISO-8601 . Это международный стандарт.

Date and time (current at page generation) expressed according to ISO 8601:
Date:                           2014-07-05
Combined date and time in UTC:  2014-07-05T04:00:25+00:00
                                2014-07-05T04:00:25Z
Week:                           2014-W27
Date with week number:          2014-W27-6
Ordinal date:                   2014-186
4 голосов
/ 04 августа 2008

Я должен согласиться с тем, что «неправильные» даты ОП действительно противоречат моему ДД / ММ / ГГГГ воспитанию, и я считаю, что с датами и временем ISO 8601 работать очень просто. Как только стандарт понял все правильно, и engtech дает очевидный ответ, который не требует локализации.

Я собирался сообщить о форме ввода дня рождения при переполнении стека как об ошибке из-за большого пальца в большинстве стран мира.

2 голосов
/ 04 августа 2008

Проблема международных стандартов в том, что их практически никто не использует. Я стараюсь, где могу, но я вынужден использовать дд / мм / гггг почти везде в реальной жизни, что означает, что я настолько привык к этому, что использование ISO-8601 всегда осознанно. Для большинства людей, которые даже не пытаются использовать ISO-8601, это еще хуже. Если вы можете интернационализировать, где вы можете, я думаю, что это большое преимущество.

2 голосов
/ 03 августа 2008

Вот мой текущий метод. Есть предложения?

Regex singleMToDoubleRegex = new Regex("(?<!m)m(?!m)");
Regex singleDToDoubleRegex = new Regex("(?<!d)d(?!d)");
CultureInfo currentCulture = CultureInfo.CurrentUICulture;

// If the culture is netural there is no date pattern to use, so use the default.
if (currentCulture.IsNeutralCulture)
{
    currentCulture = CultureInfo.InvariantCulture;
}

// Massage the format into a more general user friendly form.
string shortDatePattern = CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern.ToLower();
shortDatePattern = singleMToDoubleRegex.Replace(shortDatePattern, "mm");
shortDatePattern = singleDToDoubleRegex.Replace(shortDatePattern, "dd");
1 голос
/ 04 августа 2008

Короткая форма удобна и помогает избежать орфографических ошибок. Локализуйте, если применимо, но обязательно отобразите ожидаемый формат (не оставляйте пользователя слепым). Предоставьте элемент управления выбора даты в качестве необязательного помощника при заполнении поля.

Также может помочь анализ на лету и отображение даты в длинном виде.

1 голос
/ 03 августа 2008

Как насчет указания формата (мм / дд / гггг или дд / мм / гггг) с последующей распечаткой сегодняшней даты в культуре пользователя. В MSDN есть статья о форматировании DateTime для культуры человека с использованием объекта CultureInfo, который может помочь в этом. Комбинация формата (с которым большинство людей знакомо) в сочетании с текущей датой, представленной в этом формате, должна быть достаточной подсказкой для человека о том, как они должны вводить дату. (Также включите элемент управления календаря для тех, кто все еще не может понять это).

0 голосов
/ 19 сентября 2008

Лучший вариант : вместо этого я бы рекомендовал использовать стандартный инструмент выбора даты.

Альтернатива : каждый раз, когда изменяется содержимое элемента управления редактированием, анализируйте его и отображайте (в отдельном элементе управления?) Длинный формат даты (т.е. введите «03/04/09») «Ваш вклад: 4 марта 2009 г.»)

...