2008-08-03 5 views
14

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

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

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

ответ

2

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

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

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

6

Just use 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 
1

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

4

Я должен согласиться с «неправильными» датами OP с моим обучением DD/MM/YYYY, и я считаю, что даты и время ISO 8601 чрезвычайно просты в работе. На этот раз стандарт получил это правильно, и engtech имеет очевидный ответ, который не требует локализации.

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

1

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

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

0

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

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