ghost1372 / HandyControls

Contains some simple and commonly used WPF controls based on HandyControl
https://ghost1372.github.io/
MIT License
1.1k stars 104 forks source link

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

Closed hussain1368 closed 1 year ago

hussain1368 commented 3 years ago
  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
ghost1372 commented 3 years ago

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

hussain1368 commented 3 years ago

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

ghost1372 commented 3 years ago

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

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

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

hussain1368 commented 3 years ago

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

ghost1372 commented 3 years ago

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

hussain1368 commented 3 years ago

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

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

ghost1372 commented 3 years ago

پشتیبانی از اسامی رو اضافه کردم توسط هرکدوم از کدهای زیر میتونید از تقویم فارسی با نام های افغانستان استفاده کنید 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

hussain1368 commented 3 years ago

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

hussain1368 commented 3 years ago

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

ghost1372 commented 3 years ago

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

ghost1372 commented 3 years ago

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

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

hussain1368 commented 3 years ago

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

hussain1368 commented 3 years ago

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

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

ghost1372 commented 3 years ago

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

hussain1368 commented 3 years ago

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

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

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

ghost1372 commented 3 years ago

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

hussain1368 commented 3 years ago

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

hussain1368 commented 3 years ago

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

CalendarYearMonthConverter.cs
MaterialDateDisplay.cs
MaterialDateDisplay.xaml

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

Screenshot 2021-06-28 171055

ghost1372 commented 3 years ago

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

hussain1368 commented 3 years ago

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

mahdiataey commented 2 years ago

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