How to change the Culture of CalendarExtender programmatically
Based on my knowledge, the CalendarExtender’s language is based on the “Sys.CultureInfo.CurrentCulture.dateTimeFormat”, all of the primary function “_buildDays” “_buildMonths” “_performLayout” “_getFirstDayOfWeek” use the “Sys.CultureInfo.CurrentCulture.dateTimeFormat”.
So, if we need change the language or culture of CalendarExtender, we need to change the “Sys.CultureInfo.CurrentCulture.dateTimeFormat”.
There are two ways can change the “Sys.CultureInfo.CurrentCulture.dateTimeFormat”:
1. Change the CurrentCulture in code-behind, by the following code:
{
string Lang = “ro-RO”;//set your culture here
System.Threading.Thread.CurrentThread.CurrentCulture =
new System.Globalization.CultureInfo(Lang);
}
If you add the following code to your page, and set the EnableScriptGlobalization=”true” to your ToolkitScriptManager or ScriptManager, the language and culture of CalendarExtender will be “ro-RO” (more culture symbol, please visit: http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(VS.80).aspx)
2. Change the Sys.CultureInfo.CurrentCulture.dateTimeFormat by JavaScript, and then, dispose and recreate the CalendarExtender.
function pageLoad(sender, args) {
//Step1:
//dispose the original CalendarExtender, change “CalendarExtender2” to the BehaviorID of your CalendarExtender
$find(“CalendarExtender2”).dispose();
//Step2:
//change the “Sys.CultureInfo.CurrentCulture.dateTimeFormat, as your wish”
Sys.CultureInfo.CurrentCulture.dateTimeFormat.FirstDayOfWeek = 3;
Sys.CultureInfo.CurrentCulture.dateTimeFormat.ShortestDayNames = [“0”, “1”, “2”, “3”, “4”, “5”, “6”];
//Step3:
//Recreate the CalendarExtender
$create(AjaxControlToolkit.CalendarBehavior, { “button”: $get(“image2”), “id”: “CalendarExtender2”, “popupPosition”: 1 }, null, null, $get(“TextBox1”));
}
</script>
Also, we need make sure the EnableScriptGlobalization=”true” to your ToolkitScriptManager or ScriptManager.
For more information about “Sys.CultureInfo.CurrentCulture.dateTimeFormat”, please visit:
http://msdn.microsoft.com/en-us/library/bb397445.aspx
For more information about create Extenders by $create, please visit:
ASP.NET AJAX Control Toolkit FAQ: 6.2 How do I create a ModalPopup programmatically?
http://forums.asp.net/t/992919.aspx
The full page demo is following:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<script runat=“server”>
protected void Page_Load(object sender, EventArgs e)
{
string Lang = “ro-RO”;//set your culture here
System.Threading.Thread.CurrentThread.CurrentCulture =
new System.Globalization.CultureInfo(Lang);
}
</script>
<html xmlns=“http://www.w3.org/1999/xhtml”>
<head id=“Head1” runat=“server”>
<title></title>
</head>
<body>
<form id=“form1” runat=“server”>
<ajaxToolkit:ToolkitScriptManager ID=“ToolkitScriptManager1” runat=“server” EnableScriptGlobalization=“true”>
</ajaxToolkit:ToolkitScriptManager>
<div>
<asp:TextBox ID=“TextBox1” runat=“server”></asp:TextBox>
<ajaxToolkit:CalendarExtender ID=“CalendarExtender2” runat=“server” TargetControlID=“TextBox1”
FirstDayOfWeek=“default” PopupButtonID=“image2” Enabled=“True” PopupPosition=“BottomRight”
BehaviorID=“CalendarExtender2”>
</ajaxToolkit:CalendarExtender>
</div>
<script type=“text/javascript”>
function pageLoad(sender, args) {
//Step1:
//dispose the original CalendarExtender, change “CalendarExtender2” to the BehaviorID of your CalendarExtender
$find(“CalendarExtender2”).dispose();
//Step2:
//change the “Sys.CultureInfo.CurrentCulture.dateTimeFormat, as your wish”
Sys.CultureInfo.CurrentCulture.dateTimeFormat.FirstDayOfWeek = 3;
Sys.CultureInfo.CurrentCulture.dateTimeFormat.ShortestDayNames = [“0”, “1”, “2”, “3”, “4”, “5”, “6”];
//Step3:
//Recreate the CalendarExtender
$create(AjaxControlToolkit.CalendarBehavior, { “button”: $get(“image2”), “id”: “CalendarExtender2”, “popupPosition”: 1 }, null, null, $get(“TextBox1”));
}
</script>
</form>
</body>
</html>
Thanks.