summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
Diffstat (limited to 'inc')
-rw-r--r--inc/FeedParser.php4
-rw-r--r--inc/HTTPClient.php1
-rw-r--r--inc/JpegMeta.php2
-rw-r--r--inc/PassHash.class.php17
-rw-r--r--inc/SimplePie.php570
-rw-r--r--inc/actions.php6
-rw-r--r--inc/auth.php10
-rw-r--r--inc/auth/ad.class.php12
-rw-r--r--inc/changelog.php96
-rw-r--r--inc/common.php39
-rw-r--r--inc/config_cascade.php8
-rw-r--r--inc/fulltext.php2
-rw-r--r--inc/html.php417
-rw-r--r--inc/httputils.php52
-rw-r--r--inc/infoutils.php12
-rw-r--r--inc/init.php7
-rw-r--r--inc/lang/ar/lang.php3
-rw-r--r--inc/lang/az/lang.php5
-rw-r--r--inc/lang/bg/diff.txt1
-rw-r--r--inc/lang/bg/install.html8
-rw-r--r--inc/lang/bg/lang.php53
-rw-r--r--inc/lang/bg/login.txt2
-rw-r--r--inc/lang/ca-valencia/lang.php5
-rw-r--r--inc/lang/ca/lang.php5
-rw-r--r--inc/lang/cs/lang.php3
-rw-r--r--inc/lang/da/lang.php3
-rw-r--r--inc/lang/de-informal/lang.php52
-rw-r--r--inc/lang/de-informal/uploadmail.txt17
-rw-r--r--inc/lang/de/lang.php53
-rw-r--r--inc/lang/de/uploadmail.txt17
-rw-r--r--inc/lang/el/lang.php46
-rw-r--r--inc/lang/en/lang.php650
-rw-r--r--inc/lang/en/uploadmail.txt1
-rw-r--r--inc/lang/eo/lang.php44
-rw-r--r--inc/lang/es/lang.php49
-rw-r--r--inc/lang/et/lang.php28
-rw-r--r--inc/lang/eu/lang.php3
-rw-r--r--inc/lang/fa/lang.php11
-rw-r--r--inc/lang/fi/lang.php44
-rw-r--r--inc/lang/fo/lang.php2
-rw-r--r--inc/lang/fr/lang.php62
-rw-r--r--inc/lang/gl/lang.php3
-rw-r--r--inc/lang/he/lang.php3
-rw-r--r--inc/lang/hr/lang.php115
-rw-r--r--inc/lang/hr/read.txt2
-rw-r--r--inc/lang/hr/resendpwd.txt2
-rw-r--r--inc/lang/hu/lang.php4
-rw-r--r--inc/lang/ia/lang.php3
-rw-r--r--inc/lang/id/lang.php2
-rw-r--r--inc/lang/is/lang.php2
-rw-r--r--inc/lang/it/lang.php3
-rw-r--r--inc/lang/ja/lang.php3
-rw-r--r--inc/lang/kk/lang.php116
-rw-r--r--inc/lang/km/lang.php2
-rw-r--r--inc/lang/ko/lang.php3
-rw-r--r--inc/lang/ku/lang.php2
-rw-r--r--inc/lang/la/lang.php3
-rw-r--r--inc/lang/lb/lang.php2
-rw-r--r--inc/lang/lt/lang.php5
-rw-r--r--inc/lang/lv/lang.php46
-rw-r--r--inc/lang/mg/lang.php2
-rw-r--r--inc/lang/mk/lang.php3
-rw-r--r--inc/lang/mr/lang.php5
-rw-r--r--inc/lang/ne/lang.php5
-rw-r--r--inc/lang/nl/lang.php39
-rw-r--r--inc/lang/no/adminplugins.txt2
-rw-r--r--inc/lang/no/conflict.txt2
-rw-r--r--inc/lang/no/lang.php125
-rw-r--r--inc/lang/no/newpage.txt2
-rw-r--r--inc/lang/no/norev.txt4
-rw-r--r--inc/lang/no/registermail.txt2
-rw-r--r--inc/lang/no/stopwords.txt182
-rw-r--r--inc/lang/no/subscr_digest.txt20
-rw-r--r--inc/lang/no/subscr_form.txt3
-rw-r--r--inc/lang/no/subscr_list.txt17
-rw-r--r--inc/lang/no/subscr_single.txt23
-rw-r--r--inc/lang/no/updateprofile.txt2
-rw-r--r--inc/lang/no/uploadmail.txt1
-rw-r--r--inc/lang/pl/lang.php5
-rw-r--r--inc/lang/pt-br/lang.php4
-rw-r--r--inc/lang/pt/lang.php70
-rw-r--r--inc/lang/pt/uploadmail.txt22
-rw-r--r--inc/lang/ro/lang.php50
-rw-r--r--inc/lang/ru/lang.php112
-rw-r--r--inc/lang/ru/uploadmail.txt17
-rw-r--r--inc/lang/sk/lang.php49
-rw-r--r--inc/lang/sl/lang.php3
-rw-r--r--inc/lang/sq/lang.php3
-rw-r--r--inc/lang/sr/lang.php3
-rw-r--r--inc/lang/sv/lang.php8
-rw-r--r--inc/lang/th/lang.php5
-rw-r--r--inc/lang/tr/lang.php3
-rw-r--r--inc/lang/uk/lang.php3
-rw-r--r--inc/lang/vi/lang.php2
-rw-r--r--inc/lang/zh-tw/lang.php3
-rw-r--r--inc/lang/zh/lang.php44
-rw-r--r--inc/load.php13
-rw-r--r--inc/mail.php3
-rw-r--r--inc/media.php1199
-rw-r--r--inc/pageutils.php27
-rw-r--r--inc/parser/handler.php24
-rw-r--r--inc/parser/xhtml.php6
-rw-r--r--inc/parserutils.php7
-rw-r--r--inc/plugincontroller.class.php186
-rw-r--r--inc/pluginutils.php6
-rw-r--r--inc/search.php59
-rw-r--r--inc/template.php214
-rw-r--r--inc/toolbar.php2
-rw-r--r--inc/utf8.php8
109 files changed, 4053 insertions, 1289 deletions
diff --git a/inc/FeedParser.php b/inc/FeedParser.php
index b98350da7..e5f1fb636 100644
--- a/inc/FeedParser.php
+++ b/inc/FeedParser.php
@@ -49,13 +49,15 @@ class FeedParser_File extends SimplePie_File {
*/
function FeedParser_File($url, $timeout=10, $redirects=5,
$headers=null, $useragent=null, $force_fsockopen=false) {
- parent::__construct();
$this->http = new DokuHTTPClient();
$this->success = $this->http->sendRequest($url);
$this->headers = $this->http->resp_headers;
$this->body = $this->http->resp_body;
$this->error = $this->http->error;
+
+ $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_FSOCKOPEN;
+
return $this->success;
}
diff --git a/inc/HTTPClient.php b/inc/HTTPClient.php
index 372769b71..fdf95d113 100644
--- a/inc/HTTPClient.php
+++ b/inc/HTTPClient.php
@@ -368,6 +368,7 @@ class HTTPClient {
unset($this->connections[$connectionId]);
return false;
}
+ usleep(1000);
$r_headers .= fgets($socket,1024);
}while(!preg_match('/\r?\n\r?\n$/',$r_headers));
diff --git a/inc/JpegMeta.php b/inc/JpegMeta.php
index afa70168c..5c043fb6b 100644
--- a/inc/JpegMeta.php
+++ b/inc/JpegMeta.php
@@ -1207,7 +1207,7 @@ class JpegMeta {
* @author Andreas Gohr <andi@splitbrain.org>
*/
function _parseFileInfo() {
- if (file_exists($this->_fileName)) {
+ if (file_exists($this->_fileName) && is_file($this->_fileName)) {
$this->_info['file'] = array();
$this->_info['file']['Name'] = basename($this->_fileName);
$this->_info['file']['Path'] = fullpath($this->_fileName);
diff --git a/inc/PassHash.class.php b/inc/PassHash.class.php
index 541de6752..31493c022 100644
--- a/inc/PassHash.class.php
+++ b/inc/PassHash.class.php
@@ -82,7 +82,7 @@ class PassHash {
public function gen_salt($len=32){
$salt = '';
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
- for($i=0;$i<$len,$i++;) $salt .= $chars[mt_rand(0,61)];
+ for($i=0;$i<$len;$i++) $salt .= $chars[mt_rand(0,61)];
return $salt;
}
@@ -292,17 +292,20 @@ class PassHash {
* Password hashing method 'pmd5'
*
* Uses salted MD5 hashs. Salt is 1+8 bytes long, 1st byte is the
- * iteration count.
+ * iteration count when given, for null salts $compute is used.
*
* @param string $clear - the clear text to hash
* @param string $salt - the salt to use, null for random
* @param string $magic - the hash identifier (P or H)
+ * @param int $compute - the iteration count for new passwords
* @returns string - hashed password
*/
- public function hash_pmd5($clear, $salt=null, $magic='P'){
- $this->init_salt($salt);
-
+ public function hash_pmd5($clear, $salt=null, $magic='P',$compute=8){
$itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
+ if(is_null($salt)){
+ $this->init_salt($salt);
+ $salt = $itoa64[$compute].$salt; // prefix iteration count
+ }
$iterc = $salt[0]; // pos 0 of salt is iteration count
$iter = strpos($itoa64,$iterc);
$iter = 1 << $iter;
@@ -340,8 +343,8 @@ class PassHash {
/**
* Alias for hash_pmd5
*/
- public function hash_hmd5($clear, $salt=null, $magic='H'){
- return $this->hash_pmd5($clear, $salt, $magic);
+ public function hash_hmd5($clear, $salt=null, $magic='H', $compute=8){
+ return $this->hash_pmd5($clear, $salt, $magic, $compute);
}
/**
diff --git a/inc/SimplePie.php b/inc/SimplePie.php
index d35443165..10d8141bd 100644
--- a/inc/SimplePie.php
+++ b/inc/SimplePie.php
@@ -5,7 +5,7 @@
* A PHP-Based RSS and Atom Feed Framework.
* Takes the hard work out of managing a complete RSS/Atom solution.
*
- * Copyright (c) 2004-2009, Ryan Parman and Geoffrey Sneddon
+ * Copyright (c) 2004-2011, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
@@ -33,10 +33,11 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package SimplePie
- * @version 1.2.1-dev
- * @copyright 2004-2009 Ryan Parman, Geoffrey Sneddon
+ * @version 1.2.1
+ * @copyright 2004-2011 Ryan Parman, Geoffrey Sneddon, Ryan McCue
* @author Ryan Parman
* @author Geoffrey Sneddon
+ * @author Ryan McCue
* @link http://simplepie.org/ SimplePie
* @link http://simplepie.org/support/ Please submit all bug reports and feature requests to the SimplePie forums
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
@@ -55,9 +56,8 @@ define('SIMPLEPIE_VERSION', '1.2.1-dev');
/**
* SimplePie Build
- * @todo Hardcode for release (there's no need to have to call SimplePie_Misc::parse_date() only every load of simplepie.inc)
*/
-define('SIMPLEPIE_BUILD', gmdate('YmdHis', SimplePie_Misc::parse_date(substr('$Date$', 7, 25)) ? SimplePie_Misc::parse_date(substr('$Date$', 7, 25)) : filemtime(__FILE__)));
+define('SIMPLEPIE_BUILD', '20111015034325');
/**
* SimplePie Website URL
@@ -3279,6 +3279,11 @@ class SimplePie_Item
{
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
}
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML);
+ }
+
elseif (!$description_only)
{
return $this->get_content(true);
@@ -3643,7 +3648,7 @@ class SimplePie_Item
{
return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT);
}
- elseif (($date = $this->get_date('U')) !== null)
+ elseif (($date = $this->get_date('U')) !== null && $date !== false)
{
return strftime($date_format, $date);
}
@@ -4068,16 +4073,16 @@ class SimplePie_Item
$temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
if (sizeof($temp) > 0)
{
- (int) $seconds = array_pop($temp);
+ $seconds = (int) array_pop($temp);
}
if (sizeof($temp) > 0)
{
- (int) $minutes = array_pop($temp);
+ $minutes = (int) array_pop($temp);
$seconds += $minutes * 60;
}
if (sizeof($temp) > 0)
{
- (int) $hours = array_pop($temp);
+ $hours = (int) array_pop($temp);
$seconds += $hours * 3600;
}
unset($temp);
@@ -5056,7 +5061,7 @@ class SimplePie_Item
{
foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
{
- if (isset($content['attribs']['']['url']))
+ if (isset($content['attribs']['']['url']) || isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
{
// Attributes
$bitrate = null;
@@ -5141,8 +5146,10 @@ class SimplePie_Item
{
$width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
}
- $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-
+ if (isset($content['attribs']['']['url']))
+ {
+ $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
// Checking the other optional media: elements. Priority: media:content, media:group, item, channel
// CAPTIONS
@@ -7731,16 +7738,17 @@ class SimplePie_File
{
$this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_FSOCKOPEN;
$url_parts = parse_url($url);
+ $socket_host = $url_parts['host'];
if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https')
{
- $url_parts['host'] = "ssl://$url_parts[host]";
+ $socket_host = "ssl://$url_parts[host]";
$url_parts['port'] = 443;
}
if (!isset($url_parts['port']))
{
$url_parts['port'] = 80;
}
- $fp = @fsockopen($url_parts['host'], $url_parts['port'], $errno, $errstr, $timeout);
+ $fp = @fsockopen($socket_host, $url_parts['port'], $errno, $errstr, $timeout);
if (!$fp)
{
$this->error = 'fsockopen error: ' . $errstr;
@@ -8486,7 +8494,7 @@ class SimplePie_gzdecode
// Get the length of the extra field
$len = current(unpack('v', substr($this->compressed_data, $this->position, 2)));
- $position += 2;
+ $this->position += 2;
// Check the length of the string is still valid
$this->min_compressed_size += $len + 4;
@@ -9448,12 +9456,12 @@ class SimplePie_Misc
}
// This is first, as behaviour of this is completely predictable
- if ($input === 'Windows-1252' && $output === 'UTF-8')
+ if ($input === 'windows-1252' && $output === 'UTF-8')
{
return SimplePie_Misc::windows_1252_to_utf8($data);
}
// This is second, as behaviour of this varies only with PHP version (the middle part of this expression checks the encoding is supported).
- elseif (function_exists('mb_convert_encoding') && @mb_convert_encoding("\x80", 'UTF-16BE', $input) !== "\x00\x80" && ($return = @mb_convert_encoding($data, $output, $input)))
+ elseif (function_exists('mb_convert_encoding') && @mb_convert_encoding("\x80", 'UTF-16BE', $input) !== "\x00\x80" && in_array($input, mb_list_encodings()) && ($return = @mb_convert_encoding($data, $output, $input)))
{
return $return;
}
@@ -9469,6 +9477,17 @@ class SimplePie_Misc
}
}
+ /**
+ * Normalize an encoding name
+ *
+ * This is automatically generated by create.php
+ *
+ * To generate it, run `php create.php` on the command line, and copy the
+ * output to replace this function.
+ *
+ * @param string $charset Character set to standardise
+ * @return string Standardised name
+ */
function encoding($charset)
{
// Normalization from UTS #22
@@ -9502,7 +9521,6 @@ class SimplePie_Misc
case 'big5':
case 'csbig5':
- case 'xxbig5':
return 'Big5';
case 'big5hkscs':
@@ -9658,14 +9676,14 @@ class SimplePie_Misc
case 'isoir85':
return 'ES2';
- case 'cseucfixwidjapanese':
- case 'extendedunixcodefixedwidthforjapanese':
- return 'Extended_UNIX_Code_Fixed_Width_for_Japanese';
-
case 'cseucpkdfmtjapanese':
case 'eucjp':
case 'extendedunixcodepackedformatforjapanese':
- return 'Extended_UNIX_Code_Packed_Format_for_Japanese';
+ return 'EUC-JP';
+
+ case 'cseucfixwidjapanese':
+ case 'extendedunixcodefixedwidthforjapanese':
+ return 'Extended_UNIX_Code_Fixed_Width_for_Japanese';
case 'gb18030':
return 'GB18030';
@@ -9744,80 +9762,6 @@ class SimplePie_Misc
case 'ibmthai':
return 'IBM-Thai';
- case 'ccsid858':
- case 'cp858':
- case 'ibm858':
- case 'pcmultilingual850euro':
- return 'IBM00858';
-
- case 'ccsid924':
- case 'cp924':
- case 'ebcdiclatin9euro':
- case 'ibm924':
- return 'IBM00924';
-
- case 'ccsid1140':
- case 'cp1140':
- case 'ebcdicus37euro':
- case 'ibm1140':
- return 'IBM01140';
-
- case 'ccsid1141':
- case 'cp1141':
- case 'ebcdicde273euro':
- case 'ibm1141':
- return 'IBM01141';
-
- case 'ccsid1142':
- case 'cp1142':
- case 'ebcdicdk277euro':
- case 'ebcdicno277euro':
- case 'ibm1142':
- return 'IBM01142';
-
- case 'ccsid1143':
- case 'cp1143':
- case 'ebcdicfi278euro':
- case 'ebcdicse278euro':
- case 'ibm1143':
- return 'IBM01143';
-
- case 'ccsid1144':
- case 'cp1144':
- case 'ebcdicit280euro':
- case 'ibm1144':
- return 'IBM01144';
-
- case 'ccsid1145':
- case 'cp1145':
- case 'ebcdices284euro':
- case 'ibm1145':
- return 'IBM01145';
-
- case 'ccsid1146':
- case 'cp1146':
- case 'ebcdicgb285euro':
- case 'ibm1146':
- return 'IBM01146';
-
- case 'ccsid1147':
- case 'cp1147':
- case 'ebcdicfr297euro':
- case 'ibm1147':
- return 'IBM01147';
-
- case 'ccsid1148':
- case 'cp1148':
- case 'ebcdicinternational500euro':
- case 'ibm1148':
- return 'IBM01148';
-
- case 'ccsid1149':
- case 'cp1149':
- case 'ebcdicis871euro':
- case 'ibm1149':
- return 'IBM01149';
-
case 'cp37':
case 'csibm37':
case 'ebcdiccpca':
@@ -9965,6 +9909,12 @@ class SimplePie_Misc
case 'ibm857':
return 'IBM857';
+ case 'ccsid858':
+ case 'cp858':
+ case 'ibm858':
+ case 'pcmultilingual850euro':
+ return 'IBM00858';
+
case '860':
case 'cp860':
case 'csibm860':
@@ -10067,6 +10017,12 @@ class SimplePie_Misc
case 'ibm918':
return 'IBM918';
+ case 'ccsid924':
+ case 'cp924':
+ case 'ebcdiclatin9euro':
+ case 'ibm924':
+ return 'IBM00924';
+
case 'cp1026':
case 'csibm1026':
case 'ibm1026':
@@ -10075,6 +10031,68 @@ class SimplePie_Misc
case 'ibm1047':
return 'IBM1047';
+ case 'ccsid1140':
+ case 'cp1140':
+ case 'ebcdicus37euro':
+ case 'ibm1140':
+ return 'IBM01140';
+
+ case 'ccsid1141':
+ case 'cp1141':
+ case 'ebcdicde273euro':
+ case 'ibm1141':
+ return 'IBM01141';
+
+ case 'ccsid1142':
+ case 'cp1142':
+ case 'ebcdicdk277euro':
+ case 'ebcdicno277euro':
+ case 'ibm1142':
+ return 'IBM01142';
+
+ case 'ccsid1143':
+ case 'cp1143':
+ case 'ebcdicfi278euro':
+ case 'ebcdicse278euro':
+ case 'ibm1143':
+ return 'IBM01143';
+
+ case 'ccsid1144':
+ case 'cp1144':
+ case 'ebcdicit280euro':
+ case 'ibm1144':
+ return 'IBM01144';
+
+ case 'ccsid1145':
+ case 'cp1145':
+ case 'ebcdices284euro':
+ case 'ibm1145':
+ return 'IBM01145';
+
+ case 'ccsid1146':
+ case 'cp1146':
+ case 'ebcdicgb285euro':
+ case 'ibm1146':
+ return 'IBM01146';
+
+ case 'ccsid1147':
+ case 'cp1147':
+ case 'ebcdicfr297euro':
+ case 'ibm1147':
+ return 'IBM01147';
+
+ case 'ccsid1148':
+ case 'cp1148':
+ case 'ebcdicinternational500euro':
+ case 'ibm1148':
+ return 'IBM01148';
+
+ case 'ccsid1149':
+ case 'cp1149':
+ case 'ebcdicis871euro':
+ case 'ibm1149':
+ return 'IBM01149';
+
case 'csiso143iecp271':
case 'iecp271':
case 'isoir143':
@@ -10617,11 +10635,6 @@ class SimplePie_Misc
case 'sen850200c':
return 'SEN_850200_C';
- case 'csshiftjis':
- case 'mskanji':
- case 'shiftjis':
- return 'Shift_JIS';
-
case 'csiso102t617bit':
case 'isoir102':
case 't617bit':
@@ -10720,7 +10733,10 @@ class SimplePie_Misc
case 'viscii':
return 'VISCII';
+ case 'csshiftjis':
case 'cswindows31j':
+ case 'mskanji':
+ case 'shiftjis':
case 'windows31j':
return 'Windows-31J';
@@ -11381,6 +11397,58 @@ function embed_wmedia(width, height, link) {
}
<?php
}
+
+
+
+ /**
+ * Format debugging information
+ */
+ function debug($sp)
+ {
+ $info = 'SimplePie ' . SIMPLEPIE_VERSION . ' Build ' . SIMPLEPIE_BUILD . "\n";
+ $info .= 'PHP ' . PHP_VERSION . "\n";
+ if ($sp->error() !== null)
+ {
+ $info .= 'Error occurred: ' . $sp->error() . "\n";
+ }
+ else
+ {
+ $info .= "No error found.\n";
+ }
+ $info .= "Extensions:\n";
+ $extensions = array('pcre', 'curl', 'zlib', 'mbstring', 'iconv', 'xmlreader', 'xml');
+ foreach ($extensions as $ext)
+ {
+ if (extension_loaded($ext))
+ {
+ $info .= " $ext loaded\n";
+ switch ($ext)
+ {
+ case 'pcre':
+ $info .= ' Version ' . PCRE_VERSION . "\n";
+ break;
+ case 'curl':
+ $version = curl_version();
+ $info .= ' Version ' . $version['version'] . "\n";
+ break;
+ case 'mbstring':
+ $info .= ' Overloading: ' . mb_get_info('func_overload') . "\n";
+ break;
+ case 'iconv':
+ $info .= ' Version ' . ICONV_VERSION . "\n";
+ break;
+ case 'xml':
+ $info .= ' Version ' . LIBXML_DOTTED_VERSION . "\n";
+ break;
+ }
+ }
+ else
+ {
+ $info .= " $ext not loaded\n";
+ }
+ }
+ return $info;
+ }
}
/**
@@ -11852,14 +11920,135 @@ class SimplePie_IRI
/**
* Replace invalid character with percent encoding
*
- * @access private
* @param string $string Input string
* @param string $valid_chars Valid characters
* @param int $case Normalise case
* @return string
*/
- function replace_invalid_with_pct_encoding($string, $valid_chars, $case = SIMPLEPIE_SAME_CASE)
+ function replace_invalid_with_pct_encoding($string, $valid_chars, $case = SIMPLEPIE_SAME_CASE, $iprivate = false)
{
+ // Normalize as many pct-encoded sections as possible
+ $string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array(&$this, 'remove_iunreserved_percent_encoded'), $string);
+
+ // Replace invalid percent characters
+ $string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string);
+
+ // Add unreserved and % to $valid_chars (the latter is safe because all
+ // pct-encoded sections are now valid).
+ $valid_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%';
+
+ // Now replace any bytes that aren't allowed with their pct-encoded versions
+ $position = 0;
+ $strlen = strlen($string);
+ while (($position += strspn($string, $valid_chars, $position)) < $strlen)
+ {
+ $value = ord($string[$position]);
+
+ // Start position
+ $start = $position;
+
+ // By default we are valid
+ $valid = true;
+
+ // No one byte sequences are valid due to the while.
+ // Two byte sequence:
+ if (($value & 0xE0) === 0xC0)
+ {
+ $character = ($value & 0x1F) << 6;
+ $length = 2;
+ $remaining = 1;
+ }
+ // Three byte sequence:
+ elseif (($value & 0xF0) === 0xE0)
+ {
+ $character = ($value & 0x0F) << 12;
+ $length = 3;
+ $remaining = 2;
+ }
+ // Four byte sequence:
+ elseif (($value & 0xF8) === 0xF0)
+ {
+ $character = ($value & 0x07) << 18;
+ $length = 4;
+ $remaining = 3;
+ }
+ // Invalid byte:
+ else
+ {
+ $valid = false;
+ $length = 1;
+ $remaining = 0;
+ }
+
+ if ($remaining)
+ {
+ if ($position + $length <= $strlen)
+ {
+ for ($position++; $remaining; $position++)
+ {
+ $value = ord($string[$position]);
+
+ // Check that the byte is valid, then add it to the character:
+ if (($value & 0xC0) === 0x80)
+ {
+ $character |= ($value & 0x3F) << (--$remaining * 6);
+ }
+ // If it is invalid, count the sequence as invalid and reprocess the current byte:
+ else
+ {
+ $valid = false;
+ $position--;
+ break;
+ }
+ }
+ }
+ else
+ {
+ $position = $strlen - 1;
+ $valid = false;
+ }
+ }
+
+ // Percent encode anything invalid or not in ucschar
+ if (
+ // Invalid sequences
+ !$valid
+ // Non-shortest form sequences are invalid
+ || $length > 1 && $character <= 0x7F
+ || $length > 2 && $character <= 0x7FF
+ || $length > 3 && $character <= 0xFFFF
+ // Outside of range of ucschar codepoints
+ // Noncharacters
+ || ($character & 0xFFFE) === 0xFFFE
+ || $character >= 0xFDD0 && $character <= 0xFDEF
+ || (
+ // Everything else not in ucschar
+ $character > 0xD7FF && $character < 0xF900
+ || $character < 0xA0
+ || $character > 0xEFFFD
+ )
+ && (
+ // Everything not in iprivate, if it applies
+ !$iprivate
+ || $character < 0xE000
+ || $character > 0x10FFFD
+ )
+ )
+ {
+ // If we were a character, pretend we weren't, but rather an error.
+ if ($valid)
+ $position--;
+
+ for ($j = $start; $j <= $position; $j++)
+ {
+ $string = substr_replace($string, sprintf('%%%02X', ord($string[$j])), $j, 1);
+ $j += 2;
+ $position += 2;
+ $strlen += 2;
+ }
+ }
+ }
+
// Normalise case
if ($case & SIMPLEPIE_LOWERCASE)
{
@@ -11870,61 +12059,148 @@ class SimplePie_IRI
$string = strtoupper($string);
}
- // Store position and string length (to avoid constantly recalculating this)
- $position = 0;
- $strlen = strlen($string);
+ return $string;
+ }
- // Loop as long as we have invalid characters, advancing the position to the next invalid character
- while (($position += strspn($string, $valid_chars, $position)) < $strlen)
+ /**
+ * Callback function for preg_replace_callback.
+ *
+ * Removes sequences of percent encoded bytes that represent UTF-8
+ * encoded characters in iunreserved
+ *
+ * @access private
+ * @param array $match PCRE match
+ * @return string Replacement
+ */
+ function remove_iunreserved_percent_encoded($match)
+ {
+ // As we just have valid percent encoded sequences we can just explode
+ // and ignore the first member of the returned array (an empty string).
+ $bytes = explode('%', $match[0]);
+
+ // Initialize the new string (this is what will be returned) and that
+ // there are no bytes remaining in the current sequence (unsurprising
+ // at the first byte!).
+ $string = '';
+ $remaining = 0;
+
+ // Loop over each and every byte, and set $value to its value
+ for ($i = 1, $len = count($bytes); $i < $len; $i++)
{
- // If we have a % character
- if ($string[$position] === '%')
+ $value = hexdec($bytes[$i]);
+
+ // If we're the first byte of sequence:
+ if (!$remaining)
{
- // If we have a pct-encoded section
- if ($position + 2 < $strlen && strspn($string, '0123456789ABCDEFabcdef', $position + 1, 2) === 2)
- {
- // Get the the represented character
- $chr = chr(hexdec(substr($string, $position + 1, 2)));
+ // Start position
+ $start = $i;
- // If the character is valid, replace the pct-encoded with the actual character while normalising case
- if (strpos($valid_chars, $chr) !== false)
- {
- if ($case & SIMPLEPIE_LOWERCASE)
- {
- $chr = strtolower($chr);
- }
- elseif ($case & SIMPLEPIE_UPPERCASE)
- {
- $chr = strtoupper($chr);
- }
- $string = substr_replace($string, $chr, $position, 3);
- $strlen -= 2;
- $position++;
- }
+ // By default we are valid
+ $valid = true;
- // Otherwise just normalise the pct-encoded to uppercase
- else
+ // One byte sequence:
+ if ($value <= 0x7F)
+ {
+ $character = $value;
+ $length = 1;
+ }
+ // Two byte sequence:
+ elseif (($value & 0xE0) === 0xC0)
+ {
+ $character = ($value & 0x1F) << 6;
+ $length = 2;
+ $remaining = 1;
+ }
+ // Three byte sequence:
+ elseif (($value & 0xF0) === 0xE0)
+ {
+ $character = ($value & 0x0F) << 12;
+ $length = 3;
+ $remaining = 2;
+ }
+ // Four byte sequence:
+ elseif (($value & 0xF8) === 0xF0)
+ {
+ $character = ($value & 0x07) << 18;
+ $length = 4;
+ $remaining = 3;
+ }
+ // Invalid byte:
+ else
+ {
+ $valid = false;
+ $remaining = 0;
+ }
+ }
+ // Continuation byte:
+ else
+ {
+ // Check that the byte is valid, then add it to the character:
+ if (($value & 0xC0) === 0x80)
+ {
+ $remaining--;
+ $character |= ($value & 0x3F) << ($remaining * 6);
+ }
+ // If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence:
+ else
+ {
+ $valid = false;
+ $remaining = 0;
+ $i--;
+ }
+ }
+
+ // If we've reached the end of the current byte sequence, append it to Unicode::$data
+ if (!$remaining)
+ {
+ // Percent encode anything invalid or not in iunreserved
+ if (
+ // Invalid sequences
+ !$valid
+ // Non-shortest form sequences are invalid
+ || $length > 1 && $character <= 0x7F
+ || $length > 2 && $character <= 0x7FF
+ || $length > 3 && $character <= 0xFFFF
+ // Outside of range of iunreserved codepoints
+ || $character < 0x2D
+ || $character > 0xEFFFD
+ // Noncharacters
+ || ($character & 0xFFFE) === 0xFFFE
+ || $character >= 0xFDD0 && $character <= 0xFDEF
+ // Everything else not in iunreserved (this is all BMP)
+ || $character === 0x2F
+ || $character > 0x39 && $character < 0x41
+ || $character > 0x5A && $character < 0x61
+ || $character > 0x7A && $character < 0x7E
+ || $character > 0x7E && $character < 0xA0
+ || $character > 0xD7FF && $character < 0xF900
+ )
+ {
+ for ($j = $start; $j <= $i; $j++)
{
- $string = substr_replace($string, strtoupper(substr($string, $position + 1, 2)), $position + 1, 2);
- $position += 3;
+ $string .= '%' . strtoupper($bytes[$j]);
}
}
- // If we don't have a pct-encoded section, just replace the % with its own esccaped form
else
{
- $string = substr_replace($string, '%25', $position, 1);
- $strlen += 2;
- $position += 3;
+ for ($j = $start; $j <= $i; $j++)
+ {
+ $string .= chr(hexdec($bytes[$j]));
+ }
}
}
- // If we have an invalid character, change into its pct-encoded form
- else
+ }
+
+ // If we have any bytes left over they are invalid (i.e., we are
+ // mid-way through a multi-byte sequence)
+ if ($remaining)
+ {
+ for ($j = $start; $j < $len; $j++)
{
- $replacement = sprintf("%%%02X", ord($string[$position]));
- $string = str_replace($string[$position], $replacement, $string);
- $strlen = strlen($string);
+ $string .= '%' . strtoupper($bytes[$j]);
}
}
+
return $string;
}
@@ -14446,7 +14722,7 @@ class SimplePie_Parser
case constant('XMLReader::END_ELEMENT'):
if ($xml->namespaceURI !== '')
{
- $tagName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}";
+ $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
}
else
{
@@ -14458,7 +14734,7 @@ class SimplePie_Parser
$empty = $xml->isEmptyElement;
if ($xml->namespaceURI !== '')
{
- $tagName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}";
+ $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
}
else
{
@@ -14469,7 +14745,7 @@ class SimplePie_Parser
{
if ($xml->namespaceURI !== '')
{
- $attrName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}";
+ $attrName = $xml->namespaceURI . $this->separator . $xml->localName;
}
else
{
diff --git a/inc/actions.php b/inc/actions.php
index ecf09036f..4a2e200ae 100644
--- a/inc/actions.php
+++ b/inc/actions.php
@@ -101,7 +101,7 @@ function act_dispatch(){
if(checkSecurityToken()){
$ACT = act_save($ACT);
}else{
- $ACT = 'show';
+ $ACT = 'preview';
}
}
@@ -215,7 +215,7 @@ function act_clean($act){
//disable all acl related commands if ACL is disabled
if(!$conf['useacl'] && in_array($act,array('login','logout','register','admin',
'subscribe','unsubscribe','profile','revert',
- 'resendpwd','subscribens','unsubscribens',))){
+ 'resendpwd'))){
msg('Command unavailable: '.htmlspecialchars($act),-1);
return 'show';
}
@@ -227,7 +227,7 @@ function act_clean($act){
'preview','search','show','check','index','revisions',
'diff','recent','backlink','admin','subscribe','revert',
'unsubscribe','profile','resendpwd','recover',
- 'draftdel','subscribens','unsubscribens','sitemap')) && substr($act,0,7) != 'export_' ) {
+ 'draftdel','sitemap','media')) && substr($act,0,7) != 'export_' ) {
msg('Command unknown: '.htmlspecialchars($act),-1);
return 'show';
}
diff --git a/inc/auth.php b/inc/auth.php
index a480a4a8a..eff984b36 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -348,10 +348,11 @@ function auth_logoff($keepbc=false){
unset($_SERVER['REMOTE_USER']);
$USERINFO=null; //FIXME
+ $cookieDir = empty($conf['cookiedir']) ? DOKU_REL : $conf['cookiedir'];
if (version_compare(PHP_VERSION, '5.2.0', '>')) {
- setcookie(DOKU_COOKIE,'',time()-600000,DOKU_REL,'',($conf['securecookie'] && is_ssl()),true);
+ setcookie(DOKU_COOKIE,'',time()-600000,$cookieDir,'',($conf['securecookie'] && is_ssl()),true);
}else{
- setcookie(DOKU_COOKIE,'',time()-600000,DOKU_REL,'',($conf['securecookie'] && is_ssl()));
+ setcookie(DOKU_COOKIE,'',time()-600000,$cookieDir,'',($conf['securecookie'] && is_ssl()));
}
if($auth) $auth->logOff();
@@ -977,11 +978,12 @@ function auth_setCookie($user,$pass,$sticky) {
// set cookie
$cookie = base64_encode($user).'|'.((int) $sticky).'|'.base64_encode($pass);
+ $cookieDir = empty($conf['cookiedir']) ? DOKU_REL : $conf['cookiedir'];
$time = $sticky ? (time()+60*60*24*365) : 0; //one year
if (version_compare(PHP_VERSION, '5.2.0', '>')) {
- setcookie(DOKU_COOKIE,$cookie,$time,DOKU_REL,'',($conf['securecookie'] && is_ssl()),true);
+ setcookie(DOKU_COOKIE,$cookie,$time,$cookieDir,'',($conf['securecookie'] && is_ssl()),true);
}else{
- setcookie(DOKU_COOKIE,$cookie,$time,DOKU_REL,'',($conf['securecookie'] && is_ssl()));
+ setcookie(DOKU_COOKIE,$cookie,$time,$cookieDir,'',($conf['securecookie'] && is_ssl()));
}
// set session
$_SESSION[DOKU_COOKIE]['auth']['user'] = $user;
diff --git a/inc/auth/ad.class.php b/inc/auth/ad.class.php
index 9ffd3e18b..1fddad243 100644
--- a/inc/auth/ad.class.php
+++ b/inc/auth/ad.class.php
@@ -286,11 +286,13 @@ class auth_ad extends auth_basic {
if(isset($changes['mail'])){
$adchanges['email'] = $changes['mail'];
}
- try {
- $return = $return & $this->adldap->user_modify($user,$adchanges);
- } catch (adLDAPException $e) {
- if ($this->cnf['debug']) msg('AD Auth: '.$e->getMessage(), -1);
- $return = false;
+ if(count($adchanges)){
+ try {
+ $return = $return & $this->adldap->user_modify($user,$adchanges);
+ } catch (adLDAPException $e) {
+ if ($this->cnf['debug']) msg('AD Auth: '.$e->getMessage(), -1);
+ $return = false;
+ }
}
return $return;
diff --git a/inc/changelog.php b/inc/changelog.php
index 15cd46d77..60f9b8657 100644
--- a/inc/changelog.php
+++ b/inc/changelog.php
@@ -74,7 +74,7 @@ function addLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extr
'type' => str_replace($strip, '', $type),
'id' => $id,
'user' => $user,
- 'sum' => str_replace($strip, '', $summary),
+ 'sum' => utf8_substr(str_replace($strip, '', $summary),0,255),
'extra' => str_replace($strip, '', $extra)
);
@@ -131,13 +131,14 @@ function addMediaLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='',
'type' => str_replace($strip, '', $type),
'id' => $id,
'user' => $user,
- 'sum' => str_replace($strip, '', $summary),
+ 'sum' => utf8_substr(str_replace($strip, '', $summary),0,255),
'extra' => str_replace($strip, '', $extra)
);
// add changelog lines
$logline = implode("\t", $logline)."\n";
io_saveFile($conf['media_changelog'],$logline,true); //global media changelog cache
+ io_saveFile(mediaMetaFN($id,'.changes'),$logline,true); //media file's changelog
}
/**
@@ -151,6 +152,7 @@ function addMediaLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='',
* RECENTS_SKIP_MINORS - don't include minor changes
* RECENTS_SKIP_SUBSPACES - don't include subspaces
* RECENTS_MEDIA_CHANGES - return media changes instead of page changes
+ * RECENTS_MEDIA_PAGES_MIXED - return both media changes and page changes
*
* @param int $first number of first entry returned (for paginating
* @param int $num return $num entries
@@ -158,6 +160,7 @@ function addMediaLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='',
* @param bool $flags see above
*
* @author Ben Coburn <btcoburn@silicodon.net>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
function getRecents($first,$num,$ns='',$flags=0){
global $conf;
@@ -173,20 +176,48 @@ function getRecents($first,$num,$ns='',$flags=0){
} else {
$lines = @file($conf['changelog']);
}
+ $lines_position = count($lines)-1;
+
+ if ($flags & RECENTS_MEDIA_PAGES_MIXED) {
+ $media_lines = @file($conf['media_changelog']);
+ $media_lines_position = count($media_lines)-1;
+ }
- // handle lines
$seen = array(); // caches seen lines, _handleRecent() skips them
- for($i = count($lines)-1; $i >= 0; $i--){
- $rec = _handleRecent($lines[$i], $ns, $flags, $seen);
- if($rec !== false) {
- if(--$first >= 0) continue; // skip first entries
- $recent[] = $rec;
- $count++;
- // break when we have enough entries
- if($count >= $num){ break; }
+
+ // handle lines
+ while ($lines_position >= 0 || (($flags & RECENTS_MEDIA_PAGES_MIXED) && $media_lines_position >=0)) {
+ if (empty($rec) && $lines_position >= 0) {
+ $rec = _handleRecent(@$lines[$lines_position], $ns, $flags & ~RECENTS_MEDIA_CHANGES, $seen);
+ if (!$rec) {
+ $lines_position --;
+ continue;
+ }
+ }
+ if (($flags & RECENTS_MEDIA_PAGES_MIXED) && empty($media_rec) && $media_lines_position >= 0) {
+ $media_rec = _handleRecent(@$media_lines[$media_lines_position], $ns, $flags | RECENTS_MEDIA_CHANGES, $seen);
+ if (!$media_rec) {
+ $media_lines_position --;
+ continue;
+ }
+ }
+ if (($flags & RECENTS_MEDIA_PAGES_MIXED) && @$media_rec['date'] >= @$rec['date']) {
+ $media_lines_position--;
+ $x = $media_rec;
+ $x['media'] = true;
+ $media_rec = false;
+ } else {
+ $lines_position--;
+ $x = $rec;
+ if ($flags & RECENTS_MEDIA_CHANGES) $x['media'] = true;
+ $rec = false;
}
+ if(--$first >= 0) continue; // skip first entries
+ $recent[] = $x;
+ $count++;
+ // break when we have enough entries
+ if($count >= $num){ break; }
}
-
return $recent;
}
@@ -281,7 +312,11 @@ function _handleRecent($line,$ns,$flags,&$seen){
if (($flags & RECENTS_SKIP_SUBSPACES) && (getNS($recent['id']) != $ns)) return false;
// check ACL
- $recent['perms'] = auth_quickaclcheck($recent['id']);
+ if ($flags & RECENTS_MEDIA_CHANGES) {
+ $recent['perms'] = auth_quickaclcheck(getNS($recent['id']).':*');
+ } else {
+ $recent['perms'] = auth_quickaclcheck($recent['id']);
+ }
if ($recent['perms'] < AUTH_READ) return false;
// check existance
@@ -300,8 +335,9 @@ function _handleRecent($line,$ns,$flags,&$seen){
* requested changelog line is read.
*
* @author Ben Coburn <btcoburn@silicodon.net>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
-function getRevisionInfo($id, $rev, $chunk_size=8192) {
+function getRevisionInfo($id, $rev, $chunk_size=8192, $media=false) {
global $cache_revinfo;
$cache =& $cache_revinfo;
if (!isset($cache[$id])) { $cache[$id] = array(); }
@@ -312,7 +348,11 @@ function getRevisionInfo($id, $rev, $chunk_size=8192) {
return $cache[$id][$rev];
}
- $file = metaFN($id, '.changes');
+ if ($media) {
+ $file = mediaMetaFN($id, '.changes');
+ } else {
+ $file = metaFN($id, '.changes');
+ }
if (!@file_exists($file)) { return false; }
if (filesize($file)<$chunk_size || $chunk_size==0) {
// read whole file
@@ -397,8 +437,9 @@ function getRevisionInfo($id, $rev, $chunk_size=8192) {
* lines are recieved.
*
* @author Ben Coburn <btcoburn@silicodon.net>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
-function getRevisions($id, $first, $num, $chunk_size=8192) {
+function getRevisions($id, $first, $num, $chunk_size=8192, $media=false) {
global $cache_revinfo;
$cache =& $cache_revinfo;
if (!isset($cache[$id])) { $cache[$id] = array(); }
@@ -406,11 +447,16 @@ function getRevisions($id, $first, $num, $chunk_size=8192) {
$revs = array();
$lines = array();
$count = 0;
- $file = metaFN($id, '.changes');
+ if ($media) {
+ $file = mediaMetaFN($id, '.changes');
+ } else {
+ $file = metaFN($id, '.changes');
+ }
$num = max($num, 0);
$chunk_size = max($chunk_size, 0);
- if ($first<0) { $first = 0; }
- else if (@file_exists(wikiFN($id))) {
+ 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);
}
@@ -431,13 +477,21 @@ function getRevisions($id, $first, $num, $chunk_size=8192) {
$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
- $finger = ftell($fp);
+ $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
- if ($tail<=$finger) { break; }
$chunk = '';
$read_size = max($tail-$finger, 0); // found chunk size
$got = 0;
diff --git a/inc/common.php b/inc/common.php
index 7522095ab..0c769c50d 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -15,6 +15,7 @@ define('RECENTS_SKIP_DELETED',2);
define('RECENTS_SKIP_MINORS',4);
define('RECENTS_SKIP_SUBSPACES',8);
define('RECENTS_MEDIA_CHANGES',16);
+define('RECENTS_MEDIA_PAGES_MIXED',32);
/**
* Wrapper around htmlspecialchars()
@@ -55,7 +56,7 @@ function stripctl($string){
* @return string
*/
function getSecurityToken(){
- return md5(auth_cookiesalt().session_id());
+ return md5(auth_cookiesalt().session_id().$_SERVER['REMOTE_USER']);
}
/**
@@ -713,8 +714,8 @@ function checklock($id){
}
//my own lock
- $ip = io_readFile($lock);
- if( ($ip == clientIP()) || ($ip == $_SERVER['REMOTE_USER']) ){
+ list($ip,$session) = explode("\n",io_readFile($lock));
+ if($ip == $_SERVER['REMOTE_USER'] || $ip == clientIP() || $session == session_id()){
return false;
}
@@ -737,7 +738,7 @@ function lock($id){
if($_SERVER['REMOTE_USER']){
io_saveFile($lock,$_SERVER['REMOTE_USER']);
}else{
- io_saveFile($lock,clientIP());
+ io_saveFile($lock,clientIP()."\n".session_id());
}
}
@@ -750,8 +751,8 @@ function lock($id){
function unlock($id){
$lock = wikiLockFN($id);
if(@file_exists($lock)){
- $ip = io_readFile($lock);
- if( ($ip == clientIP()) || ($ip == $_SERVER['REMOTE_USER']) ){
+ list($ip,$session) = explode("\n",io_readFile($lock));
+ if($ip == $_SERVER['REMOTE_USER'] || $ip == clientIP() || $session == session_id()){
@unlink($lock);
return true;
}
@@ -979,7 +980,7 @@ function saveWikiText($id,$text,$summary,$minor=false){
$file = wikiFN($id);
$old = @filemtime($file); // from page
- $wasRemoved = empty($text);
+ $wasRemoved = (trim($text) == ''); // check for empty or whitespace only
$wasCreated = !@file_exists($file);
$wasReverted = ($REV==true);
$newRev = false;
@@ -1007,16 +1008,8 @@ function saveWikiText($id,$text,$summary,$minor=false){
$newRev = saveOldRevision($id);
// remove empty file
@unlink($file);
- // remove old meta info...
- $mfiles = metaFiles($id);
- $changelog = metaFN($id, '.changes');
- $metadata = metaFN($id, '.meta');
- $subscribers = metaFN($id, '.mlist');
- foreach ($mfiles as $mfile) {
- // but keep per-page changelog to preserve page history, keep subscriber list and keep meta data
- if (@file_exists($mfile) && $mfile!==$changelog && $mfile!==$metadata && $mfile!==$subscribers) { @unlink($mfile); }
- }
- // purge meta data
+ // don't remove old meta info as it should be saved, plugins can use IO_WIKIPAGE_WRITE for removing their metadata...
+ // purge non-persistant meta data
p_purge_metadata($id);
$del = true;
// autoset summary on deletion
@@ -1565,4 +1558,16 @@ function valid_input_set($param, $valid_values, $array, $exc = '') {
}
}
+function get_doku_pref($pref, $default) {
+ if (strpos($_COOKIE['DOKU_PREFS'], $pref) !== false) {
+ $parts = explode('#', $_COOKIE['DOKU_PREFS']);
+ for ($i = 0; $i < count($parts); $i+=2){
+ if ($parts[$i] == $pref) {
+ return $parts[$i+1];
+ }
+ }
+ }
+ return $default;
+}
+
//Setup VIM: ex: et ts=2 :
diff --git a/inc/config_cascade.php b/inc/config_cascade.php
index 48ed5a000..443114f52 100644
--- a/inc/config_cascade.php
+++ b/inc/config_cascade.php
@@ -64,6 +64,14 @@ $config_cascade = array_merge(
'plainauth.users' => array(
'default' => DOKU_CONF.'users.auth.php',
),
+
+ 'plugins' => array(
+ 'local' => array(DOKU_CONF.'plugins.local.php'),
+ 'protected' => array(
+ DOKU_CONF.'plugins.required.php',
+ DOKU_CONF.'plugins.protected.php',
+ ),
+ ),
),
$config_cascade
);
diff --git a/inc/fulltext.php b/inc/fulltext.php
index 6ab710d54..620237296 100644
--- a/inc/fulltext.php
+++ b/inc/fulltext.php
@@ -135,7 +135,7 @@ function ft_backlinks($id){
// check ACL permissions
foreach(array_keys($result) as $idx){
- if(auth_quickaclcheck($result[$idx]) < AUTH_READ){
+ if(isHiddenPage($result[$idx]) || auth_quickaclcheck($result[$idx]) < AUTH_READ || !page_exists($result[$idx], '', false)){
unset($result[$idx]);
}
}
diff --git a/inc/html.php b/inc/html.php
index 6e187ebe1..1a2d7daef 100644
--- a/inc/html.php
+++ b/inc/html.php
@@ -415,20 +415,28 @@ function html_locked(){
*
* @author Andreas Gohr <andi@splitbrain.org>
* @author Ben Coburn <btcoburn@silicodon.net>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
-function html_revisions($first=0){
+function html_revisions($first=0, $media_id = false){
global $ID;
global $INFO;
global $conf;
global $lang;
+ $id = $ID;
/* we need to get one additionally log entry to be able to
* decide if this is the last page or is there another one.
* see html_recent()
*/
- $revisions = getRevisions($ID, $first, $conf['recent']+1);
+ if (!$media_id) $revisions = getRevisions($ID, $first, $conf['recent']+1);
+ else {
+ $revisions = getRevisions($media_id, $first, $conf['recent']+1, 8192, true);
+ $id = $media_id;
+ }
+
if(count($revisions)==0 && $first!=0){
$first=0;
- $revisions = getRevisions($ID, $first, $conf['recent']+1);;
+ if (!$media_id) $revisions = getRevisions($ID, $first, $conf['recent']+1);
+ else $revisions = getRevisions($media_id, $first, $conf['recent']+1, 8192, true);
}
$hasNext = false;
if (count($revisions)>$conf['recent']) {
@@ -436,14 +444,22 @@ function html_revisions($first=0){
array_pop($revisions); // remove extra log entry
}
- $date = dformat($INFO['lastmod']);
+ if (!$media_id) $date = dformat($INFO['lastmod']);
+ else $date = dformat(@filemtime(mediaFN($id)));
+
+ if (!$media_id) print p_locale_xhtml('revisions');
- print p_locale_xhtml('revisions');
+ $params = array('id' => 'page__revisions');
+ if ($media_id) $params['action'] = media_managerURL(array('image' => $media_id), '&');
- $form = new Doku_Form(array('id' => 'page__revisions'));
+ $form = new Doku_Form($params);
$form->addElement(form_makeOpenTag('ul'));
- if($INFO['exists'] && $first==0){
- if (isset($INFO['meta']) && isset($INFO['meta']['last_change']) && $INFO['meta']['last_change']['type']===DOKU_CHANGE_TYPE_MINOR_EDIT)
+
+ if (!$media_id) $exists = $INFO['exists'];
+ else $exists = @file_exists(mediaFN($id));
+
+ if($exists && $first==0){
+ if (!$media_id && isset($INFO['meta']) && isset($INFO['meta']['last_change']) && $INFO['meta']['last_change']['type']===DOKU_CHANGE_TYPE_MINOR_EDIT)
$form->addElement(form_makeOpenTag('li', array('class' => 'minor')));
else
$form->addElement(form_makeOpenTag('li'));
@@ -459,30 +475,53 @@ function html_revisions($first=0){
$form->addElement('<img src="'.DOKU_BASE.'lib/images/blank.gif" width="15" height="11" alt="" />');
+ if (!$media_id) $href = wl($id);
+ else $href = media_managerURL(array('image' => $id, 'tab_details' => 'view'), '&');
$form->addElement(form_makeOpenTag('a', array(
'class' => 'wikilink1',
- 'href' => wl($ID))));
- $form->addElement($ID);
+ 'href' => $href)));
+ $form->addElement($id);
$form->addElement(form_makeCloseTag('a'));
- $form->addElement(form_makeOpenTag('span', array('class' => 'sum')));
- $form->addElement(' &ndash; ');
- $form->addElement(htmlspecialchars($INFO['sum']));
- $form->addElement(form_makeCloseTag('span'));
+ if ($media_id) $form->addElement(form_makeOpenTag('div'));
+
+ if (!$media_id) {
+ $form->addElement(form_makeOpenTag('span', array('class' => 'sum')));
+ $form->addElement(' &ndash; ');
+ $form->addElement(htmlspecialchars($INFO['sum']));
+ $form->addElement(form_makeCloseTag('span'));
+ }
$form->addElement(form_makeOpenTag('span', array('class' => 'user')));
- $form->addElement((empty($INFO['editor']))?('('.$lang['external_edit'].')'):editorinfo($INFO['editor']));
+ if (!$media_id) $editor = $INFO['editor'];
+ else {
+ $revinfo = getRevisionInfo($id, @filemtime(fullpath(mediaFN($id))), 1024, true);
+ if($revinfo['user']){
+ $editor = $revinfo['user'];
+ }else{
+ $editor = $revinfo['ip'];
+ }
+ }
+ $form->addElement((empty($editor))?('('.$lang['external_edit'].')'):editorinfo($editor));
$form->addElement(form_makeCloseTag('span'));
$form->addElement('('.$lang['current'].')');
+
+ if ($media_id) $form->addElement(form_makeCloseTag('div'));
+
$form->addElement(form_makeCloseTag('div'));
$form->addElement(form_makeCloseTag('li'));
}
foreach($revisions as $rev){
- $date = dformat($rev);
- $info = getRevisionInfo($ID,$rev,true);
- $exists = page_exists($ID,$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));
+ }
if ($info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT)
$form->addElement(form_makeOpenTag('li', array('class' => 'minor')));
@@ -503,7 +542,9 @@ function html_revisions($first=0){
$form->addElement(form_makeCloseTag('span'));
if($exists){
- $form->addElement(form_makeOpenTag('a', array('href' => wl($ID,"rev=$rev,do=diff", false, '&'), 'class' => 'diff_link')));
+ if (!$media_id) $href = wl($id,"rev=$rev,do=diff", false, '&');
+ else $href = media_managerURL(array('image' => $id, 'rev' => $rev, 'mediado' => 'diff'), '&');
+ $form->addElement(form_makeOpenTag('a', array('href' => $href, 'class' => 'diff_link')));
$form->addElement(form_makeTag('img', array(
'src' => DOKU_BASE.'lib/images/diff.png',
'width' => 15,
@@ -511,19 +552,24 @@ function html_revisions($first=0){
'title' => $lang['diff'],
'alt' => $lang['diff'])));
$form->addElement(form_makeCloseTag('a'));
-
- $form->addElement(form_makeOpenTag('a', array('href' => wl($ID,"rev=$rev",false,'&'), 'class' => 'wikilink1')));
- $form->addElement($ID);
+ if (!$media_id) $href = wl($id,"rev=$rev",false,'&');
+ else $href = media_managerURL(array('image' => $id, 'tab_details' => 'view', 'rev' => $rev), '&');
+ $form->addElement(form_makeOpenTag('a', array('href' => $href, 'class' => 'wikilink1')));
+ $form->addElement($id);
$form->addElement(form_makeCloseTag('a'));
}else{
$form->addElement('<img src="'.DOKU_BASE.'lib/images/blank.gif" width="15" height="11" alt="" />');
- $form->addElement($ID);
+ $form->addElement($id);
}
- $form->addElement(form_makeOpenTag('span', array('class' => 'sum')));
- $form->addElement(' &ndash; ');
- $form->addElement(htmlspecialchars($info['sum']));
- $form->addElement(form_makeCloseTag('span'));
+ if ($media_id) $form->addElement(form_makeOpenTag('div'));
+
+ if ($info['sum']) {
+ $form->addElement(form_makeOpenTag('span', array('class' => 'sum')));
+ if (!$media_id) $form->addElement(' &ndash; ');
+ $form->addElement(htmlspecialchars($info['sum']));
+ $form->addElement(form_makeCloseTag('span'));
+ }
$form->addElement(form_makeOpenTag('span', array('class' => 'user')));
if($info['user']){
@@ -536,11 +582,18 @@ function html_revisions($first=0){
}
$form->addElement(form_makeCloseTag('span'));
+ if ($media_id) $form->addElement(form_makeCloseTag('div'));
+
$form->addElement(form_makeCloseTag('div'));
$form->addElement(form_makeCloseTag('li'));
}
$form->addElement(form_makeCloseTag('ul'));
- $form->addElement(form_makeButton('submit', 'diff', $lang['diff2']));
+ if (!$media_id) {
+ $form->addElement(form_makeButton('submit', 'diff', $lang['diff2']));
+ } else {
+ $form->addHidden('mediado', 'diff');
+ $form->addElement(form_makeButton('submit', '', $lang['diff2']));
+ }
html_form('revisions', $form);
print '<div class="pagenav">';
@@ -549,12 +602,20 @@ function html_revisions($first=0){
$first -= $conf['recent'];
if ($first < 0) $first = 0;
print '<div class="pagenav-prev">';
- print html_btn('newer',$ID,"p",array('do' => 'revisions', 'first' => $first));
+ if ($media_id) {
+ print html_btn('newer',$media_id,"p",media_managerURL(array('first' => $first), '&amp;', false, true));
+ } else {
+ print html_btn('newer',$id,"p",array('do' => 'revisions', 'first' => $first));
+ }
print '</div>';
}
if ($hasNext) {
print '<div class="pagenav-next">';
- print html_btn('older',$ID,"n",array('do' => 'revisions', 'first' => $last));
+ if ($media_id) {
+ print html_btn('older',$media_id,"n",media_managerURL(array('first' => $last), '&amp;', false, true));
+ } else {
+ print html_btn('older',$id,"n",array('do' => 'revisions', 'first' => $last));
+ }
print '</div>';
}
print '</div>';
@@ -567,8 +628,9 @@ function html_revisions($first=0){
* @author Andreas Gohr <andi@splitbrain.org>
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
* @author Ben Coburn <btcoburn@silicodon.net>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
-function html_recent($first=0){
+function html_recent($first=0, $show_changes='both'){
global $conf;
global $lang;
global $ID;
@@ -576,10 +638,20 @@ function html_recent($first=0){
* decide if this is the last page or is there another one.
* This is the cheapest solution to get this information.
*/
- $recents = getRecents($first,$conf['recent'] + 1,getNS($ID));
+ $flags = 0;
+ if ($show_changes == 'mediafiles' && $conf['mediarevisions']) {
+ $flags = RECENTS_MEDIA_CHANGES;
+ } elseif ($show_changes == 'pages') {
+ $flags = 0;
+ } elseif ($conf['mediarevisions']) {
+ $show_changes = 'both';
+ $flags = RECENTS_MEDIA_PAGES_MIXED;
+ }
+
+ $recents = getRecents($first,$conf['recent'] + 1,getNS($ID),$flags);
if(count($recents) == 0 && $first != 0){
$first=0;
- $recents = getRecents($first,$conf['recent'] + 1,getNS($ID));
+ $recents = getRecents($first,$conf['recent'] + 1,getNS($ID),$flags);
}
$hasNext = false;
if (count($recents)>$conf['recent']) {
@@ -596,6 +668,22 @@ function html_recent($first=0){
$form->addHidden('sectok', null);
$form->addHidden('do', 'recent');
$form->addHidden('id', $ID);
+
+ if ($conf['mediarevisions']) {
+ $form->addElement(form_makeListboxField(
+ 'show_changes',
+ array(
+ 'pages' => $lang['pages_changes'],
+ 'mediafiles' => $lang['media_changes'],
+ 'both' => $lang['both_changes']),
+ $show_changes,
+ $lang['changes_type'],
+ '','',
+ array('class'=>'quickselect')));
+
+ $form->addElement(form_makeButton('submit', 'recent', $lang['btn_apply']));
+ }
+
$form->addElement(form_makeOpenTag('ul'));
foreach($recents as $recent){
@@ -607,21 +695,48 @@ function html_recent($first=0){
$form->addElement(form_makeOpenTag('div', array('class' => 'li')));
+ if ($recent['media']) {
+ $form->addElement(media_printicon($recent['id']));
+ } else {
+ $icon = DOKU_BASE.'lib/images/fileicons/file.png';
+ $form->addElement('<img src="'.$icon.'" alt="'.$filename.'" class="icon" />');
+ }
+
$form->addElement(form_makeOpenTag('span', array('class' => 'date')));
$form->addElement($date);
$form->addElement(form_makeCloseTag('span'));
- $form->addElement(form_makeOpenTag('a', array('class' => 'diff_link', 'href' => wl($recent['id'],"do=diff", false, '&'))));
- $form->addElement(form_makeTag('img', array(
- 'src' => DOKU_BASE.'lib/images/diff.png',
- 'width' => 15,
- 'height'=> 11,
- 'title' => $lang['diff'],
- 'alt' => $lang['diff']
- )));
- $form->addElement(form_makeCloseTag('a'));
+ if ($recent['media']) {
+ $diff = (count(getRevisions($recent['id'], 0, 1, 8192, true)) && @file_exists(mediaFN($recent['id'])));
+ if ($diff) {
+ $href = media_managerURL(array('tab_details' => 'history',
+ 'mediado' => 'diff', 'image' => $recent['id'], 'ns' => getNS($recent['id'])), '&');
+ }
+ } else {
+ $href = wl($recent['id'],"do=diff", false, '&');
+ }
- $form->addElement(form_makeOpenTag('a', array('class' => 'revisions_link', 'href' => wl($recent['id'],"do=revisions",false,'&'))));
+ if ($recent['media'] && !$diff) {
+ $form->addElement('<img src="'.DOKU_BASE.'lib/images/blank.gif" width="15" height="11" alt="" />');
+ } else {
+ $form->addElement(form_makeOpenTag('a', array('class' => 'diff_link', 'href' => $href)));
+ $form->addElement(form_makeTag('img', array(
+ 'src' => DOKU_BASE.'lib/images/diff.png',
+ 'width' => 15,
+ 'height'=> 11,
+ 'title' => $lang['diff'],
+ 'alt' => $lang['diff']
+ )));
+ $form->addElement(form_makeCloseTag('a'));
+ }
+
+ if ($recent['media']) {
+ $href = media_managerURL(array('tab_details' => 'history',
+ 'image' => $recent['id'], 'ns' => getNS($recent['id'])), '&');
+ } else {
+ $href = wl($recent['id'],"do=revisions",false,'&');
+ }
+ $form->addElement(form_makeOpenTag('a', array('class' => 'revisions_link', 'href' => $href)));
$form->addElement(form_makeTag('img', array(
'src' => DOKU_BASE.'lib/images/history.png',
'width' => 12,
@@ -631,8 +746,15 @@ function html_recent($first=0){
)));
$form->addElement(form_makeCloseTag('a'));
- $form->addElement(html_wikilink(':'.$recent['id'],useHeading('navigation')?null:$recent['id']));
-
+ if ($recent['media']) {
+ $href = media_managerURL(array('tab_details' => 'view', 'image' => $recent['id'], 'ns' => getNS($recent['id'])), '&');
+ $class = (file_exists(mediaFN($recent['id']))) ? 'wikilink1' : $class = 'wikilink2';
+ $form->addElement(form_makeOpenTag('a', array('class' => $class, 'href' => $href)));
+ $form->addElement($recent['id']);
+ $form->addElement(form_makeCloseTag('a'));
+ } else {
+ $form->addElement(html_wikilink(':'.$recent['id'],useHeading('navigation')?null:$recent['id']));
+ }
$form->addElement(form_makeOpenTag('span', array('class' => 'sum')));
$form->addElement(' &ndash; '.htmlspecialchars($recent['sum']));
$form->addElement(form_makeCloseTag('span'));
@@ -665,7 +787,7 @@ function html_recent($first=0){
'value' => $lang['btn_newer'],
'accesskey' => 'n',
'title' => $lang['btn_newer'].' [N]',
- 'class' => 'button'
+ 'class' => 'button show'
)));
$form->addElement(form_makeCloseTag('div'));
}
@@ -677,7 +799,7 @@ function html_recent($first=0){
'value' => $lang['btn_older'],
'accesskey' => 'p',
'title' => $lang['btn_older'].' [P]',
- 'class' => 'button'
+ 'class' => 'button show'
)));
$form->addElement(form_makeCloseTag('div'));
}
@@ -737,7 +859,7 @@ function html_list_index($item){
/**
* Index List item
*
- * This user function is used in html_build_lidt to build the
+ * This user function is used in html_buildlist to build the
* <li> tags for namespaces when displaying the page index
* it gives different classes to opened or closed "folders"
*
@@ -777,34 +899,41 @@ function html_li_default($item){
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
-function html_buildlist($data,$class,$func,$lifunc='html_li_default'){
- $level = 0;
- $opens = 0;
+function html_buildlist($data,$class,$func,$lifunc='html_li_default',$forcewrapper=false){
+ if (count($data) === 0) {
+ return '';
+ }
+
+ $start_level = $data[0]['level'];
+ $level = $start_level;
$ret = '';
+ $open = 0;
foreach ($data as $item){
if( $item['level'] > $level ){
//open new list
for($i=0; $i<($item['level'] - $level); $i++){
- if ($i) $ret .= "<li class=\"clear\">\n";
+ if ($i) $ret .= "<li class=\"clear\">";
$ret .= "\n<ul class=\"$class\">\n";
+ $open++;
}
+ $level = $item['level'];
+
}elseif( $item['level'] < $level ){
//close last item
$ret .= "</li>\n";
- for ($i=0; $i<($level - $item['level']); $i++){
+ while( $level > $item['level'] && $open > 0 ){
//close higher lists
$ret .= "</ul>\n</li>\n";
+ $level--;
+ $open--;
}
- }else{
- //close last item
+ } elseif ($ret !== '') {
+ //close previous item
$ret .= "</li>\n";
}
- //remember current level
- $level = $item['level'];
-
//print item
$ret .= call_user_func($lifunc,$item);
$ret .= '<div class="li">';
@@ -814,8 +943,15 @@ function html_buildlist($data,$class,$func,$lifunc='html_li_default'){
}
//close remaining items and lists
- for ($i=0; $i < $level; $i++){
- $ret .= "</li></ul>\n";
+ $ret .= "</li>\n";
+ while($open-- > 0) {
+ $ret .= "</ul></li>\n";
+ }
+
+ if ($forcewrapper || $start_level < 2) {
+ // Trigger building a wrapper ul if the first level is
+ // 0 (we have a root object) or 1 (just the root content)
+ $ret = "\n<ul class=\"$class\">\n".$ret."</ul>\n";
}
return $ret;
@@ -849,6 +985,76 @@ function html_backlinks(){
}
}
+function html_diff_head($l_rev, $r_rev, $id = null, $media = false) {
+ global $lang;
+ if ($id === null) {
+ global $ID;
+ $id = $ID;
+ }
+ $media_or_wikiFN = $media ? 'mediaFN' : 'wikiFN';
+ $ml_or_wl = $media ? 'ml' : 'wl';
+ $l_minor = $r_minor = '';
+
+ if(!$l_rev){
+ $l_head = '&mdash;';
+ }else{
+ $l_info = getRevisionInfo($id,$l_rev,true, $media);
+ if($l_info['user']){
+ $l_user = editorinfo($l_info['user']);
+ if(auth_ismanager()) $l_user .= ' ('.$l_info['ip'].')';
+ } else {
+ $l_user = $l_info['ip'];
+ }
+ $l_user = '<span class="user">'.$l_user.'</span>';
+ $l_sum = ($l_info['sum']) ? '<span class="sum">'.hsc($l_info['sum']).'</span>' : '';
+ if ($l_info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) $l_minor = 'class="minor"';
+
+ $l_head_title = ($media) ? dformat($l_rev) : $id.' ['.dformat($l_rev).']';
+ $l_head = '<a class="wikilink1" href="'.$ml_or_wl($id,"rev=$l_rev").'">'.
+ $l_head_title.'</a>'.
+ '<br />'.$l_user.' '.$l_sum;
+ }
+
+ if($r_rev){
+ $r_info = getRevisionInfo($id,$r_rev,true, $media);
+ if($r_info['user']){
+ $r_user = editorinfo($r_info['user']);
+ if(auth_ismanager()) $r_user .= ' ('.$r_info['ip'].')';
+ } else {
+ $r_user = $r_info['ip'];
+ }
+ $r_user = '<span class="user">'.$r_user.'</span>';
+ $r_sum = ($r_info['sum']) ? '<span class="sum">'.hsc($r_info['sum']).'</span>' : '';
+ if ($r_info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) $r_minor = 'class="minor"';
+
+ $r_head_title = ($media) ? dformat($r_rev) : $id.' ['.dformat($r_rev).']';
+ $r_head = '<a class="wikilink1" href="'.$ml_or_wl($id,"rev=$r_rev").'">'.
+ $r_head_title.'</a>'.
+ '<br />'.$r_user.' '.$r_sum;
+ }elseif($_rev = @filemtime($media_or_wikiFN($id))){
+ $_info = getRevisionInfo($id,$_rev,true, $media);
+ if($_info['user']){
+ $_user = editorinfo($_info['user']);
+ if(auth_ismanager()) $_user .= ' ('.$_info['ip'].')';
+ } else {
+ $_user = $_info['ip'];
+ }
+ $_user = '<span class="user">'.$_user.'</span>';
+ $_sum = ($_info['sum']) ? '<span class="sum">'.hsc($_info['sum']).'</span>' : '';
+ if ($_info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) $r_minor = 'class="minor"';
+
+ $r_head_title = ($media) ? dformat($_rev) : $id.' ['.dformat($_rev).']';
+ $r_head = '<a class="wikilink1" href="'.$ml_or_wl($id).'">'.
+ $r_head_title.'</a> '.
+ '('.$lang['current'].')'.
+ '<br />'.$_user.' '.$_sum;
+ }else{
+ $r_head = '&mdash; ('.$lang['current'].')';
+ }
+
+ return array($l_head, $r_head, $l_minor, $r_minor);
+}
+
/**
* show diff
*
@@ -923,59 +1129,7 @@ function html_diff($text='',$intro=true,$type=null){
}
$r_text = rawWiki($ID,$r_rev);
- if(!$l_rev){
- $l_head = '&mdash;';
- }else{
- $l_info = getRevisionInfo($ID,$l_rev,true);
- if($l_info['user']){
- $l_user = editorinfo($l_info['user']);
- if(auth_ismanager()) $l_user .= ' ('.$l_info['ip'].')';
- } else {
- $l_user = $l_info['ip'];
- }
- $l_user = '<span class="user">'.$l_user.'</span>';
- $l_sum = ($l_info['sum']) ? '<span class="sum">'.hsc($l_info['sum']).'</span>' : '';
- if ($l_info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) $l_minor = 'class="minor"';
-
- $l_head = '<a class="wikilink1" href="'.wl($ID,"rev=$l_rev").'">'.
- $ID.' ['.dformat($l_rev).']</a>'.
- '<br />'.$l_user.' '.$l_sum;
- }
-
- if($r_rev){
- $r_info = getRevisionInfo($ID,$r_rev,true);
- if($r_info['user']){
- $r_user = editorinfo($r_info['user']);
- if(auth_ismanager()) $r_user .= ' ('.$r_info['ip'].')';
- } else {
- $r_user = $r_info['ip'];
- }
- $r_user = '<span class="user">'.$r_user.'</span>';
- $r_sum = ($r_info['sum']) ? '<span class="sum">'.hsc($r_info['sum']).'</span>' : '';
- if ($r_info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) $r_minor = 'class="minor"';
-
- $r_head = '<a class="wikilink1" href="'.wl($ID,"rev=$r_rev").'">'.
- $ID.' ['.dformat($r_rev).']</a>'.
- '<br />'.$r_user.' '.$r_sum;
- }elseif($_rev = @filemtime(wikiFN($ID))){
- $_info = getRevisionInfo($ID,$_rev,true);
- if($_info['user']){
- $_user = editorinfo($_info['user']);
- if(auth_ismanager()) $_user .= ' ('.$_info['ip'].')';
- } else {
- $_user = $_info['ip'];
- }
- $_user = '<span class="user">'.$_user.'</span>';
- $_sum = ($_info['sum']) ? '<span class="sum">'.hsc($_info['sum']).'</span>' : '';
- if ($_info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) $r_minor = 'class="minor"';
-
- $r_head = '<a class="wikilink1" href="'.wl($ID).'">'.
- $ID.' ['.dformat($_rev).']</a> '.
- '('.$lang['current'].')'.
- '<br />'.$_user.' '.$_sum;
- }else{
- $r_head = '&mdash; ('.$lang['current'].')';
- }
+ list($l_head, $r_head, $l_minor, $r_minor) = html_diff_head($l_rev, $r_rev);
}
$df = new Diff(explode("\n",htmlspecialchars($l_text)),
@@ -1248,7 +1402,7 @@ function html_edit(){
$form->addElement(form_makeOpenTag('div', array('class'=>'license')));
$out = $lang['licenseok'];
$out .= ' <a href="'.$license[$conf['license']]['url'].'" rel="license" class="urlextern"';
- if(isset($conf['target']['extern'])) $out .= ' target="'.$conf['target']['extern'].'"';
+ if($conf['target']['extern']) $out .= ' target="'.$conf['target']['extern'].'"';
$out .= '>'.$license[$conf['license']]['name'].'</a>';
$form->addElement($out);
$form->addElement(form_makeCloseTag('div'));
@@ -1543,7 +1697,7 @@ function html_TOC($toc){
$out .= $lang['toc'];
$out .= '</div>'.DOKU_LF;
$out .= '<div id="toc__inside">'.DOKU_LF;
- $out .= html_buildlist($toc,'toc','html_list_toc');
+ $out .= html_buildlist($toc,'toc','html_list_toc','html_li_default',true);
$out .= '</div>'.DOKU_LF.'</div>'.DOKU_LF;
$out .= '<!-- TOC END -->'.DOKU_LF;
return $out;
@@ -1678,3 +1832,36 @@ function html_flashobject($swf,$width,$height,$params=null,$flashvars=null,$atts
return $out;
}
+function html_tabs($tabs, $current_tab = null) {
+ echo '<ul class="tabs">'.NL;
+
+ foreach($tabs as $id => $tab) {
+ html_tab($tab['href'], $tab['caption'], $id === $current_tab);
+ }
+
+ echo '</ul>'.NL;
+}
+/**
+ * Prints a single tab
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ * @author Adrian Lang <mail@adrianlang.de>
+ *
+ * @param string $href - tab href
+ * @param string $caption - tab caption
+ * @param boolean $selected - is tab selected
+ */
+
+function html_tab($href, $caption, $selected=false) {
+ $tab = '<li>';
+ if ($selected) {
+ $tab .= '<strong>';
+ } else {
+ $tab .= '<a href="' . hsc($href) . '">';
+ }
+ $tab .= hsc($caption)
+ . '</' . ($selected ? 'strong' : 'a') . '>'
+ . '</li>'.NL;
+ echo $tab;
+}
+
diff --git a/inc/httputils.php b/inc/httputils.php
index 8da42e3b7..0ad97a9a1 100644
--- a/inc/httputils.php
+++ b/inc/httputils.php
@@ -197,3 +197,55 @@ function http_gzip_valid($uncompressed_file) {
return true;
}
+
+/**
+ * Set HTTP headers and echo cachefile, if useable
+ *
+ * This function handles output of cacheable resource files. It ses the needed
+ * HTTP headers. If a useable cache is present, it is passed to the web server
+ * and the scrpt is terminated.
+ */
+function http_cached($cache, $cache_ok) {
+ global $conf;
+
+ // check cache age & handle conditional request
+ // since the resource files are timestamped, we can use a long max age: 1 year
+ header('Cache-Control: public, max-age=31536000');
+ header('Pragma: public');
+ if($cache_ok){
+ http_conditionalRequest(filemtime($cache));
+ if($conf['allowdebug']) header("X-CacheUsed: $cache");
+
+ // finally send output
+ if ($conf['gzip_output'] && http_gzip_valid($cache)) {
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ readfile($cache.".gz");
+ } else {
+ if (!http_sendfile($cache)) readfile($cache);
+ }
+ exit;
+ }
+
+ http_conditionalRequest(time());
+}
+
+/**
+ * Cache content and print it
+ */
+function http_cached_finish($file, $content) {
+ global $conf;
+
+ // save cache file
+ io_saveFile($file, $content);
+ if(function_exists('gzopen')) io_saveFile("$file.gz",$content);
+
+ // finally send output
+ if ($conf['gzip_output']) {
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ print gzencode($content,9,FORCE_GZIP);
+ } else {
+ print $content;
+ }
+}
diff --git a/inc/infoutils.php b/inc/infoutils.php
index 786661d01..2b8486906 100644
--- a/inc/infoutils.php
+++ b/inc/infoutils.php
@@ -24,7 +24,7 @@ function checkUpdateMessages(){
$lm = @filemtime($cf);
// check if new messages needs to be fetched
- if($lm < time()-(60*60*24) || $lm < @filemtime(DOKU_INC.'doku.php')){
+ if($lm < time()-(60*60*24) || $lm < @filemtime(DOKU_INC.DOKU_SCRIPT)){
$http = new DokuHTTPClient();
$http->timeout = 8;
$data = $http->get(DOKU_MESSAGEURL.$updateVersion);
@@ -66,8 +66,8 @@ function getVersionData(){
$chunk = fread($fh,2000);
fclose($fh);
$chunk = trim($chunk);
- $chunk = array_pop(explode("\n",$chunk)); //last log line
- $chunk = array_shift(explode("\t",$chunk)); //strip commit msg
+ $chunk = @array_pop(explode("\n",$chunk)); //last log line
+ $chunk = @array_shift(explode("\t",$chunk)); //strip commit msg
$chunk = explode(" ",$chunk);
array_pop($chunk); //strip timezone
$date = date('Y-m-d',array_pop($chunk));
@@ -175,6 +175,12 @@ function check(){
msg('Lockdir is not writable',-1);
}
+ if(is_writable(DOKU_CONF)){
+ msg('conf directory is writable',1);
+ }else{
+ msg('conf directory is not writable',-1);
+ }
+
if($conf['authtype'] == 'plain'){
global $config_cascade;
if(is_writable($config_cascade['plainauth.users']['default'])){
diff --git a/inc/init.php b/inc/init.php
index 819d92bdc..b3acf2e33 100644
--- a/inc/init.php
+++ b/inc/init.php
@@ -146,10 +146,11 @@ if ($conf['gzip_output'] &&
// init session
if (!headers_sent() && !defined('NOSESSION')){
session_name("DokuWiki");
+ $cookieDir = empty($conf['cookiedir']) ? DOKU_REL : $conf['cookiedir'];
if (version_compare(PHP_VERSION, '5.2.0', '>')) {
- session_set_cookie_params(0,DOKU_REL,'',($conf['securecookie'] && is_ssl()),true);
+ session_set_cookie_params(0,$cookieDir,'',($conf['securecookie'] && is_ssl()),true);
}else{
- session_set_cookie_params(0,DOKU_REL,'',($conf['securecookie'] && is_ssl()));
+ session_set_cookie_params(0,$cookieDir,'',($conf['securecookie'] && is_ssl()));
}
session_start();
@@ -230,7 +231,9 @@ function init_paths(){
$paths = array('datadir' => 'pages',
'olddir' => 'attic',
'mediadir' => 'media',
+ 'mediaolddir' => 'media_attic',
'metadir' => 'meta',
+ 'mediametadir' => 'media_meta',
'cachedir' => 'cache',
'indexdir' => 'index',
'lockdir' => 'locks',
diff --git a/inc/lang/ar/lang.php b/inc/lang/ar/lang.php
index e5606c456..02a62fe94 100644
--- a/inc/lang/ar/lang.php
+++ b/inc/lang/ar/lang.php
@@ -92,7 +92,7 @@ $lang['txt_filename'] = 'رفع كـ (اختياري)';
$lang['txt_overwrt'] = 'اكتب على ملف موجود';
$lang['lockedby'] = 'مقفلة حاليا لـ';
$lang['lockexpire'] = 'ينتهي القفل في';
-$lang['willexpire'] = 'سينتهي قفل تحرير هذه الصفحه خلال دقيقة.\nلتجنب التعارض استخدم زر المعاينة لتصفير مؤقت القفل.';
+$lang['js']['willexpire'] = 'سينتهي قفل تحرير هذه الصفحه خلال دقيقة.\nلتجنب التعارض استخدم زر المعاينة لتصفير مؤقت القفل.';
$lang['js']['notsavedyet'] = 'التعديلات غير المحفوظة ستفقد.';
$lang['js']['searchmedia'] = 'ابحث عن ملفات';
$lang['js']['keepopen'] = 'أبقي النافذة مفتوحة أثناء الاختيار';
@@ -123,7 +123,6 @@ $lang['js']['nosmblinks'] = 'الروابط لمجلدات مشاركة و
$lang['js']['linkwiz'] = 'مرشد الروابط';
$lang['js']['linkto'] = 'الرابط إلى :';
$lang['js']['del_confirm'] = 'هل حقاً تريد حذف البنود المختارة؟';
-$lang['js']['mu_btn'] = 'رفع عدة ملفات في وقت واحد';
$lang['rssfailed'] = 'خطأ ما حدث أثناء جلب ملف التغذية:';
$lang['nothingfound'] = 'لا يوجد شيء';
$lang['mediaselect'] = 'ملفات الوسائط';
diff --git a/inc/lang/az/lang.php b/inc/lang/az/lang.php
index 35b18d3a7..13ba7b3c3 100644
--- a/inc/lang/az/lang.php
+++ b/inc/lang/az/lang.php
@@ -38,8 +38,6 @@ $lang['btn_backlink'] = 'Bura olan link-lər';
$lang['btn_backtomedia'] = 'media-fayl seçiminə qayıt';
$lang['btn_subscribe'] = 'Abunə ol (bütün dəyişiklər)';
$lang['btn_unsubscribe'] = 'Abunəlikdən çıx (bütün dəyişiklər)';
-$lang['btn_subscribens'] = 'Abunə ol (bu bölümün dəyişikləri)';
-$lang['btn_unsubscribens'] = 'Abunəlikdən çıx (bu bölümün dəyişikləri)';
$lang['btn_profile'] = 'Profil';
$lang['btn_reset'] = 'Boşalt';
$lang['btn_resendpwd'] = 'Yeni şifrəni göndər';
@@ -92,7 +90,7 @@ $lang['txt_filename'] = 'Faylın wiki-də olan adını daxil edin (müt
$lang['txt_overwrt'] = 'Mövcud olan faylın üstündən yaz';
$lang['lockedby'] = 'В данный момент заблокирован Bu an blokdadır';
$lang['lockexpire'] = 'Blok bitir:';
-$lang['willexpire'] = 'Sizin bu səhifədə dəyişik etmək üçün blokunuz bir dəqiqə ərzində bitəcək.\nMünaqişələrdən yayınmaq və blokun taymerini sıfırlamaq üçün, baxış düyməsini sıxın.';
+$lang['js']['willexpire'] = 'Sizin bu səhifədə dəyişik etmək üçün blokunuz bir dəqiqə ərzində bitəcək.\nMünaqişələrdən yayınmaq və blokun taymerini sıfırlamaq üçün, baxış düyməsini sıxın.';
$lang['notsavedyet'] = 'Yaddaşa yazılmamış dəyişiklər itəcəklər.\nSiz davam etmək istəyirsiz?';
$lang['rssfailed'] = 'Aşağıda göstərilmiş xəbər lentini əldə edən zaman xəta baş verdi: ';
$lang['nothingfound'] = 'Heçnə tapılmadı.';
@@ -118,7 +116,6 @@ $lang['js']['nosmblinks'] = 'Windows-un şəbəkə qovluqlarına link ancaq
$lang['js']['linkwiz'] = 'Linklər köməkçisi';
$lang['js']['linkto'] = 'Link göstərir:';
$lang['js']['del_confirm'] = 'Siz əminsiz ki, seçilmişləri silmək istəyirsiniz?';
-$lang['js']['mu_btn'] = 'Bir neçə faylı birdən yükləmək';
$lang['mediausage'] = 'Bu fayla link yaratmaq üçün aşağıdakı sintaksisdən istifadə edin:';
$lang['mediaview'] = 'Bu faylın ilkinə bax';
$lang['mediaroot'] = 'kök';
diff --git a/inc/lang/bg/diff.txt b/inc/lang/bg/diff.txt
index b1d49de92..a22031e93 100644
--- a/inc/lang/bg/diff.txt
+++ b/inc/lang/bg/diff.txt
@@ -1,4 +1,3 @@
====== Разлики ======
Тук са показани разликите между избраната и текущата версия на страницата.
-
diff --git a/inc/lang/bg/install.html b/inc/lang/bg/install.html
index 9d275d82a..44f02f4c2 100644
--- a/inc/lang/bg/install.html
+++ b/inc/lang/bg/install.html
@@ -1,17 +1,15 @@
-<p>Страницата помага при първа инсталация и настройване на
+<p>Страницата помага при инсталиране за първи път и настройване на
<a href="http://dokuwiki.org">Dokuwiki</a>. Повече информация
за инсталатора ще намерите в <a href="http://dokuwiki.org/installer">документацията му</a>.</p>
-<p>Dokuwiki ползва обикновени файлове за хранилище на страниците и друга
-информация свързана с тях (примерно картинки, търсене, стари версии, и др.).
+<p>Dokuwiki ползва обикновени файлове за съхраняване на страниците и информацията свързана с тях (примерно картинки, търсения, стари версии, и др.).
За да функционира нормално DokuWiki
<strong>трябва</strong> да има право за писане в директориите, които съдържат тези
файлове. Инсталаторът не може да настройва правата на директориите.
Вие трябва да направите това директно от командният ред или ако ползвате хостинг през FTP или контролния панела на хоста (примерно cPanel).</p>
<p>Инсталаторът ще настрои вашата DokuWiki конфигурация на
-<acronym title="списъка за достъп">ACL</acronym>, което ще позволи на администратора да се впише и ползва администраторското меню в DokuWiki за инсталиране на приставки, контрол
-на потребители, управление на достъпа до страниците и промяна на останалите настройки. Това не е необходимо за функционирането на DokuWiki, но направи администрирането по-лесно.</p>
+<acronym title="списъка за достъп">ACL</acronym>, което ще позволи на администратора да се впише и ползва администраторското меню в DokuWiki за инсталиране на приставки, контрол на потребителите, управление на достъпа до страниците и промяна на останалите настройки. Това не е необходимо за функционирането на DokuWiki, но прави администрирането по-лесно.</p>
<p>Опитните потребители и потребителите със специални изисквания към настройките имат на разположение допълнителна информация относно <a href="http://dokuwiki.org/install">инсталирането</a>
и <a href="http://dokuwiki.org/config">настройването</a>.</p>
diff --git a/inc/lang/bg/lang.php b/inc/lang/bg/lang.php
index 3f8460286..8985e20e5 100644
--- a/inc/lang/bg/lang.php
+++ b/inc/lang/bg/lang.php
@@ -37,7 +37,7 @@ $lang['btn_update'] = 'Актуализиране';
$lang['btn_delete'] = 'Изтриване';
$lang['btn_back'] = 'Назад';
$lang['btn_backlink'] = 'Обратни препратки';
-$lang['btn_backtomedia'] = 'Назад към избора на медиен файл';
+$lang['btn_backtomedia'] = 'Назад към избора на файл';
$lang['btn_subscribe'] = 'Абонаменти';
$lang['btn_profile'] = 'Профил';
$lang['btn_reset'] = 'Изчистване';
@@ -47,6 +47,8 @@ $lang['btn_recover'] = 'Възстановяване на чернов
$lang['btn_draftdel'] = 'Изтриване на чернова';
$lang['btn_revert'] = 'Възстановяване';
$lang['btn_register'] = 'Регистриране';
+$lang['btn_apply'] = 'Прилагане';
+$lang['btn_media'] = 'Диспечер на файлове';
$lang['loggedinas'] = 'Вписани сте като';
$lang['user'] = 'Потребител';
$lang['pass'] = 'Парола';
@@ -91,7 +93,7 @@ $lang['txt_filename'] = 'Качи като (незадължителн
$lang['txt_overwrt'] = 'Презапиши съществуващите файлове';
$lang['lockedby'] = 'В момента е заключена от';
$lang['lockexpire'] = 'Ще бъде отключена на';
-$lang['willexpire'] = 'Страницата ще бъде отключена за редактиране след минута.\nЗа предотвратяване на конфликти, ползвайте бутона "Преглед", за рестартиране на брояча за заключване.';
+$lang['js']['willexpire'] = 'Страницата ще бъде отключена за редактиране след минута.\nЗа предотвратяване на конфликти, ползвайте бутона "Преглед", за рестартиране на брояча за заключване.';
$lang['js']['notsavedyet'] = 'Незаписаните промени ще бъдат загубени. Желаете ли да продължите?';
$lang['js']['searchmedia'] = 'Търсене на файлове';
$lang['js']['keepopen'] = 'Без затваряне на прозореца след избор';
@@ -122,11 +124,21 @@ $lang['js']['nosmblinks'] = 'Връзките към Windows shares раб
$lang['js']['linkwiz'] = 'Помощник за препратки';
$lang['js']['linkto'] = 'Препратка към: ';
$lang['js']['del_confirm'] = 'Да бъдат ли изтрити избраните елементи?';
-$lang['js']['mu_btn'] = 'Качване на няколко файла наведнъж';
+$lang['js']['restore_confirm'] = 'Наистина ли желаете да бъде възстановена тази версия?';
+$lang['js']['media_diff'] = 'Преглед на разликите:';
+$lang['js']['media_diff_both'] = 'Един до друг';
+$lang['js']['media_diff_opacity'] = 'Наслагване (и прозиране)';
+$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_cancel'] = 'премахване';
+$lang['js']['media_overwrt'] = 'Презапиши съществуващите файлове';
$lang['rssfailed'] = 'Възникна грешка при получаването на емисията: ';
$lang['nothingfound'] = 'Нищо не е открито.';
-$lang['mediaselect'] = 'Медийни файлове';
-$lang['fileupload'] = 'Качване на медийни файлове';
+$lang['mediaselect'] = 'Файлове';
+$lang['fileupload'] = 'Качване на файлове';
$lang['uploadsucc'] = 'Качването е успешно';
$lang['uploadfail'] = 'Качването се провали. Може би поради грешни права?';
$lang['uploadwrong'] = 'Качването е отказано. Файлово разширение е забранено!';
@@ -177,6 +189,10 @@ $lang['mail_changed'] = 'променена страница: ';
$lang['mail_subscribe_list'] = 'променени страници в именно пространство: ';
$lang['mail_new_user'] = 'нов потребител: ';
$lang['mail_upload'] = 'качен файл: ';
+$lang['changes_type'] = 'Преглед на променените';
+$lang['pages_changes'] = 'Страници';
+$lang['media_changes'] = 'Файлове';
+$lang['both_changes'] = 'Страници и файлове';
$lang['qb_bold'] = 'Удебелен текст';
$lang['qb_italic'] = 'Курсив текст';
$lang['qb_underl'] = 'Подчертан текст';
@@ -217,6 +233,9 @@ $lang['img_copyr'] = 'Авторско право';
$lang['img_format'] = 'Формат';
$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'] = 'Добавянето ви към списъка с абонати не е възможно поради липсата на свързан адрес (на ел. поща) с профила ви.';
@@ -282,3 +301,27 @@ $lang['hours'] = 'преди %d часа';
$lang['minutes'] = 'преди %d минути';
$lang['seconds'] = 'преди %d секунди';
$lang['wordblock'] = 'Направените от вас промени не са съхранени, защото съдържат забранен текст (SPAM).';
+$lang['media_uploadtab'] = 'Качване';
+$lang['media_searchtab'] = 'Търсене';
+$lang['media_file'] = 'Файл';
+$lang['media_viewtab'] = 'Преглед';
+$lang['media_edittab'] = 'Редактиране';
+$lang['media_historytab'] = 'История';
+$lang['media_list_thumbs'] = 'Миниатюри';
+$lang['media_list_rows'] = 'Редове';
+$lang['media_sort_name'] = 'Име';
+$lang['media_sort_date'] = 'Дата';
+$lang['media_namespaces'] = 'Изберете именно пространство';
+$lang['media_files'] = 'Файлове в %s';
+$lang['media_upload'] = 'Качване в %s';
+$lang['media_search'] = 'Търсене в %s';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s в %s';
+$lang['media_edit'] = 'Редактиране на %s';
+$lang['media_history'] = 'История на %s';
+$lang['media_meta_edited'] = 'редактиране на метаданните';
+$lang['media_perm_read'] = 'За съжаление нямате достатъчно права, за да можете да прочетете файла.';
+$lang['media_perm_upload'] = 'За съжаление нямате достатъчно права, за да можете да качите файла.';
+$lang['media_update'] = 'Качване на нова версия';
+$lang['media_restore'] = 'Възстановяване на тази версия';
+$lang['plugin_install_err'] = 'Неправилно инсталирана приставка. Моля, преименувайте директорията \'%s\' на \'%s\'.';
diff --git a/inc/lang/bg/login.txt b/inc/lang/bg/login.txt
index a6f53e95d..e5061c3d3 100644
--- a/inc/lang/bg/login.txt
+++ b/inc/lang/bg/login.txt
@@ -1,3 +1,3 @@
====== Вписване ======
-Не сте се вписали! Въведете данните си удостоверяване отдолу, за да го направите. Бисквитките (cookies) трябва да са включени.
+Не сте се вписали! Въведете данните си за удостоверяване отдолу, за да го направите. Бисквитките (cookies) трябва да са включени.
diff --git a/inc/lang/ca-valencia/lang.php b/inc/lang/ca-valencia/lang.php
index c6a7dc27e..eac9fc8d1 100644
--- a/inc/lang/ca-valencia/lang.php
+++ b/inc/lang/ca-valencia/lang.php
@@ -39,8 +39,6 @@ $lang['btn_backlink'] = 'Vínculs remitents';
$lang['btn_backtomedia'] = 'Tornar a la selecció d\'archius de mijos';
$lang['btn_subscribe'] = 'Subscriure\'s a la pàgina';
$lang['btn_unsubscribe'] = 'Desubscriure\'s de la pàgina';
-$lang['btn_subscribens'] = 'Subscriure\'s a l\'espai de noms';
-$lang['btn_unsubscribens'] = 'Desubscriure\'s de l\'espai de noms';
$lang['btn_profile'] = 'Actualisar perfil';
$lang['btn_reset'] = 'Reiniciar';
$lang['btn_resendpwd'] = 'Enviar contrasenya nova';
@@ -93,7 +91,7 @@ $lang['txt_filename'] = 'Enviar com (opcional)';
$lang['txt_overwrt'] = 'Sobreescriure archius existents';
$lang['lockedby'] = 'Actualment bloquejat per';
$lang['lockexpire'] = 'El bloqueig venç a les';
-$lang['willexpire'] = 'El seu bloqueig per a editar esta pàgina vencerà en un minut.\nPer a evitar conflictes utilise el botó de vista prèvia i reiniciarà el contador.';
+$lang['js']['willexpire'] = 'El seu bloqueig per a editar esta pàgina vencerà en un minut.\nPer a evitar conflictes utilise el botó de vista prèvia i reiniciarà el contador.';
$lang['js']['notsavedyet'] = "Els canvis no guardats es perdran.\n¿Segur que vol continuar?";
$lang['rssfailed'] = 'Ha ocorregut un erro al solicitar este canal: ';
$lang['nothingfound'] = 'No s\'ha trobat res.';
@@ -119,7 +117,6 @@ $lang['js']['nosmblinks'] = 'Els vínculs a recursos compartits de Windows
$lang['js']['linkwiz'] = 'Assistent de vínculs';
$lang['js']['linkto'] = 'Vincular a:';
$lang['js']['del_confirm'] = '¿Realment vol borrar el(s) ítem(s) seleccionat(s)?';
-$lang['js']['mu_btn'] = 'Enviar diversos archius d\'una';
$lang['mediausage'] = 'Utilise la següent sintaxis per a referenciar est archiu:';
$lang['mediaview'] = 'Vore l\'archiu original';
$lang['mediaroot'] = 'base';
diff --git a/inc/lang/ca/lang.php b/inc/lang/ca/lang.php
index 342257d11..7094df5b4 100644
--- a/inc/lang/ca/lang.php
+++ b/inc/lang/ca/lang.php
@@ -39,8 +39,6 @@ $lang['btn_backlink'] = 'Què hi enllaça';
$lang['btn_backtomedia'] = 'Torna a la selecció de fitxers';
$lang['btn_subscribe'] = 'Subscripció a canvis d\'aquesta pàgina';
$lang['btn_unsubscribe'] = 'Cancel·la subscripció a pàgina';
-$lang['btn_subscribens'] = 'Subscripció a canvis d\'aquest espai';
-$lang['btn_unsubscribens'] = 'Cancel·la subscripció a espai';
$lang['btn_profile'] = 'Actualització del perfil';
$lang['btn_reset'] = 'Reinicia';
$lang['btn_resendpwd'] = 'Envia nova contrasenya';
@@ -93,7 +91,7 @@ $lang['txt_filename'] = 'Introduïu el nom wiki (opcional)';
$lang['txt_overwrt'] = 'Sobreescriu el fitxer actual';
$lang['lockedby'] = 'Actualment blocat per:';
$lang['lockexpire'] = 'Venciment del blocatge:';
-$lang['willexpire'] = 'El blocatge per a editar aquesta pàgina venç d\'aquí a un minut.\nUtilitzeu la visualització prèvia per reiniciar el rellotge i evitar conflictes.';
+$lang['js']['willexpire'] = 'El blocatge per a editar aquesta pàgina venç d\'aquí a un minut.\nUtilitzeu la visualització prèvia per reiniciar el rellotge i evitar conflictes.';
$lang['js']['notsavedyet'] = "Heu fet canvis que es perdran si no els deseu.\nVoleu continuar?";
$lang['rssfailed'] = 'S\'ha produït un error en recollir aquesta alimentació: ';
$lang['nothingfound'] = 'No s\'ha trobat res.';
@@ -120,7 +118,6 @@ Si voleu podeu copiar i enganxar l\'enllaç.';
$lang['js']['linkwiz'] = 'Auxiliar d\'enllaços';
$lang['js']['linkto'] = 'Enllaça a:';
$lang['js']['del_confirm'] = 'Suprimiu aquesta entrada?';
-$lang['js']['mu_btn'] = 'Penja múltiples fitxers';
$lang['mediausage'] = 'Utilitzeu la sintaxi següent per referir-vos a aquest enllaç:';
$lang['mediaview'] = 'Mostra el fitxer original';
$lang['mediaroot'] = 'arrel';
diff --git a/inc/lang/cs/lang.php b/inc/lang/cs/lang.php
index e1c45e0c9..292c2c42e 100644
--- a/inc/lang/cs/lang.php
+++ b/inc/lang/cs/lang.php
@@ -95,7 +95,7 @@ $lang['txt_filename'] = 'Wiki jméno (volitelné)';
$lang['txt_overwrt'] = 'Přepsat existující soubor';
$lang['lockedby'] = 'Právě zamknuto:';
$lang['lockexpire'] = 'Zámek vyprší:';
-$lang['willexpire'] = 'Váš zámek pro editaci za chvíli vyprší.\nAbyste předešli konfliktům, stiskněte tlačítko Náhled a zámek se prodlouží.';
+$lang['js']['willexpire'] = 'Váš zámek pro editaci za chvíli vyprší.\nAbyste předešli konfliktům, stiskněte tlačítko Náhled a zámek se prodlouží.';
$lang['js']['notsavedyet'] = 'Jsou tu neuložené změny, které budou ztraceny.
Chcete opravdu pokračovat?';
$lang['js']['searchmedia'] = 'Hledat soubory';
@@ -127,7 +127,6 @@ Přesto tento odkaz můžete zkopírovat a vložit jinde.';
$lang['js']['linkwiz'] = 'Průvodce odkazy';
$lang['js']['linkto'] = 'Odkaz na:';
$lang['js']['del_confirm'] = 'Vymazat tuto položku?';
-$lang['js']['mu_btn'] = 'Načíst více souborů najednou';
$lang['rssfailed'] = 'Nastala chyba při vytváření tohoto RSS: ';
$lang['nothingfound'] = 'Nic nenalezeno.';
$lang['mediaselect'] = 'Výběr dokumentu';
diff --git a/inc/lang/da/lang.php b/inc/lang/da/lang.php
index 80d55d6f5..0b6961921 100644
--- a/inc/lang/da/lang.php
+++ b/inc/lang/da/lang.php
@@ -98,7 +98,7 @@ $lang['txt_filename'] = 'Indtast wikinavn (valgfrit)';
$lang['txt_overwrt'] = 'Overskriv eksisterende fil';
$lang['lockedby'] = 'Midlertidig låst af';
$lang['lockexpire'] = 'Lås udløber kl.';
-$lang['willexpire'] = 'Din lås på dette dokument udløber om et minut.\nTryk på Forhåndsvisning-knappen for at undgå konflikter.';
+$lang['js']['willexpire'] = 'Din lås på dette dokument udløber om et minut.\nTryk på Forhåndsvisning-knappen for at undgå konflikter.';
$lang['js']['notsavedyet'] = 'Ugemte ændringer vil blive mistet
Fortsæt alligevel?';
$lang['js']['searchmedia'] = 'Søg efter filer';
@@ -130,7 +130,6 @@ Du kan stadig kopiere og indsætte linket.';
$lang['js']['linkwiz'] = 'guiden til henvisninger';
$lang['js']['linkto'] = 'Henvise til:';
$lang['js']['del_confirm'] = 'Slet valgte post(er)?';
-$lang['js']['mu_btn'] = 'Overføre flere filer på en gang';
$lang['rssfailed'] = 'Der opstod en fejl ved indhentning af: ';
$lang['nothingfound'] = 'Søgningen gav intet resultat.';
$lang['mediaselect'] = 'Vælg mediefil';
diff --git a/inc/lang/de-informal/lang.php b/inc/lang/de-informal/lang.php
index d39bf8152..ec5e308ce 100644
--- a/inc/lang/de-informal/lang.php
+++ b/inc/lang/de-informal/lang.php
@@ -16,8 +16,9 @@
* @author Alexander Fischer <tbanus@os-forge.net>
* @author Juergen Schwarzer <jschwarzer@freenet.de>
* @author Marcel Metz <marcel_metz@gmx.de>
- * @author Matthias Schulte <post@lupo49.de>
+ * @author Matthias Schulte <mailinglist@lupo49.de>
* @author Christian Wichmann <nospam@zone0.de>
+ * @author Pierre Corell <info@joomla-praxis.de>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -59,6 +60,8 @@ $lang['btn_recover'] = 'Entwurf wiederherstellen';
$lang['btn_draftdel'] = 'Entwurf löschen';
$lang['btn_revert'] = 'Wiederherstellen';
$lang['btn_register'] = 'Registrieren';
+$lang['btn_apply'] = 'Übernehmen';
+$lang['btn_media'] = 'Medien-Manager';
$lang['loggedinas'] = 'Angemeldet als';
$lang['user'] = 'Benutzername';
$lang['pass'] = 'Passwort';
@@ -70,7 +73,7 @@ $lang['fullname'] = 'Voller Name';
$lang['email'] = 'E-Mail';
$lang['profile'] = 'Benutzerprofil';
$lang['badlogin'] = 'Nutzername oder Passwort sind falsch.';
-$lang['minoredit'] = 'kleine Änderung';
+$lang['minoredit'] = 'Kleine Änderung';
$lang['draftdate'] = 'Entwurf gespeichert am';
$lang['nosecedit'] = 'Diese Seite wurde in der Zwischenzeit geändert, da das Sektionsinfo veraltet ist. Die ganze Seite wird stattdessen geladen.';
$lang['regmissing'] = 'Alle Felder müssen ausgefüllt werden';
@@ -103,7 +106,7 @@ $lang['txt_filename'] = 'Hochladen als (optional)';
$lang['txt_overwrt'] = 'Bestehende Datei überschreiben';
$lang['lockedby'] = 'Momentan gesperrt von';
$lang['lockexpire'] = 'Sperre läuft ab am';
-$lang['willexpire'] = 'Die Sperre zur Bearbeitung dieser Seite läuft in einer Minute ab.\nUm Bearbeitungskonflikte zu vermeiden, solltest du sie durch einen Klick auf den Vorschau-Knopf verlängern.';
+$lang['js']['willexpire'] = 'Die Sperre zur Bearbeitung dieser Seite läuft in einer Minute ab.\nUm Bearbeitungskonflikte zu vermeiden, solltest du sie durch einen Klick auf den Vorschau-Knopf verlängern.';
$lang['js']['notsavedyet'] = 'Nicht gespeicherte Änderungen gehen verloren!';
$lang['js']['searchmedia'] = 'Suche nach Dateien';
$lang['js']['keepopen'] = 'Fenster nach Auswahl nicht schließen';
@@ -133,7 +136,17 @@ $lang['js']['nosmblinks'] = 'Das Verlinken von Windows-Freigaben funktionie
$lang['js']['linkwiz'] = 'Link-Assistent';
$lang['js']['linkto'] = 'Link zu:';
$lang['js']['del_confirm'] = 'Die ausgewählten Dateien wirklich löschen?';
-$lang['js']['mu_btn'] = 'Mehrere Dateien gleichzeitig hochladen';
+$lang['js']['restore_confirm'] = 'Wirkliich diese Version wieder herstellen?';
+$lang['js']['media_diff'] = 'Unterschiede anzeigen:';
+$lang['js']['media_diff_both'] = 'Seite für Seite';
+$lang['js']['media_diff_opacity'] = 'Überblenden';
+$lang['js']['media_diff_portions'] = 'Übergang';
+$lang['js']['media_select'] = 'Dateien auswählen…';
+$lang['js']['media_upload_btn'] = 'Hochladen';
+$lang['js']['media_done_btn'] = 'Fertig';
+$lang['js']['media_drop'] = 'Dateien hier draufziehen um sie hochzuladen';
+$lang['js']['media_cancel'] = 'Entfernen';
+$lang['js']['media_overwrt'] = 'Existierende Dateien überschreiben';
$lang['rssfailed'] = 'Es ist ein Fehler beim Laden des Feeds aufgetreten: ';
$lang['nothingfound'] = 'Nichts gefunden.';
$lang['mediaselect'] = 'Dateiauswahl';
@@ -188,6 +201,10 @@ $lang['mail_changed'] = 'Seite geändert:';
$lang['mail_subscribe_list'] = 'Seite hat sich im Namespace geändert:';
$lang['mail_new_user'] = 'Neuer Benutzer:';
$lang['mail_upload'] = 'Datei hochgeladen:';
+$lang['changes_type'] = 'Änderungen anzeigen von';
+$lang['pages_changes'] = 'Seiten';
+$lang['media_changes'] = 'Mediendateien';
+$lang['both_changes'] = 'Beides, Seiten- und Mediendateien';
$lang['qb_bold'] = 'Fetter Text';
$lang['qb_italic'] = 'Kursiver Text';
$lang['qb_underl'] = 'Unterstrichener Text';
@@ -228,6 +245,9 @@ $lang['img_copyr'] = 'Copyright';
$lang['img_format'] = 'Format';
$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'] = 'Die Seite %s wurde zur Abonnementenliste von %s hinzugefügt';
$lang['subscr_subscribe_error'] = 'Fehler beim Hinzufügen von %s zur Abonnementenliste von %s';
$lang['subscr_subscribe_noaddress'] = 'In deinem Account ist keine E-Mail-Adresse hinterlegt. Dadurch kann die Seite nicht abonniert werden';
@@ -292,3 +312,27 @@ $lang['hours'] = 'vor %d Stunden';
$lang['minutes'] = 'vor %d Minuten';
$lang['seconds'] = 'vor %d Sekunden';
$lang['wordblock'] = 'Deine Bearbeitung wurde nicht gespeichert, da sie gesperrten Text enthielt (Spam).';
+$lang['media_uploadtab'] = 'Hochladen';
+$lang['media_searchtab'] = 'Suchen';
+$lang['media_file'] = 'Datei';
+$lang['media_viewtab'] = 'Anzeigen';
+$lang['media_edittab'] = 'Bearbeiten';
+$lang['media_historytab'] = 'Verlauf';
+$lang['media_list_thumbs'] = 'Medien anzeigen als Miniaturansicht';
+$lang['media_list_rows'] = 'Medien anzeigen als Listenansicht';
+$lang['media_sort_name'] = 'Sortieren nach Name';
+$lang['media_sort_date'] = 'Sortieren nach Datum';
+$lang['media_namespaces'] = 'Namensraum wählen';
+$lang['media_files'] = 'Medien im Namensraum <strong>%s</strong>.';
+$lang['media_upload'] = 'In den <strong>%s</strong> Namensraum hochladen.';
+$lang['media_search'] = 'Im Namensraum <strong>%s</strong> suchen.';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s in %s';
+$lang['media_edit'] = '%s bearbeiten';
+$lang['media_history'] = 'Versionen von %s';
+$lang['media_meta_edited'] = 'Meta-Informationen bearbeitet';
+$lang['media_perm_read'] = 'Du besitzt nicht die notwendigen Berechtigungen um die Datei anzuzeigen.';
+$lang['media_perm_upload'] = 'Du besitzt nicht die notwendigen Berechtigungen um Dateien hochzuladen.';
+$lang['media_update'] = 'Neue Version hochladen';
+$lang['media_restore'] = 'Diese Version wiederherstellen';
+$lang['plugin_install_err'] = 'Plugin nicht korrekt installiert. Plugin-Verzeichnis von \'%s\' nach \'%s\' umbenennen.';
diff --git a/inc/lang/de-informal/uploadmail.txt b/inc/lang/de-informal/uploadmail.txt
index 7239cc10c..69f11400f 100644
--- a/inc/lang/de-informal/uploadmail.txt
+++ b/inc/lang/de-informal/uploadmail.txt
@@ -1,13 +1,14 @@
Eine Datei wurde in deinem Wiki hochgeladen. Hier sind die Details:
-Datei : @MEDIA@
-Datum : @DATE@
-Browser : @BROWSER@
-IP-Adresse : @IPADDRESS@
-Hostname : @HOSTNAME@
-Größe : @SIZE@
-MIME-Typ : @MIME@
-Benutzer : @USER@
+Datei : @MEDIA@
+Alte Version: @OLD@
+Datum : @DATE@
+Browser : @BROWSER@
+IP-Adresse : @IPADDRESS@
+Hostname : @HOSTNAME@
+Größe : @SIZE@
+MIME-Typ : @MIME@
+Benutzer : @USER@
--
Diese Mail wurde vom DokuWiki auf
diff --git a/inc/lang/de/lang.php b/inc/lang/de/lang.php
index f9f250994..eef2f6632 100644
--- a/inc/lang/de/lang.php
+++ b/inc/lang/de/lang.php
@@ -18,6 +18,9 @@
* @author Robert Bogenschneider <robog@gmx.de>
* @author Niels Lange <niels@boldencursief.nl>
* @author Christian Wichmann <nospam@zone0.de>
+ * @author Matthias Schulte <mailinglist@lupo49.de>
+ * @author Paul Lachewsky <kaeptn.haddock@gmail.com>
+ * @author Pierre Corell <info@joomla-praxis.de>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -59,6 +62,8 @@ $lang['btn_recover'] = 'Entwurf wiederherstellen';
$lang['btn_draftdel'] = 'Entwurf löschen';
$lang['btn_revert'] = 'Wiederherstellen';
$lang['btn_register'] = 'Registrieren';
+$lang['btn_apply'] = 'Übernehmen';
+$lang['btn_media'] = 'Medien-Manager';
$lang['loggedinas'] = 'Angemeldet als';
$lang['user'] = 'Benutzername';
$lang['pass'] = 'Passwort';
@@ -103,7 +108,7 @@ $lang['txt_filename'] = 'Hochladen als (optional)';
$lang['txt_overwrt'] = 'Bestehende Datei überschreiben';
$lang['lockedby'] = 'Momentan gesperrt von';
$lang['lockexpire'] = 'Sperre läuft ab am';
-$lang['willexpire'] = 'Die Sperre zur Bearbeitung dieser Seite läuft in einer Minute ab.\nUm Bearbeitungskonflikte zu vermeiden, sollten Sie sie durch einen Klick auf den Vorschau-Knopf verlängern.';
+$lang['js']['willexpire'] = 'Die Sperre zur Bearbeitung dieser Seite läuft in einer Minute ab.\nUm Bearbeitungskonflikte zu vermeiden, sollten Sie sie durch einen Klick auf den Vorschau-Knopf verlängern.';
$lang['js']['notsavedyet'] = 'Nicht gespeicherte Änderungen gehen verloren!';
$lang['js']['searchmedia'] = 'Suche Dateien';
$lang['js']['keepopen'] = 'Fenster nach Auswahl nicht schließen';
@@ -129,12 +134,21 @@ $lang['js']['medialeft'] = 'Das Bild links anordnen.';
$lang['js']['mediaright'] = 'Das Bild rechts anordnen.';
$lang['js']['mediacenter'] = 'Das Bild in der Mitte anordnen.';
$lang['js']['medianoalign'] = 'Keine Anordnung benutzen.';
-$lang['js']['nosmblinks'] = 'Das Verlinken von Windows-Freigaben funktioniert nur im Microsoft Internet Explorer.
-Der Link kann jedoch durch Kopieren und Einfügen verwendet werden.';
+$lang['js']['nosmblinks'] = 'Das Verlinken von Windows-Freigaben funktioniert nur im Microsoft Internet Explorer.\nDer Link kann jedoch durch Kopieren und Einfügen verwendet werden.';
$lang['js']['linkwiz'] = 'Link-Assistent';
$lang['js']['linkto'] = 'Link nach:';
$lang['js']['del_confirm'] = 'Eintrag wirklich löschen?';
-$lang['js']['mu_btn'] = 'Mehrere Dateien gleichzeitig hochladen';
+$lang['js']['restore_confirm'] = 'Really restore this version?';
+$lang['js']['media_diff'] = 'Unterschiede anzeigen:';
+$lang['js']['media_diff_both'] = 'Side by Side';
+$lang['js']['media_diff_opacity'] = 'Überblenden';
+$lang['js']['media_diff_portions'] = 'Übergang';
+$lang['js']['media_select'] = 'Dateien auswählen…';
+$lang['js']['media_upload_btn'] = 'Hochladen';
+$lang['js']['media_done_btn'] = 'Fertig';
+$lang['js']['media_drop'] = 'Dateien hier draufziehen um sie hochzuladen';
+$lang['js']['media_cancel'] = 'Entfernen';
+$lang['js']['media_overwrt'] = 'Existierende Dateien überschreiben';
$lang['rssfailed'] = 'Es ist ein Fehler beim Laden des Feeds aufgetreten: ';
$lang['nothingfound'] = 'Nichts gefunden.';
$lang['mediaselect'] = 'Dateiauswahl';
@@ -189,6 +203,10 @@ $lang['mail_changed'] = 'Seite geändert:';
$lang['mail_subscribe_list'] = 'Geänderte Seiten im Namensraum:';
$lang['mail_new_user'] = 'Neuer Benutzer:';
$lang['mail_upload'] = 'Datei hochgeladen:';
+$lang['changes_type'] = 'Änderungen anzeigen von';
+$lang['pages_changes'] = 'Seiten';
+$lang['media_changes'] = 'Mediendateien';
+$lang['both_changes'] = 'Beides, Seiten- und Mediendateien';
$lang['qb_bold'] = 'Fetter Text';
$lang['qb_italic'] = 'Kursiver Text';
$lang['qb_underl'] = 'Unterstrichener Text';
@@ -229,6 +247,9 @@ $lang['img_copyr'] = 'Copyright';
$lang['img_format'] = 'Format';
$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';
@@ -293,3 +314,27 @@ $lang['hours'] = 'vor %d Stunden';
$lang['minutes'] = 'vor %d Minuten';
$lang['seconds'] = 'vor %d Sekunden';
$lang['wordblock'] = 'Ihre Bearbeitung wurde nicht gespeichert, da sie gesperrten Text enthielt (Spam).';
+$lang['media_uploadtab'] = 'Hochladen';
+$lang['media_searchtab'] = 'Suchen';
+$lang['media_file'] = 'Datei';
+$lang['media_viewtab'] = 'Anzeigen';
+$lang['media_edittab'] = 'Bearbeiten';
+$lang['media_historytab'] = 'Verlauf';
+$lang['media_list_thumbs'] = 'Vorschaubilder';
+$lang['media_list_rows'] = 'Reihen';
+$lang['media_sort_name'] = 'nach Name';
+$lang['media_sort_date'] = 'nach Datum';
+$lang['media_namespaces'] = 'Namensraum wählen';
+$lang['media_files'] = 'Dateien in %s';
+$lang['media_upload'] = 'In den <strong>%s</strong> Namespace hochladen.';
+$lang['media_search'] = 'Im Namespace <strong>%s</strong> suchen.';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s in %s';
+$lang['media_edit'] = 'Bearbeiten';
+$lang['media_history'] = 'Versionsverlauf der Datei.';
+$lang['media_meta_edited'] = 'Meta-Informationen bearbeitet';
+$lang['media_perm_read'] = 'Sie besitzen nicht die notwendigen Berechtigungen um die Datei anzuzeigen.';
+$lang['media_perm_upload'] = 'Sie besitzen nicht die notwendigen Berechtigungen um Dateien hochzuladen.';
+$lang['media_update'] = 'Neue Version hochladen';
+$lang['media_restore'] = 'Diese Version wiederherstellen';
+$lang['plugin_install_err'] = 'Plugin nicht korrekt installiert. Plugin-Verzeichnis von \'%s\' nach \'%s\' umbenennen.';
diff --git a/inc/lang/de/uploadmail.txt b/inc/lang/de/uploadmail.txt
index 757729804..977e7561c 100644
--- a/inc/lang/de/uploadmail.txt
+++ b/inc/lang/de/uploadmail.txt
@@ -1,13 +1,14 @@
Eine Datei wurde in Ihrem Wiki hochgeladen. Hier sind die Details:
-Datei : @MEDIA@
-Datum : @DATE@
-Browser : @BROWSER@
-IP-Adresse : @IPADDRESS@
-Hostname : @HOSTNAME@
-Größe : @SIZE@
-MIME-Typ : @MIME@
-Benutzer : @USER@
+Datei : @MEDIA@
+Alte Version: @OLD@
+Datum : @DATE@
+Browser : @BROWSER@
+IP-Adresse : @IPADDRESS@
+Hostname : @HOSTNAME@
+Größe : @SIZE@
+MIME-Typ : @MIME@
+Benutzer : @USER@
--
Diese Mail kommt vom DokuWiki auf
diff --git a/inc/lang/el/lang.php b/inc/lang/el/lang.php
index 11c64285e..4c334c1de 100644
--- a/inc/lang/el/lang.php
+++ b/inc/lang/el/lang.php
@@ -7,6 +7,7 @@
* @author Αθανάσιος Νταής <homunculus@wana.gr>
* @author Konstantinos Koryllos <koryllos@gmail.com>
* @author George Petsagourakis <petsagouris@gmail.com>
+ * @author Petros Vidalis <pvidalis@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -48,6 +49,8 @@ $lang['btn_recover'] = 'Επαναφορά αυτόματα αποθη
$lang['btn_draftdel'] = 'Διαγραφή αυτόματα αποθηκευμένης σελίδας';
$lang['btn_revert'] = 'Αποκατάσταση';
$lang['btn_register'] = 'Εγγραφή';
+$lang['btn_apply'] = 'Εφαρμογή';
+$lang['btn_media'] = 'Διαχειριστής πολυμέσων';
$lang['loggedinas'] = 'Συνδεδεμένος ως';
$lang['user'] = 'Όνομα χρήστη';
$lang['pass'] = 'Κωδικός';
@@ -92,7 +95,7 @@ $lang['txt_filename'] = 'Επιλέξτε νέο όνομα αρχεί
$lang['txt_overwrt'] = 'Αντικατάσταση υπάρχοντος αρχείου';
$lang['lockedby'] = 'Προσωρινά κλειδωμένο από';
$lang['lockexpire'] = 'Το κλείδωμα λήγει στις';
-$lang['willexpire'] = 'Το κλείδωμά σας για την επεξεργασία αυτής της σελίδας θα λήξει σε ένα λεπτό.\n Για να το ανανεώσετε χρησιμοποιήστε την Προεπισκόπηση.';
+$lang['js']['willexpire'] = 'Το κλείδωμά σας για την επεξεργασία αυτής της σελίδας θα λήξει σε ένα λεπτό.\n Για να το ανανεώσετε χρησιμοποιήστε την Προεπισκόπηση.';
$lang['js']['notsavedyet'] = 'Οι μη αποθηκευμένες αλλαγές θα χαθούν.
Θέλετε να συνεχίσετε;';
$lang['js']['searchmedia'] = 'Αναζήτηση για αρχεία';
@@ -124,7 +127,17 @@ $lang['js']['nosmblinks'] = 'Οι σύνδεσμοι προς Windows share
$lang['js']['linkwiz'] = 'Αυτόματος Οδηγός Συνδέσμων';
$lang['js']['linkto'] = 'Σύνδεση σε:';
$lang['js']['del_confirm'] = 'Να διαγραφεί;';
-$lang['js']['mu_btn'] = 'Ταυτόχρονη φόρτωση πολλαπλών φακέλων';
+$lang['js']['restore_confirm'] = 'Θέλετε την επαναφορά σε αυτή την έκδοση;';
+$lang['js']['media_diff'] = 'Εμφάνιση διαφορών:';
+$lang['js']['media_diff_both'] = 'Δίπλα δίπλα';
+$lang['js']['media_diff_opacity'] = 'Επικάλυψη';
+$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_cancel'] = 'αφαίρεση';
+$lang['js']['media_overwrt'] = 'Αντικατάσταση υπάρχοντων αρχείων';
$lang['rssfailed'] = 'Παρουσιάστηκε κάποιο σφάλμα κατά την ανάγνωση αυτού του feed: ';
$lang['nothingfound'] = 'Δεν βρέθηκαν σχετικά αποτελέσματα.';
$lang['mediaselect'] = 'Επιλογή Αρχείων';
@@ -179,6 +192,10 @@ $lang['mail_changed'] = 'σελίδα τροποποιήθηκε:';
$lang['mail_subscribe_list'] = 'σελίδες που άλλαξαν στον φάκελο:';
$lang['mail_new_user'] = 'νέος χρήστης:';
$lang['mail_upload'] = 'αρχείο φορτώθηκε:';
+$lang['changes_type'] = 'Εμφάνιση αλλαγών του';
+$lang['pages_changes'] = 'Σελίδες';
+$lang['media_changes'] = 'Αρχεία πολυμέσων';
+$lang['both_changes'] = 'Σελίδες και αρχεία πολυμέσων';
$lang['qb_bold'] = 'Έντονο Κείμενο';
$lang['qb_italic'] = 'Πλάγιο Κείμενο';
$lang['qb_underl'] = 'Υπογραμμισμένο Κείμενο';
@@ -219,6 +236,9 @@ $lang['img_copyr'] = 'Copyright';
$lang['img_format'] = 'Format';
$lang['img_camera'] = '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'] = 'Δεν υπάρχει διεύθυνση ταχυδρομείου συσχετισμένη με το όνομα χρήστη σας. Κατά συνέπεια δεν μπορείτε να προστεθείτε στην λίστα ειδοποιήσεων';
@@ -283,4 +303,24 @@ $lang['days'] = 'πριν %d ημέρες';
$lang['hours'] = 'πριν %d ώρες';
$lang['minutes'] = 'πριν %d λεπτά';
$lang['seconds'] = 'πριν %d δευτερόλεπτα';
-$lang['wordblock'] = 'Η αλλαγή σας δεν αποθηκεύτηκε γιατί περιείχε spam.'; \ No newline at end of file
+$lang['wordblock'] = 'Η αλλαγή σας δεν αποθηκεύτηκε γιατί περιείχε spam.';
+$lang['media_uploadtab'] = 'Φόρτωση';
+$lang['media_searchtab'] = 'Αναζήτηση';
+$lang['media_viewtab'] = 'Εμφάνιση';
+$lang['media_edittab'] = 'Επεξεργασία';
+$lang['media_historytab'] = 'Ιστορικό';
+$lang['media_thumbsview'] = 'Προεπισκόπιση';
+$lang['media_listview'] = 'Λίστα';
+$lang['media_sort'] = 'Ταξινόμιση';
+$lang['media_sort_name'] = 'ανά όνομα';
+$lang['media_sort_date'] = 'ανά ημερομηνία';
+$lang['media_upload'] = 'Φόρτωση στο <strong>%s</strong> φάκελο.';
+$lang['media_search'] = 'Αναζήτηση στο <strong>%s</strong> φάκελο.';
+$lang['media_edit'] = 'Επεξεργασία';
+$lang['media_history'] = 'Αυτές είναι οι παλαιότερες αναθεωρήσεις του αρχείου.';
+$lang['media_meta_edited'] = 'τα μεταδεδομένα επεξεργάστηκαν';
+$lang['media_perm_read'] = 'Συγνώμη, δεν έχετε επαρκή διακαιώματα για να διαβάσετε αυτά τα αρχεία.';
+$lang['media_perm_upload'] = 'Συγνώμη, δεν έχετε επαρκή διακαιώματα για να φορτώσετε αυτά τα αρχεία.';
+$lang['media_update'] = 'Φόρτωση νέας έκδοσης';
+$lang['media_restore'] = 'Επαναφορά αυτή της έκδοσης';
+$lang['plugin_install_err'] = 'Η επέκταση δεν εγκαταστήθηκε σωστά. Μετονομασία φακέλου επεκτάσεων από \'%s\' σε \'%s\'.';
diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php
index 51fd8f645..89a7c4d40 100644
--- a/inc/lang/en/lang.php
+++ b/inc/lang/en/lang.php
@@ -6,317 +6,355 @@
* @author Andreas Gohr <andi@splitbrain.org>
* @author Anika Henke <anika@selfthinker.org>
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Matthias Schulte <mailinglist@lupo49.de>
*/
-$lang['encoding'] = 'utf-8';
-$lang['direction'] = 'ltr';
-$lang['doublequoteopening'] = '“';//&ldquo;
-$lang['doublequoteclosing'] = '”';//&rdquo;
-$lang['singlequoteopening'] = '‘';//&lsquo;
-$lang['singlequoteclosing'] = '’';//&rsquo;
-$lang['apostrophe'] = '’';//&rsquo;
-
-$lang['btn_edit'] = 'Edit this page';
-$lang['btn_source'] = 'Show pagesource';
-$lang['btn_show'] = 'Show page';
-$lang['btn_create'] = 'Create this page';
-$lang['btn_search'] = 'Search';
-$lang['btn_save'] = 'Save';
-$lang['btn_preview']= 'Preview';
-$lang['btn_top'] = 'Back to top';
-$lang['btn_newer'] = '<< more recent';
-$lang['btn_older'] = 'less recent >>';
-$lang['btn_revs'] = 'Old revisions';
-$lang['btn_recent'] = 'Recent changes';
-$lang['btn_upload'] = 'Upload';
-$lang['btn_cancel'] = 'Cancel';
-$lang['btn_index'] = 'Sitemap';
-$lang['btn_secedit']= 'Edit';
-$lang['btn_login'] = 'Login';
-$lang['btn_logout'] = 'Logout';
-$lang['btn_admin'] = 'Admin';
-$lang['btn_update'] = 'Update';
-$lang['btn_delete'] = 'Delete';
-$lang['btn_back'] = 'Back';
-$lang['btn_backlink'] = "Backlinks";
-$lang['btn_backtomedia'] = 'Back to Mediafile Selection';
-$lang['btn_subscribe'] = 'Manage Subscriptions';
-$lang['btn_profile'] = 'Update Profile';
-$lang['btn_reset'] = 'Reset';
-$lang['btn_resendpwd'] = 'Send new password';
-$lang['btn_draft'] = 'Edit draft';
-$lang['btn_recover'] = 'Recover draft';
-$lang['btn_draftdel'] = 'Delete draft';
-$lang['btn_revert'] = 'Restore';
-$lang['btn_register'] = 'Register';
-
-$lang['loggedinas'] = 'Logged in as';
-$lang['user'] = 'Username';
-$lang['pass'] = 'Password';
-$lang['newpass'] = 'New password';
-$lang['oldpass'] = 'Confirm current password';
-$lang['passchk'] = 'once again';
-$lang['remember'] = 'Remember me';
-$lang['fullname'] = 'Real name';
-$lang['email'] = 'E-Mail';
-$lang['profile'] = 'User Profile';
-$lang['badlogin'] = 'Sorry, username or password was wrong.';
-$lang['minoredit'] = 'Minor Changes';
-$lang['draftdate'] = 'Draft autosaved on'; // full dformat date will be added
-$lang['nosecedit'] = 'The page was changed in the meantime, section info was out of date loaded full page instead.';
-
-$lang['regmissing'] = 'Sorry, you must fill in all fields.';
-$lang['reguexists'] = 'Sorry, a user with this login already exists.';
-$lang['regsuccess'] = 'The user has been created and the password was sent by email.';
-$lang['regsuccess2']= 'The user has been created.';
-$lang['regmailfail']= 'Looks like there was an error on sending the password mail. Please contact the admin!';
-$lang['regbadmail'] = 'The given email address looks invalid - if you think this is an error, contact the admin';
-$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['profna'] = 'This wiki does not support profile modification';
-$lang['profnochange'] = 'No changes, nothing to do.';
-$lang['profnoempty'] = 'An empty name or email address is not allowed.';
-$lang['profchanged'] = 'User profile successfully updated.';
-
-$lang['pwdforget'] = 'Forgotten your password? Get a new one';
-$lang['resendna'] = 'This wiki does not support password resending.';
-$lang['resendpwd'] = 'Send new password for';
-$lang['resendpwdmissing'] = 'Sorry, you must fill in all fields.';
-$lang['resendpwdnouser'] = 'Sorry, we can\'t find this user in our database.';
-$lang['resendpwdbadauth'] = 'Sorry, this auth code is not valid. Make sure you used the complete confirmation link.';
-$lang['resendpwdconfirm'] = 'A confirmation link has been sent by email.';
-$lang['resendpwdsuccess'] = 'Your new password has been sent by email.';
-
-$lang['license'] = 'Except where otherwise noted, content on this wiki is licensed under the following license:';
-$lang['licenseok'] = 'Note: By editing this page you agree to license your content under the following license:';
-
-$lang['searchmedia'] = 'Search file name:';
-$lang['searchmedia_in'] = 'Search in %s';
-$lang['txt_upload'] = 'Select file to upload';
-$lang['txt_filename'] = 'Upload as (optional)';
-$lang['txt_overwrt'] = 'Overwrite existing file';
-$lang['lockedby'] = 'Currently locked by';
-$lang['lockexpire'] = 'Lock expires at';
-$lang['willexpire'] = 'Your lock for editing this page is about to expire in a minute.\nTo avoid conflicts use the preview button to reset the locktimer.';
-
-$lang['js']['notsavedyet'] = "Unsaved changes will be lost.";
-$lang['rssfailed'] = 'An error occurred while fetching this feed: ';
-$lang['nothingfound']= 'Nothing was found.';
-
-$lang['mediaselect'] = 'Media Files';
-$lang['fileupload'] = 'Media File Upload';
-$lang['uploadsucc'] = 'Upload successful';
-$lang['uploadfail'] = 'Upload failed. Maybe wrong permissions?';
-$lang['uploadwrong'] = 'Upload denied. This file extension is forbidden!';
-$lang['uploadexist'] = 'File already exists. Nothing done.';
-$lang['uploadbadcontent'] = 'The uploaded content did not match the %s file extension.';
-$lang['uploadspam'] = 'The upload was blocked by the spam blacklist.';
-$lang['uploadxss'] = 'The upload was blocked for possibly malicious content.';
-$lang['uploadsize'] = 'The uploaded file was too big. (max. %s)';
-$lang['deletesucc'] = 'The file "%s" has been deleted.';
-$lang['deletefail'] = '"%s" couldn\'t be deleted - check permissions.';
-$lang['mediainuse'] = 'The file "%s" hasn\'t been deleted - it is still in use.';
-$lang['namespaces'] = 'Namespaces';
-$lang['mediafiles'] = 'Available files in';
-$lang['accessdenied'] = 'You are not allowed to view this page.';
-
-$lang['js']['searchmedia'] = 'Search for files';
-$lang['js']['keepopen'] = 'Keep window open on selection';
-$lang['js']['hidedetails'] = 'Hide Details';
-$lang['mediausage'] = 'Use the following syntax to reference this file:';
-$lang['mediaview'] = 'View original file';
-$lang['mediaroot'] = 'root';
-$lang['mediaupload'] = 'Upload a file to the current namespace here. To create subnamespaces, prepend them to your "Upload as" filename separated by colons.';
-$lang['mediaextchange'] = 'Filextension changed from .%s to .%s!';
-
-$lang['js']['mediatitle'] = 'Link settings';
-$lang['js']['mediadisplay'] = 'Link type';
-$lang['js']['mediaalign'] = 'Alignment';
-$lang['js']['mediasize'] = 'Image size';
-$lang['js']['mediatarget'] = 'Link target';
-$lang['js']['mediaclose'] = 'Close';
-$lang['js']['mediainsert'] = 'Insert';
-$lang['js']['mediadisplayimg'] = 'Show the image.';
-$lang['js']['mediadisplaylnk'] = 'Show only the link.';
-$lang['js']['mediasmall'] = 'Small version';
-$lang['js']['mediamedium'] = 'Medium version';
-$lang['js']['medialarge'] = 'Large version';
-$lang['js']['mediaoriginal'] = 'Original version';
-$lang['js']['medialnk'] = 'Link to detail page';
-$lang['js']['mediadirect'] = 'Direct link to original';
-$lang['js']['medianolnk'] = 'No link';
-$lang['js']['medianolink'] = 'Do not link the image';
-$lang['js']['medialeft'] = 'Align the image on the left.';
-$lang['js']['mediaright'] = 'Align the image on the right.';
-$lang['js']['mediacenter'] = 'Align the image in the middle.';
-$lang['js']['medianoalign'] = 'Use no align.';
-
-$lang['reference'] = 'References for';
-$lang['ref_inuse'] = 'The file can\'t be deleted, because it\'s still used by the following pages:';
-$lang['ref_hidden'] = 'Some references are on pages you don\'t have permission to read';
-
-$lang['hits'] = 'Hits';
-$lang['quickhits'] = 'Matching pagenames';
-$lang['toc'] = 'Table of Contents';
-$lang['current'] = 'current';
-$lang['yours'] = 'Your Version';
-$lang['diff'] = 'Show differences to current revisions';
-$lang['diff2'] = 'Show differences between selected revisions';
-$lang['difflink'] = 'Link to this comparison view';
-$lang['diff_type'] = 'View differences:';
-$lang['diff_inline']= 'Inline';
-$lang['diff_side'] = 'Side by Side';
-$lang['line'] = 'Line';
-$lang['breadcrumb'] = 'Trace';
-$lang['youarehere'] = 'You are here';
-$lang['lastmod'] = 'Last modified';
-$lang['by'] = 'by';
-$lang['deleted'] = 'removed';
-$lang['created'] = 'created';
-$lang['restored'] = 'old revision restored';
-$lang['external_edit'] = 'external edit';
-$lang['summary'] = 'Edit summary';
-$lang['noflash'] = 'The <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> is needed to display this content.';
-$lang['download'] = 'Download Snippet';
-
-$lang['mail_newpage'] = 'page added:';
-$lang['mail_changed'] = 'page changed:';
-$lang['mail_subscribe_list'] = 'pages changed in namespace:';
-$lang['mail_new_user'] = 'new user:';
-$lang['mail_upload'] = 'file uploaded:';
-
-$lang['js']['nosmblinks'] = "Linking to Windows shares only works in Microsoft Internet Explorer.\nYou still can copy and paste the link.";
-
-$lang['qb_bold'] = 'Bold Text';
-$lang['qb_italic'] = 'Italic Text';
-$lang['qb_underl'] = 'Underlined Text';
-$lang['qb_code'] = 'Code Text';
-$lang['qb_strike'] = 'Strike-through Text';
-$lang['qb_h1'] = 'Level 1 Headline';
-$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_h'] = 'Headline';
-$lang['qb_hs'] = 'Select Headline';
-$lang['qb_hplus'] = 'Higher Headline';
-$lang['qb_hminus'] = 'Lower Headline';
-$lang['qb_hequal'] = 'Same Level Headline';
-
-$lang['qb_link'] = 'Internal Link';
-$lang['qb_extlink'] = 'External Link';
-$lang['qb_hr'] = 'Horizontal Rule';
-$lang['qb_ol'] = 'Ordered List Item';
-$lang['qb_ul'] = 'Unordered List Item';
-$lang['qb_media'] = 'Add Images and other files';
-$lang['qb_sig'] = 'Insert Signature';
-$lang['qb_smileys'] = 'Smileys';
-$lang['qb_chars'] = 'Special Chars';
-
-$lang['upperns'] = 'jump to parent namespace';
-$lang['js']['linkwiz'] = 'Link Wizard';
-$lang['js']['linkto'] = 'Link to:';
-
-$lang['js']['del_confirm']= 'Really delete selected item(s)?';
-$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';
-$lang['img_fname'] = 'Filename';
-$lang['img_fsize'] = 'Size';
-$lang['img_artist'] = 'Photographer';
-$lang['img_copyr'] = 'Copyright';
-$lang['img_format'] = 'Format';
-$lang['img_camera'] = 'Camera';
-$lang['img_keywords']= 'Keywords';
-
-$lang['subscr_subscribe_success'] = 'Added %s to subscription list for %s';
-$lang['subscr_subscribe_error'] = 'Error adding %s to subscription list for %s';
-$lang['subscr_subscribe_noaddress']= 'There is no address associated with your login, you cannot be added to the subscription list';
-$lang['subscr_unsubscribe_success']= 'Removed %s from subscription list for %s';
-$lang['subscr_unsubscribe_error'] = 'Error removing %s from subscription list for %s';
-$lang['subscr_already_subscribed'] = '%s is already subscribed to %s';
-$lang['subscr_not_subscribed'] = '%s is not subscribed to %s';
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“'; //&ldquo;
+$lang['doublequoteclosing'] = '”'; //&rdquo;
+$lang['singlequoteopening'] = '‘'; //&lsquo;
+$lang['singlequoteclosing'] = '’'; //&rsquo;
+$lang['apostrophe'] = '’'; //&rsquo;
+
+$lang['btn_edit'] = 'Edit this page';
+$lang['btn_source'] = 'Show pagesource';
+$lang['btn_show'] = 'Show page';
+$lang['btn_create'] = 'Create this page';
+$lang['btn_search'] = 'Search';
+$lang['btn_save'] = 'Save';
+$lang['btn_preview'] = 'Preview';
+$lang['btn_top'] = 'Back to top';
+$lang['btn_newer'] = '<< more recent';
+$lang['btn_older'] = 'less recent >>';
+$lang['btn_revs'] = 'Old revisions';
+$lang['btn_recent'] = 'Recent changes';
+$lang['btn_upload'] = 'Upload';
+$lang['btn_cancel'] = 'Cancel';
+$lang['btn_index'] = 'Sitemap';
+$lang['btn_secedit'] = 'Edit';
+$lang['btn_login'] = 'Login';
+$lang['btn_logout'] = 'Logout';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Update';
+$lang['btn_delete'] = 'Delete';
+$lang['btn_back'] = 'Back';
+$lang['btn_backlink'] = "Backlinks";
+$lang['btn_backtomedia'] = 'Back to Mediafile Selection';
+$lang['btn_subscribe'] = 'Manage Subscriptions';
+$lang['btn_profile'] = 'Update Profile';
+$lang['btn_reset'] = 'Reset';
+$lang['btn_resendpwd'] = 'Send new password';
+$lang['btn_draft'] = 'Edit draft';
+$lang['btn_recover'] = 'Recover draft';
+$lang['btn_draftdel'] = 'Delete draft';
+$lang['btn_revert'] = 'Restore';
+$lang['btn_register'] = 'Register';
+$lang['btn_apply'] = 'Apply';
+$lang['btn_media'] = 'Media Manager';
+
+$lang['loggedinas'] = 'Logged in as';
+$lang['user'] = 'Username';
+$lang['pass'] = 'Password';
+$lang['newpass'] = 'New password';
+$lang['oldpass'] = 'Confirm current password';
+$lang['passchk'] = 'once again';
+$lang['remember'] = 'Remember me';
+$lang['fullname'] = 'Real name';
+$lang['email'] = 'E-Mail';
+$lang['profile'] = 'User Profile';
+$lang['badlogin'] = 'Sorry, username or password was wrong.';
+$lang['minoredit'] = 'Minor Changes';
+$lang['draftdate'] = 'Draft autosaved on'; // full dformat date will be added
+$lang['nosecedit'] = 'The page was changed in the meantime, section info was out of date loaded full page instead.';
+
+$lang['regmissing'] = 'Sorry, you must fill in all fields.';
+$lang['reguexists'] = 'Sorry, a user with this login already exists.';
+$lang['regsuccess'] = 'The user has been created and the password was sent by email.';
+$lang['regsuccess2'] = 'The user has been created.';
+$lang['regmailfail'] = 'Looks like there was an error on sending the password mail. Please contact the admin!';
+$lang['regbadmail'] = 'The given email address looks invalid - if you think this is an error, contact the admin';
+$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['profna'] = 'This wiki does not support profile modification';
+$lang['profnochange'] = 'No changes, nothing to do.';
+$lang['profnoempty'] = 'An empty name or email address is not allowed.';
+$lang['profchanged'] = 'User profile successfully updated.';
+
+$lang['pwdforget'] = 'Forgotten your password? Get a new one';
+$lang['resendna'] = 'This wiki does not support password resending.';
+$lang['resendpwd'] = 'Send new password for';
+$lang['resendpwdmissing'] = 'Sorry, you must fill in all fields.';
+$lang['resendpwdnouser'] = 'Sorry, we can\'t find this user in our database.';
+$lang['resendpwdbadauth'] = 'Sorry, this auth code is not valid. Make sure you used the complete confirmation link.';
+$lang['resendpwdconfirm'] = 'A confirmation link has been sent by email.';
+$lang['resendpwdsuccess'] = 'Your new password has been sent by email.';
+
+$lang['license'] = 'Except where otherwise noted, content on this wiki is licensed under the following license:';
+$lang['licenseok'] = 'Note: By editing this page you agree to license your content under the following license:';
+
+$lang['searchmedia'] = 'Search file name:';
+$lang['searchmedia_in'] = 'Search in %s';
+$lang['txt_upload'] = 'Select file to upload';
+$lang['txt_filename'] = 'Upload as (optional)';
+$lang['txt_overwrt'] = 'Overwrite existing file';
+$lang['lockedby'] = 'Currently locked by';
+$lang['lockexpire'] = 'Lock expires at';
+
+$lang['js']['willexpire'] = 'Your lock for editing this page is about to expire in a minute.\nTo avoid conflicts use the preview button to reset the locktimer.';
+$lang['js']['notsavedyet'] = 'Unsaved changes will be lost.';
+$lang['js']['searchmedia'] = 'Search for files';
+$lang['js']['keepopen'] = 'Keep window open on selection';
+$lang['js']['hidedetails'] = 'Hide Details';
+$lang['js']['mediatitle'] = 'Link settings';
+$lang['js']['mediadisplay'] = 'Link type';
+$lang['js']['mediaalign'] = 'Alignment';
+$lang['js']['mediasize'] = 'Image size';
+$lang['js']['mediatarget'] = 'Link target';
+$lang['js']['mediaclose'] = 'Close';
+$lang['js']['mediainsert'] = 'Insert';
+$lang['js']['mediadisplayimg'] = 'Show the image.';
+$lang['js']['mediadisplaylnk'] = 'Show only the link.';
+$lang['js']['mediasmall'] = 'Small version';
+$lang['js']['mediamedium'] = 'Medium version';
+$lang['js']['medialarge'] = 'Large version';
+$lang['js']['mediaoriginal'] = 'Original version';
+$lang['js']['medialnk'] = 'Link to detail page';
+$lang['js']['mediadirect'] = 'Direct link to original';
+$lang['js']['medianolnk'] = 'No link';
+$lang['js']['medianolink'] = 'Do not link the image';
+$lang['js']['medialeft'] = 'Align the image on the left.';
+$lang['js']['mediaright'] = 'Align the image on the right.';
+$lang['js']['mediacenter'] = 'Align the image in the middle.';
+$lang['js']['medianoalign'] = 'Use no align.';
+$lang['js']['nosmblinks'] = 'Linking to Windows shares only works in Microsoft Internet Explorer.\nYou still can copy and paste the link.';
+$lang['js']['linkwiz'] = 'Link Wizard';
+$lang['js']['linkto'] = 'Link to:';
+$lang['js']['del_confirm'] = 'Really delete selected item(s)?';
+$lang['js']['restore_confirm'] = 'Really restore this version?';
+$lang['js']['media_diff'] = 'View differences:';
+$lang['js']['media_diff_both'] = 'Side by Side';
+$lang['js']['media_diff_opacity'] = 'Shine-through';
+$lang['js']['media_diff_portions'] = 'Swipe';
+$lang['js']['media_select'] = 'Select files…';
+$lang['js']['media_upload_btn'] = 'Upload';
+$lang['js']['media_done_btn'] = 'Done';
+$lang['js']['media_drop'] = 'Drop files here to upload';
+$lang['js']['media_cancel'] = 'remove';
+$lang['js']['media_overwrt'] = 'Overwrite existing files';
+
+$lang['rssfailed'] = 'An error occurred while fetching this feed: ';
+$lang['nothingfound'] = 'Nothing was found.';
+
+$lang['mediaselect'] = 'Media Files';
+$lang['fileupload'] = 'Media File Upload';
+$lang['uploadsucc'] = 'Upload successful';
+$lang['uploadfail'] = 'Upload failed. Maybe wrong permissions?';
+$lang['uploadwrong'] = 'Upload denied. This file extension is forbidden!';
+$lang['uploadexist'] = 'File already exists. Nothing done.';
+$lang['uploadbadcontent'] = 'The uploaded content did not match the %s file extension.';
+$lang['uploadspam'] = 'The upload was blocked by the spam blacklist.';
+$lang['uploadxss'] = 'The upload was blocked for possibly malicious content.';
+$lang['uploadsize'] = 'The uploaded file was too big. (max. %s)';
+$lang['deletesucc'] = 'The file "%s" has been deleted.';
+$lang['deletefail'] = '"%s" couldn\'t be deleted - check permissions.';
+$lang['mediainuse'] = 'The file "%s" hasn\'t been deleted - it is still in use.';
+$lang['namespaces'] = 'Namespaces';
+$lang['mediafiles'] = 'Available files in';
+$lang['accessdenied'] = 'You are not allowed to view this page.';
+$lang['mediausage'] = 'Use the following syntax to reference this file:';
+$lang['mediaview'] = 'View original file';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Upload a file to the current namespace here. To create subnamespaces, prepend them to your "Upload as" filename separated by colons. Files also can be selected by drag and drop.';
+$lang['mediaextchange'] = 'Filextension changed from .%s to .%s!';
+$lang['reference'] = 'References for';
+$lang['ref_inuse'] = 'The file can\'t be deleted, because it\'s still used by the following pages:';
+$lang['ref_hidden'] = 'Some references are on pages you don\'t have permission to read';
+
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Matching pagenames';
+$lang['toc'] = 'Table of Contents';
+$lang['current'] = 'current';
+$lang['yours'] = 'Your Version';
+$lang['diff'] = 'Show differences to current revisions';
+$lang['diff2'] = 'Show differences between selected revisions';
+$lang['difflink'] = 'Link to this comparison view';
+$lang['diff_type'] = 'View differences:';
+$lang['diff_inline'] = 'Inline';
+$lang['diff_side'] = 'Side by Side';
+$lang['line'] = 'Line';
+$lang['breadcrumb'] = 'Trace';
+$lang['youarehere'] = 'You are here';
+$lang['lastmod'] = 'Last modified';
+$lang['by'] = 'by';
+$lang['deleted'] = 'removed';
+$lang['created'] = 'created';
+$lang['restored'] = 'old revision restored';
+$lang['external_edit'] = 'external edit';
+$lang['summary'] = 'Edit summary';
+$lang['noflash'] = 'The <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> is needed to display this content.';
+$lang['download'] = 'Download Snippet';
+
+$lang['mail_newpage'] = 'page added:';
+$lang['mail_changed'] = 'page changed:';
+$lang['mail_subscribe_list'] = 'pages changed in namespace:';
+$lang['mail_new_user'] = 'new user:';
+$lang['mail_upload'] = 'file uploaded:';
+
+$lang['changes_type'] = 'View changes of';
+$lang['pages_changes'] = 'Pages';
+$lang['media_changes'] = 'Media files';
+$lang['both_changes'] = 'Both pages and media files';
+
+$lang['qb_bold'] = 'Bold Text';
+$lang['qb_italic'] = 'Italic Text';
+$lang['qb_underl'] = 'Underlined Text';
+$lang['qb_code'] = 'Code Text';
+$lang['qb_strike'] = 'Strike-through Text';
+$lang['qb_h1'] = 'Level 1 Headline';
+$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_h'] = 'Headline';
+$lang['qb_hs'] = 'Select Headline';
+$lang['qb_hplus'] = 'Higher Headline';
+$lang['qb_hminus'] = 'Lower Headline';
+$lang['qb_hequal'] = 'Same Level Headline';
+$lang['qb_link'] = 'Internal Link';
+$lang['qb_extlink'] = 'External Link';
+$lang['qb_hr'] = 'Horizontal Rule';
+$lang['qb_ol'] = 'Ordered List Item';
+$lang['qb_ul'] = 'Unordered List Item';
+$lang['qb_media'] = 'Add Images and other files';
+$lang['qb_sig'] = 'Insert Signature';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Special Chars';
+
+$lang['upperns'] = 'jump to parent namespace';
+
+$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';
+$lang['img_fname'] = 'Filename';
+$lang['img_fsize'] = 'Size';
+$lang['img_artist'] = 'Photographer';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$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';
+$lang['subscr_subscribe_noaddress'] = 'There is no address associated with your login, you cannot be added to the subscription list';
+$lang['subscr_unsubscribe_success'] = 'Removed %s from subscription list for %s';
+$lang['subscr_unsubscribe_error'] = 'Error removing %s from subscription list for %s';
+$lang['subscr_already_subscribed'] = '%s is already subscribed to %s';
+$lang['subscr_not_subscribed'] = '%s is not subscribed to %s';
// Manage page for subscriptions
-$lang['subscr_m_not_subscribed'] = 'You are currently not subscribed to the current page or namespace.';
-$lang['subscr_m_new_header'] = 'Add subscription';
-$lang['subscr_m_current_header'] = 'Current subscriptions';
-$lang['subscr_m_unsubscribe'] = 'Unsubscribe';
-$lang['subscr_m_subscribe'] = 'Subscribe';
-$lang['subscr_m_receive'] = 'Receive';
-$lang['subscr_style_every'] = 'email on every change';
-$lang['subscr_style_digest'] = 'digest email of changes for each page (every %.2f days)';
-$lang['subscr_style_list'] = 'list of changed pages since last email (every %.2f days)';
-
+$lang['subscr_m_not_subscribed'] = 'You are currently not subscribed to the current page or namespace.';
+$lang['subscr_m_new_header'] = 'Add subscription';
+$lang['subscr_m_current_header'] = 'Current subscriptions';
+$lang['subscr_m_unsubscribe'] = 'Unsubscribe';
+$lang['subscr_m_subscribe'] = 'Subscribe';
+$lang['subscr_m_receive'] = 'Receive';
+$lang['subscr_style_every'] = 'email on every change';
+$lang['subscr_style_digest'] = 'digest email of changes for each page (every %.2f days)';
+$lang['subscr_style_list'] = 'list of changed pages since last email (every %.2f days)';
/* auth.class language support */
-$lang['authmodfailed'] = 'Bad user authentication configuration. Please inform your Wiki Admin.';
-$lang['authtempfail'] = 'User authentication is temporarily unavailable. If this situation persists, please inform your Wiki Admin.';
+$lang['authmodfailed'] = 'Bad user authentication configuration. Please inform your Wiki Admin.';
+$lang['authtempfail'] = 'User authentication is temporarily unavailable. If this situation persists, please inform your Wiki Admin.';
/* installer strings */
-$lang['i_chooselang'] = 'Choose your language';
-$lang['i_installer'] = 'DokuWiki Installer';
-$lang['i_wikiname'] = 'Wiki Name';
-$lang['i_enableacl'] = 'Enable ACL (recommended)';
-$lang['i_superuser'] = 'Superuser';
-$lang['i_problems'] = 'The installer found some problems, indicated below. You can not continue until you have fixed them.';
-$lang['i_modified'] = 'For security reasons this script will only work with a new and unmodified Dokuwiki installation.
- You should either re-extract the files from the downloaded package or consult the complete
- <a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a>';
-$lang['i_funcna'] = 'PHP function <code>%s</code> is not available. Maybe your hosting provider disabled it for some reason?';
-$lang['i_phpver'] = 'Your PHP version <code>%s</code> is lower than the needed <code>%s</code>. You need to upgrade your PHP install.';
-$lang['i_permfail'] = '<code>%s</code> is not writable by DokuWiki. You need to fix the permission settings of this directory!';
-$lang['i_confexists'] = '<code>%s</code> already exists';
-$lang['i_writeerr'] = 'Unable to create <code>%s</code>. You will need to check directory/file permissions and create the file manually.';
-$lang['i_badhash'] = 'unrecognised or modified dokuwiki.php (hash=<code>%s</code>)';
-$lang['i_badval'] = '<code>%s</code> - illegal or empty value';
-$lang['i_success'] = 'The configuration was finished successfully. You may delete the install.php file now. Continue to
- <a href="doku.php">your new DokuWiki</a>.';
-$lang['i_failure'] = 'Some errors occurred while writing the configuration files. You may need to fix them manually before
- you can use <a href="doku.php">your new DokuWiki</a>.';
-$lang['i_policy'] = 'Initial ACL policy';
-$lang['i_pol0'] = 'Open Wiki (read, write, upload for everyone)';
-$lang['i_pol1'] = 'Public Wiki (read for everyone, write and upload for registered users)';
-$lang['i_pol2'] = 'Closed Wiki (read, write, upload for registered users only)';
-
-$lang['i_retry'] = 'Retry';
-$lang['i_license'] = 'Please choose the license you want to put your content under:';
-
-$lang['mu_intro'] = 'Here you can upload multiple files at once. Click the browse button to add them to the queue. Press upload when done.';
-$lang['js']['mu_btn'] = 'Upload multiple files at once';
-$lang['mu_gridname'] = 'Filename';
-$lang['mu_gridsize'] = 'Size';
-$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Namespace';
-$lang['mu_browse'] = 'Browse';
-$lang['mu_toobig'] = 'too big';
-$lang['mu_ready'] = 'ready for upload';
-$lang['mu_done'] = 'complete';
-$lang['mu_fail'] = 'failed';
-$lang['mu_authfail'] = 'session expired';
-$lang['mu_progress'] = '@PCT@% uploaded';
-$lang['mu_filetypes'] = 'Allowed Filetypes';
-$lang['mu_info'] = 'files uploaded.';
-$lang['mu_lasterr'] = 'Last error:';
-
-$lang['recent_global'] = 'You\'re currently watching the changes inside the <b>%s</b> namespace. You can also <a href="%s">view the recent changes of the whole wiki</a>.';
-
-$lang['years'] = '%d years ago';
-$lang['months'] = '%d months ago';
-$lang['weeks'] = '%d weeks ago';
-$lang['days'] = '%d days ago';
-$lang['hours'] = '%d hours ago';
-$lang['minutes'] = '%d minutes ago';
-$lang['seconds'] = '%d seconds ago';
-
-$lang['wordblock'] = 'Your change was not saved because it contains blocked text (spam).';
-
+$lang['i_chooselang'] = 'Choose your language';
+$lang['i_installer'] = 'DokuWiki Installer';
+$lang['i_wikiname'] = 'Wiki Name';
+$lang['i_enableacl'] = 'Enable ACL (recommended)';
+$lang['i_superuser'] = 'Superuser';
+$lang['i_problems'] = 'The installer found some problems, indicated below. You can not continue until you have fixed them.';
+$lang['i_modified'] = 'For security reasons this script will only work with a new and unmodified Dokuwiki installation.
+ You should either re-extract the files from the downloaded package or consult the complete
+ <a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a>';
+$lang['i_funcna'] = 'PHP function <code>%s</code> is not available. Maybe your hosting provider disabled it for some reason?';
+$lang['i_phpver'] = 'Your PHP version <code>%s</code> is lower than the needed <code>%s</code>. You need to upgrade your PHP install.';
+$lang['i_permfail'] = '<code>%s</code> is not writable by DokuWiki. You need to fix the permission settings of this directory!';
+$lang['i_confexists'] = '<code>%s</code> already exists';
+$lang['i_writeerr'] = 'Unable to create <code>%s</code>. You will need to check directory/file permissions and create the file manually.';
+$lang['i_badhash'] = 'unrecognised or modified dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - illegal or empty value';
+$lang['i_success'] = 'The configuration was finished successfully. You may delete the install.php file now. Continue to
+ <a href="doku.php">your new DokuWiki</a>.';
+$lang['i_failure'] = 'Some errors occurred while writing the configuration files. You may need to fix them manually before
+ you can use <a href="doku.php">your new DokuWiki</a>.';
+$lang['i_policy'] = 'Initial ACL policy';
+$lang['i_pol0'] = 'Open Wiki (read, write, upload for everyone)';
+$lang['i_pol1'] = 'Public Wiki (read for everyone, write and upload for registered users)';
+$lang['i_pol2'] = 'Closed Wiki (read, write, upload for registered users only)';
+$lang['i_retry'] = 'Retry';
+$lang['i_license'] = 'Please choose the license you want to put your content under:';
+
+$lang['mu_intro'] = 'Here you can upload multiple files at once. Click the browse button to add them to the queue. Press upload when done.';
+$lang['mu_gridname'] = 'Filename';
+$lang['mu_gridsize'] = 'Size';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Namespace';
+$lang['mu_browse'] = 'Browse';
+$lang['mu_toobig'] = 'too big';
+$lang['mu_ready'] = 'ready for upload';
+$lang['mu_done'] = 'complete';
+$lang['mu_fail'] = 'failed';
+$lang['mu_authfail'] = 'session expired';
+$lang['mu_progress'] = '@PCT@% uploaded';
+$lang['mu_filetypes'] = 'Allowed Filetypes';
+$lang['mu_info'] = 'files uploaded.';
+$lang['mu_lasterr'] = 'Last error:';
+
+$lang['recent_global'] = 'You\'re currently watching the changes inside the <b>%s</b> namespace. You can also <a href="%s">view the recent changes of the whole wiki</a>.';
+$lang['years'] = '%d years ago';
+$lang['months'] = '%d months ago';
+$lang['weeks'] = '%d weeks ago';
+$lang['days'] = '%d days ago';
+$lang['hours'] = '%d hours ago';
+$lang['minutes'] = '%d minutes ago';
+$lang['seconds'] = '%d seconds ago';
+
+$lang['wordblock'] = 'Your change was not saved because it contains blocked text (spam).';
+
+$lang['media_uploadtab'] = 'Upload';
+$lang['media_searchtab'] = 'Search';
+$lang['media_file'] = 'File';
+$lang['media_viewtab'] = 'View';
+$lang['media_edittab'] = 'Edit';
+$lang['media_historytab'] = 'History';
+$lang['media_list_thumbs'] = 'Thumbnails';
+$lang['media_list_rows'] = 'Rows';
+$lang['media_sort_name'] = 'Name';
+$lang['media_sort_date'] = 'Date';
+$lang['media_namespaces'] = 'Choose namespace';
+$lang['media_files'] = 'Files in %s';
+$lang['media_upload'] = 'Upload to %s';
+$lang['media_search'] = 'Search in %s';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s at %s';
+$lang['media_edit'] = 'Edit %s';
+$lang['media_history'] = 'History of %s';
+$lang['media_meta_edited'] = 'metadata edited';
+$lang['media_perm_read'] = 'Sorry, you don\'t have enough rights to read files.';
+$lang['media_perm_upload'] = 'Sorry, you don\'t have enough rights to upload files.';
+$lang['media_update'] = 'Upload new version';
+$lang['media_restore'] = 'Restore this version';
+
+$lang['plugin_install_err'] = "Plugin installed incorrectly. Rename plugin directory '%s' to '%s'.";
//Setup VIM: ex: et ts=2 :
diff --git a/inc/lang/en/uploadmail.txt b/inc/lang/en/uploadmail.txt
index 6fa196730..16bb6989c 100644
--- a/inc/lang/en/uploadmail.txt
+++ b/inc/lang/en/uploadmail.txt
@@ -1,6 +1,7 @@
A file was uploaded to your DokuWiki. Here are the details:
File : @MEDIA@
+Old revision: @OLD@
Date : @DATE@
Browser : @BROWSER@
IP-Address : @IPADDRESS@
diff --git a/inc/lang/eo/lang.php b/inc/lang/eo/lang.php
index 4bb1c005d..8a15981ee 100644
--- a/inc/lang/eo/lang.php
+++ b/inc/lang/eo/lang.php
@@ -9,6 +9,7 @@
* @author Felipe Castro <fefcas@gmail.com>
* @author Robert Bogenschneider <robog@gmx.de>
* @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Robert BOGENSCHNEIDER <bogi@UEA.org>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -50,6 +51,8 @@ $lang['btn_recover'] = 'Restarigi skizon';
$lang['btn_draftdel'] = 'Forigi skizon';
$lang['btn_revert'] = 'Restarigi';
$lang['btn_register'] = 'Registriĝi';
+$lang['btn_apply'] = 'Apliki';
+$lang['btn_media'] = 'Media-administrilo';
$lang['loggedinas'] = 'Ensalutita kiel';
$lang['user'] = 'Uzant-nomo';
$lang['pass'] = 'Pasvorto';
@@ -94,7 +97,7 @@ $lang['txt_filename'] = 'Alŝuti kiel (laŭvole)';
$lang['txt_overwrt'] = 'Anstataŭigi ekzistantan dosieron';
$lang['lockedby'] = 'Nune ŝlosita de';
$lang['lockexpire'] = 'Ŝlosado ĉesos en';
-$lang['willexpire'] = 'Vi povos redakti ĉi tiun paĝon post unu minuto.\nSe vi volas nuligi tempkontrolon de la ŝlosado, do premu butonon "Antaŭrigardi".';
+$lang['js']['willexpire'] = 'Vi povos redakti ĉi tiun paĝon post unu minuto.\nSe vi volas nuligi tempkontrolon de la ŝlosado, do premu butonon "Antaŭrigardi".';
$lang['js']['notsavedyet'] = 'Ne konservitaj modifoj perdiĝos.
Ĉu vi certe volas daŭrigi la procezon?';
$lang['js']['searchmedia'] = 'Serĉi dosierojn';
@@ -126,7 +129,17 @@ Vi ankoraŭ povas kopii kaj almeti la ligilon.';
$lang['js']['linkwiz'] = 'Ligil-Asistanto';
$lang['js']['linkto'] = 'Ligilo al:';
$lang['js']['del_confirm'] = 'Ĉu vere forigi elektitajn ero(j)n?';
-$lang['js']['mu_btn'] = 'Alŝuti plurajn dosierojn multope.';
+$lang['js']['restore_confirm'] = 'Ĉu vere restarigi ĉi tiun version?';
+$lang['js']['media_diff'] = 'Rigardu la diferencojn:';
+$lang['js']['media_diff_both'] = 'Flankon apud flanko';
+$lang['js']['media_diff_opacity'] = 'Unu super la alia';
+$lang['js']['media_diff_portions'] = 'Ŝovilo';
+$lang['js']['media_select'] = 'Elektu dosierojn...';
+$lang['js']['media_upload_btn'] = 'Alŝuto';
+$lang['js']['media_done_btn'] = 'Finita';
+$lang['js']['media_drop'] = 'Demetu ĉi-tien por alŝuti';
+$lang['js']['media_cancel'] = 'forigi';
+$lang['js']['media_overwrt'] = 'Anstataûi ekzistantajn dosierojn';
$lang['rssfailed'] = 'Okazis eraro dum ricevado de la novaĵ-fluo: ';
$lang['nothingfound'] = 'Ankoraŭ nenio troviĝas tie ĉi.';
$lang['mediaselect'] = 'Elekto de aŭdvidaĵa dosiero';
@@ -181,6 +194,10 @@ $lang['mail_changed'] = 'paĝo modifita:';
$lang['mail_subscribe_list'] = 'ŝanĝitaj paĝoj en nomspaco:';
$lang['mail_new_user'] = 'Nova uzanto:';
$lang['mail_upload'] = 'dosiero alŝutita:';
+$lang['changes_type'] = 'Rigardi ŝanĝojn de';
+$lang['pages_changes'] = 'Paĝoj';
+$lang['media_changes'] = 'Mediaj dosieroj';
+$lang['both_changes'] = 'Ambaû - paĝojn kaj mediajn dosierojn';
$lang['qb_bold'] = 'Dika teksto';
$lang['qb_italic'] = 'Dekliva teksto';
$lang['qb_underl'] = 'Substrekita teksto';
@@ -221,6 +238,9 @@ $lang['img_copyr'] = 'Kopirajtoj';
$lang['img_format'] = 'Formato';
$lang['img_camera'] = 'Kamerao';
$lang['img_keywords'] = 'Ŝlosilvortoj';
+$lang['img_width'] = 'Larĝeco';
+$lang['img_height'] = 'Alteco';
+$lang['img_manager'] = 'Rigardi en media-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';
@@ -286,3 +306,23 @@ $lang['hours'] = 'antaŭ %d horoj';
$lang['minutes'] = 'antaŭ %d minutoj';
$lang['seconds'] = 'antaŭ %d sekundoj';
$lang['wordblock'] = 'Via ŝanĝo ne estis savita, ĉar ĝi enhavas blokitan tekston (spamon).';
+$lang['media_uploadtab'] = 'Alŝuto';
+$lang['media_searchtab'] = 'Serĉo';
+$lang['media_viewtab'] = 'Rigardi';
+$lang['media_edittab'] = 'Modifi';
+$lang['media_historytab'] = 'Historio';
+$lang['media_thumbsview'] = 'Bildetoj';
+$lang['media_listview'] = 'Listigi';
+$lang['media_sort'] = 'Sorti';
+$lang['media_sort_name'] = 'per nomo';
+$lang['media_sort_date'] = 'per dato';
+$lang['media_upload'] = 'Alŝuti al la nomspaco <strong>%s</strong>.';
+$lang['media_search'] = 'Serĉi en la nomspaco <strong>%s</strong>.';
+$lang['media_edit'] = 'Modifi';
+$lang['media_history'] = 'Tiuj estas la pli malnovaj revizioj de la dosiero.';
+$lang['media_meta_edited'] = 'metadatumoj ŝanĝitaj';
+$lang['media_perm_read'] = 'Bedaûrinde viaj rajtoj ne sufiĉas por legi dosierojn.';
+$lang['media_perm_upload'] = 'Bedaûrinde viaj rajtoj ne sufiĉas por alŝuti dosierojn.';
+$lang['media_update'] = 'Alŝuti novan version';
+$lang['media_restore'] = 'Restarigi ĉi tiun version';
+$lang['plugin_install_err'] = 'Kromaĵo instalita malĝuste. Renomu la kromaĵan dosierujon \'%s\' al \'%s\'.';
diff --git a/inc/lang/es/lang.php b/inc/lang/es/lang.php
index aad93c075..5164c3243 100644
--- a/inc/lang/es/lang.php
+++ b/inc/lang/es/lang.php
@@ -24,6 +24,8 @@
* @author Victor Castelan <victorcastelan@gmail.com>
* @author Mauro Javier Giamberardino <mgiamberardino@gmail.com>
* @author emezeta <emezeta@infoprimo.com>
+ * @author Oscar Ciudad <oscar@jacho.net>
+ * @author Ruben Figols <ruben.figols@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -65,6 +67,8 @@ $lang['btn_recover'] = 'Recuperar borrador';
$lang['btn_draftdel'] = 'Eliminar borrador';
$lang['btn_revert'] = 'Restaurar';
$lang['btn_register'] = 'Registrarse';
+$lang['btn_apply'] = 'Aplicar';
+$lang['btn_media'] = 'Gestor de ficheros';
$lang['loggedinas'] = 'Conectado como ';
$lang['user'] = 'Usuario';
$lang['pass'] = 'Contraseña';
@@ -109,7 +113,7 @@ $lang['txt_filename'] = 'Subir como (opcional)';
$lang['txt_overwrt'] = 'Sobreescribir archivo existente';
$lang['lockedby'] = 'Actualmente bloqueado por';
$lang['lockexpire'] = 'El bloqueo expira en';
-$lang['willexpire'] = 'Tu bloqueo para editar esta página expira en un minuto.\nPara evitar conflictos usa el botón previsualizar para reiniciar el contador de tiempo.';
+$lang['js']['willexpire'] = 'El bloqueo para la edición de esta página expira en un minuto.\nPAra prevenir conflictos uso el botón Previsualizar para restaurar el contador de bloqueo.';
$lang['js']['notsavedyet'] = 'Los cambios que no se han guardado se perderán.
¿Realmente quieres continuar?';
$lang['js']['searchmedia'] = 'Buscar archivos';
@@ -141,7 +145,17 @@ Lo que sí puedes hacer es copiar y pegar el enlace.';
$lang['js']['linkwiz'] = 'Asistente de enlaces';
$lang['js']['linkto'] = 'Enlazar a:';
$lang['js']['del_confirm'] = '¿Quieres realmente borrar lo seleccionado?';
-$lang['js']['mu_btn'] = 'Subir varios archivos a la vez';
+$lang['js']['restore_confirm'] = '¿Estás seguro de querer restaurar esta versión?';
+$lang['js']['media_diff'] = 'Ver diferencias:';
+$lang['js']['media_diff_both'] = 'Lado por lado';
+$lang['js']['media_diff_opacity'] = 'A través de Shine';
+$lang['js']['media_diff_portions'] = 'Pasar';
+$lang['js']['media_select'] = 'Seleccionar ficheros';
+$lang['js']['media_upload_btn'] = 'Cargar';
+$lang['js']['media_done_btn'] = 'Hecho';
+$lang['js']['media_drop'] = 'Arrastra los ficheros aquí para cargar';
+$lang['js']['media_cancel'] = 'Eliminar';
+$lang['js']['media_overwrt'] = 'Sobreescribir ficheros exitentes';
$lang['rssfailed'] = 'Se ha producido un error mientras se leían los datos de este feed: ';
$lang['nothingfound'] = 'No se ha encontrado nada.';
$lang['mediaselect'] = 'Archivos Multimedia';
@@ -196,6 +210,10 @@ $lang['mail_changed'] = 'página cambiada:';
$lang['mail_subscribe_list'] = 'páginas cambiadas en el espacio de nombre:';
$lang['mail_new_user'] = 'nuevo usuario:';
$lang['mail_upload'] = 'archivo subido:';
+$lang['changes_type'] = 'Ver cambios de';
+$lang['pages_changes'] = 'Páginas';
+$lang['media_changes'] = 'Archivos multimedia';
+$lang['both_changes'] = 'Ambas páginas y archivos multimedia';
$lang['qb_bold'] = 'Negrita';
$lang['qb_italic'] = 'Itálica';
$lang['qb_underl'] = 'Subrayado';
@@ -236,6 +254,9 @@ $lang['img_copyr'] = 'Copyright';
$lang['img_format'] = 'Formato';
$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';
@@ -300,3 +321,27 @@ $lang['hours'] = '%d horas atrás';
$lang['minutes'] = '%d minutos atrás';
$lang['seconds'] = '%d segundos atrás';
$lang['wordblock'] = 'Sus cambios no se han guardado porque contienen textos bloqueados (spam).';
+$lang['media_uploadtab'] = 'Cargar';
+$lang['media_searchtab'] = 'Buscar';
+$lang['media_file'] = 'Fichero';
+$lang['media_viewtab'] = 'Ver';
+$lang['media_edittab'] = 'Editar';
+$lang['media_historytab'] = 'Historial';
+$lang['media_list_thumbs'] = 'Miniaturas';
+$lang['media_list_rows'] = 'Celdas';
+$lang['media_sort_name'] = 'Nombre';
+$lang['media_sort_date'] = 'Fecha';
+$lang['media_namespaces'] = 'Escoge "espacio de nombre"';
+$lang['media_files'] = 'Ficheros en %s';
+$lang['media_upload'] = 'Cargar a %s';
+$lang['media_search'] = 'Buscar en %s';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s en %s';
+$lang['media_edit'] = 'Editar %s';
+$lang['media_history'] = 'Historial de %s';
+$lang['media_meta_edited'] = 'Metadatos editados';
+$lang['media_perm_read'] = 'Disculpa, no tienes los permisos necesarios para leer ficheros.';
+$lang['media_perm_upload'] = 'Disculpa, no tienes los permisos necesarios para cargar ficheros.';
+$lang['media_update'] = 'Actualizar nueva versión';
+$lang['media_restore'] = 'Restaurar esta versión';
+$lang['plugin_install_err'] = 'Plugin instalado incorrectamente. Renombra el directorio de plugins \'%s\' to \'%s\'.';
diff --git a/inc/lang/et/lang.php b/inc/lang/et/lang.php
index c7060ebca..6cd2f437d 100644
--- a/inc/lang/et/lang.php
+++ b/inc/lang/et/lang.php
@@ -7,6 +7,7 @@
* @author Aari Juhanson <aari@vmg.vil.ee>
* @author Kaiko Kaur <kaiko@kultuur.edu.ee>
* @author kristian.kankainen@kuu.la
+ * @author Rivo Zängov <eraser@eraser.ee>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -14,6 +15,7 @@ $lang['doublequoteopening'] = '„';
$lang['doublequoteclosing'] = '“';
$lang['singlequoteopening'] = '‚';
$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '\'';
$lang['btn_edit'] = 'Toimeta seda lehte';
$lang['btn_source'] = 'Näita lehepõhja';
$lang['btn_show'] = 'Näita lehte';
@@ -36,6 +38,7 @@ $lang['btn_admin'] = 'Administreeri';
$lang['btn_update'] = 'Uuenda';
$lang['btn_delete'] = 'Kustuta';
$lang['btn_back'] = 'Tagasi';
+$lang['btn_backlink'] = 'Tagasilingid';
$lang['btn_backtomedia'] = 'Tagasi faili valikusse';
$lang['btn_subscribe'] = 'Jälgi seda lehte (teated meilile)';
$lang['btn_profile'] = 'Minu info';
@@ -89,7 +92,7 @@ $lang['txt_filename'] = 'Siseta oma Wikinimi (soovituslik)';
$lang['txt_overwrt'] = 'Kirjutan olemasoleva faili üle';
$lang['lockedby'] = 'Praegu on selle lukustanud';
$lang['lockexpire'] = 'Lukustus aegub';
-$lang['willexpire'] = 'Teie lukustus selle lehe toimetamisele aegub umbes minuti pärast.\nIgasugu probleemide vältimiseks kasuta eelvaate nuppu, et lukustusarvesti taas tööle panna.';
+$lang['js']['willexpire'] = 'Teie lukustus selle lehe toimetamisele aegub umbes minuti pärast.\nIgasugu probleemide vältimiseks kasuta eelvaate nuppu, et lukustusarvesti taas tööle panna.';
$lang['js']['notsavedyet'] = 'Sul on seal salvestamata muudatusi, mis kohe kõige kaduva teed lähevad.
Kas Sa ikka tahad edasi liikuda?';
$lang['js']['searchmedia'] = 'Otsi faile';
@@ -121,7 +124,6 @@ Siiski võid kopeerida ja asetada lingi.';
$lang['js']['linkwiz'] = 'Lingi nõustaja';
$lang['js']['linkto'] = 'Lingi:';
$lang['js']['del_confirm'] = 'Kas kustutame selle kirje?';
-$lang['js']['mu_btn'] = 'Laadi üles mittu faili';
$lang['rssfailed'] = 'Sinu soovitud info ammutamisel tekkis viga: ';
$lang['nothingfound'] = 'Oops, aga mitte muhvigi ei leitud.';
$lang['mediaselect'] = 'Hunnik faile';
@@ -143,6 +145,7 @@ $lang['mediaview'] = 'Vaata faili algsel kujul.';
$lang['mediaroot'] = 'juur';
$lang['mediaupload'] = 'Lae fail sellesse nimeruumi (kataloogi). Et tekitada veel alam nimeruum kasuta koolonit Wiki nimes.';
$lang['mediaextchange'] = 'Faili laiend .%s-st %s-ks!';
+$lang['reference'] = 'Viited';
$lang['ref_inuse'] = 'Seda faili ei saa kustutada, sest teda kasutavad järgmised lehed:';
$lang['ref_hidden'] = 'Mõned viidad failile on lehtedel, millele sul ei ole ligipääsu';
$lang['hits'] = 'Päringu tabamused';
@@ -151,6 +154,10 @@ $lang['toc'] = 'Sisujuht';
$lang['current'] = 'Hetkel kehtiv';
$lang['yours'] = 'Sinu versioon';
$lang['diff'] = 'Näita erinevusi hetkel kehtiva versiooniga';
+$lang['diff2'] = 'Näita valitud versioonide erinevusi';
+$lang['difflink'] = 'Lõlita võrdlemise vaatele';
+$lang['diff_type'] = 'Vaata erinevusi:';
+$lang['diff_side'] = 'Kõrvuti';
$lang['line'] = 'Rida';
$lang['breadcrumb'] = 'Käidud rada';
$lang['youarehere'] = 'Sa oled siin';
@@ -159,6 +166,7 @@ $lang['by'] = 'persoon';
$lang['deleted'] = 'eemaldatud';
$lang['created'] = 'tekitatud';
$lang['restored'] = 'vana versioon taastatud';
+$lang['external_edit'] = 'väline muutmine';
$lang['summary'] = 'kokkuvõte muudatustest';
$lang['mail_newpage'] = 'leht lisatud:';
$lang['mail_changed'] = 'leht muudetud';
@@ -173,6 +181,11 @@ $lang['qb_h2'] = '2. astme pealkiri';
$lang['qb_h3'] = '3. astme pealkiri';
$lang['qb_h4'] = '4. astme pealkiri';
$lang['qb_h5'] = '5. astme pealkiri';
+$lang['qb_h'] = 'Pealkiri';
+$lang['qb_hs'] = 'Vali pealkiri';
+$lang['qb_hplus'] = 'Kõrgem pealkiri';
+$lang['qb_hminus'] = 'Madalam pealkiri';
+$lang['qb_hequal'] = 'Sama taseme pealkiri';
$lang['qb_link'] = 'Siselink';
$lang['qb_extlink'] = 'Välislink';
$lang['qb_hr'] = 'Horisontaalne vahejoon';
@@ -193,6 +206,7 @@ $lang['img_date'] = 'Kuupäev';
$lang['img_fname'] = 'Faili nimi';
$lang['img_fsize'] = 'Suurus';
$lang['img_artist'] = 'Autor';
+$lang['img_copyr'] = 'Autoriõigused';
$lang['img_format'] = 'Formaat';
$lang['img_camera'] = 'Kaamera';
$lang['img_keywords'] = 'Võtmesõnad';
@@ -217,3 +231,13 @@ $lang['i_policy'] = 'Wiki õiguste algne poliitika';
$lang['i_pol0'] = 'Avatud (lugemine, kirjutamine ja üleslaadimine kõigile lubatud)';
$lang['i_pol1'] = 'Avalikuks lugemiseks (lugeda saavad kõik, kirjutada ja üles laadida vaid registreeritud kasutajad)';
$lang['i_pol2'] = 'Suletud (kõik õigused, kaasaarvatud lugemine on lubatud vaid registreeritud kasutajatele)';
+$lang['i_retry'] = 'Proovi uuesti';
+$lang['mu_gridname'] = 'Failinimi';
+$lang['mu_gridsize'] = 'Suurus';
+$lang['mu_gridstat'] = 'Staatus';
+$lang['mu_browse'] = 'Sirvi';
+$lang['mu_toobig'] = 'liiga suur';
+$lang['mu_ready'] = 'valmis üleslaadimiseks';
+$lang['mu_done'] = 'valmis';
+$lang['mu_fail'] = 'ebaõnnestus';
+$lang['mu_lasterr'] = 'Viimane viga:';
diff --git a/inc/lang/eu/lang.php b/inc/lang/eu/lang.php
index e49290e5e..d02f281c3 100644
--- a/inc/lang/eu/lang.php
+++ b/inc/lang/eu/lang.php
@@ -90,7 +90,7 @@ $lang['txt_filename'] = 'Idatzi wikiname-a (aukerazkoa)';
$lang['txt_overwrt'] = 'Oraingo fitxategiaren gainean idatzi';
$lang['lockedby'] = 'Momentu honetan blokeatzen:';
$lang['lockexpire'] = 'Blokeaketa iraungitzen da:';
-$lang['willexpire'] = 'Zure blokeaketa orri hau aldatzeko minutu batean iraungitzen da.\nGatazkak saihesteko, aurreikusi botoia erabili blokeaketa denboragailua berrabiarazteko.';
+$lang['js']['willexpire'] = 'Zure blokeaketa orri hau aldatzeko minutu batean iraungitzen da.\nGatazkak saihesteko, aurreikusi botoia erabili blokeaketa denboragailua berrabiarazteko.';
$lang['js']['notsavedyet'] = 'Gorde gabeko aldaketak galdu egingo dira.
Benetan jarraitu nahi duzu?';
$lang['js']['searchmedia'] = 'Bilatu fitxategiak';
@@ -122,7 +122,6 @@ Esteka kopiatu eta itsatsi dezakezu dena den.';
$lang['js']['linkwiz'] = 'Estekatze Laguntzailea';
$lang['js']['linkto'] = 'Estekatu hona:';
$lang['js']['del_confirm'] = 'Benetan ezabatu aukeratutako fitxategia(k)?';
-$lang['js']['mu_btn'] = 'Igo hainbat fitxategi aldi berean';
$lang['rssfailed'] = 'Errorea gertatu da feed hau irakurtzean:';
$lang['nothingfound'] = 'Ez da ezer aurkitu.';
$lang['mediaselect'] = 'Aukeratu Multimedia fitxategia';
diff --git a/inc/lang/fa/lang.php b/inc/lang/fa/lang.php
index 4b9e9daa1..ac14ce07a 100644
--- a/inc/lang/fa/lang.php
+++ b/inc/lang/fa/lang.php
@@ -97,8 +97,8 @@ $lang['txt_filename'] = 'ارسال به صورت (اختیاری)';
$lang['txt_overwrt'] = 'بر روی فایل موجود بنویس';
$lang['lockedby'] = 'در حال حاضر قفل شده است';
$lang['lockexpire'] = 'قفل منقضی شده است';
-$lang['willexpire'] = 'حالت قفل شما مدتی است منقضی شده است \n برای جلوگیری از تداخل دکمه‌ی پیش‌نمایش را برای صفر شدن ساعت قفل بزنید.';
-$lang['js']['notsavedyet'] = 'تغییرات ذخیره شده از بین خواهد رفت.
+$lang['js']['willexpire'] = 'حالت قفل شما مدتی است منقضی شده است \n برای جلوگیری از تداخل دکمه‌ی پیش‌نمایش را برای صفر شدن ساعت قفل بزنید.';
+$lang['js']['notsavedyet'] = 'تغییرات ذخیره شده از بین خواهد رفت.
می‌خواهید ادامه دهید؟';
$lang['js']['searchmedia'] = 'جستجو برای فایل';
$lang['js']['keepopen'] = 'پنجره را ر زمان انتخاب باز نگه‌دار';
@@ -129,7 +129,6 @@ $lang['js']['nosmblinks'] = 'پیوند به Windows share فقط در ای
$lang['js']['linkwiz'] = 'ویزارد پیوند';
$lang['js']['linkto'] = 'پیوند به:';
$lang['js']['del_confirm'] = 'واقعن تصمیم به حذف این موارد دارید؟';
-$lang['js']['mu_btn'] = 'ارسال هم‌زمان چندین فایل ';
$lang['rssfailed'] = 'بروز خطا در هنگام واکشی';
$lang['nothingfound'] = 'چیزی پیدا نشد';
$lang['mediaselect'] = 'فایل‌ها';
@@ -164,9 +163,9 @@ $lang['yours'] = 'نسخه‌ی شما';
$lang['diff'] = 'تفاوت‌ها را با نگارش کنونی نمایش بده.';
$lang['diff2'] = 'تفاوت‌ها را با نگارش انتخابی نمایش بده.';
$lang['difflink'] = 'پیوند به صفحه‌ی تفاوت‌ها';
-$lang['diff_type'] = 'مشاهده‌ی تفاوت‌ها';
-$lang['diff_inline'] = 'داخلی';
-$lang['diff_side'] = 'کنارهم';
+$lang['diff_type'] = 'مشاهده تغییرات:';
+$lang['diff_inline'] = 'خطی';
+$lang['diff_side'] = 'کلی';
$lang['line'] = 'خط';
$lang['breadcrumb'] = 'ردپا';
$lang['youarehere'] = 'محل شما';
diff --git a/inc/lang/fi/lang.php b/inc/lang/fi/lang.php
index 35f7b3c09..8d671a4cb 100644
--- a/inc/lang/fi/lang.php
+++ b/inc/lang/fi/lang.php
@@ -7,6 +7,7 @@
* @author Matti Pöllä <mpo@iki.fi>
* @author Otto Vainio <otto@valjakko.net>
* @author Teemu Mattila <ghcsystems@gmail.com>
+ * @author Sami Olmari <sami@olmari.fi>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -48,6 +49,8 @@ $lang['btn_recover'] = 'Palauta luonnos';
$lang['btn_draftdel'] = 'Poista luonnos';
$lang['btn_revert'] = 'palauta';
$lang['btn_register'] = 'Rekisteröidy';
+$lang['btn_apply'] = 'Toteuta';
+$lang['btn_media'] = 'Media manager';
$lang['loggedinas'] = 'Kirjautunut nimellä';
$lang['user'] = 'Käyttäjänimi';
$lang['pass'] = 'Salasana';
@@ -92,7 +95,7 @@ $lang['txt_filename'] = 'Lähetä nimellä (valinnainen)';
$lang['txt_overwrt'] = 'Ylikirjoita olemassa oleva';
$lang['lockedby'] = 'Tällä hetkellä tiedoston on lukinnut';
$lang['lockexpire'] = 'Lukitus päättyy';
-$lang['willexpire'] = 'Lukituksesi tämän sivun muokkaukseen päättyy minuutin kuluttua.\nRistiriitojen välttämiseksi paina esikatselu-nappia nollataksesi lukitusajan.';
+$lang['js']['willexpire'] = 'Lukituksesi tämän sivun muokkaukseen päättyy minuutin kuluttua.\nRistiriitojen välttämiseksi paina esikatselu-nappia nollataksesi lukitusajan.';
$lang['js']['notsavedyet'] = 'Dokumentissa on tallentamattomia muutoksia, jotka häviävät.
Haluatko varmasti jatkaa?';
$lang['js']['searchmedia'] = 'Etsi tiedostoja';
@@ -124,7 +127,17 @@ Voit silti kopioida ja liittää linkin.';
$lang['js']['linkwiz'] = 'Linkkivelho';
$lang['js']['linkto'] = 'Linkki kohteeseen:';
$lang['js']['del_confirm'] = 'Haluatko todella poistaa valitut kohteet?';
-$lang['js']['mu_btn'] = 'Lähetä useampia tiedostoja kerralla';
+$lang['js']['restore_confirm'] = 'Haluatko varmasti palauttaa tämän version?';
+$lang['js']['media_diff'] = 'Näytä erot:';
+$lang['js']['media_diff_both'] = 'Vierekkäin';
+$lang['js']['media_diff_opacity'] = 'Päällä';
+$lang['js']['media_diff_portions'] = 'Liukusäädin';
+$lang['js']['media_select'] = 'Valitse tiedostot...';
+$lang['js']['media_upload_btn'] = 'Lähetä';
+$lang['js']['media_done_btn'] = 'Valmis';
+$lang['js']['media_drop'] = 'Pudota lähetettävät tiedostot tähän';
+$lang['js']['media_cancel'] = 'Poista';
+$lang['js']['media_overwrt'] = 'Ylikirjoita olemassa olevat tiedostot';
$lang['rssfailed'] = 'Virhe tapahtui noudettaessa tätä syötettä: ';
$lang['nothingfound'] = 'Mitään ei löytynyt.';
$lang['mediaselect'] = 'Mediatiedoston valinta';
@@ -179,6 +192,10 @@ $lang['mail_changed'] = 'sivu muutettu:';
$lang['mail_subscribe_list'] = 'muuttuneet sivut nimiavaruudessa:';
$lang['mail_new_user'] = 'uusi käyttäjä:';
$lang['mail_upload'] = 'tiedosto lähetetty:';
+$lang['changes_type'] = 'Näytä muutokset:';
+$lang['pages_changes'] = 'Sivut';
+$lang['media_changes'] = 'Mediatiedostot';
+$lang['both_changes'] = 'Sivut ja mediatiedostot';
$lang['qb_bold'] = 'Lihavoitu teksti';
$lang['qb_italic'] = 'Kursivoitu teksti';
$lang['qb_underl'] = 'Alleviivattu teksti';
@@ -219,6 +236,9 @@ $lang['img_copyr'] = 'Tekijänoikeus';
$lang['img_format'] = 'Formaatti';
$lang['img_camera'] = 'Kamera';
$lang['img_keywords'] = 'Avainsanat';
+$lang['img_width'] = 'Leveys';
+$lang['img_height'] = 'Korkeus';
+$lang['img_manager'] = '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';
@@ -283,3 +303,23 @@ $lang['hours'] = '%d tuntia sitten';
$lang['minutes'] = '%d minuuttia sitten';
$lang['seconds'] = '% sekuntia sitten';
$lang['wordblock'] = 'Muutostasi ei talletettu, koska se sisältää estettyä tekstiä (spam).';
+$lang['media_uploadtab'] = 'Lähetä';
+$lang['media_searchtab'] = 'Etsi';
+$lang['media_viewtab'] = 'Näytä';
+$lang['media_edittab'] = 'Muokkaa';
+$lang['media_historytab'] = 'Historia';
+$lang['media_thumbsview'] = 'Pikkukuvat';
+$lang['media_listview'] = 'Lista';
+$lang['media_sort'] = 'Järjestä';
+$lang['media_sort_name'] = 'nimen mukaan';
+$lang['media_sort_date'] = 'päivämäärän mukaan';
+$lang['media_upload'] = 'Lähetä <strong>%s</strong> nimiavaruuteen';
+$lang['media_search'] = 'Etsi <strong>%s</strong> nimiavaruudesta';
+$lang['media_edit'] = 'Muokkaa';
+$lang['media_history'] = 'Nämä ovat vanhat versiot tiedostosta.';
+$lang['media_meta_edited'] = 'Metadataa muokattu';
+$lang['media_perm_read'] = 'Anteeksi. Sinulla ei ole riittävästi oikeuksia lukeaksesi tiedostoja.';
+$lang['media_perm_upload'] = 'Anteeksi. Sinulla ei ole riittävästi oikeuksia lähettääksesi tiedostoja.';
+$lang['media_update'] = 'Lähetä uusi versio';
+$lang['media_restore'] = 'Palauta tämä versio';
+$lang['plugin_install_err'] = 'Liitännäinen asentui virheellisesti. Nimeä liitännäisen hakemisto \'%s\' -> \'%s\'';
diff --git a/inc/lang/fo/lang.php b/inc/lang/fo/lang.php
index 3d4d0455b..4cb895f72 100644
--- a/inc/lang/fo/lang.php
+++ b/inc/lang/fo/lang.php
@@ -90,7 +90,7 @@ $lang['txt_filename'] = 'Sláa inn wikinavn (valfrítt)';
$lang['txt_overwrt'] = 'Yvurskriva verandi fílu';
$lang['lockedby'] = 'Fyribils læst av';
$lang['lockexpire'] = 'Lásið ferð úr gildi kl.';
-$lang['willexpire'] = 'Títt lás á hetta skjalið ferð úr gildi um ein minnutt.\nTrýst á Forskoðan-knappin fyri at sleppa undan trupulleikum.';
+$lang['js']['willexpire'] = 'Títt lás á hetta skjalið ferð úr gildi um ein minnutt.\nTrýst á Forskoðan-knappin fyri at sleppa undan trupulleikum.';
$lang['js']['notsavedyet'] = 'Tað eru gjørdar broytingar í skjalinum, um tú haldur fram vilja broytingar fara fyri skeytið.
Ynskir tú at halda fram?';
$lang['js']['searchmedia'] = 'Leita eftir dátufílum';
diff --git a/inc/lang/fr/lang.php b/inc/lang/fr/lang.php
index 40384fecb..60b86b346 100644
--- a/inc/lang/fr/lang.php
+++ b/inc/lang/fr/lang.php
@@ -7,7 +7,7 @@
* @author Antoine Fixary <antoine.fixary@freesbee.fr>
* @author cumulus <pta-n56@myamail.com>
* @author Gwenn Gueguen <contact@demisel.net>
- * @author Guy Brand <gb@isis.u-strasbg.fr>
+ * @author Guy Brand <gb@unistra.fr>
* @author Fabien Chabreuil <fabien@integralpersonality.com>
* @author Stéphane Chamberland <stephane.chamberland@ec.gc.ca>
* @author Delassaux Julien <julien@delassaux.fr>
@@ -21,6 +21,7 @@
* @author Florian Gaub <floriang@floriang.net>
* @author Samuel Dorsaz <samuel.dorsaz@novelion.net>
* @author Johan Guilbaud <guilbaud.johan@gmail.com>
+ * @author schplurtz@laposte.net
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -62,6 +63,8 @@ $lang['btn_recover'] = 'Récupérer le brouillon';
$lang['btn_draftdel'] = 'Effacer le brouillon';
$lang['btn_revert'] = 'Restaurer';
$lang['btn_register'] = 'S\'enregistrer';
+$lang['btn_apply'] = 'Appliquer';
+$lang['btn_media'] = 'Gestionnaire de médias';
$lang['loggedinas'] = 'Connecté en tant que ';
$lang['user'] = 'Utilisateur';
$lang['pass'] = 'Mot de passe';
@@ -106,9 +109,8 @@ $lang['txt_filename'] = 'Donnez un « wikiname » (optionnel) ';
$lang['txt_overwrt'] = 'Écraser le fichier cible';
$lang['lockedby'] = 'Actuellement bloqué par';
$lang['lockexpire'] = 'Le blocage expire à';
-$lang['willexpire'] = 'Votre blocage pour modifier cette page expire dans une minute.\nPour éviter les conflits, utiliser le bouton « Aperçu » pour réinitialiser le minuteur.';
-$lang['js']['notsavedyet'] = 'Les modifications non enregistrées seront perdues.
-Voulez-vous vraiment continuer ?';
+$lang['js']['willexpire'] = 'Votre verrouillage pour la modification de cette page expire dans une minute.\nPour éviter les conflits, utilisez le bouton « Aperçu » pour réinitialiser le minuteur.';
+$lang['js']['notsavedyet'] = 'Les modifications non enregistrées seront perdues. Voulez-vous vraiment continuer ?';
$lang['js']['searchmedia'] = 'Chercher des fichiers';
$lang['js']['keepopen'] = 'Gardez la fenêtre ouverte pendant la sélection';
$lang['js']['hidedetails'] = 'Masquer détails';
@@ -121,10 +123,10 @@ $lang['js']['mediaclose'] = 'Fermer';
$lang['js']['mediainsert'] = 'Insérer';
$lang['js']['mediadisplayimg'] = 'Afficher l\'image.';
$lang['js']['mediadisplaylnk'] = 'N\'afficher que le lien.';
-$lang['js']['mediasmall'] = 'Petite version';
-$lang['js']['mediamedium'] = 'Version moyenne';
-$lang['js']['medialarge'] = 'Grande version';
-$lang['js']['mediaoriginal'] = 'Version originale';
+$lang['js']['mediasmall'] = 'Petite taille';
+$lang['js']['mediamedium'] = 'taille moyenne';
+$lang['js']['medialarge'] = 'Grande taille';
+$lang['js']['mediaoriginal'] = 'taille d\'origine';
$lang['js']['medialnk'] = 'Lien vers la page de détail';
$lang['js']['mediadirect'] = 'Lien direct vers l\'original';
$lang['js']['medianolnk'] = 'Aucun lien';
@@ -134,11 +136,22 @@ $lang['js']['mediaright'] = 'Aligner l\'image sur la droite.';
$lang['js']['mediacenter'] = 'Centrer l\'image';
$lang['js']['medianoalign'] = 'Ne pas aligner.';
$lang['js']['nosmblinks'] = 'Les liens vers les partages Windows ne fonctionnent qu\'avec Microsoft Internet Explorer.
-Vous pouvez toujours copier puis coller le lien.';
+ Vous pouvez toujours copier puis coller le lien.';
$lang['js']['linkwiz'] = 'Assistant Lien';
$lang['js']['linkto'] = 'Lien vers :';
$lang['js']['del_confirm'] = 'Effacer cette entrée ?';
$lang['js']['mu_btn'] = 'Envoyer plusieurs fichiers en même temps';
+$lang['js']['restore_confirm'] = 'Voulez vous vraiment restaurer cette version ?';
+$lang['js']['media_diff'] = 'Voir les différences:';
+$lang['js']['media_diff_both'] = 'Côte à côte';
+$lang['js']['media_diff_opacity'] = 'Calque';
+$lang['js']['media_diff_portions'] = 'Curseur';
+$lang['js']['media_select'] = 'Sélection de fichiers…';
+$lang['js']['media_upload_btn'] = 'Télécharger';
+$lang['js']['media_done_btn'] = 'Terminé';
+$lang['js']['media_drop'] = 'Déposez des fichiers ici pour les télécharger';
+$lang['js']['media_cancel'] = 'supprimer';
+$lang['js']['media_overwrt'] = 'Écraser les fichiers existants';
$lang['rssfailed'] = 'Une erreur s\'est produite en récupérant ce flux : ';
$lang['nothingfound'] = 'Pas de réponse.';
$lang['mediaselect'] = 'Sélection de fichier';
@@ -193,6 +206,10 @@ $lang['mail_changed'] = 'page modifiée :';
$lang['mail_subscribe_list'] = 'pages modifiées dans la catégorie :';
$lang['mail_new_user'] = 'nouvel utilisateur :';
$lang['mail_upload'] = 'fichier envoyé :';
+$lang['changes_type'] = 'Voir les changements';
+$lang['pages_changes'] = 'Pages';
+$lang['media_changes'] = 'Fichier multimédias';
+$lang['both_changes'] = 'Pages et fichiers multimédias';
$lang['qb_bold'] = 'Emphase forte (gras)';
$lang['qb_italic'] = 'Emphase (italique)';
$lang['qb_underl'] = 'Souligné';
@@ -233,6 +250,9 @@ $lang['img_copyr'] = 'Copyright';
$lang['img_format'] = 'Format';
$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 en ajoutant %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';
@@ -297,3 +317,27 @@ $lang['hours'] = 'il y a %d heures';
$lang['minutes'] = 'il y a %d minutes';
$lang['seconds'] = 'il y a %d secondes';
$lang['wordblock'] = 'Vos modifications n\'ont pas été sauvegardées parce qu\'elles contiennent des textes non autorisé (spam).';
+$lang['media_uploadtab'] = 'Télécharger';
+$lang['media_searchtab'] = 'Rechercher';
+$lang['media_file'] = 'Fichier';
+$lang['media_viewtab'] = 'Voir';
+$lang['media_edittab'] = 'Éditer';
+$lang['media_historytab'] = 'Historique';
+$lang['media_list_thumbs'] = 'Aperçus';
+$lang['media_list_rows'] = 'Lignes';
+$lang['media_sort_name'] = 'Tri par nom';
+$lang['media_sort_date'] = 'Tri par date';
+$lang['media_namespaces'] = 'Choisissez un espace de nom';
+$lang['media_files'] = 'Fichiers présents dans';
+$lang['media_upload'] = 'Télécharger dans la catégorie <strong>%s</strong>.';
+$lang['media_search'] = 'Chercher dans la catégorie <strong>%s</strong>.';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s dans %s';
+$lang['media_edit'] = 'Éditer %s';
+$lang['media_history'] = 'Historique du %s';
+$lang['media_meta_edited'] = 'métadonnées éditées';
+$lang['media_perm_read'] = 'Désolé, vous n\'avez pas les droits pour lire les fichiers.';
+$lang['media_perm_upload'] = 'Désolé, vous n\'avez pas les droits pour télécharger des fichiers.';
+$lang['media_update'] = 'Télécharger une nouvelle version';
+$lang['media_restore'] = 'Restaurer cette version';
+$lang['plugin_install_err'] = 'Extension mal installée. Renommez le dossier de l\'extension \'%s\' en \'%s\'.';
diff --git a/inc/lang/gl/lang.php b/inc/lang/gl/lang.php
index 37cf55d22..01938b3a0 100644
--- a/inc/lang/gl/lang.php
+++ b/inc/lang/gl/lang.php
@@ -89,7 +89,7 @@ $lang['txt_filename'] = 'Subir como (opcional)';
$lang['txt_overwrt'] = 'Sobrescribir arquivo existente';
$lang['lockedby'] = 'Bloqueado actualmente por';
$lang['lockexpire'] = 'O bloqueo remata o';
-$lang['willexpire'] = 'O teu bloqueo para editares esta páxina vai caducar nun minuto.\nPara de evitar conflitos, emprega o botón de previsualización para reiniciares o contador do tempo de bloqueo.';
+$lang['js']['willexpire'] = 'O teu bloqueo para editares esta páxina vai caducar nun minuto.\nPara de evitar conflitos, emprega o botón de previsualización para reiniciares o contador do tempo de bloqueo.';
$lang['js']['notsavedyet'] = "Perderanse os trocos non gardados.\nEstá certo de quereres continuar?";
$lang['rssfailed'] = 'Houbo un erro ao tentar obter esta corrente RSS: ';
$lang['nothingfound'] = 'Non se atopou nada.';
@@ -137,7 +137,6 @@ Sempre podes copiar e colar a ligazón.';
$lang['js']['linkwiz'] = 'Asistente de ligazóns';
$lang['js']['linkto'] = 'Ligazón para:';
$lang['js']['del_confirm'] = 'Estás certo de quereres eliminar os elementos seleccionados?';
-$lang['js']['mu_btn'] = 'Subir varios arquivos de vez';
$lang['mediausage'] = 'Emprega a seguinte sintaxe para inserires unha referencia a este arquivo:';
$lang['mediaview'] = 'Ver arquivo orixinal';
$lang['mediaroot'] = 'raigaña';
diff --git a/inc/lang/he/lang.php b/inc/lang/he/lang.php
index 1a47ebcb8..f295e44a9 100644
--- a/inc/lang/he/lang.php
+++ b/inc/lang/he/lang.php
@@ -95,7 +95,7 @@ $lang['txt_filename'] = 'העלאה בשם (נתון לבחירה)';
$lang['txt_overwrt'] = 'שכתוב על קובץ קיים';
$lang['lockedby'] = 'נעול על ידי';
$lang['lockexpire'] = 'הנעילה פגה';
-$lang['willexpire'] = 'הנעילה תחלוף עוד זמן קצר. \nלמניעת התנגשויות יש להשתמש בכפתור הרענון מטה כדי לאפס את מד משך הנעילה.';
+$lang['js']['willexpire'] = 'הנעילה תחלוף עוד זמן קצר. \nלמניעת התנגשויות יש להשתמש בכפתור הרענון מטה כדי לאפס את מד משך הנעילה.';
$lang['js']['notsavedyet'] = 'שינויים שלא נשמרו ילכו לאיבוד.';
$lang['js']['searchmedia'] = 'חיפוש אחר קבצים';
$lang['js']['keepopen'] = 'השארת חלון פתוח על הבחירה';
@@ -126,7 +126,6 @@ $lang['js']['nosmblinks'] = 'קישור לכונני שיתוף של Window
$lang['js']['linkwiz'] = 'אשף הקישורים';
$lang['js']['linkto'] = 'קישור אל:';
$lang['js']['del_confirm'] = 'באמת למחוק?';
-$lang['js']['mu_btn'] = 'העלאת מספר קבצים יחד';
$lang['rssfailed'] = 'אירע כשל בעת קבלת הזנה זו:';
$lang['nothingfound'] = 'לא נמצאו תוצאות.';
$lang['mediaselect'] = 'קובצי מדיה';
diff --git a/inc/lang/hr/lang.php b/inc/lang/hr/lang.php
index a42e8c96f..ef10d7720 100644
--- a/inc/lang/hr/lang.php
+++ b/inc/lang/hr/lang.php
@@ -6,6 +6,7 @@
* @author Tomo Krajina <aaa@puzz.info>
* @author Branko Rihtman <theney@gmail.com>
* @author Dražen Odobašić <dodobasic@gmail.com>
+ * @author Dejan Igrec dejan.igrec@gmail.com
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -19,7 +20,7 @@ $lang['btn_source'] = 'Prikaži kod dokumenta';
$lang['btn_show'] = 'Prikaži dokument';
$lang['btn_create'] = 'Novi dokument';
$lang['btn_search'] = 'Pretraži';
-$lang['btn_save'] = 'Snimi';
+$lang['btn_save'] = 'Spremi';
$lang['btn_preview'] = 'Prikaži';
$lang['btn_top'] = 'Na vrh';
$lang['btn_newer'] = '<< noviji';
@@ -39,15 +40,13 @@ $lang['btn_back'] = 'Povratak';
$lang['btn_backlink'] = 'Povratni linkovi';
$lang['btn_backtomedia'] = 'Povratak na Mediafile izbornik';
$lang['btn_subscribe'] = 'Pretplati se na promjene dokumenta';
-$lang['btn_unsubscribe'] = 'Odjavi pretplatu o promjenama dokumenta';
-$lang['btn_subscribens'] = 'Pretplati se na promjene imenskog prostora';
-$lang['btn_unsubscribens'] = 'Odjavi pretplatu o promjenama imenskog prostora';
$lang['btn_profile'] = 'Ažuriraj profil';
$lang['btn_reset'] = 'Poništi promjene';
$lang['btn_resendpwd'] = 'Pošalji novu lozinku';
$lang['btn_draft'] = 'Uredi nacrt dokumenta';
$lang['btn_recover'] = 'Vrati prijašnji nacrt dokumenta';
$lang['btn_draftdel'] = 'Obriši nacrt dokumenta';
+$lang['btn_revert'] = 'Vrati';
$lang['btn_register'] = 'Registracija';
$lang['loggedinas'] = 'Prijavljen kao';
$lang['user'] = 'Korisničko ime';
@@ -86,13 +85,44 @@ $lang['resendpwdconfirm'] = 'Potvrdni link je poslan emailom.';
$lang['resendpwdsuccess'] = 'Nova lozinka je poslana emailom.';
$lang['license'] = 'Osim na mjestima gdje je naznačeno drugačije, sadržaj ovog wikija je licenciran sljedećom licencom:';
$lang['licenseok'] = 'Pažnja: promjenom ovog dokumenta pristajete licencirati sadržaj sljedećom licencom: ';
+$lang['searchmedia'] = 'Traži naziv datoteke:';
+$lang['searchmedia_in'] = 'Traži u %s';
$lang['txt_upload'] = 'Odaberite datoteku za postavljanje';
$lang['txt_filename'] = 'Postaviti kao (nije obavezno)';
$lang['txt_overwrt'] = 'Prepiši postojeću datoteku';
$lang['lockedby'] = 'Zaključao';
$lang['lockexpire'] = 'Zaključano do';
-$lang['willexpire'] = 'Dokument kojeg mijenjate će biti zaključan još 1 minutu.\n Ukoliko želite i dalje raditi izmjene na dokumentu - kliknite na "Pregled".';
-$lang['js']['notsavedyet'] = "Vaše izmjene će se izgubiti.\nŽelite li nastaviti?";
+$lang['js']['willexpire'] = 'Dokument kojeg mijenjate će biti zaključan još 1 minutu.\n Ukoliko želite i dalje raditi izmjene na dokumentu - kliknite na "Pregled".';
+$lang['js']['notsavedyet'] = 'Vaše izmjene će se izgubiti.
+Želite li nastaviti?';
+$lang['js']['searchmedia'] = 'Traži datoteke';
+$lang['js']['keepopen'] = 'Ostavi prozor otvoren nakon izbora';
+$lang['js']['hidedetails'] = 'Sakrij detalje';
+$lang['js']['mediatitle'] = 'Postavke poveznice';
+$lang['js']['mediadisplay'] = 'Vrsta poveznice';
+$lang['js']['mediaalign'] = 'Poravnanje';
+$lang['js']['mediasize'] = 'Veličina slike';
+$lang['js']['mediatarget'] = 'Cilj poveznice';
+$lang['js']['mediaclose'] = 'Zatvori';
+$lang['js']['mediainsert'] = 'Umetni';
+$lang['js']['mediadisplayimg'] = 'Prikaži sliku.';
+$lang['js']['mediadisplaylnk'] = 'Prikaži samo poveznicu.';
+$lang['js']['mediasmall'] = 'Mala verzija.';
+$lang['js']['mediamedium'] = 'Srednja verzija.';
+$lang['js']['medialarge'] = 'Velika verzija.';
+$lang['js']['mediaoriginal'] = 'Originalna verzija.';
+$lang['js']['medialnk'] = 'Poveznica na stranicu s detaljima';
+$lang['js']['mediadirect'] = 'Direktna poveznica na original';
+$lang['js']['medianolnk'] = 'Bez poveznice';
+$lang['js']['medianolink'] = 'Nemoj povezati sliku';
+$lang['js']['medialeft'] = 'Poravnaj sliku lijevo.';
+$lang['js']['mediaright'] = 'Poravnaj sliku desno.';
+$lang['js']['mediacenter'] = 'Poravnaj sliku u sredinu.';
+$lang['js']['medianoalign'] = 'Bez poravnanja.';
+$lang['js']['nosmblinks'] = 'Linkovi na dijeljene Windows mape rade samo s Internet Explorerom. Link je još uvijek moguće kopirati i zalijepiti.';
+$lang['js']['linkwiz'] = 'Čarobnjak za poveznice';
+$lang['js']['linkto'] = 'Poveznica na:';
+$lang['js']['del_confirm'] = 'Zbilja želite obrisati odabrane stavke?';
$lang['rssfailed'] = 'Došlo je do greške prilikom preuzimanja feed-a: ';
$lang['nothingfound'] = 'Traženi dokumetni nisu pronađeni.';
$lang['mediaselect'] = 'Mediafile datoteke';
@@ -110,10 +140,7 @@ $lang['deletefail'] = '"%s" se ne može obrisati - provjerite dozvole
$lang['mediainuse'] = 'Datoteka "%s" nije obrisana - još uvijek se koristi.';
$lang['namespaces'] = 'Imenski prostori';
$lang['mediafiles'] = 'Datoteke u';
-$lang['js']['keepopen'] = 'Ostavi prozor otvoren nakon izbora';
-$lang['js']['hidedetails'] = 'Sakrij detalje';
-$lang['js']['nosmblinks'] = 'Linkovi na dijeljene Windows mape rade samo s Internet Explorerom. Link je još uvijek moguće kopirati i zalijepiti.';
-$lang['js']['mu_btn'] = 'Postavi više datoteka odjednom';
+$lang['accessdenied'] = 'Nemate potrebne dozvole za pregled ove stranice.';
$lang['mediausage'] = 'Koristi sljedeću sintaksu za referenciranje ove datoteke:';
$lang['mediaview'] = 'Pregledaj originalnu datoteku';
$lang['mediaroot'] = 'root';
@@ -129,6 +156,10 @@ $lang['current'] = 'trenutno';
$lang['yours'] = 'Vaša inačica';
$lang['diff'] = 'Prikaži razlike u odnosu na trenutnu inačicu';
$lang['diff2'] = 'Pokaži razlike između odabranih inačica';
+$lang['difflink'] = 'Poveznica na ovaj prikaz usporedbe';
+$lang['diff_type'] = 'Razlike u prikazu:';
+$lang['diff_inline'] = 'U istoj razini';
+$lang['diff_side'] = 'Usporedo';
$lang['line'] = 'Redak';
$lang['breadcrumb'] = 'Putanja';
$lang['youarehere'] = 'Vi ste ovdje';
@@ -140,8 +171,10 @@ $lang['restored'] = 'vraćena prijašnja inačica';
$lang['external_edit'] = 'vanjsko uređivanje';
$lang['summary'] = 'Sažetak izmjena';
$lang['noflash'] = 'Za prikazivanje ovog sadržaja potreban je <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>';
+$lang['download'] = 'Preuzmi isječak';
$lang['mail_newpage'] = 'stranica dodana:';
$lang['mail_changed'] = 'stranica izmjenjena:';
+$lang['mail_subscribe_list'] = 'stranice promijenjene u imenskom prostoru:';
$lang['mail_new_user'] = 'novi korisnik:';
$lang['mail_upload'] = 'datoteka postavljena:';
$lang['qb_bold'] = 'Podebljani tekst';
@@ -168,7 +201,7 @@ $lang['qb_media'] = 'Dodaj slike i ostale datoteke';
$lang['qb_sig'] = 'Potpis';
$lang['qb_smileys'] = 'Smiješkići';
$lang['qb_chars'] = 'Posebni znakovi';
-$lang['js']['del_confirm'] = 'Zbilja želite obrisati odabrane stavke?';
+$lang['upperns'] = 'Skoči u nadređeni imenski prostor';
$lang['admin_register'] = 'Dodaj novog korisnika';
$lang['metaedit'] = 'Uredi metapodatake';
$lang['metasaveerr'] = 'Neuspješno zapisivanje metapodataka';
@@ -184,11 +217,22 @@ $lang['img_copyr'] = 'Autorsko pravo';
$lang['img_format'] = 'Format';
$lang['img_camera'] = 'Kamera';
$lang['img_keywords'] = 'Ključne riječi';
-$lang['subscribe_success'] = 'Dodan %s na listu preplata za %s';
-$lang['subscribe_error'] = 'Greška prilikom dodavanju %s na listu pretplata za %s';
-$lang['subscribe_noaddress'] = 'Nije postavljena email adresa za vaš korisnički profil, nije Vas moguće dodati na listu pretplata';
-$lang['unsubscribe_success'] = 'Izbrisan %s s liste pretplata za %s';
-$lang['unsubscribe_error'] = 'Greška prilikom brisanja %s s liste pretplatnika za %s';
+$lang['subscr_subscribe_success'] = 'Dodan %s u listu pretplatnika za %s';
+$lang['subscr_subscribe_error'] = 'Greška kod dodavanja %s u listu pretplatnika za %s';
+$lang['subscr_subscribe_noaddress'] = 'Ne postoji adresa povezana sa vašim podacima za prijavu, stoga ne možete biti dodani u listu pretplatnika';
+$lang['subscr_unsubscribe_success'] = 'Uklonjen %s iz liste pretplatnika za %s';
+$lang['subscr_unsubscribe_error'] = 'Greška prilikom uklanjanja %s iz liste pretplatnika za %s';
+$lang['subscr_already_subscribed'] = '%s je već pretplaćen na %s';
+$lang['subscr_not_subscribed'] = '%s nije pretplaćen na %s';
+$lang['subscr_m_not_subscribed'] = 'Trenutno niste pretplaćeni na trenutnu stranicu ili imenski prostor.';
+$lang['subscr_m_new_header'] = 'Dodaj pretplatu';
+$lang['subscr_m_current_header'] = 'Trenutne pretplate';
+$lang['subscr_m_unsubscribe'] = 'Odjavi pretplatu';
+$lang['subscr_m_subscribe'] = 'Pretplati se';
+$lang['subscr_m_receive'] = 'Primaj';
+$lang['subscr_style_every'] = 'email za svaku promjenu';
+$lang['subscr_style_digest'] = 'email s kratakim prikazom promjena za svaku stranicu (svaka %.2f dana)';
+$lang['subscr_style_list'] = 'listu promijenjenih stranica od zadnjeg primljenog email-a (svaka %.2f dana)';
$lang['authmodfailed'] = 'Greška u konfiguraciji korisničke autentifikacije. Molimo Vas da kontaktirate administratora.';
$lang['authtempfail'] = 'Autentifikacija korisnika je privremeno nedostupna. Molimo Vas da kontaktirate administratora.';
$lang['i_chooselang'] = 'Izaberite vaš jezik';
@@ -198,3 +242,42 @@ $lang['i_enableacl'] = 'Omogući ACL (preporučeno)';
$lang['i_superuser'] = 'Superkorisnik';
$lang['i_problems'] = 'Instalacija je pronašla probleme koji su naznačeni ispod. Nije moguće nastaviti dok se ti problemi ne riješe.';
$lang['i_modified'] = 'Zbog sigurnosnih razlog, ova skripta ce raditi samo sa novim i nepromijenjenim instalacijama dokuWikija. Preporucujemo da ili re-ekstraktirate fajlove iz downloadovanog paketa ili konsultujete pune a href="http://dokuwiki.org/install">Instrukcije za instalaciju Dokuwikija</a>';
+$lang['i_funcna'] = 'PHP funkcija <code>%s</code> nije dostupna. Možda ju je vaš pružatelj hostinga onemogućio iz nekog razloga?';
+$lang['i_phpver'] = 'Vaša PHP verzija <code>%s</code> je niža od potrebne <code>%s</code>. Trebate nadograditi vašu PHP instalaciju.';
+$lang['i_permfail'] = '<code>%s</code> nema dozvolu pisanja od strane DokuWiki. Trebate podesiti dozvole pristupa tom direktoriju.';
+$lang['i_confexists'] = '<code>%s</code> već postoji';
+$lang['i_writeerr'] = 'Ne može se kreirati <code>%s</code>. Trebate provjeriti dozvole direktorija/datoteke i kreirati dokument ručno.';
+$lang['i_badhash'] = 'neprepoznat ili promijenjen dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - nedozvoljena ili prazna vrijednost';
+$lang['i_success'] = 'Konfiguracija je uspješno završena. Sada možete obrisati install.php datoteku. Nastavite na <a href="doku.php">vaš novi DokuWiki</a>.';
+$lang['i_failure'] = 'Pojavile su se neke greške prilikom pisanja konfiguracijskih datoteka. Morati ćete ih ručno ispraviti da bi mogli koristiti <a href="doku.php">vaš novi DokuWiki</a>.';
+$lang['i_policy'] = 'Inicijalna ACL politika';
+$lang['i_pol0'] = 'Otvoreni Wiki (čitanje, pisanje, učitavanje za sve)';
+$lang['i_pol1'] = 'Javni Wiki (čitanje za sve, pisanje i učitavanje za registrirane korisnike)';
+$lang['i_pol2'] = 'Zatvoreni Wiki (čitanje, pisanje, učitavanje samo za registrirane korisnike)';
+$lang['i_retry'] = 'Pokušaj ponovo';
+$lang['i_license'] = 'Molim odaberite licencu pod kojom želite postavljati vaš sadržaj:';
+$lang['mu_intro'] = 'Ovdje možeš učitati više datoteka odjednom. Klikni gumb pregled te ih dodajte u red. Pritisnite učitaj kad ste gotovi.';
+$lang['mu_gridname'] = 'Naziv datoteke';
+$lang['mu_gridsize'] = 'Veličina';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Imenski prostor';
+$lang['mu_browse'] = 'Pregled';
+$lang['mu_toobig'] = 'prevelik';
+$lang['mu_ready'] = 'spremno za učitavanje';
+$lang['mu_done'] = 'gotovo';
+$lang['mu_fail'] = 'nije uspio';
+$lang['mu_authfail'] = 'sjednica istekla';
+$lang['mu_progress'] = '@PCT@% učitan';
+$lang['mu_filetypes'] = 'Dozvoljeni tipovi datoteka';
+$lang['mu_info'] = 'datoteke učitane.';
+$lang['mu_lasterr'] = 'Posljednja greška:';
+$lang['recent_global'] = 'Trenutno gledate promjene unutar <b>%s</b> imenskog prostora. Također možete <a href="%s">vidjeti zadnje promjene cijelog wiki-a</a>';
+$lang['years'] = '%d godina prije';
+$lang['months'] = '%d mjeseci prije';
+$lang['weeks'] = '%d tjedana prije';
+$lang['days'] = '%d dana prije';
+$lang['hours'] = '%d sati prije';
+$lang['minutes'] = '%d minuta prije';
+$lang['seconds'] = '%d sekundi prije';
+$lang['wordblock'] = 'Vaša promjena nije spremljena jer sadrži blokirani tekst (spam).';
diff --git a/inc/lang/hr/read.txt b/inc/lang/hr/read.txt
index d036c0a7b..221f1b200 100644
--- a/inc/lang/hr/read.txt
+++ b/inc/lang/hr/read.txt
@@ -1 +1 @@
-Nije dopušteno mijenjati sadržaj ove stranice.
+Ova stranica se može samo čitati. Možete vidjeti kod, ali ga ne možete mijenjati. Javite se vašem administratoru ako se s tim ne slažete. \ No newline at end of file
diff --git a/inc/lang/hr/resendpwd.txt b/inc/lang/hr/resendpwd.txt
index fe2c72bf3..ed25f985c 100644
--- a/inc/lang/hr/resendpwd.txt
+++ b/inc/lang/hr/resendpwd.txt
@@ -1,3 +1,3 @@
====== Slanje nove lozinke ======
-Ispunite potrebne podatke da biste dobili novu lozinku za Vaš korisnički račun.
+Ispunite potrebne podatke da biste dobili novu lozinku za Vaš korisnički račun. Link za potvrdu biti će poslan na Vašu email adresu.
diff --git a/inc/lang/hu/lang.php b/inc/lang/hu/lang.php
index 52422b53c..23419a2bd 100644
--- a/inc/lang/hu/lang.php
+++ b/inc/lang/hu/lang.php
@@ -9,6 +9,7 @@
* @author schilling.janos@gmail.com
* @author Szabó Dávid <szabo.david@gyumolcstarhely.hu>
* @author Sándor TIHANYI <stihanyi+dw@gmail.com>
+ * @author David Szabo <szabo.david@gyumolcstarhely.hu>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -94,7 +95,7 @@ $lang['txt_filename'] = 'feltöltési név (elhagyható)';
$lang['txt_overwrt'] = 'Létező fájl felülírása';
$lang['lockedby'] = 'Jelenleg zárolta:';
$lang['lockexpire'] = 'A zárolás lejár:';
-$lang['willexpire'] = 'Az oldalszerkesztési zárolásod körülbelül egy percen belül lejár.\nAz ütközések elkerülése végett használd az előnézet gombot a zárolási időzítés frissítéséhez.';
+$lang['js']['willexpire'] = 'Az oldalszerkesztési zárolásod körülbelül egy percen belül lejár.\nAz ütközések elkerülése végett használd az előnézet gombot a zárolási időzítés frissítéséhez.';
$lang['js']['notsavedyet'] = 'Elmentetlen változások vannak, amelyek el fognak veszni.
Tényleg ezt akarod?';
$lang['js']['searchmedia'] = 'Fájlok keresése';
@@ -126,7 +127,6 @@ A hivatkozást másolni és beszúrni ettől fügetlenül mndig tudod.';
$lang['js']['linkwiz'] = 'Hivatkozás varázsló';
$lang['js']['linkto'] = 'Hivatkozás erre:';
$lang['js']['del_confirm'] = 'Valóban törölni akarod a kiválasztott elem(ek)et?';
-$lang['js']['mu_btn'] = 'Több fájl feltöltése egyszerre';
$lang['rssfailed'] = 'Hiba történt ennek a betöltésekor: ';
$lang['nothingfound'] = 'Semmit sem találtam.';
$lang['mediaselect'] = 'Médiafájl kiválasztása';
diff --git a/inc/lang/ia/lang.php b/inc/lang/ia/lang.php
index bdfef88f4..8398f29f0 100644
--- a/inc/lang/ia/lang.php
+++ b/inc/lang/ia/lang.php
@@ -95,7 +95,7 @@ $lang['txt_filename'] = 'Incargar como (optional)';
$lang['txt_overwrt'] = 'Reimplaciar le file existente';
$lang['lockedby'] = 'Actualmente serrate per';
$lang['lockexpire'] = 'Serratura expira le';
-$lang['willexpire'] = 'Tu serratura super le modification de iste pagina expirara post un minuta.\nPro evitar conflictos, usa le button Previsualisar pro reinitialisar le timer del serratura.';
+$lang['js']['willexpire'] = 'Tu serratura super le modification de iste pagina expirara post un minuta.\nPro evitar conflictos, usa le button Previsualisar pro reinitialisar le timer del serratura.';
$lang['js']['notsavedyet'] = "Le modificationes non salveguardate essera perdite.\nRealmente continuar?";
$lang['rssfailed'] = 'Un error occurreva durante le obtention de iste syndication:';
$lang['nothingfound'] = 'Nihil ha essite trovate.';
@@ -143,7 +143,6 @@ Tu pote nonobstante copiar e collar le ligamine.';
$lang['js']['linkwiz'] = 'Assistente pro ligamines';
$lang['js']['linkto'] = 'Ligar verso:';
$lang['js']['del_confirm'] = 'Realmente deler le entrata(s) seligite?';
-$lang['js']['mu_btn'] = 'Incargar plure files simultaneemente';
$lang['mediausage'] = 'Usa le syntaxe sequente pro referer a iste file:';
$lang['mediaview'] = 'Vider file original';
$lang['mediaroot'] = 'radice';
diff --git a/inc/lang/id/lang.php b/inc/lang/id/lang.php
index c1480f518..e8026acee 100644
--- a/inc/lang/id/lang.php
+++ b/inc/lang/id/lang.php
@@ -85,7 +85,7 @@ $lang['txt_filename'] = 'Masukkan nama wiki (opsional)';
$lang['txt_overwrt'] = 'File yang telah ada akan ditindih';
$lang['lockedby'] = 'Sedang dikunci oleh';
$lang['lockexpire'] = 'Penguncian artikel sampai dengan';
-$lang['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.';
+$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.';
$lang['js']['notsavedyet'] = "Perubahan yang belum disimpan akan hilang.\nYakin akan dilanjutkan?";
$lang['rssfailed'] = 'Error terjadi saat mengambil feed: ';
$lang['nothingfound'] = 'Tidak menemukan samasekali.';
diff --git a/inc/lang/is/lang.php b/inc/lang/is/lang.php
index 7388e6908..0e281e58d 100644
--- a/inc/lang/is/lang.php
+++ b/inc/lang/is/lang.php
@@ -45,8 +45,6 @@ $lang['btn_backlink'] = 'Hvað tengist hingað';
$lang['btn_backtomedia'] = 'Aftur til miðlaskrá';
$lang['btn_subscribe'] = 'Vakta';
$lang['btn_unsubscribe'] = 'Afvakta';
-$lang['btn_subscribens'] = 'Vakta breytingar á nafnrými';
-$lang['btn_unsubscribens'] = 'Afvakta breytingar á nafnrými';
$lang['btn_profile'] = 'Uppfæra notanda';
$lang['btn_reset'] = 'Endurstilla';
$lang['btn_resendpwd'] = 'Senda nýtt aðgangsorð með tölvupósti';
diff --git a/inc/lang/it/lang.php b/inc/lang/it/lang.php
index 682f5b8c2..9f4d42004 100644
--- a/inc/lang/it/lang.php
+++ b/inc/lang/it/lang.php
@@ -98,7 +98,7 @@ $lang['txt_filename'] = 'Carica come (opzionale)';
$lang['txt_overwrt'] = 'Sovrascrivi file esistente';
$lang['lockedby'] = 'Attualmente bloccato da';
$lang['lockexpire'] = 'Il blocco scade alle';
-$lang['willexpire'] = 'Il tuo blocco su questa pagina scadrà tra circa un minuto.\nPer evitare incongruenze usa il pulsante di anteprima per prolungare il periodo di blocco.';
+$lang['js']['willexpire'] = 'Il tuo blocco su questa pagina scadrà tra circa un minuto.\nPer evitare incongruenze usa il pulsante di anteprima per prolungare il periodo di blocco.';
$lang['js']['notsavedyet'] = 'Le modifiche non salvate andranno perse.';
$lang['js']['searchmedia'] = 'Cerca file';
$lang['js']['keepopen'] = 'Tieni la finestra aperta durante la selezione';
@@ -129,7 +129,6 @@ $lang['js']['nosmblinks'] = 'I collegamenti con le risorse condivise di Win
$lang['js']['linkwiz'] = 'Collegamento guidato';
$lang['js']['linkto'] = 'Collega a:';
$lang['js']['del_confirm'] = 'Eliminare veramente questa voce?';
-$lang['js']['mu_btn'] = 'Carica più di un file alla volta';
$lang['rssfailed'] = 'Si è verificato un errore cercando questo feed: ';
$lang['nothingfound'] = 'Nessun risultato trovato.';
$lang['mediaselect'] = 'Selezione dei file';
diff --git a/inc/lang/ja/lang.php b/inc/lang/ja/lang.php
index e8999e05b..1eeb6bb73 100644
--- a/inc/lang/ja/lang.php
+++ b/inc/lang/ja/lang.php
@@ -92,7 +92,7 @@ $lang['txt_filename'] = '名前を変更してアップロード(オ
$lang['txt_overwrt'] = '既存のファイルを上書き';
$lang['lockedby'] = 'この文書は次のユーザによってロックされています';
$lang['lockexpire'] = 'ロック期限:';
-$lang['willexpire'] = '編集中の文書はロック期限を過ぎようとしています。このままロックする場合は、一度文書の確認を行って期限をリセットしてください。';
+$lang['js']['willexpire'] = '編集中の文書はロック期限を過ぎようとしています。このままロックする場合は、一度文書の確認を行って期限をリセットしてください。';
$lang['js']['notsavedyet'] = '変更は保存されません。このまま処理を続けてよろしいですか?';
$lang['js']['searchmedia'] = 'ファイル検索';
$lang['js']['keepopen'] = '選択中はウィンドウを閉じない';
@@ -123,7 +123,6 @@ $lang['js']['nosmblinks'] = 'ウィンドウズの共有フォルダへリ
$lang['js']['linkwiz'] = 'リンクウィザード';
$lang['js']['linkto'] = 'リンク先:';
$lang['js']['del_confirm'] = '選択した項目を本当に削除しますか?';
-$lang['js']['mu_btn'] = '複数のファイルを一度にアップロード';
$lang['rssfailed'] = 'RSSの取得に失敗しました:';
$lang['nothingfound'] = '該当文書はありませんでした。';
$lang['mediaselect'] = 'メディアファイルを選択';
diff --git a/inc/lang/kk/lang.php b/inc/lang/kk/lang.php
new file mode 100644
index 000000000..f9ea0bced
--- /dev/null
+++ b/inc/lang/kk/lang.php
@@ -0,0 +1,116 @@
+<?php
+/**
+ * kazakh language file
+ *
+ * @author Nurgozha Kaliaskarov astana08@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'] = 'Жазылуларды басқару';
+$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['loggedinas'] = 'түпнұсқамен кірген';
+$lang['user'] = 'Түпнұсқа';
+$lang['pass'] = 'Құпиясөз';
+$lang['newpass'] = 'Жаңа құпиясөз';
+$lang['oldpass'] = 'Ағымдағы құпиясөзді растау';
+$lang['passchk'] = 'Тағы бір рет';
+$lang['remember'] = 'Мені сақтау';
+$lang['fullname'] = 'Шын аты';
+$lang['email'] = 'Е-пошта';
+$lang['profile'] = 'Пайдаланушының профилі';
+$lang['badlogin'] = 'Кешріңіз, түпнұсқа әлде құпиясөз дұрыс емес';
+$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'] = 'Бұл wiki профиль өзертуді қолдамайды';
+$lang['profnochange'] = 'Өзгеріс жоқ, істейтін ештеңе жоқ.';
+$lang['profnoempty'] = 'Бос есім не email рұқсат етілмейді.';
+$lang['profchanged'] = 'Пайдаланушы профилі сәтті жаңартылған.';
+$lang['pwdforget'] = 'Құпиясөзіңізді ұмыттыңызба? Жаңадан біреуін алыңыз';
+$lang['resendna'] = 'Бұл wiki құпиясөзді қайта жіберуді қолдамайды.';
+$lang['resendpwd'] = 'Келесіге жаңа құпиясөзді жіберу ';
+$lang['resendpwdmissing'] = 'Кешіріңіз, барлық тармақтары толтыруыңыз керек.';
+$lang['resendpwdnouser'] = 'Кешіріңіз, бұл пайдаланушыны дерекқорымызда тапқан жоқпыз.';
+$lang['resendpwdbadauth'] = 'Кешіріңіз, бұл түпнұсқалық коды бұрыс. Толық растау сілтемені пайдалануыңызды тексеріңіз.';
+$lang['resendpwdconfirm'] = 'Растау сілтеме email арқылы жіберілді.';
+$lang['resendpwdsuccess'] = 'Сіздің жаңа құпиясөзіңіз email арқылы жіберілді.';
+$lang['license'] = 'Басқаша көрсетілген болмаса, бұл wiki-дің мазмұны келесі лицензия бойынша беріледі:';
+$lang['licenseok'] = 'Ескерту: бұл бетті өңдеуіңізбен мазмұныңыз келесі лицензия бойынша беруге келесесіз:';
+$lang['searchmedia'] = 'Іздеу файлдың атауы:';
+$lang['searchmedia_in'] = '%-мен іздеу:';
+$lang['txt_upload'] = 'Еңгізетін файлды таңдау';
+$lang['txt_filename'] = 'Келесідей еңгізу (қалауынша)';
+$lang['txt_overwrt'] = 'Бар файлды қайта жазу';
+$lang['lockedby'] = 'Осы уақытта тойтарылған';
+$lang['lockexpire'] = 'Тойтару келесі уақытта бітеді';
+$lang['js']['willexpire'] = 'Бұл бетті түзеу тойтаруыңыз бір минутта бітеді. Қақтығыс болмау және тойтару таймерді түсіру үшін қарап шығу пернені басыңыз.';
+$lang['js']['notsavedyet'] = 'Сақталмаған өзгерістер жоғалатын болады.';
+$lang['js']['searchmedia'] = 'Файлдарды іздеу';
+$lang['js']['keepopen'] = 'Таңдаған соң терезе жаппаңыз';
+$lang['js']['hidedetails'] = 'Ұсақтарды жасыру';
+$lang['js']['mediatitle'] = 'Султеме теңшелімдері';
+$lang['js']['mediadisplay'] = 'Сілтеме түрі';
+$lang['js']['mediaalign'] = 'Тегістеуі';
+$lang['js']['mediasize'] = 'Сүреттің өлшемі';
+$lang['js']['mediatarget'] = 'Сілтеме нысанасы';
+$lang['js']['mediaclose'] = 'Жабу';
+$lang['js']['mediainsert'] = 'Еңгізу';
+$lang['js']['mediadisplayimg'] = 'Бұл сүретті көрсету';
+$lang['js']['mediadisplaylnk'] = 'Бұл сілтемені ғана көрсету,';
+$lang['js']['mediasmall'] = 'Шағын нұсқасы';
+$lang['js']['mediamedium'] = 'Орташа нұсқасы';
+$lang['js']['medialarge'] = 'Үлкен нұсқасы';
+$lang['js']['mediaoriginal'] = 'Түпнұсқалық нұсқасы';
+$lang['js']['medialnk'] = 'Толық бетке сілтеме';
+$lang['js']['mediadirect'] = 'Түпнұсқалыққа тұра сілтемесі';
+$lang['js']['medianolnk'] = 'Сілтеме жоқ';
+$lang['js']['medianolink'] = 'Суретті сілтетпеу';
+$lang['js']['medialeft'] = 'Сүретті сол жаққа тегістеу';
+$lang['js']['mediaright'] = 'Сүретті оң жаққа тегістеу';
+$lang['js']['mediacenter'] = 'Сүретті ортаға тегістеу';
+$lang['js']['medianoalign'] = 'Тегістеусіз';
diff --git a/inc/lang/km/lang.php b/inc/lang/km/lang.php
index 90cad3133..68587e90f 100644
--- a/inc/lang/km/lang.php
+++ b/inc/lang/km/lang.php
@@ -88,7 +88,7 @@ $lang['txt_filename'] = 'រុញឡើងជា (ស្រេច​ចិត
$lang['txt_overwrt'] = 'កត់ពីលើ';//'Overwrite existing file';
$lang['lockedby'] = 'ឥឡូវនេះចកជាប់​';
$lang['lockexpire'] = 'សោជាប់ផុត​កំណត់ម៉ោង';
-$lang['willexpire'] = 'សោអ្នកចំពោះកែតម្រូវទំព័រនេះ ហួសពែលក្នុងមួយនាទី។\nកុំឲ្យមានជម្លោះ ប្រើ «បង្ហាញ»​ ទៅកំណត់​ឡើង​វិញ។';
+$lang['js']['willexpire'] = 'សោអ្នកចំពោះកែតម្រូវទំព័រនេះ ហួសពែលក្នុងមួយនាទី។\nកុំឲ្យមានជម្លោះ ប្រើ «បង្ហាញ»​ ទៅកំណត់​ឡើង​វិញ។';
$lang['js']['notsavedyet'] = "កម្រែមិនទានរុក្សាទកត្រូវបោះបង់។\nបន្តទៅទាឬទេ?";
$lang['rssfailed'] = 'មានកំហុសពេលទៅ​ប្រមូល​យកមតិ​ព័ត៌មាន៖ ';
diff --git a/inc/lang/ko/lang.php b/inc/lang/ko/lang.php
index c85a66d38..91825c797 100644
--- a/inc/lang/ko/lang.php
+++ b/inc/lang/ko/lang.php
@@ -93,7 +93,7 @@ $lang['txt_filename'] = '업로드 파일 이름을 입력합니다.(
$lang['txt_overwrt'] = '새로운 파일로 이전 파일을 교체합니다.';
$lang['lockedby'] = '현재 잠금 사용자';
$lang['lockexpire'] = '잠금 해제 시간';
-$lang['willexpire'] = '잠시 후 편집 잠금이 해제됩니다.\n편집 충돌을 피하려면 미리보기를 눌러 잠금 시간을 다시 설정하기 바랍니다.';
+$lang['js']['willexpire'] = '잠시 후 편집 잠금이 해제됩니다.\n편집 충돌을 피하려면 미리보기를 눌러 잠금 시간을 다시 설정하기 바랍니다.';
$lang['js']['notsavedyet'] = '저장하지 않은 변경은 지워집니다.
계속하시겠습니까?';
$lang['js']['searchmedia'] = '파일 찾기';
@@ -125,7 +125,6 @@ $lang['js']['nosmblinks'] = '윈도우 공유 파일과의 연결은 MS 인
$lang['js']['linkwiz'] = '링크 마법사';
$lang['js']['linkto'] = '다음으로 연결:';
$lang['js']['del_confirm'] = '정말로 선택된 항목(들)을 삭제하시겠습니까?';
-$lang['js']['mu_btn'] = '여러 파일들을 한번에 업로드합니다.';
$lang['rssfailed'] = 'feed 가져오기 실패: ';
$lang['nothingfound'] = '아무 것도 없습니다.';
$lang['mediaselect'] = '미디어 파일 선택';
diff --git a/inc/lang/ku/lang.php b/inc/lang/ku/lang.php
index 9bed43cd1..63ccafa35 100644
--- a/inc/lang/ku/lang.php
+++ b/inc/lang/ku/lang.php
@@ -60,7 +60,7 @@ $lang['txt_filename'] = 'Enter wikiname (optional)';
$lang['txt_overwrt'] = 'Overwrite existing file';
$lang['lockedby'] = 'Currently locked by';
$lang['lockexpire'] = 'Lock expires at';
-$lang['willexpire'] = 'Your lock for editing this page is about to expire in a minute.\nTo avoid conflicts use the preview button to reset the locktimer.';
+$lang['js']['willexpire'] = 'Your lock for editing this page is about to expire in a minute.\nTo avoid conflicts use the preview button to reset the locktimer.';
$lang['js']['notsavedyet'] = "Unsaved changes will be lost.\nReally continue?";
diff --git a/inc/lang/la/lang.php b/inc/lang/la/lang.php
index d10c094f8..fd34a4ef8 100644
--- a/inc/lang/la/lang.php
+++ b/inc/lang/la/lang.php
@@ -94,7 +94,7 @@ $lang['txt_filename'] = 'Onerare (optio):';
$lang['txt_overwrt'] = 'Documento ueteri imponere:';
$lang['lockedby'] = 'Nunc hoc intercludit';
$lang['lockexpire'] = 'Hoc apertum';
-$lang['willexpire'] = 'Interclusio paginae recensendae uno minuto finita est.\nUt errores uites, \'praeuisio\' preme ut interclusionem ripristines.';
+$lang['js']['willexpire'] = 'Interclusio paginae recensendae uno minuto finita est.\nUt errores uites, \'praeuisio\' preme ut interclusionem ripristines.';
$lang['js']['notsavedyet'] = 'Res non seruatae amissurae sunt.';
$lang['js']['searchmedia'] = 'Quaere inter documenta';
$lang['js']['keepopen'] = 'Fenestram apertam tene';
@@ -125,7 +125,6 @@ Adhuc transcribere nexum potes.';
$lang['js']['linkwiz'] = 'Connectendi ductor';
$lang['js']['linkto'] = 'Nexum ad:';
$lang['js']['del_confirm'] = 'Delere electas res uin?';
-$lang['js']['mu_btn'] = 'Plura documenta uno tempore onerare';
$lang['rssfailed'] = 'Error in restituendo ';
$lang['nothingfound'] = 'Nihil inuentum est.';
$lang['mediaselect'] = 'Documenta uisiua:';
diff --git a/inc/lang/lb/lang.php b/inc/lang/lb/lang.php
index 09fc41f08..191a9bab5 100644
--- a/inc/lang/lb/lang.php
+++ b/inc/lang/lb/lang.php
@@ -84,7 +84,7 @@ $lang['txt_filename'] = 'Eroplueden als (optional)';
$lang['txt_overwrt'] = 'Bestehend Datei iwwerschreiwen';
$lang['lockedby'] = 'Am Moment gespaart vun';
$lang['lockexpire'] = 'D\'Spär leeft of ëm';
-$lang['willexpire'] = 'Deng Spär fir d\'Säit ze änneren leeft an enger Minutt of.\nFir Konflikter ze verhënneren, dréck op Kucken ouni ofzespäicheren.';
+$lang['js']['willexpire'] = 'Deng Spär fir d\'Säit ze änneren leeft an enger Minutt of.\nFir Konflikter ze verhënneren, dréck op Kucken ouni ofzespäicheren.';
$lang['js']['notsavedyet'] = "Net gespäicher Ännerunge gi verluer.\nWierklech weiderfueren?";
$lang['rssfailed'] = 'Et ass e Feeler virkomm beim erofluede vun dësem Feed: ';
$lang['nothingfound'] = 'Näischt fond.';
diff --git a/inc/lang/lt/lang.php b/inc/lang/lt/lang.php
index 6ae5f6c73..d14a0695a 100644
--- a/inc/lang/lt/lang.php
+++ b/inc/lang/lt/lang.php
@@ -41,8 +41,6 @@ $lang['btn_backlink'] = 'Atgalinės nuorodos';
$lang['btn_backtomedia'] = 'Atgal į Mediabylos išsirinkimą';
$lang['btn_subscribe'] = 'Užsisakyti keitimų prenumeratą';
$lang['btn_unsubscribe'] = 'Atsisakyti keitimų prenumeratos';
-$lang['btn_subscribens'] = 'Užsakyti vardų srities prenumeratą';
-$lang['btn_unsubscribens'] = 'Atsisakyti vardų srities prenumeratos';
$lang['btn_profile'] = 'Atnaujinti profilį';
$lang['btn_reset'] = 'Atstata';
$lang['btn_resendpwd'] = 'Išsiųsti naują slaptažodį';
@@ -92,7 +90,7 @@ $lang['txt_filename'] = 'Įveskite wikivardą (nebūtina)';
$lang['txt_overwrt'] = 'Perrašyti egzistuojančią bylą';
$lang['lockedby'] = 'Užrakintas vartotojo';
$lang['lockexpire'] = 'Užraktas bus nuimtas';
-$lang['willexpire'] = 'Šio puslapio redagavimo užrakto galiojimo laikas baigsis po minutės.\nNorėdami išvengti nesklandumų naudokite peržiūros mygtuką ir užraktas atsinaujins.';
+$lang['js']['willexpire'] = 'Šio puslapio redagavimo užrakto galiojimo laikas baigsis po minutės.\nNorėdami išvengti nesklandumų naudokite peržiūros mygtuką ir užraktas atsinaujins.';
$lang['js']['notsavedyet'] = "Pakeitimai nebus išsaugoti.\nTikrai tęsti?";
$lang['rssfailed'] = 'Siunčiant šį feed\'ą įvyko klaida: ';
$lang['nothingfound'] = 'Paieškos rezultatų nėra.';
@@ -115,7 +113,6 @@ $lang['js']['keepopen'] = 'Pažymėjus palikti langą atvertą';
$lang['js']['hidedetails'] = 'Paslėpti Detales';
$lang['js']['nosmblinks'] = 'Nurodos į "Windows shares" veikia tik su Microsoft Internet Explorer naršykle.
Vis dėlto, jūs galite nukopijuoti šią nuorodą.';
-$lang['js']['mu_btn'] = 'Pateikite kelis failus vienu ypu';
$lang['mediausage'] = 'Failo nuorodai užrašyti naudokite tokią sintaksę:';
$lang['mediaview'] = 'Žiūrėti pirminį failą';
$lang['mediaroot'] = 'pradžia (root)';
diff --git a/inc/lang/lv/lang.php b/inc/lang/lv/lang.php
index 519ca231a..205d2e56d 100644
--- a/inc/lang/lv/lang.php
+++ b/inc/lang/lv/lang.php
@@ -45,6 +45,8 @@ $lang['btn_recover'] = 'Atjaunot melnrakstu';
$lang['btn_draftdel'] = 'Dzēst melnrakstu';
$lang['btn_revert'] = 'Atjaunot';
$lang['btn_register'] = 'Reģistrēties';
+$lang['btn_apply'] = 'Labi';
+$lang['btn_media'] = 'Mēdiju pārvaldnieks';
$lang['loggedinas'] = 'Pieteicies kā';
$lang['user'] = 'Lietotājvārds';
$lang['pass'] = 'Parole';
@@ -89,7 +91,7 @@ $lang['txt_filename'] = 'Ievadi vikivārdu (nav obligāts)';
$lang['txt_overwrt'] = 'Aizstāt esošo failu';
$lang['lockedby'] = 'Patlaban bloķējis ';
$lang['lockexpire'] = 'Bloķējums beigsies ';
-$lang['willexpire'] = 'Tavs bloķējums uz šo lapu pēc minūtes beigsies.\nLai izvairītos no konflikta, nospied Iepriekšapskata pogu\n un bloķējuma laiku sāks skaitīt no jauna.';
+$lang['js']['willexpire'] = 'Tavs bloķējums uz šo lapu pēc minūtes beigsies.\nLai izvairītos no konflikta, nospied Iepriekšapskata pogu\n un bloķējuma laiku sāks skaitīt no jauna.';
$lang['js']['notsavedyet'] = 'Veiktas bet nav saglabātas izmaiņas.
Vai tiešām tās nevajag?';
$lang['js']['searchmedia'] = 'Meklēt failus';
@@ -122,6 +124,15 @@ $lang['js']['linkwiz'] = 'Saišu vednis';
$lang['js']['linkto'] = 'Saite uz: ';
$lang['js']['del_confirm'] = 'Dzēst šo šķirkli?';
$lang['js']['mu_btn'] = 'Augšuplādēt uzreiz vairākus failus.';
+$lang['js']['restore_confirm'] = 'Tiešām atjaunot šo versiju';
+$lang['js']['media_diff'] = 'Skatīt atšķirību';
+$lang['js']['media_diff_both'] = 'Blakus';
+$lang['js']['media_diff_opacity'] = 'Pārklāti';
+$lang['js']['media_select'] = 'Norādīt failus...';
+$lang['js']['media_upload_btn'] = 'Augšuplādēt';
+$lang['js']['media_done_btn'] = 'Gatavs';
+$lang['js']['media_drop'] = 'Nomet te augšuplādējamos failus';
+$lang['js']['media_overwrt'] = 'Rakstīt pāri esošajiem failiem';
$lang['rssfailed'] = 'Kļūda saņemot saturu no ';
$lang['nothingfound'] = 'Nekas nav atrasts.';
$lang['mediaselect'] = 'Mēdiju faila izvēle';
@@ -160,7 +171,7 @@ $lang['diff_type'] = 'Skatīt atšķirības:';
$lang['diff_inline'] = 'Iekļauti';
$lang['diff_side'] = 'Blakus';
$lang['line'] = 'Rinda';
-$lang['breadcrumb'] = 'Ceļš';
+$lang['breadcrumb'] = 'Apmeklēts';
$lang['youarehere'] = 'Tu atrodies šeit';
$lang['lastmod'] = 'Labota';
$lang['by'] = ', labojis';
@@ -176,6 +187,10 @@ $lang['mail_changed'] = 'lapa mainīta:';
$lang['mail_subscribe_list'] = 'Nodaļā mainītās lapas:';
$lang['mail_new_user'] = 'Jauns lietotājs:';
$lang['mail_upload'] = 'augšupielādētais fails:';
+$lang['changes_type'] = 'Skatīt izmaiņas';
+$lang['pages_changes'] = 'Lapās';
+$lang['media_changes'] = 'Mēdiju failos';
+$lang['both_changes'] = 'Gan lapās, gan mēdiju failos';
$lang['qb_bold'] = 'Trekninājums';
$lang['qb_italic'] = 'Kursīvs';
$lang['qb_underl'] = 'Pasvītrojums';
@@ -216,6 +231,9 @@ $lang['img_copyr'] = 'Autortiesības';
$lang['img_format'] = 'Formāts';
$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['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.';
@@ -281,3 +299,27 @@ $lang['hours'] = 'pirms %d stundām';
$lang['minutes'] = 'pirms %d minūtēm';
$lang['seconds'] = 'pirms %d sekundēm';
$lang['wordblock'] = 'Grozījumus nevarēju saglabāt, jo tie satur aizliegto vārdu (spamu).';
+$lang['media_uploadtab'] = 'Augšuplādēt';
+$lang['media_searchtab'] = 'Meklēt';
+$lang['media_file'] = 'Fails';
+$lang['media_viewtab'] = 'Skatīt';
+$lang['media_edittab'] = 'Labot';
+$lang['media_historytab'] = 'Vēsture';
+$lang['media_list_thumbs'] = 'Sīktēli';
+$lang['media_list_rows'] = 'Rindas';
+$lang['media_sort_name'] = 'Nosaukums';
+$lang['media_sort_date'] = 'Datums';
+$lang['media_namespaces'] = 'Norādīt nodaļu';
+$lang['media_files'] = 'Faili nodaļā s%';
+$lang['media_upload'] = 'Augšuplādēt nodaļā s%';
+$lang['media_search'] = 'Meklēt nodaļā s%';
+$lang['media_view'] = 's%';
+$lang['media_viewold'] = 's% nodaļā s%';
+$lang['media_edit'] = 'Labot %s';
+$lang['media_history'] = 's% vēsture';
+$lang['media_meta_edited'] = 'metadati laboti';
+$lang['media_perm_read'] = 'Atvainojiet, jums nav tiesību skatīt failus. ';
+$lang['media_perm_upload'] = 'Atvainojiet, jums nav tiesību augšupielādēt. ';
+$lang['media_update'] = 'Augšupielādēt jaunu versiju';
+$lang['media_restore'] = 'Atjaunot šo versiju';
+$lang['plugin_install_err'] = 'Modulis aplami instalēts. Pārdēvē moduļa direktoriju s% par s%.';
diff --git a/inc/lang/mg/lang.php b/inc/lang/mg/lang.php
index 8c95a9e02..4142f00d0 100644
--- a/inc/lang/mg/lang.php
+++ b/inc/lang/mg/lang.php
@@ -54,7 +54,7 @@ $lang['txt_filename'] = 'Ampidiro ny anaran\'ny wiki (tsy voatery)';
$lang['txt_overwrt'] = 'Fafana izay rakitra efa misy?';
$lang['lockedby'] = 'Mbola voahidin\'i';
$lang['lockexpire'] = 'Afaka ny hidy amin\'ny';
-$lang['willexpire'] = 'Efa ho lany fotoana afaka iray minitra ny hidy ahafahanao manova ny pejy.\nMba hialana amin\'ny conflit dia ampiasao ny bokotra topi-maso hamerenana ny timer-n\'ny hidy.';
+$lang['js']['willexpire'] = 'Efa ho lany fotoana afaka iray minitra ny hidy ahafahanao manova ny pejy.\nMba hialana amin\'ny conflit dia ampiasao ny bokotra topi-maso hamerenana ny timer-n\'ny hidy.';
$lang['js']['notsavedyet'] = "Misy fiovana tsy voarakitra, ho very izany ireo.\nAzo antoka fa hotohizana?";
$lang['rssfailed'] = 'An error occured while fetching this feed: ';
diff --git a/inc/lang/mk/lang.php b/inc/lang/mk/lang.php
index 456a5a3d4..ca4a746cd 100644
--- a/inc/lang/mk/lang.php
+++ b/inc/lang/mk/lang.php
@@ -92,7 +92,7 @@ $lang['txt_filename'] = 'Качи како (неморално)';
$lang['txt_overwrt'] = 'Пребриши ја веќе постоечката датотека';
$lang['lockedby'] = 'Моментално заклучена од';
$lang['lockexpire'] = 'Клучот истекува на';
-$lang['willexpire'] = 'Вашиот клуч за уредување на оваа страница ќе истече за една минута.\nЗа да избегнете конфликти и да го ресетирате бројачот за време, искористете го копчето за преглед.';
+$lang['js']['willexpire'] = 'Вашиот клуч за уредување на оваа страница ќе истече за една минута.\nЗа да избегнете конфликти и да го ресетирате бројачот за време, искористете го копчето за преглед.';
$lang['js']['notsavedyet'] = "Незачуваните промени ќе бидат изгубени.\nСакате да продолжите?";
$lang['rssfailed'] = 'Се појави грешка при повлекувањето на овој канал:';
$lang['nothingfound'] = 'Ништо не е пронајдено.';
@@ -117,7 +117,6 @@ $lang['js']['nosmblinks'] = 'Поврзувањето со Windows Shares
$lang['js']['linkwiz'] = 'Волшебник за врски';
$lang['js']['linkto'] = 'Врска до:';
$lang['js']['del_confirm'] = 'Дали навистина да ги избришам избраните датотеки?';
-$lang['js']['mu_btn'] = 'Качете повеќе датотеки наеднаш';
$lang['mediausage'] = 'Користете ја следнава синтакса за референцирање кон оваа датотека:';
$lang['mediaview'] = 'Види ја оригиналната датотека';
$lang['mediaroot'] = 'root';
diff --git a/inc/lang/mr/lang.php b/inc/lang/mr/lang.php
index d991d46cf..63fda3e5a 100644
--- a/inc/lang/mr/lang.php
+++ b/inc/lang/mr/lang.php
@@ -45,8 +45,6 @@ $lang['btn_backlink'] = 'येथे काय जोडले आह
$lang['btn_backtomedia'] = 'परत माध्यम फाइल निवडीकड़े';
$lang['btn_subscribe'] = 'पृष्ठाच्या बदलांची पुरवणी (फीड) लावा ';
$lang['btn_unsubscribe'] = 'पृष्ठाच्या बदलांची पुरवणी (फीड) बंद करा';
-$lang['btn_subscribens'] = 'नामसमुहाच्या (नेमस्पेस) बदलांची पुरवणी (फीड) लावा';
-$lang['btn_unsubscribens'] = 'नामसमुहाच्या (नेमस्पेस) बदलांची पुरवणी (फीड) बंद करा';
$lang['btn_profile'] = 'प्रोफाइल अद्ययावत करा';
$lang['btn_reset'] = 'रिसेट';
$lang['btn_resendpwd'] = 'कृपया परवलीचा नवीन शब्द माझ्या इमेल पत्त्यावर पाठविणे.';
@@ -96,7 +94,7 @@ $lang['txt_filename'] = 'अपलोड उर्फ़ ( वैकल्
$lang['txt_overwrt'] = 'अस्तित्वात असलेल्या फाइलवरच सुरक्षित करा.';
$lang['lockedby'] = 'सध्या लॉक करणारा :';
$lang['lockexpire'] = 'सध्या लॉक करणारा :';
-$lang['willexpire'] = 'हे पृष्ठ संपादित करण्यासाठी मिळालेले लॉक एखाद्या मिनिटात संपणार आहे.\n चुका होऊ नयेत म्हणुन कृपया प्रीव्यू बटन दाबुन लॉक ची वेळ पुन्हा चालू करा.';
+$lang['js']['willexpire'] = 'हे पृष्ठ संपादित करण्यासाठी मिळालेले लॉक एखाद्या मिनिटात संपणार आहे.\n चुका होऊ नयेत म्हणुन कृपया प्रीव्यू बटन दाबुन लॉक ची वेळ पुन्हा चालू करा.';
$lang['js']['notsavedyet'] = "सुरक्षित न केलेले बदल नष्ट होतील. नक्की करू का ?";
$lang['rssfailed'] = 'ही पुरवणी आणण्यात काही चूक झाली:';
$lang['nothingfound'] = 'काही सापडला नाही.';
@@ -118,7 +116,6 @@ $lang['mediafiles'] = 'मध्ये उपलब्ध असल
$lang['js']['keepopen'] = 'निवड केल्यावर विण्डो उघडी ठेवा';
$lang['js']['hidedetails'] = 'सविस्तर मजकूर लपवा';
$lang['js']['nosmblinks'] = 'विन्डोज़ शेअर ला लिंक केल्यास ते फक्त मायक्रोसॉफ़्ट इन्टरनेट एक्स्प्लोरर वरच चालते. तरी तुम्ही लिंक कॉपी करू शकता.';
-$lang['js']['mu_btn'] = 'एक वेळेस अनेक फाइल वापरा';
$lang['mediausage'] = 'ह्या फाइलचा संदर्भ देण्यासाठी खालील सिन्टॅक्स वापरा :';
$lang['mediaview'] = 'मूळ फाइल बघू ';
$lang['mediaroot'] = 'रूट';
diff --git a/inc/lang/ne/lang.php b/inc/lang/ne/lang.php
index e5b30ceaf..97e2dde5c 100644
--- a/inc/lang/ne/lang.php
+++ b/inc/lang/ne/lang.php
@@ -38,8 +38,6 @@ $lang['btn_backlink'] = 'पछाडिका लिङ्कहरु
$lang['btn_backtomedia'] = 'मिडिया छनौटमा फर्कनुहोस्';
$lang['btn_subscribe'] = 'पृष्ठ परिवर्तन ग्राह्य गर्नुहोस्';
$lang['btn_unsubscribe'] = 'पृष्ठ परिवर्तन अग्राह्य गर्नुहोस्';
-$lang['btn_subscribens'] = 'नेमस्पेस परिवर्तन ग्राह्य गर्नुहोस् ';
-$lang['btn_unsubscribens'] = 'नेमस्पेस परिवर्तन अग्राह्य गर्नुहोस् ';
$lang['btn_profile'] = 'प्रोफाइल अध्यावधिक गर्नुहोस् ';
$lang['btn_reset'] = 'पूर्वरुपमा फर्काउनुहोस';
$lang['btn_resendpwd'] = 'नयाँ प्रवेश शव्द(पासवर्ड) पठाउनुहोस् ';
@@ -89,7 +87,7 @@ $lang['txt_filename'] = 'अर्को रुपमा अपलो
$lang['txt_overwrt'] = 'रहेको उहि नामको फाइललाई मेटाउने';
$lang['lockedby'] = 'अहिले ताल्चा लगाइएको';
$lang['lockexpire'] = 'ताल्चा अवधि सकिने :';
-$lang['willexpire'] = 'तपाईलले यो पृष्ठ सम्पादन गर्न लगाउनु भएको ताल्चाको अवधि एक मिनेट भित्र सकिदै छ। \n द्वन्द हुन नदिन पूर्वरुप वा ताल्चा समय परिवर्तन गर्नुहोस् ।';
+$lang['js']['willexpire'] = 'तपाईलले यो पृष्ठ सम्पादन गर्न लगाउनु भएको ताल्चाको अवधि एक मिनेट भित्र सकिदै छ। \n द्वन्द हुन नदिन पूर्वरुप वा ताल्चा समय परिवर्तन गर्नुहोस् ।';
$lang['js']['notsavedyet'] = "तपाईले वचन गर्नु नभएको परिवर्रन हराउने छ। \n साच्चै जारी गर्नुहुन्छ ।";
$lang['rssfailed'] = 'यो फिड लिइ आउदा गल्ति भयो ।';
$lang['nothingfound'] = 'केहि पनि भेटिएन ।';
@@ -110,7 +108,6 @@ $lang['mediafiles'] = ' उपलब्ध फाइलहरु ';
$lang['js']['keepopen'] = 'छनौटमा विन्डो खुला राख्नुहोस् ';
$lang['js']['hidedetails'] = 'जानकारी लुकाउनु होस् ';
$lang['js']['nosmblinks'] = 'विन्डोहरु लिङ्क गर्दा माइक्रो सफ्ट एक्सप्लोररमामात्र काम साझा हुन्छ । तर कपि गर्न र टास्न मिल्छ। ';
-$lang['js']['mu_btn'] = 'धेरै वटा फाइलहरु एकैपटक अपलोड गर्नुहोस् ।';
$lang['mediausage'] = 'फाइललाई रेफरेन्स गर्न निम्न सुत्र प्रयोग गर्नुहोस् :';
$lang['mediaview'] = 'सक्कली फाइल हेर्नुहोस् ';
$lang['mediaroot'] = 'रुट(मूख्य प्रयोगकर्ता)';
diff --git a/inc/lang/nl/lang.php b/inc/lang/nl/lang.php
index 7dbde5ac8..62d23b0d2 100644
--- a/inc/lang/nl/lang.php
+++ b/inc/lang/nl/lang.php
@@ -14,6 +14,7 @@
* @author Matthias Carchon <webmaster@c-mattic.be>
* @author Marijn Hofstra <hofstra.m@gmail.com>
* @author Timon Van Overveldt <timonvo@gmail.com>
+ * @author Jeroen
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -55,6 +56,8 @@ $lang['btn_recover'] = 'Herstel concept';
$lang['btn_draftdel'] = 'Verwijder concept';
$lang['btn_revert'] = 'Herstellen';
$lang['btn_register'] = 'Registreren';
+$lang['btn_apply'] = 'Toepassen';
+$lang['btn_media'] = 'Media beheerder';
$lang['loggedinas'] = 'Ingelogd als';
$lang['user'] = 'Gebruikersnaam';
$lang['pass'] = 'Wachtwoord';
@@ -99,7 +102,7 @@ $lang['txt_filename'] = 'Vul nieuwe naam in (optioneel)';
$lang['txt_overwrt'] = 'Overschrijf bestaand bestand';
$lang['lockedby'] = 'Momenteel in gebruik door';
$lang['lockexpire'] = 'Exclusief gebruiksrecht vervalt op';
-$lang['willexpire'] = 'Je exclusieve gebruiksrecht voor het aanpassen van deze pagina verloopt over een minuut.\nKlik op de Voorbeeld-knop om het exclusieve gebruiksrecht te verlengen.';
+$lang['js']['willexpire'] = 'Je exclusieve gebruiksrecht voor het aanpassen van deze pagina verloopt over een minuut.\nKlik op de Voorbeeld-knop om het exclusieve gebruiksrecht te verlengen.';
$lang['js']['notsavedyet'] = 'Nog niet bewaarde wijzigingen zullen verloren gaan.
Weet je zeker dat je wilt doorgaan?';
$lang['js']['searchmedia'] = 'Zoek naar bestanden';
@@ -131,7 +134,14 @@ Je kan de link wel kopiëren en plakken.';
$lang['js']['linkwiz'] = 'Linkwizard';
$lang['js']['linkto'] = 'Link naar:';
$lang['js']['del_confirm'] = 'Item(s) verwijderen?';
-$lang['js']['mu_btn'] = 'Meerdere files tegelijk uploaden';
+$lang['js']['restore_confirm'] = 'Werkelijk deze versie terugzetten?';
+$lang['js']['media_diff'] = 'Verschillen bekijken:';
+$lang['js']['media_diff_both'] = 'Naast elkaar';
+$lang['js']['media_diff_opacity'] = 'Doorschijnend';
+$lang['js']['media_select'] = 'Selecteer bestanden';
+$lang['js']['media_done_btn'] = 'Klaar';
+$lang['js']['media_cancel'] = 'Verwijderen';
+$lang['js']['media_overwrt'] = 'Bestaande bestanden overschrijven';
$lang['rssfailed'] = 'Er is een fout opgetreden bij het ophalen van de feed: ';
$lang['nothingfound'] = 'Er werd niets gevonden.';
$lang['mediaselect'] = 'Bestandsselectie';
@@ -186,6 +196,9 @@ $lang['mail_changed'] = 'pagina aangepast:';
$lang['mail_subscribe_list'] = 'Pagina\'s veranderd in namespace:';
$lang['mail_new_user'] = 'nieuwe gebruiker:';
$lang['mail_upload'] = 'bestand geüpload:';
+$lang['pages_changes'] = 'Pagina\'s';
+$lang['media_changes'] = 'Media bestanden';
+$lang['both_changes'] = 'Zowel pagina\'s als media bestanden';
$lang['qb_bold'] = 'Vette tekst';
$lang['qb_italic'] = 'Cursieve tekst';
$lang['qb_underl'] = 'Onderstreepte tekst';
@@ -226,6 +239,9 @@ $lang['img_copyr'] = 'Copyright';
$lang['img_format'] = 'Formaat';
$lang['img_camera'] = 'Camera';
$lang['img_keywords'] = 'Trefwoorden';
+$lang['img_width'] = 'Breedte';
+$lang['img_height'] = 'Hoogte';
+$lang['img_manager'] = 'In media beheerder 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 emailadres geassocieerd met uw account, u kunt daardoor niet worden ingeschreven.';
@@ -290,3 +306,22 @@ $lang['hours'] = '%d uren geleden';
$lang['minutes'] = '%d minuten geleden';
$lang['seconds'] = '%d seconden geleden';
$lang['wordblock'] = 'Uw wijziging is niet opgeslagen omdat deze niet-toegestane tekst bevat (spam).';
+$lang['media_searchtab'] = 'Zoeken';
+$lang['media_file'] = 'Bestand';
+$lang['media_viewtab'] = 'Beeld';
+$lang['media_edittab'] = 'Bewerken';
+$lang['media_historytab'] = 'Geschiedenis';
+$lang['media_list_rows'] = 'Regels';
+$lang['media_sort_name'] = 'Naam';
+$lang['media_sort_date'] = 'Datum';
+$lang['media_namespaces'] = 'Kies naamruimte';
+$lang['media_files'] = 'Bestanden in %s';
+$lang['media_search'] = 'Zoeken in %s';
+$lang['media_view'] = '%s';
+$lang['media_edit'] = '%s bewerken';
+$lang['media_history'] = 'Geschiedenis van %s';
+$lang['media_meta_edited'] = 'Metagegevens bewerkt';
+$lang['media_perm_read'] = 'Sorry, u heeft niet voldoende rechten om bestanden te lezen.';
+$lang['media_perm_upload'] = 'Sorry, u heeft niet voldoende rechten om bestanden te uploaden.';
+$lang['media_restore'] = 'Deze versie terugzetten';
+$lang['plugin_install_err'] = 'Plugin is juist geinstalleerd. Hernoem plugin map \'%s\' naar \'%s\'.';
diff --git a/inc/lang/no/adminplugins.txt b/inc/lang/no/adminplugins.txt
index 32499a2e4..091ae4d7e 100644
--- a/inc/lang/no/adminplugins.txt
+++ b/inc/lang/no/adminplugins.txt
@@ -1 +1 @@
-====== Ekstra tilleggene ====== \ No newline at end of file
+====== Ekstra tillegg ====== \ No newline at end of file
diff --git a/inc/lang/no/conflict.txt b/inc/lang/no/conflict.txt
index 89479af4f..855034685 100644
--- a/inc/lang/no/conflict.txt
+++ b/inc/lang/no/conflict.txt
@@ -1,4 +1,4 @@
-====== Det fins en nyere versjon ======
+====== Det finnes en nyere versjon ======
Det fins en nyere versjon av dokumentet du har redigert. Dette kan skje når en annen bruker redigerer dokumentet samtidig med deg.
diff --git a/inc/lang/no/lang.php b/inc/lang/no/lang.php
index d2be945e6..88d21b536 100644
--- a/inc/lang/no/lang.php
+++ b/inc/lang/no/lang.php
@@ -15,11 +15,13 @@
* @author Knut Staring <knutst@gmail.com>
* @author Lisa Ditlefsen <lisa@vervesearch.com>
* @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Rune Rasmussen syntaxerror.no@gmail.com
+ * @author Jon Bøe <jonmagneboe@hotmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
-$lang['doublequoteopening'] = '“';
-$lang['doublequoteclosing'] = '”';
+$lang['doublequoteopening'] = '«';
+$lang['doublequoteclosing'] = '»';
$lang['singlequoteopening'] = '‘';
$lang['singlequoteclosing'] = '’';
$lang['apostrophe'] = '\'';
@@ -48,9 +50,6 @@ $lang['btn_back'] = 'Tilbake';
$lang['btn_backlink'] = 'Tilbakelenker';
$lang['btn_backtomedia'] = 'Tilbake til valg av mediafil';
$lang['btn_subscribe'] = 'Abonner på endringer';
-$lang['btn_unsubscribe'] = 'Ikke abonner på endringer';
-$lang['btn_subscribens'] = 'Abonner på endringer i navnerom';
-$lang['btn_unsubscribens'] = 'Stopp abonnement på endringer i navnerom';
$lang['btn_profile'] = 'Oppdater profil';
$lang['btn_reset'] = 'Tilbakestill';
$lang['btn_resendpwd'] = 'Send nytt passord';
@@ -59,6 +58,8 @@ $lang['btn_recover'] = 'Gjennvinn kladd';
$lang['btn_draftdel'] = 'Slett kladd';
$lang['btn_revert'] = 'Gjenopprette';
$lang['btn_register'] = 'Registrer deg';
+$lang['btn_apply'] = 'Bruk';
+$lang['btn_media'] = 'Mediefiler';
$lang['loggedinas'] = 'Innlogget som';
$lang['user'] = 'Brukernavn';
$lang['pass'] = 'Passord';
@@ -103,8 +104,49 @@ $lang['txt_filename'] = 'Skriv inn wikinavn (alternativt)';
$lang['txt_overwrt'] = 'Overskriv eksisterende fil';
$lang['lockedby'] = 'Stengt av';
$lang['lockexpire'] = 'Avstengningen opphører';
-$lang['willexpire'] = 'Din redigeringslås for dette dokumentet kommer snart til å opphøre.\nFor å unngå versjonskonflikter bør du forhåndsvise dokumentet ditt for å forlenge redigeringslåsen.';
-$lang['js']['notsavedyet'] = "Ulagrede endringer vil gå tapt.\nVil du fortsette?";
+$lang['js']['willexpire'] = 'Din redigeringslås for dette dokumentet kommer snart til å opphøre.\nFor å unngå versjonskonflikter bør du forhåndsvise dokumentet ditt for å forlenge redigeringslåsen.';
+$lang['js']['notsavedyet'] = 'Ulagrede endringer vil gå tapt.
+Vil du fortsette?';
+$lang['js']['searchmedia'] = 'Søk for filer';
+$lang['js']['keepopen'] = 'Hold vindu åpent ved valg';
+$lang['js']['hidedetails'] = 'Skjul detaljer';
+$lang['js']['mediatitle'] = 'Lenkeinnstillinger';
+$lang['js']['mediadisplay'] = 'Lenketype';
+$lang['js']['mediaalign'] = 'Justering';
+$lang['js']['mediasize'] = 'Bildestørrelse';
+$lang['js']['mediatarget'] = 'Lenkemål';
+$lang['js']['mediaclose'] = 'Lukk';
+$lang['js']['mediainsert'] = 'Sett inn';
+$lang['js']['mediadisplayimg'] = 'Vis bilde';
+$lang['js']['mediadisplaylnk'] = 'Vis bare lenken';
+$lang['js']['mediasmall'] = 'Liten versjon';
+$lang['js']['mediamedium'] = 'Medium versjon';
+$lang['js']['medialarge'] = 'Stor versjon';
+$lang['js']['mediaoriginal'] = 'Original versjon';
+$lang['js']['medialnk'] = 'Lenke til detaljeside';
+$lang['js']['mediadirect'] = 'Direktelenke til original';
+$lang['js']['medianolnk'] = 'Ingen lenke';
+$lang['js']['medianolink'] = 'Ikke lenk bilde';
+$lang['js']['medialeft'] = 'Venstrejuster bilde';
+$lang['js']['mediaright'] = 'Høyrejuster bilde';
+$lang['js']['mediacenter'] = 'Midtstill bilde';
+$lang['js']['medianoalign'] = 'Ingen justering';
+$lang['js']['nosmblinks'] = 'Lenker til Windows-ressurser fungerer bare i Microsoft sin Internet Explorer.
+Du kan fortsatt kopiere og lime inn lenken.';
+$lang['js']['linkwiz'] = 'guide til lenker';
+$lang['js']['linkto'] = 'Lenke til:';
+$lang['js']['del_confirm'] = 'Slett denne oppføringen?';
+$lang['js']['restore_confirm'] = 'Er du sikker på at du vil gjenopprette denne versjonen?';
+$lang['js']['media_diff'] = 'Vis forskjeller:';
+$lang['js']['media_diff_both'] = 'Side ved side';
+$lang['js']['media_diff_opacity'] = 'Gjennomskinnelighet';
+$lang['js']['media_diff_portions'] = 'Glidebryter';
+$lang['js']['media_select'] = 'Velg filer…';
+$lang['js']['media_upload_btn'] = 'Last opp';
+$lang['js']['media_done_btn'] = 'Ferdig';
+$lang['js']['media_drop'] = 'Dra filer hit for å laste dem opp';
+$lang['js']['media_cancel'] = 'fjern';
+$lang['js']['media_overwrt'] = 'Erstatt eksisterende filer';
$lang['rssfailed'] = 'En feil oppstod da denne kilden skulle hentes:';
$lang['nothingfound'] = 'Ingen data funnet.';
$lang['mediaselect'] = 'Valg av mediafil';
@@ -122,15 +164,7 @@ $lang['deletefail'] = '"%s" kunne ikke slettes - sjekk rettighetene.'
$lang['mediainuse'] = 'Filen "%s" har ikke biltt slettet - den er fortsatt i bruk.';
$lang['namespaces'] = 'Navnerom';
$lang['mediafiles'] = 'Tilgjengelige filer i';
-$lang['js']['searchmedia'] = 'Søk for filer';
-$lang['js']['keepopen'] = 'Hold vindu åpent ved valg';
-$lang['js']['hidedetails'] = 'Skjul detaljer';
-$lang['js']['nosmblinks'] = 'Lenker til Windows-ressurser fungerer bare i Microsoft sin Internet Explorer.
-Du kan fortsatt kopiere og lime inn lenken.';
-$lang['js']['linkwiz'] = 'guide til lenker';
-$lang['js']['linkto'] = 'Lenke til:';
-$lang['js']['del_confirm'] = 'Slett denne oppføringen?';
-$lang['js']['mu_btn'] = 'Last opp flere filer samtidig';
+$lang['accessdenied'] = 'Du har ikke tilgang til å se denne siden';
$lang['mediausage'] = 'Bruk følgende syntaks til å refferer til denne filen:';
$lang['mediaview'] = 'Vis original fil';
$lang['mediaroot'] = 'rot';
@@ -146,6 +180,10 @@ $lang['current'] = 'nåværende versjon';
$lang['yours'] = 'Din versjon';
$lang['diff'] = 'Vis forskjeller mot nåværende versjon';
$lang['diff2'] = 'Vis forskjeller mellom valgte versjoner';
+$lang['difflink'] = 'Lenk til denne sammenligningen';
+$lang['diff_type'] = 'Vis forskjeller:';
+$lang['diff_inline'] = 'I teksten';
+$lang['diff_side'] = 'Side ved side';
$lang['line'] = 'Linje';
$lang['breadcrumb'] = 'Spor';
$lang['youarehere'] = 'Du er her';
@@ -160,8 +198,13 @@ $lang['noflash'] = 'For at dette innholdet skal vises må du ha <a
$lang['download'] = 'Last ned utdraget';
$lang['mail_newpage'] = 'side lagt til:';
$lang['mail_changed'] = 'side endret:';
+$lang['mail_subscribe_list'] = 'side endret i \'namespace\':';
$lang['mail_new_user'] = 'ny bruker:';
$lang['mail_upload'] = 'fil opplastet:';
+$lang['changes_type'] = 'Vis endringer av';
+$lang['pages_changes'] = 'Sider';
+$lang['media_changes'] = 'Mediefiler';
+$lang['both_changes'] = 'Både sider og mediefiler';
$lang['qb_bold'] = 'Fet tekst';
$lang['qb_italic'] = 'Kursiv tekst';
$lang['qb_underl'] = 'Understreket tekst';
@@ -202,11 +245,25 @@ $lang['img_copyr'] = 'Opphavsrett';
$lang['img_format'] = 'Format';
$lang['img_camera'] = 'Kamera';
$lang['img_keywords'] = 'Nøkkelord';
-$lang['subscribe_success'] = 'Lagt til %s som abonnent av listen for %s';
-$lang['subscribe_error'] = 'En feil oppstod når %s skulle legges til som abonnent av listen for %s';
-$lang['subscribe_noaddress'] = 'Det er ingen adresse assosiert med din login. Du kan dermed ikke bli lagt til som abonnent av listen.';
-$lang['unsubscribe_success'] = 'Fjernet %s som abonnent for listen %s';
-$lang['unsubscribe_error'] = 'En feil oppstod når %s skulle fjernes som abonnent fra listen for %s';
+$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.';
+$lang['subscr_unsubscribe_success'] = 'Avsluttet %s sitt abonnement på %s';
+$lang['subscr_unsubscribe_error'] = 'Klarte ikke å avslutte %s sitt abonnement på %s';
+$lang['subscr_already_subscribed'] = '%s abonnerer allerede på %s';
+$lang['subscr_not_subscribed'] = '%s abonnerer ikke på %s';
+$lang['subscr_m_not_subscribed'] = 'Du abonnerer ikke på denne sida eller dette navnerommet';
+$lang['subscr_m_new_header'] = 'Legg til abonnement';
+$lang['subscr_m_current_header'] = 'Gjeldende abonnementer';
+$lang['subscr_m_unsubscribe'] = 'Avmeld';
+$lang['subscr_m_subscribe'] = 'Påmeld';
+$lang['subscr_m_receive'] = 'Motta';
+$lang['subscr_style_every'] = 'e-post for alle endringer';
+$lang['subscr_style_digest'] = 'e-post med sammendrag av endringer for hver side (%.2f dager mellom hver)';
+$lang['subscr_style_list'] = 'liste med sider som er endra siden forrige e-post (%.2f dager mellom hver)';
$lang['authmodfailed'] = 'Feilkonfigurert brukerautorisasjon. Vennligst innformer Wiki-admin.';
$lang['authtempfail'] = 'Brukerautorisasjon er midlertidig utilgjengelig. Om dette vedvarer, vennligst informer Wiki-admin.';
$lang['i_chooselang'] = 'Velg ditt språk';
@@ -234,6 +291,7 @@ $lang['i_pol0'] = 'Åpen Wiki (les, skriv og opplasting for alle)
$lang['i_pol1'] = 'Offentlig Wiki (les for alle, skriving og opplasting bare for registrerte brukere)';
$lang['i_pol2'] = 'Lukket Wiki (les, skriv og opplasting bare for registrerte brukere)';
$lang['i_retry'] = 'Prøv igjen';
+$lang['i_license'] = 'Velg lisens som du vil legge ut innholdet under:';
$lang['mu_intro'] = 'Her kan du laste opp flere filer samtidig. Klikk på utforsk-knappen for å legge dem til i køen. Klikk på "last opp" når du er ferdig med å velge filene. ';
$lang['mu_gridname'] = 'Filnavn';
$lang['mu_gridsize'] = 'Størrelse';
@@ -257,3 +315,28 @@ $lang['days'] = '%d dager siden';
$lang['hours'] = '%d timer siden';
$lang['minutes'] = '%d minutter siden';
$lang['seconds'] = '%d sekunder siden';
+$lang['wordblock'] = 'Din endring ble ikke lagret ettersom den inneholder blokkert tekst (søppel).';
+$lang['media_uploadtab'] = 'Last opp';
+$lang['media_searchtab'] = 'Søk';
+$lang['media_file'] = 'Fil';
+$lang['media_viewtab'] = 'Vis';
+$lang['media_edittab'] = 'Rediger';
+$lang['media_historytab'] = 'Historikk';
+$lang['media_list_thumbs'] = 'Miniatyrbilder';
+$lang['media_list_rows'] = 'Rader';
+$lang['media_sort_name'] = 'etter navn';
+$lang['media_sort_date'] = 'etter dato';
+$lang['media_namespaces'] = 'Velg navnerom';
+$lang['media_files'] = 'Filer i %s';
+$lang['media_upload'] = 'Last opp til navnerommet <strong>%s</strong>.';
+$lang['media_search'] = 'Søk i navnerommet <strong>%s</strong>.';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s på %s';
+$lang['media_edit'] = 'Rediger';
+$lang['media_history'] = 'Dette er de tidligere versjonene av fila.';
+$lang['media_meta_edited'] = 'metadata er endra';
+$lang['media_perm_read'] = 'Beklager, du har ikke tilgang til å lese filer.';
+$lang['media_perm_upload'] = 'Beklager, du har ikke tilgang til å laste opp filer.';
+$lang['media_update'] = 'Last opp ny versjon';
+$lang['media_restore'] = 'Gjenopprett denne versjonen';
+$lang['plugin_install_err'] = 'Tillegget ble feil installert. Skift navn på mappa \'%s\' til \'%s\'.';
diff --git a/inc/lang/no/newpage.txt b/inc/lang/no/newpage.txt
index 8f4b8da79..f712998d2 100644
--- a/inc/lang/no/newpage.txt
+++ b/inc/lang/no/newpage.txt
@@ -1,3 +1,3 @@
-====== Det fins ikke noe innhold ======
+====== Dette emnet har ikke noe innhold ======
Du har klikket på en lenke til et emne som ikke finnes ennå. Du kan skape det gjennom å klikke på ''**Lag denne siden**''.
diff --git a/inc/lang/no/norev.txt b/inc/lang/no/norev.txt
index dfd71db0f..cc58c99e3 100644
--- a/inc/lang/no/norev.txt
+++ b/inc/lang/no/norev.txt
@@ -1,4 +1,4 @@
-====== Det fins ingen slik versjon ======
+====== Versjonen finnes ikke ======
-Den angitte versjonen fins ikke. Bruk ''**Historikk**'' for en oversikt over de versjoner som fins av dette dokumentet.
+Den angitte versjonen finnes ikke. Bruk ''**Historikk**'' for en oversikt over de versjoner som finnes av dette dokumentet.
diff --git a/inc/lang/no/registermail.txt b/inc/lang/no/registermail.txt
index e1fae2b90..35ed253ab 100644
--- a/inc/lang/no/registermail.txt
+++ b/inc/lang/no/registermail.txt
@@ -1,4 +1,4 @@
-En ny bruker har registret seg, her er detaljene:
+En ny bruker har registrert seg, her er detaljene:
Brukernavn : @NEWUSER@
Fult navn : @NEWNAME@
diff --git a/inc/lang/no/stopwords.txt b/inc/lang/no/stopwords.txt
index 2b2ab11e2..9a4c302d9 100644
--- a/inc/lang/no/stopwords.txt
+++ b/inc/lang/no/stopwords.txt
@@ -1,130 +1,68 @@
-# This is a list of words the indexer ignores, one word per line
-# When you edit this file be sure to use UNIX line endings (single newline)
-# No need to include words shorter than 3 chars - these are ignored anyway
-# This list is based upon the ones found at http://www.ranks.nl/stopwords/
-alle
-andre
-arbeid
-begge
-bort
-bra
-bruke
-denne
-der
-deres
+# Dette er en liste med ord som indeksereren ignorerer, ett ord per linje.
+# Når du redigerer siden, pass på å bruke UNIX linjeslutt (enkel ny linje).
+# Ord kortere enn 3 bokstaver er automatisk ignorert.
+# Listen er basert på http://helmer.aksis.uib.no/nta/ord10000.txt
+i
+og
det
-din
-disse
-eller
-ene
-eneste
-enhver
-enn
-folk
+er
+på
+til
+som
+en
for
-fordi
-forsÛke
-fra
-fÅ
-fÛr
-fÛrst
-gjorde
-gjÛre
-god
-gÅ
-hadde
-han
-hans
-hennes
-her
-hva
-hvem
-hver
-hvilken
-hvis
-hvor
-hvordan
-hvorfor
-ikke
-inn
-innen
-kan
-kunne
-lage
-lang
-lik
-like
-makt
-mange
+av
+at
+har
med
-meg
-meget
-men
-mens
-mer
-mest
-min
-mye
-mÅ
-mÅte
-navn
-nei
-nÅ
-nÅr
-ogsÅ
-opp
-oss
-over
-part
-punkt
-pÅ
-rett
-riktig
-samme
-sant
-siden
-sist
-skulle
-slik
-slutt
-som
-start
-stille
-sÅ
-tid
-til
-tilbake
-tilstand
-under
-uten
-var
-ved
-verdi
-vil
-ville
-vite
-vÅr
-vÖre
-vÖrt
-om
-er
-og
-du
-dine
de
-deres
-com
-for
+ikke
+den
+han
+om
+et
fra
-inni
-hvordan
-det
-dette
+men
+vi
var
-hva
-når
-hvor
-hvem
+jeg
+seg
+sier
vil
-med
+kan
+ble
+skal
+etter
+også
+så
+ut
+år
+nå
+da
+dette
+blir
+ved
+mot
+hadde
+to
+hun
+over
+være
+ha
+må
+går
+opp
+få
+andre
+eller
+bare
+sin
+mer
+inn
+før
+bli
+vært
+enn
+alle
www \ No newline at end of file
diff --git a/inc/lang/no/subscr_digest.txt b/inc/lang/no/subscr_digest.txt
new file mode 100644
index 000000000..6afd0cc5c
--- /dev/null
+++ b/inc/lang/no/subscr_digest.txt
@@ -0,0 +1,20 @@
+Hei!
+
+Siden @PAGE@ på wikien @TITLE@ har blitt endret.
+Her er endringene:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Gammel versjon : @OLDPAGE@
+Ny versjon: @NEWPAGE@
+
+For å avslutte varslingen, logg inn på
+@DOKUWIKIURL@ og gå til
+@NEWPAGE@
+og avslutt abonnementet på endringer av siden eller i navnerommet.
+
+--
+Denne e-posten ble generert av DokuWiki på
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/inc/lang/no/subscr_form.txt b/inc/lang/no/subscr_form.txt
new file mode 100644
index 000000000..c3df69e02
--- /dev/null
+++ b/inc/lang/no/subscr_form.txt
@@ -0,0 +1,3 @@
+====== Administrere abonnement ======
+
+Denne sida lar deg administrere abonnementene dine for denne sida og dette navnerommet. \ No newline at end of file
diff --git a/inc/lang/no/subscr_list.txt b/inc/lang/no/subscr_list.txt
new file mode 100644
index 000000000..72cd307cb
--- /dev/null
+++ b/inc/lang/no/subscr_list.txt
@@ -0,0 +1,17 @@
+Hei!
+
+Sider i navnerommet @PAGE@ på wikien @TITLE@ har blitt endra.
+Her er endringene:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+For å avslutte varslinga, logg inn på
+@DOKUWIKIURL@ og gå til
+@NEWPAGE@
+og avslutt abonnementet på endringer av sida eller i navnerommet.
+
+--
+Denne e-posten ble generert av DokuWiki på
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/inc/lang/no/subscr_single.txt b/inc/lang/no/subscr_single.txt
new file mode 100644
index 000000000..25296da58
--- /dev/null
+++ b/inc/lang/no/subscr_single.txt
@@ -0,0 +1,23 @@
+Hei!
+
+Siden @PAGE@ på wikien @TITLE@ har blitt endret.
+Her er endringene:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Dato : @DATE@
+Bruker : @USER@
+Sammendrag: @SUMMARY@
+Gammel versjon : @OLDPAGE@
+Ny versjon: @NEWPAGE@
+
+For å avslutte varslingen, logg inn på
+@DOKUWIKIURL@, gå til
+@NEWPAGE@
+og avslutt abonnementet på endringer av siden eller i navnerommet.
+
+--
+Denne e-posten ble generert av DokuWiki på
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/inc/lang/no/updateprofile.txt b/inc/lang/no/updateprofile.txt
index 5565e528f..b2e37e76d 100644
--- a/inc/lang/no/updateprofile.txt
+++ b/inc/lang/no/updateprofile.txt
@@ -1,5 +1,5 @@
====== Oppdater din brukerprofil ======
-Du behøver bare fylle ut de felter du ønsker å endre. Du kan ikke endre ditt brukernavn.
+Du behøver bare fylle ut de felter du ønsker å endre. Du kan ikke endre brukernavnet ditt.
diff --git a/inc/lang/no/uploadmail.txt b/inc/lang/no/uploadmail.txt
index b01905009..2890d962d 100644
--- a/inc/lang/no/uploadmail.txt
+++ b/inc/lang/no/uploadmail.txt
@@ -1,6 +1,7 @@
En fil ble lastet opp på din DokuWiki. Her er detaljene:
Fil : @MEDIA@
+Gammel versjon: @OLD@
Dato : @DATE@
Nettleser : @BROWSER@
IP-adresse : @IPADDRESS@
diff --git a/inc/lang/pl/lang.php b/inc/lang/pl/lang.php
index bc0509df3..a6fc3d52e 100644
--- a/inc/lang/pl/lang.php
+++ b/inc/lang/pl/lang.php
@@ -11,6 +11,7 @@
* @author Leszek Stachowski <shazarre@gmail.com>
* @author maros <dobrimaros@yahoo.pl>
* @author Grzegorz Widła <dzesdzes@gmail.com>
+ * @author Łukasz Chmaj <teachmeter@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -128,7 +129,6 @@ Możesz skopiować odnośnik.';
$lang['js']['linkwiz'] = 'Tworzenie odnośników';
$lang['js']['linkto'] = 'Link do';
$lang['js']['del_confirm'] = 'Czy na pewno usunąć?';
-$lang['js']['mu_btn'] = 'Wyślij wiele plików na raz';
$lang['rssfailed'] = 'Wystąpił błąd przy pobieraniu tych danych: ';
$lang['nothingfound'] = 'Nic nie znaleziono.';
$lang['mediaselect'] = 'Wysyłanie pliku';
@@ -163,6 +163,9 @@ $lang['yours'] = 'Twoja wersja';
$lang['diff'] = 'Pokaż różnice między wersjami';
$lang['diff2'] = 'Pokaż różnice między zaznaczonymi wersjami';
$lang['difflink'] = 'Odnośnik do tego porównania';
+$lang['diff_type'] = 'Zobacz różnice:';
+$lang['diff_inline'] = 'W linii';
+$lang['diff_side'] = 'Jeden obok drugiego';
$lang['line'] = 'Linia';
$lang['breadcrumb'] = 'Ślad';
$lang['youarehere'] = 'Jesteś tutaj';
diff --git a/inc/lang/pt-br/lang.php b/inc/lang/pt-br/lang.php
index f3b012521..066b3acaa 100644
--- a/inc/lang/pt-br/lang.php
+++ b/inc/lang/pt-br/lang.php
@@ -18,6 +18,7 @@
* @author Sergio Motta <sergio@cisne.com.br>
* @author Isaias Masiero Filho <masiero@masiero.org>
* @author Frederico Guimarães <frederico@teia.bio.br>
+ * @author Balaco Baco <balacobaco@imap.cc>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -103,7 +104,7 @@ $lang['txt_filename'] = 'Enviar como (opcional)';
$lang['txt_overwrt'] = 'Substituir o arquivo existente';
$lang['lockedby'] = 'Atualmente bloqueada por';
$lang['lockexpire'] = 'O bloqueio expira em';
-$lang['willexpire'] = 'O seu bloqueio de edição deste página irá expirar em um minuto.\nPara evitar conflitos de edição, clique no botão de visualização para reiniciar o temporizador de bloqueio.';
+$lang['js']['willexpire'] = 'O seu bloqueio de edição deste página irá expirar em um minuto.\nPara evitar conflitos de edição, clique no botão de visualização para reiniciar o temporizador de bloqueio.';
$lang['js']['notsavedyet'] = 'As alterações não salvas serão perdidas.
Deseja realmente continuar?';
$lang['js']['searchmedia'] = 'Buscar por arquivos';
@@ -135,7 +136,6 @@ Entretanto, você ainda pode copiar e colar o atalho.';
$lang['js']['linkwiz'] = 'Link Wizard';
$lang['js']['linkto'] = 'Link para:';
$lang['js']['del_confirm'] = 'Deseja realmente excluir o(s) item(ns) selecionado(s)?';
-$lang['js']['mu_btn'] = 'Enviar vários arquivos de uma vez';
$lang['rssfailed'] = 'Ocorreu um erro durante a atualização dessa fonte: ';
$lang['nothingfound'] = 'Não foi encontrado nada.';
$lang['mediaselect'] = 'Arquivos de mídia';
diff --git a/inc/lang/pt/lang.php b/inc/lang/pt/lang.php
index 41406ee60..3c3a8d9da 100644
--- a/inc/lang/pt/lang.php
+++ b/inc/lang/pt/lang.php
@@ -12,11 +12,12 @@
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
-$lang['doublequoteopening'] = '“';
-$lang['doublequoteclosing'] = '”';
-$lang['singlequoteopening'] = '‘';
-$lang['singlequoteclosing'] = '’';
-$lang['apostrophe'] = '´';
+$lang['doublequoteopening'] = '“';//&ldquo;
+$lang['doublequoteclosing'] = '”';//&rdquo;
+$lang['singlequoteopening'] = '‘';//&lsquo;
+$lang['singlequoteclosing'] = '’';//&rsquo;
+$lang['apostrophe'] = '’';//&rsquo;
+
$lang['btn_edit'] = 'Editar página';
$lang['btn_source'] = 'Ver fonte';
$lang['btn_show'] = 'Ver página';
@@ -50,6 +51,9 @@ $lang['btn_recover'] = 'Recuperar rascunho';
$lang['btn_draftdel'] = 'Apagar rascunho';
$lang['btn_revert'] = 'Restaurar';
$lang['btn_register'] = 'Registar';
+$lang['btn_apply'] = 'Aplicar';
+$lang['btn_media'] = 'Gestor de Media';
+
$lang['loggedinas'] = 'Está em sessão como';
$lang['user'] = 'Utilizador';
$lang['pass'] = 'Senha';
@@ -64,6 +68,7 @@ $lang['badlogin'] = 'O utilizador inválido ou senha inválida.';
$lang['minoredit'] = 'Alterações Menores';
$lang['draftdate'] = 'Rascunho automaticamente gravado em';
$lang['nosecedit'] = 'A página foi modificada entretanto. Como a informação da secção estava desactualizada, foi carregada a página inteira.';
+
$lang['regmissing'] = 'Por favor, preencha todos os campos.';
$lang['reguexists'] = 'Este utilizador já está inscrito. Por favor escolha outro nome de utilizador.';
$lang['regsuccess'] = 'O utilizador foi criado e a senha foi enviada para o endereço de correio electrónico usado na inscrição.';
@@ -73,10 +78,12 @@ $lang['regbadmail'] = 'O endereço de correio electrónico é inváli
$lang['regbadpass'] = 'As duas senhas não são idênticas, por favor tente de novo.';
$lang['regpwmail'] = 'A sua senha DokuWiki';
$lang['reghere'] = 'Para se registar, clique em';
+
$lang['profna'] = 'Este Wiki não suporta modificações aos perfis.';
$lang['profnochange'] = 'Nada alteração, nada a fazer.';
$lang['profnoempty'] = 'Não são permitidos nomes ou endereços em branco.';
$lang['profchanged'] = 'Perfil do utilizador actualizado com sucesso.';
+
$lang['pwdforget'] = 'Esqueceu a sua senha? Pedir nova senha';
$lang['resendna'] = 'Este wiki não suporta reenvio de senhas.';
$lang['resendpwd'] = 'Enviar nova senha para';
@@ -85,8 +92,10 @@ $lang['resendpwdnouser'] = 'Não foi possível encontrar este utilizador.'
$lang['resendpwdbadauth'] = 'O código de autenticação não é válido. Por favor, assegure-se de que o link de confirmação está completo.';
$lang['resendpwdconfirm'] = 'O link de confirmação foi enviado por e-mail.';
$lang['resendpwdsuccess'] = 'A nova senha foi enviada por e-mail.';
+
$lang['license'] = 'Excepto menção em contrário, o conteúdo neste wiki está sob a seguinte licença:';
$lang['licenseok'] = 'Nota: Ao editar esta página você aceita disponibilizar o seu conteúdo sob a seguinte licença:';
+
$lang['searchmedia'] = 'Procurar nome de ficheiro:';
$lang['searchmedia_in'] = 'Procurar em %s';
$lang['txt_upload'] = 'Escolha ficheiro para carregar';
@@ -94,9 +103,10 @@ $lang['txt_filename'] = 'Carregar como (opcional)';
$lang['txt_overwrt'] = 'Escrever por cima do ficheiro já existente';
$lang['lockedby'] = 'Bloqueado por';
$lang['lockexpire'] = 'Expira em';
-$lang['willexpire'] = 'O bloqueio de edição para este documento irá expirar num minuto.\nPara evitar conflitos de edição, clique no botão <Prever> para re-iniciar o temporizador de bloqueio.';
-$lang['js']['notsavedyet'] = 'Existem alterações não gravadas, que serão perdidas se continuar.
-Deseja realmente continuar?';
+$lang['js']['willexpire'] = 'O bloqueio de edição para este documento irá expirar num minuto.\nPara evitar conflitos use o botão Prever para re-iniciar o temporizador de bloqueio.';
+
+$lang['js']['notsavedyet'] = 'Alterações não gravadas serão perdidas.';
+
$lang['js']['searchmedia'] = 'Procurar por ficheiros';
$lang['js']['keepopen'] = 'Mantenha a janela aberta durante a selecção';
$lang['js']['hidedetails'] = 'Esconder Detalhes';
@@ -125,8 +135,8 @@ $lang['js']['nosmblinks'] = 'Ligação a pastas Windows partilhadas apenas
Pode no entanto copiar e colar o link.';
$lang['js']['linkwiz'] = 'Assistente de Criação de Ligação';
$lang['js']['linkto'] = 'Ligação para:';
-$lang['js']['del_confirm'] = 'Remover esta entrada?';
-$lang['js']['mu_btn'] = 'Enviar múltiplos ficheiros de uma vez';
+$lang['js']['del_confirm'] = 'Remover o(s) item(s) selecionados?';
+$lang['js']['restore_confirm'] = 'Restaurar esta versão?';
$lang['rssfailed'] = 'Ocorreu um erro neste canal RSS: ';
$lang['nothingfound'] = 'Nada foi encontrado.';
$lang['mediaselect'] = 'Selecção de ficheiros';
@@ -176,6 +186,10 @@ $lang['external_edit'] = 'Edição externa';
$lang['summary'] = 'Sumário da Edição';
$lang['noflash'] = 'O <a href="http://www.adobe.com/products/flashplayer/">Plugin Adobe Flash</a> é necessário para exibir este conteúdo.';
$lang['download'] = 'Descarregar Snippet';
+$lang['changes_type'] = 'Ver alterações de';
+$lang['pages_changes'] = 'Páginas';
+$lang['media_changes'] = 'Ficheiros Media';
+$lang['both_changes'] = 'Tanto páginas como ficheiros media';
$lang['mail_newpage'] = 'documento adicionado:';
$lang['mail_changed'] = 'documento modificado:';
$lang['mail_subscribe_list'] = 'páginas alteradas no espaço de nome:';
@@ -221,6 +235,9 @@ $lang['img_copyr'] = 'Copyright';
$lang['img_format'] = 'Formato';
$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['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';
@@ -285,3 +302,36 @@ $lang['hours'] = '%d horas atrás';
$lang['minutes'] = '%d minutos atrás';
$lang['seconds'] = '%d segundos atrás';
$lang['wordblock'] = 'A sua alteração não foi guardada porque contém texto bloqueado (spam).';
+
+$lang['media_uploadtab'] = 'Enviar';
+$lang['media_searchtab'] = 'Procurar';
+$lang['media_viewtab'] = 'Ver';
+$lang['media_edittab'] = 'Editar';
+$lang['media_historytab'] = 'Histórico';
+$lang['media_sort'] = 'Ordenar';
+$lang['media_sort_name'] = 'Ordenar por nome';
+$lang['media_sort_date'] = 'Ordenar por data';
+$lang['media_upload'] = 'Enviar para o grupo <strong>%s</strong>.';
+$lang['media_search'] = 'Procurar no grupo <strong>%s</strong>.';
+$lang['media_view'] = '%s';
+$lang['media_edit'] = 'Editar %s';
+$lang['media_history'] = 'Histórico do %s';
+$lang['media_meta_edited']= 'metadata editada';
+$lang['media_perm_read'] = 'Perdão, não tem permissão para ler ficheiros.';
+$lang['media_perm_upload']= 'Perdão, não tem permissão para enviar ficheiros.';
+$lang['media_update'] = 'enviar nova versão';
+$lang['media_restore'] = 'Restaurar esta versão';
+
+$lang['js']['media_diff'] = 'Ver diferenças:';
+$lang['js']['media_diff_both'] = 'Lado a Lado';
+$lang['js']['media_diff_opacity'] = 'Sobreposição';
+$lang['js']['media_diff_portions'] = 'Slider'; // Needs translation. 'Deslizador' ?
+
+$lang['js']['media_select'] = 'Selecione ficheiros…';
+$lang['js']['media_upload_btn'] = 'Enviar';
+$lang['js']['media_done_btn'] = 'Feito';
+$lang['js']['media_drop'] = 'Largue ficheiros aqui para enviar';
+$lang['js']['media_cancel'] = 'remover';
+$lang['js']['media_overwrt'] = 'Escrever por cima de ficheiros existentes';
+
+$lang['plugin_install_err'] = "Plugin instalado incorrectamente. Renomeie a pasta do plugin de '%s' para '%s'.";
diff --git a/inc/lang/pt/uploadmail.txt b/inc/lang/pt/uploadmail.txt
index 597ba4a01..bb571ffae 100644
--- a/inc/lang/pt/uploadmail.txt
+++ b/inc/lang/pt/uploadmail.txt
@@ -1,15 +1,15 @@
Um ficheiro foi carregado. Aqui estão os detalhes:
-Ficheiro : @MEDIA@
-Data : @DATE@
-Browser : @BROWSER@
-Endereço IP : @IPADDRESS@
-Hostname : @HOSTNAME@
-Tamanho : @SIZE@
-MIME Type : @MIME@
-Utilizador : @USER@
-
-----
+Ficheiro : @MEDIA@
+Revisão antiga : @OLD@
+Data : @DATE@
+Navegador : @BROWSER@
+Endereço IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+Tamanho : @SIZE@
+MIME Type : @MIME@
+Utilizador : @USER@
+--
Esta mensagem foi gerada pelo DokuWiki em
-@DOKUWIKIURL@ \ No newline at end of file
+@DOKUWIKIURL@
diff --git a/inc/lang/ro/lang.php b/inc/lang/ro/lang.php
index cbecf6f6c..91f8ebb97 100644
--- a/inc/lang/ro/lang.php
+++ b/inc/lang/ro/lang.php
@@ -7,6 +7,7 @@
* @author Sergiu Baltariu <s_baltariu@yahoo.com>
* @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
* @author Emanuel-Emeric Andraşi <em.andrasi@mandrivausers.ro>
+ * @author Marius OLAR <olarmariusalex@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -48,6 +49,8 @@ $lang['btn_recover'] = 'Recuperează schiţă';
$lang['btn_draftdel'] = 'Şterge schiţă';
$lang['btn_revert'] = 'Revenire';
$lang['btn_register'] = 'Înregistrează';
+$lang['btn_apply'] = 'Aplică';
+$lang['btn_media'] = 'Administrare media';
$lang['loggedinas'] = 'Logat ca şi';
$lang['user'] = 'Utilizator';
$lang['pass'] = 'Parola';
@@ -92,7 +95,7 @@ $lang['txt_filename'] = 'Încarcă fişierul ca (opţional)';
$lang['txt_overwrt'] = 'Suprascrie fişierul existent';
$lang['lockedby'] = 'Momentan blocat de';
$lang['lockexpire'] = 'Blocarea expiră la';
-$lang['willexpire'] = 'Blocarea pentru editarea paginii expiră intr-un minut.\nPentru a preveni conflictele foloseşte butonul de previzualizare pentru resetarea blocării.';
+$lang['js']['willexpire'] = 'Blocarea pentru editarea paginii expiră intr-un minut.\nPentru a preveni conflictele foloseşte butonul de previzualizare pentru resetarea blocării.';
$lang['js']['notsavedyet'] = 'Există modificări nesalvate, care se vor pierde.
Doreşti să continui?';
$lang['js']['searchmedia'] = 'Caută fişiere';
@@ -124,7 +127,17 @@ Puteţi însă copia şi insera legătura.';
$lang['js']['linkwiz'] = 'Asistent legătură';
$lang['js']['linkto'] = 'Legătură la:';
$lang['js']['del_confirm'] = 'Doriţi într-adevăr ştergerea elementelor selectate?';
-$lang['js']['mu_btn'] = 'Încarcă mai multe fişiere simultan';
+$lang['js']['restore_confirm'] = 'Sunteți sigur că doriți restaurarea acestei versiuni?';
+$lang['js']['media_diff'] = 'Arată diferențele:';
+$lang['js']['media_diff_both'] = 'Unul lângă altul';
+$lang['js']['media_diff_opacity'] = 'Străveziu';
+$lang['js']['media_diff_portions'] = 'Lovește cu putere';
+$lang['js']['media_select'] = 'Selectează fișierele...';
+$lang['js']['media_upload_btn'] = 'Încarcă';
+$lang['js']['media_done_btn'] = 'Gata';
+$lang['js']['media_drop'] = 'Lasă fișierele aici pentru încărcarea lor';
+$lang['js']['media_cancel'] = 'înlătură';
+$lang['js']['media_overwrt'] = 'Suprascrie fișierele deja existente';
$lang['rssfailed'] = 'A apărut o eroare in timpul descărcării acestui cîmp: ';
$lang['nothingfound'] = 'Nu am găsit nimic.';
$lang['mediaselect'] = 'Selectare fişiere media';
@@ -179,6 +192,10 @@ $lang['mail_changed'] = 'page schimbată:';
$lang['mail_subscribe_list'] = 'pagini modificate în spaţiul de nume:';
$lang['mail_new_user'] = 'utilizator nou';
$lang['mail_upload'] = 'fişier încărcat:';
+$lang['changes_type'] = 'Vizualizare modificări';
+$lang['pages_changes'] = 'Pagini';
+$lang['media_changes'] = 'Fișiere media';
+$lang['both_changes'] = 'Ambele pagini şi fişiere media';
$lang['qb_bold'] = 'Text Îngroşat';
$lang['qb_italic'] = 'Text Italic';
$lang['qb_underl'] = 'Text Subliniat';
@@ -219,6 +236,9 @@ $lang['img_copyr'] = 'Copyright';
$lang['img_format'] = 'Format';
$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['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ă adresa asociată cu logarea dvs., nu puteţi fi adăugat la lista de abonare';
@@ -271,7 +291,7 @@ $lang['mu_ready'] = 'pregătit pentru încărcare';
$lang['mu_done'] = 'complet';
$lang['mu_fail'] = 'eşuat';
$lang['mu_authfail'] = 'sesiunea a expirat';
-$lang['mu_progress'] = '@PCT@% incărcat';
+$lang['mu_progress'] = '@PCT@% încărcat';
$lang['mu_filetypes'] = 'Tipuri de fişiere permise';
$lang['mu_info'] = 'fişiere încărcate';
$lang['mu_lasterr'] = 'Ultima eroare:';
@@ -284,3 +304,27 @@ $lang['hours'] = 'acum %d ore';
$lang['minutes'] = 'acum %d minute';
$lang['seconds'] = 'acum %d secunde';
$lang['wordblock'] = 'Modificarea dvs. nu au fost salvate deoarece conţine text blocat (spam).';
+$lang['media_uploadtab'] = 'Încarcă';
+$lang['media_searchtab'] = 'Căutare';
+$lang['media_file'] = 'Fișier';
+$lang['media_viewtab'] = 'Vizualizare';
+$lang['media_edittab'] = 'Editare';
+$lang['media_historytab'] = 'Istoric';
+$lang['media_list_thumbs'] = 'Miniaturi';
+$lang['media_list_rows'] = 'Linii';
+$lang['media_sort_name'] = 'Nume';
+$lang['media_sort_date'] = 'Data';
+$lang['media_namespaces'] = 'Alegeți numele se spațiu';
+$lang['media_files'] = 'Fișiere în %s';
+$lang['media_upload'] = 'Încarcă în %s';
+$lang['media_search'] = 'Caută în %s';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s în %s';
+$lang['media_edit'] = 'Editare %s';
+$lang['media_history'] = 'Istoricul pentru %s';
+$lang['media_meta_edited'] = 'metadate editate';
+$lang['media_perm_read'] = 'Ne pare rău, dar nu aveți suficiente drepturi pentru a putea citi fișiere.';
+$lang['media_perm_upload'] = 'Ne pare rău, dar nu aveți suficiente drepturi pentru a putea încărca fișiere.';
+$lang['media_update'] = 'Încarcă noua versiune';
+$lang['media_restore'] = 'Restaurează această versiune';
+$lang['plugin_install_err'] = 'Modul instalat greșit. Redenumește directorul modulului \'%s\' în \'%s\'.';
diff --git a/inc/lang/ru/lang.php b/inc/lang/ru/lang.php
index 1eaa488ec..eda838451 100644
--- a/inc/lang/ru/lang.php
+++ b/inc/lang/ru/lang.php
@@ -22,11 +22,12 @@
*/
$lang['encoding'] = ' utf-8';
$lang['direction'] = 'ltr';
-$lang['doublequoteopening'] = '«';
-$lang['doublequoteclosing'] = '»';
-$lang['singlequoteopening'] = '„';
-$lang['singlequoteclosing'] = '“';
-$lang['apostrophe'] = '’';
+$lang['doublequoteopening'] = '«'; //&ldquo;
+$lang['doublequoteclosing'] = '»'; //&rdquo;
+$lang['singlequoteopening'] = '„'; //&lsquo;
+$lang['singlequoteclosing'] = '“'; //&rsquo;
+$lang['apostrophe'] = '’'; //&rsquo;
+
$lang['btn_edit'] = 'Править страницу';
$lang['btn_source'] = 'Показать исходный текст';
$lang['btn_show'] = 'Показать страницу';
@@ -60,6 +61,9 @@ $lang['btn_recover'] = 'Восстановить черновик';
$lang['btn_draftdel'] = 'Удалить черновик';
$lang['btn_revert'] = 'Восстановить';
$lang['btn_register'] = 'Зарегистрироваться';
+$lang['btn_apply'] = 'Применить';
+$lang['btn_media'] = 'Media Manager';
+
$lang['loggedinas'] = 'Зашли как';
$lang['user'] = 'Логин';
$lang['pass'] = 'Пароль';
@@ -74,6 +78,7 @@ $lang['badlogin'] = 'Извините, неверное имя по
$lang['minoredit'] = 'Небольшие изменения';
$lang['draftdate'] = 'Черновик сохранён';
$lang['nosecedit'] = 'За это время страница была изменена и информация о секции устарела. Загружена полная версия страницы.';
+
$lang['regmissing'] = 'Извините, вам следует заполнить все поля.';
$lang['reguexists'] = 'Извините, пользователь с таким логином уже существует.';
$lang['regsuccess'] = 'Пользователь создан, пароль выслан на адрес электронной почты.';
@@ -83,10 +88,12 @@ $lang['regbadmail'] = 'Данный вами адрес электр
$lang['regbadpass'] = 'Два введённых пароля не идентичны. Пожалуйста, попробуйте ещё раз.';
$lang['regpwmail'] = 'Ваш пароль для системы «ДокуВики»';
$lang['reghere'] = 'У вас ещё нет аккаунта? Зарегистрируйтесь';
+
$lang['profna'] = 'Данная вики не поддерживает изменение профиля';
$lang['profnochange'] = 'Изменений не было внесено, профиль не обновлён.';
$lang['profnoempty'] = 'Логин и адрес электронной почты не могут быть пустыми.';
$lang['profchanged'] = 'Профиль пользователя успешно обновлён.';
+
$lang['pwdforget'] = 'Забыли пароль? Получите новый';
$lang['resendna'] = 'Данная вики не поддерживает повторную отправку пароля.';
$lang['resendpwd'] = 'Выслать пароль для';
@@ -95,8 +102,10 @@ $lang['resendpwdnouser'] = 'Пользователь с таким лог
$lang['resendpwdbadauth'] = 'Извините, неверный код авторизации. Убедитесь, что вы полностью скопировали ссылку. ';
$lang['resendpwdconfirm'] = 'Ссылка для подтверждения пароля была выслана по электронной почте. ';
$lang['resendpwdsuccess'] = 'Ваш новый пароль был выслан по электронной почте.';
+
$lang['license'] = 'За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:';
$lang['licenseok'] = 'Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии:';
+
$lang['searchmedia'] = 'Поиск по имени файла:';
$lang['searchmedia_in'] = 'Поиск в %s';
$lang['txt_upload'] = 'Выберите файл для загрузки';
@@ -104,7 +113,7 @@ $lang['txt_filename'] = 'Введите имя файла в вики (
$lang['txt_overwrt'] = 'Перезаписать существующий файл';
$lang['lockedby'] = 'В данный момент заблокирован';
$lang['lockexpire'] = 'Блокировка истекает в';
-$lang['willexpire'] = 'Ваша блокировка редактирования этой страницы истекает в течение минуты.\nЧтобы избежать конфликтов и сбросить таймер блокировки, нажмите кнопку просмотра.';
+$lang['js']['willexpire'] = 'Ваша блокировка редактирования этой страницы истекает в течение минуты.\nЧтобы избежать конфликтов и сбросить таймер блокировки, нажмите кнопку просмотра.';
$lang['js']['notsavedyet'] = 'Несохранённые изменения будут потеряны. Вы действительно хотите продолжить?';
$lang['js']['searchmedia'] = 'Поиск файлов';
$lang['js']['keepopen'] = 'Не закрывать окно после выбора';
@@ -134,9 +143,22 @@ $lang['js']['nosmblinks'] = 'Ссылка на сетевые катало
$lang['js']['linkwiz'] = 'Мастер ссылок';
$lang['js']['linkto'] = 'Ссылка на:';
$lang['js']['del_confirm'] = 'Вы на самом деле желаете удалить выбранное?';
-$lang['js']['mu_btn'] = 'Загрузить несколько файлов одновременно';
+$lang['js']['willexpire'] = 'Ваша блокировка этой страницы на редактирование истекает в течении минуты.\nЧтобы предотвратить конфликты используйте кнопку "Просмотр" для сброса таймера блокировки.';
+$lang['js']['restore_confirm'] = 'Действительно восстановить эту версию?';
+$lang['js']['media_diff'] = 'Просмотр отличий:';
+$lang['js']['media_diff_both'] = 'Рядом';
+$lang['js']['media_diff_opacity'] = 'Наложением';
+$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_cancel'] = 'отменить';
+$lang['js']['media_overwrt'] = 'Перезаписать существующие файлы';
+
$lang['rssfailed'] = 'Произошла ошибка при получении следующей новостной ленты: ';
$lang['nothingfound'] = 'Ничего не найдено.';
+
$lang['mediaselect'] = 'Выбор медиафайла';
$lang['fileupload'] = 'Загрузка медиафайла';
$lang['uploadsucc'] = 'Загрузка произведена успешно';
@@ -161,6 +183,7 @@ $lang['mediaextchange'] = 'Расширение изменилось: с
$lang['reference'] = 'Ссылки для';
$lang['ref_inuse'] = 'Этот файл не может быть удалён, так как он используется на следующих страницах:';
$lang['ref_hidden'] = 'Некоторые ссылки находятся на страницах, на чтение которых у вас нет прав доступа';
+
$lang['hits'] = 'соответствий';
$lang['quickhits'] = 'Соответствия в названиях страниц';
$lang['toc'] = 'Содержание';
@@ -184,11 +207,18 @@ $lang['external_edit'] = 'внешнее изменение';
$lang['summary'] = 'Сводка изменений';
$lang['noflash'] = 'Для просмотра этого содержимого требуется <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
$lang['download'] = 'Скачать код';
+
$lang['mail_newpage'] = 'страница добавлена:';
$lang['mail_changed'] = 'страница изменена:';
$lang['mail_subscribe_list'] = 'изменились страницы в пространстве имён:';
$lang['mail_new_user'] = 'новый пользователь:';
$lang['mail_upload'] = 'файл закачан:';
+
+$lang['changes_type'] = 'Посмотреть изменения';
+$lang['pages_changes'] = 'Страниц';
+$lang['media_changes'] = 'Медиа файлов';
+$lang['both_changes'] = 'И страниц и медиа файлов';
+
$lang['qb_bold'] = 'Полужирный';
$lang['qb_italic'] = 'Курсив';
$lang['qb_underl'] = 'Подчёркнутый';
@@ -213,8 +243,11 @@ $lang['qb_media'] = 'Добавить изображения или
$lang['qb_sig'] = 'Вставить подпись';
$lang['qb_smileys'] = 'Смайлики';
$lang['qb_chars'] = 'Специальные символы';
+
$lang['upperns'] = 'Перейти в родительское пространство имён';
+
$lang['admin_register'] = 'Добавить пользователя';
+
$lang['metaedit'] = 'Править метаданные';
$lang['metasaveerr'] = 'Ошибка записи метаданных';
$lang['metasaveok'] = 'Метаданные сохранены';
@@ -229,24 +262,33 @@ $lang['img_copyr'] = 'Авторские права';
$lang['img_format'] = 'Формат';
$lang['img_camera'] = 'Модель';
$lang['img_keywords'] = 'Ключевые слова';
-$lang['subscr_subscribe_success'] = 'Добавлен %s в подписку на %s';
-$lang['subscr_subscribe_error'] = 'Невозможно добавить %s в подписку на %s';
+$lang['img_width'] = 'Ширина';
+$lang['img_height'] = 'Высота';
+$lang['img_manager'] = 'Просмотр в media manager';
+
+$lang['subscr_subscribe_success'] = 'Добавлен %s в подписку на %s';
+$lang['subscr_subscribe_error'] = 'Невозможно добавить %s в подписку на %s';
$lang['subscr_subscribe_noaddress'] = 'Нет адреса электронной почты, сопоставленного с вашей учётной записью. Вы не можете подписаться на рассылку';
$lang['subscr_unsubscribe_success'] = 'Удалён %s из подписки на %s';
-$lang['subscr_unsubscribe_error'] = 'Ошибка удаления %s из подписки на %s';
-$lang['subscr_already_subscribed'] = '%s уже подписан на %s';
-$lang['subscr_not_subscribed'] = '%s не подписан на %s';
-$lang['subscr_m_not_subscribed'] = 'Вы не подписаны на текущую страницу или пространство имён.';
-$lang['subscr_m_new_header'] = 'Добавить подписку';
-$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'] = 'сводка изменений по каждой странице';
-$lang['subscr_style_list'] = 'перечислять изменившиеся страницы с прошлого уведомления';
+$lang['subscr_unsubscribe_error'] = 'Ошибка удаления %s из подписки на %s';
+$lang['subscr_already_subscribed'] = '%s уже подписан на %s';
+$lang['subscr_not_subscribed'] = '%s не подписан на %s';
+// Manage page for subscriptions
+$lang['subscr_m_not_subscribed'] = 'Вы не подписаны на текущую страницу или пространство имён.';
+$lang['subscr_m_new_header'] = 'Добавить подписку';
+$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'] = 'сводка изменений по каждой странице';
+$lang['subscr_style_list'] = 'перечислять изменившиеся страницы с прошлого уведомления';
+
+/* auth.class language support */
$lang['authmodfailed'] = 'Неправильная конфигурация аутентификации пользователя. Пожалуйста, сообщите об этом своему администратору вики.';
$lang['authtempfail'] = 'Аутентификация пользователей временно недоступна. Если проблема продолжается какое-то время, пожалуйста, сообщите об этом своему администратору вики.';
+
+/* installer strings */
$lang['i_chooselang'] = 'Выберите свой язык/Choose your language';
$lang['i_installer'] = 'Установка «ДокуВики»';
$lang['i_wikiname'] = 'Название вики';
@@ -254,8 +296,8 @@ $lang['i_enableacl'] = 'Разрешить ограничение пр
$lang['i_superuser'] = 'Суперпользователь';
$lang['i_problems'] = 'Программа установки столкнулась с проблемами, перечисленными ниже. Чтобы продолжить, вам необходимо их устранить. ';
$lang['i_modified'] = 'Из соображений безопасности эта программа запускается только на новой, неизменённой установке «ДокуВики».
-Вам нужно либо заново распаковать скачанный пакет установки, либо обратиться к полной
-<a href="http://www.dokuwiki.org/install">инструкции по установке «ДокуВики»</a>';
+ Вам нужно либо заново распаковать скачанный пакет установки, либо обратиться к полной
+ <a href="http://www.dokuwiki.org/install">инструкции по установке «ДокуВики»</a>';
$lang['i_funcna'] = 'Функция PHP <code>%s</code> недоступна. Может быть, она по какой-то причине заблокирована вашим хостером?';
$lang['i_phpver'] = 'Ваша версия PHP (<code>%s</code>) ниже требуемой (<code>%s</code>). Вам необходимо обновить установленную версию PHP.';
$lang['i_permfail'] = '<code>%s</code> недоступна для записи «ДокуВики». Вам необходимо исправить системные права доступа для этой директории!';
@@ -264,7 +306,7 @@ $lang['i_writeerr'] = 'Не удалось создать <code>%s</c
$lang['i_badhash'] = 'dokuwiki.php не распознан или изменён (хэш=<code>%s</code>)';
$lang['i_badval'] = '<code>%s</code> — недопустимое или пустое значение';
$lang['i_success'] = 'Конфигурация прошла успешно. Теперь вы можете удалить файл install.php. Переходите к
- <a href="doku.php">своей новой «ДокуВики»</a>.';
+ <a href="doku.php">своей новой «ДокуВики»</a>.';
$lang['i_failure'] = 'При записи в файлы конфигурации были обнаружены ошибки. Возможно, вам придётся исправить их вручную, прежде чем вы сможете использовать <a href="doku.php">свою новую «ДокуВики»</a>.';
$lang['i_policy'] = 'Исходная политика прав доступа';
$lang['i_pol0'] = 'Открытая вики (чтение, запись, закачка файлов для всех)';
@@ -272,6 +314,7 @@ $lang['i_pol1'] = 'Общедоступная вики (чтен
$lang['i_pol2'] = 'Закрытая вики (чтение, запись и загрузка файлов только для зарегистрированных пользователей)';
$lang['i_retry'] = 'Повторить попытку';
$lang['i_license'] = 'Пожалуйста, выберите тип лицензии для своей вики:';
+
$lang['mu_intro'] = 'Здесь вы можете загрузить несколько файлов сразу. Кликните на «обзор», чтобы добавить их в список. Нажмите «загрузить», когда будете готовы.';
$lang['mu_gridname'] = 'Имя файла';
$lang['mu_gridsize'] = 'Размер';
@@ -287,6 +330,7 @@ $lang['mu_progress'] = '@PCT@% загружено';
$lang['mu_filetypes'] = 'Допустимые типы файлов';
$lang['mu_info'] = 'файлов загружено.';
$lang['mu_lasterr'] = 'Последняя ошибка:';
+
$lang['recent_global'] = 'Вы просматриваете изменения в пространстве имён <b>%s</b>. Вы можете также <a href="%s">просмотреть недавние изменения во всей вики</a>.';
$lang['years'] = '%d лет назад';
$lang['months'] = '%d месяц(ев) назад';
@@ -295,4 +339,24 @@ $lang['days'] = '%d дней назад';
$lang['hours'] = '%d час(ов) назад';
$lang['minutes'] = '%d минут назад';
$lang['seconds'] = '%d секунд назад';
+
$lang['wordblock'] = 'Ваши изменения не сохранены, поскольку они содержат блокируемые слова (спам).';
+
+$lang['media_uploadtab'] = 'Загрузка';
+$lang['media_searchtab'] = 'Поиск';
+$lang['media_viewtab'] = 'Просмотр';
+$lang['media_edittab'] = 'Правка';
+$lang['media_historytab'] = 'История';
+$lang['media_sort_name'] = 'Сортировка по имени';
+$lang['media_sort_date'] = 'Сортировка по дате';
+$lang['media_upload'] = 'Загрузка в пространство имён <strong>%s</strong>.';
+$lang['media_search'] = 'Поиск в пространстве имён <strong>%s</strong>.';
+$lang['media_view'] = '%s';
+$lang['media_edit'] = 'Правка %s';
+$lang['media_meta_edited'] = 'метаданные изменены';
+$lang['media_perm_read'] = 'Извините, у Вас недостаточно прав для чтения файлов.';
+$lang['media_perm_upload'] = 'Извините, у Вас недостаточно прав для загрузки файлов.';
+$lang['media_update'] = 'Загрузить новую версию';
+$lang['media_restore'] = 'Восстановить эту версию';
+
+$lang['plugin_install_err'] = "Плагин установлен некорректно. Переименуйте папку плагина из '%s' в '%s'.";
diff --git a/inc/lang/ru/uploadmail.txt b/inc/lang/ru/uploadmail.txt
index fd7c4a7f8..77f79231e 100644
--- a/inc/lang/ru/uploadmail.txt
+++ b/inc/lang/ru/uploadmail.txt
@@ -1,13 +1,14 @@
В вашу вики был закачан файл. Подробная информация:
-Файл : @MEDIA@
-Дата : @DATE@
-Браузер : @BROWSER@
-Адрес IP : @IPADDRESS@
-Хост : @HOSTNAME@
-Размер : @SIZE@
-Тип MIME : @MIME@
-Пользователь: @USER@
+Файл : @MEDIA@
+Старая версия: @OLD@
+Дата : @DATE@
+Браузер : @BROWSER@
+Адрес IP : @IPADDRESS@
+Хост : @HOSTNAME@
+Размер : @SIZE@
+Тип MIME : @MIME@
+Пользователь : @USER@
--
Это письмо было сгенерировано «ДокуВики» по адресу
diff --git a/inc/lang/sk/lang.php b/inc/lang/sk/lang.php
index 4a2520abd..c0d45da58 100644
--- a/inc/lang/sk/lang.php
+++ b/inc/lang/sk/lang.php
@@ -48,6 +48,8 @@ $lang['btn_recover'] = 'Obnoviť koncept';
$lang['btn_draftdel'] = 'Zmazať koncept';
$lang['btn_revert'] = 'Obnoviť';
$lang['btn_register'] = 'Registrovať';
+$lang['btn_apply'] = 'Použiť';
+$lang['btn_media'] = 'Správa médií';
$lang['loggedinas'] = 'Prihlásený(á) ako';
$lang['user'] = 'Užívateľské meno';
$lang['pass'] = 'Heslo';
@@ -92,7 +94,7 @@ $lang['txt_filename'] = 'Uložiť ako (voliteľné)';
$lang['txt_overwrt'] = 'Prepísať existujúci súbor';
$lang['lockedby'] = 'Práve zamknuté:';
$lang['lockexpire'] = 'Zámok stratí platnosť:';
-$lang['willexpire'] = 'Váš zámok pre editáciu za chvíľu stratí platnosť.\nAby ste predišli konfliktom, stlačte tlačítko Náhľad a zámok sa predĺži.';
+$lang['js']['willexpire'] = 'Váš zámok pre editáciu za chvíľu stratí platnosť.\nAby ste predišli konfliktom, stlačte tlačítko Náhľad a zámok sa predĺži.';
$lang['js']['notsavedyet'] = 'Neuložené zmeny budú stratené.
Chcete naozaj pokračovať?';
$lang['js']['searchmedia'] = 'Hľadať súbory';
@@ -101,7 +103,7 @@ $lang['js']['hidedetails'] = 'Skryť detaily';
$lang['js']['mediatitle'] = 'Nastavenia odkazu';
$lang['js']['mediadisplay'] = 'Typ odkazu';
$lang['js']['mediaalign'] = 'Zarovnanie';
-$lang['js']['mediasize'] = 'Veľkosť obrázku';
+$lang['js']['mediasize'] = 'Veľkosť obrázka';
$lang['js']['mediatarget'] = 'Cieľ odkazu';
$lang['js']['mediaclose'] = 'Zatvoriť';
$lang['js']['mediainsert'] = 'Vložiť';
@@ -124,7 +126,17 @@ Aj napriek tomu tento odkaz môžete skopírovať a vložiť inde.';
$lang['js']['linkwiz'] = 'Sprievodca odkazmi';
$lang['js']['linkto'] = 'Odkaz na:';
$lang['js']['del_confirm'] = 'Zmazať túto položku?';
-$lang['js']['mu_btn'] = 'Nahrať viac súborov súčasne';
+$lang['js']['restore_confirm'] = 'Skutočne obnoviť túto verziu?';
+$lang['js']['media_diff'] = 'Zobraziť rozdiely:';
+$lang['js']['media_diff_both'] = 'Vedľa seba';
+$lang['js']['media_diff_opacity'] = 'Presvitaním';
+$lang['js']['media_diff_portions'] = 'Potiahnutím';
+$lang['js']['media_select'] = 'Vybrať súbory...';
+$lang['js']['media_upload_btn'] = 'Nahrať';
+$lang['js']['media_done_btn'] = 'Hotovo';
+$lang['js']['media_drop'] = 'Pridajte súbory potiahnutím myšou';
+$lang['js']['media_cancel'] = 'odstrániť';
+$lang['js']['media_overwrt'] = 'Prepísať existujúce súbory';
$lang['rssfailed'] = 'Nastala chyba pri vytváraní tohto RSS: ';
$lang['nothingfound'] = 'Nič nenájdené.';
$lang['mediaselect'] = 'Výber dokumentu';
@@ -179,6 +191,10 @@ $lang['mail_changed'] = 'stránka zmenená:';
$lang['mail_subscribe_list'] = 'stránky zmenené v mennom priestore:';
$lang['mail_new_user'] = 'nový užívateľ:';
$lang['mail_upload'] = 'nahraný súbor:';
+$lang['changes_type'] = 'Prehľad zmien';
+$lang['pages_changes'] = 'Stránok';
+$lang['media_changes'] = 'Média súborov';
+$lang['both_changes'] = 'Stránok spolu s média súbormi';
$lang['qb_bold'] = 'Tučné';
$lang['qb_italic'] = 'Kurzíva';
$lang['qb_underl'] = 'Podčiarknutie';
@@ -219,6 +235,9 @@ $lang['img_copyr'] = 'Kopírovacie práva';
$lang['img_format'] = 'Formát';
$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['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';
@@ -283,3 +302,27 @@ $lang['hours'] = 'pred %d hodinami';
$lang['minutes'] = 'pred %d minútami';
$lang['seconds'] = 'pred %d sekundami';
$lang['wordblock'] = 'Vaše zmeny neboli uložené, pretože obsahovali nepovolený text (spam).';
+$lang['media_uploadtab'] = 'Nahrať';
+$lang['media_searchtab'] = 'Hľadať';
+$lang['media_file'] = 'Súbor';
+$lang['media_viewtab'] = 'Náhľad';
+$lang['media_edittab'] = 'Upraviť';
+$lang['media_historytab'] = 'História';
+$lang['media_list_thumbs'] = 'Miniatúry';
+$lang['media_list_rows'] = 'Zoznam';
+$lang['media_sort_name'] = 'Meno';
+$lang['media_sort_date'] = 'Dátum';
+$lang['media_namespaces'] = 'Vybrať priestor';
+$lang['media_files'] = 'Súbory v %s';
+$lang['media_upload'] = 'Nahrať do %s';
+$lang['media_search'] = 'Hľadať v %s';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s v %s';
+$lang['media_edit'] = 'Upraviť %s';
+$lang['media_history'] = 'História %s';
+$lang['media_meta_edited'] = 'metadáta upravené';
+$lang['media_perm_read'] = 'Prepáčte, ale nemáte dostatočné oprávnenie na čítanie súborov.';
+$lang['media_perm_upload'] = 'Prepáčte, ale nemáte dostatočné oprávnenie na nahrávanie súborov.';
+$lang['media_update'] = 'Nahrať novú verziu';
+$lang['media_restore'] = 'Obnoviť túto verziu';
+$lang['plugin_install_err'] = 'Plugin nebol nainštalovaný úspešne. Premenujte adresár s pluginom \'%s\' na \'%s\'.';
diff --git a/inc/lang/sl/lang.php b/inc/lang/sl/lang.php
index 0e6c0a706..9acf13504 100644
--- a/inc/lang/sl/lang.php
+++ b/inc/lang/sl/lang.php
@@ -93,7 +93,7 @@ $lang['txt_filename'] = 'Pošlji z imenom (izborno)';
$lang['txt_overwrt'] = 'Prepiši obstoječo datoteko';
$lang['lockedby'] = 'Trenutno je zaklenjeno s strani';
$lang['lockexpire'] = 'Zaklep preteče ob';
-$lang['willexpire'] = 'Zaklep za urejevanje bo pretekel čez eno minuto.\nV izogib sporom, uporabite predogled, da se merilnik časa za zaklep ponastavi.';
+$lang['js']['willexpire'] = 'Zaklep za urejevanje bo pretekel čez eno minuto.\nV izogib sporom, uporabite predogled, da se merilnik časa za zaklep ponastavi.';
$lang['js']['notsavedyet'] = 'Neshranjene spremembe bodo izgubljene.';
$lang['js']['searchmedia'] = 'Poišči datoteke';
$lang['js']['keepopen'] = 'Od izbiri ohrani okno odprto';
@@ -123,7 +123,6 @@ $lang['js']['nosmblinks'] = 'Povezovanje do souporabnih datotek sistema Win
$lang['js']['linkwiz'] = 'Čarovnik za povezave';
$lang['js']['linkto'] = 'Poveži na:';
$lang['js']['del_confirm'] = 'Ali naj se res izbrišejo izbrani predmeti?';
-$lang['js']['mu_btn'] = 'Pošiljanje več dokumentov hkrati.';
$lang['rssfailed'] = 'Prišlo je do napake med pridobivanjem vira: ';
$lang['nothingfound'] = 'Ni najdenih predmetov.';
$lang['mediaselect'] = 'Predstavne datoteke';
diff --git a/inc/lang/sq/lang.php b/inc/lang/sq/lang.php
index 47a54d2ea..87d0f30b5 100644
--- a/inc/lang/sq/lang.php
+++ b/inc/lang/sq/lang.php
@@ -94,7 +94,7 @@ $lang['txt_filename'] = 'Ngarko si (alternative)';
$lang['txt_overwrt'] = 'Zëvendëso skedarin ekzistues';
$lang['lockedby'] = 'Kyçur momentalisht nga';
$lang['lockexpire'] = 'Kyçi skadon në';
-$lang['willexpire'] = 'Kyçi juaj për redaktimin e kësaj faqeje është duke skaduar.\nPër të shmangur konflikte përdorni butonin Shiko Paraprakisht për të rivendosur kohën e kyçjes.';
+$lang['js']['willexpire'] = 'Kyçi juaj për redaktimin e kësaj faqeje është duke skaduar.\nPër të shmangur konflikte përdorni butonin Shiko Paraprakisht për të rivendosur kohën e kyçjes.';
$lang['js']['notsavedyet'] = "Ndryshimet e paruajtura do të humbasin.\nVazhdo me të vërtetë?";
$lang['rssfailed'] = 'Ndoshi një gabim gjatë kapjes së këtij lajmi:';
$lang['nothingfound'] = 'Nuk u gjet asgjë.';
@@ -120,7 +120,6 @@ $lang['js']['nosmblinks'] = 'Lidhja te Windows shares funksionon vetëm në
$lang['js']['linkwiz'] = 'Magjistari i Link';
$lang['js']['linkto'] = 'Lidh tek:';
$lang['js']['del_confirm'] = 'Fshiji vërtetë objektet e përzgjedhura?';
-$lang['js']['mu_btn'] = 'Ngarko shumë skedarë njëkohësisht';
$lang['mediausage'] = 'Përdor sintaksën e mëposhtme për të referuar këtë skedar:';
$lang['mediaview'] = 'Shiko skedarin origjinal';
$lang['mediaroot'] = 'rrënja';
diff --git a/inc/lang/sr/lang.php b/inc/lang/sr/lang.php
index b35956f03..22bcf4e33 100644
--- a/inc/lang/sr/lang.php
+++ b/inc/lang/sr/lang.php
@@ -91,7 +91,7 @@ $lang['txt_filename'] = 'Унесите вики-име (опционо
$lang['txt_overwrt'] = 'Препишите тренутни фајл';
$lang['lockedby'] = 'Тренутно закључано од стране';
$lang['lockexpire'] = 'Закључавање истиче';
-$lang['willexpire'] = 'Ваше закључавање за измену ове странице ће да истекне за један минут.\nДа би сте избегли конфликте, искористите дугме за преглед како би сте ресетовали тајмер закључавања.';
+$lang['js']['willexpire'] = 'Ваше закључавање за измену ове странице ће да истекне за један минут.\nДа би сте избегли конфликте, искористите дугме за преглед како би сте ресетовали тајмер закључавања.';
$lang['js']['notsavedyet'] = 'Несачуване измене ће бити изгубљене.
Да ли стварно желите да наставите?';
$lang['js']['searchmedia'] = 'Потражи фајлове';
@@ -123,7 +123,6 @@ $lang['js']['nosmblinks'] = 'Повезивање са Windows дељени
$lang['js']['linkwiz'] = 'Чаробњак за стварање везе';
$lang['js']['linkto'] = 'Повежи ка:';
$lang['js']['del_confirm'] = 'Обриши овај унос?';
-$lang['js']['mu_btn'] = 'Слање више датотека одједном';
$lang['rssfailed'] = 'Дошло је до грешке приликом преузимања овог довода: ';
$lang['nothingfound'] = 'Ништа није нађено.';
$lang['mediaselect'] = 'Избор медијске датотеке';
diff --git a/inc/lang/sv/lang.php b/inc/lang/sv/lang.php
index 801e2d879..943509fed 100644
--- a/inc/lang/sv/lang.php
+++ b/inc/lang/sv/lang.php
@@ -16,6 +16,7 @@
* @author Emil Lind <emil@sys.nu>
* @author Bogge Bogge <bogge@bogge.com>
* @author Peter Åström <eaustreum@gmail.com>
+ * @author mikael@mallander.net
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -101,7 +102,7 @@ $lang['txt_filename'] = 'Ladda upp som (ej obligatoriskt)';
$lang['txt_overwrt'] = 'Skriv över befintlig fil';
$lang['lockedby'] = 'Låst av';
$lang['lockexpire'] = 'Lås upphör att gälla';
-$lang['willexpire'] = 'Ditt redigeringslås för detta dokument kommer snart att upphöra.\nFör att undvika versionskonflikter bör du förhandsgranska ditt dokument för att förlänga redigeringslåset.';
+$lang['js']['willexpire'] = 'Ditt redigeringslås för detta dokument kommer snart att upphöra.\nFör att undvika versionskonflikter bör du förhandsgranska ditt dokument för att förlänga redigeringslåset.';
$lang['js']['notsavedyet'] = 'Det finns ändringar som inte är sparade.
Är du säker på att du vill fortsätta?';
$lang['js']['searchmedia'] = 'Sök efter filer';
@@ -130,7 +131,6 @@ Du kan fortfarande klippa och klistra in länken om du använder en annan webbl
$lang['js']['linkwiz'] = 'Snabbguide Länkar';
$lang['js']['linkto'] = 'Länk till:';
$lang['js']['del_confirm'] = 'Vill du verkligen radera?';
-$lang['js']['mu_btn'] = 'Ladda upp flera filer samtidigt';
$lang['rssfailed'] = 'Ett fel uppstod när detta RSS-flöde skulle hämtas: ';
$lang['nothingfound'] = 'Inga filer hittades.';
$lang['mediaselect'] = 'Mediafiler';
@@ -225,8 +225,8 @@ $lang['img_camera'] = 'Kamera';
$lang['img_keywords'] = 'Nyckelord';
$lang['subscr_m_new_header'] = 'Lägg till prenumeration';
$lang['subscr_m_current_header'] = 'Nuvarande prenumerationer';
-$lang['subscr_m_unsubscribe'] = 'Prenumerera';
-$lang['subscr_m_subscribe'] = 'Avsluta prenumeration';
+$lang['subscr_m_unsubscribe'] = 'Avsluta prenumeration';
+$lang['subscr_m_subscribe'] = 'Prenumerera';
$lang['subscr_m_receive'] = 'Ta emot';
$lang['subscr_style_every'] = 'skicka epost vid varje ändring';
$lang['authmodfailed'] = 'Felaktiga inställningar för användarautentisering. Var vänlig meddela wikiadministratören.';
diff --git a/inc/lang/th/lang.php b/inc/lang/th/lang.php
index d40f30f4a..0d0613961 100644
--- a/inc/lang/th/lang.php
+++ b/inc/lang/th/lang.php
@@ -46,8 +46,6 @@ $lang['btn_backlink'] = 'หน้าที่ลิงก์มา';
$lang['btn_backtomedia'] = 'กลับไปยังหน้าเลือกไฟล์สื่อ';
$lang['btn_subscribe'] = 'เฝ้าดู';
$lang['btn_unsubscribe'] = 'เลิกเฝ้าดู';
-$lang['btn_subscribens'] = 'สมัครเพื่อตามการเปลี่ยนแปลงเนมสเปซ';
-$lang['btn_unsubscribens'] = 'ยกเลิกสมัครเพื่อตามการเปลี่ยนแปลงเนมสเปซ';
$lang['btn_profile'] = 'แก้ข้อมูลผู้ใช้';
$lang['btn_reset'] = 'เริ่มใหม่';
$lang['btn_resendpwd'] = 'ลืมรหัส ส่งให้ใหม่ทางอีเมล';
@@ -100,7 +98,7 @@ $lang['txt_filename'] = 'อัพโหลดเป็น(ตัวเ
$lang['txt_overwrt'] = 'เขียนทับไฟล์ที่มีอยู่แล้ว';
$lang['lockedby'] = 'ตอนนี้ถูกล๊อคโดย';
$lang['lockexpire'] = 'การล๊อคจะหมดอายุเมื่อ';
-$lang['willexpire'] = 'การล๊อคเพื่อแก้ไขหน้านี้กำลังจะหมดเวลาในอีก \n นาที เพื่อที่จะหลีกเลี่ยงข้อขัดแย้งให้ใช้ปุ่ม "Preview" เพื่อรีเซ็ทเวลาใหม่';
+$lang['js']['willexpire'] = 'การล๊อคเพื่อแก้ไขหน้านี้กำลังจะหมดเวลาในอีก \n นาที เพื่อที่จะหลีกเลี่ยงข้อขัดแย้งให้ใช้ปุ่ม "Preview" เพื่อรีเซ็ทเวลาใหม่';
$lang['js']['notsavedyet'] = "การแก้ไขที่ไม่ได้บันทึกจะสูญหาย \n ต้องการทำต่อจริงๆหรือ?";
$lang['rssfailed'] = 'มีข้อผิดพลาดขณะดูดฟีดนี้';
$lang['nothingfound'] = 'ไม่พบสิ่งใด';
@@ -126,7 +124,6 @@ $lang['js']['nosmblinks'] = 'เชื่อมไปยังหน้า
$lang['js']['linkwiz'] = 'ลิงค์วิเศษ';
$lang['js']['linkto'] = 'ลิงค์ไป:';
$lang['js']['del_confirm'] = 'ต้องการลบรายการที่เลือกจริงๆหรือ?';
-$lang['js']['mu_btn'] = 'อัพโหลดหลายๆไฟล์ในครั้งเดียว';
$lang['mediausage'] = 'ให้ใช้ไวยกรณ์ต่อไปนี้เพื่ออ้างอิงไฟล์นี้';
$lang['mediaview'] = 'ดูไฟล์ต้นฉบับ';
$lang['mediaroot'] = 'ราก(รูท)';
diff --git a/inc/lang/tr/lang.php b/inc/lang/tr/lang.php
index 0509113b0..94b1c951a 100644
--- a/inc/lang/tr/lang.php
+++ b/inc/lang/tr/lang.php
@@ -93,7 +93,7 @@ $lang['txt_filename'] = 'Dosya adı (zorunlu değil)';
$lang['txt_overwrt'] = 'Mevcut dosyanın üstüne yaz';
$lang['lockedby'] = 'Şu an şunun tarafından kilitli:';
$lang['lockexpire'] = 'Kilitin açılma tarihi:';
-$lang['willexpire'] = 'Bu sayfayı değiştirme kilidinin süresi yaklaşık bir dakika içinde geçecek.\nÇakışmaları önlemek için önizleme tuşunu kullanarak kilit sayacını sıfırla.';
+$lang['js']['willexpire'] = 'Bu sayfayı değiştirme kilidinin süresi yaklaşık bir dakika içinde geçecek.\nÇakışmaları önlemek için önizleme tuşunu kullanarak kilit sayacını sıfırla.';
$lang['js']['notsavedyet'] = 'Kaydedilmemiş değişiklikler kaybolacak.
Devam etmek istiyor musunuz?';
$lang['js']['searchmedia'] = 'Dosyalar için Ara';
@@ -124,7 +124,6 @@ $lang['js']['nosmblinks'] = 'Windows paylaşımı sadece Microsoft Internet
$lang['js']['linkwiz'] = 'Bağlantı sihirbazı';
$lang['js']['linkto'] = 'Bağlantı:';
$lang['js']['del_confirm'] = 'Bu girişi sil?';
-$lang['js']['mu_btn'] = 'Birden fazla dosyayı bir seferde gönder';
$lang['rssfailed'] = 'Bu beslemeyi çekerken hata oluştu: ';
$lang['nothingfound'] = 'Hiçbir şey yok.';
$lang['mediaselect'] = 'Çokluortam dosyası seçimi';
diff --git a/inc/lang/uk/lang.php b/inc/lang/uk/lang.php
index 7bda02501..22d61c9bf 100644
--- a/inc/lang/uk/lang.php
+++ b/inc/lang/uk/lang.php
@@ -94,7 +94,7 @@ $lang['txt_filename'] = 'Завантажити як (не обов\'я
$lang['txt_overwrt'] = 'Перезаписати існуючий файл';
$lang['lockedby'] = 'Заблоковано';
$lang['lockexpire'] = 'Блокування завершується в';
-$lang['willexpire'] = 'Блокування редагування цієї сторінки закінчується через хвилину.\n Щоб уникнути конфліктів використовуйте кнопку перегляду для продовження блокування.';
+$lang['js']['willexpire'] = 'Блокування редагування цієї сторінки закінчується через хвилину.\n Щоб уникнути конфліктів використовуйте кнопку перегляду для продовження блокування.';
$lang['js']['notsavedyet'] = 'Незбережені зміни будуть втрачені.
Дійсно продовжити?';
$lang['js']['searchmedia'] = 'Шукати файли';
@@ -126,7 +126,6 @@ $lang['js']['nosmblinks'] = 'Посилання на мережеві па
$lang['js']['linkwiz'] = 'Чарівник посилань';
$lang['js']['linkto'] = 'Посилання на:';
$lang['js']['del_confirm'] = 'Дійсно знищити обрані елементи?';
-$lang['js']['mu_btn'] = 'Завантажити одночасно кілька файлів';
$lang['rssfailed'] = 'Виникла помилка під час отримання RSS-стрічки: ';
$lang['nothingfound'] = 'Нічого не знайдено.';
$lang['mediaselect'] = 'Вибір медіа-файлу';
diff --git a/inc/lang/vi/lang.php b/inc/lang/vi/lang.php
index 89c9e9cfc..361e51e84 100644
--- a/inc/lang/vi/lang.php
+++ b/inc/lang/vi/lang.php
@@ -49,7 +49,7 @@ $lang['txt_upload'] = 'Chọn tệp để tải lên';
$lang['txt_filename'] = 'Điền wikiname (tuỳ ý)';
$lang['lockedby'] = 'Đang khoá bởi';
$lang['lockexpire'] = 'Khoá sẽ hết hạn vào lúc';
-$lang['willexpire'] = 'Khoá của bạn để biên soạn trang này sẽ hết hạn trong vòng 1 phút.\nĐể tránh xung đột, bạn nên bấm nút xem trước để lập lại thời gian khoá';
+$lang['js']['willexpire'] = 'Khoá của bạn để biên soạn trang này sẽ hết hạn trong vòng 1 phút.\nĐể tránh xung đột, bạn nên bấm nút xem trước để lập lại thời gian khoá';
$lang['js']['notsavedyet'] = "Hiện có những thay đổi chưa được bảo lưu, và sẽ mất.\nBạn thật sự muốn tiếp tục?";
$lang['rssfailed'] = 'Rút nguồn này gặp phải lỗi';
diff --git a/inc/lang/zh-tw/lang.php b/inc/lang/zh-tw/lang.php
index 074c510e9..a46869d6c 100644
--- a/inc/lang/zh-tw/lang.php
+++ b/inc/lang/zh-tw/lang.php
@@ -95,7 +95,7 @@ $lang['txt_filename'] = '請輸入要存在維基內的檔案名稱 (
$lang['txt_overwrt'] = '是否要覆蓋原有檔案';
$lang['lockedby'] = '目前已被下列人員鎖定';
$lang['lockexpire'] = '預計解除鎖定於';
-$lang['willexpire'] = '本頁的編輯鎖定將在一分鐘內到期。要避免發生衝突,請按「預覽」鍵重設鎖定計時。';
+$lang['js']['willexpire'] = '本頁的編輯鎖定將在一分鐘內到期。要避免發生衝突,請按「預覽」鍵重設鎖定計時。';
$lang['js']['notsavedyet'] = '未儲存的變更將會遺失,繼續嗎?';
$lang['js']['searchmedia'] = '搜尋檔案';
$lang['js']['keepopen'] = '選擇時保持視窗開啟';
@@ -126,7 +126,6 @@ $lang['js']['nosmblinks'] = '只有在 Microsoft IE 下才能執行「連
$lang['js']['linkwiz'] = '建立連結精靈';
$lang['js']['linkto'] = '連結至:';
$lang['js']['del_confirm'] = '確定刪除選取的項目?';
-$lang['js']['mu_btn'] = '上傳多個檔案';
$lang['rssfailed'] = '擷取 RSS 饋送檔時發生錯誤:';
$lang['nothingfound'] = '沒找到任何結果。';
$lang['mediaselect'] = '媒體檔案';
diff --git a/inc/lang/zh/lang.php b/inc/lang/zh/lang.php
index 14c92c4b3..6e6dff6f4 100644
--- a/inc/lang/zh/lang.php
+++ b/inc/lang/zh/lang.php
@@ -13,6 +13,7 @@
* @author caii <zhoucaiqi@gmail.com>
* @author Hiphen Lee <jacob.b.leung@gmail.com>
* @author caii, patent agent in China <zhoucaiqi@gmail.com>
+ * @author lainme993@gmail.com
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -54,6 +55,8 @@ $lang['btn_recover'] = '恢复草稿';
$lang['btn_draftdel'] = '删除草稿';
$lang['btn_revert'] = '恢复';
$lang['btn_register'] = '注册';
+$lang['btn_apply'] = '应用';
+$lang['btn_media'] = '媒体管理器';
$lang['loggedinas'] = '登录为';
$lang['user'] = '用户名';
$lang['pass'] = '密码';
@@ -98,7 +101,7 @@ $lang['txt_filename'] = '上传并重命名为(可选)';
$lang['txt_overwrt'] = '覆盖已存在的同名文件';
$lang['lockedby'] = '目前已被下列人员锁定';
$lang['lockexpire'] = '预计锁定解除于';
-$lang['willexpire'] = '您对本页的独有编辑权将于一分钟之后解除。\n为了防止与其他人的编辑冲突,请使用预览按钮重设计时器。';
+$lang['js']['willexpire'] = '您对本页的独有编辑权将于一分钟之后解除。\n为了防止与其他人的编辑冲突,请使用预览按钮重设计时器。';
$lang['js']['notsavedyet'] = '未保存的更改将丢失。
真的要继续?';
$lang['js']['searchmedia'] = '查找文件';
@@ -130,7 +133,17 @@ $lang['js']['nosmblinks'] = '连接到 Windows 共享功能只有在 IE 浏
$lang['js']['linkwiz'] = '链接向导';
$lang['js']['linkto'] = '链接到:';
$lang['js']['del_confirm'] = '真的要删除选中的项目吗?';
-$lang['js']['mu_btn'] = '一次上传了多个文件';
+$lang['js']['restore_confirm'] = '确实要恢复这个版本么?';
+$lang['js']['media_diff'] = '查看差异:';
+$lang['js']['media_diff_both'] = '肩并肩';
+$lang['js']['media_diff_opacity'] = '叠加';
+$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_cancel'] = '删除';
+$lang['js']['media_overwrt'] = '覆盖已存在的文件';
$lang['rssfailed'] = '获取该 RSS 信息时产生错误:';
$lang['nothingfound'] = '什么都没有找到。';
$lang['mediaselect'] = '媒体文件';
@@ -185,6 +198,10 @@ $lang['mail_changed'] = '更改页面:';
$lang['mail_subscribe_list'] = '命名空间中改变的页面:';
$lang['mail_new_user'] = '新用户:';
$lang['mail_upload'] = '已上传的文件:';
+$lang['changes_type'] = '查看何种更改';
+$lang['pages_changes'] = '页面';
+$lang['media_changes'] = '媒体文件';
+$lang['both_changes'] = '页面和媒体文件';
$lang['qb_bold'] = '粗体';
$lang['qb_italic'] = '斜体';
$lang['qb_underl'] = '下划线';
@@ -225,6 +242,9 @@ $lang['img_copyr'] = '版权';
$lang['img_format'] = '格式';
$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'] = '没有与您登录信息相关联的地址,您无法被添加到订阅列表';
@@ -293,3 +313,23 @@ $lang['hours'] = '%d小时前';
$lang['minutes'] = '%d分钟前';
$lang['seconds'] = '%d秒前';
$lang['wordblock'] = '您的更改没有被保存,因为它包含被屏蔽的文字(垃圾信息)。';
+$lang['media_uploadtab'] = '上传';
+$lang['media_searchtab'] = '搜索';
+$lang['media_viewtab'] = '查看';
+$lang['media_edittab'] = '编辑';
+$lang['media_historytab'] = '历史';
+$lang['media_thumbsview'] = '缩略图';
+$lang['media_listview'] = '列表';
+$lang['media_sort'] = '排序';
+$lang['media_sort_name'] = '按名称';
+$lang['media_sort_date'] = '按日期';
+$lang['media_upload'] = '上传到 <strong>%s</strong> 命名空间。';
+$lang['media_search'] = '在 <strong>%s</strong> 命名空间中搜索。';
+$lang['media_edit'] = '编辑';
+$lang['media_history'] = '这些是文件的旧版本。';
+$lang['media_meta_edited'] = '元数据已编辑';
+$lang['media_perm_read'] = '抱歉,您没有足够权限读取这些文件。';
+$lang['media_perm_upload'] = '抱歉,您没有足够权限来上传文件。';
+$lang['media_update'] = '上传新版本';
+$lang['media_restore'] = '恢复这个版本';
+$lang['plugin_install_err'] = '插件安装不正确。重命名插件目录“%s”为“%s”。';
diff --git a/inc/load.php b/inc/load.php
index ef6f7f31c..d30397f6e 100644
--- a/inc/load.php
+++ b/inc/load.php
@@ -43,7 +43,7 @@ require_once(DOKU_INC.'inc/auth.php');
* require()s their associated php files when an object is instantiated.
*
* @author Andreas Gohr <andi@splitbrain.org>
- * @todo add generic loading of plugins and other generically named classes
+ * @todo add generic loading of renderers and auth backends
*/
function load_autoload($name){
static $classes = null;
@@ -87,5 +87,16 @@ function load_autoload($name){
require_once($classes[$name]);
return;
}
+
+ // Plugin loading
+ if(preg_match('/^(helper|syntax|action|admin|renderer)_plugin_([^_]+)(?:_([^_]+))?$/',
+ $name, $m)) {
+ //try to load the wanted plugin file
+ // include, but be silent. Maybe some other autoloader has an idea
+ // how to load this class.
+ $c = ((count($m) === 4) ? "/{$m[3]}" : '');
+ @include DOKU_PLUGIN . "{$m[2]}/{$m[1]}$c.php";
+ return;
+ }
}
diff --git a/inc/mail.php b/inc/mail.php
index 8742e17f6..01b2895e1 100644
--- a/inc/mail.php
+++ b/inc/mail.php
@@ -104,6 +104,9 @@ function _mail_send_action($data) {
$headers = isset($data['headers']) ? $data['headers'] : null;
$params = isset($data['params']) ? $data['params'] : null;
+ // discard mail request if no recipients are available
+ if(trim($to) === '' && trim($cc) === '' && trim($bcc) === '') return false;
+
// end additional code to support event ... original mail_send() code from here
if(defined('MAILHEADER_ASCIIONLY')){
diff --git a/inc/media.php b/inc/media.php
index 3c9340d51..9d3e90a54 100644
--- a/inc/media.php
+++ b/inc/media.php
@@ -40,6 +40,7 @@ function media_filesinuse($data,$id){
* Handles the saving of image meta data
*
* @author Andreas Gohr <andi@splitbrain.org>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
function media_metasave($id,$auth,$data){
if($auth < AUTH_UPLOAD) return false;
@@ -60,8 +61,19 @@ function media_metasave($id,$auth,$data){
}
}
+ $old = @filemtime($src);
+ if(!@file_exists(mediaFN($id, $old)) && @file_exists($src)) {
+ // add old revision to the attic
+ media_saveOldRevision($id);
+ }
+
if($meta->save()){
if($conf['fperm']) chmod($src, $conf['fperm']);
+
+ $new = @filemtime($src);
+ // add a log entry to the media changelog
+ addMediaLogEntry($new, $id, DOKU_CHANGE_TYPE_EDIT, $lang['media_meta_edited']);
+
msg($lang['metasaveok'],1);
return $id;
}else{
@@ -74,33 +86,35 @@ function media_metasave($id,$auth,$data){
* Display the form to edit image meta data
*
* @author Andreas Gohr <andi@splitbrain.org>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
function media_metaform($id,$auth){
- if($auth < AUTH_UPLOAD) return false;
global $lang, $config_cascade;
+ if($auth < AUTH_UPLOAD) {
+ echo '<div class="nothing">'.$lang['media_perm_upload'].'</div>'.NL;
+ return false;
+ }
+
// load the field descriptions
static $fields = null;
if(is_null($fields)){
-
- foreach (array('default','local') as $config_group) {
- if (empty($config_cascade['mediameta'][$config_group])) continue;
- foreach ($config_cascade['mediameta'][$config_group] as $config_file) {
- if(@file_exists($config_file)){
- include($config_file);
- }
- }
+ $config_files = getConfigFiles('mediameta');
+ foreach ($config_files as $config_file) {
+ if(@file_exists($config_file)) include($config_file);
}
}
$src = mediaFN($id);
// output
- echo '<h1>'.hsc(noNS($id)).'</h1>'.NL;
- echo '<form action="'.DOKU_BASE.'lib/exe/mediamanager.php" accept-charset="utf-8" method="post" class="meta">'.NL;
- formSecurityToken();
+ $form = new Doku_Form(array('action' => media_managerURL(array('tab_details' => 'view')),
+ 'class' => 'meta'));
+ $form->addHidden('img', $id);
+ $form->addHidden('mediado', 'save');
foreach($fields as $key => $field){
// get current value
+ if (empty($field[0])) continue;
$tags = array($field[0]);
if(is_array($field[3])) $tags = array_merge($tags,$field[3]);
$value = tpl_img_getTag($tags,'',$src);
@@ -111,33 +125,22 @@ function media_metaform($id,$auth){
$p['class'] = 'edit';
$p['id'] = 'meta__'.$key;
$p['name'] = 'meta['.$field[0].']';
+ $p_attrs = array('class' => 'edit');
- // put label
- echo '<div class="metafield">';
- echo '<label for="meta__'.$key.'">';
- echo ($lang[$field[1]]) ? $lang[$field[1]] : $field[1];
- echo ':</label>';
-
- // put input field
+ $form->addElement('<div class="row">');
if($field[2] == 'text'){
- $p['value'] = $value;
- $p['type'] = 'text';
- $att = buildAttributes($p);
- echo "<input $att/>".NL;
+ $form->addElement(form_makeField('text', $p['name'], $value, ($lang[$field[1]]) ? $lang[$field[1]] : $field[1] . ':', $p['id'], $p['class'], $p_attrs));
}else{
$att = buildAttributes($p);
- echo "<textarea $att rows=\"6\" cols=\"50\">".formText($value).'</textarea>'.NL;
+ $form->addElement('<label for="meta__'.$key.'">'.$lang[$field[1]].'</label>');
+ $form->addElement("<textarea $att rows=\"6\" cols=\"50\">".formText($value).'</textarea>');
}
- echo '</div>'.NL;
+ $form->addElement('</div>'.NL);
}
- echo '<div class="buttons">'.NL;
- echo '<input type="hidden" name="img" value="'.hsc($id).'" />'.NL;
- echo '<input name="do[save]" type="submit" value="'.$lang['btn_save'].
- '" title="'.$lang['btn_save'].' [S]" accesskey="s" class="button" />'.NL;
- echo '<input name="do[cancel]" type="submit" value="'.$lang['btn_cancel'].
- '" title="'.$lang['btn_cancel'].' [C]" accesskey="c" class="button" />'.NL;
- echo '</div>'.NL;
- echo '</form>'.NL;
+ $form->addElement('<div class="buttons">');
+ $form->addElement(form_makeButton('submit', '', $lang['btn_save'], array('accesskey' => 's', 'name' => 'mediado[save]')));
+ $form->addElement('</div>'.NL);
+ $form->printForm();
}
/**
@@ -178,6 +181,7 @@ define('DOKU_MEDIA_EMPTY_NS', 8);
DOKU_MEDIA_INUSE
*/
function media_delete($id,$auth){
+ global $lang;
if($auth < AUTH_DELETE) return DOKU_MEDIA_NOT_AUTH;
if(media_inuse($id)) return DOKU_MEDIA_INUSE;
@@ -193,9 +197,15 @@ function media_delete($id,$auth){
$data['del'] = false;
$evt = new Doku_Event('MEDIA_DELETE_FILE',$data);
if ($evt->advise_before()) {
+ $old = @filemtime($file);
+ if(!@file_exists(mediaFN($id, $old)) && @file_exists($file)) {
+ // add old revision to the attic
+ media_saveOldRevision($id);
+ }
+
$data['unl'] = @unlink($file);
if($data['unl']){
- addMediaLogEntry(time(), $id, DOKU_CHANGE_TYPE_DELETE);
+ addMediaLogEntry(time(), $id, DOKU_CHANGE_TYPE_DELETE, $lang['deleted']);
$data['del'] = io_sweepNS($id,'mediadir');
}
}
@@ -210,19 +220,58 @@ function media_delete($id,$auth){
}
/**
+ * Handle file uploads via XMLHttpRequest
+ *
+ * @return mixed false on error, id of the new file on success
+ */
+function media_upload_xhr($ns,$auth){
+ if(!checkSecurityToken()) return false;
+
+ $id = $_GET['qqfile'];
+ list($ext,$mime,$dl) = mimetype($id);
+ $input = fopen("php://input", "r");
+ $temp = tmpfile();
+ $realSize = stream_copy_to_stream($input, $temp);
+ fclose($input);
+ if ($realSize != (int)$_SERVER["CONTENT_LENGTH"]) return false;
+ if (!($tmp = io_mktmpdir())) return false;
+ $path = $tmp.'/'.md5($id);
+ $target = fopen($path, "w");
+ fseek($temp, 0, SEEK_SET);
+ stream_copy_to_stream($temp, $target);
+ fclose($target);
+ $res = media_save(
+ array('name' => $path,
+ 'mime' => $mime,
+ 'ext' => $ext),
+ $ns.':'.$id,
+ (($_REQUEST['ow'] == 'checked') ? true : false),
+ $auth,
+ 'copy'
+ );
+ unlink($path);
+ if ($tmp) dir_delete($tmp);
+ if (is_array($res)) {
+ msg($res[0], $res[1]);
+ return false;
+ }
+ return $res;
+}
+
+/**
* Handles media file uploads
*
* @author Andreas Gohr <andi@splitbrain.org>
* @author Michael Klier <chi@chimeric.de>
* @return mixed false on error, id of the new file on success
*/
-function media_upload($ns,$auth){
+function media_upload($ns,$auth,$file=false){
if(!checkSecurityToken()) return false;
global $lang;
// get file and id
- $id = $_POST['id'];
- $file = $_FILES['upload'];
+ $id = $_POST['mediaid'];
+ if (!$file) $file = $_FILES['upload'];
if(empty($id)) $id = $file['name'];
// check for errors (messages are done in lib/exe/mediamanager.php)
@@ -280,7 +329,7 @@ function media_save($file, $id, $ow, $auth, $move) {
}
}
- global $lang;
+ global $lang, $conf;
// get filename
$id = cleanID($id,false,true);
@@ -298,7 +347,8 @@ function media_save($file, $id, $ow, $auth, $move) {
//check for overwrite
$overwrite = @file_exists($fn);
- if($overwrite && (!$ow || $auth < AUTH_DELETE)) {
+ $auth_ow = (($conf['mediarevisions']) ? AUTH_UPLOAD : AUTH_DELETE);
+ if($overwrite && (!$ow || $auth < $auth_ow)) {
return array($lang['uploadexist'], 0);
}
// check for valid content
@@ -341,26 +391,38 @@ function _media_upload_action($data) {
*
* @author Andreas Gohr <andi@splitbrain.org>
* @author Michael Klier <chi@chimeric.de>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
function media_upload_finish($fn_tmp, $fn, $id, $imime, $overwrite, $move = 'move_uploaded_file') {
global $conf;
global $lang;
+ global $REV;
+
+ $old = @filemtime($fn);
+ if(!@file_exists(mediaFN($id, $old)) && @file_exists($fn)) {
+ // add old revision to the attic if missing
+ media_saveOldRevision($id);
+ }
// prepare directory
io_createNamespace($id, 'media');
if($move($fn_tmp, $fn)) {
+ @clearstatcache(true,$fn);
+ $new = @filemtime($fn);
// Set the correct permission here.
// Always chmod media because they may be saved with different permissions than expected from the php umask.
// (Should normally chmod to $conf['fperm'] only if $conf['fperm'] is set.)
chmod($fn, $conf['fmode']);
msg($lang['uploadsucc'],1);
- media_notify($id,$fn,$imime);
+ media_notify($id,$fn,$imime,$old);
// add a log entry to the media changelog
- if ($overwrite) {
- addMediaLogEntry(time(), $id, DOKU_CHANGE_TYPE_EDIT);
+ if ($REV){
+ addMediaLogEntry($new, $id, DOKU_CHANGE_TYPE_REVERT, $lang['restored'], $REV);
+ } elseif ($overwrite) {
+ addMediaLogEntry($new, $id, DOKU_CHANGE_TYPE_EDIT);
} else {
- addMediaLogEntry(time(), $id, DOKU_CHANGE_TYPE_CREATE);
+ addMediaLogEntry($new, $id, DOKU_CHANGE_TYPE_CREATE, $lang['created']);
}
return $id;
}else{
@@ -369,6 +431,43 @@ function media_upload_finish($fn_tmp, $fn, $id, $imime, $overwrite, $move = 'mov
}
/**
+ * Moves the current version of media file to the media_attic
+ * directory
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ * @param string $id
+ * @return int - revision date
+ */
+function media_saveOldRevision($id){
+ global $conf, $lang;
+
+ $oldf = mediaFN($id);
+ if(!@file_exists($oldf)) return '';
+ $date = filemtime($oldf);
+ if (!$conf['mediarevisions']) return $date;
+
+ if (!getRevisionInfo($id, $date, 8192, true)) {
+ // there was an external edit,
+ // there is no log entry for current version of file
+ if (!@file_exists(mediaMetaFN($id,'.changes'))) {
+ addMediaLogEntry($date, $id, DOKU_CHANGE_TYPE_CREATE, $lang['created']);
+ } else {
+ addMediaLogEntry($date, $id, DOKU_CHANGE_TYPE_EDIT);
+ }
+ }
+
+ $newf = mediaFN($id,$date);
+ io_makeFileDir($newf);
+ if(copy($oldf, $newf)) {
+ // Set the correct permission here.
+ // Always chmod media because they may be saved with different permissions than expected from the php umask.
+ // (Should normally chmod to $conf['fperm'] only if $conf['fperm'] is set.)
+ chmod($newf, $conf['fmode']);
+ }
+ return $date;
+}
+
+/**
* This function checks if the uploaded content is really what the
* mimetype says it is. We also do spam checking for text types here.
*
@@ -416,7 +515,7 @@ function media_contentcheck($file,$mime){
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
-function media_notify($id,$file,$mime){
+function media_notify($id,$file,$mime,$old_rev=false){
global $lang;
global $conf;
global $INFO;
@@ -434,8 +533,17 @@ function media_notify($id,$file,$mime){
$text = str_replace('@MIME@',$mime,$text);
$text = str_replace('@MEDIA@',ml($id,'',true,'&',true),$text);
$text = str_replace('@SIZE@',filesize_h(filesize($file)),$text);
+ if ($old_rev && $conf['mediarevisions']) {
+ $text = str_replace('@OLD@', ml($id, "rev=$old_rev", true, '&', true), $text);
+ } else {
+ $text = str_replace('@OLD@', '', $text);
+ }
- $subject = '['.$conf['title'].'] '.$lang['mail_upload'].' '.$id;
+ if(empty($conf['mailprefix'])) {
+ $subject = '['.$conf['title'].'] '.$lang['mail_upload'].' '.$id;
+ } else {
+ $subject = '['.$conf['mailprefix'].'] '.$lang['mail_upload'].' '.$id;
+ }
mail_send($conf['notify'],$subject,$text,$conf['mailfrom']);
}
@@ -443,7 +551,7 @@ function media_notify($id,$file,$mime){
/**
* List all files in a given Media namespace
*/
-function media_filelist($ns,$auth=null,$jump=''){
+function media_filelist($ns,$auth=null,$jump='',$fullscreenview=false,$sort=false){
global $conf;
global $lang;
$ns = cleanID($ns);
@@ -451,26 +559,694 @@ function media_filelist($ns,$auth=null,$jump=''){
// check auth our self if not given (needed for ajax calls)
if(is_null($auth)) $auth = auth_quickaclcheck("$ns:*");
- echo '<h1 id="media__ns">:'.hsc($ns).'</h1>'.NL;
+ if (!$fullscreenview) echo '<h1 id="media__ns">:'.hsc($ns).'</h1>'.NL;
if($auth < AUTH_READ){
// FIXME: print permission warning here instead?
echo '<div class="nothing">'.$lang['nothingfound'].'</div>'.NL;
}else{
- media_uploadform($ns, $auth);
+ if (!$fullscreenview) media_uploadform($ns, $auth);
$dir = utf8_encodeFN(str_replace(':','/',$ns));
$data = array();
search($data,$conf['mediadir'],'search_media',
- array('showmsg'=>true,'depth'=>1),$dir);
+ array('showmsg'=>true,'depth'=>1),$dir,1,$sort);
if(!count($data)){
echo '<div class="nothing">'.$lang['nothingfound'].'</div>'.NL;
- }else foreach($data as $item){
- media_printfile($item,$auth,$jump);
+ }else {
+ if ($fullscreenview) {
+ echo '<ul class="' . _media_get_list_type() . '">';
+ }
+ foreach($data as $item){
+ if (!$fullscreenview) {
+ media_printfile($item,$auth,$jump);
+ } else {
+ media_printfile_thumbs($item,$auth,$jump);
+ }
+ }
+ if ($fullscreenview) echo '</ul>'.NL;
+ }
+ }
+ if (!$fullscreenview) media_searchform($ns);
+}
+
+/**
+ * Prints tabs for files list actions
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ * @author Adrian Lang <mail@adrianlang.de>
+ *
+ * @param string $selected_tab - opened tab
+ */
+
+function media_tabs_files($selected_tab = ''){
+ global $lang;
+ $tabs = array();
+ foreach(array('files' => 'mediaselect',
+ 'upload' => 'media_uploadtab',
+ 'search' => 'media_searchtab') as $tab => $caption) {
+ $tabs[$tab] = array('href' => media_managerURL(array('tab_files' => $tab), '&'),
+ 'caption' => $lang[$caption]);
+ }
+
+ html_tabs($tabs, $selected_tab);
+}
+
+/**
+ * Prints tabs for files details actions
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ * @param string $selected_tab - opened tab
+ */
+function media_tabs_details($image, $selected_tab = ''){
+ global $lang, $conf;
+
+ $tabs = array();
+ $tabs['view'] = array('href' => media_managerURL(array('tab_details' => 'view'), '&'),
+ 'caption' => $lang['media_viewtab']);
+
+ list($ext, $mime) = mimetype($image);
+ if ($mime == 'image/jpeg' && @file_exists(mediaFN($image))) {
+ $tabs['edit'] = array('href' => media_managerURL(array('tab_details' => 'edit'), '&'),
+ 'caption' => $lang['media_edittab']);
+ }
+ if ($conf['mediarevisions']) {
+ $tabs['history'] = array('href' => media_managerURL(array('tab_details' => 'history'), '&'),
+ 'caption' => $lang['media_historytab']);
+ }
+
+ html_tabs($tabs, $selected_tab);
+}
+
+/**
+ * Prints options for the tab that displays a list of all files
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function media_tab_files_options(){
+ global $lang, $NS;
+ $form = new Doku_Form(array('class' => 'options', 'method' => 'get',
+ 'action' => wl($ID)));
+ $media_manager_params = media_managerURL(array(), '', false, true);
+ foreach($media_manager_params as $pKey => $pVal){
+ $form->addHidden($pKey, $pVal);
+ }
+ $form->addHidden('sectok', null);
+ if (isset($_REQUEST['q'])) {
+ $form->addHidden('q', $_REQUEST['q']);
+ }
+ $form->addElement('<ul>'.NL);
+ foreach(array('list' => array('listType', array('thumbs', 'rows')),
+ 'sort' => array('sortBy', array('name', 'date')))
+ as $group => $content) {
+ $checked = "_media_get_${group}_type";
+ $checked = $checked();
+
+ $form->addElement('<li class="' . $content[0] . '">');
+ foreach($content[1] as $option) {
+ $attrs = array();
+ if ($checked == $option) {
+ $attrs['checked'] = 'checked';
+ }
+ $form->addElement(form_makeRadioField($group, $option,
+ $lang['media_' . $group . '_' . $option],
+ $content[0] . '__' . $option,
+ $option, $attrs));
+ }
+ $form->addElement('</li>'.NL);
+ }
+ $form->addElement('<li>');
+ $form->addElement(form_makeButton('submit', '', $lang['btn_apply']));
+ $form->addElement('</li>'.NL);
+ $form->addElement('</ul>'.NL);
+ $form->printForm();
+}
+
+/**
+ * Returns type of sorting for the list of files in media manager
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ * @return string - sort type
+ */
+function _media_get_sort_type() {
+ return _media_get_display_param('sort', array('default' => 'name', 'date'));
+}
+
+function _media_get_list_type() {
+ return _media_get_display_param('list', array('default' => 'thumbs', 'rows'));
+}
+
+function _media_get_display_param($param, $values) {
+ if (isset($_REQUEST[$param]) && in_array($_REQUEST[$param], $values)) {
+ // FIXME: Set cookie
+ return $_REQUEST[$param];
+ } else {
+ $val = get_doku_pref($param, $values['default']);
+ if (!in_array($val, $values)) {
+ $val = $values['default'];
+ }
+ return $val;
+ }
+}
+
+/**
+ * Prints tab that displays a list of all files
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function media_tab_files($ns,$auth=null,$jump='') {
+ global $lang;
+ if(is_null($auth)) $auth = auth_quickaclcheck("$ns:*");
+
+ if($auth < AUTH_READ){
+ echo '<div class="nothing">'.$lang['media_perm_read'].'</div>'.NL;
+ }else{
+ media_filelist($ns,$auth,$jump,true,_media_get_sort_type());
+ }
+}
+
+/**
+ * Prints tab that displays uploading form
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function media_tab_upload($ns,$auth=null,$jump='') {
+ global $lang;
+ if(is_null($auth)) $auth = auth_quickaclcheck("$ns:*");
+
+ echo '<div class="upload">'.NL;
+ if ($auth >= AUTH_UPLOAD) {
+ echo '<p>' . $lang['mediaupload'] . '</p>';
+ }
+ media_uploadform($ns, $auth, true);
+ echo '</div>'.NL;
+}
+
+/**
+ * Prints tab that displays search form
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function media_tab_search($ns,$auth=null) {
+ global $lang;
+
+ $do = $_REQUEST['mediado'];
+ $query = $_REQUEST['q'];
+ if (!$query) $query = '';
+ echo '<div class="search">'.NL;
+
+ media_searchform($ns, $query, true);
+ if ($do == 'searchlist') {
+ media_searchlist($query,$ns,$auth,true,_media_get_sort_type());
+ }
+ echo '</div>'.NL;
+}
+
+/**
+ * Prints tab that displays mediafile details
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function media_tab_view($image, $ns, $auth=null, $rev=false) {
+ global $lang, $conf;
+ if(is_null($auth)) $auth = auth_quickaclcheck("$ns:*");
+
+ if ($image && $auth >= AUTH_READ) {
+ $meta = new JpegMeta(mediaFN($image, $rev));
+ media_preview($image, $auth, $rev, $meta);
+ media_preview_buttons($image, $auth, $rev);
+ media_details($image, $auth, $rev, $meta);
+
+ } else {
+ echo '<div class="nothing">'.$lang['media_perm_read'].'</div>'.NL;
+ }
+}
+
+/**
+ * Prints tab that displays form for editing mediafile metadata
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function media_tab_edit($image, $ns, $auth=null) {
+ global $lang;
+ if(is_null($auth)) $auth = auth_quickaclcheck("$ns:*");
+
+ if ($image) {
+ list($ext, $mime) = mimetype($image);
+ if ($mime == 'image/jpeg') media_metaform($image,$auth);
+ }
+}
+
+/**
+ * Prints tab that displays mediafile revisions
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function media_tab_history($image, $ns, $auth=null) {
+ global $lang;
+ if(is_null($auth)) $auth = auth_quickaclcheck("$ns:*");
+ $do = $_REQUEST['mediado'];
+
+ if ($auth >= AUTH_READ && $image) {
+ if ($do == 'diff'){
+ media_diff($image, $ns, $auth);
+ } else {
+ $first = isset($_REQUEST['first']) ? intval($_REQUEST['first']) : 0;
+ html_revisions($first, $image);
+ }
+ } else {
+ echo '<div class="nothing">'.$lang['media_perm_read'].'</div>'.NL;
+ }
+}
+
+/**
+ * Prints mediafile details
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function media_preview($image, $auth, $rev=false, $meta=false) {
+
+ $size = media_image_preview_size($image, $rev, $meta);
+
+ if ($size) {
+ echo '<div class="image">';
+
+ $more = array();
+ if ($rev) {
+ $more['rev'] = $rev;
+ } else {
+ $t = @filemtime(mediaFN($image));
+ $more['t'] = $t;
+ }
+
+ $more['w'] = $size[0];
+ $more['h'] = $size[1];
+ $src = ml($image, $more);
+ echo '<img src="'.$src.'" alt="" style="max-width: '.$size[0].'px;" />';
+
+ echo '</div>'.NL;
+ }
+}
+
+/**
+ * Prints mediafile action buttons
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function media_preview_buttons($image, $auth, $rev=false) {
+ global $lang, $conf;
+
+ echo '<ul class="actions">'.NL;
+
+ if($auth >= AUTH_DELETE && !$rev && @file_exists(mediaFN($image))){
+
+ // delete button
+ $form = new Doku_Form(array('id' => 'mediamanager__btn_delete',
+ 'action'=>media_managerURL(array('delete' => $image), '&')));
+ $form->addElement(form_makeButton('submit','',$lang['btn_delete']));
+ echo '<li>';
+ $form->printForm();
+ echo '</li>'.NL;
+ }
+
+ $auth_ow = (($conf['mediarevisions']) ? AUTH_UPLOAD : AUTH_DELETE);
+ if($auth >= $auth_ow && !$rev){
+
+ // upload new version button
+ $form = new Doku_Form(array('id' => 'mediamanager__btn_update',
+ 'action'=>media_managerURL(array('image' => $image, 'mediado' => 'update'), '&')));
+ $form->addElement(form_makeButton('submit','',$lang['media_update']));
+ echo '<li>';
+ $form->printForm();
+ echo '</li>'.NL;
+ }
+
+ if($auth >= AUTH_UPLOAD && $rev && $conf['mediarevisions'] && @file_exists(mediaFN($image, $rev))){
+
+ // restore button
+ $form = new Doku_Form(array('id' => 'mediamanager__btn_restore',
+ 'action'=>media_managerURL(array('image' => $image), '&')));
+ $form->addHidden('mediado','restore');
+ $form->addHidden('rev',$rev);
+ $form->addElement(form_makeButton('submit','',$lang['media_restore']));
+ echo '<li>';
+ $form->printForm();
+ echo '</li>'.NL;
+ }
+
+ echo '</ul>'.NL;
+}
+
+/**
+ * Returns image width and height for mediamanager preview panel
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ * @param string $image
+ * @param int $rev
+ * @param JpegMeta $meta
+ * @return array
+ */
+function media_image_preview_size($image, $rev, $meta, $size = 500) {
+ if (!preg_match("/\.(jpe?g|gif|png)$/", $image) || !file_exists(mediaFN($image, $rev))) return false;
+
+ $info = getimagesize(mediaFN($image, $rev));
+ $w = (int) $info[0];
+ $h = (int) $info[1];
+
+ if($meta && ($w > $size || $h > $size)){
+ $ratio = $meta->getResizeRatio($size, $size);
+ $w = floor($w * $ratio);
+ $h = floor($h * $ratio);
+ }
+ return array($w, $h);
+}
+
+/**
+ * Returns the requested EXIF/IPTC tag from the image meta
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ * @param array $tags
+ * @param JpegMeta $meta
+ * @param string $alt
+ * @return string
+ */
+function media_getTag($tags,$meta,$alt=''){
+ if($meta === false) return $alt;
+ $info = $meta->getField($tags);
+ if($info == false) return $alt;
+ return $info;
+}
+
+/**
+ * Returns mediafile tags
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ * @param JpegMeta $meta
+ * @return array
+ */
+function media_file_tags($meta) {
+ global $config_cascade;
+
+ // load the field descriptions
+ static $fields = null;
+ if(is_null($fields)){
+ $config_files = getConfigFiles('mediameta');
+ foreach ($config_files as $config_file) {
+ if(@file_exists($config_file)) include($config_file);
+ }
+ }
+
+ $tags = array();
+
+ foreach($fields as $key => $tag){
+ $t = array();
+ if (!empty($tag[0])) $t = array($tag[0]);
+ if(is_array($tag[3])) $t = array_merge($t,$tag[3]);
+ $value = media_getTag($t, $meta);
+ $tags[] = array('tag' => $tag, 'value' => $value);
+ }
+
+ return $tags;
+}
+
+/**
+ * Prints mediafile tags
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function media_details($image, $auth, $rev=false, $meta=false) {
+ global $lang;
+
+ if (!$meta) $meta = new JpegMeta(mediaFN($image, $rev));
+ $tags = media_file_tags($meta);
+
+ echo '<dl>'.NL;
+ foreach($tags as $tag){
+ if ($tag['value']) {
+ $value = cleanText($tag['value']);
+ echo '<dt>'.$lang[$tag['tag'][1]].':</dt><dd>';
+ if ($tag['tag'][2] == 'date') echo dformat($value);
+ else echo hsc($value);
+ echo '</dd>'.NL;
+ }
+ }
+ echo '</dl>'.NL;
+}
+
+/**
+ * Shows difference between two revisions of file
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function media_diff($image, $ns, $auth, $fromajax = false) {
+ global $lang;
+ global $conf;
+
+ if ($auth < AUTH_READ || !$image || !$conf['mediarevisions']) return '';
+
+ $rev1 = (int) $_REQUEST['rev'];
+
+ if(is_array($_REQUEST['rev2'])){
+ $rev1 = (int) $_REQUEST['rev2'][0];
+ $rev2 = (int) $_REQUEST['rev2'][1];
+
+ if(!$rev1){
+ $rev1 = $rev2;
+ unset($rev2);
+ }
+ }else{
+ $rev2 = (int) $_REQUEST['rev2'];
+ }
+
+ if ($rev1 && !file_exists(mediaFN($image, $rev1))) $rev1 = false;
+ if ($rev2 && !file_exists(mediaFN($image, $rev2))) $rev2 = false;
+
+ if($rev1 && $rev2){ // two specific revisions wanted
+ // make sure order is correct (older on the left)
+ if($rev1 < $rev2){
+ $l_rev = $rev1;
+ $r_rev = $rev2;
+ }else{
+ $l_rev = $rev2;
+ $r_rev = $rev1;
+ }
+ }elseif($rev1){ // single revision given, compare to current
+ $r_rev = '';
+ $l_rev = $rev1;
+ }else{ // no revision was given, compare previous to current
+ $r_rev = '';
+ $revs = getRevisions($image, 0, 1, 8192, true);
+ if (file_exists(mediaFN($image, $revs[0]))) {
+ $l_rev = $revs[0];
+ } else {
+ $l_rev = '';
+ }
+ }
+
+ // prepare event data
+ $data[0] = $image;
+ $data[1] = $l_rev;
+ $data[2] = $r_rev;
+ $data[3] = $ns;
+ $data[4] = $auth;
+ $data[5] = $fromajax;
+
+ // trigger event
+ return trigger_event('MEDIA_DIFF', $data, '_media_file_diff', true);
+
+}
+
+function _media_file_diff($data) {
+ if(is_array($data) && count($data)===6) {
+ return media_file_diff($data[0], $data[1], $data[2], $data[3], $data[4], $data[5]);
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Shows difference between two revisions of image
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function media_file_diff($image, $l_rev, $r_rev, $ns, $auth, $fromajax){
+ global $lang, $config_cascade;
+
+ $l_meta = new JpegMeta(mediaFN($image, $l_rev));
+ $r_meta = new JpegMeta(mediaFN($image, $r_rev));
+
+ $is_img = preg_match("/\.(jpe?g|gif|png)$/", $image);
+ if ($is_img) {
+ $l_size = media_image_preview_size($image, $l_rev, $l_meta);
+ $r_size = media_image_preview_size($image, $r_rev, $r_meta);
+ $is_img = ($l_size && $r_size && ($l_size[0] >= 30 || $r_size[0] >= 30));
+
+ $difftype = $_REQUEST['difftype'];
+
+ if (!$fromajax) {
+ $form = new Doku_Form(array(
+ 'action' => media_managerURL(array(), '&'),
+ 'method' => 'get',
+ 'id' => 'mediamanager__form_diffview',
+ 'class' => 'diffView'
+ ));
+ $form->addHidden('sectok', null);
+ $form->addElement('<input type="hidden" name="rev2[]" value="'.$l_rev.'" ></input>');
+ $form->addElement('<input type="hidden" name="rev2[]" value="'.$r_rev.'" ></input>');
+ $form->addHidden('mediado', 'diff');
+ $form->printForm();
+
+ echo NL.'<div id="mediamanager__diff" >'.NL;
+ }
+
+ if ($difftype == 'opacity' || $difftype == 'portions') {
+ media_image_diff($image, $l_rev, $r_rev, $l_size, $r_size, $difftype);
+ if (!$fromajax) echo '</div>';
+ return '';
+ }
+ }
+
+ list($l_head, $r_head) = html_diff_head($l_rev, $r_rev, $image, true);
+
+ ?>
+ <table>
+ <tr>
+ <th><?php echo $l_head; ?></th>
+ <th><?php echo $r_head; ?></th>
+ </tr>
+ <?php
+
+ echo '<tr class="image">';
+ echo '<td>';
+ media_preview($image, $auth, $l_rev, $l_meta);
+ echo '</td>';
+
+ echo '<td>';
+ media_preview($image, $auth, $r_rev, $r_meta);
+ echo '</td>';
+ echo '</tr>'.NL;
+
+ echo '<tr class="actions">';
+ echo '<td>';
+ media_preview_buttons($image, $auth, $l_rev);
+ echo '</td>';
+
+ echo '<td>';
+ media_preview_buttons($image, $auth, $r_rev);
+ echo '</td>';
+ echo '</tr>'.NL;
+
+ $l_tags = media_file_tags($l_meta);
+ $r_tags = media_file_tags($r_meta);
+ // FIXME r_tags-only stuff
+ foreach ($l_tags as $key => $l_tag) {
+ if ($l_tag['value'] != $r_tags[$key]['value']) {
+ $r_tags[$key]['highlighted'] = true;
+ $l_tags[$key]['highlighted'] = true;
+ } else if (!$l_tag['value'] || !$r_tags[$key]['value']) {
+ unset($r_tags[$key]);
+ unset($l_tags[$key]);
+ }
+ }
+
+ echo '<tr>';
+ foreach(array($l_tags,$r_tags) as $tags){
+ echo '<td>'.NL;
+
+ echo '<dl class="img_tags">';
+ foreach($tags as $tag){
+ $value = cleanText($tag['value']);
+ if (!$value) $value = '-';
+ echo '<dt>'.$lang[$tag['tag'][1]].':</dt>';
+ echo '<dd>';
+ if ($tag['highlighted']) {
+ echo '<strong>';
+ }
+ if ($tag['tag'][2] == 'date') echo dformat($value);
+ else echo hsc($value);
+ if ($tag['highlighted']) {
+ echo '</strong>';
+ }
+ echo '</dd>';
+ }
+ echo '</dl>'.NL;
+
+ echo '</td>';
+ }
+ echo '</tr>'.NL;
+
+ echo '</table>'.NL;
+
+ if ($is_img && !$fromajax) echo '</div>';
+}
+
+/**
+ * Prints two images side by side
+ * and slider
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ * @param string $image
+ * @param int $l_rev
+ * @param int $r_rev
+ * @param array $l_size
+ * @param array $r_size
+ * @param string $type
+ */
+function media_image_diff($image, $l_rev, $r_rev, $l_size, $r_size, $type) {
+ if ($l_size != $r_size) {
+ if ($r_size[0] > $l_size[0]) {
+ $l_size = $r_size;
}
}
- media_searchform($ns);
+
+ $l_more = array('rev' => $l_rev, 'h' => $l_size[1], 'w' => $l_size[0]);
+ $r_more = array('rev' => $r_rev, 'h' => $l_size[1], 'w' => $l_size[0]);
+
+ $l_src = ml($image, $l_more);
+ $r_src = ml($image, $r_more);
+
+ // slider
+ echo '<div class="slider" style="max-width: '.($l_size[0]-20).'px;" ></div>'.NL;
+
+ // two images in divs
+ echo '<div class="imageDiff ' . $type . '">'.NL;
+ echo '<div class="image1" style="max-width: '.$l_size[0].'px;">';
+ echo '<img src="'.$l_src.'" alt="" />';
+ echo '</div>'.NL;
+ echo '<div class="image2" style="max-width: '.$l_size[0].'px;">';
+ echo '<img src="'.$r_src.'" alt="" />';
+ echo '</div>'.NL;
+ echo '</div>'.NL;
+}
+
+/**
+ * Restores an old revision of a media file
+ *
+ * @param string $image
+ * @param int $rev
+ * @param int $auth
+ * @return string - file's id
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function media_restore($image, $rev, $auth){
+ global $conf;
+ if ($auth < AUTH_UPLOAD || !$conf['mediarevisions']) return false;
+ $removed = (!file_exists(mediaFN($image)) && file_exists(mediaMetaFN($image, '.changes')));
+ if (!$image || (!file_exists(mediaFN($image)) && !$removed)) return false;
+ if (!$rev || !file_exists(mediaFN($image, $rev))) return false;
+ list($iext,$imime,$dl) = mimetype($image);
+ $res = media_upload_finish(mediaFN($image, $rev),
+ mediaFN($image),
+ $image,
+ $imime,
+ true,
+ 'copy');
+ if (is_array($res)) {
+ msg($res[0], $res[1]);
+ return false;
+ }
+ return $res;
}
/**
@@ -478,11 +1254,13 @@ function media_filelist($ns,$auth=null,$jump=''){
*
* @author Tobias Sarnowski <sarnowski@cosmocode.de>
* @author Andreas Gohr <gohr@cosmocode.de>
+ * @author Kate Arzamastseva <pshns@ukr.net>
* @triggers MEDIA_SEARCH
*/
-function media_searchlist($query,$ns,$auth=null){
+function media_searchlist($query,$ns,$auth=null,$fullscreen=false,$sort=''){
global $conf;
global $lang;
+
$ns = cleanID($ns);
if ($query) {
@@ -501,50 +1279,34 @@ function media_searchlist($query,$ns,$auth=null){
array('showmsg'=>false,'pattern'=>$pattern),
$dir);
}
+
+ $data = array();
+ foreach ($evdata['data'] as $k => $v) {
+ $data[$k] = ($sort == 'date') ? $v['mtime'] : $v['id'];
+ }
+ array_multisort($data, SORT_DESC, SORT_NUMERIC, $evdata['data']);
+
$evt->advise_after();
unset($evt);
}
- echo '<h1 id="media__ns">'.sprintf($lang['searchmedia_in'],hsc($ns).':*').'</h1>'.NL;
- media_searchform($ns,$query);
+ if (!$fullscreen) {
+ echo '<h1 id="media__ns">'.sprintf($lang['searchmedia_in'],hsc($ns).':*').'</h1>'.NL;
+ media_searchform($ns,$query);
+ }
if(!count($evdata['data'])){
echo '<div class="nothing">'.$lang['nothingfound'].'</div>'.NL;
- }else foreach($evdata['data'] as $item){
- media_printfile($item,$item['perm'],'',true);
- }
-}
-
-/**
- * Print action links for a file depending on filetype
- * and available permissions
- */
-function media_fileactions($item,$auth){
- global $lang;
-
- // view button
- $link = ml($item['id'],'',true);
- echo ' <a href="'.$link.'" target="_blank"><img src="'.DOKU_BASE.'lib/images/magnifier.png" '.
- 'alt="'.$lang['mediaview'].'" title="'.$lang['mediaview'].'" class="btn" /></a>';
-
- // no further actions if not writable
- if(!$item['writable']) return;
-
- // delete button
- if($auth >= AUTH_DELETE){
- echo ' <a href="'.DOKU_BASE.'lib/exe/mediamanager.php?delete='.rawurlencode($item['id']).
- '&amp;sectok='.getSecurityToken().'" class="btn_media_delete" title="'.$item['id'].'">'.
- '<img src="'.DOKU_BASE.'lib/images/trash.png" alt="'.$lang['btn_delete'].'" '.
- 'title="'.$lang['btn_delete'].'" class="btn" /></a>';
- }
-
- // edit button
- if($auth >= AUTH_UPLOAD && $item['isimg'] && $item['meta']->getField('File.Mime') == 'image/jpeg'){
- echo ' <a href="'.DOKU_BASE.'lib/exe/mediamanager.php?edit='.rawurlencode($item['id']).'">'.
- '<img src="'.DOKU_BASE.'lib/images/pencil.png" alt="'.$lang['metaedit'].'" '.
- 'title="'.$lang['metaedit'].'" class="btn" /></a>';
+ }else {
+ if ($fullscreen) {
+ echo '<ul class="' . _media_get_list_type() . '">';
+ }
+ foreach($evdata['data'] as $item){
+ if (!$fullscreen) media_printfile($item,$item['perm'],'',true);
+ else media_printfile_thumbs($item,$item['perm'],false,true);
+ }
+ if ($fullscreen) echo '</ul>'.NL;
}
-
}
/**
@@ -595,7 +1357,26 @@ function media_printfile($item,$auth,$jump,$display_namespace=false){
echo '<a name="h_:'.$item['id'].'" class="'.$class.'">'.hsc($item['id']).'</a><br/>';
}
echo '<span class="info">('.$info.')</span>'.NL;
- media_fileactions($item,$auth);
+
+ // view button
+ $link = ml($item['id'],'',true);
+ echo ' <a href="'.$link.'" target="_blank"><img src="'.DOKU_BASE.'lib/images/magnifier.png" '.
+ 'alt="'.$lang['mediaview'].'" title="'.$lang['mediaview'].'" class="btn" /></a>';
+
+ // mediamanager button
+ $link = wl('',array('do'=>'media','image'=>$item['id']));
+ echo ' <a href="'.$link.'" target="_blank"><img src="'.DOKU_BASE.'lib/images/mediamanager.png" '.
+ 'alt="'.$lang['btn_media'].'" title="'.$lang['btn_media'].'" class="btn" /></a>';
+
+ // delete button
+ if($item['writable'] && $auth >= AUTH_DELETE){
+ $link = DOKU_BASE.'lib/exe/mediamanager.php?delete='.rawurlencode($item['id']).
+ '&amp;sectok='.getSecurityToken();
+ echo ' <a href="'.$link.'" class="btn_media_delete" title="'.$item['id'].'">'.
+ '<img src="'.DOKU_BASE.'lib/images/trash.png" alt="'.$lang['btn_delete'].'" '.
+ 'title="'.$lang['btn_delete'].'" class="btn" /></a>';
+ }
+
echo '<div class="example" id="ex_'.str_replace(':','_',$item['id']).'">';
echo $lang['mediausage'].' <code>{{:'.$item['id'].'}}</code>';
echo '</div>';
@@ -604,27 +1385,108 @@ function media_printfile($item,$auth,$jump,$display_namespace=false){
echo '</div>'.NL;
}
+function media_printicon($filename){
+ list($ext,$mime,$dl) = mimetype(mediaFN($filename),false);
+
+ if (@file_exists(DOKU_INC.'lib/images/fileicons/'.$ext.'.png')) {
+ $icon = DOKU_BASE.'lib/images/fileicons/'.$ext.'.png';
+ } else {
+ $icon = DOKU_BASE.'lib/images/fileicons/file.png';
+ }
+
+ return '<img src="'.$icon.'" alt="'.$filename.'" class="icon" />';
+
+}
+
+/**
+ * Formats and prints one file in the list in the thumbnails view
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function media_printfile_thumbs($item,$auth,$jump=false,$display_namespace=false){
+ global $lang;
+ global $conf;
+
+ // Prepare filename
+ $file = utf8_decodeFN($item['file']);
+
+ // output
+ echo '<li><dl>'.NL;
+
+ echo '<dt>';
+ if($item['isimg']) {
+ media_printimgdetail($item, true);
+
+ } else {
+ echo '<a name="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 '</a>';
+ }
+ echo '</dt>'.NL;
+ if (!$display_namespace) {
+ $name = hsc($file);
+ } else {
+ $name = hsc($item['id']);
+ }
+ echo '<dd class="name"><a href="'.media_managerURL(array('image' => hsc($item['id']), 'ns' => getNS($item['id']),
+ 'tab_details' => 'view')).'" name="h_:'.$item['id'].'">'.$name.'</a></dd>'.NL;
+
+ if($item['isimg']){
+ $size = '';
+ $size .= (int) $item['meta']->getField('File.Width');
+ $size .= '&#215;';
+ $size .= (int) $item['meta']->getField('File.Height');
+ echo '<dd class="size">'.$size.'</dd>'.NL;
+ } else {
+ echo '<dd class="size">&nbsp;</dd>'.NL;
+ }
+ $date = dformat($item['mtime']);
+ echo '<dd class="date">'.$date.'</dd>'.NL;
+ $filesize = filesize_h($item['size']);
+ echo '<dd class="filesize">'.$filesize.'</dd>'.NL;
+ echo '</dl></li>'.NL;
+}
+
/**
* Prints a thumbnail and metainfos
*/
-function media_printimgdetail($item){
+function media_printimgdetail($item, $fullscreen=false){
// prepare thumbnail
+ $size = $fullscreen ? 90 : 120;
+
$w = (int) $item['meta']->getField('File.Width');
$h = (int) $item['meta']->getField('File.Height');
- if($w>120 || $h>120){
- $ratio = $item['meta']->getResizeRatio(120);
+ if($w>$size || $h>$size){
+ if (!$fullscreen) {
+ $ratio = $item['meta']->getResizeRatio($size);
+ } else {
+ $ratio = $item['meta']->getResizeRatio($size,$size);
+ }
$w = floor($w * $ratio);
$h = floor($h * $ratio);
}
- $src = ml($item['id'],array('w'=>$w,'h'=>$h));
+ $src = ml($item['id'],array('w'=>$w,'h'=>$h,'t'=>$item['mtime']));
$p = array();
- $p['width'] = $w;
- $p['height'] = $h;
+ if (!$fullscreen) {
+ // In fullscreen mediamanager view, image resizing is done via CSS.
+ $p['width'] = $w;
+ $p['height'] = $h;
+ }
$p['alt'] = $item['id'];
- $p['class'] = 'thumb';
$att = buildAttributes($p);
// output
+ if ($fullscreen) {
+ echo '<a name="l_:'.$item['id'].'" class="image thumb" href="'.
+ media_managerURL(array('image' => hsc($item['id']), 'ns' => getNS($item['id']), 'tab_details' => 'view')).'">';
+ echo '<img src="'.$src.'" '.$att.' />';
+ echo '</a>';
+ }
+
+ if ($fullscreen) return;
+
echo '<div class="detail">';
echo '<div class="thumb">';
echo '<a name="d_:'.$item['id'].'" class="select">';
@@ -652,88 +1514,116 @@ function media_printimgdetail($item){
}
/**
+ * Build link based on the current, adding/rewriting
+ * parameters
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ * @param array $params
+ * @param string $amp - separator
+ * @return string - link
+ */
+function media_managerURL($params=false, $amp='&amp;', $abs=false, $params_array=false) {
+ global $conf;
+ global $ID;
+
+ $gets = array('do' => 'media');
+ $media_manager_params = array('tab_files', 'tab_details', 'image', 'ns', 'list', 'sort');
+ foreach ($media_manager_params as $x) {
+ if (isset($_REQUEST[$x])) $gets[$x] = $_REQUEST[$x];
+ }
+
+ if ($params) {
+ $gets = $params + $gets;
+ }
+ unset($gets['id']);
+ if (isset($gets['delete'])) {
+ unset($gets['image']);
+ unset($gets['tab_details']);
+ }
+
+ if ($params_array) return $gets;
+
+ return wl($ID,$gets,$abs,$amp);
+}
+
+/**
* Print the media upload form if permissions are correct
*
* @author Andreas Gohr <andi@splitbrain.org>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
-function media_uploadform($ns, $auth){
- global $lang;
+function media_uploadform($ns, $auth, $fullscreen = false){
+ global $lang, $conf;
- if($auth < AUTH_UPLOAD) return; //fixme print info on missing permissions?
+ if($auth < AUTH_UPLOAD) {
+ echo '<div class="nothing">'.$lang['media_perm_upload'].'</div>'.NL;
+ return;
+ }
+ $auth_ow = (($conf['mediarevisions']) ? AUTH_UPLOAD : AUTH_DELETE);
+
+ $update = false;
+ $id = '';
+ if ($auth >= $auth_ow && $fullscreen && $_REQUEST['mediado'] == 'update') {
+ $update = true;
+ $id = cleanID($_REQUEST['image']);
+ }
// The default HTML upload form
- $form = new Doku_Form(array('id' => 'dw__upload',
- 'action' => DOKU_BASE.'lib/exe/mediamanager.php',
- 'enctype' => 'multipart/form-data'));
- $form->addElement('<div class="upload">' . $lang['mediaupload'] . '</div>');
+ $params = array('id' => 'dw__upload',
+ 'enctype' => 'multipart/form-data');
+ if (!$fullscreen) {
+ $params['action'] = DOKU_BASE.'lib/exe/mediamanager.php';
+ } else {
+ $params['action'] = media_managerURL(array('tab_files' => 'files',
+ 'tab_details' => 'view'), '&');
+ }
+
+ $form = new Doku_Form($params);
+ if (!$fullscreen) echo '<div class="upload">' . $lang['mediaupload'] . '</div>';
$form->addElement(formSecurityToken());
$form->addHidden('ns', hsc($ns));
$form->addElement(form_makeOpenTag('p'));
$form->addElement(form_makeFileField('upload', $lang['txt_upload'].':', 'upload__file'));
$form->addElement(form_makeCloseTag('p'));
$form->addElement(form_makeOpenTag('p'));
- $form->addElement(form_makeTextField('id', '', $lang['txt_filename'].':', 'upload__name'));
+ $form->addElement(form_makeTextField('mediaid', noNS($id), $lang['txt_filename'].':', 'upload__name'));
$form->addElement(form_makeButton('submit', '', $lang['btn_upload']));
$form->addElement(form_makeCloseTag('p'));
- if($auth >= AUTH_DELETE){
+ if($auth >= $auth_ow){
$form->addElement(form_makeOpenTag('p'));
- $form->addElement(form_makeCheckboxField('ow', 1, $lang['txt_overwrt'], 'dw__ow', 'check'));
+ $attrs = array();
+ if ($update) $attrs['checked'] = 'checked';
+ $form->addElement(form_makeCheckboxField('ow', 1, $lang['txt_overwrt'], 'dw__ow', 'check', $attrs));
$form->addElement(form_makeCloseTag('p'));
}
- html_form('upload', $form);
- // prepare flashvars for multiupload
- $opt = array(
- 'L_gridname' => $lang['mu_gridname'] ,
- 'L_gridsize' => $lang['mu_gridsize'] ,
- 'L_gridstat' => $lang['mu_gridstat'] ,
- 'L_namespace' => $lang['mu_namespace'] ,
- 'L_overwrite' => $lang['txt_overwrt'],
- 'L_browse' => $lang['mu_browse'],
- 'L_upload' => $lang['btn_upload'],
- 'L_toobig' => $lang['mu_toobig'],
- 'L_ready' => $lang['mu_ready'],
- 'L_done' => $lang['mu_done'],
- 'L_fail' => $lang['mu_fail'],
- 'L_authfail' => $lang['mu_authfail'],
- 'L_progress' => $lang['mu_progress'],
- 'L_filetypes' => $lang['mu_filetypes'],
- 'L_info' => $lang['mu_info'],
- 'L_lasterr' => $lang['mu_lasterr'],
-
- 'O_ns' => ":$ns",
- 'O_backend' => 'mediamanager.php?'.session_name().'='.session_id(),
- 'O_maxsize' => php_to_byte(ini_get('upload_max_filesize')),
- 'O_extensions'=> join('|',array_keys(getMimeTypes())),
- 'O_overwrite' => ($auth >= AUTH_DELETE),
- 'O_sectok' => getSecurityToken(),
- 'O_authtok' => auth_createToken(),
- );
- $var = buildURLparams($opt);
- // output the flash uploader
- ?>
- <div id="dw__flashupload" style="display:none">
- <div class="upload"><?php echo $lang['mu_intro']?></div>
- <?php echo html_flashobject('multipleUpload.swf','500','190',null,$opt); ?>
- </div>
- <?php
+ echo NL.'<div id="mediamanager__uploader">'.NL;
+ html_form('upload', $form);
+ echo '</div>'.NL;
}
/**
* Print the search field form
*
* @author Tobias Sarnowski <sarnowski@cosmocode.de>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
-function media_searchform($ns,$query=''){
+function media_searchform($ns,$query='',$fullscreen=false){
global $lang;
// The default HTML search form
- $form = new Doku_Form(array('id' => 'dw__mediasearch', 'action' => DOKU_BASE.'lib/exe/mediamanager.php'));
- $form->addElement('<div class="upload">' . $lang['mediasearch'] . '</div>');
- $form->addElement(formSecurityToken());
+ $params = array('id' => 'dw__mediasearch');
+ if (!$fullscreen) {
+ $params['action'] = DOKU_BASE.'lib/exe/mediamanager.php';
+ } else {
+ $params['action'] = media_managerURL(array(), '&');
+ }
+ $form = new Doku_Form($params);
$form->addHidden('ns', $ns);
- $form->addHidden('do', 'searchlist');
+ $form->addHidden($fullscreen ? 'mediado' : 'do', 'searchlist');
+
+ if (!$fullscreen) $form->addElement('<div class="upload">' . $lang['mediasearch'] . '</div>'.NL);
$form->addElement(form_makeOpenTag('p'));
$form->addElement(form_makeTextField('q', $query,$lang['searchmedia'],'','',array('title'=>sprintf($lang['searchmedia_in'],hsc($ns).':*'))));
$form->addElement(form_makeButton('submit', '', $lang['btn_search']));
@@ -763,15 +1653,10 @@ function media_nstree($ns){
search($data,$conf['mediadir'],'search_index',array('ns' => $ns, 'nofiles' => true));
// wrap a list with the root level around the other namespaces
- $item = array( 'level' => 0, 'id' => '',
- 'open' =>'true', 'label' => '['.$lang['mediaroot'].']');
+ array_unshift($data, array('level' => 0, 'id' => '', 'open' =>'true',
+ 'label' => '['.$lang['mediaroot'].']'));
- echo '<ul class="idx">';
- echo media_nstree_li($item);
- echo media_nstree_item($item);
echo html_buildlist($data,'idx','media_nstree_item','media_nstree_li');
- echo '</li>';
- echo '</ul>';
}
/**
@@ -787,7 +1672,10 @@ function media_nstree_item($item){
if(!$item['label']) $item['label'] = $label;
$ret = '';
+ if (!($_REQUEST['do'] == 'media'))
$ret .= '<a href="'.DOKU_BASE.'lib/exe/mediamanager.php?ns='.idfilter($item['id']).'" class="idx_dir">';
+ else $ret .= '<a href="'.media_managerURL(array('ns' => idfilter($item['id']), 'tab_files' => 'files'))
+ .'" class="idx_dir">';
$ret .= $item['label'];
$ret .= '</a>';
return $ret;
@@ -811,6 +1699,7 @@ function media_nstree_li($item){
$img = DOKU_BASE.'lib/images/plus.gif';
$alt = '+';
}
+ // TODO: only deliver an image if it actually has a subtree...
return '<li class="'.$class.'">'.
'<img src="'.$img.'" alt="'.$alt.'" />';
}
diff --git a/inc/pageutils.php b/inc/pageutils.php
index c9bf60135..31b5f9ff9 100644
--- a/inc/pageutils.php
+++ b/inc/pageutils.php
@@ -134,6 +134,7 @@ function cleanID($raw_id,$ascii=false,$media=false){
$id = preg_replace('#:+#',':',$id);
$id = ($media ? trim($id,':.-') : trim($id,':._-'));
$id = preg_replace('#:[:\._\-]+#',':',$id);
+ $id = preg_replace('#[:\._\-]+:#',':',$id);
$cache[(string)$raw_id] = $id;
return($id);
@@ -295,8 +296,6 @@ function wikiLockFN($id) {
/**
* returns the full path to the meta file specified by ID and extension
*
- * The filename is URL encoded to protect Unicode chars
- *
* @author Steven Danz <steven-danz@kc.rr.com>
*/
function metaFN($id,$ext){
@@ -308,6 +307,19 @@ function metaFN($id,$ext){
}
/**
+ * returns the full path to the media's meta file specified by ID and extension
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function mediaMetaFN($id,$ext){
+ global $conf;
+ $id = cleanID($id);
+ $id = str_replace(':','/',$id);
+ $fn = $conf['mediametadir'].'/'.utf8_encodeFN($id).$ext;
+ return $fn;
+}
+
+/**
* returns an array of full paths to all metafiles of a given ID
*
* @author Esther Brunner <esther@kaffeehaus.ch>
@@ -326,12 +338,19 @@ function metaFiles($id){
* The filename is URL encoded to protect Unicode chars
*
* @author Andreas Gohr <andi@splitbrain.org>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
-function mediaFN($id){
+function mediaFN($id, $rev=''){
global $conf;
$id = cleanID($id);
$id = str_replace(':','/',$id);
- $fn = $conf['mediadir'].'/'.utf8_encodeFN($id);
+ if(empty($rev)){
+ $fn = $conf['mediadir'].'/'.utf8_encodeFN($id);
+ }else{
+ $ext = mimetype($id);
+ $name = substr($id,0, -1*strlen($ext[0])-1);
+ $fn = $conf['mediaolddir'].'/'.utf8_encodeFN($name .'.'.( (int) $rev ).'.'.$ext[0]);
+ }
return $fn;
}
diff --git a/inc/parser/handler.php b/inc/parser/handler.php
index 22a50d1b7..55b715ad9 100644
--- a/inc/parser/handler.php
+++ b/inc/parser/handler.php
@@ -1489,10 +1489,10 @@ class Doku_Handler_Block {
}
}
- function openParagraph($pos){
+ function openParagraph($pos){
if ($this->inParagraph) return;
$this->calls[] = array('p_open',array(), $pos);
- $this->inParagraph = true;
+ $this->inParagraph = true;
$this->skipEol = true;
}
@@ -1503,11 +1503,12 @@ class Doku_Handler_Block {
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
- function closeParagraph($pos){
+ function closeParagraph($pos){
if (!$this->inParagraph) return;
// look back if there was any content - we don't want empty paragraphs
$content = '';
- for($i=count($this->calls)-1; $i>=0; $i--){
+ $ccount = count($this->calls);
+ for($i=$ccount-1; $i>=0; $i--){
if($this->calls[$i][0] == 'p_open'){
break;
}elseif($this->calls[$i][0] == 'cdata'){
@@ -1520,18 +1521,19 @@ class Doku_Handler_Block {
if(trim($content)==''){
//remove the whole paragraph
- array_splice($this->calls,$i);
- }else{
- // remove ending linebreaks in the paragraph
- $i=count($this->calls)-1;
+ //array_splice($this->calls,$i); // <- this is much slower than the loop below
+ for($x=$ccount; $x>$i; $x--) array_pop($this->calls);
+ }else{
+ // remove ending linebreaks in the paragraph
+ $i=count($this->calls)-1;
if ($this->calls[$i][0] == 'cdata') $this->calls[$i][1][0] = rtrim($this->calls[$i][1][0],DOKU_PARSER_EOL);
$this->calls[] = array('p_close',array(), $pos);
}
- $this->inParagraph = false;
+ $this->inParagraph = false;
$this->skipEol = true;
}
-
+
function addCall($call) {
$key = count($this->calls);
if ($key and ($call[0] == 'cdata') and ($this->calls[$key-1][0] == 'cdata')) {
@@ -1553,7 +1555,7 @@ class Doku_Handler_Block {
* @author Andreas Gohr <andi@splitbrain.org>
*/
function process($calls) {
- // open first paragraph
+ // open first paragraph
$this->openParagraph(0);
foreach ( $calls as $key => $call ) {
$cname = $call[0];
diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php
index 83359cd55..ea1756803 100644
--- a/inc/parser/xhtml.php
+++ b/inc/parser/xhtml.php
@@ -805,8 +805,10 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
if($hash) $link['url'] .= '#'.$hash;
//markup non existing files
- if (!$exists)
- $link['class'] .= ' wikilink2';
+ if (!$exists) {
+ $link['class'] .= ' wikilink2';
+ $link['url'] = media_managerURL(array('tab_details' => 'view', 'image' => $src, 'ns' => getNS($src)), '&');
+ }
//output formatted
if ($linking == 'nolink' || $noLink) $this->doc .= $link['name'];
diff --git a/inc/parserutils.php b/inc/parserutils.php
index abba89b5a..9384929bf 100644
--- a/inc/parserutils.php
+++ b/inc/parserutils.php
@@ -411,6 +411,7 @@ function p_set_metadata($id, $data, $render=false, $persistent=true){
// set both keys individually as the renderer has references to the individual keys
$METADATA_RENDERERS[$id]['current'] = $meta['current'];
$METADATA_RENDERERS[$id]['persistent'] = $meta['persistent'];
+ return true;
} else {
return p_save_metadata($id, $meta);
}
@@ -676,12 +677,16 @@ function & p_get_renderer($mode) {
global $conf, $plugin_controller;
$rname = !empty($conf['renderer_'.$mode]) ? $conf['renderer_'.$mode] : $mode;
+ $rclass = "Doku_Renderer_$rname";
+
+ if( class_exists($rclass) ) {
+ return new $rclass();
+ }
// try default renderer first:
$file = DOKU_INC."inc/parser/$rname.php";
if(@file_exists($file)){
require_once $file;
- $rclass = "Doku_Renderer_$rname";
if ( !class_exists($rclass) ) {
trigger_error("Unable to resolve render class $rclass",E_USER_WARNING);
diff --git a/inc/plugincontroller.class.php b/inc/plugincontroller.class.php
index cec5c73a9..734331c94 100644
--- a/inc/plugincontroller.class.php
+++ b/inc/plugincontroller.class.php
@@ -11,11 +11,16 @@ if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
class Doku_Plugin_Controller {
- var $list_enabled = array();
- var $list_disabled = array();
var $list_bytype = array();
+ var $tmp_plugins = array();
+ var $plugin_cascade = array('default'=>array(),'local'=>array(),'protected'=>array());
+ var $last_local_config_file = '';
- function Doku_Plugin_Controller() {
+ /**
+ * Populates the master list of plugins
+ */
+ function __construct() {
+ $this->loadConfig();
$this->_populateMasterList();
}
@@ -37,7 +42,7 @@ class Doku_Plugin_Controller {
// request the complete list
if (!$type) {
- return $all ? array_merge($this->list_enabled,$this->list_disabled) : $this->list_enabled;
+ return $all ? array_keys($this->tmp_plugins) : array_keys(array_filter($this->tmp_plugins));
}
if (!isset($this->list_bytype[$type]['enabled'])) {
@@ -61,9 +66,11 @@ class Doku_Plugin_Controller {
* @param $disabled bool true to load even disabled plugins
* @return objectreference the plugin object or null on failure
*/
- function &load($type,$name,$new=false,$disabled=false){
+ function load($type,$name,$new=false,$disabled=false){
+
//we keep all loaded plugins available in global scope for reuse
global $DOKU_PLUGINS;
+ global $lang;
list($plugin,$component) = $this->_splitName($name);
@@ -72,36 +79,25 @@ class Doku_Plugin_Controller {
return null;
}
+ $class = $type.'_plugin_'.$name;
+
//plugin already loaded?
if(!empty($DOKU_PLUGINS[$type][$name])){
if ($new || !$DOKU_PLUGINS[$type][$name]->isSingleton()) {
- $class = $type.'_plugin_'.$name;
- return class_exists($class) ? new $class : null;
+ return class_exists($class, true) ? new $class : null;
} else {
return $DOKU_PLUGINS[$type][$name];
}
}
- //try to load the wanted plugin file
- $dir = $this->get_directory($plugin);
- $file = $component ? "$type/$component.php" : "$type.php";
-
- if(!is_file(DOKU_PLUGIN."$dir/$file")){
- return null;
- }
-
- if (!include_once(DOKU_PLUGIN."$dir/$file")) {
- return null;
- }
-
//construct class and instantiate
- $class = $type.'_plugin_'.$name;
- if (!class_exists($class)){
+ if (!class_exists($class, true)) {
+
# the plugin might be in the wrong directory
+ $dir = $this->get_directory($plugin);
$inf = confToHash(DOKU_PLUGIN."$dir/plugin.info.txt");
if($inf['base'] && $inf['base'] != $plugin){
- msg("Plugin installed incorrectly. Rename plugin directory '".
- hsc($plugin)."' to '".hsc($inf['base'])."'.",-1);
+ msg(sprintf($lang['plugin_install_err'],hsc($plugin),hsc($inf['base'])),-1);
}
return null;
}
@@ -111,30 +107,28 @@ class Doku_Plugin_Controller {
}
function isdisabled($plugin) {
- return (array_search($plugin, $this->list_enabled) === false);
+ return empty($this->tmp_plugins[$plugin]);
}
- function enable($plugin) {
- if (array_search($plugin, $this->list_disabled) !== false) {
- return @unlink(DOKU_PLUGIN.$plugin.'/disabled');
- }
- return false;
+ function disable($plugin) {
+ if(array_key_exists($plugin,$this->plugin_cascade['protected'])) return false;
+ $this->tmp_plugins[$plugin] = 0;
+ return $this->saveList();
}
- function disable($plugin) {
- if (array_search($plugin, $this->list_enabled) !== false) {
- return @touch(DOKU_PLUGIN.$plugin.'/disabled');
- }
- return false;
+ function enable($plugin) {
+ if(array_key_exists($plugin,$this->plugin_cascade['protected'])) return false;
+ $this->tmp_plugins[$plugin] = 1;
+ return $this->saveList();
}
function get_directory($plugin) {
return $plugin;
}
- function _populateMasterList() {
- global $conf;
- if ($dh = opendir(DOKU_PLUGIN)) {
+ protected function _populateMasterList() {
+ if ($dh = @opendir(DOKU_PLUGIN)) {
+ $all_plugins = array();
while (false !== ($plugin = readdir($dh))) {
if ($plugin[0] == '.') continue; // skip hidden entries
if (is_file(DOKU_PLUGIN.$plugin)) continue; // skip files, we're only interested in directories
@@ -143,19 +137,119 @@ class Doku_Plugin_Controller {
// the plugin was disabled by rc2009-01-26
// disabling mechanism was changed back very soon again
// to keep everything simple we just skip the plugin completely
- }elseif(@file_exists(DOKU_PLUGIN.$plugin.'/disabled') ||
- ($plugin === 'plugin' && isset($conf['pluginmanager']) &&
- !$conf['pluginmanager'])){
- $this->list_disabled[] = $plugin;
+ } elseif (@file_exists(DOKU_PLUGIN.$plugin.'/disabled')) {
+ // treat this as a default disabled plugin(over-rideable by the plugin manager)
+ // deprecated 2011-09-10 (usage of disabled files)
+ if (empty($this->plugin_cascade['local'][$plugin])) {
+ $all_plugins[$plugin] = 0;
+ } else {
+ $all_plugins[$plugin] = 1;
+ }
+ $this->plugin_cascade['default'][$plugin] = 0;
+
+ } elseif ((array_key_exists($plugin,$this->tmp_plugins) && $this->tmp_plugins[$plugin] == 0) ||
+ ($plugin === 'plugin' && isset($conf['pluginmanager']) && !$conf['pluginmanager'])){
+ $all_plugins[$plugin] = 0;
+
+ } elseif ((array_key_exists($plugin,$this->tmp_plugins) && $this->tmp_plugins[$plugin] == 1)) {
+ $all_plugins[$plugin] = 1;
} else {
- $this->list_enabled[] = $plugin;
+ $all_plugins[$plugin] = 1;
}
}
+ $this->tmp_plugins = $all_plugins;
+ if (!file_exists($this->last_local_config_file)) {
+ $this->saveList(true);
+ }
}
}
+ protected function checkRequire($files) {
+ $plugins = array();
+ foreach($files as $file) {
+ if(file_exists($file)) {
+ @include_once($file);
+ }
+ }
+ return $plugins;
+ }
+
+ function getCascade() {
+ return $this->plugin_cascade;
+ }
+
+ /**
+ * Save the current list of plugins
+ */
+ function saveList($forceSave = false) {
+ global $conf;
+
+ if (empty($this->tmp_plugins)) return false;
+
+ // Rebuild list of local settings
+ $local_plugins = $this->rebuildLocal();
+ if($local_plugins != $this->plugin_cascade['local'] || $forceSave) {
+ $file = $this->last_local_config_file;
+ $out = "<?php\n/*\n * Local plugin enable/disable settings\n * Auto-generated through plugin/extension manager\n *\n".
+ " * NOTE: Plugins will not be added to this file unless there is a need to override a default setting. Plugins are\n".
+ " * enabled by default, unless having a 'disabled' file in their plugin folder.\n */\n";
+ foreach ($local_plugins as $plugin => $value) {
+ $out .= "\$plugins['$plugin'] = $value;\n";
+ }
+ // backup current file (remove any existing backup)
+ if (@file_exists($file)) {
+ $backup = $file.'.bak';
+ if (@file_exists($backup)) @unlink($backup);
+ if (!@copy($file,$backup)) return false;
+ if ($conf['fperm']) chmod($backup, $conf['fperm']);
+ }
+ //check if can open for writing, else restore
+ return io_saveFile($file,$out);
+ }
+ return false;
+ }
+
+ /**
+ * Rebuild the set of local plugins
+ * @return array array of plugins to be saved in end($config_cascade['plugins']['local'])
+ */
+ function rebuildLocal() {
+ //assign to local variable to avoid overwriting
+ $backup = $this->tmp_plugins;
+ //Can't do anything about protected one so rule them out completely
+ $local_default = array_diff_key($backup,$this->plugin_cascade['protected']);
+ //Diff between local+default and default
+ //gives us the ones we need to check and save
+ $diffed_ones = array_diff_key($local_default,$this->plugin_cascade['default']);
+ //The ones which we are sure of (list of 0s not in default)
+ $sure_plugins = array_filter($diffed_ones,array($this,'negate'));
+ //the ones in need of diff
+ $conflicts = array_diff_key($local_default,$diffed_ones);
+ //The final list
+ return array_merge($sure_plugins,array_diff_assoc($conflicts,$this->plugin_cascade['default']));
+ }
+
+ /**
+ * Build the list of plugins and cascade
+ *
+ */
+ function loadConfig() {
+ global $config_cascade;
+ foreach(array('default','protected') as $type) {
+ if(array_key_exists($type,$config_cascade['plugins']))
+ $this->plugin_cascade[$type] = $this->checkRequire($config_cascade['plugins'][$type]);
+ }
+ $local = $config_cascade['plugins']['local'];
+ $this->last_local_config_file = array_pop($local);
+ $this->plugin_cascade['local'] = $this->checkRequire(array($this->last_local_config_file));
+ if(is_array($local)) {
+ $this->plugin_cascade['default'] = array_merge($this->plugin_cascade['default'],$this->checkRequire($local));
+ }
+ $this->tmp_plugins = array_merge($this->plugin_cascade['default'],$this->plugin_cascade['local'],$this->plugin_cascade['protected']);
+ }
+
function _getListByType($type, $enabled) {
- $master_list = $enabled ? $this->list_enabled : $this->list_disabled;
+ $master_list = $enabled ? array_keys(array_filter($this->tmp_plugins)) : array_keys(array_filter($this->tmp_plugins,array($this,'negate')));
$plugins = array();
foreach ($master_list as $plugin) {
@@ -180,11 +274,13 @@ class Doku_Plugin_Controller {
}
function _splitName($name) {
- if (array_search($name, $this->list_enabled + $this->list_disabled) === false) {
+ if (array_search($name, array_keys($this->tmp_plugins)) === false) {
return explode('_',$name,2);
}
return array($name,'');
}
-
+ function negate($input) {
+ return !(bool) $input;
+ }
}
diff --git a/inc/pluginutils.php b/inc/pluginutils.php
index 85bcaee1e..53cfedf82 100644
--- a/inc/pluginutils.php
+++ b/inc/pluginutils.php
@@ -16,7 +16,7 @@ function plugin_list($type='',$all=false) {
global $plugin_controller;
return $plugin_controller->getList($type,$all);
}
-function &plugin_load($type,$name,$new=false,$disabled=false) {
+function plugin_load($type,$name,$new=false,$disabled=false) {
global $plugin_controller;
return $plugin_controller->load($type,$name,$new,$disabled);
}
@@ -36,3 +36,7 @@ function plugin_directory($plugin) {
global $plugin_controller;
return $plugin_controller->get_directory($plugin);
}
+function plugin_getcascade() {
+ global $plugin_controller;
+ return $plugin_controller->getCascade();
+}
diff --git a/inc/search.php b/inc/search.php
index 7b53edabe..a26ae4808 100644
--- a/inc/search.php
+++ b/inc/search.php
@@ -21,9 +21,10 @@ if(!defined('DOKU_INC')) die('meh.');
* @param int $lvl Recursion Level
* @author Andreas Gohr <andi@splitbrain.org>
*/
-function search(&$data,$base,$func,$opts,$dir='',$lvl=1){
+function search(&$data,$base,$func,$opts,$dir='',$lvl=1,$sort=false){
$dirs = array();
$files = array();
+ $filepaths = array();
//read in directories and files
$dh = @opendir($base.'/'.$dir);
@@ -35,9 +36,14 @@ function search(&$data,$base,$func,$opts,$dir='',$lvl=1){
continue;
}
$files[] = $dir.'/'.$file;
+ $filepaths[] = $base.'/'.$dir.'/'.$file;
}
closedir($dh);
- sort($files);
+ if ($sort == 'date') {
+ @array_multisort(array_map('filemtime', $filepaths), SORT_NUMERIC, SORT_DESC, $files);
+ } else {
+ sort($files);
+ }
sort($dirs);
//give directories to userfunction then recurse
@@ -78,8 +84,8 @@ function search_callback($func,&$data,$base,$file,$type,$lvl,$opts){
* return values for files are ignored
*
* All functions should check the ACL for document READ rights
- * namespaces (directories) are NOT checked as this would break
- * the recursion (You can have an nonreadable dir over a readable
+ * namespaces (directories) are NOT checked (when sneaky_index is 0) as this
+ * would break the recursion (You can have an nonreadable dir over a readable
* one deeper nested) also make sure to check the file type (for example
* in case of lockfiles).
*/
@@ -101,45 +107,22 @@ function search_qsearch(&$data,$base,$file,$type,$lvl,$opts){
/**
* Build the browsable index of pages
*
- * $opts['ns'] is the current namespace
+ * $opts['ns'] is the currently viewed namespace
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function search_index(&$data,$base,$file,$type,$lvl,$opts){
global $conf;
- $return = true;
-
- $item = array();
-
- if($type == 'd' && !preg_match('#^'.$file.'(/|$)#','/'.$opts['ns'])){
- //add but don't recurse
- $return = false;
- }elseif($type == 'f' && ($opts['nofiles'] || substr($file,-4) != '.txt')){
- //don't add
- return false;
- }
-
- $id = pathID($file,($type == 'd'));
-
- if($type=='d' && $conf['sneaky_index'] && auth_quickaclcheck($id.':') < AUTH_READ){
- return false;
- }
-
- //check hidden
- if(isHiddenPage($id)){
- return false;
- }
-
- //check ACL
- if($type=='f' && auth_quickaclcheck($id) < AUTH_READ){
- return false;
- }
-
- $data[]=array( 'id' => $id,
- 'type' => $type,
- 'level' => $lvl,
- 'open' => $return );
- return $return;
+ $opts = array(
+ 'pagesonly' => true,
+ 'listdirs' => true,
+ 'listfiles' => !$opts['nofiles'],
+ 'sneakyacl' => $conf['sneaky_index'],
+ // Hacky, should rather use recmatch
+ 'depth' => preg_match('#^'.$file.'(/|$)#','/'.$opts['ns']) ? 0 : -1
+ );
+
+ return search_universal($data, $base, $file, $type, $lvl, $opts);
}
/**
diff --git a/inc/template.php b/inc/template.php
index b9b3951ff..c70e407d6 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -89,7 +89,8 @@ function tpl_content_core(){
$_REQUEST['first'] = $_REQUEST['first'][0];
}
$first = is_numeric($_REQUEST['first']) ? intval($_REQUEST['first']) : 0;
- html_recent($first);
+ $show_changes = $_REQUEST['show_changes'];
+ html_recent($first, $show_changes);
break;
case 'index':
html_index($IDX); #FIXME can this be pulled from globals? is it sanitized correctly?
@@ -122,6 +123,9 @@ function tpl_content_core(){
case 'subscribe':
tpl_subscribe();
break;
+ case 'media':
+ tpl_media();
+ break;
default:
$evt = new Doku_Event('TPL_ACT_UNKNOWN',$ACT);
if ($evt->advise_before())
@@ -476,10 +480,15 @@ function tpl_actionlink($type,$pre='',$suf='',$inner='',$return=false){
$linktarget = wl($id, $params);
}
$caption = $lang['btn_' . $type];
+ $akey = $addTitle = '';
+ if($accesskey){
+ $akey = 'accesskey="'.$accesskey.'" ';
+ $addTitle = ' ['.strtoupper($accesskey).']';
+ }
$out = tpl_link($linktarget, $pre.(($inner)?$inner:$caption).$suf,
'class="action ' . $type . '" ' .
- 'accesskey="' . $accesskey . '" rel="nofollow" ' .
- 'title="' . hsc($caption) . '"', 1);
+ $akey . 'rel="nofollow" ' .
+ 'title="' . hsc($caption).$addTitle . '"', 1);
}
if ($return) return $out;
echo $out;
@@ -622,9 +631,7 @@ function tpl_get_action($type) {
return false;
}
break;
- case 'subscribens':
- // Superseded by subscribe/subscription
- return '';
+ case 'media':
break;
default:
return '[unknown %s type]';
@@ -972,8 +979,7 @@ function _tpl_img_action($data, $param=NULL) {
}
/**
- * This function inserts a 1x1 pixel gif which in reality
- * is the indexer function.
+ * This function inserts a small gif which in reality is the indexer function.
*
* Should be called somewhere at the very end of the main.php
* template
@@ -986,7 +992,7 @@ function tpl_indexerWebBug(){
$p = array();
$p['src'] = DOKU_BASE.'lib/exe/indexer.php?id='.rawurlencode($ID).
'&'.time();
- $p['width'] = 2;
+ $p['width'] = 2; //no more 1x1 px image because we live in times of ad blockers...
$p['height'] = 1;
$p['alt'] = '';
$att = buildAttributes($p);
@@ -1104,9 +1110,7 @@ function tpl_mediaContent($fromajax=false){
$evt = new Doku_Event('MEDIAMANAGER_CONTENT_OUTPUT', $data);
if ($evt->advise_before()) {
$do = $data['do'];
- if($do == 'metaform'){
- media_metaform($IMG,$AUTH);
- }elseif($do == 'filesinuse'){
+ if($do == 'filesinuse'){
media_filesinuse($INUSE,$IMG);
}elseif($do == 'filelist'){
media_filelist($NS,$AUTH,$JUMPTO);
@@ -1123,6 +1127,109 @@ function tpl_mediaContent($fromajax=false){
}
/**
+ * Prints the central column in full-screen media manager
+ * Depending on the opened tab this may be a list of
+ * files in a namespace, upload form or search form
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function tpl_mediaFileList(){
+ global $AUTH;
+ global $NS;
+ global $JUMPTO;
+ global $lang;
+
+ $opened_tab = $_REQUEST['tab_files'];
+ if (!$opened_tab || !in_array($opened_tab, array('files', 'upload', 'search'))) $opened_tab = 'files';
+ if ($_REQUEST['mediado'] == 'update') $opened_tab = 'upload';
+
+ echo '<h2 class="a11y">' . $lang['mediaselect'] . '</h2>'.NL;
+
+ media_tabs_files($opened_tab);
+
+ echo '<div class="panelHeader">'.NL;
+ echo '<h3>';
+ $tabTitle = ($NS) ? $NS : '['.$lang['mediaroot'].']';
+ printf($lang['media_' . $opened_tab], '<strong>'.$tabTitle.'</strong>');
+ echo '</h3>'.NL;
+ if ($opened_tab === 'search' || $opened_tab === 'files') {
+ media_tab_files_options();
+ }
+ echo '</div>'.NL;
+
+ echo '<div class="panelContent">'.NL;
+ if ($opened_tab == 'files') {
+ media_tab_files($NS,$AUTH,$JUMPTO);
+ } elseif ($opened_tab == 'upload') {
+ media_tab_upload($NS,$AUTH,$JUMPTO);
+ } elseif ($opened_tab == 'search') {
+ media_tab_search($NS,$AUTH);
+ }
+ echo '</div>'.NL;
+}
+
+/**
+ * Prints the third column in full-screen media manager
+ * Depending on the opened tab this may be details of the
+ * selected file, the meta editing dialog or
+ * list of file revisions
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function tpl_mediaFileDetails($image, $rev){
+ global $AUTH, $NS, $conf, $DEL, $lang;
+
+ $removed = (!file_exists(mediaFN($image)) && file_exists(mediaMetaFN($image, '.changes')) && $conf['mediarevisions']);
+ if (!$image || (!file_exists(mediaFN($image)) && !$removed) || $DEL) return '';
+ if ($rev && !file_exists(mediaFN($image, $rev))) $rev = false;
+ if (isset($NS) && getNS($image) != $NS) return '';
+ $do = $_REQUEST['mediado'];
+
+ $opened_tab = $_REQUEST['tab_details'];
+
+ $tab_array = array('view');
+ list($ext, $mime) = mimetype($image);
+ if ($mime == 'image/jpeg') {
+ $tab_array[] = 'edit';
+ }
+ if ($conf['mediarevisions']) {
+ $tab_array[] = 'history';
+ }
+
+ if (!$opened_tab || !in_array($opened_tab, $tab_array)) $opened_tab = 'view';
+ if ($_REQUEST['edit']) $opened_tab = 'edit';
+ if ($do == 'restore') $opened_tab = 'view';
+
+ media_tabs_details($image, $opened_tab);
+
+ echo '<div class="panelHeader"><h3>';
+ list($ext,$mime,$dl) = mimetype($image,false);
+ $class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext);
+ $class = 'select mediafile mf_'.$class;
+ $tabTitle = '<strong class="'.$class.'">'.$image.'</strong>';
+ if ($opened_tab === 'view' && $rev) {
+ printf($lang['media_viewold'], $tabTitle, dformat($rev));
+ } else {
+ printf($lang['media_' . $opened_tab], $tabTitle);
+ }
+ echo '</h3></div>'.NL;
+
+ echo '<div class="panelContent">'.NL;
+
+ if ($opened_tab == 'view') {
+ media_tab_view($image, $NS, $AUTH, $rev);
+
+ } elseif ($opened_tab == 'edit' && !$removed) {
+ media_tab_edit($image, $NS, $AUTH);
+
+ } elseif ($opened_tab == 'history' && $conf['mediarevisions']) {
+ media_tab_history($image,$NS,$AUTH);
+ }
+
+ echo '</div>'.NL;
+}
+
+/**
* prints the namespace tree in the mediamanger popup
*
* Only allowed in mediamanager.php
@@ -1131,7 +1238,6 @@ function tpl_mediaContent($fromajax=false){
*/
function tpl_mediaTree(){
global $NS;
-
ptln('<div id="media__tree">');
media_nstree($NS);
ptln('</div>');
@@ -1341,23 +1447,93 @@ function tpl_flush(){
/**
- * Use favicon.ico from data/media root directory if it exists, otherwise use
+ * Returns icon from data/media root directory if it exists, otherwise
* the one in the template's image directory.
*
+ * @param bool $abs - if to use absolute URL
+ * @param string $fileName - file name of icon
* @author Anika Henke <anika@selfthinker.org>
*/
-function tpl_getFavicon($abs=false) {
- if (file_exists(mediaFN('favicon.ico'))) {
- return ml('favicon.ico', '', true, '', $abs);
+function tpl_getFavicon($abs=false, $fileName='favicon.ico') {
+ if (file_exists(mediaFN($fileName))) {
+ return ml($fileName, '', true, '', $abs);
}
if($abs) {
- return DOKU_URL.substr(DOKU_TPL.'images/favicon.ico', strlen(DOKU_REL));
+ return DOKU_URL.substr(DOKU_TPL.'images/'.$fileName, strlen(DOKU_REL));
}
+ return DOKU_TPL.'images/'.$fileName;
+}
- return DOKU_TPL.'images/favicon.ico';
+/**
+ * Returns <link> tag for various icon types (favicon|mobile|generic)
+ *
+ * @param array $types - list of icon types to display (favicon|mobile|generic)
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+function tpl_favicon($types=array('favicon')) {
+
+ $return = '';
+
+ foreach ($types as $type) {
+ switch($type) {
+ case 'favicon':
+ $return .= '<link rel="shortcut icon" href="'.tpl_getFavicon().'" />'.NL;
+ break;
+ case 'mobile':
+ $return .= '<link rel="apple-touch-icon" href="'.tpl_getFavicon(false, 'apple-touch-icon.png').'" />'.NL;
+ break;
+ case 'generic':
+ // ideal world solution, which doesn't work in any browser yet
+ $return .= '<link rel="icon" href="'.tpl_getFavicon(false, 'icon.svg').'" type="image/svg+xml" />'.NL;
+ break;
+ }
+ }
+
+ return $return;
}
+/**
+ * Prints full-screen media manager
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function tpl_media() {
+ global $DEL, $NS, $IMG, $AUTH, $JUMPTO, $REV, $lang, $fullscreen, $conf;
+ $fullscreen = true;
+ require_once DOKU_INC.'lib/exe/mediamanager.php';
+
+ if ($_REQUEST['image']) $image = cleanID($_REQUEST['image']);
+ if (isset($IMG)) $image = $IMG;
+ if (isset($JUMPTO)) $image = $JUMPTO;
+ if (isset($REV) && !$JUMPTO) $rev = $REV;
+
+ echo '<div id="mediamanager__page">'.NL;
+ echo '<h1>'.$lang['btn_media'].'</h1>'.NL;
+ html_msgarea();
+
+ echo '<div class="panel namespaces">'.NL;
+ echo '<h2>'.$lang['namespaces'].'</h2>'.NL;
+ echo '<div class="panelHeader">';
+ echo $lang['media_namespaces'];
+ echo '</div>'.NL;
+
+ echo '<div class="panelContent" id="media__tree">'.NL;
+ media_nstree($NS);
+ echo '</div>'.NL;
+ echo '</div>'.NL;
+
+ echo '<div class="panel filelist">'.NL;
+ tpl_mediaFileList();
+ echo '</div>'.NL;
+
+ echo '<div class="panel file">'.NL;
+ echo '<h2 class="a11y">'.$lang['media_file'].'</h2>'.NL;
+ tpl_mediaFileDetails($image, $rev);
+ echo '</div>'.NL;
+
+ echo '</div>'.NL;
+}
//Setup VIM: ex: et ts=4 :
diff --git a/inc/toolbar.php b/inc/toolbar.php
index 58d80043c..02172510e 100644
--- a/inc/toolbar.php
+++ b/inc/toolbar.php
@@ -213,7 +213,7 @@ function toolbar_JSdefines($varname){
'type' => 'picker',
'title' => $lang['qb_chars'],
'icon' => 'chars.png',
- 'list' => explode(' ','À à Á á  â à ã Ä ä Ǎ ǎ Ă ă Å å Ā ā Ą ą Æ æ Ć ć Ç ç Č č Ĉ ĉ Ċ ċ Ð đ ð Ď ď È è É é Ê ê Ë ë Ě ě Ē ē Ė ė Ę ę Ģ ģ Ĝ ĝ Ğ ğ Ġ ġ Ĥ ĥ Ì ì Í í Î î Ï ï Ǐ ǐ Ī ī İ ı Į į Ĵ ĵ Ķ ķ Ĺ ĺ Ļ ļ Ľ ľ Ł ł Ŀ ŀ Ń ń Ñ ñ Ņ ņ Ň ň Ò ò Ó ó Ô ô Õ õ Ö ö Ǒ ǒ Ō ō Ő ő Œ œ Ø ø Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ş ş Š š Ŝ ŝ Ţ ţ Ť ť Ù ù Ú ú Û û Ü ü Ǔ ǔ Ŭ ŭ Ū ū Ů ů ǖ ǘ ǚ ǜ Ų ų Ű ű Ŵ ŵ Ý ý Ÿ ÿ Ŷ ŷ Ź ź Ž ž Ż ż Þ þ ß Ħ ħ ¿ ¡ ¢ £ ¤ ¥ € ¦ § ª ¬ ¯ ° ± ÷ ‰ ¼ ½ ¾ ¹ ² ³ µ ¶ † ‡ · • º ∀ ∂ ∃ Ə ə ∅ ∇ ∈ ∉ ∋ ∏ ∑ ‾ − ∗ √ ∝ ∞ ∠ ∧ ∨ ∩ ∪ ∫ ∴ ∼ ≅ ≈ ≠ ≡ ≤ ≥ ⊂ ⊃ ⊄ ⊆ ⊇ ⊕ ⊗ ⊥ ⋅ ◊ ℘ ℑ ℜ ℵ ♠ ♣ ♥ ♦ α β Γ γ Δ δ ε ζ η Θ θ ι κ Λ λ μ Ξ ξ Π π ρ Σ σ Τ τ υ Φ φ χ Ψ ψ Ω ω ★ ☆ ☎ ☚ ☛ ☜ ☝ ☞ ☟ ☹ ☺ ✔ ✘ × „ “ ” ‚ ‘ ’ « » ‹ › — – … ← ↑ → ↓ ↔ ⇐ ⇑ ⇒ ⇓ ⇔ © ™ ® ′ ″ [ ] { } ~ ( ) % § $ # | @'),
+ 'list' => explode(' ','À à Á á  â à ã Ä ä Ǎ ǎ Ă ă Å å Ā ā Ą ą Æ æ Ć ć Ç ç Č č Ĉ ĉ Ċ ċ Ð đ ð Ď ď È è É é Ê ê Ë ë Ě ě Ē ē Ė ė Ę ę Ģ ģ Ĝ ĝ Ğ ğ Ġ ġ Ĥ ĥ Ì ì Í í Î î Ï ï Ǐ ǐ Ī ī İ ı Į į Ĵ ĵ Ķ ķ Ĺ ĺ Ļ ļ Ľ ľ Ł ł Ŀ ŀ Ń ń Ñ ñ Ņ ņ Ň ň Ò ò Ó ó Ô ô Õ õ Ö ö Ǒ ǒ Ō ō Ő ő Œ œ Ø ø Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ş ş Š š Ŝ ŝ Ţ ţ Ť ť Ù ù Ú ú Û û Ü ü Ǔ ǔ Ŭ ŭ Ū ū Ů ů ǖ ǘ ǚ ǜ Ų ų Ű ű Ŵ ŵ Ý ý Ÿ ÿ Ŷ ŷ Ź ź Ž ž Ż ż Þ þ ß Ħ ħ ¿ ¡ ¢ £ ¤ ¥ € ¦ § ª ¬ ¯ ° ± ÷ ‰ ¼ ½ ¾ ¹ ² ³ µ ¶ † ‡ · • º ∀ ∂ ∃ Ə ə ∅ ∇ ∈ ∉ ∋ ∏ ∑ ‾ − ∗ × ⁄ √ ∝ ∞ ∠ ∧ ∨ ∩ ∪ ∫ ∴ ∼ ≅ ≈ ≠ ≡ ≤ ≥ ⊂ ⊃ ⊄ ⊆ ⊇ ⊕ ⊗ ⊥ ⋅ ◊ ℘ ℑ ℜ ℵ ♠ ♣ ♥ ♦ α β Γ γ Δ δ ε ζ η Θ θ ι κ Λ λ μ Ξ ξ Π π ρ Σ σ Τ τ υ Φ φ χ Ψ ψ Ω ω ★ ☆ ☎ ☚ ☛ ☜ ☝ ☞ ☟ ☹ ☺ ✔ ✘ „ “ ” ‚ ‘ ’ « » ‹ › — – … ← ↑ → ↓ ↔ ⇐ ⇑ ⇒ ⇓ ⇔ © ™ ® ′ ″ [ ] { } ~ ( ) % § $ # | @'),
'block' => false
),
array(
diff --git a/inc/utf8.php b/inc/utf8.php
index 3d4de2289..9d0d17f78 100644
--- a/inc/utf8.php
+++ b/inc/utf8.php
@@ -1219,7 +1219,7 @@ if(empty($UTF8_SPECIAL_CHARS)) $UTF8_SPECIAL_CHARS = array(
global $UTF8_SPECIAL_CHARS2;
if(empty($UTF8_SPECIAL_CHARS2)) $UTF8_SPECIAL_CHARS2 =
"\x1A".' !"#$%&\'()+,/;<=>?@[\]^`{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•�'.
- '�—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½�'.
+ '�—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½�'.
'�¿×÷ˇ˘˙˚˛˜˝̣̀́̃̉΄΅·ϖְֱֲֳִֵֶַָֹֻּֽ־ֿ�'.
'�ׁׂ׃׳״،؛؟ـًٌٍَُِّْ٪฿‌‍‎‏–—―‗‘’‚“”�'.
'��†‡•…‰′″‹›⁄₧₪₫€№℘™Ωℵ←↑→↓↔↕↵'.
@@ -1261,6 +1261,7 @@ if(empty($UTF8_SPECIAL_CHARS2)) $UTF8_SPECIAL_CHARS2 =
* @link http://www.btranslations.com/resources/romanization/korean.asp
* @author Arthit Suriyawongkul <arthit@gmail.com>
* @author Denis Scheither <amorphis@uni-bremen.de>
+ * @author Eivind Morland <eivind.morland@gmail.com>
*/
global $UTF8_ROMANIZATION;
if(empty($UTF8_ROMANIZATION)) $UTF8_ROMANIZATION = array(
@@ -1293,6 +1294,11 @@ if(empty($UTF8_ROMANIZATION)) $UTF8_ROMANIZATION = array(
'ड'=>'dq','ढ'=>'dqh','ण'=>'nq','त'=>'t','थ'=>'th','द'=>'d','ध'=>'dh',
'न'=>'n','प'=>'p','फ'=>'ph','ब'=>'b','भ'=>'bh','म'=>'m','य'=>'z','र'=>'r',
'ल'=>'l','व'=>'v','श'=>'sh','ष'=>'sqh','स'=>'s','ह'=>'x',
+ //Sanskrit diacritics
+ 'Ā'=>'A','Ī'=>'I','Ū'=>'U','Ṛ'=>'R','Ṝ'=>'R','Ṅ'=>'N','Ñ'=>'N','Ṭ'=>'T',
+ 'Ḍ'=>'D','Ṇ'=>'N','Ś'=>'S','Ṣ'=>'S','Ṁ'=>'M','Ṃ'=>'M','Ḥ'=>'H','Ḷ'=>'L','Ḹ'=>'L',
+ 'ā'=>'a','ī'=>'i','ū'=>'u','ṛ'=>'r','ṝ'=>'r','ṅ'=>'n','ñ'=>'n','ṭ'=>'t',
+ 'ḍ'=>'d','ṇ'=>'n','ś'=>'s','ṣ'=>'s','ṁ'=>'m','ṃ'=>'m','ḥ'=>'h','ḷ'=>'l','ḹ'=>'l',
//Hebrew
'א'=>'a', 'ב'=>'b','ג'=>'g','ד'=>'d','ה'=>'h','ו'=>'v','ז'=>'z','ח'=>'kh','ט'=>'th',
'י'=>'y','ך'=>'h','כ'=>'k','ל'=>'l','ם'=>'m','מ'=>'m','ן'=>'n','נ'=>'n',