systemHelper = new SystemHelper(); } protected function getSystemHelper() { return $this->systemHelper; } public function get($language) { if (isset($this->data[$language])) { return $this->data[$language]; } if (empty($language)) { $language = $this->defaultLanguage; } $langFileName = 'install/core/i18n/'.$language.'/install.json'; if (!file_exists($langFileName)) { $langFileName = 'install/core/i18n/'.$this->defaultLanguage.'/install.json'; } $i18n = $this->getLangData($langFileName); if ($language != $this->defaultLanguage) { $i18n = $this->mergeWithDefaults($i18n); } $this->afterRetrieve($i18n); $this->data[$language] = $i18n; return $this->data[$language]; } /** * Merge current language with default one * * @param array $data * @return array */ protected function mergeWithDefaults($data) { $defaultLangFile = 'install/core/i18n/'.$this->defaultLanguage.'/install.json'; $defaultData = $this->getLangData($defaultLangFile); foreach ($data as $categoryName => &$labels) { foreach ($defaultData[$categoryName] as $defaultLabelName => $defaultLabel) { if (!isset($labels[$defaultLabelName])) { $labels[$defaultLabelName] = $defaultLabel; } } } $data = array_merge($defaultData, $data); return $data; } protected function getLangData($filePath) { $data = file_get_contents($filePath); $data = json_decode($data, true); return $data; } /** * After retrieve actions * * @param array $i18n * @return array $i18n */ protected function afterRetrieve(array &$i18n) { /** Get rewrite rules */ $serverType = $this->getSystemHelper()->getServerType(); $serverOs = $this->getSystemHelper()->getOs(); $rewriteRules = $this->getSystemHelper()->getRewriteRules(); if (isset($i18n['options']['modRewriteInstruction'][$serverType][$serverOs])) { $modRewriteInstruction = $i18n['options']['modRewriteInstruction'][$serverType][$serverOs]; preg_match_all('/\{(.*?)\}/', $modRewriteInstruction, $match); if (isset($match[1])) { foreach ($match[1] as $varName) { if (isset($rewriteRules[$varName])) { $modRewriteInstruction = str_replace('{'.$varName.'}', $rewriteRules[$varName], $modRewriteInstruction); } } } $i18n['options']['modRewriteInstruction'][$serverType][$serverOs] = $modRewriteInstruction; } } }