gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:30:30 24 4
gpt4 key购买 nike

我想将我的应用程序文化设置为我想要的任何东西,而不管操作系统文化是什么。为了获得这个,我使用了带有“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 的默认日历?

最佳答案

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

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

关于c# - 如何从 .NET CultureInfo 类派生自定义文化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5001935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com