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 <roeland@famdouma.nl>
This commit is contained in:
parent
5396e98d2d
commit
6e377a9daf
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue