Я хочу установить для своей культуры приложений все, что захочу, независимо от культуры ОС.Для этого я использовал класс CultureInfo с "fa-IR" в качестве культуры, но в качестве календаря по умолчанию он использовал "GregorianCalendar", а не класс .NET PersianCalendar.Поэтому я попытался извлечь новый класс из CultureInfo для реализации своей культуры клиента:
/// <summary>
/// Represents culture specific information, Persian calendar and number format info for Iran.
/// </summary>
public class PersianCultureInfo : CultureInfo
{
private Calendar _calendar = new PersianCalendar();
public PersianCultureInfo()
: base("fa-IR", true)
{
}
/// <summary>
/// Persian calendar with solar system algorithm for Iran.
/// </summary>
public override Calendar Calendar
{
get
{
return this._calendar;
}
}
public static PersianCultureInfo Create()
{
PersianCultureInfo culture = new PersianCultureInfo();
culture.PerpareDateTimeFormatInfo();
return culture;
}
private void PerpareDateTimeFormatInfo()
{
this.DateTimeFormat.Calendar = this.Calendar;
this.DateTimeFormat.FirstDayOfWeek = DayOfWeek.Saturday;
}
}
Проблема в том, что свойство DateTimeFormat выдает следующее исключение:
Not a valid calendar for the given culture.
Parameter name: value
Поэтому я попыталсяпереопределите свойство OptionalCalendars, чтобы добавить к ним PersianCalendar, потому что по умолчанию список содержит только GregorianCalendar и HijriCalendar:
public override Calendar[] OptionalCalendars
{
get
{
return base.OptionalCalendars.Concat<Calendar>(new Calendar[1] { new PersianCalendar() }).ToArray<Calendar>();
}
}
Но это не решило проблему.Что случилось?Как правильно установить PersianCalendar в качестве календаря по умолчанию для CultureInfo и DateTimeFormat?