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

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

کاربر سایت

hamirayan

عضویت از 1393/11/23

فارسی سازی Telerik Scheduler - با یک مشکل

  • جمعه 10 مهر 1394
  • 11:25
تشکر میکنم

سلام دوستان و همکاران عزیز

لطفا در مورد این پست حداکثر همکاری رو داشته باشین تا به یه نتیجه کامل برسیم...

تقویم و یا همون قرار ملاقات :

از 4 قسمت - نمایش روزانه - نمایش هفتگی - نمایش ماهانه - تایم لاین تشکیل می شه

با کلاس persianCalendar که در یکی از پست ها بود - تونستم calendar تلریک رو فارسی کنم و در تمام قسمت هایی که در بالا گفتم به درستی تاریخ ها رو نشون می ده اما در قسمت نمایش ماهانه دچار مشکل هست و گیر من اینجاست تصاویر رو قرار می دم تا منظورمو دقیقا متوجه بشید :

تو عکسی که با خط قرمز مشخص کردم اگر توجه کنین می بینین با اینکه تاریخ آذر ماه هست ولی اسفند و اول فروردین 93 رو نشون می ده

کلاس PersianCalendar : 

public class PersianCulture : CultureInfo
{
    private readonly Calendar cal;
    private readonly Calendar[] optionals;
 
 
    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; }
    }
}

 

و کدی که در Form_load قرار دادم : 

RadSchedulerLocalizationProvider.CurrentProvider = new telerikScheduler();
           Telerik.WinControls.UI.SchedulerNavigatorLocalizat  ionProvider.CurrentProvider = new telerikSchedulerNavigator();
 
           var persianCulture = new PersianCulture();
           
           System.Threading.Thread.CurrentThread.CurrentCultu  re = persianCulture;
 
           radScheduler1.Culture = persianCulture;

 

لطفا دوستانی که تجربه ای در این زمینه دارن راهنمایی کنند تا به نتیجه برسیم - که این موضوع مشکل خیلی از برنامه نویس ها هست...

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

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

irandiablo

عضویت از 1395/02/20

  • دوشنبه 20 اردیبهشت 1395
  • 01:35

آقا سلام

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

کاربر سایت

hamirayan

عضویت از 1393/11/23

  • شنبه 25 اردیبهشت 1395
  • 13:10

دوستان و برنامه نویسان عزیز

کسی راه حلی برای حل مشکل پیدا کرده؟

لطفاً راهنمائی بفرمائید.

کاربر سایت

mostafapro

عضویت از 1394/06/15

  • چهارشنبه 6 اردیبهشت 1396
  • 15:33

برادر تونستي به جواب برسي؟

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

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

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

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