Skip to content

Commit 01632cd

Browse files
bocharsky-bwNyholm
authored andcommitted
Add Symfony 4 support (#19)
* Fix deprecations: Inject translation reader instead of loader * Allow Symfony 4 * Test stable version of Symfony 3.4 / 4.0 * Revert changes in FileStorage * Create LegacyTranslationLoader i.e. wrapper for TranslationReader * We don't need allow_failures for sf 3.4-dev and 4.0-dev anymore
1 parent 05b9c27 commit 01632cd

File tree

5 files changed

+66
-23
lines changed

5 files changed

+66
-23
lines changed

.travis.yml

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,6 @@ env:
2424

2525
matrix:
2626
fast_finish: true
27-
allow_failures:
28-
- php: 7.1
29-
env: SYMFONY_VERSION=3.4.x-dev
30-
- php: 7.1
31-
env: SYMFONY_VERSION=4.0.x-dev
3227
include:
3328
- php: 5.5
3429
env: COMPOSER_FLAGS="--prefer-stable --prefer-lowest" COVERAGE=true TEST_COMMAND="composer test-ci" SYMFONY_VERSION=2.8.*
@@ -38,9 +33,9 @@ matrix:
3833
- php: 7.0
3934
env: SYMFONY_VERSION=2.8.*
4035
- php: 7.1
41-
env: SYMFONY_VERSION=3.4.x-dev
36+
env: SYMFONY_VERSION=3.4.*
4237
- php: 7.1
43-
env: SYMFONY_VERSION=4.0.x-dev
38+
env: SYMFONY_VERSION=4.0.*
4439
- php: 7.0
4540
env: SYMFONY_VERSION=3.0.*
4641
- php: 7.0

composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
"require": {
1212
"php": "^5.5 || ^7.0",
1313
"php-translation/common": "^0.2.1",
14-
"symfony/translation": "^2.7 || ^3.0",
14+
"symfony/translation": "^2.7 || ^3.0 || ^4.0",
1515
"nyholm/nsa": "^1.1"
1616
},
1717
"require-dev": {
1818
"phpunit/phpunit": "^4.8.36 || ^5.5 || ^6.2",
19-
"symfony/framework-bundle": "^2.7 || ^3.0"
19+
"symfony/framework-bundle": "^2.7 || ^3.0 || ^4.0"
2020
},
2121
"autoload": {
2222
"psr-4": {

src/FileStorage.php

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader as SymfonyTranslationLoader;
1515
use Symfony\Component\Translation\MessageCatalogue;
1616
use Symfony\Component\Translation\MessageCatalogueInterface;
17+
use Symfony\Component\Translation\Reader\TranslationReader;
1718
use Symfony\Component\Translation\Writer\TranslationWriter;
1819
use Translation\Common\Model\Message;
1920
use Translation\Common\Storage;
@@ -52,13 +53,17 @@ final class FileStorage implements Storage, TransferableStorage
5253
private $catalogues;
5354

5455
/**
55-
* @param TranslationWriter $writer
56-
* @param SymfonyTranslationLoader|TranslationLoader $loader
57-
* @param array $dir
58-
* @param array $options
56+
* @param TranslationWriter $writer
57+
* @param SymfonyTranslationLoader|TranslationLoader|TranslationReader $loader
58+
* @param array $dir
59+
* @param array $options
5960
*/
6061
public function __construct(TranslationWriter $writer, $loader, array $dir, array $options = [])
6162
{
63+
// Create a legacy loader which is a wrapper for TranslationReader
64+
if ($loader instanceof TranslationReader) {
65+
$loader = new LegacyTranslationLoader($loader);
66+
}
6267
if (!$loader instanceof SymfonyTranslationLoader && !$loader instanceof TranslationLoader) {
6368
throw new \LogicException('Second parameter of FileStorage must be a Symfony translation loader or implement Translation\SymfonyStorage\TranslationLoader');
6469
}

src/LegacyTranslationLoader.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace Translation\SymfonyStorage;
4+
5+
use Symfony\Component\Translation\MessageCatalogue;
6+
use Symfony\Component\Translation\Reader\TranslationReader;
7+
8+
/**
9+
* This loader is just a legacy wrapper for Symfony TranslationReader
10+
* and provider a BC layer for Symfony 4.
11+
*
12+
* @author Victor Bocharsky <[email protected]>
13+
*/
14+
class LegacyTranslationLoader implements TranslationLoader
15+
{
16+
/**
17+
* @var TranslationReader
18+
*/
19+
private $reader;
20+
21+
public function __construct(TranslationReader $reader)
22+
{
23+
$this->reader = $reader;
24+
}
25+
26+
public function loadMessages($directory, MessageCatalogue $catalogue)
27+
{
28+
$this->reader->read($directory, $catalogue);
29+
}
30+
}

tests/Unit/FileStorageTest.php

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader;
1616
use Symfony\Component\Translation\MessageCatalogue;
1717
use Symfony\Component\Translation\MessageCatalogueInterface;
18+
use Symfony\Component\Translation\Reader\TranslationReader;
1819
use Symfony\Component\Translation\Writer\TranslationWriter;
1920
use Translation\Common\Model\Message;
2021
use Translation\SymfonyStorage\FileStorage;
@@ -27,7 +28,7 @@ class FileStorageTest extends TestCase
2728
{
2829
public function testConstructor()
2930
{
30-
$storage = new FileStorage(new TranslationWriter(), new TranslationLoader(), ['foo']);
31+
$storage = new FileStorage(new TranslationWriter(), $this->createTranslationLoader(), ['foo']);
3132
$this->assertInstanceOf(FileStorage::class, $storage);
3233
}
3334

@@ -44,7 +45,7 @@ public function testConstructorInvalidLoader()
4445
*/
4546
public function testConstructorEmptyArray()
4647
{
47-
new FileStorage(new TranslationWriter(), new TranslationLoader(), []);
48+
new FileStorage(new TranslationWriter(), $this->createTranslationLoader(), []);
4849
}
4950

5051
public function testCreateNewCatalogue()
@@ -61,7 +62,7 @@ public function testCreateNewCatalogue()
6162
['path' => 'foo', 'xliff_version' => '2.0']
6263
);
6364

64-
$storage = new FileStorage($writer, new TranslationLoader(), ['foo']);
65+
$storage = new FileStorage($writer, $this->createTranslationLoader(), ['foo']);
6566
$storage->create(new Message('key', 'domain', 'en', 'Message'));
6667

6768
$writer = $this->getMockBuilder(TranslationWriter::class)
@@ -76,7 +77,7 @@ public function testCreateNewCatalogue()
7677
['path' => 'bar', 'default_output_format' => 'format', 'xliff_version' => '2.0']
7778
);
7879

79-
$storage = new FileStorage($writer, new TranslationLoader(), ['bar'], ['default_output_format' => 'format']);
80+
$storage = new FileStorage($writer, $this->createTranslationLoader(), ['bar'], ['default_output_format' => 'format']);
8081
$storage->create(new Message('key', 'domain', 'en', 'Message'));
8182
}
8283

@@ -94,7 +95,7 @@ public function testCreateExistingCatalogue()
9495
['path' => $this->getFixturePath(), 'xliff_version' => '2.0']
9596
);
9697

97-
$loader = new TranslationLoader();
98+
$loader = $this->createTranslationLoader();
9899
$loader->addLoader('xlf', new XliffLoader());
99100
$storage = new FileStorage($writer, $loader, ['foo', $this->getFixturePath()]);
100101

@@ -107,7 +108,7 @@ public function testGet()
107108
->disableOriginalConstructor()
108109
->getMock();
109110

110-
$loader = new TranslationLoader();
111+
$loader = $this->createTranslationLoader();
111112
$loader->addLoader('xlf', new XliffLoader());
112113
$storage = new FileStorage($writer, $loader, [$this->getFixturePath()]);
113114

@@ -137,7 +138,7 @@ public function testUpdate()
137138
['path' => $this->getFixturePath(), 'xliff_version' => '2.0']
138139
);
139140

