Хитрость в том, что вам нужно установить Культуру текущего потока, и (для некоторых локалей, таких как иврит) также необходимо установить Календарь внутри этой Культуры.
Пример автономного кода ниже иллюстрирует, как это сделать. Этот подход, конечно, может повлиять на локализованный текст других элементов управления. Если это проблема - и вы хотите только локализовать элемент управления Calendar и оставить все остальное на английском языке - тогда вы можете сделать следующее:
- наследует класс из элемента управления Calendar ASP.NET и переопределяет метод Render ().
- в вашей реализации Render (), сохраните культуру текущего потока / UICulture, затем сбросьте культуру и календарь текущего потока, используя код ниже, затем вызовите Render базового класса (), затем восстановите культуру / UICulture токовая нить
- используйте этот класс вместо обычного календаря ASP.NET на своей странице ASPX.
Вот код:
<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Import Namespace="System.Globalization"%>
<%@ Import Namespace="System.Threading"%>
<%@ Import Namespace="System.Collections.Generic"%>
<html>
<body>
<form id="form1" runat="server">
Choose a language and calendar: <asp:DropDownList ID="LocaleChoice" runat="server" AutoPostBack="true">
<asp:ListItem Value="en-US" Selected="True">English</asp:ListItem>
<asp:ListItem Value="es-MX">Español</asp:ListItem>
<asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
<asp:ListItem Value="he-IL|HebrewCalendar">Hebrew (Hebrew Calendar)</asp:ListItem>
<asp:ListItem Value="he-IL|GregorianCalendar">Hebrew (Gregorian Calendar)</asp:ListItem>
<asp:ListItem Value="ar-SA|HijriCalendar">Arabic (Hijri Calendar)</asp:ListItem>
<asp:ListItem Value="ar-SA|GregorianCalendar">Arabic (Gregorian Calendar)</asp:ListItem>
</asp:DropDownList><br /><br />
<asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
</form>
</body>
</html>
<script runat="server">
Dictionary<string, System.Globalization.Calendar> Calendars =
new Dictionary<string, System.Globalization.Calendar>()
{
{"GregorianCalendar", new GregorianCalendar()},
{"HebrewCalendar", new HebrewCalendar()},
{"HijriCalendar", new HijriCalendar()},
{"JapaneseCalendar", new JapaneseCalendar()},
{"JulianCalendar", new JulianCalendar()},
{"KoreanCalendar", new KoreanCalendar()},
{"TaiwanCalendar", new TaiwanCalendar()},
{"ThaiBuddhistCalendar", new ThaiBuddhistCalendar ()}
};
protected override void InitializeCulture()
{
if (Request.Form["LocaleChoice"] != null)
{
string selected = Request.Form["LocaleChoice"];
string[] calendarSetting = selected.Split('|');
string selectedLanguage = calendarSetting[0];
CultureInfo culture = CultureInfo.CreateSpecificCulture(selectedLanguage);
if (calendarSetting.Length > 1)
{
string selectedCalendar = calendarSetting[1];
var cal = culture.Calendar;
if (Calendars.TryGetValue(selectedCalendar, out cal))
culture.DateTimeFormat.Calendar = cal;
}
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
}
base.InitializeCulture();
}
protected void Page_Load(object sender, EventArgs e)
{
}
</script>