Получить список локализованных месяцев

Поскольку PHP использует данные из ICU в расширении intl, существуют ли способы получить локализованные имена месяцев из PHP?

Хотя я могу получить данные из xml-файлов ICU и извлечь их в свой собственный набор файлов, я бы предпочел бы чистое и легкое решение, если это было возможно.

Наконец, есть способы получить формат даты (MM / DD / YYYY или DD / MM / YYYY), учитывая локаль от внутреннего расширения?

Не могли бы вы использовать IntlDateFormatter::getPattern для получения шаблона? Я не знаю о strftime, но я бы использовал предложение форматирования с шаблоном MMMM чтобы получить имя месяца через каждый месяц. Похоже, php.intl не предоставляет данные напрямую.

Не уверен, что вам нужны имена месяцев, но если вы просто хотите использовать переведенные имена в течение нескольких месяцев, strftime() использует имена в соответствии с текущей локалью (используйте модификатор %B ).

Если вам нужен список имен месяцев для другого использования, вы также можете использовать strftime() :

 $months = array(); for( $i = 1; $i <= 12; $i++ ) { $months[ $i ] = strftime( '%B', mktime( 0, 0, 0, $i, 1 ) ); } 

По второму вопросу может быть натуральная функция, но не сложно сделать это самостоятельно:

 $currentDate = strftime( '%x', strtotime( '2011-12-13' ) ); $localFormat = str_replace( array( '13', '12', '2011', '11' ), array( 'DD', 'MM', 'YYYY', 'YY' ), $currentDate ); 

(Это не реальный ответ, это будет комментарий к ответу Стивена Р. Лумиса. Я пишу его только потому, что не могу форматировать код в комментариях)

Спасибо Стивену Лумису, это мое решение:

 function local_month_name($locale, $monthnum) { /** * Return the localized name of the given month * * @author Lucas Malor * @param string $locale The locale identifier (for example 'en_US') * @param int $monthnum The month as number * @return string The localized string */ $fmt = new IntlDateFormatter($locale, IntlDateFormatter::LONG, IntlDateFormatter::NONE); $fmt->setPattern('MMMM'); return $fmt->format(mktime(0, 0, 0, $monthnum, 1, 1970)); } 
 setlocale(LC_ALL, 'en_US.ISO_8859-1'); 

и так далее