Вопрос

Как лучше всего локализовать дескриптор формата даты?

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

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

Это было полезно?

Решение 3

Вот мой текущий метод.Какие-либо предложения?

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");

Другие советы

Просто используйте 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 чрезвычайно легко работать.На этот раз стандарт понял все правильно и инженерия имеет очевидный ответ, не требующий локализации.

Я собирался сообщить о переполнении стека в форме ввода дня рождения как об ошибке, потому что это очень неприятно для большинства людей в мире.

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

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

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

Кроме того, может помочь оперативный анализ и отображение даты в длинной форме.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top