diff options
-rw-r--r-- | lib/private/L10N/Factory.php | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/lib/private/L10N/Factory.php b/lib/private/L10N/Factory.php index 11f572fc3b0..b807f5cb63f 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; @@ -64,6 +65,11 @@ class Factory implements IFactory { protected $availableLanguages = []; /** + * @var Set + */ + protected $localeCache; + + /** * @var array */ protected $availableLocales = []; @@ -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); } /** |