Fix #5054: resolve the issue in fa-IR language.

This commit is contained in:
Ben 2025-02-12 20:18:10 +08:00
parent 628129c08d
commit aff99acfae
3 changed files with 156 additions and 0 deletions

View File

@ -34,6 +34,15 @@ namespace Oqtane.Extensions
options.SetDefaultCulture(defaultCulture)
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
for (var i = 0; i < options.SupportedCultures.Count; i++)
{
if (options.SupportedCultures[i].Name.Equals("fa-IR", StringComparison.OrdinalIgnoreCase))
{
options.SupportedCultures[i] = PersianCulture.GetPersianCultureInfo();
break;
}
}
});
return app;

View File

@ -0,0 +1,77 @@
using System;
namespace Oqtane.Infrastructure
{
public class PersianCalendar : System.Globalization.PersianCalendar
{
public override int GetYear(DateTime time)
{
try
{
return base.GetYear(time);
}
catch
{
// ignore
}
return time.Year;
}
public override int GetMonth(DateTime time)
{
try
{
return base.GetMonth(time);
}
catch
{
// ignore
}
return time.Month;
}
public override int GetDayOfMonth(DateTime time)
{
try
{
return base.GetDayOfMonth(time);
}
catch
{
// ignore
}
return time.Day;
}
public override int GetDayOfYear(DateTime time)
{
try
{
return base.GetDayOfYear(time);
}
catch
{
// ignore
}
return time.DayOfYear;
}
public override DayOfWeek GetDayOfWeek(DateTime time)
{
try
{
return base.GetDayOfWeek(time);
}
catch
{
// ignore
}
return time.DayOfWeek;
}
}
}

View File

@ -0,0 +1,70 @@
using System;
using System.Globalization;
using System.Reflection;
namespace Oqtane.Infrastructure
{
public class PersianCulture
{
public static CultureInfo GetPersianCultureInfo()
{
var persianCultureInfo = new CultureInfo("fa-IR");
SetPersianDateTimeFormatInfo(persianCultureInfo.DateTimeFormat);
SetNumberFormatInfo(persianCultureInfo.NumberFormat);
var cal = new PersianCalendar();
FieldInfo fieldInfo = persianCultureInfo.GetType().GetField("_calendar", BindingFlags.NonPublic | BindingFlags.Instance);
if (fieldInfo != null)
{
fieldInfo.SetValue(persianCultureInfo, cal);
}
FieldInfo info = persianCultureInfo.DateTimeFormat.GetType().GetField("calendar", BindingFlags.NonPublic | BindingFlags.Instance);
if (info != null)
{
info.SetValue(persianCultureInfo.DateTimeFormat, cal);
}
return persianCultureInfo;
}
public static void SetPersianDateTimeFormatInfo(DateTimeFormatInfo persianDateTimeFormatInfo)
{
persianDateTimeFormatInfo.MonthNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", string.Empty };
persianDateTimeFormatInfo.MonthGenitiveNames = persianDateTimeFormatInfo.MonthNames;
persianDateTimeFormatInfo.AbbreviatedMonthNames = persianDateTimeFormatInfo.MonthNames;
persianDateTimeFormatInfo.AbbreviatedMonthGenitiveNames = persianDateTimeFormatInfo.MonthNames;
persianDateTimeFormatInfo.DayNames = new[] { "یکشنبه", "دوشنبه", "ﺳﻪشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };
persianDateTimeFormatInfo.AbbreviatedDayNames = new[] { "ی", "د", "س", "چ", "پ", "ج", "ش" };
persianDateTimeFormatInfo.ShortestDayNames = persianDateTimeFormatInfo.AbbreviatedDayNames;
persianDateTimeFormatInfo.FirstDayOfWeek = DayOfWeek.Saturday;
persianDateTimeFormatInfo.AMDesignator = "ق.ظ";
persianDateTimeFormatInfo.PMDesignator = "ب.ظ";
persianDateTimeFormatInfo.DateSeparator = "/";
persianDateTimeFormatInfo.TimeSeparator = ":";
persianDateTimeFormatInfo.FullDateTimePattern = "tt hh:mm:ss yyyy mmmm dd dddd";
persianDateTimeFormatInfo.YearMonthPattern = "yyyy, MMMM";
persianDateTimeFormatInfo.MonthDayPattern = "dd MMMM";
persianDateTimeFormatInfo.LongDatePattern = "dddd, dd MMMM,yyyy";
persianDateTimeFormatInfo.ShortDatePattern = "yyyy/MM/dd";
persianDateTimeFormatInfo.LongTimePattern = "hh:mm:ss tt";
persianDateTimeFormatInfo.ShortTimePattern = "hh:mm tt";
}
public static void SetNumberFormatInfo(NumberFormatInfo persianNumberFormatInfo)
{
persianNumberFormatInfo.NumberDecimalSeparator = "/";
persianNumberFormatInfo.DigitSubstitution = DigitShapes.NativeNational;
persianNumberFormatInfo.NumberNegativePattern = 0;
persianNumberFormatInfo.NegativeSign = "-";
}
}
}