Vous êtes connecté en tant que anonymous Se Deconnecter
vendor/symfony/translation/Dumper/FileDumper.php
4f5a31d2
 <?php
 
 /*
  * This file is part of the Symfony package.
  *
  * (c) Fabien Potencier <fabien@symfony.com>
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
  */
 
 namespace Symfony\Component\Translation\Dumper;
 
 use Symfony\Component\Translation\Exception\InvalidArgumentException;
 use Symfony\Component\Translation\Exception\RuntimeException;
 use Symfony\Component\Translation\MessageCatalogue;
 
 /**
  * FileDumper is an implementation of DumperInterface that dump a message catalogue to file(s).
  *
  * Options:
  * - path (mandatory): the directory where the files should be saved
  *
  * @author Michel Salib <michelsalib@hotmail.com>
  */
 abstract class FileDumper implements DumperInterface
 {
     /**
      * A template for the relative paths to files.
      *
      * @var string
      */
     protected $relativePathTemplate = '%domain%.%locale%.%extension%';
 
     /**
      * Sets the template for the relative paths to files.
      *
      * @param string $relativePathTemplate A template for the relative paths to files
      */
     public function setRelativePathTemplate($relativePathTemplate)
     {
         $this->relativePathTemplate = $relativePathTemplate;
     }
 
     /**
      * Sets backup flag.
      *
      * @param bool $backup
      *
      * @deprecated since Symfony 4.1
      */
     public function setBackup($backup)
     {
         @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1.', __METHOD__), E_USER_DEPRECATED);
 
         if (false !== $backup) {
             throw new \LogicException('The backup feature is no longer supported.');
         }
     }
 
     /**
      * {@inheritdoc}
      */
     public function dump(MessageCatalogue $messages, $options = [])
     {
         if (!\array_key_exists('path', $options)) {
             throw new InvalidArgumentException('The file dumper needs a path option.');
         }
 
         // save a file for each domain
         foreach ($messages->getDomains() as $domain) {
             $fullpath = $options['path'].'/'.$this->getRelativePath($domain, $messages->getLocale());
             if (!file_exists($fullpath)) {
                 $directory = \dirname($fullpath);
                 if (!file_exists($directory) && !@mkdir($directory, 0777, true)) {
                     throw new RuntimeException(sprintf('Unable to create directory "%s".', $directory));
                 }
             }
 
             $intlDomain = $domain.MessageCatalogue::INTL_DOMAIN_SUFFIX;
             $intlMessages = $messages->all($intlDomain);
 
             if ($intlMessages) {
                 $intlPath = $options['path'].'/'.$this->getRelativePath($intlDomain, $messages->getLocale());
                 file_put_contents($intlPath, $this->formatCatalogue($messages, $intlDomain, $options));
 
                 $messages->replace([], $intlDomain);
 
                 try {
                     if ($messages->all($domain)) {
                         file_put_contents($fullpath, $this->formatCatalogue($messages, $domain, $options));
                     }
                     continue;
                 } finally {
                     $messages->replace($intlMessages, $intlDomain);
                 }
             }
 
             file_put_contents($fullpath, $this->formatCatalogue($messages, $domain, $options));
         }
     }
 
     /**
      * Transforms a domain of a message catalogue to its string representation.
      *
      * @param MessageCatalogue $messages
      * @param string           $domain
      * @param array            $options
      *
      * @return string representation
      */
     abstract public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = []);
 
     /**
      * Gets the file extension of the dumper.
      *
      * @return string file extension
      */
     abstract protected function getExtension();
 
     /**
      * Gets the relative file path using the template.
      */
     private function getRelativePath(string $domain, string $locale): string
     {
         return strtr($this->relativePathTemplate, [
             '%domain%' => $domain,
             '%locale%' => $locale,
             '%extension%' => $this->getExtension(),
         ]);
     }
 }