Skip to content

Commit 34ec4ed

Browse files
committed
Refactor language key generation
1 parent 48809e9 commit 34ec4ed

File tree

9 files changed

+69
-27
lines changed

9 files changed

+69
-27
lines changed

src/Contracts/Collections/ResultObjectCollection.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
/**
1212
* @method self __construct(ResultObject[] $items = null)
13-
* @method self push(ResultObject[] ...$items)
13+
* @method self push(ResultObject $item)
1414
*/
1515
interface ResultObjectCollection extends Arrayable, Enumerable
1616
{
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
namespace Fidum\LaravelTranslationLinter\Contracts\Factories;
4+
5+
use Symfony\Component\Finder\SplFileInfo;
6+
7+
interface LanguageKeyFactory
8+
{
9+
public function getLanguageKey(SplFileInfo $file, string $locale, string $key): string;
10+
}

src/Contracts/Readers/LanguageFileReader.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66

77
interface LanguageFileReader
88
{
9-
public function execute(SplFileInfo $file): array;
9+
public function getTranslations(SplFileInfo $file): array;
1010
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
namespace Fidum\LaravelTranslationLinter\Factories;
4+
5+
use Fidum\LaravelTranslationLinter\Contracts\Factories\LanguageKeyFactory as LanguageKeyFactoryContract;
6+
use Fidum\LaravelTranslationLinter\Managers\LanguageFileReaderManager;
7+
use Symfony\Component\Finder\SplFileInfo;
8+
9+
class LanguageKeyFactory implements LanguageKeyFactoryContract
10+
{
11+
public function __construct(protected LanguageFileReaderManager $manager) {}
12+
13+
public function getLanguageKey(SplFileInfo $file, string $locale, string $key): string
14+
{
15+
$extension = $file->getExtension();
16+
17+
if ($this->manager->isEnabled($extension)) {
18+
$reader = $this->manager->driver($extension);
19+
20+
if ($reader instanceof LanguageKeyFactoryContract) {
21+
return $reader->getLanguageKey($file, $locale, $key);
22+
}
23+
}
24+
25+
return $key;
26+
}
27+
}

src/LaravelTranslationLinterServiceProvider.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99
use Fidum\LaravelTranslationLinter\Contracts\Collections\ResultObjectCollection as ResultObjectCollectionContract;
1010
use Fidum\LaravelTranslationLinter\Contracts\Collections\UnusedFieldCollection as UnusedFieldCollectionContract;
1111
use Fidum\LaravelTranslationLinter\Contracts\Collections\UnusedFilterCollection as UnusedFilterCollectionContract;
12+
use Fidum\LaravelTranslationLinter\Contracts\Factories\LanguageKeyFactory as LanguageKeyFactoryContract;
1213
use Fidum\LaravelTranslationLinter\Contracts\Finders\ApplicationFileFinder as ApplicationFileFinderContract;
1314
use Fidum\LaravelTranslationLinter\Contracts\Finders\LanguageFileFinder as LanguageFileFinderContract;
1415
use Fidum\LaravelTranslationLinter\Contracts\Finders\LanguageNamespaceFinder as LanguageNamespaceFinderContract;
1516
use Fidum\LaravelTranslationLinter\Contracts\Linters\UnusedTranslationLinter as UnusedTranslationLinterContract;
1617
use Fidum\LaravelTranslationLinter\Contracts\Parsers\ApplicationFileParser as ApplicationFileParserContract;
1718
use Fidum\LaravelTranslationLinter\Contracts\Readers\ApplicationFileReader as ApplicationFileReaderContract;
1819
use Fidum\LaravelTranslationLinter\Contracts\Readers\LanguageFileReader as LanguageFileReaderContract;
20+
use Fidum\LaravelTranslationLinter\Factories\LanguageKeyFactory;
1921
use Fidum\LaravelTranslationLinter\Finders\ApplicationFileFinder;
2022
use Fidum\LaravelTranslationLinter\Finders\LanguageFileFinder;
2123
use Fidum\LaravelTranslationLinter\Finders\LanguageNamespaceFinder;
@@ -68,6 +70,8 @@ public function registeringPackage()
6870
->needs('$driverConfig')
6971
->giveConfig('translation-linter.lang.readers');
7072

73+
$this->app->bind(LanguageKeyFactoryContract::class, LanguageKeyFactory::class);
74+
7175
$this->app->bind(LanguageNamespaceFinderContract::class, LanguageNamespaceFinder::class);
7276

7377
$this->app->bind(ResultObjectCollectionContract::class, ResultObjectCollection::class);
@@ -96,6 +100,7 @@ public function provides()
96100
LanguageFileFinderContract::class,
97101
LanguageFileReaderContract::class,
98102
LanguageFileReaderManager::class,
103+
LanguageKeyFactoryContract::class,
99104
LanguageNamespaceFinderContract::class,
100105
ResultObjectCollectionContract::class,
101106
UnusedFieldCollectionContract::class,

src/Linters/UnusedTranslationLinter.php

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
namespace Fidum\LaravelTranslationLinter\Linters;
44

55
use Fidum\LaravelTranslationLinter\Contracts\Collections\ResultObjectCollection;
6+
use Fidum\LaravelTranslationLinter\Contracts\Factories\LanguageKeyFactory;
67
use Fidum\LaravelTranslationLinter\Contracts\Finders\LanguageFileFinder;
8+
use Fidum\LaravelTranslationLinter\Contracts\Finders\LanguageNamespaceFinder;
79
use Fidum\LaravelTranslationLinter\Contracts\Linters\UnusedTranslationLinter as UnusedTranslationLinterContract;
10+
use Fidum\LaravelTranslationLinter\Contracts\Readers\ApplicationFileReader;
11+
use Fidum\LaravelTranslationLinter\Contracts\Readers\LanguageFileReader;
812
use Fidum\LaravelTranslationLinter\Data\ResultObject;
9-
use Fidum\LaravelTranslationLinter\Finders\LanguageNamespaceFinder;
10-
use Fidum\LaravelTranslationLinter\Readers\ApplicationFileReader;
11-
use Fidum\LaravelTranslationLinter\Readers\LanguageFileReader;
1213
use Illuminate\Support\Arr;
1314
use Illuminate\Support\Str;
1415
use Illuminate\Support\Stringable;
@@ -20,6 +21,7 @@ public function __construct(
2021
protected ApplicationFileReader $used,
2122
protected LanguageFileFinder $files,
2223
protected LanguageFileReader $translations,
24+
protected LanguageKeyFactory $factory,
2325
protected LanguageNamespaceFinder $namespaces,
2426
protected ResultObjectCollection $results,
2527
protected array $locales,
@@ -37,10 +39,10 @@ public function execute(): ResultObjectCollection
3739

3840
/** @var SplFileInfo $file */
3941
foreach ($files as $file) {
40-
$translations = $this->translations->execute($file);
42+
$translations = $this->translations->getTranslations($file);
4143

4244
foreach ($translations as $field => $children) {
43-
$group = $this->getLanguageKey($file, $locale, $field);
45+
$group = $this->factory->getLanguageKey($file, $locale, $field);
4446

4547
foreach (Arr::dot(Arr::wrap($children)) as $key => $value) {
4648
$groupedKey = Str::of($group)
@@ -70,19 +72,4 @@ public function execute(): ResultObjectCollection
7072

7173
return $this->results;
7274
}
73-
74-
protected function getLanguageKey(SplFileInfo $file, string $language, string $key): string
75-
{
76-
if ($file->getExtension() === 'json') {
77-
return $key;
78-
}
79-
80-
return Str::of($file->getPath())
81-
->finish(DIRECTORY_SEPARATOR)
82-
->after(DIRECTORY_SEPARATOR.$language.DIRECTORY_SEPARATOR)
83-
->append($file->getFilenameWithoutExtension())
84-
->append('.')
85-
->append($key)
86-
->toString();
87-
}
8875
}

src/Readers/JsonFileReader.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
class JsonFileReader implements LanguageFileReaderContract
1010
{
11-
public function execute(SplFileInfo $file): array
11+
public function getTranslations(SplFileInfo $file): array
1212
{
1313
$translations = json_decode($file->getContents(), true);
1414

src/Readers/LanguageFileReader.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ class LanguageFileReader implements LanguageFileReaderContract
1111
{
1212
public function __construct(protected LanguageFileReaderManager $manager) {}
1313

14-
public function execute(SplFileInfo $file): array
14+
public function getTranslations(SplFileInfo $file): array
1515
{
1616
$extension = $file->getExtension();
1717
$translations = [];
1818

1919
if ($this->manager->isEnabled($extension)) {
20-
$translations = $this->manager->driver($extension)->execute($file);
20+
$translations = $this->manager->driver($extension)->getTranslations($file);
2121

2222
if (! $translations) {
2323
throw new InvalidArgumentException("Unable to extract any data from {$file->getPathname()}!");

src/Readers/PhpFileReader.php

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,26 @@
22

33
namespace Fidum\LaravelTranslationLinter\Readers;
44

5+
use Fidum\LaravelTranslationLinter\Contracts\Factories\LanguageKeyFactory as LanguageKeyFactoryContract;
56
use Fidum\LaravelTranslationLinter\Contracts\Readers\LanguageFileReader as LanguageFileReaderContract;
7+
use Illuminate\Support\Str;
68
use InvalidArgumentException;
79
use Symfony\Component\Finder\SplFileInfo;
810

9-
class PhpFileReader implements LanguageFileReaderContract
11+
class PhpFileReader implements LanguageFileReaderContract, LanguageKeyFactoryContract
1012
{
11-
public function execute(SplFileInfo $file): array
13+
public function getLanguageKey(SplFileInfo $file, string $locale, string $key): string
14+
{
15+
return Str::of($file->getPath())
16+
->finish(DIRECTORY_SEPARATOR)
17+
->after(DIRECTORY_SEPARATOR.$locale.DIRECTORY_SEPARATOR)
18+
->append($file->getFilenameWithoutExtension())
19+
->append('.')
20+
->append($key)
21+
->toString();
22+
}
23+
24+
public function getTranslations(SplFileInfo $file): array
1225
{
1326
$translations = include $file->getPathname();
1427

0 commit comments

Comments
 (0)