如何从.NET CultureInfo类派生自定义文化?

时间:2011-02-15 09:39:01

标签: c# globalization cultureinfo datetime-format persian

无论操作系统文化是什么,我都希望将我的应用文化设置为我想要的任何东西。为了获得这个,我使用了“fa-IR”作为文化的CultureInfo类,但它使用“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的默认日历?

3 个答案:

答案 0 :(得分:5)

尝试使用CultureAndRegionInfoBuilder。根据MSDN,这是creating custom cultures的首选方式。

编辑: 如果失败,我想a dirty workaround using reflection是创建这种自定义文化的唯一方法。

答案 1 :(得分:2)

五年过去了,事情发生了变化。 Microsoft已open sourced .NET,现在它支持dict((x[0], x) for x in sorted(any_list, key=len)).values() 开箱即用。

我已尝试使用.NET Core 1.0的以下代码段,它运行正常:

list()

答案 2 :(得分:0)

不幸的是,这是不可能的。它已被提交为一个错误,因此微软知道这个问题。见http://connect.microsoft.com/VisualStudio/feedback/details/507262/persian-cultureinfo