1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- <?php
-
- /*
- * This file is part of Twig.
- *
- * (c) 2010 Fabien Potencier
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
- class Twig_Extensions_Extension_Intl extends Twig_Extension
- {
- public function __construct()
- {
- if (!class_exists('IntlDateFormatter')) {
- throw new RuntimeException('The intl extension is needed to use intl-based filters.');
- }
- }
-
- /**
- * Returns a list of filters to add to the existing list.
- *
- * @return array An array of filters
- */
- public function getFilters()
- {
- return array(
- 'localizeddate' => new Twig_Filter_Function('twig_localized_date_filter'),
- );
- }
-
- /**
- * Returns the name of the extension.
- *
- * @return string The extension name
- */
- public function getName()
- {
- return 'intl';
- }
- }
-
- function twig_localized_date_filter($date, $dateFormat = 'medium', $timeFormat = 'medium', $locale = null)
- {
- $formatValues = array(
- 'none' => IntlDateFormatter::NONE,
- 'short' => IntlDateFormatter::SHORT,
- 'medium' => IntlDateFormatter::MEDIUM,
- 'long' => IntlDateFormatter::LONG,
- 'full' => IntlDateFormatter::FULL,
- );
-
- $formatter = IntlDateFormatter::create(
- $locale !== null ? $locale : Locale::getDefault(),
- $formatValues[$dateFormat],
- $formatValues[$timeFormat]
- );
-
- if (!$date instanceof DateTime) {
- if (ctype_digit((string) $date)) {
- $date = new DateTime('@'.$date);
- $date->setTimezone(new DateTimeZone(date_default_timezone_get()));
- } else {
- $date = new DateTime($date);
- }
- }
-
- return $formatter->format($date->getTimestamp());
- }
|