Как установить расширение Intl для Twig

Intl extension является расширением для Twig, которое добавляет фильтры localizeddate, localizednumber и localizedcurrency. Как я могу установить и настроить расширение, чтобы использовать эти фильтры в своих шаблонах 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')) {

Это сработало для меня..