editableFile = new EditableFile($this->filename); } /** * Write the modified contents back to disk. * @return boolean True indicates success */ function write() { return $this->editableFile->write(); } /** * Get the file contents. * @return string */ function getContents() { return $this->editableFile->getContents(); } /** * Set the file contents. * @param $contents string New file contents. */ function setContents($contents) { $this->editableFile->setContents($contents); } /** * Update a locale key with a new value. * @param $key string Locale key. * @param $value string New value. * @return boolean True iff the change was successful. */ function update($key, $value) { $matches = null; $quotedKey = PKPString::regexp_quote($key); preg_match( "//", $this->getContents(), $matches, PREG_OFFSET_CAPTURE ); if (!isset($matches[0])) return false; $offset = $matches[0][1]; $closeOffset = strpos($this->getContents(), '', $offset); if ($closeOffset === false) return false; $newContents = substr($this->getContents(), 0, $offset); $newContents .= "" . $this->editableFile->xmlEscape($value); $newContents .= substr($this->getContents(), $closeOffset); $this->setContents($newContents); return true; } /** * Delete a locale key from the file. * @param $key string Locale key * @return boolean True iff the deletion was successful. */ function delete($key) { $matches = null; $quotedKey = PKPString::regexp_quote($key); preg_match( "/[ \t]*/", $this->getContents(), $matches, PREG_OFFSET_CAPTURE ); if (!isset($matches[0])) return false; $offset = $matches[0][1]; preg_match("/<\/message>[\W]*[\r]?\n/", $this->getContents(), $matches, PREG_OFFSET_CAPTURE, $offset); if (!isset($matches[0])) return false; $closeOffset = $matches[0][1] + strlen($matches[0][0]); $newContents = substr($this->getContents(), 0, $offset); $newContents .= substr($this->getContents(), $closeOffset); $this->setContents($newContents); return true; } /** * Insert a new locale key and value. * @param $key string Locale key * @param $value string Translated value for this locale * @return boolean True iff the addition was successful. */ function insert($key, $value) { $offset = strrpos($this->getContents(), ''); if ($offset === false) return false; $newContents = substr($this->getContents(), 0, $offset); $newContents .= "\t" . $this->editableFile->xmlEscape($value) . "\n"; $newContents .= substr($this->getContents(), $offset); $this->setContents($newContents); return true; } } ?>