efabrica-team /
translatte
| 1 | <?php |
||
| 2 | |||
| 3 | declare(strict_types=1); |
||
| 4 | |||
| 5 | namespace Efabrica\Translatte\Bridge\Nette; |
||
| 6 | |||
| 7 | use Efabrica\Translatte\Latte\TranslateMacros; |
||
| 8 | use Efabrica\Translatte\Resolver\ChainResolver; |
||
| 9 | use Efabrica\Translatte\Resource\NeonDirectoryResource; |
||
| 10 | use Efabrica\Translatte\Translator; |
||
| 11 | use Latte\Engine; |
||
| 12 | use Nette\Application\UI\ITemplateFactory; |
||
| 13 | use Nette\DI\CompilerExtension; |
||
| 14 | use Nette\DI\Definitions\FactoryDefinition; |
||
| 15 | use Nette\DI\Definitions\Statement; |
||
| 16 | use Nette\DI\DynamicParameter; |
||
| 17 | use Nette\DI\ServiceDefinition; |
||
| 18 | use Nette\PhpGenerator\PhpLiteral; |
||
| 19 | use Nette\Schema\Expect; |
||
| 20 | use Nette\Schema\Schema; |
||
| 21 | |||
| 22 | class TranslationExtension extends CompilerExtension |
||
| 23 | { |
||
| 24 | public function getConfigSchema(): Schema |
||
| 25 | { |
||
| 26 | return Expect::structure([ |
||
| 27 | 'default' => Expect::string()->required(), |
||
| 28 | 'fallback' => Expect::arrayOf('string'), |
||
| 29 | 'dirs' => Expect::arrayOf('string'), |
||
| 30 | 'cache' => Expect::anyOf(Expect::type(Statement::class), Expect::type(DynamicParameter::class)), |
||
| 31 | 'resolvers' => Expect::arrayOf(Statement::class), |
||
| 32 | 'resources' => Expect::arrayOf(Statement::class) |
||
| 33 | ]); |
||
| 34 | } |
||
| 35 | |||
| 36 | public function loadConfiguration(): void |
||
| 37 | { |
||
| 38 | $builder = $this->getContainerBuilder(); |
||
| 39 | |||
| 40 | // Prepare params for translator |
||
| 41 | $params = ['defaultLang' => $this->config->default]; |
||
| 42 | if (!empty($this->config->resolvers)) { |
||
| 43 | $params['resolver'] = new Statement(ChainResolver::class, [$this->config->resolvers]); |
||
| 44 | } |
||
| 45 | if ($this->config->cache) { |
||
| 46 | $params['cache'] = $this->config->cache; |
||
| 47 | } |
||
| 48 | |||
| 49 | $translator = $builder->addDefinition($this->prefix('translator')) |
||
| 50 | ->setFactory(Translator::class, $params); |
||
| 51 | |||
| 52 | // Configure translator |
||
| 53 | foreach ($this->config->resources as $resource) { |
||
| 54 | $translator->addSetup('addResource', [$resource]); |
||
| 55 | } |
||
| 56 | if (!empty($this->config->fallback)) { |
||
| 57 | $translator->addSetup('setFallbackLanguages', [$this->config->fallback]); |
||
| 58 | } |
||
| 59 | if (!empty($this->config->dirs)) { |
||
| 60 | $translator->addSetup('addResource', [new Statement(NeonDirectoryResource::class, [$this->config->dirs])]); |
||
| 61 | } |
||
| 62 | } |
||
| 63 | |||
| 64 | public function beforeCompile(): void |
||
| 65 | { |
||
| 66 | $builder = $this->getContainerBuilder(); |
||
| 67 | |||
| 68 | /** @var ServiceDefinition $translator */ |
||
| 69 | $translator = $builder->getDefinition($this->prefix('translator')); |
||
| 70 | |||
| 71 | $templateFactoryName = $builder->getByType(ITemplateFactory::class); |
||
| 72 | if ($templateFactoryName !== null) { |
||
| 73 | /** @var ServiceDefinition $templateFactory */ |
||
| 74 | $templateFactory = $builder->getDefinition($templateFactoryName); |
||
| 75 | $templateFactory->addSetup(' |
||
|
0 ignored issues
–
show
|
|||
| 76 | $service->onCreate[] = function (Nette\\Bridges\\ApplicationLatte\\Template $template): void { |
||
| 77 | $template->setTranslator(?); |
||
| 78 | };', [$translator]); |
||
| 79 | } |
||
| 80 | |||
| 81 | if ($builder->hasDefinition('latte.latteFactory')) { |
||
| 82 | /** @var FactoryDefinition $latteFactory */ |
||
| 83 | $latteFactory = $builder->getDefinition('latte.latteFactory'); |
||
| 84 | $latteFactory->getResultDefinition() |
||
| 85 | ->addSetup('addProvider', ['translator', $builder->getDefinition($this->prefix('translator'))]); |
||
| 86 | |||
| 87 | if (version_compare(Engine::VERSION, '3', '<')) { |
||
| 88 | $latteFactory->getResultDefinition()->addSetup('?->onCompile[] = function($engine) { ?::install($engine->getCompiler()); }', ['@self', new PhpLiteral(TranslateMacros::class)]); |
||
| 89 | } |
||
| 90 | } |
||
| 91 | } |
||
| 92 | |||
| 93 | } |
||
| 94 |
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.
This is most likely a typographical error or the method has been renamed.