/** * Load locales from cache or build the cache * * @return void */ public static function loadLocales() { $lang = CAppUI::pref("LOCALE", "fr"); self::$lang = $lang; $shared_name = "locales-{$lang}"; $locales_prefixes = SHM::get("{$shared_name}-" . self::LOCALES_PREFIX); // Load from shared memory if possible if ($locales_prefixes) { return; } $mutex = new CMbFileMutex("locales-build"); $mutex->acquire(5); $locales_prefixes = SHM::get("{$shared_name}-" . self::LOCALES_PREFIX); // Load from shared memory if possible if ($locales_prefixes) { $mutex->release(); return; } $locales = array(); foreach (self::getLocaleFilesPaths($lang) as $_path) { include_once $_path; } $locales = CMbString::filterEmpty($locales); foreach ($locales as &$_locale) { $_locale = CMbString::unslash($_locale); } unset($_locale); // Load overwritten locales if the table exists $overwrite = new CTranslationOverwrite(); if ($overwrite->isInstalled()) { $locales = $overwrite->transformLocales($locales, $lang); } // Prefix = everything before "." and "-" $by_prefix = array(); $hashes = array(); foreach ($locales as $_key => $_value) { /** @var string $_prefix */ /** @var string $_rest */ /** @var string $_prefix_raw */ list($_prefix, $_rest, $_prefix_raw) = self::splitLocale($_key); if (!isset($by_prefix[$_prefix])) { $hashes[$_prefix] = $_prefix_raw; $by_prefix[$_prefix] = array(); } $by_prefix[$_prefix][$_rest] = $_value; } foreach ($by_prefix as $_prefix => $_locales) { self::$locales[$_prefix] = $_locales; self::$locales_loaded[$_prefix] = true; SHM::put("{$shared_name}-{$_prefix}", $_locales); } SHM::put("{$shared_name}-" . self::LOCALES_PREFIX, $hashes); $mutex->release(); }