Skip to content

Commit 9a1e139

Browse files
authored
Improve performance by reduce loadings of Translator (coduo#124)
1 parent 3578469 commit 9a1e139

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

src/Coduo/PHPHumanizer/Translator/Builder.php

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,30 @@
1616

1717
final class Builder
1818
{
19+
/**
20+
* @var array<string, Translator>
21+
*/
22+
private static array $translators = [];
23+
1924
public static function build(string $locale) : Translator
2025
{
21-
$translator = new Translator($locale);
22-
$translator->addLoader('yml', new YamlFileLoader());
26+
if (!isset(self::$translators[$locale])) {
27+
$translator = new Translator($locale);
28+
$translator->addLoader('yml', new YamlFileLoader());
29+
30+
$iterator = new \FilesystemIterator(__DIR__ . '/../Resources/translations');
31+
$filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.yml$/');
2332

24-
$iterator = new \FilesystemIterator(__DIR__ . '/../Resources/translations');
25-
$filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.yml$/');
33+
foreach ($filter as $file) {
34+
/* @var $file \SplFileInfo */
35+
$resourceName = $file->getBasename('.yml');
36+
[$fileDomain, $fileLocale] = \explode('.', $resourceName);
37+
$translator->addResource('yml', $file->getPathname(), $fileLocale, $fileDomain);
38+
}
2639

27-
foreach ($filter as $file) {
28-
/* @var $file \SplFileInfo */
29-
$resourceName = $file->getBasename('.yml');
30-
[$fileDomain, $fileLocale] = \explode('.', $resourceName);
31-
$translator->addResource('yml', $file->getPathname(), $fileLocale, $fileDomain);
40+
self::$translators[$locale] = $translator;
3241
}
3342

34-
return $translator;
43+
return self::$translators[$locale];
3544
}
3645
}

0 commit comments

Comments
 (0)