Как наследовать пользовательскую культуру из класса .NET CultureInfo?

Я хочу установить для своей культуры приложения все, что я хочу, независимо от культуры ОС. Чтобы получить это, я использовал класс 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?

6
задан Mehdi Sadeghi 16 February 2011 в 06:07
поделиться