Skip to content

Add Symfony 4 support #19

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Dec 20, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 2 additions & 7 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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.*
Expand All @@ -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
Expand Down
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand Down
13 changes: 9 additions & 4 deletions src/FileStorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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');
}
Expand Down
30 changes: 30 additions & 0 deletions src/LegacyTranslationLoader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace Translation\SymfonyStorage;

use Symfony\Component\Translation\MessageCatalogue;
use Symfony\Component\Translation\Reader\TranslationReader;

/**
* This loader is just a legacy wrapper for Symfony TranslationReader
* and provider a BC layer for Symfony 4.
*
* @author Victor Bocharsky <bocharsky.bw@gmail.com>
*/
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);
}
}
33 changes: 23 additions & 10 deletions tests/Unit/FileStorageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}

Expand All @@ -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()
Expand All @@ -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)
Expand All @@ -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'));
}

Expand All @@ -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()]);

Expand All @@ -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()]);

Expand Down Expand Up @@ -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()]);

Expand All @@ -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()]);

Expand All @@ -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']]);
Expand All @@ -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()]);

Expand All @@ -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();
}
}