140-
$loader = new TranslationLoader();
141+
$loader = $this->createTranslationLoader();
141142
$loader->addLoader('xlf', new XliffLoader());
142143
$storage = new FileStorage($writer, $loader, [$this->getFixturePath()]);
143144

@@ -162,7 +163,7 @@ public function testDelete()
162163
['path' => $this->getFixturePath(), 'xliff_version' => '2.0']
163164
);
164165

165-
$loader = new TranslationLoader();
166+
$loader = $this->createTranslationLoader();
166167
$loader->addLoader('xlf', new XliffLoader());
167168
$storage = new FileStorage($writer, $loader, [$this->getFixturePath()]);
168169

@@ -186,7 +187,7 @@ public function testImport()
186187
['path' => $this->getFixturePath(), 'xliff_version' => '2.0']
187188
);
188189

189-
$loader = new TranslationLoader();
190+
$loader = $this->createTranslationLoader();
190191
$loader->addLoader('xlf', new XliffLoader());
191192
$storage = new FileStorage($writer, $loader, [$this->getFixturePath()]);
192193
$catalogue = new MessageCatalogue('en', ['messages' => ['test_4711' => 'foobar']]);
@@ -200,7 +201,7 @@ public function testExport()
200201
->disableOriginalConstructor()
201202
->getMock();
202203

203-
$loader = new TranslationLoader();
204+
$loader = $this->createTranslationLoader();
204205
$loader->addLoader('xlf', new XliffLoader());
205206
$storage = new FileStorage($writer, $loader, [$this->getFixturePath()]);
206207

@@ -222,4 +223,16 @@ private function getFixturePath()
222223
{
223224
return realpath(__DIR__.'/../Fixtures/single-file');
224225
}
226+
227+
/**
228+
* @return TranslationLoader|TranslationReader
229+
*/
230+
private function createTranslationLoader()
231+
{
232+
if (class_exists(TranslationReader::class)) {
233+
return new TranslationReader();
234+
}
235+
236+
return new TranslationLoader();
237+
}
225238
}

0 commit comments

Comments
 (0)