نمایش تاریخ و ساعت فارسی در MVC 5
نمایش تاریخ و ساعت فارسی در MVC 5
در این پست نحوه نمایش تاریخ و ساعت فارسی در MVC 5 را به صورت کامل آموزش می دهیم.
در اینجا یک روش بسیار مناسب و حرفه ای جهت نمایش تاریخ فارسی در MVC 5 را آموزش می دهیم. با استفاده از این روش دیگر شما نیاز به استفاده از dll ها یا روش های دیگر که نیاز به کد نویسی در قسمت های مختلف برنامه دارد را ندارید.
در اینجا شما تاریخ را به صورتی میلادی ثبت می کنید ولی کدهای که ما به برنامه اضافه می کنیم در کل برنامه به صورت فارسی نمایش می دهد.
برای این کار ابتدا یک کلاس به نام PersianCulture ایجاد کنید و کدهای زیر را به آن اضافه کنید.
using System; using System.Collections.Generic; using System.Globalization; using System.Reflection; namespace DisplayPersianDateInMVC5.Infrastructure { public class PersianCulture : CultureInfo { private readonly Calendar cal; private readonly Calendar[] optionals; /// <summary> /// </summary> /// <param name="cultureName">fa-IR</param> /// <param name="useUserOverride">true</param> public PersianCulture() : this("fa-IR", true) { } public PersianCulture(string cultureName, bool useUserOverride) : base(cultureName, useUserOverride) { //Temporary Value for cal. cal = base.OptionalCalendars[0]; //populating new list of optional calendars. var optionalCalendars = new List<Calendar>(); optionalCalendars.AddRange(base.OptionalCalendars); optionalCalendars.Insert(0, new PersianCalendar()); Type formatType = typeof(DateTimeFormatInfo); Type calendarType = typeof(Calendar); PropertyInfo idProperty = calendarType.GetProperty("ID", BindingFlags.Instance | BindingFlags.NonPublic); FieldInfo optionalCalendarfield = formatType.GetField("optionalCalendars", BindingFlags.Instance | BindingFlags.NonPublic); //populating new list of optional calendar ids var newOptionalCalendarIDs = new Int32[optionalCalendars.Count]; for (int i = 0; i < newOptionalCalendarIDs.Length; i++) newOptionalCalendarIDs[i] = (Int32)idProperty.GetValue(optionalCalendars[i], null); optionalCalendarfield.SetValue(DateTimeFormat, newOptionalCalendarIDs); optionals = optionalCalendars.ToArray(); cal = optionals[0]; DateTimeFormat.Calendar = optionals[0]; DateTimeFormat.MonthNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" }; DateTimeFormat.MonthGenitiveNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" }; DateTimeFormat.AbbreviatedMonthNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" }; DateTimeFormat.AbbreviatedMonthGenitiveNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" }; DateTimeFormat.AbbreviatedDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" }; DateTimeFormat.ShortestDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" }; DateTimeFormat.DayNames = new string[] { "یکشنبه", "دوشنبه", "ﺳﻪشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" }; DateTimeFormat.AMDesignator = "ق.ظ"; DateTimeFormat.PMDesignator = "ب.ظ"; DateTimeFormat.ShortDatePattern = "yyyy/MM/dd"; DateTimeFormat.LongDatePattern = "yyyy/MM/dd"; DateTimeFormat.SetAllDateTimePatterns(new[] { "yyyy/MM/dd" }, 'd'); DateTimeFormat.SetAllDateTimePatterns(new[] { "dddd, dd MMMM yyyy" }, 'D'); DateTimeFormat.SetAllDateTimePatterns(new[] { "yyyy MMMM" }, 'y'); DateTimeFormat.SetAllDateTimePatterns(new[] { "yyyy MMMM" }, 'Y'); } public override Calendar Calendar { get { return cal; } } public override Calendar[] OptionalCalendars { get { return optionals; } } } }
سپس به فایل Global.asax بروید و کد زیر را به آن اضافه کنید.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; using DisplayPersianDateInMVC5.Infrastructure; using System.Threading; namespace DisplayPersianDateInMVC5 { public class MvcApplication : System.Web.HttpApplication { protected void Application_BeginRequest(object sender, EventArgs e) { var persianCulture = new PersianCulture(); persianCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd"; persianCulture.DateTimeFormat.LongDatePattern = "dddd d MMMM yyyy"; persianCulture.DateTimeFormat.AMDesignator = "صبح"; persianCulture.DateTimeFormat.PMDesignator = "عصر"; Thread.CurrentThread.CurrentCulture = persianCulture; Thread.CurrentThread.CurrentUICulture = persianCulture; } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); } } }
حال اگر هر جای برنامه شما تاریخ به صورتی میلادی باشد هنگام نمایش به صورتی هجری شمسی نمایش داده خواهد شد.
نکته:
از این روش در Asp.Net نیز می توانید استفاده کنید.
در پست های بعدی با استفاده از این روش نحوه استفاده از DateTimePicker در MVC 5 را آموزش خواهیم داد.
نظر / سوال