Поскольку 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');
и так далее