HandyControls icon indicating copy to clipboard operation
HandyControls copied to clipboard

Using both (Persian and Gregorian) calendars in single control and custom month names for PersianCalendar

Open hussain1368 opened this issue 4 years ago • 22 comments

  1. Would be very nice if the PersianCalendar control would be able to render both Gregorian and Persian calendars based on may be a DependencyProperty like IsGregorian? That would be great for multi-culture applications.
  2. Custom month names for Persian calendar would be very useful. for example if I need to use "Dari" month names like (حمل) instead of (فروردین) and (ثور) instead of (اردیبهشت). Thanks

hussain1368 avatar May 31 '21 10:05 hussain1368

در خصوص قسمت دوم، امکان اینکه بصورت پراپرتی ازش استفاده بشه نیست، حداقل فعلا نتونستم ازش نتیجه بگیرم راه حلی که وجود داره اینه که بصورت توکار از اسامی افغانستان پشتیبانی بشه و با تغییر کالچر برنامه اسامی تغییر کنه که این براحتی شدنی هست نظری در این خصوص دارید؟ همینطور بنظر میرسه افغانستان شامل 3 تا کالچر هست fa-AF ps-AF prs-AF ایا هرسه باید پشتیبانی بشه؟ ایا اسامی ماه و روز در هر سه یکسان هست؟ ایا تاریخ افغانستان با تاریخ ایران یکسان هست؟ ینی الان 10 خرداد هست ایا تو افغانستان هم 10 خرداد هست یا اینکه از تقویم اختصاصی خودشون استفاده میکنن؟ اگر از تقویم اختصاصی استفاده میکنن، پیاده سازی این ویژگی دیگه نیاز نیست چون کاربردی نداره

ghost1372 avatar May 31 '21 11:05 ghost1372

تاریخ ایران و افغانستان دقیقا یکسان هست. بله امروز در افغانستان هم 10 خرداد هست. تنها چیزی که فرق میکنه نام ماه ها هست که بجای نامهای پهلوی از نامهای صور فلکی استفاده میشود ، یعنی حمل، ثور، جوزا و ... در مورد اینکه گفتید "توکار" استفاده بشه، منظورتان اینه که باید در سورس کود تغییر بیارم و اون رو خودم کومپیال کنم؟ یعنی دیگه از پیکیج ناگت نمیتوانم استفاده کنم؟ من قبلا از در جاوا اسکریپت از تقویم ایرانی استفاده کردم اما چون جاوا اسکریت مستقیم از سورس کود اجرا میشه میشد که نام ماه ها رو از داخل سورس تغییر بدم اما در سی شارپ پکیج کمپایل شده هست.

hussain1368 avatar May 31 '21 11:05 hussain1368

نه منظورم از توکار به این صورت هست که اسامی داخل سورس کد نوشته میشه و با تغییر کالچر بصورت خودکار اسامی متناسب با کالچر نمایش داده میشه شما از همون بسته ناگت استفاده میکنید فقط قبل از اینکه برنامه اجرا بشه کد زیر رو بنویسید

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fa-AF");

در خصوص کدهای زبان که نوشتم اطلاعی ندارید؟ ایا دری و پشتو هم مثل هم هستن؟

ghost1372 avatar May 31 '21 11:05 ghost1372

دری و پشتو دو تا زبان رسمی در افغانستان هستند. اما نام ماه ها در بین دو زبان مشترک هستند از هر طریقی که ممکن باشه عالی خواهد بود. چه از طریق تغییر کالچر و چه از طریق پراپرتی

hussain1368 avatar May 31 '21 11:05 hussain1368

لطفا اسامی ماه هارو به ترتیب (فروردین، اردیبهشت ...) برام بنویسید چون من اطلاعی از اسامی دقیق ندارم همچنین ایا اسامی روزهای هفته مثل ایران (شنبه، یکشنبه ...) هست؟ بین صبح و عصر که تو افغانستان تفاوتی نیست؟ منظور کلمه صبح و عصر هست

ghost1372 avatar May 31 '21 11:05 ghost1372

فروردین => حمل اردیبهشت => ثور خرداد => جوزا تیر => سرطان مرداد => اسد شهریور => سنبله مهر => میزان آبان => عقرب آذر => قوس دی => جدی بهمن => دلو اسفند => حوت

همچنین اسامی ایام هفته و صبح و عصر در دری و پشتو و فارسی همه یکسان هستند ممنونم از زحمات شما

hussain1368 avatar May 31 '21 12:05 hussain1368

پشتیبانی از اسامی رو اضافه کردم توسط هرکدوم از کدهای زیر میتونید از تقویم فارسی با نام های افغانستان استفاده کنید System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fa-AF"); یا

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("ps-AF"); یا

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("prs-AF");

البته اگر بتونم راه حل ساده تر و بهتری پیدا بکنم قطعا جایگزین میشه، نحوه استفاده هم بزودی در مستندات نوشته میشه از اینجا میتونید پیگیری کنید

https://hosseini.ninja/handycontrol/persianToolkit/persianCalendar/

بسته ناگت هم انشالله یکی دو هفته ای اپلود میکنم image

