Quiero establecer mi cultura de aplicación en lo que quiera, independientemente de la cultura del sistema operativo. Para obtener esto, utilicé la clase CultureInfo con "fa-IR" como cultura, pero utilizó el "GregorianCalendar" como calendario predeterminado y no la clase .NET PersianCalendar. Así que traté de derivar una nueva clase de CultureInfo para poner en práctica mi cultura del cliente:¿Cómo obtener cultura personalizada de la clase .Info 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;
}
}
El problema es que la propiedad DateTimeFormat lanza la siguiente excepción:
Not a valid calendar for the given culture.
Parameter name: value
por lo que trataron de reemplazar la propiedad OptionalCalendars para añadir el PersianCalendar a ellos, ya que por defecto la lista sólo contiene el GregorianCalendar y HijriCalendar:
public override Calendar[] OptionalCalendars
{
get
{
return base.OptionalCalendars.Concat<Calendar>(new Calendar[1] { new PersianCalendar() }).ToArray<Calendar>();
}
}
Pero que aún no ha resuelto el problema. ¿Qué está mal? ¿Cómo puedo configurar PersianCalendar como calendario predeterminado para CultureInfo y DateTimeFormat de la manera correcta?
quizá este enlace ayudará más Krajanske :) http://www.codeproject.com/Articles/17495/ Persian-DateTime – Arash