Vom: 10.10.2018

Pimcore5: Fehler übersetzen

Pimcore bietet die Möglichkeit, bei Fehlern eine eigene Seite zu zeigen, die über Pimcore selbst konfigurier- und editierbar ist.

Mit dem neuen Unterbau auf Symfony-Basis hat sich hier manches geändert.

Insbesondere ist diese Seite, obwohl sie gegebenenfalls im Dokumentbaum in einer Sprache untergebracht ist, nicht übersetzt.

Dieses Verhalten ist darin begründet das der Fehlerhandler greifen kann, bevor von Pimcore eine Sprache festgelegt werden kann.

Für diesen Fall kann mit einer einfachen Maßnahme ein eigener Default festgelegt werden.

Hierzu muss ein EventListener angelegt werden, der auf das Event KernelException lauscht und dann die Sprache setzt:

 

<?php
/**
 * Created by Thomas Keil - Weblizards GmbH.
 * User: Thomas Keil
 * Email: thomas@weblizards.de
 *
 * Date: 10.10.18
 * Time: 08:13
 *
 */
namespace AppBundle\EventListener;

use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;

class LanguageListener
{
    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        $request = $event->getRequest();
        $request->setLocale('de'); // Hier steht die gewünschte Default-Sprache
    }
}

Diese Datei ist unterzubringen in /src/AppBundle/EventListener 

Der EventListener muss Symfony nun noch bekannt gemacht werden. Hierfür muss ein Service in z.B. /app/config/services.yml registriert werden wie folgt:

services:
    AppBundle\EventListener\LanguageListener:
      tags:
      - { name: kernel.event_listener, event: kernel.exception }

Im Falle eines Fehlers setzt Symfony daher nun die Locale im Request wie definiert, was von Pimcore (bzw vom Translator) dann auch beachtet wird.