Как лучше всего локализовать дескриптор формата даты?
Любой представитель культуры, в которой не используется формат mm/dd/yyy, знает, что вводить даты в таком формате очень неприятно. Фреймворк .NET обеспечивает очень хорошую поддержку локализации, поэтому разбор дат в соответствии с культурой пользователя не представляет сложности, но часто требуется также отобразить полезную подсказку о требуемом формате (особенно для различения yy и yyy, которые в большинстве культур взаимозаменяемы).
Как лучше всего это сделать так, чтобы это было понятно большинству пользователей (например, dd/M/yyy сбивает с толку из-за изменения регистра и переключения между одной и двумя буквами).
Просто используйте стандарт 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
Я должен согласиться с ОП 'неправильно' даты действительно баночка с моим ДД/ММ/гггг воспитание и я считаю стандарту ISO 8601 даты и время, очень легко работать. На этот раз Стандарт получил это право и engtech имеет очевидный ответ, что не'т требуют локализации.
Я собирался сообщить входных рождения форма на переполнение стека, так как ошибка из-за того, сколько болит палец это для большинства мира.
Беда с международными стандартами заключается в том, что практически никто не использует их. Я стараюсь, где могу, но я вынужден использовать ДД/ММ/гггг практически везде и в реальной жизни, что означает, что я настолько к этому привыкли, это's всегда осознанный процесс, чтобы использовать ISO-8601. Для большинства людей, которые Дон'т даже попробовать использовать ISO-8601 это's даже хуже. Если вы можете интернационализировать, где вы можете, я думаю, это'с большим преимуществом.
Вот мой текущий метод. Какие-нибудь предложения?
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");
Как вариант - задать формат (mm/dd/yyy или dd/mm/yyy) с последующей распечаткой сегодняшней даты в культуре пользователя. В MSDN есть статья Форматирование DateTime для культуры пользователя с использованием объекта CultureInfo, которая может быть полезна для этого. Комбинация формата (который знаком большинству людей) в сочетании с текущей датой, представленной в этом формате, должна быть достаточной подсказкой для человека, как ему следует вводить дату. (Также включите элемент управления календарем для тех, кто все еще не может разобраться с этим).
Короткая форма удобна и помогает избежать ошибок. Локализовать насколько это применимо, но будьте уверены, чтобы отобразить ожидаемый формат (не оставляйте пользователя слепой). Укажите дату-комплектовщик контроль дополнительный помощник для заполнения поля.
В качестве дополнительного, на лету парсинг и отображение даты в длинной форме тоже может помочь.
Лучший выбор: вместо этого я бы порекомендовал использовать стандартный выбор даты.
Альтернатива: каждый раз, когда содержание изменений управления, анализа и отображения (в отдельном элементе управления?) длинный формат даты (т. е.: вход "и 03/04/09-то" Дисплей "и ваш вклад: 4 марта 2009 г. Фильм")