Symfony 4:使用本地化日期

时间:2019-05-26 14:22:52

标签: php symfony4

我正在尝试使用localizeddate在我的网站上以法语显示日期:

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

我遵循了各种文档,并且:

  • 我安装了PHP Intl扩展名:sudo pacman -S php-intl
  • 我在Symfony上安装了Twig扩展:composer require twig/extensions
  • 国际扩展名:composer require symfony/intl

我还编辑了config/services.yaml来更改语言环境,但是它似乎没有效果:

parameters:
    locale: 'fr'

我在文件config packages \ 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>

但是在这种情况下,我得到一个错误:

  

在呈现模板的过程中引发了异常(“ Symfony \ Component \ Intl \ DateFormatter \ IntlDateFormatter :: __ construct()方法的参数$ locale值'fr'行为未实现。仅语言环境” en“支持。请安装“ intl”扩展名以获得完整的本地化功能。“)

我不知道缺少什么。

3 个答案:

答案 0 :(得分:0)

由于我没有找到正确的答案,所以这就是我解决问题的方式(因为我不需要国际支持):

localizedate

这并不令人满意,因为Codepen: https://codepen.io/Ages/pen/rNBRmRG 正是为此目的而完成的,但是与此同时它起作用。

答案 1 :(得分:0)

过滤器名称已更改。 现在,您应该使用format_datetime软件包提供的twig/intl-extra

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

答案 2 :(得分:0)

看起来 PHP intl 扩展没有正确安装,因为 symfony/intl 仅适用于 en 语言环境。

<块引用>

替换层仅限于 en 语言环境。如果您想使用其他语言环境,您应该install the intl extension。两者之间没有冲突,因为即使您使用扩展程序,此包仍然可以用于访问 ICU 数据。

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