src/mvk/Middleware/Web/EventListener/TranslationSaveListener.php line 16

Open in your IDE?
  1. <?php
  2. namespace App\mvk\Middleware\Web\EventListener;
  3. use Exception;
  4. use Pimcore\Event\Model\TranslationEvent;
  5. use Pimcore\Model\Translation;
  6. class TranslationSaveListener {
  7.     public function __construct()
  8.     {
  9.         define('MVK_APPLICATION_PREFIX''app');
  10.     }
  11.     public function saveTranslations(TranslationEvent $info) {
  12.         $translationKey $info->getTranslation()->getKey();
  13.         if (!preg_match('/'MVK_APPLICATION_PREFIX .'_.*?_(.*?)_.*/'$translationKey$match)) {
  14.             return;
  15.         }
  16.         $type $match[1];
  17.         $domain Translation::DOMAIN_DEFAULT;
  18.         $objectPrefix MVK_APPLICATION_PREFIX '\_%\_' $type '\_%';
  19.         $list = new Translation\Listing();
  20.         $list->setDomain($domain);
  21.         $list->setOrder('asc');
  22.         $list->setLanguages(['de_DE']);
  23.         $list->setCondition("translations_messages.key LIKE ?"$objectPrefix);
  24.         $list->setOrderKey('translations_messages.key'false);
  25.         $list->load();
  26.         $listData $list->getData();
  27.         $response = [];
  28.         $errors = [];
  29.         foreach ($listData as $data) {
  30.             if (!$this->validate($data->getTranslation('de_DE'))) {
  31.                 $response[$data->getKey()] = $data->getTranslation('de_DE');
  32.             } else {
  33.                 array_push($errors$data->getKey());
  34.             }
  35.         }
  36.         if (!empty($errors)) {
  37.             throw new Exception('The following translation keys have malformed values:'.implode(','$errors));
  38.         }
  39.         $path PIMCORE_PROJECT_ROOT '/public/frontend/translation/' $type;
  40.         if (!file_exists($path)) {
  41.             mkdir($path0775true);
  42.         }
  43.         $jsonString json_encode($responseJSON_UNESCAPED_UNICODE JSON_UNESCAPED_SLASHES JSON_UNESCAPED_LINE_TERMINATORS);
  44.         file_put_contents($path '/de.json'str_replace('\\\\','\\',$jsonString));
  45.     }
  46.     private function validate(string $string): bool
  47.     {
  48.         return preg_match('/\\\\"[^"]*"[^\s>]/'$string);
  49.     }
  50. }