Tôi muốn đặt văn hóa ứng dụng của mình thành bất kỳ thứ gì tôi muốn, bất kể văn hóa hệ điều hành là gì. Để có được điều này, tôi đã sử dụng lớp CultureInfo với "fa-IR" làm văn hóa, nhưng nó đã sử dụng "GregorianCalendar" làm lịch mặc định chứ không phải lớp .NET PersianCalendar. Vì vậy, tôi đã cố gắng để lấy được một lớp mới từ CultureInfo để thực hiện văn hóa của khách hàng của tôi:Làm thế nào để lấy được văn hóa tùy chỉnh từ lớp .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;
}
}
Vấn đề là tài sản DateTimeFormat ném ngoại lệ sau đây:
Not a valid calendar for the given culture.
Parameter name: value
Vì vậy, tôi đã cố gắng để ghi đè lên các tài sản OptionalCalendars để thêm PersianCalendar vào chúng, vì theo mặc định, danh sách chỉ chứa GregorianCalendar và HijriCalendar:
public override Calendar[] OptionalCalendars
{
get
{
return base.OptionalCalendars.Concat<Calendar>(new Calendar[1] { new PersianCalendar() }).ToArray<Calendar>();
}
}
Nhưng nó chưa được giải quyết vấn đề. Chuyện gì thế? Làm thế nào tôi có thể đặt PersianCalendar làm lịch mặc định cho CultureInfo và DateTimeFormat theo cách chính xác?
có thể liên kết này giúp bạn nhiều hơn người đồng hương :) http://www.codeproject.com/Articles/17495/ Persian-DateTime – Arash