using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
using System.Reflection;
namespace FixPersianLocale
{
public partial class Sample : Form
{
private CultureInfo m_culture;
public Sample()
{
m_culture = new CultureInfo("fa-IR");
System.Threading.Thread.CurrentThread.CurrentCulture = m_culture;
System.Threading.Thread.CurrentThread.CurrentUICulture = m_culture;
InitializeComponent();
}
void Log(string format, params object[] Params)
{
string str = string.Format(format, Params);
textBox1.AppendText(str);
}
private void Sample_Load(object sender, EventArgs e)
{
}
private void Test1()
{
CultureInfo cultureInfo = new CultureInfo("fa-IR",false);
DateTimeFormatInfo dateTimeFormatInfo = cultureInfo.DateTimeFormat;
Console.WriteLine("DateTime.Now={0}", DateTime.Now);
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Log("DateTime.Now={0} \r\n", DateTime.Now);
}
private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Log("Now.ToString(m_culture) = {0} \r\n", DateTime.Now.ToLongDateString());
}
private void SetCurrentCulture(CultureInfo culture)
{
System.Threading.Thread.CurrentThread.CurrentCulture = culture;
System.Threading.Thread.CurrentThread.CurrentUICulture = culture;
}
private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
PersianCultureHelper.FixPersianCulture(m_culture, FixCultureOptions.foptAll);
Log("Current culture fixed with all options. \r\n");
}
private void printCulture()
{
m_culture = System.Threading.Thread.CurrentThread.CurrentCulture;
Log("Culture Data: \r\n");
Log("============ \r\n");
Log("Culture Name={0} \r\n", m_culture.Name);
Log("Culture Display Name={0} \r\n", m_culture.DisplayName);
Log("Culture Calendar={0} \r\n", m_culture.Calendar);
Log("Culture.DateTimeFormat.Calendar={0} \r\n", m_culture.DateTimeFormat.Calendar);
Log("Optional Calendars: \r\n");
foreach (Calendar cal in m_culture.OptionalCalendars)
{
Log("\t Calendar {0} \r\n", cal);
}
Log("Month Names: \r\n");
foreach (string m in m_culture.DateTimeFormat.MonthNames)
{
Log("\t {0} \r\n", m);
}
Log("Day Names: \r\n");
foreach (string m in m_culture.DateTimeFormat.DayNames)
{
Log("\t {0} \r\n", m);
}
Log("============ \r\n");
}
private void linkLabel4_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
printCulture();
}
private void linkLabel5_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Log("Now.ToShortString = {0} \r\n", DateTime.Now.ToShortDateString());
}
private void linkLabel6_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
//m_culture = PersianCultureHelper.FixAndSetCurrentCulture();
m_culture.DateTimeFormat.Calendar = new System.Globalization.GregorianCalendar();
SetCurrentCulture(m_culture);
//CultureInfo cultureInfo = new CultureInfo("fa-IR", false);
//DateTimeFormatInfo dateTimeFormatInfo = cultureInfo.DateTimeFormat;
//FieldInfo cultureDataField = typeof(CultureInfo).GetField("m_cultureData",
// BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
//Object cultureData = cultureDataField.GetValue(cultureInfo);
//FieldInfo waCalendarsField = cultureData.GetType().GetField("waCalendars",
// BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
//int[] waCalendars = (int[])waCalendarsField.GetValue(cultureData);
//waCalendarsField.SetValue(cultureData, waCalendars);
//waCalendars[0] = 0x16;
//waCalendarsField.SetValue(cultureData, waCalendars);
//dateTimeFormatInfo.Calendar = new PersianCalendar();
//FieldInfo calendarField = typeof(DateTimeFormatInfo).GetField("calendar",
// BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance );
//calendarField.SetValue(dateTimeFormatInfo, new PersianCalendar());
//dateTimeFormatInfo.DayNames = new string[]
// { "یکشنبه", "دوشنبه", "ﺳﻪشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };
//dateTimeFormatInfo.AbbreviatedMonthNames = new string[]
// { "فروردین", "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور",
// "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
//dateTimeFormatInfo.MonthNames = new string[]
// { "فروردین", "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور",
// "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
// Log("To day is {0}", DateTime.Now.ToString("dddd, dd MMM yyyy", dateTimeFormatInfo));
}
private void ClearLog()
{
textBox1.Text = "";
}
private void linkLabel7_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
ClearLog();
m_culture = PersianCultureHelper.FixPersianCulture(null, FixCultureOptions.foptCalendarInDateFormatInfo);
SetCurrentCulture(m_culture);
Log("DateTimeFormat of current culture fixed: \r\n");
printCulture();
}
private void linkLabel8_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
ClearLog();
m_culture = PersianCultureHelper.FixAndSetCurrentCulture();
Log("Current culture fixed: \r\n");
printCulture();
}
private void linkLabel9_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
textBox1.Text = "";
}
private void linkLabel3_LinkClicked_1(object sender, LinkLabelLinkClickedEventArgs e)
{
m_culture.DateTimeFormat.Calendar = new System.Globalization.GregorianCalendar();
SetCurrentCulture(m_culture);
}
private void linkLabel6_LinkClicked_1(object sender, LinkLabelLinkClickedEventArgs e)
{
try
{
m_culture.DateTimeFormat.Calendar = new System.Globalization.PersianCalendar();
Log("Calendar changed to PersianCalendar. \r\n");
}
catch(ArgumentOutOfRangeException)
{
Log("Persian Calendar is not in set of optional calendars. You should fix the culture first. \r\n");
}
}
private void linkLabel10_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
ClearLog();
m_culture = FixPersianLocale.PersianCultureHelper.FixPersianCulture(m_culture, FixCultureOptions.foptOptionalCalendars);
Log("Optional calendars fixed: \r\n");
printCulture();
}
private void linkLabel11_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
ClearLog();
Log("Creating custom Persian Culture \r\n");
if (FixPersianLocale.PersianCultureHelper.CreateAndRegisterCustomPersianLocale())
Log("Custom culture for 'fa-IR' successfuly created and registered.\r\nNow you can use new CultureInfo('fa-IR', false) to instantiate a new fixed Persian Cuture.\r\n");
else
Log("Failed to create and register custom Persian culture.\r\n");
}
}
}