From 6e377a9daf57b650d32ea34681d23bb5d67db01d Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Sat, 31 Oct 2020 15:25:19 +0100 Subject: [PATCH] Only parse the locales ones Before we'd go over the entire list for each translation (so each app) we'd use translation for. This means we'd also go over thise locale list (currently containing 750 entries) * apps so often this added up to ~20k calls. now we just dump the locales in a set once and then check if the entry is there. Signed-off-by: Roeland Jago Douma --- lib/private/L10N/Factory.php | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) 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); } /**