ghost1372 avatar May 31 '21 12:05 ghost1372

ممنون از زحمات شما. منتظر بروزرسانی ناگت هستم

hussain1368 avatar May 31 '21 12:05 hussain1368

سلام و صبح بخیر هنوز از بروزرسانی بسته ناگت خبری نیست؟ تشکر

hussain1368 avatar Jun 10 '21 04:06 hussain1368

سلام روز بخیر چند روزی هست کمی سرم شلوغ هست انشالله تا چند روز اینده بسته ناگت رو اپلود میکنم اگر خیلی عجله دارید میتونید از بسته ناگت شبانه استفاده کنید تا کارتون راه بیوفته دستورالعمل استفاده رو اینجا توضیح دادم https://hosseini.ninja/handycontrol/quick_start/#Nuget-Nightly-Builds

ghost1372 avatar Jun 10 '21 08:06 ghost1372

سلام و صبح بخیر هنوز از بروزرسانی بسته ناگت خبری نیست؟ تشکر

بسته ناگت نسخه 3.3.6 منتشر شد https://www.nuget.org/packages/HandyControls/3.3.6

ghost1372 avatar Jun 17 '21 09:06 ghost1372

تشکر از اینکه اطلاع دادید

hussain1368 avatar Jun 17 '21 10:06 hussain1368

یک اتفاق عجیب افتاده. وقتی از استایل متریال استفاده میشه ماه های افغانستان نشان داده نمیشه اما با استایل دیفالت درسته

public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            var culture = new CultureInfo("prs-AF");
            //culture.NumberFormat = new CultureInfo("en-US").NumberFormat;
            //culture.DateTimeFormat = new CultureInfo("en-US").DateTimeFormat;

            System.Threading.Thread.CurrentThread.CurrentCulture = culture;

            base.OnStartup(e);
        }
    }

Screenshot 2021-06-17 144606

hussain1368 avatar Jun 17 '21 10:06 hussain1368

در حالت ماه، همه چیز درسته، باز بررسی میکنم image

ghost1372 avatar Jun 17 '21 11:06 ghost1372

من یک نگاهی انداختم. ماه های ایرانی دو جا تعریف شدن: PersianCalendarHelper and PersianDateTime فکر کنم این یکی از قلم افتاده:

        private static readonly string[] months =
            {"", "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند"};

hussain1368 avatar Jun 17 '21 12:06 hussain1368

PersianDateTime مربوط به تقویم نیست و خودش شامل یه کلاس هلپر برای کار با تاریخ هست کلا ارتباطی با تقویم نداره

ghost1372 avatar Jun 17 '21 13:06 ghost1372

مشکل مربوط به متریال دیزاین هستش قسمت PART_HeaderButton و CurrentDateTextBlock و CalendarYearMonthConverter سه قسمت اضافی هستن که داخل قالب پیشفرض تقویم وجود ندارن و متریال دیزاین خودش این قسمت هارو اضافه کرده و با روش خودشون اون رو پر میکنن در نتیجه شما باید از تیم متریال دیزاین بخواین که اسامی نام های افغان رو چک کنن و راه تغییر زبان تقویم رو ازشون بپرسید چون مثل اینکه Language="fa-AF" جواب نمیده

ghost1372 avatar Jun 17 '21 13:06 ghost1372

ممنون. حتما همین کارو میکنم

hussain1368 avatar Jun 27 '21 12:06 hussain1368

سلام مجدد سورس متریال کیت رو دیدم. کالچر خودش رو از این میگیره XmlLanguage.GetSpecificCulture بالاخره مجبور شدم تمام فایلهای زیر رو کپی کنم و داخل پروژه خودم تغییرشان بدم

CalendarYearMonthConverter.cs
MaterialDateDisplay.cs
MaterialDateDisplay.xaml

همچنین چون PersianCalendarHelper شما هم از نوع internal بود مجبور شدم اونم کپی کنم. شما راهی بلد نیستین که بتونیم کالچر XmlLanguage رو سفارشی کنیم؟ من خیلی سیرچ کردم و به نتیجه نرسیدم. گرچند فعلا کارم پیش میره اما خیلی کود از داخل هر دو پکیج زیاد بیرون آوردم. نمیدونم روش خوبی هست یا نه

Screenshot 2021-06-28 171055

hussain1368 avatar Jun 28 '21 13:06 hussain1368

ن والا راهی به ذهنم نمیرسه البته فکر نکنم نیاز باشه همه چیو کپی کنید شاید بتونید اون متدهای اصلی که دخیل هستند رو یجوری override کنید تا مشکل حل بشه

ghost1372 avatar Jun 28 '21 13:06 ghost1372

من هم تلاش کردم همون کار کنم. اما مشکل اینجاست که همه کلاسایی و متودایی که کپی کردم یکی از این سه حالت داشتن private, internal, sealed

hussain1368 avatar Jun 29 '21 05:06 hussain1368

سلام ممنونم از زحمات شما بابت این پکیج میشه لطف کنین بگین چجوری میشه فرمت تاریخ را از شورت به لانگ تغییر داد ممنون؟

mahdiataey avatar Jul 25 '22 07:07 mahdiataey