diff --git a/lib/private/L10N/Factory.php b/lib/private/L10N/Factory.php index 11f572fc3b..b807f5cb63 100644 --- a/lib/private/L10N/Factory.php +++ b/lib/private/L10N/Factory.php @@ -37,6 +37,7 @@ namespace OC\L10N; +use Ds\Set; use OCP\IConfig; use OCP\IRequest; use OCP\IUser; @@ -63,6 +64,11 @@ class Factory implements IFactory { */ protected $availableLanguages = []; + /** + * @var Set + */ + protected $localeCache; + /** * @var array */ @@ -104,6 +110,7 @@ class Factory implements IFactory { $this->request = $request; $this->userSession = $userSession; $this->serverRoot = $serverRoot; + $this->localeCache = new Set(); } /** @@ -391,12 +398,14 @@ class Factory implements IFactory { return true; } - $locales = $this->findAvailableLocales(); - $userLocale = array_filter($locales, function ($value) use ($locale) { - return $locale === $value['code']; - }); + if ($this->localeCache->isEmpty()) { + $locales = $this->findAvailableLocales(); + foreach ($locales as $l) { + $this->localeCache->add($l['code']); + } + } - return !empty($userLocale); + return $this->localeCache->contains($locale); } /**