2015-08-17 17:00:26 -07:00
< ? 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\Writer ;
use Symfony\Component\Translation\MessageCatalogue ;
use Symfony\Component\Translation\Dumper\DumperInterface ;
/**
* TranslationWriter writes translation messages .
*
* @ author Michel Salib < michelsalib @ hotmail . com >
*/
class TranslationWriter
{
/**
* Dumpers used for export .
*
* @ var array
*/
private $dumpers = array ();
/**
* Adds a dumper to the writer .
*
* @ param string $format The format of the dumper
* @ param DumperInterface $dumper The dumper
*/
public function addDumper ( $format , DumperInterface $dumper )
{
$this -> dumpers [ $format ] = $dumper ;
}
/**
* Disables dumper backup .
*/
public function disableBackup ()
{
foreach ( $this -> dumpers as $dumper ) {
2016-04-20 09:56:34 -07:00
if ( method_exists ( $dumper , 'setBackup' )) {
$dumper -> setBackup ( false );
}
2015-08-17 17:00:26 -07:00
}
}
/**
* Obtains the list of supported formats .
*
* @ return array
*/
public function getFormats ()
{
return array_keys ( $this -> dumpers );
}
/**
* Writes translation from the catalogue according to the selected format .
*
* @ param MessageCatalogue $catalogue The message catalogue to dump
* @ param string $format The format to use to dump the messages
* @ param array $options Options that are passed to the dumper
*
* @ throws \InvalidArgumentException
*/
public function writeTranslations ( MessageCatalogue $catalogue , $format , $options = array ())
{
if ( ! isset ( $this -> dumpers [ $format ])) {
throw new \InvalidArgumentException ( sprintf ( 'There is no dumper associated with format "%s".' , $format ));
}
// get the right dumper
$dumper = $this -> dumpers [ $format ];
2016-04-20 09:56:34 -07:00
if ( isset ( $options [ 'path' ]) && ! is_dir ( $options [ 'path' ]) && !@ mkdir ( $options [ 'path' ], 0777 , true ) && ! is_dir ( $options [ 'path' ])) {
throw new \RuntimeException ( sprintf ( 'Translation Writer was not able to create directory "%s"' , $options [ 'path' ]));
2015-08-17 17:00:26 -07:00
}
// save
$dumper -> dump ( $catalogue , $options );
}
}