diff options
Diffstat (limited to 'inc')
98 files changed, 1920 insertions, 535 deletions
diff --git a/inc/HTTPClient.php b/inc/HTTPClient.php index 53f3c9a78..f8b836753 100644 --- a/inc/HTTPClient.php +++ b/inc/HTTPClient.php @@ -552,7 +552,7 @@ class HTTPClient { $request = "CONNECT {$requestinfo['host']}:{$requestinfo['port']} HTTP/1.0".HTTP_NL; $request .= "Host: {$requestinfo['host']}".HTTP_NL; if($this->proxy_user) { - $request .= 'Proxy-Authorization Basic '.base64_encode($this->proxy_user.':'.$this->proxy_pass).HTTP_NL; + $request .= 'Proxy-Authorization: Basic '.base64_encode($this->proxy_user.':'.$this->proxy_pass).HTTP_NL; } $request .= HTTP_NL; diff --git a/inc/Input.class.php b/inc/Input.class.php index de8bf5b97..e7eef1c29 100644 --- a/inc/Input.class.php +++ b/inc/Input.class.php @@ -144,6 +144,26 @@ class Input { } /** + * Access a request parameter and make sure it is has a valid value + * + * Please note that comparisons to the valid values are not done typesafe (request vars + * are always strings) however the function will return the correct type from the $valids + * array when an match was found. + * + * @param string $name Parameter name + * @param array $valids Array of valid values + * @param mixed $default Default to return if parameter isn't set or not valid + * @return null|mixed + */ + public function valid($name, $valids, $default = null) { + if(!isset($this->access[$name])) return $default; + if(is_array($this->access[$name])) return $default; // we don't allow arrays + $found = array_search($this->access[$name], $valids); + if($found !== false) return $valids[$found]; // return the valid value for type safety + return $default; + } + + /** * Access a request parameter as bool * * Note: $nonempty is here for interface consistency and makes not much sense for booleans diff --git a/inc/RemoteAPICore.php b/inc/RemoteAPICore.php index a26c2d0de..ffa03ee93 100644 --- a/inc/RemoteAPICore.php +++ b/inc/RemoteAPICore.php @@ -378,7 +378,8 @@ class RemoteAPICore { throw new RemoteException('The requested page does not exist', 121); } - $info = getRevisionInfo($id, $time, 1024); + $pagelog = new PageChangeLog($id, 1024); + $info = $pagelog->getRevisionInfo($time); $data = array( 'name' => $id, @@ -650,11 +651,12 @@ class RemoteAPICore { throw new RemoteException('Empty page ID', 131); } - $revisions = getRevisions($id, $first, $conf['recent']+1); + $pagelog = new PageChangeLog($id); + $revisions = $pagelog->getRevisions($first, $conf['recent']+1); if(count($revisions)==0 && $first!=0) { $first=0; - $revisions = getRevisions($id, $first, $conf['recent']+1); + $revisions = $pagelog->getRevisions($first, $conf['recent']+1); } if(count($revisions)>0 && $first==0) { @@ -676,7 +678,8 @@ class RemoteAPICore { // case this can lead to less pages being returned than // specified via $conf['recent'] if($time){ - $info = getRevisionInfo($id, $time, 1024); + $pagelog->setChunkSize(1024); + $info = $pagelog->getRevisionInfo($time); if(!empty($info)) { $data['user'] = $info['user']; $data['ip'] = $info['ip']; diff --git a/inc/changelog.php b/inc/changelog.php index cd46b1ec0..de06c9683 100644 --- a/inc/changelog.php +++ b/inc/changelog.php @@ -338,95 +338,684 @@ function _handleRecent($line,$ns,$flags,&$seen){ } /** - * Get the changelog information for a specific page id - * and revision (timestamp). Adjacent changelog lines - * are optimistically parsed and cached to speed up - * consecutive calls to getRevisionInfo. For large - * changelog files, only the chunk containing the - * requested changelog line is read. - * - * @author Ben Coburn <btcoburn@silicodon.net> - * @author Kate Arzamastseva <pshns@ukr.net> + * Class ChangeLog + * methods for handling of changelog of pages or media files */ -function getRevisionInfo($id, $rev, $chunk_size=8192, $media=false) { - global $cache_revinfo; - $cache =& $cache_revinfo; - if (!isset($cache[$id])) { $cache[$id] = array(); } - $rev = max($rev, 0); - - // check if it's already in the memory cache - if (isset($cache[$id]) && isset($cache[$id][$rev])) { - return $cache[$id][$rev]; +abstract class ChangeLog { + + /** @var string */ + protected $id; + /** @var int */ + protected $chunk_size; + /** @var array */ + protected $cache; + + /** + * Constructor + * + * @param string $id page id + * @param int $chunk_size maximum block size read from file + */ + public function __construct($id, $chunk_size = 8192) { + global $cache_revinfo; + + $this->cache =& $cache_revinfo; + if(!isset($this->cache[$id])) { + $this->cache[$id] = array(); + } + + $this->id = $id; + $this->setChunkSize($chunk_size); + } - if ($media) { - $file = mediaMetaFN($id, '.changes'); - } else { - $file = metaFN($id, '.changes'); + /** + * Set chunk size for file reading + * Chunk size zero let read whole file at once + * + * @param int $chunk_size maximum block size read from file + */ + public function setChunkSize($chunk_size) { + if(!is_numeric($chunk_size)) $chunk_size = 0; + + $this->chunk_size = (int) max($chunk_size, 0); } - if (!@file_exists($file)) { return false; } - if (filesize($file)<$chunk_size || $chunk_size==0) { - // read whole file - $lines = file($file); - if ($lines===false) { return false; } - } else { - // read by chunk - $fp = fopen($file, 'rb'); // "file pointer" - if ($fp===false) { return false; } - $head = 0; - fseek($fp, 0, SEEK_END); - $tail = ftell($fp); - $finger = 0; - $finger_rev = 0; - - // find chunk - while ($tail-$head>$chunk_size) { - $finger = $head+floor(($tail-$head)/2.0); - fseek($fp, $finger); - fgets($fp); // slip the finger forward to a new line - $finger = ftell($fp); - $tmp = fgets($fp); // then read at that location - $tmp = parseChangelogLine($tmp); - $finger_rev = $tmp['date']; - if ($finger==$head || $finger==$tail) { break; } - if ($finger_rev>$rev) { - $tail = $finger; - } else { - $head = $finger; + + /** + * Returns path to changelog + * + * @return string path to file + */ + abstract protected function getChangelogFilename(); + + /** + * Returns path to current page/media + * + * @return string path to file + */ + abstract protected function getFilename(); + + /** + * Get the changelog information for a specific page id and revision (timestamp) + * + * Adjacent changelog lines are optimistically parsed and cached to speed up + * consecutive calls to getRevisionInfo. For large changelog files, only the chunk + * containing the requested changelog line is read. + * + * @param int $rev revision timestamp + * @return bool|array false or array with entries: + * - date: unix timestamp + * - ip: IPv4 address (127.0.0.1) + * - type: log line type + * - id: page id + * - user: user name + * - sum: edit summary (or action reason) + * - extra: extra data (varies by line type) + * + * @author Ben Coburn <btcoburn@silicodon.net> + * @author Kate Arzamastseva <pshns@ukr.net> + */ + public function getRevisionInfo($rev) { + $rev = max($rev, 0); + + // check if it's already in the memory cache + if(isset($this->cache[$this->id]) && isset($this->cache[$this->id][$rev])) { + return $this->cache[$this->id][$rev]; + } + + //read lines from changelog + list($fp, $lines) = $this->readloglines($rev); + if($fp) { + fclose($fp); + } + if(empty($lines)) return false; + + // parse and cache changelog lines + foreach($lines as $value) { + $tmp = parseChangelogLine($value); + if($tmp !== false) { + $this->cache[$this->id][$tmp['date']] = $tmp; + } + } + if(!isset($this->cache[$this->id][$rev])) { + return false; + } + return $this->cache[$this->id][$rev]; + } + + /** + * Return a list of page revisions numbers + * + * Does not guarantee that the revision exists in the attic, + * only that a line with the date exists in the changelog. + * By default the current revision is skipped. + * + * The current revision is automatically skipped when the page exists. + * See $INFO['meta']['last_change'] for the current revision. + * A negative $first let read the current revision too. + * + * For efficiency, the log lines are parsed and cached for later + * calls to getRevisionInfo. Large changelog files are read + * backwards in chunks until the requested number of changelog + * lines are recieved. + * + * @param int $first skip the first n changelog lines + * @param int $num number of revisions to return + * @return array with the revision timestamps + * + * @author Ben Coburn <btcoburn@silicodon.net> + * @author Kate Arzamastseva <pshns@ukr.net> + */ + public function getRevisions($first, $num) { + $revs = array(); + $lines = array(); + $count = 0; + + $num = max($num, 0); + if($num == 0) { + return $revs; + } + + if($first < 0) { + $first = 0; + } else if(@file_exists($this->getFilename())) { + // skip current revision if the page exists + $first = max($first + 1, 0); + } + + $file = $this->getChangelogFilename(); + + if(!@file_exists($file)) { + return $revs; + } + if(filesize($file) < $this->chunk_size || $this->chunk_size == 0) { + // read whole file + $lines = file($file); + if($lines === false) { + return $revs; + } + } else { + // read chunks backwards + $fp = fopen($file, 'rb'); // "file pointer" + if($fp === false) { + return $revs; + } + fseek($fp, 0, SEEK_END); + $tail = ftell($fp); + + // chunk backwards + $finger = max($tail - $this->chunk_size, 0); + while($count < $num + $first) { + $nl = $this->getNewlinepointer($fp, $finger); + + // was the chunk big enough? if not, take another bite + if($nl > 0 && $tail <= $nl) { + $finger = max($finger - $this->chunk_size, 0); + continue; + } else { + $finger = $nl; + } + + // read chunk + $chunk = ''; + $read_size = max($tail - $finger, 0); // found chunk size + $got = 0; + while($got < $read_size && !feof($fp)) { + $tmp = @fread($fp, max(min($this->chunk_size, $read_size - $got), 0)); + if($tmp === false) { + break; + } //error state + $got += strlen($tmp); + $chunk .= $tmp; + } + $tmp = explode("\n", $chunk); + array_pop($tmp); // remove trailing newline + + // combine with previous chunk + $count += count($tmp); + $lines = array_merge($tmp, $lines); + + // next chunk + if($finger == 0) { + break; + } // already read all the lines + else { + $tail = $finger; + $finger = max($tail - $this->chunk_size, 0); + } } + fclose($fp); + } + + // skip parsing extra lines + $num = max(min(count($lines) - $first, $num), 0); + if ($first > 0 && $num > 0) { $lines = array_slice($lines, max(count($lines) - $first - $num, 0), $num); } + else if($first > 0 && $num == 0) { $lines = array_slice($lines, 0, max(count($lines) - $first, 0)); } + else if($first == 0 && $num > 0) { $lines = array_slice($lines, max(count($lines) - $num, 0)); } + + // handle lines in reverse order + for($i = count($lines) - 1; $i >= 0; $i--) { + $tmp = parseChangelogLine($lines[$i]); + if($tmp !== false) { + $this->cache[$this->id][$tmp['date']] = $tmp; + $revs[] = $tmp['date']; + } + } + + return $revs; + } + + /** + * Get the nth revision left or right handside for a specific page id and revision (timestamp) + * + * For large changelog files, only the chunk containing the + * reference revision $rev is read and sometimes a next chunck. + * + * Adjacent changelog lines are optimistically parsed and cached to speed up + * consecutive calls to getRevisionInfo. + * + * @param int $rev revision timestamp used as startdate (doesn't need to be revisionnumber) + * @param int $direction give position of returned revision with respect to $rev; positive=next, negative=prev + * @return bool|int + * timestamp of the requested revision + * otherwise false + */ + public function getRelativeRevision($rev, $direction) { + $rev = max($rev, 0); + $direction = (int) $direction; + + //no direction given or last rev, so no follow-up + if(!$direction || ($direction > 0 && $this->isCurrentRevision($rev))) { + return false; } - if ($tail-$head<1) { - // cound not find chunk, assume requested rev is missing + //get lines from changelog + list($fp, $lines, $head, $tail, $eof) = $this->readloglines($rev); + if(empty($lines)) return false; + + // look for revisions later/earlier then $rev, when founded count till the wanted revision is reached + // also parse and cache changelog lines for getRevisionInfo(). + $revcounter = 0; + $relativerev = false; + $checkotherchunck = true; //always runs once + while(!$relativerev && $checkotherchunck) { + $tmp = array(); + //parse in normal or reverse order + $count = count($lines); + if($direction > 0) { + $start = 0; + $step = 1; + } else { + $start = $count - 1; + $step = -1; + } + for($i = $start; $i >= 0 && $i < $count; $i = $i + $step) { + $tmp = parseChangelogLine($lines[$i]); + if($tmp !== false) { + $this->cache[$this->id][$tmp['date']] = $tmp; + //look for revs older/earlier then reference $rev and select $direction-th one + if(($direction > 0 && $tmp['date'] > $rev) || ($direction < 0 && $tmp['date'] < $rev)) { + $revcounter++; + if($revcounter == abs($direction)) { + $relativerev = $tmp['date']; + } + } + } + } + + //true when $rev is found, but not the wanted follow-up. + $checkotherchunck = $fp + && ($tmp['date'] == $rev || ($revcounter > 0 && !$relativerev)) + && !(($tail == $eof && $direction > 0) || ($head == 0 && $direction < 0)); + + if($checkotherchunck) { + list($lines, $head, $tail) = $this->readAdjacentChunk($fp, $head, $tail, $direction); + + if(empty($lines)) break; + } + } + if($fp) { fclose($fp); + } + + return $relativerev; + } + + /** + * Returns revisions around rev1 and rev2 + * When available it returns $max entries for each revision + * + * @param int $rev1 oldest revision timestamp + * @param int $rev2 newest revision timestamp (0 looks up last revision) + * @param int $max maximum number of revisions returned + * @return array with two arrays with revisions surrounding rev1 respectively rev2 + */ + public function getRevisionsAround($rev1, $rev2, $max = 50) { + $max = floor(abs($max) / 2)*2 + 1; + $rev1 = max($rev1, 0); + $rev2 = max($rev2, 0); + + if($rev2) { + if($rev2 < $rev1) { + $rev = $rev2; + $rev2 = $rev1; + $rev1 = $rev; + } + } else { + //empty right side means a removed page. Look up last revision. + $revs = $this->getRevisions(-1, 1); + $rev2 = $revs[0]; + } + //collect revisions around rev2 + list($revs2, $allrevs, $fp, $lines, $head, $tail) = $this->retrieveRevisionsAround($rev2, $max); + + if(empty($revs2)) return array(array(), array()); + + //collect revisions around rev1 + $index = array_search($rev1, $allrevs); + if($index === false) { + //no overlapping revisions + list($revs1,,,,,) = $this->retrieveRevisionsAround($rev1, $max); + if(empty($revs1)) $revs1 = array(); + } else { + //revisions overlaps, reuse revisions around rev2 + $revs1 = $allrevs; + while($head > 0) { + for($i = count($lines) - 1; $i >= 0; $i--) { + $tmp = parseChangelogLine($lines[$i]); + if($tmp !== false) { + $this->cache[$this->id][$tmp['date']] = $tmp; + $revs1[] = $tmp['date']; + $index++; + + if($index > floor($max / 2)) break 2; + } + } + + list($lines, $head, $tail) = $this->readAdjacentChunk($fp, $head, $tail, -1); + } + sort($revs1); + //return wanted selection + $revs1 = array_slice($revs1, max($index - floor($max/2), 0), $max); + } + + return array(array_reverse($revs1), array_reverse($revs2)); + } + + /** + * Returns lines from changelog. + * If file larger than $chuncksize, only chunck is read that could contain $rev. + * + * @param int $rev revision timestamp + * @return array(fp, array(changeloglines), $head, $tail, $eof)|bool + * returns false when not succeed. fp only defined for chuck reading, needs closing. + */ + protected function readloglines($rev) { + $file = $this->getChangelogFilename(); + + if(!@file_exists($file)) { return false; } - // read chunk + $fp = null; + $head = 0; + $tail = 0; + $eof = 0; + + if(filesize($file) < $this->chunk_size || $this->chunk_size == 0) { + // read whole file + $lines = file($file); + if($lines === false) { + return false; + } + } else { + // read by chunk + $fp = fopen($file, 'rb'); // "file pointer" + if($fp === false) { + return false; + } + $head = 0; + fseek($fp, 0, SEEK_END); + $eof = ftell($fp); + $tail = $eof; + + // find chunk + while($tail - $head > $this->chunk_size) { + $finger = $head + floor(($tail - $head) / 2.0); + $finger = $this->getNewlinepointer($fp, $finger); + $tmp = fgets($fp); + if($finger == $head || $finger == $tail) { + break; + } + $tmp = parseChangelogLine($tmp); + $finger_rev = $tmp['date']; + + if($finger_rev > $rev) { + $tail = $finger; + } else { + $head = $finger; + } + } + + if($tail - $head < 1) { + // cound not find chunk, assume requested rev is missing + fclose($fp); + return false; + } + + $lines = $this->readChunk($fp, $head, $tail); + } + return array( + $fp, + $lines, + $head, + $tail, + $eof + ); + } + + /** + * Read chunk and return array with lines of given chunck. + * Has no check if $head and $tail are really at a new line + * + * @param $fp resource filepointer + * @param $head int start point chunck + * @param $tail int end point chunck + * @return array lines read from chunck + */ + protected function readChunk($fp, $head, $tail) { $chunk = ''; - $chunk_size = max($tail-$head, 0); // found chunk size + $chunk_size = max($tail - $head, 0); // found chunk size $got = 0; fseek($fp, $head); - while ($got<$chunk_size && !feof($fp)) { - $tmp = @fread($fp, max($chunk_size-$got, 0)); - if ($tmp===false) { break; } //error state + while($got < $chunk_size && !feof($fp)) { + $tmp = @fread($fp, max(min($this->chunk_size, $chunk_size - $got), 0)); + if($tmp === false) { //error state + break; + } $got += strlen($tmp); $chunk .= $tmp; } $lines = explode("\n", $chunk); array_pop($lines); // remove trailing newline - fclose($fp); + return $lines; + } + + /** + * Set pointer to first new line after $finger and return its position + * + * @param resource $fp filepointer + * @param $finger int a pointer + * @return int pointer + */ + protected function getNewlinepointer($fp, $finger) { + fseek($fp, $finger); + $nl = $finger; + if($finger > 0) { + fgets($fp); // slip the finger forward to a new line + $nl = ftell($fp); + } + return $nl; + } + + /** + * Check whether given revision is the current page + * + * @param int $rev timestamp of current page + * @return bool true if $rev is current revision, otherwise false + */ + public function isCurrentRevision($rev) { + return $rev == @filemtime($this->getFilename()); + } + + /** + * Returns the next lines of the changelog of the chunck before head or after tail + * + * @param resource $fp filepointer + * @param int $head position head of last chunk + * @param int $tail position tail of last chunk + * @param int $direction positive forward, negative backward + * @return array with entries: + * - $lines: changelog lines of readed chunk + * - $head: head of chunk + * - $tail: tail of chunk + */ + protected function readAdjacentChunk($fp, $head, $tail, $direction) { + if(!$fp) return array(array(), $head, $tail); + + if($direction > 0) { + //read forward + $head = $tail; + $tail = $head + floor($this->chunk_size * (2 / 3)); + $tail = $this->getNewlinepointer($fp, $tail); + } else { + //read backward + $tail = $head; + $head = max($tail - $this->chunk_size, 0); + while(true) { + $nl = $this->getNewlinepointer($fp, $head); + // was the chunk big enough? if not, take another bite + if($nl > 0 && $tail <= $nl) { + $head = max($head - $this->chunk_size, 0); + } else { + $head = $nl; + break; + } + } + } + + //load next chunck + $lines = $this->readChunk($fp, $head, $tail); + return array($lines, $head, $tail); } - // parse and cache changelog lines - foreach ($lines as $value) { - $tmp = parseChangelogLine($value); - if ($tmp!==false) { - $cache[$id][$tmp['date']] = $tmp; + /** + * Collect the $max revisions near to the timestamp $rev + * + * @param int $rev revision timestamp + * @param int $max maximum number of revisions to be returned + * @return bool|array + * return array with entries: + * - $requestedrevs: array of with $max revision timestamps + * - $revs: all parsed revision timestamps + * - $fp: filepointer only defined for chuck reading, needs closing. + * - $lines: non-parsed changelog lines before the parsed revisions + * - $head: position of first readed changelogline + * - $lasttail: position of end of last readed changelogline + * otherwise false + */ + protected function retrieveRevisionsAround($rev, $max) { + //get lines from changelog + list($fp, $lines, $starthead, $starttail, $eof) = $this->readloglines($rev); + if(empty($lines)) return false; + + //parse chunk containing $rev, and read forward more chunks until $max/2 is reached + $head = $starthead; + $tail = $starttail; + $revs = array(); + $aftercount = $beforecount = 0; + while(count($lines) > 0) { + foreach($lines as $line) { + $tmp = parseChangelogLine($line); + if($tmp !== false) { + $this->cache[$this->id][$tmp['date']] = $tmp; + $revs[] = $tmp['date']; + if($tmp['date'] >= $rev) { + //count revs after reference $rev + $aftercount++; + if($aftercount == 1) $beforecount = count($revs); + } + //enough revs after reference $rev? + if($aftercount > floor($max / 2)) break 2; + } + } + //retrieve next chunk + list($lines, $head, $tail) = $this->readAdjacentChunk($fp, $head, $tail, 1); + } + if($aftercount == 0) return false; + + $lasttail = $tail; + + //read additional chuncks backward until $max/2 is reached and total number of revs is equal to $max + $lines = array(); + $i = 0; + if($aftercount > 0) { + $head = $starthead; + $tail = $starttail; + while($head > 0) { + list($lines, $head, $tail) = $this->readAdjacentChunk($fp, $head, $tail, -1); + + for($i = count($lines) - 1; $i >= 0; $i--) { + $tmp = parseChangelogLine($lines[$i]); + if($tmp !== false) { + $this->cache[$this->id][$tmp['date']] = $tmp; + $revs[] = $tmp['date']; + $beforecount++; + //enough revs before reference $rev? + if($beforecount > max(floor($max / 2), $max - $aftercount)) break 2; + } + } + } } + sort($revs); + + //keep only non-parsed lines + $lines = array_slice($lines, 0, $i); + //trunk desired selection + $requestedrevs = array_slice($revs, -$max, $max); + + return array($requestedrevs, $revs, $fp, $lines, $head, $lasttail); } - if (!isset($cache[$id][$rev])) { return false; } - return $cache[$id][$rev]; +} + +/** + * Class PageChangelog handles changelog of a wiki page + */ +class PageChangelog extends ChangeLog { + + /** + * Returns path to changelog + * + * @return string path to file + */ + protected function getChangelogFilename() { + return metaFN($this->id, '.changes'); + } + + /** + * Returns path to current page/media + * + * @return string path to file + */ + protected function getFilename() { + return wikiFN($this->id); + } +} + +/** + * Class MediaChangelog handles changelog of a media file + */ +class MediaChangelog extends ChangeLog { + + /** + * Returns path to changelog + * + * @return string path to file + */ + protected function getChangelogFilename() { + return mediaMetaFN($this->id, '.changes'); + } + + /** + * Returns path to current page/media + * + * @return string path to file + */ + protected function getFilename() { + return mediaFN($this->id); + } +} + +/** + * Get the changelog information for a specific page id + * and revision (timestamp). Adjacent changelog lines + * are optimistically parsed and cached to speed up + * consecutive calls to getRevisionInfo. For large + * changelog files, only the chunk containing the + * requested changelog line is read. + * + * @deprecated 20-11-2013 + * + * @author Ben Coburn <btcoburn@silicodon.net> + * @author Kate Arzamastseva <pshns@ukr.net> + */ +function getRevisionInfo($id, $rev, $chunk_size = 8192, $media = false) { + if($media) { + $changelog = new MediaChangeLog($id, $chunk_size); + } else { + $changelog = new PageChangeLog($id, $chunk_size); + } + return $changelog->getRevisionInfo($rev); } /** @@ -447,106 +1036,16 @@ function getRevisionInfo($id, $rev, $chunk_size=8192, $media=false) { * backwards in chunks until the requested number of changelog * lines are recieved. * + * @deprecated 20-11-2013 + * * @author Ben Coburn <btcoburn@silicodon.net> * @author Kate Arzamastseva <pshns@ukr.net> */ -function getRevisions($id, $first, $num, $chunk_size=8192, $media=false) { - global $cache_revinfo; - $cache =& $cache_revinfo; - if (!isset($cache[$id])) { $cache[$id] = array(); } - - $revs = array(); - $lines = array(); - $count = 0; - if ($media) { - $file = mediaMetaFN($id, '.changes'); +function getRevisions($id, $first, $num, $chunk_size = 8192, $media = false) { + if($media) { + $changelog = new MediaChangeLog($id, $chunk_size); } else { - $file = metaFN($id, '.changes'); - } - $num = max($num, 0); - if ($num == 0) { return $revs; } - - $chunk_size = max($chunk_size, 0); - if ($first<0) { - $first = 0; - } else if (!$media && @file_exists(wikiFN($id)) || $media && @file_exists(mediaFN($id))) { - // skip current revision if the page exists - $first = max($first+1, 0); + $changelog = new PageChangeLog($id, $chunk_size); } - - if (!@file_exists($file)) { return $revs; } - if (filesize($file)<$chunk_size || $chunk_size==0) { - // read whole file - $lines = file($file); - if ($lines===false) { return $revs; } - } else { - // read chunks backwards - $fp = fopen($file, 'rb'); // "file pointer" - if ($fp===false) { return $revs; } - fseek($fp, 0, SEEK_END); - $tail = ftell($fp); - - // chunk backwards - $finger = max($tail-$chunk_size, 0); - while ($count<$num+$first) { - fseek($fp, $finger); - $nl = $finger; - if ($finger>0) { - fgets($fp); // slip the finger forward to a new line - $nl = ftell($fp); - } - - // was the chunk big enough? if not, take another bite - if($nl > 0 && $tail <= $nl){ - $finger = max($finger-$chunk_size, 0); - continue; - }else{ - $finger = $nl; - } - - // read chunk - $chunk = ''; - $read_size = max($tail-$finger, 0); // found chunk size - $got = 0; - while ($got<$read_size && !feof($fp)) { - $tmp = @fread($fp, max($read_size-$got, 0)); - if ($tmp===false) { break; } //error state - $got += strlen($tmp); - $chunk .= $tmp; - } - $tmp = explode("\n", $chunk); - array_pop($tmp); // remove trailing newline - - // combine with previous chunk - $count += count($tmp); - $lines = array_merge($tmp, $lines); - - // next chunk - if ($finger==0) { break; } // already read all the lines - else { - $tail = $finger; - $finger = max($tail-$chunk_size, 0); - } - } - fclose($fp); - } - - // skip parsing extra lines - $num = max(min(count($lines)-$first, $num), 0); - if ($first>0 && $num>0) { $lines = array_slice($lines, max(count($lines)-$first-$num, 0), $num); } - else if ($first>0 && $num==0) { $lines = array_slice($lines, 0, max(count($lines)-$first, 0)); } - else if ($first==0 && $num>0) { $lines = array_slice($lines, max(count($lines)-$num, 0)); } - - // handle lines in reverse order - for ($i = count($lines)-1; $i >= 0; $i--) { - $tmp = parseChangelogLine($lines[$i]); - if ($tmp!==false) { - $cache[$id][$tmp['date']] = $tmp; - $revs[] = $tmp['date']; - } - } - - return $revs; + return $changelog->getRevisions($first, $num); } - - diff --git a/inc/common.php b/inc/common.php index 9fbebde94..110b91417 100644 --- a/inc/common.php +++ b/inc/common.php @@ -195,13 +195,14 @@ function pageinfo() { $info['meta'] = p_get_metadata($ID); //who's the editor + $pagelog = new PageChangeLog($ID, 1024); if($REV) { - $revinfo = getRevisionInfo($ID, $REV, 1024); + $revinfo = $pagelog->getRevisionInfo($REV); } else { if(!empty($info['meta']['last_change']) && is_array($info['meta']['last_change'])) { $revinfo = $info['meta']['last_change']; } else { - $revinfo = getRevisionInfo($ID, $info['lastmod'], 1024); + $revinfo = $pagelog->getRevisionInfo($info['lastmod']); // cache most recent changelog line in metadata if missing and still valid if($revinfo !== false) { $info['meta']['last_change'] = $revinfo; @@ -1092,8 +1093,9 @@ function saveWikiText($id, $text, $summary, $minor = false) { $wasRemoved = (trim($text) == ''); // check for empty or whitespace only $wasCreated = !@file_exists($file); $wasReverted = ($REV == true); + $pagelog = new PageChangeLog($id, 1024); $newRev = false; - $oldRev = getRevisions($id, -1, 1, 1024); // from changelog + $oldRev = $pagelog->getRevisions(-1, 1); // from changelog $oldRev = (int) (empty($oldRev) ? 0 : $oldRev[0]); if(!@file_exists(wikiFN($id, $old)) && @file_exists($file) && $old >= $oldRev) { // add old revision to the attic if missing @@ -1457,37 +1459,135 @@ function shorten($keep, $short, $max, $min = 9, $char = '…') { * Return the users realname or e-mail address for use * in page footer and recent changes pages * + * @param string|bool $username or false when currently logged-in user should be used + * @param bool $textonly true returns only plain text, true allows returning html + * @return string html or plain text(not escaped) of formatted user name + * * @author Andy Webber <dokuwiki AT andywebber DOT com> */ -function editorinfo($username) { - global $conf; +function editorinfo($username, $textonly = false) { + return userlink($username, $textonly); +} + +/** + * Returns users realname w/o link + * + * @param string|bool $username or false when currently logged-in user should be used + * @param bool $textonly true returns only plain text, true allows returning html + * @return string html or plain text(not escaped) of formatted user name + * + * @triggers COMMON_USER_LINK + */ +function userlink($username = null, $textonly = false) { + global $conf, $INFO; + /** @var DokuWiki_Auth_Plugin $auth */ global $auth; + /** @var Input $INPUT */ + global $INPUT; - switch($conf['showuseras']) { - case 'username': - case 'email': - case 'email_link': - if($auth) $info = $auth->getUserData($username); - break; - default: - return hsc($username); - } - - if(isset($info) && $info) { - switch($conf['showuseras']) { - case 'username': - return hsc($info['name']); - case 'email': - return obfuscate($info['mail']); - case 'email_link': - $mail = obfuscate($info['mail']); - return '<a href="mailto:'.$mail.'">'.$mail.'</a>'; - default: - return hsc($username); + // prepare initial event data + $data = array( + 'username' => $username, // the unique user name + 'name' => '', + 'link' => array( //setting 'link' to false disables linking + 'target' => '', + 'pre' => '', + 'suf' => '', + 'style' => '', + 'more' => '', + 'url' => '', + 'title' => '', + 'class' => '' + ), + 'userlink' => '', // formatted user name as will be returned + 'textonly' => $textonly + ); + if($username === null) { + $data['username'] = $username = $INPUT->server->str('REMOTE_USER'); + if($textonly){ + $data['name'] = $INFO['userinfo']['name']. ' (' . $INPUT->server->str('REMOTE_USER') . ')'; + }else { + $data['name'] = '<bdi>' . hsc($INFO['userinfo']['name']) . '</bdi> (<bdi>' . hsc($INPUT->server->str('REMOTE_USER')) . '</bdi>)'; + } + } + + $evt = new Doku_Event('COMMON_USER_LINK', $data); + if($evt->advise_before(true)) { + if(empty($data['name'])) { + if($conf['showuseras'] == 'loginname') { + $data['name'] = $textonly ? $data['username'] : hsc($data['username']); + } else { + if($auth) $info = $auth->getUserData($username); + if(isset($info) && $info) { + switch($conf['showuseras']) { + case 'username': + case 'username_link': + $data['name'] = $textonly ? $info['name'] : hsc($info['name']); + break; + case 'email': + case 'email_link': + $data['name'] = obfuscate($info['mail']); + break; + } + } + } + } + + /** @var Doku_Renderer_xhtml $xhtml_renderer */ + static $xhtml_renderer = null; + + if(!$data['textonly'] && empty($data['link']['url'])) { + + if(in_array($conf['showuseras'], array('email_link', 'username_link'))) { + if(!isset($info)) { + if($auth) $info = $auth->getUserData($username); + } + if(isset($info) && $info) { + if($conf['showuseras'] == 'email_link') { + $data['link']['url'] = 'mailto:' . obfuscate($info['mail']); + } else { + if(is_null($xhtml_renderer)) { + $xhtml_renderer = p_get_renderer('xhtml'); + } + if(empty($xhtml_renderer->interwiki)) { + $xhtml_renderer->interwiki = getInterwiki(); + } + $shortcut = 'user'; + $exists = null; + $data['link']['url'] = $xhtml_renderer->_resolveInterWiki($shortcut, $username, $exists); + $data['link']['class'] .= ' interwiki iw_user'; + if($exists !== null) { + if($exists) { + $data['link']['class'] .= ' wikilink1'; + } else { + $data['link']['class'] .= ' wikilink2'; + $data['link']['rel'] = 'nofollow'; + } + } + } + } else { + $data['textonly'] = true; + } + + } else { + $data['textonly'] = true; + } + } + + if($data['textonly']) { + $data['userlink'] = $data['name']; + } else { + $data['link']['name'] = $data['name']; + if(is_null($xhtml_renderer)) { + $xhtml_renderer = p_get_renderer('xhtml'); + } + $data['userlink'] = $xhtml_renderer->_formatLink($data['link']); } - } else { - return hsc($username); } + $evt->advise_after(); + unset($evt); + + return $data['userlink']; } /** @@ -1675,4 +1775,13 @@ function set_doku_pref($pref, $val) { } } +/** + * Strips source mapping declarations from given text #601 + * + * @param &string $text reference to the CSS or JavaScript code to clean + */ +function stripsourcemaps(&$text){ + $text = preg_replace('/^(\/\/|\/\*)[@#]\s+sourceMappingURL=.*?(\*\/)?$/im', '\\1\\2', $text); +} + //Setup VIM: ex: et ts=2 : diff --git a/inc/form.php b/inc/form.php index 610f50200..9cd0491e0 100644 --- a/inc/form.php +++ b/inc/form.php @@ -561,10 +561,11 @@ function form_makeListboxField($name, $values, $selected='', $label=null, $id='' if (is_null($label)) $label = $name; $options = array(); reset($values); - if (is_null($selected) || $selected == '') + if (is_null($selected) || $selected == '') { $selected = array(); - elseif (!is_array($selected)) + } elseif (!is_array($selected)) { $selected = array($selected); + } // FIXME: php doesn't know the difference between a string and an integer if (is_string(key($values))) { foreach ($values as $val=>$text) { @@ -572,11 +573,13 @@ function form_makeListboxField($name, $values, $selected='', $label=null, $id='' } } else { foreach ($values as $val) { - if (is_array($val)) - @list($val,$text) = $val; - else + $disabled = false; + if (is_array($val)) { + @list($val,$text,$disabled) = $val; + } else { $text = null; - $options[] = array($val,$text,in_array($val,$selected)); + } + $options[] = array($val,$text,in_array($val,$selected),$disabled); } } $elem = array('_elem'=>'listboxfield', '_options'=>$options, '_text'=>$label, '_class'=>$class, @@ -930,11 +933,12 @@ function form_listboxfield($attrs) { $s .= '<select '.buildAttributes($attrs,true).'>'.DOKU_LF; if (!empty($attrs['_options'])) { foreach ($attrs['_options'] as $opt) { - @list($value,$text,$select) = $opt; + @list($value,$text,$select,$disabled) = $opt; $p = ''; if(is_null($text)) $text = $value; $p .= ' value="'.formText($value).'"'; if (!empty($select)) $p .= ' selected="selected"'; + if ($disabled) $p .= ' disabled="disabled"'; $s .= '<option'.$p.'>'.formText($text).'</option>'; } } else { diff --git a/inc/html.php b/inc/html.php index 4058440ca..be7afae0c 100644 --- a/inc/html.php +++ b/inc/html.php @@ -19,6 +19,7 @@ if(!defined('NL')) define('NL',"\n"); * @return string the HTML code of the link */ function html_wikilink($id,$name=null,$search=''){ + /** @var Doku_Renderer_xhtml $xhtml_renderer */ static $xhtml_renderer = null; if(is_null($xhtml_renderer)){ $xhtml_renderer = p_get_renderer('xhtml'); @@ -428,20 +429,23 @@ function html_revisions($first=0, $media_id = false){ global $conf; global $lang; $id = $ID; + if ($media_id) { + $id = $media_id; + $changelog = new MediaChangeLog($id); + } else { + $changelog = new PageChangeLog($id); + } + /* we need to get one additional log entry to be able to * decide if this is the last page or is there another one. * see html_recent() */ - if (!$media_id) $revisions = getRevisions($ID, $first, $conf['recent']+1); - else { - $revisions = getRevisions($media_id, $first, $conf['recent']+1, 8192, true); - $id = $media_id; - } + + $revisions = $changelog->getRevisions($first, $conf['recent']+1); if(count($revisions)==0 && $first!=0){ $first=0; - if (!$media_id) $revisions = getRevisions($ID, $first, $conf['recent']+1); - else $revisions = getRevisions($media_id, $first, $conf['recent']+1, 8192, true); + $revisions = $changelog->getRevisions($first, $conf['recent']+1); } $hasNext = false; if (count($revisions)>$conf['recent']) { @@ -500,15 +504,18 @@ function html_revisions($first=0, $media_id = false){ $form->addElement(form_makeCloseTag('span')); } + $changelog->setChunkSize(1024); + $form->addElement(form_makeOpenTag('span', array('class' => 'user'))); - if (!$media_id) $editor = $INFO['editor']; - else { - $revinfo = getRevisionInfo($id, @filemtime(fullpath(mediaFN($id))), 1024, true); - if($revinfo['user']){ + if($media_id) { + $revinfo = $changelog->getRevisionInfo(@filemtime(fullpath(mediaFN($id)))); + if($revinfo['user']) { $editor = $revinfo['user']; - }else{ + } else { $editor = $revinfo['ip']; } + } else { + $editor = $INFO['editor']; } $form->addElement((empty($editor))?('('.$lang['external_edit'].')'):editorinfo($editor)); $form->addElement(form_makeCloseTag('span')); @@ -523,12 +530,11 @@ function html_revisions($first=0, $media_id = false){ foreach($revisions as $rev){ $date = dformat($rev); - if (!$media_id) { - $info = getRevisionInfo($id,$rev,true); - $exists = page_exists($id,$rev); - } else { - $info = getRevisionInfo($id,$rev,true,true); - $exists = @file_exists(mediaFN($id,$rev)); + $info = $changelog->getRevisionInfo($rev); + if($media_id) { + $exists = @file_exists(mediaFN($id, $rev)); + } else { + $exists = page_exists($id, $rev); } if ($info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) @@ -1022,10 +1028,15 @@ function html_diff_head($l_rev, $r_rev, $id = null, $media = false, $inline = fa $ml_or_wl = $media ? 'ml' : 'wl'; $l_minor = $r_minor = ''; + if($media) { + $changelog = new MediaChangeLog($id); + } else { + $changelog = new PageChangeLog($id); + } if(!$l_rev){ $l_head = '—'; }else{ - $l_info = getRevisionInfo($id,$l_rev,true, $media); + $l_info = $changelog->getRevisionInfo($l_rev); if($l_info['user']){ $l_user = '<bdi>'.editorinfo($l_info['user']).'</bdi>'; if(auth_ismanager()) $l_user .= ' <bdo dir="ltr">('.$l_info['ip'].')</bdo>'; @@ -1043,7 +1054,7 @@ function html_diff_head($l_rev, $r_rev, $id = null, $media = false, $inline = fa } if($r_rev){ - $r_info = getRevisionInfo($id,$r_rev,true, $media); + $r_info = $changelog->getRevisionInfo($r_rev); if($r_info['user']){ $r_user = '<bdi>'.editorinfo($r_info['user']).'</bdi>'; if(auth_ismanager()) $r_user .= ' <bdo dir="ltr">('.$r_info['ip'].')</bdo>'; @@ -1059,7 +1070,7 @@ function html_diff_head($l_rev, $r_rev, $id = null, $media = false, $inline = fa $r_head_title.'</a></bdi>'. $head_separator.$r_user.' '.$r_sum; }elseif($_rev = @filemtime($media_or_wikiFN($id))){ - $_info = getRevisionInfo($id,$_rev,true, $media); + $_info = $changelog->getRevisionInfo($_rev); if($_info['user']){ $_user = '<bdi>'.editorinfo($_info['user']).'</bdi>'; if(auth_ismanager()) $_user .= ' <bdo dir="ltr">('.$_info['ip'].')</bdo>'; @@ -1083,162 +1094,386 @@ function html_diff_head($l_rev, $r_rev, $id = null, $media = false, $inline = fa } /** - * show diff + * Show diff + * between current page version and provided $text + * or between the revisions provided via GET or POST * * @author Andreas Gohr <andi@splitbrain.org> - * @param string $text - compare with this text with most current version - * @param bool $intro - display the intro text - * @param string $type type of the diff (inline or sidebyside) + * @param string $text when non-empty: compare with this text with most current version + * @param bool $intro display the intro text + * @param string $type type of the diff (inline or sidebyside) */ -function html_diff($text='',$intro=true,$type=null){ +function html_diff($text = '', $intro = true, $type = null) { global $ID; global $REV; global $lang; global $INPUT; global $INFO; + $pagelog = new PageChangeLog($ID); + /* + * Determine diff type + */ if(!$type) { $type = $INPUT->str('difftype'); - if (empty($type)) { + if(empty($type)) { $type = get_doku_pref('difftype', $type); - if (empty($type) && $INFO['ismobile']) { + if(empty($type) && $INFO['ismobile']) { $type = 'inline'; } } } if($type != 'inline') $type = 'sidebyside'; + /* + * Determine requested revision(s) + */ // we're trying to be clever here, revisions to compare can be either // given as rev and rev2 parameters, with rev2 being optional. Or in an // array in rev2. $rev1 = $REV; $rev2 = $INPUT->ref('rev2'); - if(is_array($rev2)){ + if(is_array($rev2)) { $rev1 = (int) $rev2[0]; $rev2 = (int) $rev2[1]; - if(!$rev1){ + if(!$rev1) { $rev1 = $rev2; unset($rev2); } - }else{ + } else { $rev2 = $INPUT->int('rev2'); } + /* + * Determine left and right revision, its texts and the header + */ $r_minor = ''; $l_minor = ''; - if($text){ // compare text to the most current revision - $l_rev = ''; - $l_text = rawWiki($ID,''); - $l_head = '<a class="wikilink1" href="'.wl($ID).'">'. - $ID.' '.dformat((int) @filemtime(wikiFN($ID))).'</a> '. + if($text) { // compare text to the most current revision + $l_rev = ''; + $l_text = rawWiki($ID, ''); + $l_head = '<a class="wikilink1" href="' . wl($ID) . '">' . + $ID . ' ' . dformat((int) @filemtime(wikiFN($ID))) . '</a> ' . $lang['current']; - $r_rev = ''; - $r_text = cleanText($text); - $r_head = $lang['yours']; - }else{ - if($rev1 && isset($rev2) && $rev2){ // two specific revisions wanted + $r_rev = ''; + $r_text = cleanText($text); + $r_head = $lang['yours']; + } else { + if($rev1 && isset($rev2) && $rev2) { // two specific revisions wanted // make sure order is correct (older on the left) - if($rev1 < $rev2){ + if($rev1 < $rev2) { $l_rev = $rev1; $r_rev = $rev2; - }else{ + } else { $l_rev = $rev2; $r_rev = $rev1; } - }elseif($rev1){ // single revision given, compare to current + } elseif($rev1) { // single revision given, compare to current $r_rev = ''; $l_rev = $rev1; - }else{ // no revision was given, compare previous to current + } else { // no revision was given, compare previous to current $r_rev = ''; - $revs = getRevisions($ID, 0, 1); + $revs = $pagelog->getRevisions(0, 1); $l_rev = $revs[0]; $REV = $l_rev; // store revision back in $REV } // when both revisions are empty then the page was created just now - if(!$l_rev && !$r_rev){ + if(!$l_rev && !$r_rev) { $l_text = ''; - }else{ - $l_text = rawWiki($ID,$l_rev); + } else { + $l_text = rawWiki($ID, $l_rev); } - $r_text = rawWiki($ID,$r_rev); + $r_text = rawWiki($ID, $r_rev); list($l_head, $r_head, $l_minor, $r_minor) = html_diff_head($l_rev, $r_rev, null, false, $type == 'inline'); } - $df = new Diff(explode("\n",$l_text),explode("\n",$r_text)); + /* + * Build navigation + */ + $l_nav = ''; + $r_nav = ''; + if(!$text) { + list($l_nav, $r_nav) = html_diff_navigation($pagelog, $type, $l_rev, $r_rev); + } + /* + * Create diff object and the formatter + */ + $diff = new Diff(explode("\n", $l_text), explode("\n", $r_text)); - if($type == 'inline'){ - $tdf = new InlineDiffFormatter(); + if($type == 'inline') { + $diffformatter = new InlineDiffFormatter(); } else { - $tdf = new TableDiffFormatter(); + $diffformatter = new TableDiffFormatter(); } - + /* + * Display intro + */ if($intro) print p_locale_xhtml('diff'); - if (!$text) { - ptln('<div class="diffoptions">'); - - $form = new Doku_Form(array('action'=>wl())); - $form->addHidden('id',$ID); - $form->addHidden('rev2[0]',$l_rev); - $form->addHidden('rev2[1]',$r_rev); - $form->addHidden('do','diff'); - $form->addElement(form_makeListboxField( - 'difftype', - array( - 'sidebyside' => $lang['diff_side'], - 'inline' => $lang['diff_inline']), - $type, - $lang['diff_type'], - '','', - array('class'=>'quickselect'))); - $form->addElement(form_makeButton('submit', 'diff','Go')); + /* + * Display type and exact reference + */ + if(!$text) { + ptln('<div class="diffoptions group">'); + + + $form = new Doku_Form(array('action' => wl())); + $form->addHidden('id', $ID); + $form->addHidden('rev2[0]', $l_rev); + $form->addHidden('rev2[1]', $r_rev); + $form->addHidden('do', 'diff'); + $form->addElement( + form_makeListboxField( + 'difftype', + array( + 'sidebyside' => $lang['diff_side'], + 'inline' => $lang['diff_inline'] + ), + $type, + $lang['diff_type'], + '', '', + array('class' => 'quickselect') + ) + ); + $form->addElement(form_makeButton('submit', 'diff', 'Go')); $form->printForm(); - $diffurl = wl($ID, array( - 'do' => 'diff', - 'rev2[0]' => $l_rev, - 'rev2[1]' => $r_rev ? $r_rev : $INFO['currentrev'], // link to exactly this view FS#2835 - 'difftype' => $type, - )); - ptln('<p><a class="wikilink1" href="'.$diffurl.'">'.$lang['difflink'].'</a></p>'); - ptln('</div>'); + ptln('<p>'); + // link to exactly this view FS#2835 + echo html_diff_navigationlink($type, 'difflink', $l_rev, $r_rev ? $r_rev : $INFO['currentrev']); + ptln('</p>'); + + ptln('</div>'); // .diffoptions } + + /* + * Display diff view table + */ ?> <div class="table"> - <table class="diff diff_<?php echo $type?>"> - <?php if ($type == 'inline') { ?> - <tr> - <th class="diff-lineheader">-</th><th <?php echo $l_minor?>> - <?php echo $l_head?> - </th> - </tr> - <tr> - <th class="diff-lineheader">+</th><th <?php echo $r_minor?>> - <?php echo $r_head?> - </th> - </tr> - <?php } else { ?> - <tr> - <th colspan="2" <?php echo $l_minor?>> - <?php echo $l_head?> - </th> - <th colspan="2" <?php echo $r_minor?>> - <?php echo $r_head?> - </th> - </tr> - <?php } - echo html_insert_softbreaks($tdf->format($df)); ?> + <table class="diff diff_<?php echo $type ?>"> + + <?php + //navigation and header + if($type == 'inline') { + if(!$text) { ?> + <tr> + <td class="diff-lineheader">-</td> + <td class="diffnav"><?php echo $l_nav ?></td> + </tr> + <tr> + <th class="diff-lineheader">-</th> + <th <?php echo $l_minor ?>> + <?php echo $l_head ?> + </th> + </tr> + <?php } ?> + <tr> + <td class="diff-lineheader">+</td> + <td class="diffnav"><?php echo $r_nav ?></td> + </tr> + <tr> + <th class="diff-lineheader">+</th> + <th <?php echo $r_minor ?>> + <?php echo $r_head ?> + </th> + </tr> + <?php } else { + if(!$text) { ?> + <tr> + <td colspan="2" class="diffnav"><?php echo $l_nav ?></td> + <td colspan="2" class="diffnav"><?php echo $r_nav ?></td> + </tr> + <?php } ?> + <tr> + <th colspan="2" <?php echo $l_minor ?>> + <?php echo $l_head ?> + </th> + <th colspan="2" <?php echo $r_minor ?>> + <?php echo $r_head ?> + </th> + </tr> + <?php } + + //diff view + echo html_insert_softbreaks($diffformatter->format($diff)); ?> + </table> </div> - <?php +<?php } +/** + * Create html for revision navigation + * + * @param PageChangeLog $pagelog changelog object of current page + * @param string $type inline vs sidebyside + * @param int $l_rev left revision timestamp + * @param int $r_rev right revision timestamp + * @return string[] html of left and right navigation elements + */ +function html_diff_navigation($pagelog, $type, $l_rev, $r_rev) { + global $INFO, $ID; + + // last timestamp is not in changelog, retrieve timestamp from metadata + // note: when page is removed, the metadata timestamp is zero + $r_rev = $r_rev ? $r_rev : $INFO['meta']['last_change']['date']; + + //retrieve revisions with additional info + list($l_revs, $r_revs) = $pagelog->getRevisionsAround($l_rev, $r_rev); + $l_revisions = array(); + if(!$l_rev) { + $l_revisions[0] = array(0, "", false); //no left revision given, add dummy + } + foreach($l_revs as $rev) { + $info = $pagelog->getRevisionInfo($rev); + $l_revisions[$rev] = array( + $rev, + dformat($info['date']) . ' ' . editorinfo($info['user'], true) . ' ' . $info['sum'], + $r_rev ? $rev >= $r_rev : false //disable? + ); + } + $r_revisions = array(); + if(!$r_rev) { + $r_revisions[0] = array(0, "", false); //no right revision given, add dummy + } + foreach($r_revs as $rev) { + $info = $pagelog->getRevisionInfo($rev); + $r_revisions[$rev] = array( + $rev, + dformat($info['date']) . ' ' . editorinfo($info['user'], true) . ' ' . $info['sum'], + $rev <= $l_rev //disable? + ); + } + + //determine previous/next revisions + $l_index = array_search($l_rev, $l_revs); + $l_prev = $l_revs[$l_index + 1]; + $l_next = $l_revs[$l_index - 1]; + if($r_rev) { + $r_index = array_search($r_rev, $r_revs); + $r_prev = $r_revs[$r_index + 1]; + $r_next = $r_revs[$r_index - 1]; + } else { + //removed page + if($l_next) { + $r_prev = $r_revs[0]; + } else { + $r_prev = null; + } + $r_next = null; + } + + /* + * Left side: + */ + $l_nav = ''; + //move back + if($l_prev) { + $l_nav .= html_diff_navigationlink($type, 'diffbothprevrev', $l_prev, $r_prev); + $l_nav .= html_diff_navigationlink($type, 'diffprevrev', $l_prev, $r_rev); + } + //dropdown + $form = new Doku_Form(array('action' => wl())); + $form->addHidden('id', $ID); + $form->addHidden('difftype', $type); + $form->addHidden('rev2[1]', $r_rev); + $form->addHidden('do', 'diff'); + $form->addElement( + form_makeListboxField( + 'rev2[0]', + $l_revisions, + $l_rev, + '', '', '', + array('class' => 'quickselect') + ) + ); + $form->addElement(form_makeButton('submit', 'diff', 'Go')); + $l_nav .= $form->getForm(); + //move forward + if($l_next && ($l_next < $r_rev || !$r_rev)) { + $l_nav .= html_diff_navigationlink($type, 'diffnextrev', $l_next, $r_rev); + } + + /* + * Right side: + */ + $r_nav = ''; + //move back + if($l_rev < $r_prev) { + $r_nav .= html_diff_navigationlink($type, 'diffprevrev', $l_rev, $r_prev); + } + //dropdown + $form = new Doku_Form(array('action' => wl())); + $form->addHidden('id', $ID); + $form->addHidden('rev2[0]', $l_rev); + $form->addHidden('difftype', $type); + $form->addHidden('do', 'diff'); + $form->addElement( + form_makeListboxField( + 'rev2[1]', + $r_revisions, + $r_rev, + '', '', '', + array('class' => 'quickselect') + ) + ); + $form->addElement(form_makeButton('submit', 'diff', 'Go')); + $r_nav .= $form->getForm(); + //move forward + if($r_next) { + if($pagelog->isCurrentRevision($r_next)) { + $r_nav .= html_diff_navigationlink($type, 'difflastrev', $l_rev); //last revision is diff with current page + } else { + $r_nav .= html_diff_navigationlink($type, 'diffnextrev', $l_rev, $r_next); + } + $r_nav .= html_diff_navigationlink($type, 'diffbothnextrev', $l_next, $r_next); + } + return array($l_nav, $r_nav); +} + +/** + * Create html link to a diff defined by two revisions + * + * @param string $difftype display type + * @param string $linktype + * @param int $lrev oldest revision + * @param int $rrev newest revision or null for diff with current revision + * @return string html of link to a diff + */ +function html_diff_navigationlink($difftype, $linktype, $lrev, $rrev = null) { + global $ID, $lang; + if(!$rrev) { + $urlparam = array( + 'do' => 'diff', + 'rev' => $lrev, + 'difftype' => $difftype, + ); + } else { + $urlparam = array( + 'do' => 'diff', + 'rev2[0]' => $lrev, + 'rev2[1]' => $rrev, + 'difftype' => $difftype, + ); + } + return '<a class="' . $linktype . '" href="' . wl($ID, $urlparam) . '" title="' . $lang[$linktype] . '">' . + '<span>' . $lang[$linktype] . '</span>' . + '</a>' . "\n"; +} + +/** + * Insert soft breaks in diff html + * + * @param $diffhtml + * @return string + */ function html_insert_softbreaks($diffhtml) { // search the diff html string for both: // - html tags, so these can be ignored @@ -1246,6 +1481,12 @@ function html_insert_softbreaks($diffhtml) { return preg_replace_callback('/<[^>]*>|[^<> ]{12,}/','html_softbreak_callback',$diffhtml); } +/** + * callback which adds softbreaks + * + * @param array $match array with first the complete match + * @return string the replacement + */ function html_softbreak_callback($match){ // if match is an html tag, return it intact if ($match[0]{0} == '<') return $match[0]; @@ -1357,7 +1598,7 @@ function html_updateprofile(){ global $conf; global $INPUT; global $INFO; - /** @var auth_basic $auth */ + /** @var DokuWiki_Auth_Plugin $auth */ global $auth; print p_locale_xhtml('updateprofile'); @@ -1531,6 +1772,7 @@ function html_edit(){ * Display the default edit form * * Is the default action for HTML_EDIT_FORMSELECTION. + * @param mixed[] $param */ function html_edit_form($param) { global $TEXT; @@ -1573,7 +1815,7 @@ function html_minoredit(){ function html_debug(){ global $conf; global $lang; - /** @var auth_basic $auth */ + /** @var DokuWiki_Auth_Plugin $auth */ global $auth; global $INFO; diff --git a/inc/indexer.php b/inc/indexer.php index a167db47f..5ca2f0bb1 100644 --- a/inc/indexer.php +++ b/inc/indexer.php @@ -1218,19 +1218,18 @@ class Doku_Indexer { * @author Tom N Harris <tnharris@whoopdedo.org> */ protected function updateTuple($line, $id, $count) { - $newLine = $line; - if ($newLine !== ''){ - $newLine = preg_replace('/(^|:)'.preg_quote($id,'/').'\*\d*/', '', $newLine); + if ($line != ''){ + $line = preg_replace('/(^|:)'.preg_quote($id,'/').'\*\d*/', '', $line); } - $newLine = trim($newLine, ':'); + $line = trim($line, ':'); if ($count) { - if (strlen($newLine) > 0) { - return "$id*$count:".$newLine; + if ($line) { + return "$id*$count:".$line; } else { - return "$id*$count".$newLine; + return "$id*$count"; } } - return $newLine; + return $line; } /** diff --git a/inc/lang/af/lang.php b/inc/lang/af/lang.php index 826fda6e8..008110450 100644 --- a/inc/lang/af/lang.php +++ b/inc/lang/af/lang.php @@ -63,7 +63,7 @@ $lang['qb_extlink'] = 'Eksterne skakel'; $lang['qb_hr'] = 'Horisontale streep'; $lang['qb_sig'] = 'Handtekening met datum'; $lang['admin_register'] = 'Skep gerus \'n rekening'; -$lang['img_backto'] = 'Terug na'; +$lang['btn_img_backto'] = 'Terug na %s'; $lang['img_date'] = 'Datem'; $lang['img_camera'] = 'Camera'; $lang['i_wikiname'] = 'Wiki Naam'; diff --git a/inc/lang/ar/lang.php b/inc/lang/ar/lang.php index 157513429..b0a2edc88 100644 --- a/inc/lang/ar/lang.php +++ b/inc/lang/ar/lang.php @@ -239,7 +239,7 @@ $lang['admin_register'] = 'أضف مستخدما جديدا'; $lang['metaedit'] = 'تحرير البيانات الشمولية '; $lang['metasaveerr'] = 'فشلت كتابة البيانات الشمولية'; $lang['metasaveok'] = 'حُفظت البيانات الشمولية'; -$lang['img_backto'] = 'عودة إلى'; +$lang['btn_img_backto'] = 'عودة إلى %s'; $lang['img_title'] = 'العنوان'; $lang['img_caption'] = 'وصف'; $lang['img_date'] = 'التاريخ'; @@ -252,7 +252,7 @@ $lang['img_camera'] = 'الكمرا'; $lang['img_keywords'] = 'كلمات مفتاحية'; $lang['img_width'] = 'العرض'; $lang['img_height'] = 'الإرتفاع'; -$lang['img_manager'] = 'اعرض في مدير الوسائط'; +$lang['btn_mediaManager'] = 'اعرض في مدير الوسائط'; $lang['subscr_subscribe_success'] = 'اضيف %s لقائمة اشتراك %s'; $lang['subscr_subscribe_error'] = 'خطأ في إضافة %s لقائمة اشتراك %s'; $lang['subscr_subscribe_noaddress'] = 'ليس هناك عنوان مرتبط بولوجك، لا يمكن اضافتك لقائمة الاشتراك'; diff --git a/inc/lang/az/lang.php b/inc/lang/az/lang.php index df54b4f10..8d51d2372 100644 --- a/inc/lang/az/lang.php +++ b/inc/lang/az/lang.php @@ -172,7 +172,7 @@ $lang['admin_register'] = 'İstifadəçi əlavə et'; $lang['metaedit'] = 'Meta-məlumatlarda düzəliş et'; $lang['metasaveerr'] = 'Meta-məlumatları yazan zamanı xəta'; $lang['metasaveok'] = 'Meta-məlumatlar yadda saxlandı'; -$lang['img_backto'] = 'Qayıd'; +$lang['btn_img_backto'] = 'Qayıd %s'; $lang['img_title'] = 'Başlıq'; $lang['img_caption'] = 'İmza'; $lang['img_date'] = 'Tarix'; diff --git a/inc/lang/bg/lang.php b/inc/lang/bg/lang.php index bb74ff1ca..77117154f 100644 --- a/inc/lang/bg/lang.php +++ b/inc/lang/bg/lang.php @@ -50,7 +50,7 @@ $lang['btn_revert'] = 'Възстановяване'; $lang['btn_register'] = 'Регистриране'; $lang['btn_apply'] = 'Прилагане'; $lang['btn_media'] = 'Диспечер на файлове'; -$lang['btn_deleteuser'] = 'Изтрий профила ми'; +$lang['btn_deleteuser'] = 'Изтриване на профила'; $lang['loggedinas'] = 'Вписани сте като'; $lang['user'] = 'Потребител'; $lang['pass'] = 'Парола'; @@ -62,7 +62,7 @@ $lang['fullname'] = 'Истинско име'; $lang['email'] = 'Електронна поща'; $lang['profile'] = 'Потребителски профил'; $lang['badlogin'] = 'Грешно потребителско име или парола.'; -$lang['badpassconfirm'] = 'Съжаляваме, паролата е грешна'; +$lang['badpassconfirm'] = 'За съжаление паролата е грешна'; $lang['minoredit'] = 'Промените са незначителни'; $lang['draftdate'] = 'Черновата е автоматично записана на'; $lang['nosecedit'] = 'Страницата бе междувременно променена, презареждане на страницата поради неактуална информация.'; @@ -77,13 +77,13 @@ $lang['regpwmail'] = 'Паролата ви за DokuWiki'; $lang['reghere'] = 'Все още нямате профил? Направете си'; $lang['profna'] = 'Wiki-то не поддържа промяна на профила'; $lang['profnochange'] = 'Няма промени.'; -$lang['profnoempty'] = 'Въвеждането на име и ел. поща е задължително'; +$lang['profnoempty'] = 'Въвеждането на име и имейл е задължително'; $lang['profchanged'] = 'Потребителският профил е обновен успешно.'; -$lang['profnodelete'] = 'Не е възможно изтриване на потребители в това wiki '; -$lang['profdeleteuser'] = 'Изтрий профила ми'; +$lang['profnodelete'] = 'Изтриването на потребители в това wiki не е възможно'; +$lang['profdeleteuser'] = 'Изтриване на профила'; $lang['profdeleted'] = 'Вашият профил е премахнат от това wiki '; -$lang['profconfdelete'] = 'Искам да изтрия профила си от това wiki. <br/> Веднъж изтрит, профила не може да бъде възстановен!'; -$lang['profconfdeletemissing'] = 'Не и маркирана опцията за потвърждение'; +$lang['profconfdelete'] = 'Искам да изтрия профила си от това wiki. <br/> Веднъж изтрит, профилът не може да бъде възстановен!'; +$lang['profconfdeletemissing'] = 'Не сте поставили отметка в кутията потвърждение'; $lang['pwdforget'] = 'Забравили сте паролата си? Получете нова'; $lang['resendna'] = 'Wiki-то не поддържа повторно пращане на паролата.'; $lang['resendpwd'] = 'Задаване на нова парола за'; @@ -140,7 +140,7 @@ $lang['js']['media_diff_portions'] = 'По половинка'; $lang['js']['media_select'] = 'Изберете файлове...'; $lang['js']['media_upload_btn'] = 'Качване'; $lang['js']['media_done_btn'] = 'Готово'; -$lang['js']['media_drop'] = 'Влачете и пуснете файливе тук, за да бъдат качени'; +$lang['js']['media_drop'] = 'Влачете и пуснете файлове тук, за да бъдат качени'; $lang['js']['media_cancel'] = 'премахване'; $lang['js']['media_overwrt'] = 'Презапиши съществуващите файлове'; $lang['rssfailed'] = 'Възникна грешка при получаването на емисията: '; @@ -164,7 +164,7 @@ $lang['accessdenied'] = 'Нямате необходимите прав $lang['mediausage'] = 'Ползвайте следния синтаксис, за да упоменете файла:'; $lang['mediaview'] = 'Преглед на оригиналния файл'; $lang['mediaroot'] = 'root'; -$lang['mediaupload'] = 'Качете файл в текущото именно пространство. За създаване на подимено пространство, добавете име преди това на файла като ги разделите с двоеточие в полето "Качи като"'; +$lang['mediaupload'] = 'Качете файл в текущото именно пространство. За създаване на подименно пространство, добавете име преди това на файла като ги разделите с двоеточие в полето "Качи като"'; $lang['mediaextchange'] = 'Разширението на файла е сменено от .%s на .%s!'; $lang['reference'] = 'Връзки за'; $lang['ref_inuse'] = 'Файлът не може да бъде изтрит, защото все още се ползва от следните страници:'; @@ -236,7 +236,7 @@ $lang['admin_register'] = 'Добавяне на нов потребит $lang['metaedit'] = 'Редактиране на метаданни'; $lang['metasaveerr'] = 'Записването на метаданните се провали'; $lang['metasaveok'] = 'Метаданните са запазени успешно'; -$lang['img_backto'] = 'Назад към'; +$lang['btn_img_backto'] = 'Назад към %s'; $lang['img_title'] = 'Заглавие'; $lang['img_caption'] = 'Надпис'; $lang['img_date'] = 'Дата'; @@ -249,10 +249,10 @@ $lang['img_camera'] = 'Фотоапарат'; $lang['img_keywords'] = 'Ключови думи'; $lang['img_width'] = 'Ширина'; $lang['img_height'] = 'Височина'; -$lang['img_manager'] = 'Преглед в диспечера на файлове'; +$lang['btn_mediaManager'] = 'Преглед в диспечера на файлове'; $lang['subscr_subscribe_success'] = '%s е добавен към списъка с абониралите се за %s'; $lang['subscr_subscribe_error'] = 'Грешка при добавянето на %s към списъка с абониралите се за %s'; -$lang['subscr_subscribe_noaddress'] = 'Добавянето ви към списъка с абонати не е възможно поради липсата на свързан адрес (на ел. поща) с профила ви.'; +$lang['subscr_subscribe_noaddress'] = 'Добавянето ви към списъка с абонати не е възможно поради липсата на свързан адрес (имейл) с профила ви.'; $lang['subscr_unsubscribe_success'] = '%s е премахнат от списъка с абониралите се за %s'; $lang['subscr_unsubscribe_error'] = 'Грешка при премахването на %s от списъка с абониралите се за %s'; $lang['subscr_already_subscribed'] = '%s е вече абониран за %s'; @@ -263,12 +263,12 @@ $lang['subscr_m_current_header'] = 'Текущи абонаменти'; $lang['subscr_m_unsubscribe'] = 'Прекратяване на абонамента'; $lang['subscr_m_subscribe'] = 'Абониране'; $lang['subscr_m_receive'] = 'Получаване'; -$lang['subscr_style_every'] = 'на ел. писмо при всяка промяна'; -$lang['subscr_style_digest'] = 'на ел. писмо с обобщение на промените във всяка страница (всеки %.2f дни)'; -$lang['subscr_style_list'] = 'на списък с променените страници от последното ел. писмо (всеки %.2f дни)'; +$lang['subscr_style_every'] = 'на имейл при всяка промяна'; +$lang['subscr_style_digest'] = 'на имейл с обобщение на промените във всяка страница (всеки %.2f дни)'; +$lang['subscr_style_list'] = 'на списък с променените страници от последния имейл (всеки %.2f дни)'; $lang['authtempfail'] = 'Удостоверяването на потребители не е възможно за момента. Ако продължи дълго, моля уведомете администратора на Wiki страницата.'; -$lang['authpwdexpire'] = 'Срока на паролата ви ще изтече след %d дни. Препорачително е да я смените по-скоро.'; -$lang['i_chooselang'] = 'Изберете вашия изик'; +$lang['authpwdexpire'] = 'Срока на паролата ви ще изтече след %d дни. Препоръчително е да я смените по-скоро.'; +$lang['i_chooselang'] = 'Изберете вашия език'; $lang['i_installer'] = 'Инсталатор на DokuWiki'; $lang['i_wikiname'] = 'Име на Wiki-то'; $lang['i_enableacl'] = 'Ползване на списък за достъп (ACL) [препоръчително]'; diff --git a/inc/lang/bg/register.txt b/inc/lang/bg/register.txt index 51fbb83fe..333428005 100644 --- a/inc/lang/bg/register.txt +++ b/inc/lang/bg/register.txt @@ -1,4 +1,4 @@ ====== Регистриране като нов потребител ====== -Моля, попълнете всичките полета отдолу, за да бъде създаден нов профил. Уверете се, че въведеният **адрес на ел. поща е правилен**. Ако няма поле за парола, ще ви бъде изпратена такава на въведения адрес. Потребителското име трябва да бъде валидно [[doku>pagename|име на страница]]. +Моля, попълнете всичките полета отдолу, за да бъде създаден нов профил. Уверете се, че въведеният **имейл адрес е правилен**. Ако няма поле за парола, ще ви бъде изпратена такава на въведения адрес. Потребителското име трябва да бъде валидно [[doku>pagename|име на страница]]. diff --git a/inc/lang/bg/resendpwd.txt b/inc/lang/bg/resendpwd.txt index 38e2d1fe4..19dffc070 100644 --- a/inc/lang/bg/resendpwd.txt +++ b/inc/lang/bg/resendpwd.txt @@ -1,3 +1,3 @@ ====== Пращане на нова парола ====== -Моля, въведете потребителското си име във формата по-долу, ако желаете да получите нова парола. По ел. поща ще получите линк, с който да потвърдите. +Моля, въведете потребителското си име във формата по-долу, ако желаете да получите нова парола. Чрез имейл ще получите линк, с който да потвърдите. diff --git a/inc/lang/bn/lang.php b/inc/lang/bn/lang.php index 8dece4ea0..230f3ef80 100644 --- a/inc/lang/bn/lang.php +++ b/inc/lang/bn/lang.php @@ -66,7 +66,6 @@ $lang['minoredit'] = 'ক্ষুদ্র পরিবর্তন $lang['draftdate'] = 'খসড়া উপর স্বতঃসংরক্ষণ'; $lang['nosecedit'] = 'পাতা ইতিমধ্যে পরিবর্তিত হয়েছিল, অধ্যায় তথ্যের পরিবর্তে পুরো পাতা লোড তারিখ সীমার বাইরে ছিল. '; -$lang['notloggedin'] = 'সম্ভবত আপনি লগইন ভুলে গেছেন?'; $lang['regmissing'] = 'দুঃখিত, আপনি সমস্ত ক্ষেত্রগুলি পূরণ করা আবশ্যক.'; $lang['reguexists'] = 'দুঃখিত, এই লগইন সঙ্গে একটি ব্যবহারকারী ইতিমধ্যেই বিদ্যমান.'; $lang['regsuccess'] = 'ব্যবহারকারী তৈরি করা হয়েছে এবং পাসওয়ার্ড ইমেইল করে পাঠানো হয়েছিল.'; diff --git a/inc/lang/ca-valencia/lang.php b/inc/lang/ca-valencia/lang.php index 9ab423783..6e6f2a662 100644 --- a/inc/lang/ca-valencia/lang.php +++ b/inc/lang/ca-valencia/lang.php @@ -174,7 +174,7 @@ $lang['admin_register'] = 'Afegir nou usuari'; $lang['metaedit'] = 'Editar meta-senyes'; $lang['metasaveerr'] = 'Erro escrivint meta-senyes'; $lang['metasaveok'] = 'Meta-senyes guardades'; -$lang['img_backto'] = 'Tornar a'; +$lang['btn_img_backto'] = 'Tornar a %s'; $lang['img_title'] = 'Títul'; $lang['img_caption'] = 'Subtítul'; $lang['img_date'] = 'Data'; diff --git a/inc/lang/ca/lang.php b/inc/lang/ca/lang.php index fd19c6834..1d297a1b1 100644 --- a/inc/lang/ca/lang.php +++ b/inc/lang/ca/lang.php @@ -228,7 +228,7 @@ $lang['admin_register'] = 'Afegeix nou usuari'; $lang['metaedit'] = 'Edita metadades'; $lang['metasaveerr'] = 'No s\'han pogut escriure les metadades'; $lang['metasaveok'] = 'S\'han desat les metadades'; -$lang['img_backto'] = 'Torna a'; +$lang['btn_img_backto'] = 'Torna a %s'; $lang['img_title'] = 'Títol'; $lang['img_caption'] = 'Peu d\'imatge'; $lang['img_date'] = 'Data'; diff --git a/inc/lang/cs/lang.php b/inc/lang/cs/lang.php index a0f69b3dc..a491c1533 100644 --- a/inc/lang/cs/lang.php +++ b/inc/lang/cs/lang.php @@ -248,7 +248,7 @@ $lang['admin_register'] = 'Přidat nového uživatele'; $lang['metaedit'] = 'Upravit Metadata'; $lang['metasaveerr'] = 'Chyba při zápisu metadat'; $lang['metasaveok'] = 'Metadata uložena'; -$lang['img_backto'] = 'Zpět na'; +$lang['btn_img_backto'] = 'Zpět na %s'; $lang['img_title'] = 'Titulek'; $lang['img_caption'] = 'Popis'; $lang['img_date'] = 'Datum'; @@ -261,7 +261,7 @@ $lang['img_camera'] = 'Typ fotoaparátu'; $lang['img_keywords'] = 'Klíčová slova'; $lang['img_width'] = 'Šířka'; $lang['img_height'] = 'Výška'; -$lang['img_manager'] = 'Zobrazit ve správě médií'; +$lang['btn_mediaManager'] = 'Zobrazit ve správě médií'; $lang['subscr_subscribe_success'] = '%s byl přihlášen do seznamu odběratelů %s'; $lang['subscr_subscribe_error'] = 'Došlo k chybě při přihlašování %s do seznamu odběratelů %s'; $lang['subscr_subscribe_noaddress'] = 'K Vašemu loginu neexistuje žádná adresa, nemohl jste být přihlášen do seznamu odběratelů.'; diff --git a/inc/lang/da/lang.php b/inc/lang/da/lang.php index eb50bb240..bdf882ba7 100644 --- a/inc/lang/da/lang.php +++ b/inc/lang/da/lang.php @@ -246,7 +246,7 @@ $lang['admin_register'] = 'Tilføj ny bruger'; $lang['metaedit'] = 'Rediger metadata'; $lang['metasaveerr'] = 'Skrivning af metadata fejlede'; $lang['metasaveok'] = 'Metadata gemt'; -$lang['img_backto'] = 'Tilbage til'; +$lang['btn_img_backto'] = 'Tilbage til %s'; $lang['img_title'] = 'Titel'; $lang['img_caption'] = 'Billedtekst'; $lang['img_date'] = 'Dato'; @@ -259,7 +259,7 @@ $lang['img_camera'] = 'Kamera'; $lang['img_keywords'] = 'Emneord'; $lang['img_width'] = 'Bredde'; $lang['img_height'] = 'Højde'; -$lang['img_manager'] = 'Vis i Media Manager'; +$lang['btn_mediaManager'] = 'Vis i Media Manager'; $lang['subscr_subscribe_success'] = 'Tilføjede %s til abonnement listen for %s'; $lang['subscr_subscribe_error'] = 'Fejl ved tilføjelse af %s til abonnement listen for %s'; $lang['subscr_subscribe_noaddress'] = 'Der er ikke nogen addresse forbundet til din bruger, så du kan ikke blive tilføjet til abonnement listen'; diff --git a/inc/lang/de-informal/lang.php b/inc/lang/de-informal/lang.php index be3f14a18..2e2e04149 100644 --- a/inc/lang/de-informal/lang.php +++ b/inc/lang/de-informal/lang.php @@ -251,7 +251,7 @@ $lang['admin_register'] = 'Neuen Benutzer anmelden'; $lang['metaedit'] = 'Metadaten bearbeiten'; $lang['metasaveerr'] = 'Die Metadaten konnten nicht gesichert werden'; $lang['metasaveok'] = 'Metadaten gesichert'; -$lang['img_backto'] = 'Zurück zu'; +$lang['btn_img_backto'] = 'Zurück zu %s'; $lang['img_title'] = 'Titel'; $lang['img_caption'] = 'Bildunterschrift'; $lang['img_date'] = 'Datum'; @@ -264,7 +264,7 @@ $lang['img_camera'] = 'Kamera'; $lang['img_keywords'] = 'Schlagwörter'; $lang['img_width'] = 'Breite'; $lang['img_height'] = 'Höhe'; -$lang['img_manager'] = 'Im Medien-Manager anzeigen'; +$lang['btn_mediaManager'] = 'Im Medien-Manager anzeigen'; $lang['subscr_subscribe_success'] = 'Die Seite %s wurde zur Abonnementliste von %s hinzugefügt'; $lang['subscr_subscribe_error'] = 'Fehler beim Hinzufügen von %s zur Abonnementliste von %s'; $lang['subscr_subscribe_noaddress'] = 'In deinem Account ist keine E-Mail-Adresse hinterlegt. Dadurch kann die Seite nicht abonniert werden'; diff --git a/inc/lang/de/lang.php b/inc/lang/de/lang.php index 1840f2a6c..c6f11abc9 100644 --- a/inc/lang/de/lang.php +++ b/inc/lang/de/lang.php @@ -24,6 +24,7 @@ * @author Mateng Schimmerlos <mateng@firemail.de> * @author Benedikt Fey <spam@lifeisgoooood.de> * @author Joerg <scooter22@gmx.de> + * @author Simon <st103267@stud.uni-stuttgart.de> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -68,6 +69,8 @@ $lang['btn_register'] = 'Registrieren'; $lang['btn_apply'] = 'Übernehmen'; $lang['btn_media'] = 'Medien-Manager'; $lang['btn_deleteuser'] = 'Benutzerprofil löschen'; +$lang['btn_img_backto'] = 'Zurück zu %s'; +$lang['btn_mediaManager'] = 'Im Medien-Manager anzeigen'; $lang['loggedinas'] = 'Angemeldet als'; $lang['user'] = 'Benutzername'; $lang['pass'] = 'Passwort'; @@ -92,6 +95,7 @@ $lang['regbadmail'] = 'Die angegebene E-Mail-Adresse scheint ungülti $lang['regbadpass'] = 'Die beiden eingegeben Passwörter stimmen nicht überein. Bitte versuchen Sie es noch einmal.'; $lang['regpwmail'] = 'Ihr DokuWiki-Passwort'; $lang['reghere'] = 'Sie haben noch keinen Zugang? Hier registrieren'; +$lang['notloggedin'] = 'Haben Sie vergessen sich einzuloggen?'; $lang['profna'] = 'Änderung des Benutzerprofils in diesem Wiki nicht möglich.'; $lang['profnochange'] = 'Keine Änderungen, nichts zu tun.'; $lang['profnoempty'] = 'Es muss ein Name und eine E-Mail-Adresse angegeben werden.'; @@ -253,7 +257,6 @@ $lang['admin_register'] = 'Neuen Benutzer anmelden'; $lang['metaedit'] = 'Metadaten bearbeiten'; $lang['metasaveerr'] = 'Die Metadaten konnten nicht gesichert werden'; $lang['metasaveok'] = 'Metadaten gesichert'; -$lang['img_backto'] = 'Zurück zu'; $lang['img_title'] = 'Titel'; $lang['img_caption'] = 'Bildunterschrift'; $lang['img_date'] = 'Datum'; @@ -266,7 +269,6 @@ $lang['img_camera'] = 'Kamera'; $lang['img_keywords'] = 'Schlagwörter'; $lang['img_width'] = 'Breite'; $lang['img_height'] = 'Höhe'; -$lang['img_manager'] = 'Im Medien-Manager anzeigen'; $lang['subscr_subscribe_success'] = '%s hat nun Änderungen der Seite %s abonniert'; $lang['subscr_subscribe_error'] = '%s kann die Änderungen der Seite %s nicht abonnieren'; $lang['subscr_subscribe_noaddress'] = 'Weil Ihre E-Mail-Adresse fehlt, können Sie das Thema nicht abonnieren'; diff --git a/inc/lang/el/lang.php b/inc/lang/el/lang.php index 170e101a5..d97721cdb 100644 --- a/inc/lang/el/lang.php +++ b/inc/lang/el/lang.php @@ -241,7 +241,7 @@ $lang['admin_register'] = 'Προσθήκη νέου χρήστη'; $lang['metaedit'] = 'Τροποποίηση metadata'; $lang['metasaveerr'] = 'Η αποθήκευση των metadata απέτυχε'; $lang['metasaveok'] = 'Επιτυχής αποθήκευση metadata'; -$lang['img_backto'] = 'Επιστροφή σε'; +$lang['btn_img_backto'] = 'Επιστροφή σε %s'; $lang['img_title'] = 'Τίτλος'; $lang['img_caption'] = 'Λεζάντα'; $lang['img_date'] = 'Ημερομηνία'; @@ -254,7 +254,7 @@ $lang['img_camera'] = 'Camera'; $lang['img_keywords'] = 'Λέξεις-κλειδιά'; $lang['img_width'] = 'Πλάτος'; $lang['img_height'] = 'Ύψος'; -$lang['img_manager'] = 'Εμφάνιση στον διαχειριστή πολυμέσων'; +$lang['btn_mediaManager'] = 'Εμφάνιση στον διαχειριστή πολυμέσων'; $lang['subscr_subscribe_success'] = 'Ο/η %s προστέθηκε στην λίστα ειδοποιήσεων για το %s'; $lang['subscr_subscribe_error'] = 'Σφάλμα κατά την προσθήκη του/της %s στην λίστα ειδοποιήσεων για το %s'; $lang['subscr_subscribe_noaddress'] = 'Δεν υπάρχει διεύθυνση ταχυδρομείου συσχετισμένη με το όνομα χρήστη σας. Κατά συνέπεια δεν μπορείτε να προστεθείτε στην λίστα ειδοποιήσεων'; diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php index fccb470e3..592289185 100644 --- a/inc/lang/en/lang.php +++ b/inc/lang/en/lang.php @@ -52,6 +52,8 @@ $lang['btn_register'] = 'Register'; $lang['btn_apply'] = 'Apply'; $lang['btn_media'] = 'Media Manager'; $lang['btn_deleteuser'] = 'Remove My Account'; +$lang['btn_img_backto'] = 'Back to %s'; +$lang['btn_mediaManager'] = 'View in media manager'; $lang['loggedinas'] = 'Logged in as'; $lang['user'] = 'Username'; @@ -78,7 +80,6 @@ $lang['regbadmail'] = 'The given email address looks invalid - if you $lang['regbadpass'] = 'The two given passwords are not identical, please try again.'; $lang['regpwmail'] = 'Your DokuWiki password'; $lang['reghere'] = 'You don\'t have an account yet? Just get one'; -$lang['notloggedin'] = 'Perhaps you forgot to login?'; $lang['profna'] = 'This wiki does not support profile modification'; $lang['profnochange'] = 'No changes, nothing to do.'; @@ -192,6 +193,11 @@ $lang['difflink'] = 'Link to this comparison view'; $lang['diff_type'] = 'View differences:'; $lang['diff_inline'] = 'Inline'; $lang['diff_side'] = 'Side by Side'; +$lang['diffprevrev'] = 'Previous revision'; +$lang['diffnextrev'] = 'Next revision'; +$lang['difflastrev'] = 'Last revision'; +$lang['diffbothprevrev'] = 'Both sides previous revision'; +$lang['diffbothnextrev'] = 'Both sides next revision'; $lang['line'] = 'Line'; $lang['breadcrumb'] = 'Trace'; $lang['youarehere'] = 'You are here'; @@ -254,7 +260,6 @@ $lang['admin_register'] = 'Add new user'; $lang['metaedit'] = 'Edit Metadata'; $lang['metasaveerr'] = 'Writing metadata failed'; $lang['metasaveok'] = 'Metadata saved'; -$lang['img_backto'] = 'Back to'; $lang['img_title'] = 'Title'; $lang['img_caption'] = 'Caption'; $lang['img_date'] = 'Date'; @@ -267,7 +272,6 @@ $lang['img_camera'] = 'Camera'; $lang['img_keywords'] = 'Keywords'; $lang['img_width'] = 'Width'; $lang['img_height'] = 'Height'; -$lang['img_manager'] = 'View in media manager'; $lang['subscr_subscribe_success'] = 'Added %s to subscription list for %s'; $lang['subscr_subscribe_error'] = 'Error adding %s to subscription list for %s'; diff --git a/inc/lang/eo/denied.txt b/inc/lang/eo/denied.txt index 0be6a2e84..e0abba12c 100644 --- a/inc/lang/eo/denied.txt +++ b/inc/lang/eo/denied.txt @@ -1,4 +1,4 @@ ====== Aliro malpermesita ====== -Vi ne havas sufiĉajn rajtojn rigardi ĉi tiujn paĝojn. +Vi ne havas sufiĉajn rajtojn daŭrigi. diff --git a/inc/lang/eo/lang.php b/inc/lang/eo/lang.php index 97231bdce..4a4a52cac 100644 --- a/inc/lang/eo/lang.php +++ b/inc/lang/eo/lang.php @@ -54,6 +54,8 @@ $lang['btn_register'] = 'Registriĝi'; $lang['btn_apply'] = 'Apliki'; $lang['btn_media'] = 'Medio-administrilo'; $lang['btn_deleteuser'] = 'Forigi mian konton'; +$lang['btn_img_backto'] = 'Iri reen al %s'; +$lang['btn_mediaManager'] = 'Rigardi en aŭdvidaĵ-administrilo'; $lang['loggedinas'] = 'Ensalutinta kiel'; $lang['user'] = 'Uzant-nomo'; $lang['pass'] = 'Pasvorto'; @@ -184,6 +186,11 @@ $lang['difflink'] = 'Ligilo al kompara rigardo'; $lang['diff_type'] = 'Rigardi malsamojn:'; $lang['diff_inline'] = 'Samlinie'; $lang['diff_side'] = 'Apude'; +$lang['diffprevrev'] = 'Antaŭa revizio'; +$lang['diffnextrev'] = 'Sekva revizio'; +$lang['difflastrev'] = 'Lasta revizio'; +$lang['diffbothprevrev'] = 'Sur ambaŭ flankoj antaŭa revizio'; +$lang['diffbothnextrev'] = 'Sur ambaŭ flankoj sekva revizio'; $lang['line'] = 'Linio'; $lang['breadcrumb'] = 'Paŝoj'; $lang['youarehere'] = 'Vi estas ĉi tie'; @@ -240,7 +247,6 @@ $lang['admin_register'] = 'Aldoni novan uzanton'; $lang['metaedit'] = 'Redakti metadatumaron'; $lang['metasaveerr'] = 'La konservo de metadatumaro malsukcesis'; $lang['metasaveok'] = 'La metadatumaro konserviĝis'; -$lang['img_backto'] = 'Iri reen al'; $lang['img_title'] = 'Titolo'; $lang['img_caption'] = 'Priskribo'; $lang['img_date'] = 'Dato'; @@ -253,7 +259,6 @@ $lang['img_camera'] = 'Kamerao'; $lang['img_keywords'] = 'Ŝlosilvortoj'; $lang['img_width'] = 'Larĝeco'; $lang['img_height'] = 'Alteco'; -$lang['img_manager'] = 'Rigardi en aŭdvidaĵ-administrilo'; $lang['subscr_subscribe_success'] = 'Aldonis %s al la abonlisto por %s'; $lang['subscr_subscribe_error'] = 'Eraro dum aldono de %s al la abonlisto por %s'; $lang['subscr_subscribe_noaddress'] = 'Ne estas adreso ligita al via ensaluto, ne eblas aldoni vin al la abonlisto'; diff --git a/inc/lang/es/jquery.ui.datepicker.js b/inc/lang/es/jquery.ui.datepicker.js index ae32124e7..763d4cedd 100644 --- a/inc/lang/es/jquery.ui.datepicker.js +++ b/inc/lang/es/jquery.ui.datepicker.js @@ -9,9 +9,9 @@ jQuery(function($){ monthNames: ['enero','febrero','marzo','abril','mayo','junio', 'julio','agosto','septiembre','octubre','noviembre','diciembre'], monthNamesShort: ['ene','feb','mar','abr','may','jun', - 'jul','ago','sep','oct','nov','dic'], + 'jul','ogo','sep','oct','nov','dic'], dayNames: ['domingo','lunes','martes','miércoles','jueves','viernes','sábado'], - dayNamesShort: ['dom','lun','mar','mié','jue','vie','sáb'], + dayNamesShort: ['dom','lun','mar','mié','juv','vie','sáb'], dayNamesMin: ['D','L','M','X','J','V','S'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', diff --git a/inc/lang/es/lang.php b/inc/lang/es/lang.php index b9f81dd82..9525a4c08 100644 --- a/inc/lang/es/lang.php +++ b/inc/lang/es/lang.php @@ -32,6 +32,8 @@ * @author monica <may.dorado@gmail.com> * @author Antonio Bueno <atnbueno@gmail.com> * @author Juan De La Cruz <juann.dlc@gmail.com> + * @author Fernando <fdiezala@gmail.com> + * @author Eloy <ej.perezgomez@gmail.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -76,6 +78,8 @@ $lang['btn_register'] = 'Registrarse'; $lang['btn_apply'] = 'Aplicar'; $lang['btn_media'] = 'Gestor de ficheros'; $lang['btn_deleteuser'] = 'Elimina Mi Cuenta'; +$lang['btn_img_backto'] = 'Volver a %s'; +$lang['btn_mediaManager'] = 'Ver en el Administrador de medios'; $lang['loggedinas'] = 'Conectado como '; $lang['user'] = 'Usuario'; $lang['pass'] = 'Contraseña'; @@ -207,6 +211,11 @@ $lang['difflink'] = 'Enlace a la vista de comparación'; $lang['diff_type'] = 'Ver diferencias'; $lang['diff_inline'] = 'En línea'; $lang['diff_side'] = 'Lado a lado'; +$lang['diffprevrev'] = 'Revisión previa'; +$lang['diffnextrev'] = 'Próxima revisión'; +$lang['difflastrev'] = 'Última revisión'; +$lang['diffbothprevrev'] = 'Ambos lados, revisión anterior'; +$lang['diffbothnextrev'] = 'Ambos lados, revisión siguiente'; $lang['line'] = 'Línea'; $lang['breadcrumb'] = 'Traza'; $lang['youarehere'] = 'Estás aquí'; @@ -263,7 +272,6 @@ $lang['admin_register'] = 'Añadir nuevo usuario'; $lang['metaedit'] = 'Editar metadatos'; $lang['metasaveerr'] = 'La escritura de los metadatos ha fallado'; $lang['metasaveok'] = 'Los metadatos han sido guardados'; -$lang['img_backto'] = 'Volver a'; $lang['img_title'] = 'Título'; $lang['img_caption'] = 'Epígrafe'; $lang['img_date'] = 'Fecha'; @@ -276,7 +284,6 @@ $lang['img_camera'] = 'Cámara'; $lang['img_keywords'] = 'Palabras claves'; $lang['img_width'] = 'Ancho'; $lang['img_height'] = 'Alto'; -$lang['img_manager'] = 'Ver en el Administrador de medios'; $lang['subscr_subscribe_success'] = 'Se agregó %s a las listas de suscripción para %s'; $lang['subscr_subscribe_error'] = 'Error al agregar %s a las listas de suscripción para %s'; $lang['subscr_subscribe_noaddress'] = 'No hay dirección asociada con tu registro, no se puede agregarte a la lista de suscripción'; @@ -322,13 +329,13 @@ $lang['i_license_none'] = 'No mostrar ninguna información sobre licencia $lang['i_pop_field'] = 'Por favor, ayúdanos a mejorar la experiencia de DokuWiki:'; $lang['i_pop_label'] = 'Una vez al mes, enviar información anónima de uso de datos a los desarrolladores de DokuWiki'; $lang['recent_global'] = 'Actualmente estás viendo los cambios dentro del namespace <b>%s</b>. También puedes <a href="%s">ver los cambios recientes en el wiki completo</a>.'; -$lang['years'] = '%d años atrás'; -$lang['months'] = '%d meses atrás'; -$lang['weeks'] = '%d semanas atrás'; -$lang['days'] = '%d días atrás'; -$lang['hours'] = '%d horas atrás'; -$lang['minutes'] = '%d minutos atrás'; -$lang['seconds'] = '%d segundos atrás'; +$lang['years'] = 'hace %d años'; +$lang['months'] = 'hace %d meses'; +$lang['weeks'] = 'hace %d semanas'; +$lang['days'] = 'hace %d días'; +$lang['hours'] = 'hace %d horas'; +$lang['minutes'] = 'hace %d minutos'; +$lang['seconds'] = 'hace %d segundos'; $lang['wordblock'] = 'Sus cambios no se han guardado porque contienen textos bloqueados (spam).'; $lang['media_uploadtab'] = 'Cargar'; $lang['media_searchtab'] = 'Buscar'; diff --git a/inc/lang/et/lang.php b/inc/lang/et/lang.php index ee9b1d969..49fc33e17 100644 --- a/inc/lang/et/lang.php +++ b/inc/lang/et/lang.php @@ -242,7 +242,7 @@ $lang['admin_register'] = 'Lisa kasutaja'; $lang['metaedit'] = 'Muuda lisainfot'; $lang['metasaveerr'] = 'Lisainfo salvestamine läks untsu.'; $lang['metasaveok'] = 'Lisainfo salvestatud'; -$lang['img_backto'] = 'Tagasi'; +$lang['btn_img_backto'] = 'Tagasi %s'; $lang['img_title'] = 'Tiitel'; $lang['img_caption'] = 'Kirjeldus'; $lang['img_date'] = 'Kuupäev'; diff --git a/inc/lang/eu/lang.php b/inc/lang/eu/lang.php index c7e7ead9a..9a38099b3 100644 --- a/inc/lang/eu/lang.php +++ b/inc/lang/eu/lang.php @@ -227,7 +227,7 @@ $lang['admin_register'] = 'Erabiltzaile berria gehitu'; $lang['metaedit'] = 'Metadatua Aldatu'; $lang['metasaveerr'] = 'Metadatuaren idazketak huts egin du'; $lang['metasaveok'] = 'Metadatua gordea'; -$lang['img_backto'] = 'Atzera hona'; +$lang['btn_img_backto'] = 'Atzera hona %s'; $lang['img_title'] = 'Izenburua'; $lang['img_caption'] = 'Epigrafea'; $lang['img_date'] = 'Data'; @@ -240,7 +240,7 @@ $lang['img_camera'] = 'Kamera'; $lang['img_keywords'] = 'Hitz-gakoak'; $lang['img_width'] = 'Zabalera'; $lang['img_height'] = 'Altuera'; -$lang['img_manager'] = 'Media kudeatzailean ikusi'; +$lang['btn_mediaManager'] = 'Media kudeatzailean ikusi'; $lang['subscr_subscribe_success'] = '%s gehitua %s-ren harpidetza zerrendara'; $lang['subscr_subscribe_error'] = 'Errorea %s gehitzen %s-ren harpidetza zerrendara'; $lang['subscr_subscribe_noaddress'] = 'Ez dago helbiderik zure login-arekin lotuta, ezin zara harpidetza zerrendara gehitua izan.'; diff --git a/inc/lang/fa/lang.php b/inc/lang/fa/lang.php index dbad62890..1e819419f 100644 --- a/inc/lang/fa/lang.php +++ b/inc/lang/fa/lang.php @@ -240,7 +240,7 @@ $lang['admin_register'] = 'یک حساب جدید بسازید'; $lang['metaedit'] = 'ویرایش دادههای متا'; $lang['metasaveerr'] = 'نوشتن دادهنما با مشکل مواجه شد'; $lang['metasaveok'] = 'دادهنما ذخیره شد'; -$lang['img_backto'] = 'بازگشت به '; +$lang['btn_img_backto'] = 'بازگشت به %s'; $lang['img_title'] = 'عنوان تصویر'; $lang['img_caption'] = 'عنوان'; $lang['img_date'] = 'تاریخ'; @@ -253,7 +253,7 @@ $lang['img_camera'] = 'دوربین'; $lang['img_keywords'] = 'واژههای کلیدی'; $lang['img_width'] = 'عرض'; $lang['img_height'] = 'ارتفاع'; -$lang['img_manager'] = 'دیدن در مدیریت محتوای چند رسانه ای'; +$lang['btn_mediaManager'] = 'دیدن در مدیریت محتوای چند رسانه ای'; $lang['subscr_subscribe_success'] = '%s به لیست آبونه %s افزوده شد'; $lang['subscr_subscribe_error'] = 'اشکال در افزودن %s به لیست آبونه %s'; $lang['subscr_subscribe_noaddress'] = 'هیچ آدرسی برای این عضویت اضافه نشده است، شما نمیتوانید به لیست آبونه اضافه شوید'; diff --git a/inc/lang/fi/lang.php b/inc/lang/fi/lang.php index feefc3da8..9b877013e 100644 --- a/inc/lang/fi/lang.php +++ b/inc/lang/fi/lang.php @@ -240,7 +240,7 @@ $lang['admin_register'] = 'Lisää uusi käyttäjä'; $lang['metaedit'] = 'Muokkaa metadataa'; $lang['metasaveerr'] = 'Metadatan kirjoittaminen epäonnistui'; $lang['metasaveok'] = 'Metadata tallennettu'; -$lang['img_backto'] = 'Takaisin'; +$lang['btn_img_backto'] = 'Takaisin %s'; $lang['img_title'] = 'Otsikko'; $lang['img_caption'] = 'Kuvateksti'; $lang['img_date'] = 'Päivämäärä'; @@ -253,7 +253,7 @@ $lang['img_camera'] = 'Kamera'; $lang['img_keywords'] = 'Avainsanat'; $lang['img_width'] = 'Leveys'; $lang['img_height'] = 'Korkeus'; -$lang['img_manager'] = 'Näytä mediamanagerissa'; +$lang['btn_mediaManager'] = 'Näytä mediamanagerissa'; $lang['subscr_subscribe_success'] = '%s lisätty %s tilauslistalle'; $lang['subscr_subscribe_error'] = 'Virhe lisättäessä %s tilauslistalle %s'; $lang['subscr_subscribe_noaddress'] = 'Login tiedoissasi ei ole sähköpostiosoitetta. Sinua ei voi lisätä tilaukseen'; diff --git a/inc/lang/fo/lang.php b/inc/lang/fo/lang.php index 161e7321a..2613186eb 100644 --- a/inc/lang/fo/lang.php +++ b/inc/lang/fo/lang.php @@ -157,7 +157,7 @@ $lang['admin_register'] = 'Upprætta nýggjan brúkara'; $lang['metaedit'] = 'Rætta metadáta'; $lang['metasaveerr'] = 'Brek við skriving av metadáta'; $lang['metasaveok'] = 'Metadáta goymt'; -$lang['img_backto'] = 'Aftur til'; +$lang['btn_img_backto'] = 'Aftur til %s'; $lang['img_title'] = 'Heitið'; $lang['img_caption'] = 'Myndatekstur'; $lang['img_date'] = 'Dato'; diff --git a/inc/lang/fr/lang.php b/inc/lang/fr/lang.php index 32e3055f7..1f11608e6 100644 --- a/inc/lang/fr/lang.php +++ b/inc/lang/fr/lang.php @@ -30,6 +30,8 @@ * @author Emmanuel <seedfloyd@gmail.com> * @author Jérôme Brandt <jeromebrandt@gmail.com> * @author Wild <wild.dagger@free.fr> + * @author ggallon <gwenael.gallon@mac.com> + * @author David VANTYGHEM <david.vantyghem@free.fr> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -62,7 +64,7 @@ $lang['btn_delete'] = 'Effacer'; $lang['btn_back'] = 'Retour'; $lang['btn_backlink'] = 'Liens vers cette page'; $lang['btn_backtomedia'] = 'Retour à la sélection du fichier média'; -$lang['btn_subscribe'] = 'S\'abonner à la page'; +$lang['btn_subscribe'] = 'S\'abonner à cette page'; $lang['btn_profile'] = 'Mettre à jour le profil'; $lang['btn_reset'] = 'Réinitialiser'; $lang['btn_resendpwd'] = 'Définir un nouveau mot de passe'; @@ -74,6 +76,8 @@ $lang['btn_register'] = 'Créer un compte'; $lang['btn_apply'] = 'Appliquer'; $lang['btn_media'] = 'Gestionnaire de médias'; $lang['btn_deleteuser'] = 'Supprimer mon compte'; +$lang['btn_img_backto'] = 'Retour à %s'; +$lang['btn_mediaManager'] = 'Voir dans le gestionnaire de médias'; $lang['loggedinas'] = 'Connecté en tant que '; $lang['user'] = 'Utilisateur'; $lang['pass'] = 'Mot de passe'; @@ -93,7 +97,7 @@ $lang['regmissing'] = 'Désolé, vous devez remplir tous les champs.' $lang['reguexists'] = 'Désolé, ce nom d\'utilisateur est déjà utilisé.'; $lang['regsuccess'] = 'L\'utilisateur a été créé. Le mot de passe a été expédié par courriel.'; $lang['regsuccess2'] = 'L\'utilisateur a été créé.'; -$lang['regmailfail'] = 'Il semble y avoir un problème à l\'envoi du courriel. Contactez l\'administrateur.'; +$lang['regmailfail'] = 'On dirait qu\'il y a eu une erreur lors de l\'envoi du mot de passe de messagerie. Veuillez contacter l\'administrateur !'; $lang['regbadmail'] = 'L\'adresse de courriel semble incorrecte. Si vous pensez que c\'est une erreur, contactez l\'administrateur.'; $lang['regbadpass'] = 'Les deux mots de passe fournis sont différents, veuillez recommencez.'; $lang['regpwmail'] = 'Votre mot de passe DokuWiki'; @@ -203,6 +207,9 @@ $lang['difflink'] = 'Lien vers cette vue comparative'; $lang['diff_type'] = 'Voir les différences :'; $lang['diff_inline'] = 'Sur une seule ligne'; $lang['diff_side'] = 'Côte à côte'; +$lang['diffprevrev'] = 'Révision précédente'; +$lang['diffnextrev'] = 'Prochaine révision'; +$lang['difflastrev'] = 'Dernière révision'; $lang['line'] = 'Ligne'; $lang['breadcrumb'] = 'Piste'; $lang['youarehere'] = 'Vous êtes ici'; @@ -259,7 +266,6 @@ $lang['admin_register'] = 'Ajouter un nouvel utilisateur'; $lang['metaedit'] = 'Modifier les métadonnées'; $lang['metasaveerr'] = 'Erreur lors de l\'enregistrement des métadonnées'; $lang['metasaveok'] = 'Métadonnées enregistrées'; -$lang['img_backto'] = 'Retour à'; $lang['img_title'] = 'Titre'; $lang['img_caption'] = 'Légende'; $lang['img_date'] = 'Date'; @@ -272,7 +278,6 @@ $lang['img_camera'] = 'Appareil photo'; $lang['img_keywords'] = 'Mots-clés'; $lang['img_width'] = 'Largeur'; $lang['img_height'] = 'Hauteur'; -$lang['img_manager'] = 'Voir dans le gestionnaire de médias'; $lang['subscr_subscribe_success'] = '%s a été ajouté à la liste de souscription de %s'; $lang['subscr_subscribe_error'] = 'Erreur à l\'ajout de %s à la liste de souscription de %s'; $lang['subscr_subscribe_noaddress'] = 'Il n\'y a pas d\'adresse associée à votre identifiant, vous ne pouvez pas être ajouté à la liste de souscription'; diff --git a/inc/lang/fr/subscr_form.txt b/inc/lang/fr/subscr_form.txt index 49c0cf443..94e70afbd 100644 --- a/inc/lang/fr/subscr_form.txt +++ b/inc/lang/fr/subscr_form.txt @@ -1,3 +1,3 @@ ====== Gestion de l'abonnement ====== -Cette page vous permet de gérer vos abonnements à la page et à la catégorie courantes
\ No newline at end of file +Cette page vous permet de gérer vos abonnements à la page et à la catégorie courantes.
\ No newline at end of file diff --git a/inc/lang/gl/lang.php b/inc/lang/gl/lang.php index 65967a3b5..0c81f1fb2 100644 --- a/inc/lang/gl/lang.php +++ b/inc/lang/gl/lang.php @@ -230,7 +230,7 @@ $lang['admin_register'] = 'Engadir novo usuario'; $lang['metaedit'] = 'Editar Metadatos'; $lang['metasaveerr'] = 'Non se puideron escribir os metadatos'; $lang['metasaveok'] = 'Metadatos gardados'; -$lang['img_backto'] = 'Volver a'; +$lang['btn_img_backto'] = 'Volver a %s'; $lang['img_title'] = 'Título'; $lang['img_caption'] = 'Lenda'; $lang['img_date'] = 'Data'; @@ -243,7 +243,7 @@ $lang['img_camera'] = 'Cámara'; $lang['img_keywords'] = 'Verbas chave'; $lang['img_width'] = 'Ancho'; $lang['img_height'] = 'Alto'; -$lang['img_manager'] = 'Ver no xestor de arquivos-media'; +$lang['btn_mediaManager'] = 'Ver no xestor de arquivos-media'; $lang['subscr_subscribe_success'] = 'Engadido %s á lista de subscrición para %s'; $lang['subscr_subscribe_error'] = 'Erro ao tentar engadir %s á lista de subscrición para %s'; $lang['subscr_subscribe_noaddress'] = 'Non hai enderezos asociados co teu inicio de sesión, non é posíbel engadirte á lista de subscrición'; diff --git a/inc/lang/he/lang.php b/inc/lang/he/lang.php index 8efe0da17..c9a01a193 100644 --- a/inc/lang/he/lang.php +++ b/inc/lang/he/lang.php @@ -243,7 +243,7 @@ $lang['admin_register'] = 'הוספת משתמש חדש'; $lang['metaedit'] = 'עריכת נתוני העל'; $lang['metasaveerr'] = 'אירע כשל בשמירת נתוני העל'; $lang['metasaveok'] = 'נתוני העל נשמרו'; -$lang['img_backto'] = 'חזרה אל'; +$lang['btn_img_backto'] = 'חזרה אל %s'; $lang['img_title'] = 'שם'; $lang['img_caption'] = 'כותרת'; $lang['img_date'] = 'תאריך'; @@ -256,7 +256,7 @@ $lang['img_camera'] = 'מצלמה'; $lang['img_keywords'] = 'מילות מפתח'; $lang['img_width'] = 'רוחב'; $lang['img_height'] = 'גובה'; -$lang['img_manager'] = 'צפה במנהל מדיה'; +$lang['btn_mediaManager'] = 'צפה במנהל מדיה'; $lang['subscr_subscribe_success'] = '%s נוסף לרשימת המינויים לדף %s'; $lang['subscr_subscribe_error'] = 'אירעה שגיאה בהוספת %s לרשימת המינויים לדף %s'; $lang['subscr_subscribe_noaddress'] = 'אין כתובת המשויכת עם הכניסה שלך, נא ניתן להוסיף אותך לרשימת המינויים'; @@ -285,7 +285,7 @@ $lang['i_modified'] = 'משיקולי אבטחה סקריפט זה י עליך לחלץ שנית את הקבצים מהחבילה שהורדה או להיעזר בדף <a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a>'; $lang['i_funcna'] = 'פונקציית ה-PHP‏ <code>%s</code> אינה זמינה. יתכן כי מארח האתר חסם אותה מסיבה כלשהי?'; -$lang['i_phpver'] = 'גרסת PHP שלך <code>%s</code> נמוכה מ <code>%s</ code> הצורך. אתה צריך לשדרג PHP שלך להתקין.'; +$lang['i_phpver'] = 'גרסת PHP שלך <code>%s</code> נמוכה מ <code>%s</code> הצורך. אתה צריך לשדרג PHP שלך להתקין.'; $lang['i_permfail'] = '<code>%s</code> אינה ניתנת לכתיבה על ידי DokuWiki. עליך לשנות הרשאות תיקייה זו!'; $lang['i_confexists'] = '<code>%s</code> כבר קיים'; $lang['i_writeerr'] = 'אין אפשרות ליצור את <code>%s</code>. נא לבדוק את הרשאות הקובץ/תיקייה וליצור את הקובץ ידנית.'; diff --git a/inc/lang/hi/lang.php b/inc/lang/hi/lang.php index 184eeedbc..95c443ae9 100644 --- a/inc/lang/hi/lang.php +++ b/inc/lang/hi/lang.php @@ -103,7 +103,7 @@ $lang['qb_extlink'] = 'बाह्य कड़ी'; $lang['qb_hr'] = 'खड़ी रेखा'; $lang['qb_sig'] = 'हस्ताक्षर डालें'; $lang['admin_register'] = 'नया उपयोगकर्ता जोड़ें'; -$lang['img_backto'] = 'वापस जाना'; +$lang['btn_img_backto'] = 'वापस जाना %s'; $lang['img_title'] = 'शीर्षक'; $lang['img_caption'] = 'सहशीर्षक'; $lang['img_date'] = 'तिथि'; diff --git a/inc/lang/hr/lang.php b/inc/lang/hr/lang.php index f19610827..544541ab2 100644 --- a/inc/lang/hr/lang.php +++ b/inc/lang/hr/lang.php @@ -204,7 +204,7 @@ $lang['admin_register'] = 'Dodaj novog korisnika'; $lang['metaedit'] = 'Uredi metapodatake'; $lang['metasaveerr'] = 'Neuspješno zapisivanje metapodataka'; $lang['metasaveok'] = 'Spremljeni metapdaci'; -$lang['img_backto'] = 'Povratak na'; +$lang['btn_img_backto'] = 'Povratak na %s'; $lang['img_title'] = 'Naziv'; $lang['img_caption'] = 'Naslov'; $lang['img_date'] = 'Datum'; diff --git a/inc/lang/hu/lang.php b/inc/lang/hu/lang.php index a0aef9447..ad70438d9 100644 --- a/inc/lang/hu/lang.php +++ b/inc/lang/hu/lang.php @@ -243,7 +243,7 @@ $lang['admin_register'] = 'Új felhasználó'; $lang['metaedit'] = 'Metaadatok szerkesztése'; $lang['metasaveerr'] = 'A metaadatok írása nem sikerült'; $lang['metasaveok'] = 'Metaadatok elmentve'; -$lang['img_backto'] = 'Vissza'; +$lang['btn_img_backto'] = 'Vissza %s'; $lang['img_title'] = 'Cím'; $lang['img_caption'] = 'Képaláírás'; $lang['img_date'] = 'Dátum'; @@ -256,7 +256,7 @@ $lang['img_camera'] = 'Fényképezőgép típusa'; $lang['img_keywords'] = 'Kulcsszavak'; $lang['img_width'] = 'Szélesség'; $lang['img_height'] = 'Magasság'; -$lang['img_manager'] = 'Megtekintés a médiakezelőben'; +$lang['btn_mediaManager'] = 'Megtekintés a médiakezelőben'; $lang['subscr_subscribe_success'] = '%s hozzáadva az értesítési listához: %s'; $lang['subscr_subscribe_error'] = 'Hiba történt %s hozzáadásakor az értesítési listához: %s'; $lang['subscr_subscribe_noaddress'] = 'Nincs e-mail cím megadva az adataidnál, így a rendszer nem tudott hozzáadni az értesítési listához'; diff --git a/inc/lang/ia/lang.php b/inc/lang/ia/lang.php index 144dfe33b..1cc9bd8b5 100644 --- a/inc/lang/ia/lang.php +++ b/inc/lang/ia/lang.php @@ -202,7 +202,7 @@ $lang['admin_register'] = 'Adder nove usator'; $lang['metaedit'] = 'Modificar metadatos'; $lang['metasaveerr'] = 'Scriptura de metadatos fallite'; $lang['metasaveok'] = 'Metadatos salveguardate'; -$lang['img_backto'] = 'Retornar a'; +$lang['btn_img_backto'] = 'Retornar a %s'; $lang['img_title'] = 'Titulo'; $lang['img_caption'] = 'Legenda'; $lang['img_date'] = 'Data'; diff --git a/inc/lang/id/lang.php b/inc/lang/id/lang.php index 5cb5cb6ea..481ff2fbd 100644 --- a/inc/lang/id/lang.php +++ b/inc/lang/id/lang.php @@ -8,6 +8,7 @@ * @author Yustinus Waruwu <juswaruwu@gmail.com> * @author zamroni <therons@ymail.com> * @author umriya afini <bigdream.power@gmail.com> + * @author Arif Budiman <me@kangarif.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -50,7 +51,10 @@ $lang['btn_draftdel'] = 'Hapus draft'; $lang['btn_revert'] = 'Kembalikan'; $lang['btn_register'] = 'Daftar'; $lang['btn_apply'] = 'Terapkan'; +$lang['btn_media'] = 'Pengelola Media'; $lang['btn_deleteuser'] = 'Hapus Akun Saya'; +$lang['btn_img_backto'] = 'Kembali ke %s'; +$lang['btn_mediaManager'] = 'Tampilkan di pengelola media'; $lang['loggedinas'] = 'Login sebagai '; $lang['user'] = 'Username'; $lang['pass'] = 'Password'; @@ -78,6 +82,7 @@ $lang['profna'] = 'Wiki ini tidak mengijinkan perubahan profil.'; $lang['profnochange'] = 'Tidak ada perubahan.'; $lang['profnoempty'] = 'Mohon mengisikan nama atau alamat email.'; $lang['profchanged'] = 'Profil User berhasil diubah.'; +$lang['profnodelete'] = 'Wiki ini tidak mendukung penghapusan pengguna'; $lang['profdeleteuser'] = 'Hapus Akun'; $lang['profdeleted'] = 'Akun anda telah dihapus dari wiki ini'; $lang['profconfdelete'] = 'Saya berharap menghapus akun saya dari wiki ini. @@ -91,10 +96,14 @@ $lang['resendpwdnouser'] = 'Maaf, user ini tidak ditemukan.'; $lang['resendpwdbadauth'] = 'Maaf, kode autentikasi tidak valid. Pastikan Anda menggunakan keseluruhan link konfirmasi.'; $lang['resendpwdconfirm'] = 'Link konfirmasi telah dikirim melalui email.'; $lang['resendpwdsuccess'] = 'Password baru Anda telah dikirim melalui email.'; +$lang['license'] = 'Kecuali jika dinyatakan lain, konten pada wiki ini dilisensikan dibawah lisensi berikut:'; +$lang['licenseok'] = 'Catatan: Dengan menyunting halaman ini, Anda setuju untuk melisensikan konten Anda dibawah lisensi berikut:'; $lang['searchmedia'] = 'Cari nama file:'; +$lang['searchmedia_in'] = 'Cari di %s'; $lang['txt_upload'] = 'File yang akan diupload'; $lang['txt_filename'] = 'Masukkan nama wiki (opsional)'; $lang['txt_overwrt'] = 'File yang telah ada akan ditindih'; +$lang['maxuploadsize'] = 'Unggah maks. %s per berkas'; $lang['lockedby'] = 'Sedang dikunci oleh'; $lang['lockexpire'] = 'Penguncian artikel sampai dengan'; $lang['js']['willexpire'] = 'Halaman yang sedang Anda kunci akan berakhir dalam waktu kurang lebih satu menit.\nUntuk menghindari konflik, gunakan tombol Preview untuk me-reset timer pengunci.'; @@ -103,18 +112,41 @@ $lang['js']['searchmedia'] = 'Cari file'; $lang['js']['keepopen'] = 'Biarkan window terbuka dalam pemilihan'; $lang['js']['hidedetails'] = 'Sembunyikan detil'; $lang['js']['mediatitle'] = 'Pengaturan Link'; +$lang['js']['mediadisplay'] = 'Jenis tautan'; +$lang['js']['mediaalign'] = 'Perataan'; $lang['js']['mediasize'] = 'Ukuran gambar'; +$lang['js']['mediatarget'] = 'Tautan tujuan'; $lang['js']['mediaclose'] = 'Tutup'; +$lang['js']['mediainsert'] = 'Sisip'; $lang['js']['mediadisplayimg'] = 'Lihat gambar'; $lang['js']['mediadisplaylnk'] = 'Lihat hanya link'; +$lang['js']['mediasmall'] = 'Versi kecil'; +$lang['js']['mediamedium'] = 'Versi sedang'; +$lang['js']['medialarge'] = 'Versi besar'; +$lang['js']['mediaoriginal'] = 'Versi asli'; +$lang['js']['medialnk'] = 'Tautan ke halaman rincian'; +$lang['js']['mediadirect'] = 'Tautan langsung ke aslinya'; +$lang['js']['medianolnk'] = 'Tanpa tautan'; +$lang['js']['medianolink'] = 'Jangan tautkan gambar'; +$lang['js']['medialeft'] = 'Rata gambar sebelah kiri'; +$lang['js']['mediaright'] = 'Rata gambar sebelah kanan'; +$lang['js']['mediacenter'] = 'Rata gambar di tengah'; +$lang['js']['medianoalign'] = 'Jangan gunakan perataan'; $lang['js']['nosmblinks'] = 'Link ke share Windows hanya bekerja di Microsoft Internet Explorer. Anda masih dapat mengcopy and paste linknya.'; +$lang['js']['linkwiz'] = 'Wizard Tautan'; +$lang['js']['linkto'] = 'Tautkan ke:'; $lang['js']['del_confirm'] = 'Hapus tulisan ini?'; +$lang['js']['restore_confirm'] = 'Benar-benar ingin mengembalikan versi ini?'; +$lang['js']['media_diff'] = 'Lihat perbedaan:'; +$lang['js']['media_diff_both'] = 'Berdampingan'; +$lang['js']['media_diff_opacity'] = 'Mencolok'; $lang['js']['media_select'] = 'Pilih file...'; $lang['js']['media_upload_btn'] = 'Unggah'; $lang['js']['media_done_btn'] = 'Selesai'; $lang['js']['media_drop'] = 'Tarik file disini untuk mengunggah'; $lang['js']['media_cancel'] = 'Buang'; +$lang['js']['media_overwrt'] = 'Timpa berkas yang ada'; $lang['rssfailed'] = 'Error terjadi saat mengambil feed: '; $lang['nothingfound'] = 'Tidak menemukan samasekali.'; $lang['mediaselect'] = 'Pilihan Mediafile'; @@ -148,6 +180,13 @@ $lang['current'] = 'sekarang'; $lang['yours'] = 'Versi Anda'; $lang['diff'] = 'Tampilkan perbedaan dengan versi sekarang'; $lang['diff2'] = 'Tampilkan perbedaan diantara revisi terpilih'; +$lang['difflink'] = 'Tautan ke tampilan pembanding ini'; +$lang['diff_type'] = 'Tampilkan perbedaan:'; +$lang['diff_inline'] = 'Sebaris'; +$lang['diff_side'] = 'Berdampingan'; +$lang['diffprevrev'] = 'Revisi sebelumnya'; +$lang['diffnextrev'] = 'Revisi selanjutnya'; +$lang['difflastrev'] = 'Revisi terakhir'; $lang['line'] = 'Baris'; $lang['breadcrumb'] = 'Jejak'; $lang['youarehere'] = 'Anda disini'; @@ -158,11 +197,23 @@ $lang['created'] = 'dibuat'; $lang['restored'] = 'revisi lama ditampilkan kembali (%s)'; $lang['external_edit'] = 'Perubahan eksternal'; $lang['summary'] = 'Edit summary'; +$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> diperlukan untuk menampilkan konten ini.'; +$lang['download'] = 'Unduh Cuplikan'; +$lang['tools'] = 'Alat'; +$lang['user_tools'] = 'Alat Pengguna'; +$lang['site_tools'] = 'Alat Situs'; +$lang['page_tools'] = 'Alat Halaman'; +$lang['skip_to_content'] = 'lewati ke konten'; +$lang['sidebar'] = 'Bilah Sisi'; $lang['mail_newpage'] = 'Halaman ditambahkan:'; $lang['mail_changed'] = 'Halaman diubah:'; +$lang['mail_subscribe_list'] = 'halaman diubah dalam namespace:'; $lang['mail_new_user'] = 'User baru:'; $lang['mail_upload'] = 'Berkas di-upload:'; +$lang['changes_type'] = 'Tampilkan perubahan'; $lang['pages_changes'] = 'Halaman'; +$lang['media_changes'] = 'Berkas media'; +$lang['both_changes'] = 'Baik halaman dan berkas media'; $lang['qb_bold'] = 'Tebal'; $lang['qb_italic'] = 'Miring'; $lang['qb_underl'] = 'Garis Bawah'; @@ -173,6 +224,10 @@ $lang['qb_h2'] = 'Level 2 Headline'; $lang['qb_h3'] = 'Level 3 Headline'; $lang['qb_h4'] = 'Level 4 Headline'; $lang['qb_h5'] = 'Level 5 Headline'; +$lang['qb_hs'] = 'Pilih Judul'; +$lang['qb_hplus'] = 'Judul Lebih Atas'; +$lang['qb_hminus'] = 'Judul Lebih Bawah'; +$lang['qb_hequal'] = 'Tingkat Judul yang Sama'; $lang['qb_link'] = 'Link Internal'; $lang['qb_extlink'] = 'Link External'; $lang['qb_hr'] = 'Garis Horisontal'; @@ -182,11 +237,11 @@ $lang['qb_media'] = 'Tambahkan gambar atau file lain'; $lang['qb_sig'] = 'Sisipkan tanda tangan'; $lang['qb_smileys'] = 'Smileys'; $lang['qb_chars'] = 'Karakter Khusus'; +$lang['upperns'] = 'lompat ke namespace induk'; $lang['admin_register'] = 'Tambah user baru'; $lang['metaedit'] = 'Edit Metadata'; $lang['metasaveerr'] = 'Gagal menulis metadata'; $lang['metasaveok'] = 'Metadata tersimpan'; -$lang['img_backto'] = 'Kembali ke'; $lang['img_title'] = 'Judul'; $lang['img_caption'] = 'Label'; $lang['img_date'] = 'Tanggal'; @@ -197,6 +252,22 @@ $lang['img_copyr'] = 'Hakcipta'; $lang['img_format'] = 'Format'; $lang['img_camera'] = 'Kamera'; $lang['img_keywords'] = 'Katakunci'; +$lang['img_width'] = 'Lebar'; +$lang['img_height'] = 'Tinggi'; +$lang['subscr_subscribe_success'] = 'Menambah %s ke senarai langganan untuk %s'; +$lang['subscr_subscribe_error'] = 'Kesalahan menambahkan %s ke senarai langganan untuk %s'; +$lang['subscr_subscribe_noaddress'] = 'Tidak ada alamat yang terkait dengan login Anda, Anda tidak dapat ditambahkan ke senarai langganan'; +$lang['subscr_unsubscribe_success'] = 'Menghapus %s dari senarai langganan untuk %s'; +$lang['subscr_unsubscribe_error'] = 'Kesalahan menghapus %s dari senarai langganan untuk %s'; +$lang['subscr_already_subscribed'] = '%s sudah dilanggankan ke %s'; +$lang['subscr_not_subscribed'] = '%s tidak dilanggankan ke %s'; +$lang['subscr_m_not_subscribed'] = 'Saat ini Anda tidak berlangganan halaman dan namespace saat ini.'; +$lang['subscr_m_new_header'] = 'Tambahkan langganan'; +$lang['subscr_m_current_header'] = 'Langganan saat ini'; +$lang['subscr_m_unsubscribe'] = 'Berhenti berlangganan'; +$lang['subscr_m_subscribe'] = 'Berlangganan'; +$lang['subscr_m_receive'] = 'Menerima'; +$lang['subscr_style_every'] = 'email setiap diubah'; $lang['authtempfail'] = 'Autentikasi user saat ini sedang tidak dapat digunakan. Jika kejadian ini berlanjut, Harap informasikan admin Wiki Anda.'; $lang['i_chooselang'] = 'Pilih bahasa'; $lang['i_installer'] = 'Instalasi DokuWiki'; @@ -217,4 +288,41 @@ $lang['i_policy'] = 'Policy ACL awal'; $lang['i_pol0'] = 'Wiki Terbuka (baca, tulis, upload untuk semua orang)'; $lang['i_pol1'] = 'Wiki Publik (baca untuk semua orang, tulis dan upload untuk pengguna terdaftar)'; $lang['i_pol2'] = 'Wiki Privat (baca, tulis dan upload hanya untuk pengguna terdaftar)'; +$lang['i_allowreg'] = 'Ijinkan pengguna mendaftar sendiri'; $lang['i_retry'] = 'Coba Lagi'; +$lang['i_license'] = 'Silakan pilih lisensi untuk konten Anda:'; +$lang['i_license_none'] = 'Jangan tampilkan semua informasi lisensi'; +$lang['i_pop_field'] = 'Tolong, bantu kami meningkatkan pengalaman DokuWiki:'; +$lang['i_pop_label'] = 'Setiap bulan mengirimkan penggunaan data anonim ke pengembang DokuWiki'; +$lang['years'] = '%d tahun yang lalu'; +$lang['months'] = '%d bulan yang lalu'; +$lang['weeks'] = '%d minggu yang lalu'; +$lang['days'] = '%d hari yang lalu'; +$lang['hours'] = '%d jam yang lalu'; +$lang['minutes'] = '%d menit yang lalu'; +$lang['seconds'] = '%d detik yang lalu'; +$lang['wordblock'] = 'Pengubahan Anda tidak disimpan karena berisi teks yang diblokir (spam).'; +$lang['media_uploadtab'] = 'Unggah'; +$lang['media_searchtab'] = 'Cari'; +$lang['media_file'] = 'Berkas'; +$lang['media_viewtab'] = 'Lihat'; +$lang['media_edittab'] = 'Sunting'; +$lang['media_historytab'] = 'Riwayat'; +$lang['media_list_rows'] = 'Kolom'; +$lang['media_sort_name'] = 'Nama'; +$lang['media_sort_date'] = 'Tanggal'; +$lang['media_namespaces'] = 'Pilih namespace'; +$lang['media_upload'] = 'Unggah ke %s'; +$lang['media_search'] = 'Cari di %s'; +$lang['media_view'] = '%s'; +$lang['media_viewold'] = '%s di %s'; +$lang['media_edit'] = 'Sunting %s'; +$lang['media_history'] = 'Riwayat %s'; +$lang['media_meta_edited'] = 'metadata disunting'; +$lang['media_perm_read'] = 'Maaf, Anda tidak memiliki izin untuk membaca berkas.'; +$lang['media_perm_upload'] = 'Maaf, Anda tidak memiliki izin untuk mengunggah berkas.'; +$lang['media_update'] = 'Unggah versi baru'; +$lang['media_restore'] = 'Kembalikan versi ini'; +$lang['currentns'] = 'Namespace saat ini'; +$lang['searchresult'] = 'Hasil Pencarian'; +$lang['wikimarkup'] = 'Markah Wiki'; diff --git a/inc/lang/id/resetpwd.txt b/inc/lang/id/resetpwd.txt new file mode 100644 index 000000000..6ab26c866 --- /dev/null +++ b/inc/lang/id/resetpwd.txt @@ -0,0 +1,3 @@ +====== Atur sandi baru ====== + +Silakan masukkan sandi baru untuk akun Anda di wiki ini.
\ No newline at end of file diff --git a/inc/lang/id/subscr_digest.txt b/inc/lang/id/subscr_digest.txt new file mode 100644 index 000000000..5e1041c04 --- /dev/null +++ b/inc/lang/id/subscr_digest.txt @@ -0,0 +1,17 @@ +Hei! + +Halaman @PAGE@ di wiki @TITLE@ telah disunting. +Berikut perubahannya: + +-------------------------------------------------------- +@DIFF@ +-------------------------------------------------------- + +Revisi lama: @OLDPAGE@ + +Revisi baru: @NEWPAGE@ + +Untuk menonaktifkan pemberitahuan ini, masuk ke wiki di @DOKUWIKIURL@ kemudian kunjungi @SUBSCRIBE@ dan halaman batal berlangganan dan/atau namespace yang diubah. + +-- +Email ini dibuat oleh DokuWiki di @DOKUWIKIURL@
\ No newline at end of file diff --git a/inc/lang/is/lang.php b/inc/lang/is/lang.php index fbc7e9049..219431a42 100644 --- a/inc/lang/is/lang.php +++ b/inc/lang/is/lang.php @@ -170,7 +170,7 @@ $lang['admin_register'] = 'Setja nýjan notenda inn'; $lang['metaedit'] = 'Breyta lýsigögnum'; $lang['metasaveerr'] = 'Vistun lýsigagna mistókst'; $lang['metasaveok'] = 'Lýsigögn vistuð'; -$lang['img_backto'] = 'Aftur til'; +$lang['btn_img_backto'] = 'Aftur til %s'; $lang['img_title'] = 'Heiti'; $lang['img_caption'] = 'Skýringartexti'; $lang['img_date'] = 'Dagsetning'; diff --git a/inc/lang/it/lang.php b/inc/lang/it/lang.php index a2bde3b60..eefcec9db 100644 --- a/inc/lang/it/lang.php +++ b/inc/lang/it/lang.php @@ -245,7 +245,7 @@ $lang['admin_register'] = 'Aggiungi un nuovo utente'; $lang['metaedit'] = 'Modifica metadati'; $lang['metasaveerr'] = 'Scrittura metadati fallita'; $lang['metasaveok'] = 'Metadati salvati'; -$lang['img_backto'] = 'Torna a'; +$lang['btn_img_backto'] = 'Torna a %s'; $lang['img_title'] = 'Titolo'; $lang['img_caption'] = 'Descrizione'; $lang['img_date'] = 'Data'; @@ -258,7 +258,7 @@ $lang['img_camera'] = 'Camera'; $lang['img_keywords'] = 'Parole chiave'; $lang['img_width'] = 'Larghezza'; $lang['img_height'] = 'Altezza'; -$lang['img_manager'] = 'Guarda nel gestore media'; +$lang['btn_mediaManager'] = 'Guarda nel gestore media'; $lang['subscr_subscribe_success'] = 'Aggiunto %s alla lista di sottoscrizioni %s'; $lang['subscr_subscribe_error'] = 'Impossibile aggiungere %s alla lista di sottoscrizioni %s'; $lang['subscr_subscribe_noaddress'] = 'Non esiste alcun indirizzo associato al tuo account, non puoi essere aggiunto alla lista di sottoscrizioni'; diff --git a/inc/lang/ja/lang.php b/inc/lang/ja/lang.php index 1f53b0a90..782689fa3 100644 --- a/inc/lang/ja/lang.php +++ b/inc/lang/ja/lang.php @@ -240,7 +240,7 @@ $lang['admin_register'] = '新規ユーザー作成'; $lang['metaedit'] = 'メタデータ編集'; $lang['metasaveerr'] = 'メタデータの書き込みに失敗しました'; $lang['metasaveok'] = 'メタデータは保存されました'; -$lang['img_backto'] = '戻る'; +$lang['btn_img_backto'] = '戻る %s'; $lang['img_title'] = 'タイトル'; $lang['img_caption'] = '見出し'; $lang['img_date'] = '日付'; @@ -253,7 +253,7 @@ $lang['img_camera'] = '使用カメラ'; $lang['img_keywords'] = 'キーワード'; $lang['img_width'] = '幅'; $lang['img_height'] = '高さ'; -$lang['img_manager'] = 'メディアマネージャーで閲覧'; +$lang['btn_mediaManager'] = 'メディアマネージャーで閲覧'; $lang['subscr_subscribe_success'] = '%sが%sの購読リストに登録されました。'; $lang['subscr_subscribe_error'] = '%sを%sの購読リストへの追加に失敗しました。'; $lang['subscr_subscribe_noaddress'] = 'あなたのログインに対応するアドレスがないため、購読リストへ追加することができません。'; diff --git a/inc/lang/ka/admin.txt b/inc/lang/ka/admin.txt new file mode 100644 index 000000000..97072a449 --- /dev/null +++ b/inc/lang/ka/admin.txt @@ -0,0 +1,4 @@ +====== მართვა ====== + +ქვემოთ თქვენ ხედავთ ადმინისტრაციული ოპერაციების სიას «დოკუვიკიში». + diff --git a/inc/lang/ka/adminplugins.txt b/inc/lang/ka/adminplugins.txt new file mode 100644 index 000000000..011bfeb62 --- /dev/null +++ b/inc/lang/ka/adminplugins.txt @@ -0,0 +1 @@ +===== დამატებითი პლაგინები =====
\ No newline at end of file diff --git a/inc/lang/ka/backlinks.txt b/inc/lang/ka/backlinks.txt new file mode 100644 index 000000000..7b54797c7 --- /dev/null +++ b/inc/lang/ka/backlinks.txt @@ -0,0 +1,4 @@ +====== გადმომისამართება ====== + +გვერდები რომლებიც ანიშნებენ ამ გვერდზე. + diff --git a/inc/lang/ka/conflict.txt b/inc/lang/ka/conflict.txt new file mode 100644 index 000000000..1b1eb0482 --- /dev/null +++ b/inc/lang/ka/conflict.txt @@ -0,0 +1,5 @@ +====== გამოვიდა უფრო ახალი ვერსია ====== + +არსებობს დოკუმენტის უფრო ახალი ვერსია, რომელიც თქვენ დაარედაქტირეთ. ეს ხდება მაშინ, როდესაც სხვა მომხმარებელი არედაქტირებს დოკუმენტს, სანამ თქვენ აკეთებდით იგივეს. + +ყურადღებით დააკვირდით ქვემოთ მოყვანილ განსხვავებებს, და გადაწყვიტეთ რომელი ვერსია სჯობს. თუ შენახვას დააჭერთ, თქვენი ვერსია შეინახება.
\ No newline at end of file diff --git a/inc/lang/ka/denied.txt b/inc/lang/ka/denied.txt new file mode 100644 index 000000000..bb8910472 --- /dev/null +++ b/inc/lang/ka/denied.txt @@ -0,0 +1,3 @@ +====== მიუწვდომელია ====== + +თქვენ არ გაქვთ საკმარისი უფლებები. იქნებ ავტორიზაცია დაგავიწყდათ? diff --git a/inc/lang/ka/diff.txt b/inc/lang/ka/diff.txt new file mode 100644 index 000000000..c635e45f4 --- /dev/null +++ b/inc/lang/ka/diff.txt @@ -0,0 +1,3 @@ +====== განსხვავებები ====== +ქვემოთ მოყვანილაი განსხვავებები მსგავს გვერდებს შორის. + diff --git a/inc/lang/ka/draft.txt b/inc/lang/ka/draft.txt new file mode 100644 index 000000000..f3356ddb5 --- /dev/null +++ b/inc/lang/ka/draft.txt @@ -0,0 +1,3 @@ +====== ნაპოვნია ჩანაწერი ====== + +გვერდის რედაქტირება არ იყო დამთავრებული.
\ No newline at end of file diff --git a/inc/lang/ka/edit.txt b/inc/lang/ka/edit.txt new file mode 100644 index 000000000..3fffceb0c --- /dev/null +++ b/inc/lang/ka/edit.txt @@ -0,0 +1,2 @@ +დაარედაქტირეთ გვერდი და დააჭირეთ «შენახვას». წაიკითხეთ [[wiki:syntax|FAQ]] ვიკის სინტაქსისთან გასაცნობად. დაარედაქტირეთ გვერდი მხოლოდ იმ შემთხვევაში თუ აპირებთ გვერდის გაუმჯობესებას. თუ თქვენ რამის დატესტვა გინდათ, გამოიყენეთ სპეციალური გვერდი. + diff --git a/inc/lang/ka/editrev.txt b/inc/lang/ka/editrev.txt new file mode 100644 index 000000000..17ccff57f --- /dev/null +++ b/inc/lang/ka/editrev.txt @@ -0,0 +1,2 @@ +**თქვენ ატვირთეთ დოკუმენტის ძველი ვერსია** მისი შენახვით თქვენ შექმნით ახალ ვერსიას იგივე შიგთავსით. +---- diff --git a/inc/lang/ka/index.txt b/inc/lang/ka/index.txt new file mode 100644 index 000000000..7daef7fb6 --- /dev/null +++ b/inc/lang/ka/index.txt @@ -0,0 +1 @@ +====== სტატიები ====== აქ ნაჩვენებია ყველა სტატია
\ No newline at end of file diff --git a/inc/lang/ka/lang.php b/inc/lang/ka/lang.php new file mode 100644 index 000000000..bdf0f1997 --- /dev/null +++ b/inc/lang/ka/lang.php @@ -0,0 +1,117 @@ +<?php + +/** + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * + * @author Luka Lejava <luka.lejava@gmail.com> + */ +$lang['encoding'] = 'utf-8'; +$lang['direction'] = 'ltr'; +$lang['doublequoteopening'] = '“'; +$lang['doublequoteclosing'] = '”'; +$lang['singlequoteopening'] = '‘'; +$lang['singlequoteclosing'] = '’'; +$lang['apostrophe'] = '’'; +$lang['btn_edit'] = 'დაარედაქტირეთ ეს გვერდი'; +$lang['btn_source'] = 'მაჩვენე გვერდის კოდი'; +$lang['btn_show'] = 'გვერდის ჩვენება'; +$lang['btn_create'] = 'გვერდის შექმნა'; +$lang['btn_search'] = 'ძიება'; +$lang['btn_save'] = 'შენახვა'; +$lang['btn_preview'] = 'ჩვენება'; +$lang['btn_top'] = 'მაღლა'; +$lang['btn_newer'] = '<< მეტი '; +$lang['btn_older'] = 'ნაკლები >>'; +$lang['btn_revs'] = 'ძველი ვერსიები'; +$lang['btn_recent'] = 'ბოლო ცვლილებები'; +$lang['btn_upload'] = 'ატვირთვა'; +$lang['btn_cancel'] = 'შეწყვეტა'; +$lang['btn_index'] = 'სტატიები'; +$lang['btn_secedit'] = 'რედაქტირება'; +$lang['btn_login'] = 'შესვლა'; +$lang['btn_logout'] = 'გამოსვლა'; +$lang['btn_admin'] = 'ადმინი'; +$lang['btn_update'] = 'განახლება'; +$lang['btn_delete'] = 'წაშლა'; +$lang['btn_back'] = 'უკან'; +$lang['btn_backlink'] = 'გადმომისამართებული ბმულები'; +$lang['btn_backtomedia'] = 'მედიაფაილების არჩევა'; +$lang['btn_subscribe'] = 'Manage Subscriptions'; +$lang['btn_profile'] = 'პროფილის განახლება'; +$lang['btn_reset'] = 'წაშლა'; +$lang['btn_resendpwd'] = 'ახალი პაროლის დაყენება'; +$lang['btn_draft'] = 'ჩანაწერის წაშლა'; +$lang['btn_recover'] = 'ჩანაწერის აღდგენა'; +$lang['btn_draftdel'] = 'ჩანაწერის წაშლა'; +$lang['btn_revert'] = 'აღდგენა'; +$lang['btn_register'] = 'რეგისტრაცია'; +$lang['btn_apply'] = 'ცადე'; +$lang['btn_media'] = 'მედია ფაილების მართვა'; +$lang['btn_deleteuser'] = 'ჩემი ექაუნთის წაშლა'; +$lang['btn_img_backto'] = 'უკან %'; +$lang['btn_mediaManager'] = 'მედია ფაილების მმართველში გახსნა'; +$lang['loggedinas'] = 'შესული ხართ როგორც'; +$lang['user'] = 'ლოგინი'; +$lang['pass'] = 'პაროლი'; +$lang['newpass'] = 'ახალი პაროლი'; +$lang['oldpass'] = 'დაადასტურეთ პაროლი'; +$lang['passchk'] = 'კიდევ ერთხელ'; +$lang['remember'] = 'დამიმახსოვრე'; +$lang['fullname'] = 'ნამდვილი სახელი'; +$lang['email'] = 'ფოსტა'; +$lang['profile'] = 'მომხმარებლის პროფილი'; +$lang['badlogin'] = 'ლოგინი ან პაროლი არასწორია'; +$lang['badpassconfirm'] = 'პაროლი არასწორია'; +$lang['minoredit'] = 'ცვლილებები'; +$lang['draftdate'] = 'ჩანაწერების ავტომატური შენახვა ჩართულია'; +$lang['nosecedit'] = 'გვერდს ვადა გაუვიდა'; +$lang['regmissing'] = 'ყველა ველი შეავსეთ'; +$lang['reguexists'] = 'მსგავსი ლოგინი უკვე არსებობს'; +$lang['regsuccess'] = 'მომხმარებელი შექმნილია, პაროლი გამოგზავნილია'; +$lang['regsuccess2'] = 'მომხმარებელი შექმნილია'; +$lang['regmailfail'] = 'დაფიქსირდა შეცდომა'; +$lang['regbadmail'] = 'ფოსტა არასწორია'; +$lang['regbadpass'] = 'პაროლი განსხვავებულია'; +$lang['regpwmail'] = 'თვენი DokuWiki პაროლი'; +$lang['reghere'] = 'დარეგისტრირდი'; +$lang['profna'] = 'არ შეგიძლიათ პროფილის რედაქტირება'; +$lang['profnochange'] = 'ცვლილებები არ არის'; +$lang['profnoempty'] = 'ცარიელი სახელი ან ფოსტა დაუშვებელია'; +$lang['profchanged'] = 'პროფილი განახლდა'; +$lang['profnodelete'] = 'მომხმარებლის წაშლა შეუძლებელია'; +$lang['profdeleteuser'] = 'პროფილის წაშლა'; +$lang['profdeleted'] = 'პროფილი წაიშალა'; +$lang['profconfdelete'] = 'მე მსურს პროფილის წაშლა. <br/> თქვენ აღარ გექნებათ საშუალება აღადგინოთ პროფილი.'; +$lang['profconfdeletemissing'] = 'დადასტურების ველი ცარიელია'; +$lang['pwdforget'] = 'დაგავიწყდა პაროლი? აღადგინე'; +$lang['resendna'] = 'პაროლის აღდგენა შეუძლებელია'; +$lang['resendpwd'] = 'ახალი პაროლი'; +$lang['resendpwdmissing'] = 'უნდა შეავსოთ ყველა ველი'; +$lang['resendpwdnouser'] = 'მსგავსი ლოგინი დარეგისტრირებული არ არის'; +$lang['resendpwdbadauth'] = 'კოდი არასწორია'; +$lang['resendpwdconfirm'] = 'აღსადგენი ბმული გამოგზავნილია'; +$lang['resendpwdsuccess'] = 'ახალი პაროლი გამოგზავნილია'; +$lang['license'] = 'ვიკი ლიცენზირებულია: '; +$lang['licenseok'] = 'ამ გვერდის რედაქტირებით თვენ ეთანხმებით ლიცენზიას:'; +$lang['searchmedia'] = 'საძებო სახელი:'; +$lang['searchmedia_in'] = 'ძებნა %-ში'; +$lang['txt_upload'] = 'აირჩიეთ ასატვირთი ფაილი'; +$lang['txt_filename'] = 'ატვირთვა როგორც (არჩევითი)'; +$lang['txt_overwrt'] = 'გადაწერა ზემოდან'; +$lang['maxuploadsize'] = 'მაქსიმალური ზომა %'; +$lang['lockedby'] = 'დაბლოკილია'; +$lang['lockexpire'] = 'განიბლოკება'; +$lang['js']['willexpire'] = 'გვერდი განიბლოკება 1 წუთში'; +$lang['js']['notsavedyet'] = 'შეუნახავი მონაცემები წაიშლება'; +$lang['js']['searchmedia'] = 'ძებნა'; +$lang['js']['keepopen'] = 'დატოვეთ ღია'; +$lang['js']['hidedetails'] = 'დეტალების დამალვა'; +$lang['js']['mediatitle'] = 'ინსტრუმენტები'; +$lang['js']['mediadisplay'] = 'ბმულის ტიპი'; +$lang['js']['mediaalign'] = 'Alignment'; +$lang['js']['mediasize'] = 'სურათის ზომა'; +$lang['js']['mediatarget'] = 'მიზნის ბმული'; +$lang['js']['mediaclose'] = 'დახურვა'; +$lang['js']['mediainsert'] = 'ჩასმა'; +$lang['js']['mediadisplayimg'] = 'სურათის ნახვა'; +$lang['js']['mediadisplaylnk'] = 'მაჩვენე მხოლოდ ბმული'; diff --git a/inc/lang/kk/lang.php b/inc/lang/kk/lang.php index 37b0f462b..4b111b118 100644 --- a/inc/lang/kk/lang.php +++ b/inc/lang/kk/lang.php @@ -123,7 +123,7 @@ $lang['yours'] = 'Сендердің болжамыңыз'; $lang['created'] = 'ЖасалFан'; $lang['mail_new_user'] = 'Жаңа пайдаланушы'; $lang['qb_chars'] = 'Арнайы белгiлер'; -$lang['img_backto'] = 'Қайта оралу'; +$lang['btn_img_backto'] = 'Қайта оралу %s'; $lang['img_format'] = 'Формат'; $lang['img_camera'] = 'Камера'; $lang['i_chooselang'] = 'Тіл таңдау'; diff --git a/inc/lang/km/lang.php b/inc/lang/km/lang.php index 4800b6c23..9f65ccd16 100644 --- a/inc/lang/km/lang.php +++ b/inc/lang/km/lang.php @@ -165,7 +165,7 @@ $lang['admin_register']= 'តែមអ្នកប្រើ';//'Add new user'; $lang['metaedit'] = 'កែទិន្នន័យអរូប';//'Edit Metadata'; $lang['metasaveerr'] = 'ពំអាចកត់រទិន្នន័យអរូប';//'Writing metadata failed'; $lang['metasaveok'] = 'ទិន្នន័យអរូប'; -$lang['img_backto'] = 'ថយក្រោយ'; +$lang['btn_img_backto'] = 'ថយក្រោយ%s'; $lang['img_title'] = 'អភិធេយ្យ'; $lang['img_caption'] = 'ចំណងជើង'; $lang['img_date'] = 'ថ្ងៃខែ';//'Date'; diff --git a/inc/lang/ko/lang.php b/inc/lang/ko/lang.php index 266ff01e5..592b953b9 100644 --- a/inc/lang/ko/lang.php +++ b/inc/lang/ko/lang.php @@ -12,6 +12,7 @@ * @author Myeongjin <aranet100@gmail.com> * @author Gerrit Uitslag <klapinklapin@gmail.com> * @author Garam <rowain8@gmail.com> + * @author Young gon Cha <garmede@gmail.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -45,7 +46,7 @@ $lang['btn_back'] = '뒤로'; $lang['btn_backlink'] = '백링크'; $lang['btn_backtomedia'] = '미디어 파일 선택으로 돌아가기'; $lang['btn_subscribe'] = '구독 관리'; -$lang['btn_profile'] = '개인 정보 바꾸기'; +$lang['btn_profile'] = '프로필 바꾸기'; $lang['btn_reset'] = '재설정'; $lang['btn_resendpwd'] = '새 비밀번호 설정'; $lang['btn_draft'] = '초안 편집'; @@ -54,18 +55,20 @@ $lang['btn_draftdel'] = '초안 삭제'; $lang['btn_revert'] = '되돌리기'; $lang['btn_register'] = '등록'; $lang['btn_apply'] = '적용'; -$lang['btn_media'] = '미디어 관리'; +$lang['btn_media'] = '미디어 관리자'; $lang['btn_deleteuser'] = '내 계정 제거'; +$lang['btn_img_backto'] = '%s(으)로 돌아가기'; +$lang['btn_mediaManager'] = '미디어 관리자에서 보기'; $lang['loggedinas'] = '로그인한 사용자'; $lang['user'] = '사용자 이름'; $lang['pass'] = '비밀번호'; $lang['newpass'] = '새 비밀번호'; $lang['oldpass'] = '현재 비밀번호 확인'; -$lang['passchk'] = '비밀번호 다시 확인'; +$lang['passchk'] = '다시 확인'; $lang['remember'] = '기억하기'; $lang['fullname'] = '실명'; $lang['email'] = '이메일'; -$lang['profile'] = '개인 정보'; +$lang['profile'] = '사용자 프로필'; $lang['badlogin'] = '죄송하지만 사용자 이름이나 비밀번호가 잘못되었습니다.'; $lang['badpassconfirm'] = '죄송하지만 비밀번호가 잘못되었습니다'; $lang['minoredit'] = '사소한 바뀜'; @@ -75,21 +78,21 @@ $lang['regmissing'] = '죄송하지만 모든 필드를 채워야 합 $lang['reguexists'] = '죄송하지만 같은 이름을 사용하는 사용자가 있습니다.'; $lang['regsuccess'] = '사용자를 만들었으며 비밀번호는 이메일로 보냈습니다.'; $lang['regsuccess2'] = '사용자를 만들었습니다.'; -$lang['regmailfail'] = '비밀번호를 이메일로 보내는 동안 오류가 발생했습니다. 관리자에게 문의하세요!'; -$lang['regbadmail'] = '주어진 이메일 주소가 잘못되었습니다 - 오류라고 생각하면 관리자에게 문의하세요'; -$lang['regbadpass'] = '새 비밀번호가 같지 않습니다. 다시 입력하세요.'; +$lang['regmailfail'] = '비밀번호를 이메일로 보내는 동안 오류가 발생했습니다. 관리자에게 문의해주세요!'; +$lang['regbadmail'] = '주어진 이메일 주소가 잘못되었습니다 - 오류라고 생각하면 관리자에게 문의해주세요'; +$lang['regbadpass'] = '두 주어진 비밀번호가 같지 않습니다. 다시 입력하세요.'; $lang['regpwmail'] = '도쿠위키 비밀번호'; -$lang['reghere'] = '계정이 없나요? 계정을 등록할 수 있습니다'; -$lang['profna'] = '이 위키는 개인 정보 수정을 할 수 없습니다'; +$lang['reghere'] = '계정이 없나요? 계정을 등록하세요'; +$lang['profna'] = '이 위키는 프로필 수정을 할 수 없습니다'; $lang['profnochange'] = '바뀐 내용이 없습니다.'; -$lang['profnoempty'] = '이름이나 이메일 주소가 비었습니다.'; -$lang['profchanged'] = '개인 정보가 성공적으로 바뀌었습니다.'; +$lang['profnoempty'] = '빈 이름이나 이메일 주소는 허용하지 않습니다.'; +$lang['profchanged'] = '프로필이 성공적으로 바뀌었습니다.'; $lang['profnodelete'] = '이 위키는 사용자 삭제를 지원하지 않습니다'; $lang['profdeleteuser'] = '계정 삭제'; $lang['profdeleted'] = '당신의 사용자 계정이 이 위키에서 삭제되었습니다'; $lang['profconfdelete'] = '이 위키에서 내 계정을 제거하고 싶습니다. <br/> 이 행동은 되돌릴 수 없습니다.'; $lang['profconfdeletemissing'] = '선택하지 않은 확인 상자를 확인'; -$lang['pwdforget'] = '비밀번호를 잊으셨나요? 비밀번호를 재설정할 수 있습니다'; +$lang['pwdforget'] = '비밀번호를 잊으셨나요? 비밀번호를 재설정하세요'; $lang['resendna'] = '이 위키는 비밀번호 재설정을 지원하지 않습니다.'; $lang['resendpwd'] = '다음으로 새 비밀번호 보내기'; $lang['resendpwdmissing'] = '죄송하지만 모든 필드를 채워야 합니다.'; @@ -110,10 +113,10 @@ $lang['lockexpire'] = '잠금 해제 시간'; $lang['js']['willexpire'] = '잠시 후 편집 잠금이 해제됩니다.\n편집 충돌을 피하려면 미리 보기를 눌러 잠금 시간을 다시 설정하세요.'; $lang['js']['notsavedyet'] = '저장하지 않은 바뀜이 사라집니다.'; $lang['js']['searchmedia'] = '파일 검색'; -$lang['js']['keepopen'] = '선택할 때 창을 열어 놓기'; +$lang['js']['keepopen'] = '선택할 때 열어 놓은 창을 유지하기'; $lang['js']['hidedetails'] = '자세한 정보 숨기기'; $lang['js']['mediatitle'] = '링크 설정'; -$lang['js']['mediadisplay'] = '링크 형태'; +$lang['js']['mediadisplay'] = '링크 유형'; $lang['js']['mediaalign'] = '배치'; $lang['js']['mediasize'] = '그림 크기'; $lang['js']['mediatarget'] = '링크 목표'; @@ -171,7 +174,7 @@ $lang['mediaview'] = '원본 파일 보기'; $lang['mediaroot'] = '루트'; $lang['mediaupload'] = '파일을 현재 이름공간으로 올립니다. 하위 이름공간으로 만들려면 선택한 파일 이름 앞에 쌍점(:)으로 구분되는 이름을 붙이면 됩니다. 파일을 드래그 앤 드롭해 선택할 수 있습니다.'; $lang['mediaextchange'] = '파일 확장자가 .%s에서 .%s(으)로 바뀌었습니다!'; -$lang['reference'] = '참고'; +$lang['reference'] = '다음을 참조'; $lang['ref_inuse'] = '다음 문서에서 아직 사용 중이므로 파일을 삭제할 수 없습니다:'; $lang['ref_hidden'] = '문서의 일부 참고는 읽을 수 있는 권한이 없습니다'; $lang['hits'] = '조회 수'; @@ -185,13 +188,18 @@ $lang['difflink'] = '차이 보기로 링크'; $lang['diff_type'] = '차이 보기:'; $lang['diff_inline'] = '직렬 방식'; $lang['diff_side'] = '다중 창 방식'; +$lang['diffprevrev'] = '이전 판'; +$lang['diffnextrev'] = '다음 판'; +$lang['difflastrev'] = '마지막 판'; +$lang['diffbothprevrev'] = '양쪽 이전 판'; +$lang['diffbothnextrev'] = '양쪽 다음 판'; $lang['line'] = '줄'; $lang['breadcrumb'] = '추적'; $lang['youarehere'] = '현재 위치'; $lang['lastmod'] = '마지막으로 수정됨'; $lang['by'] = '저자'; $lang['deleted'] = '제거됨'; -$lang['created'] = '새로 만듦'; +$lang['created'] = '만듦'; $lang['restored'] = '이전 판으로 되돌림 (%s)'; $lang['external_edit'] = '바깥 편집'; $lang['summary'] = '편집 요약'; @@ -232,7 +240,7 @@ $lang['qb_extlink'] = '바깥 링크'; $lang['qb_hr'] = '가로줄'; $lang['qb_ol'] = '순서 있는 목록'; $lang['qb_ul'] = '순서 없는 목록'; -$lang['qb_media'] = '그림과 기타 파일 추가 (새 창에서 열림)'; +$lang['qb_media'] = '그림과 다른 파일 추가 (새 창에서 열림)'; $lang['qb_sig'] = '서명 넣기'; $lang['qb_smileys'] = '이모티콘'; $lang['qb_chars'] = '특수 문자'; @@ -241,7 +249,6 @@ $lang['admin_register'] = '새 사용자 추가'; $lang['metaedit'] = '메타데이터 편집'; $lang['metasaveerr'] = '메타데이터 쓰기 실패'; $lang['metasaveok'] = '메타데이터 저장됨'; -$lang['img_backto'] = '뒤로'; $lang['img_title'] = '제목'; $lang['img_caption'] = '설명'; $lang['img_date'] = '날짜'; @@ -254,7 +261,6 @@ $lang['img_camera'] = '카메라'; $lang['img_keywords'] = '키워드'; $lang['img_width'] = '너비'; $lang['img_height'] = '높이'; -$lang['img_manager'] = '미디어 관리자에서 보기'; $lang['subscr_subscribe_success'] = '%s 사용자가 %s 구독 목록에 추가했습니다'; $lang['subscr_subscribe_error'] = '%s 사용자가 %s 구독 목록에 추가하는데 실패했습니다'; $lang['subscr_subscribe_noaddress'] = '로그인으로 연결된 주소가 없기 때문에 구독 목록에 추가할 수 없습니다'; @@ -302,7 +308,7 @@ $lang['i_pop_field'] = '도쿠위키 경험을 개선하는 데 도움 $lang['i_pop_label'] = '한 달에 한 번씩, 도쿠위키 개발자에게 익명의 사용 데이터를 보냅니다'; $lang['recent_global'] = '현재 <b>%s</b> 이름공간을 구독 중입니다. <a href="%s">전체 위키의 최근 바뀜도 볼 수</a> 있습니다.'; $lang['years'] = '%d년 전'; -$lang['months'] = '%d달 전'; +$lang['months'] = '%d개월 전'; $lang['weeks'] = '%d주 전'; $lang['days'] = '%d일 전'; $lang['hours'] = '%d시간 전'; diff --git a/inc/lang/ko/searchpage.txt b/inc/lang/ko/searchpage.txt index 2313f0bb0..53faa04c6 100644 --- a/inc/lang/ko/searchpage.txt +++ b/inc/lang/ko/searchpage.txt @@ -1,5 +1,5 @@ ====== 검색 ====== -아래에서 검색 결과를 찾을 수 있습니다. 만약 원하는 문서를 찾지 못했다면, "문서 만들기"나 "문서 편집"을 사용해 검색어와 같은 이름의 문서를 만들거나 편집할 수 있습니다. +아래에서 검색 결과를 찾을 수 있습니다. 만약 원하는 문서를 찾지 못했다면, ''문서 만들기''나 ''문서 편집''을 사용해 검색어와 같은 이름의 문서를 만들거나 편집할 수 있습니다. ===== 결과 =====
\ No newline at end of file diff --git a/inc/lang/ko/subscr_digest.txt b/inc/lang/ko/subscr_digest.txt index 0f03e51a3..d1f2d4b99 100644 --- a/inc/lang/ko/subscr_digest.txt +++ b/inc/lang/ko/subscr_digest.txt @@ -11,7 +11,7 @@ 새 판: @NEWPAGE@ -문서의 알림을 취소하려면, @DOKUWIKIURL@에 로그인한 뒤 +문서 알림을 취소하려면, @DOKUWIKIURL@에 로그인한 뒤 @SUBSCRIBE@ 문서를 방문해 문서나 이름공간의 구독을 취소하세요. -- diff --git a/inc/lang/ko/updateprofile.txt b/inc/lang/ko/updateprofile.txt index 80545e9bf..055272e9d 100644 --- a/inc/lang/ko/updateprofile.txt +++ b/inc/lang/ko/updateprofile.txt @@ -1,3 +1,3 @@ -====== 개인 정보 바꾸기 ====== +====== 계정 프로필 바꾸기 ====== 바꾸고 싶은 항목을 입력하세요. 사용자 이름은 바꿀 수 없습니다.
\ No newline at end of file diff --git a/inc/lang/ku/lang.php b/inc/lang/ku/lang.php index b6287806d..14f568b8e 100644 --- a/inc/lang/ku/lang.php +++ b/inc/lang/ku/lang.php @@ -127,7 +127,7 @@ $lang['admin_register']= 'Add new user...'; $lang['metaedit'] = 'Edit Metadata'; $lang['metasaveerr'] = 'Writing metadata failed'; $lang['metasaveok'] = 'Metadata saved'; -$lang['img_backto'] = 'Back to'; +$lang['btn_img_backto'] = 'Back to %s'; $lang['img_title'] = 'Title'; $lang['img_caption'] = 'Caption'; $lang['img_date'] = 'Date'; diff --git a/inc/lang/la/lang.php b/inc/lang/la/lang.php index c71a71bdd..691b303ed 100644 --- a/inc/lang/la/lang.php +++ b/inc/lang/la/lang.php @@ -202,7 +202,7 @@ $lang['admin_register'] = 'Nouom Sodalem creare'; $lang['metaedit'] = 'Res codicis mutare'; $lang['metasaveerr'] = 'Res codicis non scribitur.'; $lang['metasaveok'] = 'Res codicis seruatae.'; -$lang['img_backto'] = 'Redere ad'; +$lang['btn_img_backto'] = 'Redere ad %s'; $lang['img_title'] = 'Titulus'; $lang['img_caption'] = 'Descriptio'; $lang['img_date'] = 'Dies'; diff --git a/inc/lang/lb/lang.php b/inc/lang/lb/lang.php index 55113745a..efb98f679 100644 --- a/inc/lang/lb/lang.php +++ b/inc/lang/lb/lang.php @@ -162,7 +162,7 @@ $lang['admin_register'] = 'Neie Benotzer bäisetzen'; $lang['metaedit'] = 'Metadaten änneren'; $lang['metasaveerr'] = 'Feeler beim Schreiwe vun de Metadaten'; $lang['metasaveok'] = 'Metadate gespäichert'; -$lang['img_backto'] = 'Zeréck op'; +$lang['btn_img_backto'] = 'Zeréck op %s'; $lang['img_title'] = 'Titel'; $lang['img_caption'] = 'Beschreiwung'; $lang['img_date'] = 'Datum'; diff --git a/inc/lang/lt/lang.php b/inc/lang/lt/lang.php index c38ea8838..74c8c88e9 100644 --- a/inc/lang/lt/lang.php +++ b/inc/lang/lt/lang.php @@ -163,7 +163,7 @@ $lang['admin_register'] = 'Sukurti naują vartotoją'; $lang['metaedit'] = 'Redaguoti metaduomenis'; $lang['metasaveerr'] = 'Nepavyko išsaugoti metaduomenų'; $lang['metasaveok'] = 'Metaduomenys išsaugoti'; -$lang['img_backto'] = 'Atgal į'; +$lang['btn_img_backto'] = 'Atgal į %s'; $lang['img_title'] = 'Pavadinimas'; $lang['img_caption'] = 'Antraštė'; $lang['img_date'] = 'Data'; diff --git a/inc/lang/lv/lang.php b/inc/lang/lv/lang.php index 898125d60..91fed262e 100644 --- a/inc/lang/lv/lang.php +++ b/inc/lang/lv/lang.php @@ -228,7 +228,7 @@ $lang['admin_register'] = 'Pievienot jaunu lietotāju'; $lang['metaedit'] = 'Labot metadatus'; $lang['metasaveerr'] = 'Metadati nav saglabāti'; $lang['metasaveok'] = 'Metadati saglabāti'; -$lang['img_backto'] = 'Atpakaļ uz'; +$lang['btn_img_backto'] = 'Atpakaļ uz %s'; $lang['img_title'] = 'Virsraksts'; $lang['img_caption'] = 'Apraksts'; $lang['img_date'] = 'Datums'; @@ -241,7 +241,7 @@ $lang['img_camera'] = 'Fotoaparāts'; $lang['img_keywords'] = 'Atslēgvārdi'; $lang['img_width'] = 'Platums'; $lang['img_height'] = 'Augstums'; -$lang['img_manager'] = 'Skatīt mēdiju pārvaldniekā'; +$lang['btn_mediaManager'] = 'Skatīt mēdiju pārvaldniekā'; $lang['subscr_subscribe_success'] = '%s pievienots %s abonēšanas sarakstam'; $lang['subscr_subscribe_error'] = 'Kļūme pievienojot %s %s abonēšanas sarakstam.'; $lang['subscr_subscribe_noaddress'] = 'Nav zināma jūsu e-pasta adrese, tāpēc nevarat abonēt.'; diff --git a/inc/lang/mk/lang.php b/inc/lang/mk/lang.php index 2b2c9fb7f..6bf5fafc9 100644 --- a/inc/lang/mk/lang.php +++ b/inc/lang/mk/lang.php @@ -171,7 +171,7 @@ $lang['admin_register'] = 'Додај нов корисник'; $lang['metaedit'] = 'Уреди мета-податоци'; $lang['metasaveerr'] = 'Запишување на мета-податоците не успеа'; $lang['metasaveok'] = 'Мета-податоците се зачувани'; -$lang['img_backto'] = 'Назад до'; +$lang['btn_img_backto'] = 'Назад до %s'; $lang['img_title'] = 'Насловна линија'; $lang['img_caption'] = 'Наслов'; $lang['img_date'] = 'Датум'; diff --git a/inc/lang/mr/lang.php b/inc/lang/mr/lang.php index 54b69974d..ab84e7353 100644 --- a/inc/lang/mr/lang.php +++ b/inc/lang/mr/lang.php @@ -227,7 +227,7 @@ $lang['admin_register'] = 'नवीन सदस्य'; $lang['metaedit'] = 'मेटाडेटा बदला'; $lang['metasaveerr'] = 'मेटाडेटा सुरक्षित झाला नाही'; $lang['metasaveok'] = 'मेटाडेटा सुरक्षित झाला'; -$lang['img_backto'] = 'परत जा'; +$lang['btn_img_backto'] = 'परत जा %s'; $lang['img_title'] = 'नाव'; $lang['img_caption'] = 'टीप'; $lang['img_date'] = 'तारीख'; @@ -240,7 +240,7 @@ $lang['img_camera'] = 'कॅमेरा'; $lang['img_keywords'] = 'मुख्य शब्द'; $lang['img_width'] = 'रुंदी'; $lang['img_height'] = 'उंची'; -$lang['img_manager'] = 'मिडिया व्यवस्थापकात बघू'; +$lang['btn_mediaManager'] = 'मिडिया व्यवस्थापकात बघू'; $lang['authtempfail'] = 'सदस्य अधिकृत करण्याची सुविधा सध्या चालू नाही. सतत हा मजकूर दिसल्यास कृपया तुमच्या विकीच्या व्यवस्थापकाशी सम्पर्क साधा.'; $lang['i_chooselang'] = 'तुमची भाषा निवडा'; $lang['i_installer'] = 'डॉक्युविकि इनस्टॉलर'; diff --git a/inc/lang/ne/lang.php b/inc/lang/ne/lang.php index 7fd14d2c5..a7d694d5b 100644 --- a/inc/lang/ne/lang.php +++ b/inc/lang/ne/lang.php @@ -158,7 +158,7 @@ $lang['admin_register'] = 'नयाँ प्रयोगकर्ता $lang['metaedit'] = 'मेटाडेटा सम्पादन गर्नुहोस्'; $lang['metasaveerr'] = 'मेटाडाटा लेखन असफल'; $lang['metasaveok'] = 'मेटाडाटा वचत भयो '; -$lang['img_backto'] = 'फिर्ता'; +$lang['btn_img_backto'] = 'फिर्ता%s'; $lang['img_title'] = 'शिर्षक'; $lang['img_caption'] = 'निम्न लेख'; $lang['img_date'] = 'मिति'; diff --git a/inc/lang/nl/lang.php b/inc/lang/nl/lang.php index e22aa9fff..b6cf11968 100644 --- a/inc/lang/nl/lang.php +++ b/inc/lang/nl/lang.php @@ -67,6 +67,8 @@ $lang['btn_register'] = 'Registreren'; $lang['btn_apply'] = 'Toepassen'; $lang['btn_media'] = 'Mediabeheerder'; $lang['btn_deleteuser'] = 'Verwijder mijn account'; +$lang['btn_img_backto'] = 'Terug naar %s'; +$lang['btn_mediaManager'] = 'In mediabeheerder bekijken'; $lang['loggedinas'] = 'Ingelogd als'; $lang['user'] = 'Gebruikersnaam'; $lang['pass'] = 'Wachtwoord'; @@ -198,6 +200,11 @@ $lang['difflink'] = 'Link naar deze vergelijking'; $lang['diff_type'] = 'Bekijk verschillen:'; $lang['diff_inline'] = 'Inline'; $lang['diff_side'] = 'Zij aan zij'; +$lang['diffprevrev'] = 'Vorige revisie'; +$lang['diffnextrev'] = 'Volgende revisie'; +$lang['difflastrev'] = 'Laatste revisie'; +$lang['diffbothprevrev'] = 'Beide kanten vorige revisie'; +$lang['diffbothnextrev'] = 'Beide kanten volgende revisie'; $lang['line'] = 'Regel'; $lang['breadcrumb'] = 'Spoor'; $lang['youarehere'] = 'Je bent hier'; @@ -254,7 +261,6 @@ $lang['admin_register'] = 'Nieuwe gebruiker toevoegen'; $lang['metaedit'] = 'Metadata wijzigen'; $lang['metasaveerr'] = 'Schrijven van metadata mislukt'; $lang['metasaveok'] = 'Metadata bewaard'; -$lang['img_backto'] = 'Terug naar'; $lang['img_title'] = 'Titel'; $lang['img_caption'] = 'Bijschrift'; $lang['img_date'] = 'Datum'; @@ -267,7 +273,6 @@ $lang['img_camera'] = 'Camera'; $lang['img_keywords'] = 'Trefwoorden'; $lang['img_width'] = 'Breedte'; $lang['img_height'] = 'Hoogte'; -$lang['img_manager'] = 'In mediabeheerder bekijken'; $lang['subscr_subscribe_success'] = '%s is ingeschreven voor %s'; $lang['subscr_subscribe_error'] = 'Fout bij inschrijven van %s voor %s'; $lang['subscr_subscribe_noaddress'] = 'Er is geen e-mailadres gekoppeld aan uw account, u kunt daardoor niet worden ingeschreven.'; diff --git a/inc/lang/no/lang.php b/inc/lang/no/lang.php index 3f31f6c73..8b3c4937f 100644 --- a/inc/lang/no/lang.php +++ b/inc/lang/no/lang.php @@ -20,6 +20,7 @@ * @author Egil Hansen <egil@rosetta.no> * @author Thomas Juberg <Thomas.Juberg@Gmail.com> * @author Boris <boris@newton-media.no> + * @author Christopher Schive <chschive@frisurf.no> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -64,6 +65,8 @@ $lang['btn_register'] = 'Registrer deg'; $lang['btn_apply'] = 'Bruk'; $lang['btn_media'] = 'Mediefiler'; $lang['btn_deleteuser'] = 'Fjern min konto'; +$lang['btn_img_backto'] = 'Tilbake til %s'; +$lang['btn_mediaManager'] = 'Vis i mediefilbehandler'; $lang['loggedinas'] = 'Innlogget som'; $lang['user'] = 'Brukernavn'; $lang['pass'] = 'Passord'; @@ -195,6 +198,11 @@ $lang['difflink'] = 'Lenk til denne sammenligningen'; $lang['diff_type'] = 'Vis forskjeller:'; $lang['diff_inline'] = 'I teksten'; $lang['diff_side'] = 'Side ved side'; +$lang['diffprevrev'] = 'Forrige revisjon'; +$lang['diffnextrev'] = 'Neste revisjon'; +$lang['difflastrev'] = 'Siste revisjon'; +$lang['diffbothprevrev'] = 'Begge sider forrige revisjon'; +$lang['diffbothnextrev'] = 'Begge sider neste revisjon'; $lang['line'] = 'Linje'; $lang['breadcrumb'] = 'Spor'; $lang['youarehere'] = 'Du er her'; @@ -251,7 +259,6 @@ $lang['admin_register'] = 'Legg til ny bruker'; $lang['metaedit'] = 'Rediger metadata'; $lang['metasaveerr'] = 'Skriving av metadata feilet'; $lang['metasaveok'] = 'Metadata lagret'; -$lang['img_backto'] = 'Tilbake til'; $lang['img_title'] = 'Tittel'; $lang['img_caption'] = 'Bildetekst'; $lang['img_date'] = 'Dato'; @@ -264,7 +271,6 @@ $lang['img_camera'] = 'Kamera'; $lang['img_keywords'] = 'Nøkkelord'; $lang['img_width'] = 'Bredde'; $lang['img_height'] = 'Høyde'; -$lang['img_manager'] = 'Vis i mediefilbehandler'; $lang['subscr_subscribe_success'] = 'La til %s som abonnent på %s'; $lang['subscr_subscribe_error'] = 'Klarte ikke å legge til %s som abonnent på %s'; $lang['subscr_subscribe_noaddress'] = 'Brukeren din er ikke registrert med noen adresse. Du kan derfor ikke legges til som abonnent.'; @@ -348,3 +354,4 @@ $lang['media_restore'] = 'Gjenopprett denne versjonen'; $lang['currentns'] = 'gjeldende navnemellomrom'; $lang['searchresult'] = 'Søk i resultat'; $lang['plainhtml'] = 'Enkel HTML'; +$lang['wikimarkup'] = 'wiki-format'; diff --git a/inc/lang/no/resetpwd.txt b/inc/lang/no/resetpwd.txt new file mode 100644 index 000000000..2da717021 --- /dev/null +++ b/inc/lang/no/resetpwd.txt @@ -0,0 +1,3 @@ +====== Sett nytt passord ====== + +Vennligst skriv inn et nytt passord for din konto i denne wikien.
\ No newline at end of file diff --git a/inc/lang/pl/lang.php b/inc/lang/pl/lang.php index e5f2d8d40..e65866761 100644 --- a/inc/lang/pl/lang.php +++ b/inc/lang/pl/lang.php @@ -247,7 +247,7 @@ $lang['admin_register'] = 'Dodawanie użytkownika'; $lang['metaedit'] = 'Edytuj metadane'; $lang['metasaveerr'] = 'Zapis metadanych nie powiódł się'; $lang['metasaveok'] = 'Metadane zapisano'; -$lang['img_backto'] = 'Wróć do'; +$lang['btn_img_backto'] = 'Wróć do %s'; $lang['img_title'] = 'Tytuł'; $lang['img_caption'] = 'Nagłówek'; $lang['img_date'] = 'Data'; @@ -260,7 +260,7 @@ $lang['img_camera'] = 'Aparat'; $lang['img_keywords'] = 'Słowa kluczowe'; $lang['img_width'] = 'Szerokość'; $lang['img_height'] = 'Wysokość'; -$lang['img_manager'] = 'Zobacz w menadżerze multimediów'; +$lang['btn_mediaManager'] = 'Zobacz w menadżerze multimediów'; $lang['subscr_subscribe_success'] = 'Dodano %s do listy subskrypcji %s'; $lang['subscr_subscribe_error'] = 'Błąd podczas dodawania %s do listy subskrypcji %s'; $lang['subscr_subscribe_noaddress'] = 'Brak adresu skojarzonego z twoim loginem, nie możesz zostać dodany(a) do listy subskrypcji'; diff --git a/inc/lang/pt-br/lang.php b/inc/lang/pt-br/lang.php index 6845e792d..d5539f921 100644 --- a/inc/lang/pt-br/lang.php +++ b/inc/lang/pt-br/lang.php @@ -254,7 +254,7 @@ $lang['admin_register'] = 'Adicionar novo usuário'; $lang['metaedit'] = 'Editar metadados'; $lang['metasaveerr'] = 'Não foi possível escrever os metadados'; $lang['metasaveok'] = 'Os metadados foram salvos'; -$lang['img_backto'] = 'Voltar para'; +$lang['btn_img_backto'] = 'Voltar para %s'; $lang['img_title'] = 'Título'; $lang['img_caption'] = 'Descrição'; $lang['img_date'] = 'Data'; @@ -267,7 +267,7 @@ $lang['img_camera'] = 'Câmera'; $lang['img_keywords'] = 'Palavras-chave'; $lang['img_width'] = 'Largura'; $lang['img_height'] = 'Altura'; -$lang['img_manager'] = 'Ver no gerenciador de mídias'; +$lang['btn_mediaManager'] = 'Ver no gerenciador de mídias'; $lang['subscr_subscribe_success'] = 'Adicionado %s à lista de monitoramentos de %s'; $lang['subscr_subscribe_error'] = 'Ocorreu um erro na adição de %s à lista de monitoramentos de %s'; $lang['subscr_subscribe_noaddress'] = 'Como não há nenhum endereço associado ao seu usuário, você não pode ser adicionado à lista de monitoramento'; diff --git a/inc/lang/pt/lang.php b/inc/lang/pt/lang.php index 46405c444..b2bb2dc34 100644 --- a/inc/lang/pt/lang.php +++ b/inc/lang/pt/lang.php @@ -233,7 +233,7 @@ $lang['admin_register'] = 'Registar Novo Utilizador'; $lang['metaedit'] = 'Editar Metadata'; $lang['metasaveerr'] = 'Falhou a escrita de Metadata'; $lang['metasaveok'] = 'Metadata gravada'; -$lang['img_backto'] = 'De volta a'; +$lang['btn_img_backto'] = 'De volta a %s'; $lang['img_title'] = 'Título'; $lang['img_caption'] = 'Legenda'; $lang['img_date'] = 'Data'; @@ -246,7 +246,7 @@ $lang['img_camera'] = 'Câmara'; $lang['img_keywords'] = 'Palavras-Chave'; $lang['img_width'] = 'Largura'; $lang['img_height'] = 'Altura'; -$lang['img_manager'] = 'Ver em gestor de media'; +$lang['btn_mediaManager'] = 'Ver em gestor de media'; $lang['subscr_subscribe_success'] = 'Adicionado %s à lista de subscrição para %s'; $lang['subscr_subscribe_error'] = 'Erro ao adicionar %s à lista de subscrição para %s'; $lang['subscr_subscribe_noaddress'] = 'Não existe endereço algum associado com o seu nome de utilizador, não pode ser adicionado à lista de subscrição'; diff --git a/inc/lang/ro/lang.php b/inc/lang/ro/lang.php index 491ab58e7..31b2d7eba 100644 --- a/inc/lang/ro/lang.php +++ b/inc/lang/ro/lang.php @@ -232,7 +232,7 @@ $lang['admin_register'] = 'Adaugă utilizator nou'; $lang['metaedit'] = 'Editează metadata'; $lang['metasaveerr'] = 'Scrierea metadatelor a eșuat'; $lang['metasaveok'] = 'Metadatele au fost salvate'; -$lang['img_backto'] = 'Înapoi la'; +$lang['btn_img_backto'] = 'Înapoi la %s'; $lang['img_title'] = 'Titlu'; $lang['img_caption'] = 'Legendă'; $lang['img_date'] = 'Dată'; @@ -245,7 +245,7 @@ $lang['img_camera'] = 'Camera'; $lang['img_keywords'] = 'Cuvinte cheie'; $lang['img_width'] = 'Lățime'; $lang['img_height'] = 'Înălțime'; -$lang['img_manager'] = 'Vizualizează în administratorul media'; +$lang['btn_mediaManager'] = 'Vizualizează în administratorul media'; $lang['subscr_subscribe_success'] = 'Adăugat %s la lista de abonare pentru %s'; $lang['subscr_subscribe_error'] = 'Eroare la adăugarea %s la lista de abonare pentru %s'; $lang['subscr_subscribe_noaddress'] = 'Nu există adresă de e-mail asociată autentificării curente, nu poți fi adăugat la lista de abonare'; diff --git a/inc/lang/ru/lang.php b/inc/lang/ru/lang.php index bf8fa34c8..4cd3e5f0b 100644 --- a/inc/lang/ru/lang.php +++ b/inc/lang/ru/lang.php @@ -25,6 +25,7 @@ * @author Artur <ncuxxx@gmail.com> * @author Erli Moen <evseev.jr@gmail.com> * @author Aleksandr Selivanov <alexgearbox@yandex.ru> + * @author Владимир <id37736@yandex.ru> */ $lang['encoding'] = ' utf-8'; $lang['direction'] = 'ltr'; @@ -69,6 +70,8 @@ $lang['btn_register'] = 'Зарегистрироваться'; $lang['btn_apply'] = 'Применить'; $lang['btn_media'] = 'Управление медиафайлами'; $lang['btn_deleteuser'] = 'Удалить мой аккаунт'; +$lang['btn_img_backto'] = 'Вернуться к %s'; +$lang['btn_mediaManager'] = 'Просмотр в «управлении медиафайлами»'; $lang['loggedinas'] = 'Зашли как'; $lang['user'] = 'Логин'; $lang['pass'] = 'Пароль'; @@ -198,6 +201,9 @@ $lang['difflink'] = 'Ссылка на это сравнение'; $lang['diff_type'] = 'Посмотреть отличия'; $lang['diff_inline'] = 'встроенный'; $lang['diff_side'] = 'бок о бок'; +$lang['diffprevrev'] = 'Предыдущая версия'; +$lang['diffnextrev'] = 'Следущая версия'; +$lang['difflastrev'] = 'Последняя версия'; $lang['line'] = 'Строка'; $lang['breadcrumb'] = 'Вы посетили'; $lang['youarehere'] = 'Вы находитесь здесь'; @@ -254,7 +260,6 @@ $lang['admin_register'] = 'Добавить пользователя'; $lang['metaedit'] = 'Править метаданные'; $lang['metasaveerr'] = 'Ошибка записи метаданных'; $lang['metasaveok'] = 'Метаданные сохранены'; -$lang['img_backto'] = 'Вернуться к'; $lang['img_title'] = 'Название'; $lang['img_caption'] = 'Подпись'; $lang['img_date'] = 'Дата'; @@ -267,7 +272,6 @@ $lang['img_camera'] = 'Модель'; $lang['img_keywords'] = 'Ключевые слова'; $lang['img_width'] = 'Ширина'; $lang['img_height'] = 'Высота'; -$lang['img_manager'] = 'Просмотр в «управлении медиафайлами»'; $lang['subscr_subscribe_success'] = 'Добавлен %s в подписку на %s'; $lang['subscr_subscribe_error'] = 'Невозможно добавить %s в подписку на %s'; $lang['subscr_subscribe_noaddress'] = 'Нет адреса электронной почты, сопоставленного с вашей учётной записью. Вы не можете подписаться на рассылку'; diff --git a/inc/lang/sk/lang.php b/inc/lang/sk/lang.php index aa823b074..3ba220a2d 100644 --- a/inc/lang/sk/lang.php +++ b/inc/lang/sk/lang.php @@ -238,7 +238,7 @@ $lang['admin_register'] = 'Pridaj nového užívateľa'; $lang['metaedit'] = 'Upraviť metainformácie'; $lang['metasaveerr'] = 'Zápis metainformácií zlyhal'; $lang['metasaveok'] = 'Metainformácie uložené'; -$lang['img_backto'] = 'Späť na'; +$lang['btn_img_backto'] = 'Späť na %s'; $lang['img_title'] = 'Titul'; $lang['img_caption'] = 'Popis'; $lang['img_date'] = 'Dátum'; @@ -251,7 +251,7 @@ $lang['img_camera'] = 'Fotoaparát'; $lang['img_keywords'] = 'Kľúčové slová'; $lang['img_width'] = 'Šírka'; $lang['img_height'] = 'Výška'; -$lang['img_manager'] = 'Prezrieť v správcovi médií'; +$lang['btn_mediaManager'] = 'Prezrieť v správcovi médií'; $lang['subscr_subscribe_success'] = 'Používateľ %s bol pridaný do zoznamu hlásení o zmenách %s'; $lang['subscr_subscribe_error'] = 'Chyba pri pridaní používateľa %s do zoznamu hlásení o zmenách %s'; $lang['subscr_subscribe_noaddress'] = 'Vaše prihlasovacie meno nemá priradenú žiadnu email adresu, nemôžete byť pridaný do zoznamu hlásení o zmenách'; diff --git a/inc/lang/sl/lang.php b/inc/lang/sl/lang.php index c9a47927d..c834611dc 100644 --- a/inc/lang/sl/lang.php +++ b/inc/lang/sl/lang.php @@ -10,6 +10,7 @@ * @author Matej Urbančič (mateju@svn.gnome.org) * @author Matej Urbančič <mateju@svn.gnome.org> * @author matej <mateju@svn.gnome.org> + * @author Jernej Vidmar <jernej.vidmar@vidmarboehm.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -54,6 +55,8 @@ $lang['btn_register'] = 'Prijava'; $lang['btn_apply'] = 'Uveljavi'; $lang['btn_media'] = 'Urejevalnik predstavnih vsebin'; $lang['btn_deleteuser'] = 'Odstrani račun'; +$lang['btn_img_backto'] = 'Nazaj na %s'; +$lang['btn_mediaManager'] = 'Poglej v urejevalniku predstavnih vsebin'; $lang['loggedinas'] = 'Prijava kot'; $lang['user'] = 'Uporabniško ime'; $lang['pass'] = 'Geslo'; @@ -85,6 +88,7 @@ $lang['profchanged'] = 'Uporabniški profil je uspešno posodobljen.'; $lang['profnodelete'] = 'Ni omogočena podpora za brisanje uporabnikov.'; $lang['profdeleteuser'] = 'Izbriši račun'; $lang['profdeleted'] = 'Uporabniški račun je izbrisan.'; +$lang['profconfdeletemissing'] = 'Potrditveno okno ni označeno'; $lang['pwdforget'] = 'Ali ste pozabili geslo? Pridobite si novo geslo.'; $lang['resendna'] = 'DokuWiki ne podpira možnosti ponovnega pošiljanja gesel.'; $lang['resendpwd'] = 'Nastavi novo geslo za'; @@ -179,6 +183,9 @@ $lang['difflink'] = 'Poveži s tem pogledom primerjave.'; $lang['diff_type'] = 'Razlike:'; $lang['diff_inline'] = 'V besedilu'; $lang['diff_side'] = 'Eno ob drugem'; +$lang['diffprevrev'] = 'Prejšnja revizija'; +$lang['diffnextrev'] = 'Naslednja revizija'; +$lang['difflastrev'] = 'Zadnja revizija'; $lang['line'] = 'Vrstica'; $lang['breadcrumb'] = 'Sled'; $lang['youarehere'] = 'Trenutno dejavna stran'; @@ -235,7 +242,6 @@ $lang['admin_register'] = 'Dodaj novega uporabnika'; $lang['metaedit'] = 'Uredi metapodatke'; $lang['metasaveerr'] = 'Zapisovanje metapodatkov je spodletelo'; $lang['metasaveok'] = 'Metapodatki so shranjeni'; -$lang['img_backto'] = 'Nazaj na'; $lang['img_title'] = 'Naslov'; $lang['img_caption'] = 'Opis'; $lang['img_date'] = 'Datum'; @@ -248,7 +254,6 @@ $lang['img_camera'] = 'Fotoaparat'; $lang['img_keywords'] = 'Ključne besede'; $lang['img_width'] = 'Širina'; $lang['img_height'] = 'Višina'; -$lang['img_manager'] = 'Poglej v urejevalniku predstavnih vsebin'; $lang['subscr_subscribe_success'] = 'Uporabniški račun %s je dodan na seznam naročnin na %s'; $lang['subscr_subscribe_error'] = 'Napaka med dodajanjem %s na seznam naročnin na %s'; $lang['subscr_subscribe_noaddress'] = 'S trenutnimi prijavnimi podatki ni povezanega elektronskega naslova, zato uporabniškega računa ni mogoče dodati na seznam naročnikov.'; @@ -291,6 +296,8 @@ $lang['i_allowreg'] = 'Dovoli uporabnikom vpis'; $lang['i_retry'] = 'Ponovni poskus'; $lang['i_license'] = 'Izbor dovoljenja objave vsebine:'; $lang['i_license_none'] = 'Ne pokaži podrobnosti dovoljenja.'; +$lang['i_pop_field'] = 'Prosimo pomagajte nam izboljšati DokuWiki izkušnjo:'; +$lang['i_pop_label'] = 'Enkrat na mesec pošlji anonimne uporabniške podatke DokuWiki razvijalcem'; $lang['recent_global'] = 'Trenutno so prikazane spremembe znotraj imenskega prostora <b>%s</b>. Mogoče si je ogledati tudi spremembe <a href="%s">celotnega sistema Wiki</a>.'; $lang['years'] = '%d let nazaj'; $lang['months'] = '%d mesecev nazaj'; diff --git a/inc/lang/sq/lang.php b/inc/lang/sq/lang.php index 2ed62ed4e..c31cdd360 100644 --- a/inc/lang/sq/lang.php +++ b/inc/lang/sq/lang.php @@ -179,7 +179,7 @@ $lang['admin_register'] = 'Shto Përdorues të Ri'; $lang['metaedit'] = 'Redakto Metadata'; $lang['metasaveerr'] = 'Shkrimi i metadata-ve dështoi'; $lang['metasaveok'] = 'Metadata u ruajt'; -$lang['img_backto'] = 'Mbrapa te'; +$lang['btn_img_backto'] = 'Mbrapa te %s'; $lang['img_title'] = 'Titulli '; $lang['img_caption'] = 'Titra'; $lang['img_date'] = 'Data'; diff --git a/inc/lang/sr/lang.php b/inc/lang/sr/lang.php index 7c434cbc9..4b44704ad 100644 --- a/inc/lang/sr/lang.php +++ b/inc/lang/sr/lang.php @@ -201,7 +201,7 @@ $lang['admin_register'] = 'Додај новог корисника'; $lang['metaedit'] = 'Измени мета-податке'; $lang['metasaveerr'] = 'Записивање мета-података није било успешно'; $lang['metasaveok'] = 'Мета-подаци су сачувани'; -$lang['img_backto'] = 'Натраг на'; +$lang['btn_img_backto'] = 'Натраг на %s'; $lang['img_title'] = 'Наслов'; $lang['img_caption'] = 'Назив'; $lang['img_date'] = 'Датум'; diff --git a/inc/lang/sv/lang.php b/inc/lang/sv/lang.php index 8c8858f61..c057d8705 100644 --- a/inc/lang/sv/lang.php +++ b/inc/lang/sv/lang.php @@ -249,7 +249,7 @@ $lang['admin_register'] = 'Lägg till ny användare'; $lang['metaedit'] = 'Redigera metadata'; $lang['metasaveerr'] = 'Skrivning av metadata misslyckades'; $lang['metasaveok'] = 'Metadata sparad'; -$lang['img_backto'] = 'Tillbaka till'; +$lang['btn_img_backto'] = 'Tillbaka till %s'; $lang['img_title'] = 'Rubrik'; $lang['img_caption'] = 'Bildtext'; $lang['img_date'] = 'Datum'; @@ -262,7 +262,7 @@ $lang['img_camera'] = 'Kamera'; $lang['img_keywords'] = 'Nyckelord'; $lang['img_width'] = 'Bredd'; $lang['img_height'] = 'Höjd'; -$lang['img_manager'] = 'Se mediahanteraren'; +$lang['btn_mediaManager'] = 'Se mediahanteraren'; $lang['subscr_subscribe_success'] = 'La till %s till prenumerationslista %s'; $lang['subscr_subscribe_noaddress'] = 'Det finns ingen adress associerad med din inloggning, du kan inte bli tillagd i prenumerationslistan'; $lang['subscr_unsubscribe_success'] = '%s borttagen från prenumerationslistan för %s'; diff --git a/inc/lang/th/lang.php b/inc/lang/th/lang.php index 5d364166b..8aebfe1a5 100644 --- a/inc/lang/th/lang.php +++ b/inc/lang/th/lang.php @@ -181,7 +181,7 @@ $lang['admin_register'] = 'สร้างบัญชีผู้ใช $lang['metaedit'] = 'แก้ไขข้อมูลเมต้า'; $lang['metasaveerr'] = 'มีข้อผิดพลาดในการเขียนข้อมูลเมต้า'; $lang['metasaveok'] = 'บันทึกเมต้าดาต้าแล้ว'; -$lang['img_backto'] = 'กลับไปยัง'; +$lang['btn_img_backto'] = 'กลับไปยัง %s'; $lang['img_title'] = 'ชื่อภาพ'; $lang['img_caption'] = 'คำบรรยายภาพ'; $lang['img_date'] = 'วันที่'; diff --git a/inc/lang/tr/lang.php b/inc/lang/tr/lang.php index 210a82530..2af17fe27 100644 --- a/inc/lang/tr/lang.php +++ b/inc/lang/tr/lang.php @@ -233,7 +233,7 @@ $lang['admin_register'] = 'Yeni kullanıcı ekle...'; $lang['metaedit'] = 'Metaverileri Değiştir'; $lang['metasaveerr'] = 'Metaveri yazma başarısız '; $lang['metasaveok'] = 'Metaveri kaydedildi'; -$lang['img_backto'] = 'Şuna dön:'; +$lang['btn_img_backto'] = 'Şuna dön: %s'; $lang['img_title'] = 'Başlık'; $lang['img_caption'] = 'Serlevha'; $lang['img_date'] = 'Tarih'; @@ -246,7 +246,7 @@ $lang['img_camera'] = 'Fotoğraf Makinası'; $lang['img_keywords'] = 'Anahtar Sözcükler'; $lang['img_width'] = 'Genişlik'; $lang['img_height'] = 'Yükseklik'; -$lang['img_manager'] = 'Ortam oynatıcısında göster'; +$lang['btn_mediaManager'] = 'Ortam oynatıcısında göster'; $lang['subscr_m_new_header'] = 'Üyelik ekle'; $lang['subscr_m_current_header'] = 'Üyeliğini onayla'; $lang['subscr_m_unsubscribe'] = 'Üyelik iptali'; diff --git a/inc/lang/uk/lang.php b/inc/lang/uk/lang.php index 4e91e82a2..09b2b6d1d 100644 --- a/inc/lang/uk/lang.php +++ b/inc/lang/uk/lang.php @@ -223,7 +223,7 @@ $lang['admin_register'] = 'Додати нового користувач $lang['metaedit'] = 'Редагувати метадані'; $lang['metasaveerr'] = 'Помилка запису метаданих'; $lang['metasaveok'] = 'Метадані збережено'; -$lang['img_backto'] = 'Повернутися до'; +$lang['btn_img_backto'] = 'Повернутися до %s'; $lang['img_title'] = 'Назва'; $lang['img_caption'] = 'Підпис'; $lang['img_date'] = 'Дата'; diff --git a/inc/lang/vi/lang.php b/inc/lang/vi/lang.php index d8e40f875..ccc179eec 100644 --- a/inc/lang/vi/lang.php +++ b/inc/lang/vi/lang.php @@ -192,7 +192,7 @@ $lang['qb_sig'] = 'Đặt chữ ký'; $lang['metaedit'] = 'Sửa Metadata'; $lang['metasaveerr'] = 'Thất bại khi viết metadata'; $lang['metasaveok'] = 'Metadata đã được lưu'; -$lang['img_backto'] = 'Quay lại'; +$lang['btn_img_backto'] = 'Quay lại %s'; $lang['img_title'] = 'Tiêu đề'; $lang['img_caption'] = 'Ghi chú'; $lang['img_date'] = 'Ngày'; @@ -205,7 +205,7 @@ $lang['img_camera'] = 'Camera'; $lang['img_keywords'] = 'Từ khóa'; $lang['img_width'] = 'Rộng'; $lang['img_height'] = 'Cao'; -$lang['img_manager'] = 'Xem trong trình quản lý tệp media'; +$lang['btn_mediaManager'] = 'Xem trong trình quản lý tệp media'; $lang['i_chooselang'] = 'Chọn ngôn ngữ'; $lang['i_retry'] = 'Thử lại'; $lang['years'] = 'cách đây %d năm'; diff --git a/inc/lang/zh-tw/lang.php b/inc/lang/zh-tw/lang.php index 456377810..84afec97a 100644 --- a/inc/lang/zh-tw/lang.php +++ b/inc/lang/zh-tw/lang.php @@ -243,7 +243,7 @@ $lang['admin_register'] = '新增使用者'; $lang['metaedit'] = '編輯後設資料'; $lang['metasaveerr'] = '後設資料無法寫入'; $lang['metasaveok'] = '後設資料已儲存'; -$lang['img_backto'] = '回上一頁'; +$lang['btn_img_backto'] = '回上一頁 %s'; $lang['img_title'] = '標題'; $lang['img_caption'] = '照片說明'; $lang['img_date'] = '日期'; @@ -256,7 +256,7 @@ $lang['img_camera'] = '相機'; $lang['img_keywords'] = '關鍵字'; $lang['img_width'] = '寬度'; $lang['img_height'] = '高度'; -$lang['img_manager'] = '在多媒體管理器中檢視'; +$lang['btn_mediaManager'] = '在多媒體管理器中檢視'; $lang['subscr_subscribe_success'] = '已將 %s 加入至 %s 的訂閱列表'; $lang['subscr_subscribe_error'] = '將 %s 加入至 %s 的訂閱列表時發生錯誤'; $lang['subscr_subscribe_noaddress'] = '沒有與您登入相關的地址,無法將您加入訂閱列表'; diff --git a/inc/lang/zh/lang.php b/inc/lang/zh/lang.php index 8777c65a5..e9e737251 100644 --- a/inc/lang/zh/lang.php +++ b/inc/lang/zh/lang.php @@ -22,6 +22,7 @@ * @author oott123 <ip.192.168.1.1@qq.com> * @author Cupen <Cupenoruler@foxmail.com> * @author xiqingongzi <Xiqingongzi@Gmail.com> + * @author qinghao <qingxianhao@gmail.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -66,6 +67,8 @@ $lang['btn_register'] = '注册'; $lang['btn_apply'] = '应用'; $lang['btn_media'] = '媒体管理器'; $lang['btn_deleteuser'] = '移除我的账户'; +$lang['btn_img_backto'] = '返回到 %s'; +$lang['btn_mediaManager'] = '在媒体管理器中查看'; $lang['loggedinas'] = '登录为'; $lang['user'] = '用户名'; $lang['pass'] = '密码'; @@ -197,6 +200,9 @@ $lang['difflink'] = '到此差别页面的链接'; $lang['diff_type'] = '查看差异:'; $lang['diff_inline'] = '行内显示'; $lang['diff_side'] = '并排显示'; +$lang['diffprevrev'] = '前一修订版'; +$lang['diffnextrev'] = '后一修订版'; +$lang['difflastrev'] = '上一修订版'; $lang['line'] = '行'; $lang['breadcrumb'] = '您的足迹'; $lang['youarehere'] = '您在这里'; @@ -253,7 +259,6 @@ $lang['admin_register'] = '添加新用户'; $lang['metaedit'] = '编辑元数据'; $lang['metasaveerr'] = '写入元数据失败'; $lang['metasaveok'] = '元数据已保存'; -$lang['img_backto'] = '返回到'; $lang['img_title'] = '标题'; $lang['img_caption'] = '说明'; $lang['img_date'] = '日期'; @@ -266,7 +271,6 @@ $lang['img_camera'] = '相机'; $lang['img_keywords'] = '关键字'; $lang['img_width'] = '宽度'; $lang['img_height'] = '高度'; -$lang['img_manager'] = '在媒体管理器中查看'; $lang['subscr_subscribe_success'] = '添加 %s 到 %s 的订阅列表'; $lang['subscr_subscribe_error'] = '添加 %s 到 %s 的订阅列表中出现错误'; $lang['subscr_subscribe_noaddress'] = '没有与您登录信息相关联的地址,您无法被添加到订阅列表'; diff --git a/inc/media.php b/inc/media.php index 894333b11..b5347d145 100644 --- a/inc/media.php +++ b/inc/media.php @@ -501,7 +501,8 @@ function media_saveOldRevision($id){ $date = filemtime($oldf); if (!$conf['mediarevisions']) return $date; - if (!getRevisionInfo($id, $date, 8192, true)) { + $medialog = new MediaChangeLog($id); + if (!$medialog->getRevisionInfo($date)) { // there was an external edit, // there is no log entry for current version of file if (!@file_exists(mediaMetaFN($id,'.changes'))) { @@ -1093,7 +1094,8 @@ function media_diff($image, $ns, $auth, $fromajax = false) { $l_rev = $rev1; }else{ // no revision was given, compare previous to current $r_rev = ''; - $revs = getRevisions($image, 0, 1, 8192, true); + $medialog = new MediaChangeLog($image); + $revs = $medialog->getRevisions(0, 1); if (file_exists(mediaFN($image, $revs[0]))) { $l_rev = $revs[0]; } else { @@ -1446,17 +1448,23 @@ function media_printfile($item,$auth,$jump,$display_namespace=false){ echo '</div>'.NL; } -function media_printicon($filename){ +/** + * Display a media icon + * + * @param $filename + * @param string $size the size subfolder, if not specified 16x16 is used + * @return string + */ +function media_printicon($filename, $size=''){ list($ext) = mimetype(mediaFN($filename),false); - if (@file_exists(DOKU_INC.'lib/images/fileicons/32x32/'.$ext.'.png')) { - $icon = DOKU_BASE.'lib/images/fileicons/32x32/'.$ext.'.png'; + if (@file_exists(DOKU_INC.'lib/images/fileicons/'.$size.'/'.$ext.'.png')) { + $icon = DOKU_BASE.'lib/images/fileicons/'.$size.'/'.$ext.'.png'; } else { - $icon = DOKU_BASE.'lib/images/fileicons/32x32/file.png'; + $icon = DOKU_BASE.'lib/images/fileicons/'.$size.'/file.png'; } return '<img src="'.$icon.'" alt="'.$filename.'" class="icon" />'; - } /** @@ -1480,7 +1488,7 @@ function media_printfile_thumbs($item,$auth,$jump=false,$display_namespace=false echo '<a id="d_:'.$item['id'].'" class="image" title="'.$item['id'].'" href="'. media_managerURL(array('image' => hsc($item['id']), 'ns' => getNS($item['id']), 'tab_details' => 'view')).'">'; - echo media_printicon($item['id']); + echo media_printicon($item['id'], '32x32'); echo '</a>'; } echo '</dt>'.NL; diff --git a/inc/parser/handler.php b/inc/parser/handler.php index 8ae991209..a1040d12e 100644 --- a/inc/parser/handler.php +++ b/inc/parser/handler.php @@ -12,6 +12,7 @@ class Doku_Handler { var $status = array( 'section' => false, + 'doublequote' => 0, ); var $rewriteBlocks = true; @@ -401,11 +402,17 @@ class Doku_Handler { function doublequoteopening($match, $state, $pos) { $this->_addCall('doublequoteopening',array(), $pos); + $this->status['doublequote']++; return true; } function doublequoteclosing($match, $state, $pos) { - $this->_addCall('doublequoteclosing',array(), $pos); + if ($this->status['doublequote'] <= 0) { + $this->doublequoteopening($match, $state, $pos); + } else { + $this->_addCall('doublequoteclosing',array(), $pos); + $this->status['doublequote'] = max(0, --$this->status['doublequote']); + } return true; } @@ -1149,6 +1156,9 @@ class Doku_Handler_Table { var $currentCols = 0; var $firstCell = false; var $lastCellType = 'tablecell'; + var $inTableHead = true; + var $currentRow = array('tableheader' => 0, 'tablecell' => 0); + var $countTableHeadRows = 0; function Doku_Handler_Table(& $CallWriter) { $this->CallWriter = & $CallWriter; @@ -1216,15 +1226,24 @@ class Doku_Handler_Table { $this->firstCell = true; $this->lastCellType = 'tablecell'; $this->maxRows++; + if ($this->inTableHead) { + $this->currentRow = array('tablecell' => 0, 'tableheader' => 0); + } } function tableRowClose($call) { + if ($this->inTableHead && ($this->inTableHead = $this->isTableHeadRow())) { + $this->countTableHeadRows++; + } // Strip off final cell opening and anything after it while ( $discard = array_pop($this->tableCalls ) ) { if ( $discard[0] == 'tablecell_open' || $discard[0] == 'tableheader_open') { break; } + if (!empty($this->currentRow[$discard[0]])) { + $this->currentRow[$discard[0]]--; + } } $this->tableCalls[] = array('tablerow_close', array(), $call[2]); @@ -1233,7 +1252,20 @@ class Doku_Handler_Table { } } + function isTableHeadRow() { + $td = $this->currentRow['tablecell']; + $th = $this->currentRow['tableheader']; + + if (!$th || $td > 2) return false; + if (2*$td > $th) return false; + + return true; + } + function tableCell($call) { + if ($this->inTableHead) { + $this->currentRow[$call[0]]++; + } if ( !$this->firstCell ) { // Increase the span @@ -1281,6 +1313,13 @@ class Doku_Handler_Table { $cellKey = array(); $toDelete = array(); + // if still in tableheader, then there can be no table header + // as all rows can't be within <THEAD> + if ($this->inTableHead) { + $this->inTableHead = false; + $this->countTableHeadRows = 0; + } + // Look for the colspan elements and increment the colspan on the // previous non-empty opening cell. Once done, delete all the cells // that contain colspans @@ -1288,6 +1327,14 @@ class Doku_Handler_Table { $call = $this->tableCalls[$key]; switch ($call[0]) { + case 'table_open' : + if($this->countTableHeadRows) { + array_splice($this->tableCalls, $key+1, 0, array( + array('tablethead_open', array(), $call[2])) + ); + } + break; + case 'tablerow_open': $lastRow++; @@ -1357,15 +1404,19 @@ class Doku_Handler_Table { } else { $spanning_cell = null; - for($i = $lastRow-1; $i > 0; $i--) { - if ( $this->tableCalls[$cellKey[$i][$lastCell]][0] == 'tablecell_open' || $this->tableCalls[$cellKey[$i][$lastCell]][0] == 'tableheader_open' ) { + // can't cross thead/tbody boundary + if (!$this->countTableHeadRows || ($lastRow-1 != $this->countTableHeadRows)) { + for($i = $lastRow-1; $i > 0; $i--) { - if ($this->tableCalls[$cellKey[$i][$lastCell]][1][2] >= $lastRow - $i) { - $spanning_cell = $i; - break; - } + if ( $this->tableCalls[$cellKey[$i][$lastCell]][0] == 'tablecell_open' || $this->tableCalls[$cellKey[$i][$lastCell]][0] == 'tableheader_open' ) { + + if ($this->tableCalls[$cellKey[$i][$lastCell]][1][2] >= $lastRow - $i) { + $spanning_cell = $i; + break; + } + } } } if (is_null($spanning_cell)) { @@ -1396,6 +1447,10 @@ class Doku_Handler_Table { $key += 3; } + if($this->countTableHeadRows == $lastRow) { + array_splice($this->tableCalls, $key+1, 0, array( + array('tablethead_close', array(), $call[2]))); + } break; } @@ -1438,7 +1493,7 @@ class Doku_Handler_Block { var $blockOpen = array( 'header', 'listu_open','listo_open','listitem_open','listcontent_open', - 'table_open','tablerow_open','tablecell_open','tableheader_open', + 'table_open','tablerow_open','tablecell_open','tableheader_open','tablethead_open', 'quote_open', 'code','file','hr','preformatted','rss', 'htmlblock','phpblock', @@ -1448,7 +1503,7 @@ class Doku_Handler_Block { var $blockClose = array( 'header', 'listu_close','listo_close','listitem_close','listcontent_close', - 'table_close','tablerow_close','tablecell_close','tableheader_close', + 'table_close','tablerow_close','tablecell_close','tableheader_close','tablethead_close', 'quote_close', 'code','file','hr','preformatted','rss', 'htmlblock','phpblock', diff --git a/inc/parser/renderer.php b/inc/parser/renderer.php index e748c36d8..e92b81bd7 100644 --- a/inc/parser/renderer.php +++ b/inc/parser/renderer.php @@ -249,6 +249,10 @@ class Doku_Renderer extends DokuWiki_Plugin { function table_close($pos = null){} + function tablethead_open(){} + + function tablethead_close(){} + function tablerow_open(){} function tablerow_close(){} @@ -271,17 +275,17 @@ class Doku_Renderer extends DokuWiki_Plugin { * * @author Andreas Gohr <andi@splitbrain.org> */ - function _simpleTitle($name){ + function _simpleTitle($name) { global $conf; - //if there is a hash we use the anchor name only - @list($name,$hash) = explode('#',$name,2); + //if there is a hash we use the ancor name only + @list($name, $hash) = explode('#', $name, 2); if($hash) return $hash; - if($conf['useslash']){ - $name = strtr($name,';/',';:'); - }else{ - $name = strtr($name,';',':'); + if($conf['useslash']) { + $name = strtr($name, ';/', ';:'); + } else { + $name = strtr($name, ';', ':'); } return noNSorNS($name); @@ -290,9 +294,9 @@ class Doku_Renderer extends DokuWiki_Plugin { /** * Resolve an interwikilink */ - function _resolveInterWiki(&$shortcut,$reference){ + function _resolveInterWiki(&$shortcut, $reference, &$exists=null) { //get interwiki URL - if ( isset($this->interwiki[$shortcut]) ) { + if(isset($this->interwiki[$shortcut])) { $url = $this->interwiki[$shortcut]; } else { // Default to Google I'm feeling lucky @@ -301,25 +305,31 @@ class Doku_Renderer extends DokuWiki_Plugin { } //split into hash and url part - @list($reference,$hash) = explode('#',$reference,2); + @list($reference, $hash) = explode('#', $reference, 2); //replace placeholder - if(preg_match('#\{(URL|NAME|SCHEME|HOST|PORT|PATH|QUERY)\}#',$url)){ + if(preg_match('#\{(URL|NAME|SCHEME|HOST|PORT|PATH|QUERY)\}#', $url)) { //use placeholders - $url = str_replace('{URL}',rawurlencode($reference),$url); - $url = str_replace('{NAME}',$reference,$url); + $url = str_replace('{URL}', rawurlencode($reference), $url); + $url = str_replace('{NAME}', $reference, $url); $parsed = parse_url($reference); if(!$parsed['port']) $parsed['port'] = 80; - $url = str_replace('{SCHEME}',$parsed['scheme'],$url); - $url = str_replace('{HOST}',$parsed['host'],$url); - $url = str_replace('{PORT}',$parsed['port'],$url); - $url = str_replace('{PATH}',$parsed['path'],$url); - $url = str_replace('{QUERY}',$parsed['query'],$url); - }else{ + $url = str_replace('{SCHEME}', $parsed['scheme'], $url); + $url = str_replace('{HOST}', $parsed['host'], $url); + $url = str_replace('{PORT}', $parsed['port'], $url); + $url = str_replace('{PATH}', $parsed['path'], $url); + $url = str_replace('{QUERY}', $parsed['query'], $url); + } else { //default - $url = $url.rawurlencode($reference); + $url = $url . rawurlencode($reference); + } + //handle as wiki links + if($url{0} === ':') { + list($id, $urlparam) = explode('?', $url, 2); + $url = wl(cleanID($id), $urlparam); + $exists = page_exists($id); } - if($hash) $url .= '#'.rawurlencode($hash); + if($hash) $url .= '#' . rawurlencode($hash); return $url; } diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php index 4966f103a..cf36a8175 100644 --- a/inc/parser/xhtml.php +++ b/inc/parser/xhtml.php @@ -688,7 +688,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer { } /** - */ + */ function interwikilink($match, $name = null, $wikiName, $wikiUri) { global $conf; @@ -700,19 +700,28 @@ class Doku_Renderer_xhtml extends Doku_Renderer { $link['name'] = $this->_getLinkTitle($name, $wikiUri, $isImage); //get interwiki URL - $url = $this->_resolveInterWiki($wikiName,$wikiUri); + $exists = null; + $url = $this->_resolveInterWiki($wikiName, $wikiUri, $exists); - if ( !$isImage ) { - $class = preg_replace('/[^_\-a-z0-9]+/i','_',$wikiName); + if(!$isImage) { + $class = preg_replace('/[^_\-a-z0-9]+/i', '_', $wikiName); $link['class'] = "interwiki iw_$class"; } else { $link['class'] = 'media'; } //do we stay at the same server? Use local target - if( strpos($url,DOKU_URL) === 0 ){ + if(strpos($url, DOKU_URL) === 0 OR strpos($url, DOKU_BASE) === 0) { $link['target'] = $conf['target']['wiki']; } + if($exists !== null && !$isImage) { + if($exists) { + $link['class'] .= ' wikilink1'; + } else { + $link['class'] .= ' wikilink2'; + $link['rel'] = 'nofollow'; + } + } $link['url'] = $url; $link['title'] = htmlspecialchars($link['url']); @@ -954,6 +963,14 @@ class Doku_Renderer_xhtml extends Doku_Renderer { } } + function tablethead_open(){ + $this->doc .= DOKU_TAB . '<thead>' . DOKU_LF; + } + + function tablethead_close(){ + $this->doc .= DOKU_TAB . '</thead>' . DOKU_LF; + } + function tablerow_open(){ // initialize the cell counter used for classes $this->_counter['cell_counter'] = 0; diff --git a/inc/parserutils.php b/inc/parserutils.php index 281a93967..9c2a0b570 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -635,9 +635,9 @@ function p_get_renderer($mode) { return $Renderer; } - // not bundled, see if its an enabled plugin for rendering $mode + // not bundled, see if its an enabled renderer plugin & when $mode is 'xhtml', the renderer can supply that format. $Renderer = $plugin_controller->load('renderer',$rname); - if ($Renderer && is_a($Renderer, 'Doku_Renderer') && ($mode == $Renderer->getFormat())) { + if ($Renderer && is_a($Renderer, 'Doku_Renderer') && ($mode != 'xhtml' || $mode == $Renderer->getFormat())) { return $Renderer; } @@ -659,7 +659,6 @@ function p_get_renderer($mode) { } // fallback failed, alert the world - trigger_error("Unable to resolve render class $rclass",E_USER_WARNING); msg("No renderer '$rname' found for mode '$mode'",-1); return null; } diff --git a/inc/plugin.php b/inc/plugin.php index 95bdaee2b..7de4fbd74 100644 --- a/inc/plugin.php +++ b/inc/plugin.php @@ -255,7 +255,7 @@ class DokuWiki_Plugin { if(!isset($arguments[1])) $arguments[1] = 'xhtml'; return $this->render_text($arguments[0], $arguments[1]); } - trigger_error("no such method $name", E_ERROR); + trigger_error("no such method $name", E_USER_ERROR); return null; } diff --git a/inc/subscription.php b/inc/subscription.php index adf1b821c..298e7c12b 100644 --- a/inc/subscription.php +++ b/inc/subscription.php @@ -340,7 +340,8 @@ class Subscription { while(!is_null($rev) && $rev['date'] >= $lastupdate && ($INPUT->server->str('REMOTE_USER') === $rev['user'] || $rev['type'] === DOKU_CHANGE_TYPE_MINOR_EDIT)) { - $rev = getRevisions($rev['id'], $n++, 1); + $pagelog = new PageChangeLog($rev['id']); + $rev = $pagelog->getRevisions($n++, 1); $rev = (count($rev) > 0) ? $rev[0] : null; } @@ -519,9 +520,10 @@ class Subscription { * @return bool */ protected function send_digest($subscriber_mail, $id, $lastupdate) { + $pagelog = new PageChangeLog($id); $n = 0; do { - $rev = getRevisions($id, $n++, 1); + $rev = $pagelog->getRevisions($n++, 1); $rev = (count($rev) > 0) ? $rev[0] : null; } while(!is_null($rev) && $rev > $lastupdate); diff --git a/inc/template.php b/inc/template.php index 1bf6b45b2..35b54b4c3 100644 --- a/inc/template.php +++ b/inc/template.php @@ -318,15 +318,17 @@ function tpl_metaheaders($alt = true) { } if($alt) { - $head['link'][] = array( - 'rel' => 'alternate', 'type'=> 'application/rss+xml', - 'title'=> $lang['btn_recent'], 'href'=> DOKU_BASE.'feed.php' - ); - $head['link'][] = array( - 'rel' => 'alternate', 'type'=> 'application/rss+xml', - 'title'=> $lang['currentns'], - 'href' => DOKU_BASE.'feed.php?mode=list&ns='.$INFO['namespace'] - ); + if(actionOK('rss')) { + $head['link'][] = array( + 'rel' => 'alternate', 'type'=> 'application/rss+xml', + 'title'=> $lang['btn_recent'], 'href'=> DOKU_BASE.'feed.php' + ); + $head['link'][] = array( + 'rel' => 'alternate', 'type'=> 'application/rss+xml', + 'title'=> $lang['currentns'], + 'href' => DOKU_BASE.'feed.php?mode=list&ns='.$INFO['namespace'] + ); + } if(($ACT == 'show' || $ACT == 'search') && $INFO['writable']) { $head['link'][] = array( 'rel' => 'edit', @@ -335,7 +337,7 @@ function tpl_metaheaders($alt = true) { ); } - if($ACT == 'search') { + if(actionOK('rss') && $ACT == 'search') { $head['link'][] = array( 'rel' => 'alternate', 'type'=> 'application/rss+xml', 'title'=> $lang['searchresult'], @@ -550,6 +552,7 @@ function tpl_actionlink($type, $pre = '', $suf = '', $inner = '', $return = fals * @var string $method * @var bool $nofollow * @var array $params + * @var string $replacement */ extract($data); if(strpos($id, '#') === 0) { @@ -558,6 +561,9 @@ function tpl_actionlink($type, $pre = '', $suf = '', $inner = '', $return = fals $linktarget = wl($id, $params); } $caption = $lang['btn_'.$type]; + if(strpos($caption, '%s')){ + $caption = sprintf($caption, $replacement); + } $akey = $addTitle = ''; if($accesskey) { $akey = 'accesskey="'.$accesskey.'" '; @@ -613,11 +619,12 @@ function tpl_get_action($type) { if ($type == 'subscription') $type = 'subscribe'; if(!actionOK($type)) return false; - $accesskey = null; - $id = $ID; - $method = 'get'; - $params = array('do' => $type); - $nofollow = true; + $accesskey = null; + $id = $ID; + $method = 'get'; + $params = array('do' => $type); + $nofollow = true; + $replacement = ''; switch($type) { case 'edit': // most complicated type - we need to decide on current action @@ -674,6 +681,11 @@ function tpl_get_action($type) { $params = array('do' => ''); $accesskey = 'b'; break; + case 'img_backto': + $params = array(); + $accesskey = 'b'; + $replacement = $ID; + break; case 'login': $params['sectok'] = getSecurityToken(); if($INPUT->server->has('REMOTE_USER')) { @@ -721,11 +733,26 @@ function tpl_get_action($type) { case 'media': $params['ns'] = getNS($ID); break; + case 'mediaManager': + // View image in media manager + global $IMG; + $imgNS = getNS($IMG); + $authNS = auth_quickaclcheck("$imgNS:*"); + if ($authNS < AUTH_UPLOAD) { + return false; + } + $params = array( + 'ns' => $imgNS, + 'image' => $IMG, + 'do' => 'media' + ); + //$type = 'media'; + break; default: return '[unknown %s type]'; break; } - return compact('accesskey', 'type', 'id', 'method', 'params', 'nofollow'); + return compact('accesskey', 'type', 'id', 'method', 'params', 'nofollow', 'replacement'); } /** @@ -889,12 +916,11 @@ function tpl_youarehere($sep = ' » ') { */ function tpl_userinfo() { global $lang; - global $INFO; /** @var Input $INPUT */ global $INPUT; if($INPUT->server->str('REMOTE_USER')) { - print $lang['loggedinas'].': <bdi>'.hsc($INFO['userinfo']['name']).'</bdi> (<bdi>'.hsc($INPUT->server->str('REMOTE_USER')).'</bdi>)'; + print $lang['loggedinas'].': '.userlink(); return true; } return false; @@ -1018,12 +1044,73 @@ function tpl_img_getTag($tags, $alt = '', $src = null) { static $meta = null; if(is_null($meta)) $meta = new JpegMeta($src); if($meta === false) return $alt; - $info = $meta->getField($tags); + $info = cleanText($meta->getField($tags)); if($info == false) return $alt; return $info; } /** + * Returns a description list of the metatags of the current image + * + * @return string html of description list + */ +function tpl_img_meta() { + global $lang; + + $tags = tpl_get_img_meta(); + + echo '<dl>'; + foreach($tags as $tag) { + $label = $lang[$tag['langkey']]; + if(!$label) $label = $tag['langkey']; + + echo '<dt>'.$label.':</dt><dd>'; + if ($tag['type'] == 'date') { + echo dformat($tag['value']); + } else { + echo hsc($tag['value']); + } + echo '</dd>'; + } + echo '</dl>'; +} + +/** + * Returns metadata as configured in mediameta config file, ready for creating html + * + * @return array with arrays containing the entries: + * - string langkey key to lookup in the $lang var, if not found printed as is + * - string type type of value + * - string value tag value (unescaped) + */ +function tpl_get_img_meta() { + + $config_files = getConfigFiles('mediameta'); + foreach ($config_files as $config_file) { + if(@file_exists($config_file)) { + include($config_file); + } + } + /** @var array $fields the included array with metadata */ + + $tags = array(); + foreach($fields as $tag){ + $t = array(); + if (!empty($tag[0])) { + $t = array($tag[0]); + } + if(is_array($tag[3])) { + $t = array_merge($t,$tag[3]); + } + $value = tpl_img_getTag($t); + if ($value) { + $tags[] = array('langkey' => $tag[1], 'type' => $tag[2], 'value' => $value); + } + } + return $tags; +} + +/** * Prints the image with a link to the full sized version * * Only allowed in: detail.php |