[Translation] support Ini file
This commit is contained in:
parent
6fa1d64f84
commit
903ab81434
@ -14,11 +14,13 @@
|
|||||||
<parameter key="translation.loader.qt.class">Symfony\Component\Translation\Loader\QtTranslationsLoader</parameter>
|
<parameter key="translation.loader.qt.class">Symfony\Component\Translation\Loader\QtTranslationsLoader</parameter>
|
||||||
<parameter key="translation.loader.csv.class">Symfony\Component\Translation\Loader\CsvFileLoader</parameter>
|
<parameter key="translation.loader.csv.class">Symfony\Component\Translation\Loader\CsvFileLoader</parameter>
|
||||||
<parameter key="translation.loader.rb.class">Symfony\Component\Translation\Loader\ResourceBundleLoader</parameter>
|
<parameter key="translation.loader.rb.class">Symfony\Component\Translation\Loader\ResourceBundleLoader</parameter>
|
||||||
|
<parameter key="translation.loader.ini.class">Symfony\Component\Translation\Loader\IniFileLoader</parameter>
|
||||||
<parameter key="translation.dumper.php.class">Symfony\Component\Translation\Dumper\PhpFileDumper</parameter>
|
<parameter key="translation.dumper.php.class">Symfony\Component\Translation\Dumper\PhpFileDumper</parameter>
|
||||||
<parameter key="translation.dumper.xliff.class">Symfony\Component\Translation\Dumper\XliffFileDumper</parameter>
|
<parameter key="translation.dumper.xliff.class">Symfony\Component\Translation\Dumper\XliffFileDumper</parameter>
|
||||||
<parameter key="translation.dumper.yml.class">Symfony\Component\Translation\Dumper\YamlFileDumper</parameter>
|
<parameter key="translation.dumper.yml.class">Symfony\Component\Translation\Dumper\YamlFileDumper</parameter>
|
||||||
<parameter key="translation.dumper.qt.class">Symfony\Component\Translation\Dumper\QtFileDumper</parameter>
|
<parameter key="translation.dumper.qt.class">Symfony\Component\Translation\Dumper\QtFileDumper</parameter>
|
||||||
<parameter key="translation.dumper.csv.class">Symfony\Component\Translation\Dumper\CsvFileDumper</parameter>
|
<parameter key="translation.dumper.csv.class">Symfony\Component\Translation\Dumper\CsvFileDumper</parameter>
|
||||||
|
<parameter key="translation.dumper.ini.class">Symfony\Component\Translation\Dumper\IniFileDumper</parameter>
|
||||||
<parameter key="translation.extractor.php.class">Symfony\Bundle\FrameworkBundle\Translation\PhpExtractor</parameter>
|
<parameter key="translation.extractor.php.class">Symfony\Bundle\FrameworkBundle\Translation\PhpExtractor</parameter>
|
||||||
<parameter key="translation.loader.class">Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader</parameter>
|
<parameter key="translation.loader.class">Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader</parameter>
|
||||||
<parameter key="translation.extractor.class">Symfony\Component\Translation\Extractor\ChainExtractor</parameter>
|
<parameter key="translation.extractor.class">Symfony\Component\Translation\Extractor\ChainExtractor</parameter>
|
||||||
@ -63,6 +65,10 @@
|
|||||||
<tag name="translation.loader" alias="csv" />
|
<tag name="translation.loader" alias="csv" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
|
<service id="translation.loader.ini" class="%translation.loader.ini.class%">
|
||||||
|
<tag name="translation.loader" alias="ini" />
|
||||||
|
</service>
|
||||||
|
|
||||||
<service id="translation.dumper.php" class="%translation.dumper.php.class%">
|
<service id="translation.dumper.php" class="%translation.dumper.php.class%">
|
||||||
<tag name="translation.dumper" alias="php" />
|
<tag name="translation.dumper" alias="php" />
|
||||||
</service>
|
</service>
|
||||||
@ -83,6 +89,10 @@
|
|||||||
<tag name="translation.dumper" alias="csv" />
|
<tag name="translation.dumper" alias="csv" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
|
<service id="translation.dumper.ini" class="%translation.dumper.ini.class%">
|
||||||
|
<tag name="translation.dumper" alias="ini" />
|
||||||
|
</service>
|
||||||
|
|
||||||
<service id="translation.extractor.php" class="%translation.extractor.php.class%">
|
<service id="translation.extractor.php" class="%translation.extractor.php.class%">
|
||||||
<tag name="translation.extractor" alias="php" />
|
<tag name="translation.extractor" alias="php" />
|
||||||
</service>
|
</service>
|
||||||
|
45
src/Symfony/Component/Translation/Dumper/IniFileDumper.php
Normal file
45
src/Symfony/Component/Translation/Dumper/IniFileDumper.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?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\MessageCatalogue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IniFileDumper generates a ini formated string representation of a message catalogue.
|
||||||
|
*
|
||||||
|
* @author Stealth35
|
||||||
|
*/
|
||||||
|
class IniFileDumper extends FileDumper
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function format(MessageCatalogue $messages, $domain = 'messages')
|
||||||
|
{
|
||||||
|
$output = '';
|
||||||
|
|
||||||
|
foreach ($messages->all($domain) as $source => $target) {
|
||||||
|
$escapeTarget = str_replace('"', '\"', $target);
|
||||||
|
$output .= $source.'="'.$escapeTarget."\"\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
protected function getExtension()
|
||||||
|
{
|
||||||
|
return 'ini';
|
||||||
|
}
|
||||||
|
}
|
40
src/Symfony/Component/Translation/Loader/IniFileLoader.php
Normal file
40
src/Symfony/Component/Translation/Loader/IniFileLoader.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?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\Loader;
|
||||||
|
|
||||||
|
use Symfony\Component\Translation\MessageCatalogue;
|
||||||
|
use Symfony\Component\Config\Resource\FileResource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IniFileLoader loads translations from an ini file.
|
||||||
|
*
|
||||||
|
* @author stealth35
|
||||||
|
*/
|
||||||
|
class IniFileLoader extends ArrayLoader implements LoaderInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function load($resource, $locale, $domain = 'messages')
|
||||||
|
{
|
||||||
|
if (!is_file($resource)) {
|
||||||
|
throw new \InvalidArgumentException(sprintf('Error opening file "%s".', $resource));
|
||||||
|
}
|
||||||
|
|
||||||
|
$messages = parse_ini_file($resource, true);
|
||||||
|
|
||||||
|
$catalogue = parent::load($messages, $locale, $domain);
|
||||||
|
$catalogue->addResource(new FileResource($resource));
|
||||||
|
|
||||||
|
return $catalogue;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
<?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\Tests\Component\Translation\Dumper;
|
||||||
|
|
||||||
|
use Symfony\Component\Translation\MessageCatalogue;
|
||||||
|
use Symfony\Component\Translation\Dumper\IniFileDumper;
|
||||||
|
|
||||||
|
class IniFileDumperTest extends \PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
public function testDump()
|
||||||
|
{
|
||||||
|
$catalogue = new MessageCatalogue('en');
|
||||||
|
$catalogue->add(array('foo' => 'bar'));
|
||||||
|
|
||||||
|
$tempDir = sys_get_temp_dir();
|
||||||
|
$dumper = new IniFileDumper();
|
||||||
|
$dumperString = $dumper->dump($catalogue, array('path' => $tempDir));
|
||||||
|
|
||||||
|
$this->assertEquals(file_get_contents(__DIR__.'/../fixtures/resources.ini'), file_get_contents($tempDir.'/messages.en.ini'));
|
||||||
|
|
||||||
|
unlink($tempDir.'/messages.en.ini');
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
<?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\Tests\Component\Translation\Loader;
|
||||||
|
|
||||||
|
use Symfony\Component\Translation\Loader\IniFileLoader;
|
||||||
|
use Symfony\Component\Config\Resource\FileResource;
|
||||||
|
|
||||||
|
class IniFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
public function testLoad()
|
||||||
|
{
|
||||||
|
$loader = new IniFileLoader();
|
||||||
|
$resource = __DIR__.'/../fixtures/resources.ini';
|
||||||
|
$catalogue = $loader->load($resource, 'en', 'domain1');
|
||||||
|
|
||||||
|
$this->assertEquals(array('foo' => 'bar'), $catalogue->all('domain1'));
|
||||||
|
$this->assertEquals('en', $catalogue->getLocale());
|
||||||
|
$this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testLoadDoesNothingIfEmpty()
|
||||||
|
{
|
||||||
|
$loader = new IniFileLoader();
|
||||||
|
$resource = __DIR__.'/../fixtures/empty.ini';
|
||||||
|
$catalogue = $loader->load($resource, 'en', 'domain1');
|
||||||
|
|
||||||
|
$this->assertEquals(array(), $catalogue->all('domain1'));
|
||||||
|
$this->assertEquals('en', $catalogue->getLocale());
|
||||||
|
$this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function testLoadThrowsAnExceptionIfFileNotExists()
|
||||||
|
{
|
||||||
|
$loader = new IniFileLoader();
|
||||||
|
$resource = __DIR__.'/../fixtures/not-exists.ini';
|
||||||
|
$loader->load($resource, 'en', 'domain1');
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
foo="bar"
|
Reference in New Issue
Block a user