diff --git a/.travis.yml b/.travis.yml index bae956b..b81ef58 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,11 +24,6 @@ env: matrix: fast_finish: true - allow_failures: - - php: 7.1 - env: SYMFONY_VERSION=3.4.x-dev - - php: 7.1 - env: SYMFONY_VERSION=4.0.x-dev include: - php: 5.5 env: COMPOSER_FLAGS="--prefer-stable --prefer-lowest" COVERAGE=true TEST_COMMAND="composer test-ci" SYMFONY_VERSION=2.8.* @@ -38,9 +33,9 @@ matrix: - php: 7.0 env: SYMFONY_VERSION=2.8.* - php: 7.1 - env: SYMFONY_VERSION=3.4.x-dev + env: SYMFONY_VERSION=3.4.* - php: 7.1 - env: SYMFONY_VERSION=4.0.x-dev + env: SYMFONY_VERSION=4.0.* - php: 7.0 env: SYMFONY_VERSION=3.0.* - php: 7.0 diff --git a/composer.json b/composer.json index b3c7943..aa08409 100644 --- a/composer.json +++ b/composer.json @@ -11,12 +11,12 @@ "require": { "php": "^5.5 || ^7.0", "php-translation/common": "^0.2.1", - "symfony/translation": "^2.7 || ^3.0", + "symfony/translation": "^2.7 || ^3.0 || ^4.0", "nyholm/nsa": "^1.1" }, "require-dev": { "phpunit/phpunit": "^4.8.36 || ^5.5 || ^6.2", - "symfony/framework-bundle": "^2.7 || ^3.0" + "symfony/framework-bundle": "^2.7 || ^3.0 || ^4.0" }, "autoload": { "psr-4": { diff --git a/src/FileStorage.php b/src/FileStorage.php index c8f8e68..c447d8e 100644 --- a/src/FileStorage.php +++ b/src/FileStorage.php @@ -14,6 +14,7 @@ use Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader as SymfonyTranslationLoader; use Symfony\Component\Translation\MessageCatalogue; use Symfony\Component\Translation\MessageCatalogueInterface; +use Symfony\Component\Translation\Reader\TranslationReader; use Symfony\Component\Translation\Writer\TranslationWriter; use Translation\Common\Model\Message; use Translation\Common\Storage; @@ -52,13 +53,17 @@ final class FileStorage implements Storage, TransferableStorage private $catalogues; /** - * @param TranslationWriter $writer - * @param SymfonyTranslationLoader|TranslationLoader $loader - * @param array $dir - * @param array $options + * @param TranslationWriter $writer + * @param SymfonyTranslationLoader|TranslationLoader|TranslationReader $loader + * @param array $dir + * @param array $options */ public function __construct(TranslationWriter $writer, $loader, array $dir, array $options = []) { + // Create a legacy loader which is a wrapper for TranslationReader + if ($loader instanceof TranslationReader) { + $loader = new LegacyTranslationLoader($loader); + } if (!$loader instanceof SymfonyTranslationLoader && !$loader instanceof TranslationLoader) { throw new \LogicException('Second parameter of FileStorage must be a Symfony translation loader or implement Translation\SymfonyStorage\TranslationLoader'); } diff --git a/src/LegacyTranslationLoader.php b/src/LegacyTranslationLoader.php new file mode 100644 index 0000000..d8430ad --- /dev/null +++ b/src/LegacyTranslationLoader.php @@ -0,0 +1,30 @@ + + */ +class LegacyTranslationLoader implements TranslationLoader +{ + /** + * @var TranslationReader + */ + private $reader; + + public function __construct(TranslationReader $reader) + { + $this->reader = $reader; + } + + public function loadMessages($directory, MessageCatalogue $catalogue) + { + $this->reader->read($directory, $catalogue); + } +} diff --git a/tests/Unit/FileStorageTest.php b/tests/Unit/FileStorageTest.php index 8edd44e..26f6e1d 100644 --- a/tests/Unit/FileStorageTest.php +++ b/tests/Unit/FileStorageTest.php @@ -15,6 +15,7 @@ use Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader; use Symfony\Component\Translation\MessageCatalogue; use Symfony\Component\Translation\MessageCatalogueInterface; +use Symfony\Component\Translation\Reader\TranslationReader; use Symfony\Component\Translation\Writer\TranslationWriter; use Translation\Common\Model\Message; use Translation\SymfonyStorage\FileStorage; @@ -27,7 +28,7 @@ class FileStorageTest extends TestCase { public function testConstructor() { - $storage = new FileStorage(new TranslationWriter(), new TranslationLoader(), ['foo']); + $storage = new FileStorage(new TranslationWriter(), $this->createTranslationLoader(), ['foo']); $this->assertInstanceOf(FileStorage::class, $storage); } @@ -44,7 +45,7 @@ public function testConstructorInvalidLoader() */ public function testConstructorEmptyArray() { - new FileStorage(new TranslationWriter(), new TranslationLoader(), []); + new FileStorage(new TranslationWriter(), $this->createTranslationLoader(), []); } public function testCreateNewCatalogue() @@ -61,7 +62,7 @@ public function testCreateNewCatalogue() ['path' => 'foo', 'xliff_version' => '2.0'] ); - $storage = new FileStorage($writer, new TranslationLoader(), ['foo']); + $storage = new FileStorage($writer, $this->createTranslationLoader(), ['foo']); $storage->create(new Message('key', 'domain', 'en', 'Message')); $writer = $this->getMockBuilder(TranslationWriter::class) @@ -76,7 +77,7 @@ public function testCreateNewCatalogue() ['path' => 'bar', 'default_output_format' => 'format', 'xliff_version' => '2.0'] ); - $storage = new FileStorage($writer, new TranslationLoader(), ['bar'], ['default_output_format' => 'format']); + $storage = new FileStorage($writer, $this->createTranslationLoader(), ['bar'], ['default_output_format' => 'format']); $storage->create(new Message('key', 'domain', 'en', 'Message')); } @@ -94,7 +95,7 @@ public function testCreateExistingCatalogue() ['path' => $this->getFixturePath(), 'xliff_version' => '2.0'] ); - $loader = new TranslationLoader(); + $loader = $this->createTranslationLoader(); $loader->addLoader('xlf', new XliffLoader()); $storage = new FileStorage($writer, $loader, ['foo', $this->getFixturePath()]); @@ -107,7 +108,7 @@ public function testGet() ->disableOriginalConstructor() ->getMock(); - $loader = new TranslationLoader(); + $loader = $this->createTranslationLoader(); $loader->addLoader('xlf', new XliffLoader()); $storage = new FileStorage($writer, $loader, [$this->getFixturePath()]); @@ -137,7 +138,7 @@ public function testUpdate() ['path' => $this->getFixturePath(), 'xliff_version' => '2.0'] ); - $loader = new TranslationLoader(); + $loader = $this->createTranslationLoader(); $loader->addLoader('xlf', new XliffLoader()); $storage = new FileStorage($writer, $loader, [$this->getFixturePath()]); @@ -162,7 +163,7 @@ public function testDelete() ['path' => $this->getFixturePath(), 'xliff_version' => '2.0'] ); - $loader = new TranslationLoader(); + $loader = $this->createTranslationLoader(); $loader->addLoader('xlf', new XliffLoader()); $storage = new FileStorage($writer, $loader, [$this->getFixturePath()]); @@ -186,7 +187,7 @@ public function testImport() ['path' => $this->getFixturePath(), 'xliff_version' => '2.0'] ); - $loader = new TranslationLoader(); + $loader = $this->createTranslationLoader(); $loader->addLoader('xlf', new XliffLoader()); $storage = new FileStorage($writer, $loader, [$this->getFixturePath()]); $catalogue = new MessageCatalogue('en', ['messages' => ['test_4711' => 'foobar']]); @@ -200,7 +201,7 @@ public function testExport() ->disableOriginalConstructor() ->getMock(); - $loader = new TranslationLoader(); + $loader = $this->createTranslationLoader(); $loader->addLoader('xlf', new XliffLoader()); $storage = new FileStorage($writer, $loader, [$this->getFixturePath()]); @@ -222,4 +223,16 @@ private function getFixturePath() { return realpath(__DIR__.'/../Fixtures/single-file'); } + + /** + * @return TranslationLoader|TranslationReader + */ + private function createTranslationLoader() + { + if (class_exists(TranslationReader::class)) { + return new TranslationReader(); + } + + return new TranslationLoader(); + } }