Skip to content

Commit 7978916

Browse files
committed
Revert "Fix multi-file output (martinlindhe#96)"
This reverts commit f546c3f.
1 parent 95fcfa0 commit 7978916

File tree

3 files changed

+40
-139
lines changed

3 files changed

+40
-139
lines changed

src/Commands/GenerateInclude.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public function handle()
5050

5151
if ($multipleFiles || $multipleLocales) {
5252
$files = (new Generator($config))
53-
->generateMultiple($root, $format);
53+
->generateMultiple($root, $format, $multipleLocales);
5454

5555
if ($config['showOutputMessages']) {
5656
$this->info("Written to : " . $files);

src/Generator.php

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public function generateFromPath($path, $format = 'es6', $withVendor = false, $l
8484
}
8585

8686
if (isset($locales[$noExt])) {
87-
$locales[$noExt] = array_merge_recursive($local, $locales[$noExt]);
87+
$locales[$noExt] = array_merge($local, $locales[$noExt]);
8888
} else {
8989
$locales[$noExt] = $local;
9090
}
@@ -93,7 +93,22 @@ public function generateFromPath($path, $format = 'es6', $withVendor = false, $l
9393

9494
$locales = $this->adjustVendor($locales);
9595

96-
return $this->encodeJson($locales, $format);
96+
$jsonLocales = json_encode($locales, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL;
97+
98+
if (json_last_error() !== JSON_ERROR_NONE) {
99+
throw new Exception('Could not generate JSON, error code '.json_last_error());
100+
}
101+
102+
// formats other than 'es6' and 'umd' will become plain JSON
103+
if ($format === 'es6') {
104+
$jsBody = $this->getES6Module($jsonLocales);
105+
} elseif ($format === 'umd') {
106+
$jsBody = $this->getUMDModule($jsonLocales);
107+
} else {
108+
$jsBody = $jsonLocales;
109+
}
110+
111+
return $jsBody;
97112
}
98113

99114
/**
@@ -102,7 +117,7 @@ public function generateFromPath($path, $format = 'es6', $withVendor = false, $l
102117
* @return string
103118
* @throws Exception
104119
*/
105-
public function generateMultiple($path, $format = 'es6')
120+
public function generateMultiple($path, $format = 'es6', $multiLocales = false)
106121
{
107122
if (!is_dir($path)) {
108123
throw new Exception('Directory not found: ' . $path);
@@ -127,7 +142,7 @@ public function generateMultiple($path, $format = 'es6')
127142
$this->availableLocales[] = $noExt;
128143
}
129144
if ($fileinfo->isDir()) {
130-
$local = $this->allocateLocaleArray($fileinfo->getRealPath());
145+
$local = $this->allocateLocaleArray($fileinfo->getRealPath(), $multiLocales);
131146
} else {
132147
$local = $this->allocateLocaleJSON($fileinfo->getRealPath());
133148
if ($local === null) continue;
@@ -141,10 +156,20 @@ public function generateMultiple($path, $format = 'es6')
141156
}
142157
}
143158
}
144-
foreach ($locales as $fileName => $data) {
159+
foreach ($this->filesToCreate as $fileName => $data) {
145160
$fileToCreate = $jsPath . $fileName . '.js';
146161
$createdFiles .= $fileToCreate . PHP_EOL;
147-
$jsBody = $this->encodeJson([$fileName => $data], $format);
162+
$jsonLocales = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL;
163+
if (json_last_error() !== JSON_ERROR_NONE) {
164+
throw new Exception('Could not generate JSON, error code '.json_last_error());
165+
}
166+
if ($format === 'es6') {
167+
$jsBody = $this->getES6Module($jsonLocales);
168+
} elseif ($format === 'umd') {
169+
$jsBody = $this->getUMDModule($jsonLocales);
170+
} else {
171+
$jsBody = $jsonLocales;
172+
}
148173

149174
if (!is_dir(dirname($fileToCreate))) {
150175
mkdir(dirname($fileToCreate), 0777, true);
@@ -178,7 +203,7 @@ private function allocateLocaleJSON($path)
178203
* @param string $path
179204
* @return array
180205
*/
181-
private function allocateLocaleArray($path)
206+
private function allocateLocaleArray($path, $multiLocales = false)
182207
{
183208
$data = [];
184209
$dir = new DirectoryIterator($path);
@@ -218,6 +243,11 @@ private function allocateLocaleArray($path)
218243
if($filePath[0] === DIRECTORY_SEPARATOR) {
219244
$filePath = substr($filePath, 1);
220245
}
246+
if ($multiLocales) {
247+
$this->filesToCreate[$lastLocale][$lastLocale][$filePath] = $this->adjustArray($tmp);
248+
} else {
249+
$this->filesToCreate[$filePath][$lastLocale] = $this->adjustArray($tmp);
250+
}
221251
}
222252

223253
$data[$noExt] = $this->adjustArray($tmp);
@@ -374,19 +404,4 @@ private function getES6Module($body)
374404
{
375405
return "export default {$body}";
376406
}
377-
378-
private function encodeJson($data, $format = 'es6')
379-
{
380-
$jsonLocales = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL;
381-
if (json_last_error() !== JSON_ERROR_NONE) {
382-
throw new Exception('Could not generate JSON, error code '.json_last_error());
383-
}
384-
if ($format === 'es6') {
385-
return $this->getES6Module($jsonLocales);
386-
} elseif ($format === 'umd') {
387-
return $this->getUMDModule($jsonLocales);
388-
}
389-
390-
return $jsonLocales;
391-
}
392407
}

tests/GenerateTest.php

Lines changed: 2 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,13 @@
44

55
class GenerateTest extends \PHPUnit_Framework_TestCase
66
{
7-
/**
8-
* @return string
9-
*/
10-
private function getRootDir()
7+
private function generateLocaleFilesFrom(array $arr)
118
{
129
$root = sys_get_temp_dir() . '/' . sha1(microtime(true) . mt_rand());
13-
10+
1411
if (!is_dir($root)) {
1512
mkdir($root, 0777, true);
1613
}
17-
return $root;
18-
}
19-
20-
private function generateLocaleFilesFrom(array $arr, $root = null)
21-
{
22-
$root = $root ?: $this->getRootDir();
2314

2415
foreach ($arr as $key => $val) {
2516

@@ -36,18 +27,6 @@ private function generateLocaleFilesFrom(array $arr, $root = null)
3627
return $root;
3728
}
3829

39-
private function generateJsonLocaleFilesFrom(array $arr, $root = null)
40-
{
41-
$root = $root ?: $this->getRootDir();
42-
43-
foreach ($arr as $lang => $data) {
44-
$outFile = $root . '/' . $lang . '.json';
45-
file_put_contents($outFile, json_encode($data));
46-
}
47-
48-
return $root;
49-
}
50-
5130
private function destroyLocaleFilesFrom(array $arr, $root)
5231
{
5332
foreach ($arr as $key => $val) {
@@ -59,11 +38,6 @@ private function destroyLocaleFilesFrom(array $arr, $root)
5938
}
6039
}
6140

62-
$jsonFile = $root . '/'. $key . '.json';
63-
if (file_exists($jsonFile)) {
64-
unlink($jsonFile);
65-
}
66-
6741
if (is_dir($root . '/' . $key)) {
6842
rmdir($root . '/' . $key);
6943
}
@@ -112,43 +86,6 @@ function testBasic()
11286
$this->destroyLocaleFilesFrom($arr, $root);
11387
}
11488

115-
function testBasicJsonFiles()
116-
{
117-
$arr = [
118-
'en' => [
119-
'help' => [
120-
'yes' => 'yes',
121-
'no' => 'no',
122-
]
123-
],
124-
'sv' => [
125-
'help' => [
126-
'yes' => 'ja',
127-
'no' => 'nej',
128-
]
129-
]
130-
];
131-
132-
$root = $this->generateJsonLocaleFilesFrom($arr);
133-
$this->assertEquals(
134-
'export default {' . PHP_EOL
135-
. ' "en": {' . PHP_EOL
136-
. ' "help": {' . PHP_EOL
137-
. ' "yes": "yes",' . PHP_EOL
138-
. ' "no": "no"' . PHP_EOL
139-
. ' }' . PHP_EOL
140-
. ' },' . PHP_EOL
141-
. ' "sv": {' . PHP_EOL
142-
. ' "help": {' . PHP_EOL
143-
. ' "yes": "ja",' . PHP_EOL
144-
. ' "no": "nej"' . PHP_EOL
145-
. ' }' . PHP_EOL
146-
. ' }' . PHP_EOL
147-
. '}' . PHP_EOL,
148-
(new Generator([]))->generateFromPath($root));
149-
$this->destroyLocaleFilesFrom($arr, $root);
150-
}
151-
15289
function testBasicES6Format()
15390
{
15491
$format = 'es6';
@@ -607,55 +544,4 @@ function testPluralization()
607544

608545
$this->destroyLocaleFilesFrom($arr, $root);
609546
}
610-
611-
function testBothJsonAndPhpFiles()
612-
{
613-
$root = $this->getRootDir();
614-
$jsonArr = [
615-
'en' => [
616-
'help' => [
617-
'no' => 'no',
618-
]
619-
],
620-
'sv' => [
621-
'help' => [
622-
'no' => 'nej',
623-
]
624-
]
625-
];
626-
$this->generateJsonLocaleFilesFrom($jsonArr, $root);
627-
628-
$phpArr = [
629-
'en' => [
630-
'help' => [
631-
'yes' => 'yes',
632-
]
633-
],
634-
'sv' => [
635-
'help' => [
636-
'yes' => 'ja',
637-
]
638-
]
639-
];
640-
$this->generateLocaleFilesFrom($phpArr, $root);
641-
642-
$this->assertEquals(
643-
'export default {' . PHP_EOL
644-
. ' "en": {' . PHP_EOL
645-
. ' "help": {' . PHP_EOL
646-
. ' "no": "no",' . PHP_EOL
647-
. ' "yes": "yes"' . PHP_EOL
648-
. ' }' . PHP_EOL
649-
. ' },' . PHP_EOL
650-
. ' "sv": {' . PHP_EOL
651-
. ' "help": {' . PHP_EOL
652-
. ' "no": "nej",' . PHP_EOL
653-
. ' "yes": "ja"' . PHP_EOL
654-
. ' }' . PHP_EOL
655-
. ' }' . PHP_EOL
656-
. '}' . PHP_EOL,
657-
(new Generator([]))->generateFromPath($root));
658-
659-
$this->destroyLocaleFilesFrom($jsonArr, $root);
660-
}
661547
}

0 commit comments

Comments
 (0)