-
Notifications
You must be signed in to change notification settings - Fork 177
/
TranslationResourceFilesPass.php
63 lines (48 loc) · 1.97 KB
/
TranslationResourceFilesPass.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
namespace Bazinga\Bundle\JsTranslationBundle\DependencyInjection\Compiler;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Exception\OutOfBoundsException;
/**
* @author Hugo MONTEIRO <hugo.monteiro@gmail.com>
*
* @internal
*/
class TranslationResourceFilesPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container): void
{
if (!$container->has('translator.default')) {
return;
}
$translationFiles = $this->getTranslationFilesFromAddResourceCalls($container);
$translationFiles = array_merge_recursive($translationFiles, $this->getTranslationFiles($container));
$container->getDefinition('bazinga.jstranslation.translation_finder')->replaceArgument(0, $translationFiles);
}
private function getTranslationFilesFromAddResourceCalls(ContainerBuilder $container)
{
$translationFiles = array();
$methodCalls = $container->findDefinition('translator.default')->getMethodCalls();
foreach ($methodCalls as $methodCall) {
if ($methodCall[0] === 'addResource') {
$locale = $methodCall[1][2];
$filename = $methodCall[1][1];
if (!isset($translationFiles[$locale])) {
$translationFiles[$locale] = array();
}
$translationFiles[$locale][] = $filename;
}
}
return $translationFiles;
}
private function getTranslationFiles(ContainerBuilder $container)
{
$translationFiles = array();
$translator = $container->findDefinition('translator.default');
$translatorOptions = $translator->getArgument(4);
if (isset($translatorOptions['resource_files'])) {
$translationFiles = $translatorOptions['resource_files'];
}
return $translationFiles;
}
}