Symfony 4: используйте локализованную дату

Я пытаюсь использовать localizeddate, чтобы показать дату на французском языке на моем веб-сайте:

<td>{{ saison.start|localizeddate('medium', 'none') }}</td>

Я следовал различным документам и:

  • Я установил расширение PHP Intl: sudo pacman -S php-intl
  • Я установил расширения Twig на Symfony: composer require twig/extensions
  • Также в расширении Intl: composer require symfony/intl

Я также отредактировал config/services.yaml, чтобы изменить локаль, но, похоже, это не дало эффекта:

parameters:
    locale: 'fr'

Я включил расширения Date и Intl в файлах configpackages\twig_extensions.yaml`:

services:
    _defaults:
        public: false
        autowire: true
        autoconfigure: true

    # Uncomment any lines below to activate that Twig extension
    #Twig\Extensions\ArrayExtension: ~
    Twig\Extensions\DateExtension: ~
    Twig\Extensions\IntlExtension: ~
    #Twig\Extensions\TextExtension: ~

Но у меня все еще есть дата, показанная на английском языке в выходном файле.

Я также попытался более четко указать локаль в localizeddate следующим образом:

<td>{{ saison.start|localizeddate('medium', 'none', 'fr') }}</td>

Но в этом случае я получаю сообщение об ошибке:

An exception has been thrown during the rendering of a template ("The Symfony\Component\Intl\DateFormatter\IntlDateFormatter::__construct() method's argument $locale value 'fr' behavior is not implemented. Only the locale "en" is supported. Please install the "intl" extension for full localization capabilities.").

Я не знаю, чего не хватает.

У меня такая же проблема, ты решил ее?

Loctarogar 05.09.2019 22:09

Нет, не совсем. Вместо этого я использовал: <date variable>|date('d/m/Y')

Dric512 26.09.2019 22:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
2
2 390
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Поскольку я не нашел правильного ответа, я решил проблему следующим образом (поскольку мне не нужна международная поддержка):

<date variable>|date('d/m/Y')

Это неудовлетворительно, так как localizedate сделано именно для этого, но пока работает.

Ответ принят как подходящий

Имя фильтра изменилось. Теперь вы должны использовать format_datetime, предоставленный пакетом twig/intl-extra.

https://twig.symfony.com/doc/2.x/filters/format_datetime.html

Похоже, расширение PHP intl было установлено неправильно, так как symfony/intl работает только с локалью en.

The replacement layer is limited to the en locale. If you want to use other locales, you should install the intl extension. There is no conflict between the two because, even if you use the extension, this package can still be useful to access the ICU data.

https://symfony.com/doc/current/components/intl.html

Если вы посмотрите на метод __construct() для Symfony\Component\Intl\NumberFormatter, вы увидите, почему ваш код вызвал это исключение:

if ('en' !== $locale && null !== $locale) {
   throw new MethodArgumentValueNotImplementedException(__METHOD__, 'locale', $locale, 'Only the locale "en" is supported');
}

https://github.com/symfony/intl/blob/v4.0.0/NumberFormatter/NumberFormatter.php#L262

Другие вопросы по теме