switchTranslationLocale($twig, $language); } if ($formatLocale !== null) { $previousFormatLocale = $this->switchFormatLocale($twig, $formatLocale); } // enable basic security measures if (!$twig->hasExtension(SandboxExtension::class)) { $sandbox = new SandboxExtension(new InvoicePolicy()); $sandbox->enableSandbox(); $twig->addExtension($sandbox); } $content = $twig->render($template, $options); if ($previousTranslation !== null) { $this->switchTranslationLocale($twig, $previousTranslation); } if ($previousFormatLocale !== null) { $this->switchFormatLocale($twig, $previousFormatLocale); } return $content; } protected function switchTranslationLocale(Environment $twig, string $language): string { /** @var TranslationExtension $extension */ $extension = $twig->getExtension(TranslationExtension::class); $translator = $extension->getTranslator(); if (!$translator instanceof LocaleAwareInterface) { throw new \Exception('Translator is expected to be of type LocaleAwareInterface'); } $previous = $translator->getLocale(); $translator->setLocale($language); return $previous; } protected function switchFormatLocale(Environment $twig, string $language): string { /** @var LocaleFormatExtensions $extension */ $extension = $twig->getExtension(LocaleFormatExtensions::class); $previous = $extension->getLocale(); $extension->setLocale($language); return $previous; } }