Неправильный месяц показывает июль, когда в веб-форме asp.net установлена ​​культура ar-AE

Веб-сайт показывает неправильный месяц для julyна арабском это веб-сайт на арабском языке, разработанный в веб-форме asp.net, и культура правильно настроена на "ar-AE", а дата события показывает правильный месяц на локальном компьютере, а на производствах - месяц, который принадлежит Egyptian culture

Дата в базе данных хранится как smalldatetime в этом формате 2017-07-25 00:00:00

Неправильный месяц для июля

Правильный месяц на локальном хосте:25 يوليو 2017

Неправильный месяц на производстве: 25 يوليه 2017

<asp:Label  ID="lblDate"  runat="server"  Text='<%# FormatDate(Eval("PublishDate")) %>'>
</asp:Label>

protected string FormatDate(object dt) {
  string date = String.Format("{0:MMMM dd, yyyy}", dt);
  date = String.Format("{0:dd MMMM yyyy}", dt);
  // Response.Write(date + "<br/>");
  return date;
}

Культура настроена на ОАЭ правильно

protected override void InitializeCulture() {
  String lang = "ar-AE";
  CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentUICulture;
  // Call function to detect Language and assign  to session variable
  Thread.CurrentThread.CurrentCulture = new CultureInfo(lang);
  Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);

  base.InitializeCulture();
}

В чем может быть причина, это может быть сам рабочий сервер?

Мы проверили почти все возможности и перепробовали все, просто июльский месяц не подходит, все в порядке.

Я также проверяю настройки языка производственного сервера, настройки IIS, все вроде бы нормально, единственное, на что я могу указать, это то, что на сервере есть все последние обновления, может быть, мы что-то упустили. мы тестировали одно и то же на разных машинах Windows 7, он просто отлично работает.

Обновление: Я попытался предложить решение также, но он продолжает показывать неправильный месяц для ИЮЛЬ يوليه, Это не верно. Мы проверили это и показали правильную культуру на сервере.

Пример скрипки также показывает неправильный месяц https://dotnetfiddle.net/ZAOJ7H

2 ответа

Решение

Я пытался найти локализованный DateTime название месяца с помощью этих строк кода:

DateTime dt = DateTime.Parse("2017-07-25 00:00:00");

string arabicMonth = new CultureInfo("ar-AE").DateTimeFormat.GetMonthName(dt.Month);

Приведенный код дает يوليه вместо يوليوуказывает на то, что что-то пошло не так в Windows локализации григорианских названий месяцев на арабском языке

Узнав немного, это вызвано locale.nls файл находится в %WINDIR%\System32\locale.nls содержит неверные данные, где июльский месяц отображается в другой арабской версии, чем текущая системная культура, использующая.

Поскольку файл NLS отформатирован в двоичном формате, трудно читать и редактировать сохраненную информацию о локали, даже просматривая ее в шестнадцатеричном редакторе. Кстати, эта проблема уже исправлена ​​Microsoft в обновлении KB981981 для систем Windows 7 и Server 2008 R2, вы можете выполнить обновление в зависимости от используемой платформы (требуется перезагрузка после этого):

Обновление для Windows 7 32-разрядная версия (KB981981) - 24.05.2010

Обновление для Windows 7 64-разрядная версия (KB981981) - 24.05.2010

Примечание: убедитесь, что все уязвимые машины установлены с этим обновлением для достижения наилучшего результата. Если вы не можете установить обновление из-за определенных ограничений, я предлагаю попробовать использовать плагин jQuery для datepicker который показывает يوليو за июль месяц как обходной путь.

PS: Я также попробовал решение Захеда в скрипке ОП -

DateTime.Parse("2017-07-25 00:00:00").ToString("dd dddd , MMMM, yyyy", new CultureInfo("ar-AE"))

Но это показывает 25 الثلاثاء , يوليه, 2017 (т.е. يوليه), следовательно, это не проблема форматирования строки, а проблема локализации Windows, как описано выше.

Рекомендации:

Описание изменений в службах обновления программного обеспечения и служб Windows Server в содержимом за 2010 г.

Как преобразовать название месяца в английском тексте в datetime в арабский текст, используя C#?

Связанные с:

Майкл С. Каплан - арабские локали для названий месяцев

Код проекта:

<div>
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">LinkButton</asp:LinkButton>
</div>

Код за C#:

protected void LinkButton1_Click(object sender, EventArgs e)
{
    Label1.Text = DateTime.Parse("2017-07-25 00:00:00").ToString("dd dddd , MMMM, yyyy", new CultureInfo("ar-AE"));
}

Обновленный ответ:

Я хотел бы представить все языки, которые поддерживает ОС (учитывая, откуда информация).

Вот список: поддерживаемые языки по умолчанию для ОС.

Другие вопросы по тегам