私は、OS文化が何であるかにかかわらず、私が望むものに私のアプリケーションカルチャーを設定したいと思っています。これを取得するために、cultureとして "fa-IR"のCultureInfoクラスを使用しましたが、.NET PersianCalendarクラスではなく、デフォルトカレンダーとして "GregorianCalendar"を使用しました。だから、私は、顧客の文化を実装するためのCultureInfoから新しいクラスを派生してみました:.NET 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プロパティをオーバーライドしてみました
public override Calendar[] OptionalCalendars
{
get
{
return base.OptionalCalendars.Concat<Calendar>(new Calendar[1] { new PersianCalendar() }).ToArray<Calendar>();
}
}
しかし、それが解決didntの:デフォルトでは、リストのみのGregorianCalendarとHijriCalendarが含まれているため、それらにPersianCalendarを追加します問題。なにが問題ですか? CultureInfoとDateTimeFormatのデフォルトのカレンダーとしてPersianCalendarを正しい方法で設定するにはどうすればよいですか?
多分このリンクヘルプあなたより多くの同胞:) http://www.codeproject.com/Articles/17495/ Persian-DateTime – Arash