/** * Delete a translation by key. * * @param string $lang Language tag e.g. en-GB * @param string $key The key to delete * * @throws Exception * @return boolean */ public function deleteTranslation($lang, $key) { $fileName = $this->getFileName($lang, $this->_scope, $this->project); $origFile = $this->parseFile($fileName); $resultFile = array(); $pos = 1; $found = false; foreach ($origFile as $line) { switch ($line->key) { case '#': case '-': $resultFile[] = $line->value; $pos++; break; default: if ($line->key == $key) { //--Found it $found = true; } else { $resultFile[] = $line->key . '=' . $line->value; } break; } //switch } //foreach if (!$found) { //-- Item to delete has not been found ! throw new Exception(sprintf(jgettext('Key not found: %s'), $key)); } //-- Save a version ? if (JFactory::getApplication()->input->getInt('save_version', '1')) { if (!EcrFile::saveVersion($fileName)) { throw new Exception(jgettext('Can not save version')); } } $contents = implode("\n", $resultFile); if (!JFile::write($fileName, $contents)) { throw new Exception(sprintf(jgettext('Unable to write file %s'), $fileName)); } return true; }
/** * Convert a language file. * * @return void */ public function do_convert() { $input = JFactory::getApplication()->input; $input->set('task', 'convert'); $options = $input->get('options', array()); $options = JArrayHelper::toObject($options, 'JObject'); //-- Get the project try { $project = EcrProjectHelper::getProject(); } catch (Exception $e) { EcrHtml::message($e); parent::display(); return; } //try $languages = JFactory::getLanguage()->getKnownLanguages(); $converter = new EcrLanguageConverter($options, $project); $selLanguage = $input->get('sel_language'); $selectedFile = $input->get('selected_file'); $fileErrors = $input->get('file_errors', array()); $scope = $input->get('scope'); $selectedErrors = $input->get('selected_errors', array()); /* * Clean language files */ $paths = (array) $project->getLanguagePaths(); foreach ($languages as $tag => $language) { foreach ($paths[$scope] as $path) { $fileName = $path . DS . 'language' . DS . $tag . DS . $tag . '.' . $project->getLanguageFileName($scope); if (!JFile::exists($fileName)) { continue; } $fileContents = JFile::read($fileName); $lines = explode("\n", $fileContents); $newLines = $converter->cleanLines($lines); $newLines = $converter->cleanLangFileErrors($newLines, array_keys($selectedErrors)); $newFileContents = implode("\n", $newLines); EcrFile::saveVersion($fileName); JFile::write($fileName, $newFileContents); } //foreach } //foreach if ($selectedFile && count($selectedErrors)) { /* * Clean PHP file */ $origCode = JFile::read(JPATH_ROOT . DS . $selectedFile); $errors = $converter->findPHPErrors($origCode, array_keys($selectedErrors)); $newCode = $origCode; foreach ($errors as $errorKey => $errorJText) { $newJText = str_replace($errorKey, $converter->cleanKey($errorKey), $errorJText); $newCode = str_replace($errorJText, $newJText, $newCode); } //foreach if ($newCode != $origCode) { EcrFile::saveVersion(JPATH_ROOT . DS . $selectedFile); JFile::write(JPATH_ROOT . DS . $selectedFile, $newCode); } } parent::display(); }