Skip to content

Commit

Permalink
Merge pull request #5094 from zyhfish/task/set-fa-ir-culture
Browse files Browse the repository at this point in the history
Fix #5054: resolve the issue in fa-IR language.
  • Loading branch information
sbwalker authored Feb 19, 2025
2 parents 7c0482a + 94b03d2 commit 7a4ea8c
Show file tree
Hide file tree
Showing 3 changed files with 127 additions and 0 deletions.
8 changes: 8 additions & 0 deletions Oqtane.Server/Extensions/ApplicationBuilderExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,14 @@ public static IApplicationBuilder UseOqtaneLocalization(this IApplicationBuilder
options.SetDefaultCulture(defaultCulture)
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);

foreach(var culture in options.SupportedCultures)
{
if (culture.TextInfo.IsRightToLeft)
{
RightToLeftCulture.ResolveFormat(culture);
}
}
});

return app;
Expand Down
42 changes: 42 additions & 0 deletions Oqtane.Server/Infrastructure/Localization/RightToLeftCulture.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
using System;
using System.Globalization;
using System.Reflection;

namespace Oqtane.Infrastructure
{
public class RightToLeftCulture
{
public static CultureInfo ResolveFormat(CultureInfo cultureInfo)
{
SetNumberFormatInfo(cultureInfo.NumberFormat);
SetCalenar(cultureInfo);

return cultureInfo;
}

private static void SetCalenar(CultureInfo cultureInfo)
{
var calendar = new RightToLeftCultureCalendar();

var fieldInfo = cultureInfo.GetType().GetField("_calendar", BindingFlags.NonPublic | BindingFlags.Instance);
if (fieldInfo != null)
{
fieldInfo.SetValue(cultureInfo, calendar);
}

var info = cultureInfo.DateTimeFormat.GetType().GetField("calendar", BindingFlags.NonPublic | BindingFlags.Instance);
if (info != null)
{
info.SetValue(cultureInfo.DateTimeFormat, calendar);
}
}

public static void SetNumberFormatInfo(NumberFormatInfo persianNumberFormatInfo)
{
persianNumberFormatInfo.NumberDecimalSeparator = ".";
persianNumberFormatInfo.DigitSubstitution = DigitShapes.NativeNational;
persianNumberFormatInfo.NumberNegativePattern = 0;
persianNumberFormatInfo.NegativeSign = "-";
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
using System;

namespace Oqtane.Infrastructure
{
public class RightToLeftCultureCalendar : 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;
}
}
}

0 comments on commit 7a4ea8c

Please sign in to comment.