مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

ebrahimi6357

عضویت از 1392/07/05

فارسی سازی تقویم در WPF

  • پنجشنبه 11 شهریور 1395
  • 04:01
تشکر میکنم

سلام

دوستان برای استفاده از تقویم فارسی در Winform  و وب فرم و MVC من قبلا از کلاس زیر استفاده می کردم :

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;

namespace GSD.Globalization
{

    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>
        /// <remarks>لطفا در هنگام استفاده به سايت سايان اشاره كنيد.</remarks>
        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; }
        }
    }
}

  این کد بدون مشکل کار می کنه و برای فرا خوانی فقط کافیه دستورات زیر را در StartUp قرار بدین:

   var persianCulture = new PersianCulture();
            Thread.CurrentThread.CurrentCulture = persianCulture;
            Thread.CurrentThread.CurrentUICulture = persianCulture;

اما در WPF کار نمی کنه

کسی می دونه چرا؟؟؟؟؟؟؟؟؟؟

پاسخ های این پرسش

تعداد پاسخ ها : 3 پاسخ
کاربر سایت

ebrahimi6357

عضویت از 1392/07/05

  • پنجشنبه 11 شهریور 1395
  • 04:16

با این روش تاریخ جاری سیستم شمسی میشه اما Calender کاملا شمسی نمیشه

یعنی روز اول هفته شنبه میشه و اعداد فارسی میشن اما ماهها و سال لود شده هنوز میلادی هستblush

            textBox.Text = DateTime.Now.ToShortDateString();

 

کاربر سایت

سجاد باقرزاده

عضویت از 1392/02/24

  • پنجشنبه 11 شهریور 1395
  • 07:53

برای تقویم فارسی از WpfToolkit استفاده کنید ، سورس نمونه پروژه را براتون می فرستم.

 

فایل های ضمیمه

کاربر سایت

ebrahimi6357

عضویت از 1392/07/05

  • جمعه 12 شهریور 1395
  • 13:35

ممنونم از پاسختون.

 

کامپوننت خیلی خوبیه

میشه بفرمایید در زمانهایی که لازمه تاریخ بصورت DateTime در دیتابیس ذخیره بشه (میلادی چون برای محدوده تاریخ شمسی SQL Server ارور میده) چطور باید در تلریک تاریخ شمسی نمایش داد.

البته من با تابع تاریخ را تبدیل کردم و تو دیتا تیبل ریختم و ItemSource  گرید را بهش وصل کردم. نمایش میده اما BindID کلید تیبل انجام نمیشه

ممنونم

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)