This repository has been archived by the owner on Jan 30, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 49
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request zendframework/zendframework#5825 from poisa/add/ph…
…pMemoryArray New class Translator\Loader\PhpMemoryArray
- Loading branch information
182 parents
4db5d34
+
95dd270
+
144fb7e
+
712a04b
+
4dbc11a
+
c99b627
+
740abb6
+
9b5478d
+
91a23e2
+
8649d44
+
3f353b0
+
d340adb
+
1e0e8f4
+
5c4289e
+
fb94cca
+
2a3844c
+
906bbcf
+
3d9b8bb
+
84844ae
+
62fc651
+
b0a3dd4
+
0dca0ef
+
910bbbf
+
e574b9b
+
f30ec7d
+
1fa84de
+
41b8543
+
9e2c9d5
+
913f51c
+
39924f3
+
c2a11e1
+
61b9322
+
413a38b
+
e51b2b8
+
20e328b
+
6437ec0
+
e9b8476
+
95e54a0
+
7ea3aed
+
df6a706
+
a82fc82
+
7c2a059
+
4fefb53
+
599ee3a
+
ea3fc65
+
f6c04c2
+
6591e3d
+
a4f76e3
+
33c7531
+
2d59782
+
8152327
+
e56ce9b
+
db9b18f
+
b88635a
+
a262823
+
b79aef6
+
c2284e4
+
70193eb
+
96acf77
+
9675426
+
5f02411
+
0dafea7
+
15dc674
+
4a2447d
+
e6eb7f3
+
e9499c5
+
272b15f
+
11c7758
+
6f0e918
+
5f4980a
+
ecca95a
+
88b5971
+
ecb8d13
+
9de1c08
+
44aad17
+
13269e9
+
654cdb6
+
dc708db
+
380ffba
+
ff67e7f
+
fe2e025
+
95f0efa
+
68cc4b3
+
bf13b96
+
8870381
+
56480f4
+
1fa90d7
+
5c7fe1f
+
abe9bc1
+
a33cacd
+
cdd7d9f
+
6a261b1
+
5e594c4
+
01c1241
+
30d1dd2
+
d4af079
+
c9aa9b4
+
10f47ca
+
ef20fa1
+
2187ae2
+
e7f3993
+
db93d37
+
aa57612
+
4af81d8
+
2f90998
+
3013404
+
69d83fe
+
f383ca9
+
1b26f48
+
054f09d
+
0c86829
+
f22d81a
+
e7ebffe
+
72a7a54
+
cc09223
+
ab99f58
+
2c69e37
+
b6ccfbc
+
b92a5da
+
773a133
+
9ee28ff
+
5865e20
+
63c7303
+
73371d0
+
b96f402
+
b36e36b
+
60fa081
+
a1d27a6
+
43e9240
+
9e59ae6
+
be1ce44
+
5a6465d
+
7e455b4
+
83d837e
+
28bc01e
+
215be48
+
efcc8e0
+
5192ae6
+
7e1ba0f
+
dec8ccf
+
94afc0f
+
8c3ea5f
+
d680762
+
9092473
+
041fc63
+
ea6499d
+
1f59300
+
a75142b
+
f592cc2
+
f523aef
+
2d12221
+
34ad758
+
23cc229
+
1fa15a0
+
6b74fc7
+
1472e82
+
d816ccc
+
7b26586
+
08d26c4
+
a5cc444
+
fe92acf
+
6bd67b2
+
371ba41
+
3e839cb
+
0cf26a5
+
8651b9e
+
a313570
+
7a1829c
+
39d06a8
+
c05aee7
+
04f4340
+
2494ed2
+
952fe57
+
5d8a1d9
+
147d497
+
a17086b
+
8848167
+
9f9c3cd
+
86bbe35
+
7b574c6
+
06374ae
+
42424bf
commit 64d144d
Showing
4 changed files
with
211 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
<?php | ||
/** | ||
* Zend Framework (http://framework.zend.com/) | ||
* | ||
* @link http://github.com/zendframework/zf2 for the canonical source repository | ||
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) | ||
* @license http://framework.zend.com/license/new-bsd New BSD License | ||
*/ | ||
|
||
namespace Zend\I18n\Translator\Loader; | ||
|
||
use Zend\I18n\Exception; | ||
use Zend\I18n\Translator\Plural\Rule as PluralRule; | ||
use Zend\I18n\Translator\TextDomain; | ||
|
||
/** | ||
* PHP array loader. | ||
*/ | ||
class PhpMemoryArray implements RemoteLoaderInterface | ||
{ | ||
/** | ||
* @var array | ||
*/ | ||
protected $messages; | ||
|
||
public function __construct($messages) | ||
{ | ||
$this->messages = $messages; | ||
} | ||
|
||
/** | ||
* Load translations from a remote source. | ||
* | ||
* @param string $locale | ||
* @param string $textDomain | ||
* | ||
* @throws \Zend\I18n\Exception\InvalidArgumentException | ||
* @return \Zend\I18n\Translator\TextDomain|null | ||
*/ | ||
public function load($locale, $textDomain) | ||
{ | ||
if (!is_array($this->messages)) { | ||
throw new Exception\InvalidArgumentException(sprintf( | ||
'Expected an array, but received %s', | ||
gettype($this->messages) | ||
)); | ||
} | ||
|
||
if (!isset($this->messages[$textDomain])) { | ||
throw new Exception\InvalidArgumentException(sprintf( | ||
'Expected textdomain "%s" to be an array, but it is not set', | ||
$textDomain) | ||
); | ||
} | ||
|
||
if (!isset($this->messages[$textDomain][$locale])) { | ||
throw new Exception\InvalidArgumentException(sprintf( | ||
'Expected locale "%s" to be an array, but it is not set', | ||
$locale) | ||
); | ||
} | ||
|
||
$textDomain = new TextDomain($this->messages[$textDomain][$locale]); | ||
|
||
if (array_key_exists('', $textDomain)) { | ||
if (isset($textDomain['']['plural_forms'])) { | ||
$textDomain->setPluralRule( | ||
PluralRule::fromString($textDomain['']['plural_forms']) | ||
); | ||
} | ||
|
||
unset($textDomain['']); | ||
} | ||
|
||
return $textDomain; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
<?php | ||
/** | ||
* Zend Framework (http://framework.zend.com/) | ||
* | ||
* @link http://github.com/zendframework/zf2 for the canonical source repository | ||
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) | ||
* @license http://framework.zend.com/license/new-bsd New BSD License | ||
*/ | ||
|
||
namespace ZendTest\I18n\Translator\Loader; | ||
|
||
use PHPUnit_Framework_TestCase as TestCase; | ||
use Locale; | ||
use Zend\I18n\Translator\Loader\PhpmemoryArray as PhpMemoryArrayLoader; | ||
|
||
class PhpMemoryArrayTest extends TestCase | ||
{ | ||
protected $testFilesDir; | ||
protected $originalLocale; | ||
protected $originalIncludePath; | ||
|
||
public function setUp() | ||
{ | ||
if (!extension_loaded('intl')) { | ||
$this->markTestSkipped('ext/intl not enabled'); | ||
} | ||
|
||
$this->originalLocale = Locale::getDefault(); | ||
Locale::setDefault('en_US'); | ||
|
||
$this->testFilesDir = realpath(__DIR__ . '/../_files/phpmemoryarray'); | ||
} | ||
|
||
public function tearDown() | ||
{ | ||
if (extension_loaded('intl')) { | ||
Locale::setDefault($this->originalLocale); | ||
} | ||
} | ||
public function testLoaderFailsToLoadNonArray() | ||
{ | ||
$loader = new PhpMemoryArrayLoader('foo'); | ||
$this->setExpectedException('Zend\I18n\Exception\InvalidArgumentException', | ||
'Expected an array, but received'); | ||
$loader->load('en_US', 'default'); | ||
} | ||
|
||
public function testLoaderFailsToLoadMissingTextDomain() | ||
{ | ||
$loader = new PhpMemoryArrayLoader(array()); | ||
$this->setExpectedException('Zend\I18n\Exception\InvalidArgumentException', | ||
'Expected textdomain "default" to be an array, but it is not set'); | ||
$loader->load('en_US', 'default'); | ||
} | ||
|
||
public function testLoaderFailsToLoadNonArrayLocale() | ||
{ | ||
$loader = new PhpMemoryArrayLoader(array('default' => array())); | ||
$this->setExpectedException('Zend\I18n\Exception\InvalidArgumentException', | ||
'Expected locale "en_US" to be an array, but it is not set'); | ||
$loader->load('en_US', 'default'); | ||
} | ||
|
||
public function testLoaderLoadsEmptyArray() | ||
{ | ||
$loader = new PhpMemoryArrayLoader(include $this->testFilesDir . '/translation_empty.php'); | ||
$textDomain = $loader->load('en_US', 'default'); | ||
$this->assertInstanceOf('Zend\I18n\Translator\TextDomain', $textDomain); | ||
} | ||
|
||
public function testLoaderReturnsValidTextDomain() | ||
{ | ||
$loader = new PhpMemoryArrayLoader(include $this->testFilesDir . '/translation_en.php'); | ||
$textDomain = $loader->load('en_US', 'default'); | ||
|
||
$this->assertEquals('Message 1 (en)', $textDomain['Message 1']); | ||
$this->assertEquals('Message 4 (en)', $textDomain['Message 4']); | ||
} | ||
|
||
public function testLoaderLoadsPluralRules() | ||
{ | ||
$loader = new PhpMemoryArrayLoader(include $this->testFilesDir . '/translation_en.php'); | ||
$textDomain = $loader->load('en_US', 'default'); | ||
|
||
$this->assertEquals(2, $textDomain->getPluralRule()->evaluate(0)); | ||
$this->assertEquals(0, $textDomain->getPluralRule()->evaluate(1)); | ||
$this->assertEquals(1, $textDomain->getPluralRule()->evaluate(2)); | ||
$this->assertEquals(2, $textDomain->getPluralRule()->evaluate(10)); | ||
} | ||
} |
15 changes: 15 additions & 0 deletions
15
test/Translator/_files/phpmemoryarray/translation_empty.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
<?php | ||
/** | ||
* Zend Framework (http://framework.zend.com/) | ||
* | ||
* @link http://github.com/zendframework/zf2 for the canonical source repository | ||
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) | ||
* @license http://framework.zend.com/license/new-bsd New BSD License | ||
*/ | ||
|
||
return array( | ||
'default' => array( | ||
'en_US' => array( | ||
), | ||
), | ||
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
<?php | ||
/** | ||
* Zend Framework (http://framework.zend.com/) | ||
* | ||
* @link http://github.com/zendframework/zf2 for the canonical source repository | ||
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) | ||
* @license http://framework.zend.com/license/new-bsd New BSD License | ||
*/ | ||
|
||
return array( | ||
'default' => array( | ||
'en_US' => array( | ||
'' => array( | ||
'plural_forms' => 'nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);' | ||
), | ||
'Message 1' => 'Message 1 (en)', | ||
'Message 2' => 'Message 2 (en)', | ||
'Message 3' => 'Message 3 (en)', | ||
'Message 4' => 'Message 4 (en)', | ||
'Message 5' => array( | ||
0 => 'Message 5 (en) Plural 0', | ||
1 => 'Message 5 (en) Plural 1', | ||
2 => 'Message 5 (en) Plural 2' | ||
), | ||
'Cooking furniture' => 'Küchen Möbel (en)', | ||
'Küchen Möbel' => 'Cooking furniture (en)', | ||
), | ||
), | ||
); |