Intl extension является расширением для Twig, которое добавляет фильтры localizeddate
, localizednumber
и localizedcurrency
. Как я могу установить и настроить расширение, чтобы использовать эти фильтры в своих шаблонах Twig?
Как установить расширение Intl для Twig
Ответ 1
Установите расширение PHP intl
Прежде всего, вам понадобится расширение PHP intl, так как расширение Twig построено поверх него. Расширение Twig Intl вызовет исключение, если расширение intl PHP не включено. Инструкции по установке можно найти в официальной документации PHP.
На компьютерах с Ubuntu/Debian это так же просто, как выполнить следующую команду:
sudo apt install php-intl
На компьютерах с Windows вам, вероятно, придется раскомментировать следующую строку в php.ini:
extension=php_intl.dll
Для CentOS или других архитектур следуйте инструкциям здесь. Обратите внимание, что CentOS требует, чтобы был установлен и PECL, и компилятор GCC C++: yum install php-pear
и yum install gcc-C++
.
Как только расширение будет добавлено в php.ini, перезапустите веб-сервер.
Установите расширения Twig
Затем вам понадобится пакет Twig Extensions (который среди прочего содержит расширение Intl), который можно установить с помощью Composer. Запустите эту команду в командной строке:
composer require twig/extensions
Это добавит зависимость к вашему composer.json
и загрузит его.
Примечание: фильтры localizednumber
и localizedcurrency
были введены в версии 1.2.0, поэтому вам нужна как минимум эта версия, если вы хотите их использовать.
Добавление расширения в Twig
Если вы используете Twig напрямую (т.е. не в проекте Symfony), добавьте расширение в среду Twig вручную:
<?php
use Twig\Environment;
use Twig\Extensions\IntlExtension;
$twig = new Environment($loader);
$twig->addExtension(new IntlExtension());
Добавление расширения в Twig (в Symfony)
Если вы используете приложение Symfony, вы можете добавить расширение к Twig, создав службу и пометив ее как расширение Twig в config/services.yml
:
services:
twig.extension.intl:
class: Twig\Extensions\IntlExtension
tags:
- { name: twig.extension }
Установка локали по умолчанию
<?php
Locale::setDefault('nl-NL');
Установка локали по умолчанию в Symfony
В config/framework.yaml
раскомментируйте параметр default_locale
:
framework:
default_locale: en
Ответ 2
После установки расширения, если вы обнаружите следующую ошибку: Попытка загрузить класс "IntlTimeZone" из глобального пространства имен. Вы забыли выражение об использовании? Просто отредактируйте строку 54 в файле:
vendor/twig/lib/Twig/Extensions/Extension/Intl.php
и заменить его на:
if (PHP_VERSION_ID < 50500 || !class_exists('IntlTimeZone')) {
Это сработало для меня..