voglio impostare la mia cultura applicazione per quello che voglio, indipendentemente da ciò che la cultura del sistema operativo è. Per ottenere questo ho usato classe CultureInfo con "Fa-IR" come la cultura, ma è usato il "GregorianCalendar", come calendario predefinito e non la classe .NET PersianCalendar. Così ho cercato di derivare una nuova classe da CultureInfo per implementare la mia cultura del cliente:Come derivare la cultura personalizzata dalla classe .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;
}
}
Il problema è che la proprietà DateTimeFormat getta la seguente eccezione:
Not a valid calendar for the given culture.
Parameter name: value
Così ho provato a ignorare la proprietà OptionalCalendars per aggiungere il PersianCalendar a loro, perché per impostazione predefinita l'elenco contiene solo il GregorianCalendar e HijriCalendar:
public override Calendar[] OptionalCalendars
{
get
{
return base.OptionalCalendars.Concat<Calendar>(new Calendar[1] { new PersianCalendar() }).ToArray<Calendar>();
}
}
ma didnt risolto il problema. Che c'è? Come posso impostare PersianCalendar come calendario predefinito per CultureInfo e DateTimeFormat in modo corretto?
forse questo link aiuto più connazionale :) http://www.codeproject.com/Articles/17495/ Persiano-DateTime – Arash