2014-01-22 3 views
3

Я хотел бы знать, как я могу определить, имеет ли экземпляр CultureInfo, возвращаемый CultureInfo.CurrentCulture, все значения по умолчанию или пользовательский настрой был настроен пользователем.Как определить, был ли пользователь CurrentCulture настроен пользователем?

Я провел некоторое тестирование с использованием следующего фрагмента LINQPad и LINQPad командной строки.

var ci = CultureInfo.CurrentCulture; 
var dtf = ci.DateTimeFormat; 

ci.Name.Dump("CultureInfo"); 
dtf.FullDateTimePattern.Dump("FullDateTimePattern"); 
dtf.LongDatePattern.Dump("LongDatePattern"); 
dtf.LongTimePattern.Dump("LongTimePattern"); 

Я выбираю английский (Южная Африка) как мой формат в диалоге области и мой сниппет сообщает следующее.

E:\Junk>lprun CurrentCulture.linq 
CultureInfo: en-ZA 
FullDateTimePattern: dd MMMM yyyy hh:mm:ss tt 
LongDatePattern: dd MMMM yyyy 
LongTimePattern: hh:mm:ss tt 

Затем изменить длинный формат даты, чтобы скрыть лидирующего нуля на день и длинный и короткий промежуток времени, чтобы быть 24 часа времени. Об этом сообщает этот фрагмент.

E:\Junk>lprun CurrentCulture.linq 
CultureInfo: en-ZA 
FullDateTimePattern: d MMMM yyyy HH:mm:ss 
LongDatePattern: d MMMM yyyy 
LongTimePattern: HH:mm:ss 

Несмотря на то, что названия культуры остаются теми же свойствами, которые я изменил, показывают мне новые значения.

Мой вопрос в том, есть ли одно свойство или метод, которые скажут мне, была ли культура, возвращенная CurrentCulture, изменена с ее по умолчанию (en-ZA в этом случае) или нет. Я думал, что CultureInfo.UseUserOverride может быть этим свойством, но он возвращает true в любом случае.

+1

Я думаю, вы могли бы просто сравнить все необходимые значения между 'CurrentCulture' и культурой, которые вы * создаете * для той же локали, что и текущий. – Sinatr

+0

Почему? В идеале ваше приложение не должно зависеть от культуры, которую пользователь установил на своей машине. – Grzenio

+0

Да @Sinatr, я мог бы сравнивать свойства, но с классом CultureInfo, который был настолько богат, я представил себе, что он, несомненно, сможет дать мне эту информацию. –

ответ

1

Вы не можете спросить, была ли изменена культура пользователем, но вы можете запросить культуру, которая не была изменена пользователем.

new CultureInfo(CultureInfo.CurrentCulture.Name, false); 

или

CultureInfo::GetCultureInfo(CultureInfo.CurrentCulture.Name); 

В любом из них, свойство UseUserOverrides будет ложным.

Только культура по умолчанию может иметь свои данные, переопределенные пользователем. Администратор может переопределить данные в любой культуре, установив настраиваемую культуру замены. Вы можете обнаружить это, проверив свойство CultureTypes для наличия флага CultureTypes.ReplacementCultures. В этом случае невозможно получить исходные данные.

Обратите внимание: если вы на самом деле пытаетесь написать код, который изменяет его поведение на основе этого, вы, вероятно, пишете код, который будет нарушен будущими версиями. Данные изменяются между релизами по мере исправления ошибок.