<?php declare(strict_types=1);namespace Shopware\Core\System\Language;use Shopware\Core\Framework\Log\Package;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Contracts\Cache\CacheInterface;/** * @deprecated tag:v6.5.0 - reason:becomes-internal - EventSubscribers will become internal in v6.5.0 * * @phpstan-import-type LanguageData from LanguageLoaderInterface */#[Package('core')]class CachedLanguageLoader implements LanguageLoaderInterface, EventSubscriberInterface{ private const CACHE_KEY = 'shopware.languages'; private CacheInterface $cache; private LanguageLoaderInterface $loader; /** * @internal */ public function __construct(LanguageLoaderInterface $loader, CacheInterface $cache) { $this->cache = $cache; $this->loader = $loader; } /** * @return array<string, string> */ public static function getSubscribedEvents(): array { return [ LanguageEvents::LANGUAGE_DELETED_EVENT => 'invalidateCache', LanguageEvents::LANGUAGE_WRITTEN_EVENT => 'invalidateCache', ]; } /** * @return LanguageData */ public function loadLanguages(): array { return $this->cache->get(self::CACHE_KEY, function () { return $this->loader->loadLanguages(); }); } public function invalidateCache(): void { $this->cache->delete(self::CACHE_KEY); }}