Вывод функции PHP Date на итальянском языке

Я пытаюсь вывести даты в итальянском формате, используяdate() следующее:

<?php 
    setlocale(LC_ALL, 'it_IT');
    echo date("D d M Y", $row['eventtime']); 
?>

Тем не менее, он все еще выходит в английском формате. Что еще я мог сделать? Что-то не так?

Решение должно быть специфичным для сценария, а не для всего сервера ...

Спасибо

Шади

Ответы на вопрос(5)

Я нашел этоsetlocale не надежен, так как он устанавливается для процесса, а не для потока (руководство упоминает об этом). Это означает, что другие запущенные сценарии могут изменить язык в любое время. Решение использует IntlDateFormatter отintl расширение php.

$fmt = new \IntlDateFormatter('it_IT', NULL, NULL);
$fmt->setPattern('d MMMM yyyy HH:mm'); 
// See: http://userguide.icu-project.org/formatparse/datetime for pattern syntax
echo $fmt->format(new \DateTime()); 

Если это не сработает, вам может понадобиться:

Installintl расширение php (пример Ubuntu):sudo apt-get install php5-intl

Установите язык, который вы хотите использовать:sudo locale-gen it_IT

 Sampson11 апр. 2014 г., 16:00
@ AdiCumpanasu Скорее всего, вам также потребуется установить кодировку в UTF-8. Поместите следующее между<head> а также</head>: <meta charset="utf-8">.
 Adrian Cumpanasu11 апр. 2014 г., 16:40
решил это обтекание так: utf8_encode (strftime ("% A% d% B% Y"))
 Adrian Cumpanasu11 апр. 2014 г., 11:27
Я использовал ваше решение здесь: inmaremma.net Просто символы акцента отображаются в виде вопросительных знаков. Я считаю, что правильно установил язык HTML на итальянский с помощью <html lang = "it-IT">

иначе это не будет работать.

Итак, решение Джонатана, вероятно, лучшее.

 Shadi Almosri11 июл. 2009 г., 22:19
У меня есть полный доступ к серверу, есть идеи, где я могу проверить, какие локальные установлены?
 Anti Veeranna11 июл. 2009 г., 22:21
введя 'locale -a', если на этом сервере работает какой-либо вариант Linux / BSD.

О статьеhttp: //www.phpnews.it/articoli/ottenere-date-in-italiano/respons, блог предлагает альтернативный метод, но код не работает, вот правильный код:

function timestamp_to_date_italian($date)
    {       
        $months = array(
                '01' => 'Gennaio', 
                '02' => 'Febbraio', 
                '03' => 'Marzo', 
                '04' => 'Aprile',
                '05' => 'Maggio', 
                '06' => 'Giugno', 
                '07' => 'Luglio', 
                '08' => 'Agosto',
                '09' => 'Settembre', 
                '10' => 'Ottobre', 
                '11' => 'Novembre',
                '12' => 'Dicembre');

        list($day, $month, $year) = explode('-',date('d-m-Y', $date));      
        return $day . ' ' . $months[$month] . ' ' . $year;

    }
Решение Вопроса

date() не распознает локали. Вы должны использоватьstrftime() и его спецификаторы формата для вывода дат с учетом локали (изdate() Руководство по PHP):

Чтобы форматировать даты на других языках, вы должны использоватьsetlocale() а такжеstrftime() функционирует вместоdate().

Regarding Анти Веераннаомментарий @: он абсолютно прав, так как вы должны быть очень осторожны с настройкой локалей, поскольку они иногда не ограничены текущей областью действия скрипта. Лучший способ был бы:

$oldLocale = setlocale(LC_TIME, 'it_IT');
echo utf8_encode( strftime("%a %d %b %Y", $row['eventtime']) );
setlocale(LC_TIME, $oldLocale);
 apfelbox09 февр. 2013 г., 13:19
Это не просто поток, это процесс. Так что вы можете изменить и другие запущенные экземпляры PHP. Php.net / ручной / EN / ...)
 Shadi Almosri11 июл. 2009 г., 22:24
Идеально, это сработало
 Anti Veeranna11 июл. 2009 г., 22:32
Помните, что setlocale не зависит от сценария, а зависит от потока, поэтому возможно, что языковой стандарт меняется «под вами». Ee.php.net / Setlocale это тоже объясняет.

Ваш ответ на вопрос