| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | <?php/* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */namespace Symfony\Component\Translation;use Symfony\Component\Routing\RequestContext;use Symfony\Contracts\Translation\LocaleAwareInterface;/** * @author Kevin Bond <kevinbond@gmail.com> */class LocaleSwitcher implements LocaleAwareInterface{    private string $defaultLocale;    /**     * @param LocaleAwareInterface[] $localeAwareServices     */    public function __construct(        private string $locale,        private iterable $localeAwareServices,        private ?RequestContext $requestContext = null,    ) {        $this->defaultLocale = $locale;    }    public function setLocale(string $locale): void    {        if (class_exists(\Locale::class)) {            \Locale::setDefault($locale);        }        $this->locale = $locale;        $this->requestContext?->setParameter('_locale', $locale);        foreach ($this->localeAwareServices as $service) {            $service->setLocale($locale);        }    }    public function getLocale(): string    {        return $this->locale;    }    /**     * Switch to a new locale, execute a callback, then switch back to the original.     *     * @template T     *     * @param callable(string $locale):T $callback     *     * @return T     */    public function runWithLocale(string $locale, callable $callback): mixed    {        $original = $this->getLocale();        $this->setLocale($locale);        try {            return $callback($locale);        } finally {            $this->setLocale($original);        }    }    public function reset(): void    {        $this->setLocale($this->defaultLocale);    }}
 |