src/EventListener/CreateTranslationJsonEventlisterner.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Exception;
  4. use Pimcore\Event\Model\TranslationEvent;
  5. use Pimcore\Model\Translation;
  6. use Pimcore\Tool;
  7. use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
  8. use Symfony\Component\Filesystem\Filesystem;
  9. use Symfony\Component\Filesystem\Path;
  10. class CreateTranslationJsonEventlisterner
  11. {
  12.     public function onPostSave(TranslationEvent $event)
  13.     {
  14.         $domain Translation::DOMAIN_DEFAULT;
  15.         $list = new Translation\Listing();
  16.         $list->setDomain($domain);
  17.         $translations $list->load();
  18.         if ($translations) {
  19.             $languages Tool::getValidLanguages();
  20.             if ($languages) {
  21.                 foreach ($languages as $language) {
  22.                     $content $this->getContent($translations$language);
  23.                     $this->createLocaleFile($language$content);
  24.                 }
  25.             }
  26.         }
  27.     }
  28.     /**
  29.      * @param array $translations
  30.      * @return string
  31.      */
  32.     private function getContent(array $translations$locale): string
  33.     {
  34.         $output = [];
  35.         foreach ($translations as $translation) {
  36.             try {
  37.                 $this->assignArrayByPath($output$translation->getKey(), $translation->getTranslation($locale));
  38.             } catch (Exception $exception) {
  39.                 $msg $exception->getMessage();
  40.             }
  41.         }
  42.         $output json_encode($output);
  43.         return $output;
  44.     }
  45.     public function assignArrayByPath(&$arr$path$value$separator '.')
  46.     {
  47.         if (preg_match("/^[\w-]+?(?:\.?[\w-]+?)*$/m"$path)) {
  48.             $keys explode($separator$path);
  49.             foreach ($keys as $key) {
  50.                 $arr = &$arr[$key];
  51.             }
  52.             $arr $value;
  53.         }
  54.     }
  55.     public function createLocaleFile($locale$content)
  56.     {
  57.         $path PIMCORE_WEB_ROOT '/locales';
  58.         $file $path '/' $locale '.json';
  59.         $filesystem = new Filesystem();
  60.         try {
  61.             $filesystem->mkdir(
  62.                 Path::normalize($path),
  63.             );
  64.             $filesystem->dumpFile($file$content);
  65.         } catch (IOExceptionInterface $exception) {
  66.             echo "An error occurred while creating your directory at " $exception->getPath();
  67.         }
  68.     }
  69. }