Небольшой lifehack zendhack, по получению списка названий месяцев\дней для отображения в view.
Как нам всем известно русский язык очень сильно отличается от других языков, а самое главное он кардинально отличается от английского. В Zend_Framework, как и во многих других фреймворках локализация и функции локализации сделаны с оглядкой на английский язык. Иногда это становится причиной проблем.
Проблема
Я столкнулся со следующей, мне необходимо было вывести список названий месяцев в году, все бы хорошо, но в русском языке названия месяцев могут быть не только в именительном падеже, но и в родительном, в отличие от английского (February, Февраль -> Февраля). А Zend_Framework в результате следующего кода:
$datearray = array('year' => $date->toString("yyyy"), 'month' => '2'); $other_date = new Zend_Date($datearray); $other_date->get(Zend_Date::MONTH_NAME);
выводит только месяц в родительном падеже.
Решение
Покопавшись в классе Date метода для вывода месяца в именительном падеже я не нашел. Тогда я полез в xml файл с переводом (Zend/Locale/Data/ru.xml) и там увидел, что раздел с месяцами в именительном падеже присутствует. Посмотрев как обычные методы Zend_Date получают информацию из файла с переводом, я нашел способ как можно вывести имя месяца.
Zend_Locale_Data::getContent("ru_RU", 'month', array('gregorian', 'stand-alone', 'wide', $i));
где $i — номер месяца без лидирующего нуля (1..12)
Кстати таким образом можно выводить любые данные из файла с переводом, просто идя по DOM структуре XML файла.
Тоже верно
Выручил =))) спасибо!
Спасибо.
Более универсальный вариант
Zend_Locale_Data::getContent(new Zend_Locale(), ‘month’, array(‘gregorian’, ‘stand-alone’, ‘wide’, $i));