Internationales Datum in Symfony

Will man bei Symfony in einem Twig-Template ein internationales Datum anzeigen, gilt es ein paar Fallstricke zu überwinden. Der normale Weg, wie make:crud die Templates erzeugt, führt nämlich immer zu einem englischen Datum. Das Template sieht typischerweise dann so aus:

            <p> Datum: {{object.createdAt | date()}}</p>

Auch wenn man in der Environment-Datei oder in der Config die (Default-)Locale ändert, ändert sich nichts am Datum.

Für ein deutsches Datum benötigen wir daher in paar Pakete, die per Composer installiert werden müssen:

composer require symfony/intl 
composer require twig/extra-bundle twig/intl-extra

Hierbei liefert twig/intl-extra ein paar zusätzliche Funktionen und twig/extra-bundle sorgt dafür, dass diese auch korrekt registriert werden (sonst scheint es so, dass die Funktionen nicht vorhanden sind). Die Funktionen sind (kopiert von https://packagist.org/packages/twig/intl-extra):

  • country_name filter: returns the country name given its two-letter/five-letter code;
  • currency_name filter: returns the currency name given its three-letter code;
  • currency_symbol filter: returns the currency symbol given its three-letter code;
  • language_name filter: returns the language name given its two-letter/five-letter code;
  • locale_name filter: returns the language name given its two-letter/five-letter code;
  • timezone_name filter: returns the timezone name given its identifier;
  • country_timezones filter: returns the timezone identifiers of the given country code;
  • format_currency filter: formats a number as a currency;
  • format_number filter: formats a number;
  • format_datetime filter: formats a date time;
  • format_date filter: formats a date;
  • format_time filter: formats a time.

Nun muss man noch die richtige Fuktion im Template aufrufen, in unserem Fall ist dies format_date.

            <p> Datum: {{object.createdAt | format_date('de')}}</p>

Und eigentlich sollte jetzt das korrekte Datum angezeigt werden. Manchmal gibts aber auch eine Exception:

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

Diese Fehlermeldung bezieht sich nicht auf Symfony oder Twig sondern auf die PHP-Umgebung. Also noch mal schnell das entsprechende Paket nachinstallieren:

apt install php-intl

dann den Webserver neu starten (reload reicht nicht) und danach sollte das Datum korrekt angezeigt werden.

Natürlich kann die locale (in diesem Fall ‚de‘) auch programmatisch gesetzt werden und muss nicht in jedem TWIG-Template manuell eingegeben werden.