summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Lang <dokuwiki@adrianlang.de>2011-01-14 21:45:52 +0100
committerAdrian Lang <dokuwiki@adrianlang.de>2011-01-14 21:45:52 +0100
commit731ae6527af8e2b8cdb211aecac260988e8379e9 (patch)
treea44a5637394e7fee3c5835e3955cd716699bbea8
parentfa7c70ff4d7f9999466436e7d559eb0c81571779 (diff)
parent301971b3769a2d1a440cf58fd84f2c100a1348e3 (diff)
downloadrpg-731ae6527af8e2b8cdb211aecac260988e8379e9.tar.gz
rpg-731ae6527af8e2b8cdb211aecac260988e8379e9.tar.bz2
Merge branch 'master' of github.com:splitbrain/dokuwiki
-rw-r--r--.gitignore2
-rw-r--r--_test/cases/inc/auth_admincheck.test.php88
-rw-r--r--_test/cases/inc/parser/xhtml_links.test.php4
-rw-r--r--_test/cases/lib/exe/css_css_loadfile.test.php57
-rw-r--r--conf/dokuwiki.php1
-rw-r--r--conf/interwiki.conf1
-rw-r--r--inc/EmailAddressValidator.php42
-rw-r--r--inc/HTTPClient.php89
-rw-r--r--inc/TarLib.class.php2
-rw-r--r--inc/actions.php5
-rw-r--r--inc/adLDAP.php118
-rw-r--r--inc/auth.php118
-rw-r--r--inc/changelog.php5
-rw-r--r--inc/common.php16
-rw-r--r--inc/form.php16
-rw-r--r--inc/fulltext.php7
-rw-r--r--inc/html.php11
-rw-r--r--inc/indexer.php2
-rw-r--r--inc/infoutils.php4
-rw-r--r--inc/init.php16
-rw-r--r--inc/io.php2
-rw-r--r--inc/lang/ar/lang.php129
-rw-r--r--inc/lang/de-informal/lang.php74
-rw-r--r--inc/lang/de-informal/subscr_digest.txt6
-rw-r--r--inc/lang/de-informal/subscr_single.txt12
-rw-r--r--inc/lang/de/lang.php4
-rw-r--r--inc/lang/de/subscr_digest.txt4
-rw-r--r--inc/lang/de/subscr_single.txt12
-rw-r--r--inc/lang/he/conflict.txt6
-rw-r--r--inc/lang/he/denied.txt2
-rw-r--r--inc/lang/he/draft.txt4
-rw-r--r--inc/lang/he/edit.txt2
-rw-r--r--inc/lang/he/editrev.txt2
-rw-r--r--inc/lang/he/index.txt4
-rw-r--r--inc/lang/he/install.html16
-rw-r--r--inc/lang/he/lang.php328
-rw-r--r--inc/lang/he/mailtext.txt20
-rw-r--r--inc/lang/he/password.txt8
-rw-r--r--inc/lang/he/pwconfirm.txt8
-rw-r--r--inc/lang/he/read.txt2
-rw-r--r--inc/lang/he/register.txt2
-rw-r--r--inc/lang/he/registermail.txt10
-rw-r--r--inc/lang/he/resendpwd.txt4
-rw-r--r--inc/lang/he/subscr_digest.txt20
-rw-r--r--inc/lang/he/subscr_single.txt22
-rw-r--r--inc/lang/la/conflict.txt6
-rw-r--r--inc/lang/la/editrev.txt2
-rw-r--r--inc/lang/la/index.txt2
-rw-r--r--inc/lang/la/install.html8
-rw-r--r--inc/lang/la/lang.php51
-rw-r--r--inc/lang/la/norev.txt4
-rw-r--r--inc/lang/la/showrev.txt2
-rw-r--r--inc/lang/la/subscr_digest.txt2
-rw-r--r--inc/lang/la/subscr_form.txt2
-rw-r--r--inc/lang/la/subscr_list.txt2
-rw-r--r--inc/lang/la/subscr_single.txt2
-rw-r--r--inc/lang/ru/conflict.txt2
-rw-r--r--inc/lang/ru/draft.txt2
-rw-r--r--inc/lang/ru/edit.txt2
-rw-r--r--inc/lang/ru/editrev.txt2
-rw-r--r--inc/lang/ru/install.html4
-rw-r--r--inc/lang/ru/lang.php42
-rw-r--r--inc/lang/ru/norev.txt2
-rw-r--r--inc/lang/ru/password.txt7
-rw-r--r--inc/lang/ru/preview.txt2
-rw-r--r--inc/lang/ru/pwconfirm.txt2
-rw-r--r--inc/lang/ru/revisions.txt2
-rw-r--r--inc/lang/ru/searchpage.txt2
-rw-r--r--inc/lang/ru/showrev.txt2
-rw-r--r--inc/lang/ru/subscr_digest.txt2
-rw-r--r--inc/lang/ru/subscr_list.txt7
-rw-r--r--inc/lang/ru/subscr_single.txt10
-rw-r--r--inc/lang/sl/admin.txt3
-rw-r--r--inc/lang/sl/adminplugins.txt1
-rw-r--r--inc/lang/sl/draft.txt5
-rw-r--r--inc/lang/sl/lang.php130
-rw-r--r--inc/lang/sl/subscr_digest.txt20
-rw-r--r--inc/lang/sl/subscr_form.txt3
-rw-r--r--inc/lang/sl/subscr_list.txt17
-rw-r--r--inc/lang/sl/updateprofile.txt3
-rw-r--r--inc/lang/sl/uploadmail.txt13
-rw-r--r--inc/mail.php5
-rw-r--r--inc/pageutils.php20
-rw-r--r--inc/parser/metadata.php5
-rw-r--r--inc/parser/xhtml.php4
-rw-r--r--inc/parserutils.php54
-rw-r--r--inc/plugin.php11
-rw-r--r--inc/subscription.php2
-rw-r--r--inc/template.php24
-rw-r--r--lib/exe/ajax.php456
-rw-r--r--lib/exe/css.php29
-rw-r--r--lib/images/interwiki/paypal.gifbin0 -> 942 bytes
-rw-r--r--lib/images/interwiki/sb.gifbin886 -> 1000 bytes
-rw-r--r--lib/plugins/acl/lang/de-informal/lang.php1
-rw-r--r--lib/plugins/acl/lang/de/lang.php2
-rw-r--r--lib/plugins/acl/lang/he/lang.php1
-rw-r--r--lib/plugins/acl/lang/la/help.txt4
-rw-r--r--lib/plugins/acl/lang/la/lang.php19
-rw-r--r--lib/plugins/acl/lang/ru/help.txt16
-rw-r--r--lib/plugins/acl/lang/ru/lang.php2
-rw-r--r--lib/plugins/acl/lang/sl/lang.php15
-rw-r--r--lib/plugins/config/lang/ar/lang.php9
-rw-r--r--lib/plugins/config/lang/de-informal/lang.php2
-rw-r--r--lib/plugins/config/lang/de/lang.php3
-rw-r--r--lib/plugins/config/lang/en/lang.php1
-rw-r--r--lib/plugins/config/lang/he/lang.php1
-rw-r--r--lib/plugins/config/lang/la/intro.txt4
-rw-r--r--lib/plugins/config/lang/la/lang.php23
-rw-r--r--lib/plugins/config/lang/ru/intro.txt4
-rw-r--r--lib/plugins/config/lang/ru/lang.php49
-rw-r--r--lib/plugins/config/lang/sl/lang.php1
-rw-r--r--lib/plugins/config/settings/config.metadata.php1
-rw-r--r--lib/plugins/plugin/lang/de-informal/lang.php1
-rw-r--r--lib/plugins/plugin/lang/de/lang.php2
-rw-r--r--lib/plugins/plugin/lang/he/lang.php1
-rw-r--r--lib/plugins/plugin/lang/la/admin_plugin.txt2
-rw-r--r--lib/plugins/plugin/lang/la/lang.php3
-rw-r--r--lib/plugins/plugin/lang/pt-br/admin_plugin.txt2
-rw-r--r--lib/plugins/plugin/lang/ru/lang.php8
-rw-r--r--lib/plugins/plugin/lang/sl/lang.php1
-rw-r--r--lib/plugins/popularity/action.php57
-rw-r--r--lib/plugins/popularity/admin.php277
-rw-r--r--lib/plugins/popularity/helper.php291
-rw-r--r--lib/plugins/popularity/lang/ar/lang.php5
-rw-r--r--lib/plugins/popularity/lang/ar/submitted.txt3
-rw-r--r--lib/plugins/popularity/lang/de-informal/lang.php6
-rw-r--r--lib/plugins/popularity/lang/de-informal/submitted.txt3
-rw-r--r--lib/plugins/popularity/lang/de/lang.php7
-rw-r--r--lib/plugins/popularity/lang/de/submitted.txt3
-rw-r--r--lib/plugins/popularity/lang/en/lang.php9
-rw-r--r--lib/plugins/popularity/lang/en/submitted.txt3
-rw-r--r--lib/plugins/popularity/lang/es/lang.php5
-rw-r--r--lib/plugins/popularity/lang/es/submitted.txt3
-rw-r--r--lib/plugins/popularity/lang/he/lang.php1
-rw-r--r--lib/plugins/popularity/lang/la/intro.txt9
-rw-r--r--lib/plugins/popularity/lang/la/lang.php6
-rw-r--r--lib/plugins/popularity/lang/la/submitted.txt3
-rw-r--r--lib/plugins/popularity/lang/ru/intro.txt6
-rw-r--r--lib/plugins/popularity/lang/ru/lang.php5
-rw-r--r--lib/plugins/popularity/lang/sl/lang.php1
-rw-r--r--lib/plugins/popularity/plugin.info.txt7
-rw-r--r--lib/plugins/revert/lang/de-informal/lang.php1
-rw-r--r--lib/plugins/revert/lang/de/lang.php2
-rw-r--r--lib/plugins/revert/lang/he/lang.php1
-rw-r--r--lib/plugins/revert/lang/la/intro.txt2
-rw-r--r--lib/plugins/revert/lang/la/lang.php1
-rw-r--r--lib/plugins/revert/lang/ru/intro.txt2
-rw-r--r--lib/plugins/revert/lang/sl/lang.php1
-rw-r--r--lib/plugins/syntax.php11
-rw-r--r--lib/plugins/usermanager/lang/de-informal/lang.php1
-rw-r--r--lib/plugins/usermanager/lang/de/lang.php2
-rw-r--r--lib/plugins/usermanager/lang/he/lang.php1
-rw-r--r--lib/plugins/usermanager/lang/la/lang.php1
-rw-r--r--lib/plugins/usermanager/lang/ru/lang.php4
-rw-r--r--lib/plugins/usermanager/lang/sl/lang.php18
-rw-r--r--lib/scripts/ajax.js49
-rw-r--r--lib/tpl/default/rtl.css3
157 files changed, 2180 insertions, 1095 deletions
diff --git a/.gitignore b/.gitignore
index 2d7f2df97..4fb846732 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,8 @@
/conf/user*.css
/conf/user*.js
/conf/words.aspell
+/conf/lang/*
+/conf/plugin_lang/*
.htaccess
*.swp
*.bak
diff --git a/_test/cases/inc/auth_admincheck.test.php b/_test/cases/inc/auth_admincheck.test.php
index b21c2fe27..a71c8801a 100644
--- a/_test/cases/inc/auth_admincheck.test.php
+++ b/_test/cases/inc/auth_admincheck.test.php
@@ -3,20 +3,47 @@
require_once DOKU_INC.'inc/init.php';
require_once DOKU_INC.'inc/auth.php';
+class auth_admin_test_AuthInSensitive extends auth_basic {
+ function isCaseSensitive(){
+ return false;
+ }
+}
+
class auth_admin_test extends UnitTestCase {
+ private $oldauth;
+
+ function setup() {
+ global $auth;
+ $this->oldauth = $auth;
+ parent::setup();
+ }
+
+ function setSensitive() {
+ global $auth;
+ $auth = new auth_basic;
+ }
+
+ function setInSensitive() {
+ global $auth;
+ $auth = new auth_admin_test_AuthInSensitive;
+ }
+
function teardown() {
+ global $auth;
global $conf;
global $AUTH_ACL;
unset($conf);
unset($AUTH_ACL);
-
+ $auth = $this->oldauth;
+ parent::teardown();
}
- function test_ismanager(){
+ function test_ismanager_insensitive(){
+ $this->setInSensitive();
global $conf;
- $conf['superuser'] = 'john,@admin';
- $conf['manager'] = 'john,@managers,doe';
+ $conf['superuser'] = 'john,@admin,@Mötly Görls, Dörte';
+ $conf['manager'] = 'john,@managers,doe, @Mötly Böys, Dänny';
// anonymous user
$this->assertEqual(auth_ismanager('jill', null,false), false);
@@ -25,12 +52,19 @@ class auth_admin_test extends UnitTestCase {
$this->assertEqual(auth_ismanager('john', null,false), true);
$this->assertEqual(auth_ismanager('doe', null,false), true);
+ $this->assertEqual(auth_ismanager('dörte', null,false), true);
+ $this->assertEqual(auth_ismanager('dänny', null,false), true);
+
// admin or manager groups
$this->assertEqual(auth_ismanager('jill', array('admin'),false), true);
$this->assertEqual(auth_ismanager('jill', array('managers'),false), true);
+
+ $this->assertEqual(auth_ismanager('jill', array('mötly görls'),false), true);
+ $this->assertEqual(auth_ismanager('jill', array('mötly böys'),false), true);
}
- function test_isadmin(){
+ function test_isadmin_insensitive(){
+ $this->setInSensitive();
global $conf;
$conf['superuser'] = 'john,@admin,doe,@roots';
@@ -48,6 +82,50 @@ class auth_admin_test extends UnitTestCase {
$this->assertEqual(auth_ismanager('doe', array('admin'),true), true);
}
+ function test_ismanager_sensitive(){
+ $this->setSensitive();
+ global $conf;
+ $conf['superuser'] = 'john,@admin,@Mötly Görls, Dörte';
+ $conf['manager'] = 'john,@managers,doe, @Mötly Böys, Dänny';
+
+ // anonymous user
+ $this->assertEqual(auth_ismanager('jill', null,false), false);
+
+ // admin or manager users
+ $this->assertEqual(auth_ismanager('john', null,false), true);
+ $this->assertEqual(auth_ismanager('doe', null,false), true);
+
+ $this->assertEqual(auth_ismanager('dörte', null,false), false);
+ $this->assertEqual(auth_ismanager('dänny', null,false), false);
+
+ // admin or manager groups
+ $this->assertEqual(auth_ismanager('jill', array('admin'),false), true);
+ $this->assertEqual(auth_ismanager('jill', array('managers'),false), true);
+
+ $this->assertEqual(auth_ismanager('jill', array('mötly görls'),false), false);
+ $this->assertEqual(auth_ismanager('jill', array('mötly böys'),false), false);
+ }
+
+ function test_isadmin_sensitive(){
+ $this->setSensitive();
+ global $conf;
+ $conf['superuser'] = 'john,@admin,doe,@roots';
+
+ // anonymous user
+ $this->assertEqual(auth_ismanager('jill', null,true), false);
+
+ // admin user
+ $this->assertEqual(auth_ismanager('john', null,true), true);
+ $this->assertEqual(auth_ismanager('Doe', null,true), false);
+
+ // admin groups
+ $this->assertEqual(auth_ismanager('jill', array('admin'),true), true);
+ $this->assertEqual(auth_ismanager('jill', array('roots'),true), true);
+ $this->assertEqual(auth_ismanager('john', array('admin'),true), true);
+ $this->assertEqual(auth_ismanager('doe', array('admin'),true), true);
+ $this->assertEqual(auth_ismanager('Doe', array('admin'),true), true);
+ }
+
}
//Setup VIM: ex: et ts=4 :
diff --git a/_test/cases/inc/parser/xhtml_links.test.php b/_test/cases/inc/parser/xhtml_links.test.php
index 6a74445b0..0ad96c793 100644
--- a/_test/cases/inc/parser/xhtml_links.test.php
+++ b/_test/cases/inc/parser/xhtml_links.test.php
@@ -12,7 +12,7 @@ class xhtml_links_test extends UnitTestCase {
$p = new Doku_Renderer_xhtml();
$p->emaillink('foo@example.com','<script>alert(\'"alert"\');</script>');
- $expect = '<a href="mailto:foo%20%5Bat%5D%20example%20%5Bdot%5D%20com" class="mail JSnocheck" title="foo [at] example [dot] com">&lt;script&gt;alert(&#039;&quot;alert&quot;&#039;);&lt;/script&gt;</a>';
+ $expect = '<a href="mailto:foo%20%5Bat%5D%20example%20%5Bdot%5D%20com" class="mail" title="foo [at] example [dot] com">&lt;script&gt;alert(&#039;&quot;alert&quot;&#039;);&lt;/script&gt;</a>';
$this->assertEqual($p->doc,$expect);
}
@@ -36,7 +36,7 @@ class xhtml_links_test extends UnitTestCase {
$p = new Doku_Renderer_xhtml();
$p->emaillink('foo@example.com',$image);
- $expect = '<a href="mailto:foo%20%5Bat%5D%20example%20%5Bdot%5D%20com" class="media JSnocheck" title="foo [at] example [dot] com"><img src="'.DOKU_BASE.'lib/exe/fetch.php/img.gif?w=10&amp;h=20&amp;cache=nocache" class="media" title="Some Image" alt="Some Image" width="10" height="20" /></a>';
+ $expect = '<a href="mailto:foo%20%5Bat%5D%20example%20%5Bdot%5D%20com" class="media" title="foo [at] example [dot] com"><img src="'.DOKU_BASE.'lib/exe/fetch.php/img.gif?w=10&amp;h=20&amp;cache=nocache" class="media" title="Some Image" alt="Some Image" width="10" height="20" /></a>';
$this->assertEqual($p->doc,$expect);
}
diff --git a/_test/cases/lib/exe/css_css_loadfile.test.php b/_test/cases/lib/exe/css_css_loadfile.test.php
new file mode 100644
index 000000000..a444d0086
--- /dev/null
+++ b/_test/cases/lib/exe/css_css_loadfile.test.php
@@ -0,0 +1,57 @@
+<?php
+
+require_once DOKU_INC.'lib/exe/css.php';
+
+class css_css_loadfile_test extends UnitTestCase {
+ public function setUp() {
+ $this->file = tempnam('/tmp', 'css');
+ parent::setUp();
+ }
+
+ private function csstest($input, $output = null, $location = 'http://www.example.com/') {
+ io_saveFile($this->file, $input);
+ $this->assertEqual(css_loadfile($this->file, $location), (is_null($output) ? $input : $output));
+ }
+
+ public function test_url_relative() {
+ $this->csstest('#test { background: url("test/test.png"); }', '#test { background: url("http://www.example.com/test/test.png"); }');
+ $this->csstest('#test { background: url(\'test/test.png\'); }', '#test { background: url(\'http://www.example.com/test/test.png\'); }');
+ }
+
+ public function test_url_absolute() {
+ $this->csstest('#test { background: url("/test/test.png"); }');
+ $this->csstest('#test { background: url(\'/test/test.png\'); }');
+ }
+
+ public function test_url_with_protocol() {
+ $this->csstest('#test { background: url("http://www.test.com/test/test.png"); }');
+ $this->csstest('#test { background: url("https://www.test.com/test/test.png"); }');
+ $this->csstest('#test { background: url(\'http://www.test.com/test/test.png\'); }');
+ $this->csstest('#test { background: url(\'https://www.test.com/test/test.png\'); }');
+ }
+
+ public function test_import_relative() {
+ $this->csstest('@import "test/test.png";', '@import "http://www.example.com/test/test.png";');
+ $this->csstest('@import \'test/test.png\';', '@import \'http://www.example.com/test/test.png\';');
+ }
+
+ public function test_import_absolute() {
+ $this->csstest('@import "/test/test.png";');
+ $this->csstest('@import \'/test/test.png\';');
+ }
+
+ public function test_import_with_protocol() {
+ $this->csstest('@import "http://www.test.com/test/test.png";');
+ $this->csstest('@import "https://www.test.com/test/test.png";');
+ $this->csstest('@import \'http://www.test.com/test/test.png\';');
+ $this->csstest('@import \'https://www.test.com/test/test.png\';');
+ }
+
+ public function tearDown() {
+ unlink($this->file);
+ unset($this->file);
+ parent::tearDown();
+ }
+}
+
+//Setup VIM: ex: et ts=4 sw=4 :
diff --git a/conf/dokuwiki.php b/conf/dokuwiki.php
index 9e289d9bc..538b9f9da 100644
--- a/conf/dokuwiki.php
+++ b/conf/dokuwiki.php
@@ -99,6 +99,7 @@ $conf['fetchsize'] = 0; //maximum size (bytes) fetch.php may do
$conf['notify'] = ''; //send change info to this email (leave blank for nobody)
$conf['registernotify'] = ''; //send info about newly registered users to this email (leave blank for nobody)
$conf['mailfrom'] = ''; //use this email when sending mails
+$conf['mailprefix'] = ''; //use this as prefix of outgoing mails
$conf['gzip_output'] = 0; //use gzip content encodeing for the output xhtml (if allowed by browser)
$conf['gdlib'] = 2; //the GDlib version (0, 1 or 2) 2 tries to autodetect
$conf['im_convert'] = ''; //path to ImageMagicks convert (will be used instead of GD)
diff --git a/conf/interwiki.conf b/conf/interwiki.conf
index 0e855f626..702696792 100644
--- a/conf/interwiki.conf
+++ b/conf/interwiki.conf
@@ -21,6 +21,7 @@ man http://man.cx/
amazon http://www.amazon.com/exec/obidos/ASIN/{URL}/splitbrain-20/
amazon.de http://www.amazon.de/exec/obidos/ASIN/{URL}/splitbrain-21/
amazon.uk http://www.amazon.co.uk/exec/obidos/ASIN/
+paypal https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&amp;business=
phpfn http://www.php.net/{NAME}
coral http://{HOST}.{PORT}.nyud.net:8090/{PATH}?{QUERY}
freecache http://freecache.org/{NAME}
diff --git a/inc/EmailAddressValidator.php b/inc/EmailAddressValidator.php
index 2ce2093e2..31b34cc58 100644
--- a/inc/EmailAddressValidator.php
+++ b/inc/EmailAddressValidator.php
@@ -5,21 +5,38 @@
* @author Dave Child <dave@addedbytes.com>
* @link http://code.google.com/p/php-email-address-validation/
* @license http://www.opensource.org/licenses/bsd-license.php
+ * @version SVN r10 + Issue 15 fix
*/
class EmailAddressValidator {
+ /**
+ * Set true to allow addresses like me@localhost
+ */
+ public $allowLocalAddresses = false;
/**
* Check email address validity
* @param strEmailAddress Email address to be checked
* @return True if email is valid, false if not
*/
- function check_email_address($strEmailAddress) {
+ public function check_email_address($strEmailAddress) {
+
+ // If magic quotes is "on", email addresses with quote marks will
+ // fail validation because of added escape characters. Uncommenting
+ // the next three lines will allow for this issue.
+ //if (get_magic_quotes_gpc()) {
+ // $strEmailAddress = stripslashes($strEmailAddress);
+ //}
// Control characters are not allowed
if (preg_match('/[\x00-\x1F\x7F-\xFF]/', $strEmailAddress)) {
return false;
}
+ // Check email length - min 3 (a@a), max 256
+ if (!$this->check_text_length($strEmailAddress, 3, 256)) {
+ return false;
+ }
+
// Split it into sections using last instance of "@"
$intAtSymbol = strrpos($strEmailAddress, '@');
if ($intAtSymbol === false) {
@@ -31,10 +48,15 @@ class EmailAddressValidator {
// Count the "@" symbols. Only one is allowed, except where
// contained in quote marks in the local part. Quickest way to
- // check this is to remove anything in quotes.
- $arrTempAddress[0] = preg_replace('/"[^"]+"/'
+ // check this is to remove anything in quotes. We also remove
+ // characters escaped with backslash, and the backslash
+ // character.
+ $arrTempAddress[0] = preg_replace('/\./'
,''
,$arrEmailAddress[0]);
+ $arrTempAddress[0] = preg_replace('/"[^"]+"/'
+ ,''
+ ,$arrTempAddress[0]);
$arrTempAddress[1] = $arrEmailAddress[1];
$strTempAddress = $arrTempAddress[0] . $arrTempAddress[1];
// Then check - should be no "@" symbols.
@@ -63,7 +85,7 @@ class EmailAddressValidator {
* @param strLocalPortion Text to be checked
* @return True if local portion is valid, false if not
*/
- function check_local_portion($strLocalPortion) {
+ protected function check_local_portion($strLocalPortion) {
// Local portion can only be from 1 to 64 characters, inclusive.
// Please note that servers are encouraged to accept longer local
// parts than 64 characters.
@@ -94,7 +116,7 @@ class EmailAddressValidator {
* @param strDomainPortion Text to be checked
* @return True if domain portion is valid, false if not
*/
- function check_domain_portion($strDomainPortion) {
+ protected function check_domain_portion($strDomainPortion) {
// Total domain can only be from 1 to 255 characters, inclusive
if (!$this->check_text_length($strDomainPortion, 1, 255)) {
return false;
@@ -109,7 +131,7 @@ class EmailAddressValidator {
return true;
} else {
$arrDomainPortion = explode('.', $strDomainPortion);
- if (sizeof($arrDomainPortion) < 2) {
+ if (!$this->allowLocalAddresses && sizeof($arrDomainPortion) < 2) {
return false; // Not enough parts to domain
}
for ($i = 0, $max = sizeof($arrDomainPortion); $i < $max; $i++) {
@@ -121,6 +143,11 @@ class EmailAddressValidator {
.'([A-Za-z0-9]+))$/', $arrDomainPortion[$i])) {
return false;
}
+ if ($i == $max - 1) { // TLD cannot be only numbers
+ if (strlen(preg_replace('/[0-9]/', '', $arrDomainPortion[$i])) <= 0) {
+ return false;
+ }
+ }
}
}
return true;
@@ -133,7 +160,7 @@ class EmailAddressValidator {
* @param intMaximum Maximum acceptable length
* @return True if string is within bounds (inclusive), false if not
*/
- function check_text_length($strText, $intMinimum, $intMaximum) {
+ protected function check_text_length($strText, $intMinimum, $intMaximum) {
// Minimum and maximum are both inclusive
$intTextLength = strlen($strText);
if (($intTextLength < $intMinimum) || ($intTextLength > $intMaximum)) {
@@ -142,5 +169,6 @@ class EmailAddressValidator {
return true;
}
}
+
}
diff --git a/inc/HTTPClient.php b/inc/HTTPClient.php
index a9afef9f9..1cb16714d 100644
--- a/inc/HTTPClient.php
+++ b/inc/HTTPClient.php
@@ -71,6 +71,7 @@ class DokuHTTPClient extends HTTPClient {
* @link http://www.splitbrain.org/go/videodb
* @author Andreas Goetz <cpuidle@gmx.de>
* @author Andreas Gohr <andi@splitbrain.org>
+ * @author Tobias Sarnowski <sarnowski@new-thoughts.org>
*/
class HTTPClient {
//set these if you like
@@ -86,6 +87,7 @@ class HTTPClient {
var $headers;
var $debug;
var $start = 0; // for timings
+ var $keep_alive = true; // keep alive rocks
// don't set these, read on error
var $error;
@@ -108,6 +110,9 @@ class HTTPClient {
var $proxy_ssl; //boolean set to true if your proxy needs SSL
var $proxy_except; // regexp of URLs to exclude from proxy
+ // list of kept alive connections
+ static $connections = array();
+
// what we use as boundary on multipart/form-data posts
var $boundary = '---DokuWikiHTTPClient--4523452351';
@@ -247,7 +252,11 @@ class HTTPClient {
if($uri['port']) $headers['Host'].= ':'.$uri['port'];
$headers['User-Agent'] = $this->agent;
$headers['Referer'] = $this->referer;
- $headers['Connection'] = 'Close';
+ if ($this->keep_alive) {
+ $headers['Connection'] = 'Keep-Alive';
+ } else {
+ $headers['Connection'] = 'Close';
+ }
if($method == 'POST'){
if(is_array($data)){
if($headers['Content-Type'] == 'multipart/form-data'){
@@ -273,15 +282,33 @@ class HTTPClient {
// stop time
$start = time();
- // open socket
- $socket = @fsockopen($server,$port,$errno, $errstr, $this->timeout);
- if (!$socket){
- $this->status = -100;
- $this->error = "Could not connect to $server:$port\n$errstr ($errno)";
- return false;
+ // already connected?
+ $connectionId = $this->_uniqueConnectionId($server,$port);
+ $this->_debug('connection pool', $this->connections);
+ $socket = null;
+ if (isset($this->connections[$connectionId])) {
+ $this->_debug('reusing connection', $connectionId);
+ $socket = $this->connections[$connectionId];
+ }
+ if (is_null($socket) || feof($socket)) {
+ $this->_debug('opening connection', $connectionId);
+ // open socket
+ $socket = @fsockopen($server,$port,$errno, $errstr, $this->timeout);
+ if (!$socket){
+ $this->status = -100;
+ $this->error = "Could not connect to $server:$port\n$errstr ($errno)";
+ return false;
+ }
+ //set non blocking
+ stream_set_blocking($socket,0);
+
+ // keep alive?
+ if ($this->keep_alive) {
+ $this->connections[$connectionId] = $socket;
+ } else {
+ unset($this->connections[$connectionId]);
+ }
}
- //set non blocking
- stream_set_blocking($socket,0);
// build request
$request = "$method $request_url HTTP/".$this->http.HTTP_NL;
@@ -300,6 +327,7 @@ class HTTPClient {
if($ret === false){
$this->status = -100;
$this->error = 'Failed writing to socket';
+ unset($this->connections[$connectionId]);
return false;
}
$written += $ret;
@@ -311,10 +339,12 @@ class HTTPClient {
if(time()-$start > $this->timeout){
$this->status = -100;
$this->error = sprintf('Timeout while reading headers (%.3fs)',$this->_time() - $this->start);
+ unset($this->connections[$connectionId]);
return false;
}
if(feof($socket)){
$this->error = 'Premature End of File (socket)';
+ unset($this->connections[$connectionId]);
return false;
}
$r_headers .= fgets($socket,1024);
@@ -327,6 +357,7 @@ class HTTPClient {
if($match[1] > $this->max_bodysize){
$this->error = 'Reported content length exceeds allowed response size';
if ($this->max_bodysize_abort)
+ unset($this->connections[$connectionId]);
return false;
}
}
@@ -334,6 +365,7 @@ class HTTPClient {
// get Status
if (!preg_match('/^HTTP\/(\d\.\d)\s*(\d+).*?\n/', $r_headers, $m)) {
$this->error = 'Server returned bad answer';
+ unset($this->connections[$connectionId]);
return false;
}
$this->status = $m[2];
@@ -359,6 +391,11 @@ class HTTPClient {
// check server status code to follow redirect
if($this->status == 301 || $this->status == 302 ){
+ // close the connection because we don't handle content retrieval here
+ // that's the easiest way to clean up the connection
+ fclose($socket);
+ unset($this->connections[$connectionId]);
+
if (empty($this->resp_headers['location'])){
$this->error = 'Redirect but no Location Header found';
return false;
@@ -386,6 +423,7 @@ class HTTPClient {
// check if headers are as expected
if($this->header_regexp && !preg_match($this->header_regexp,$r_headers)){
$this->error = 'The received headers did not match the given regexp';
+ unset($this->connections[$connectionId]);
return false;
}
@@ -397,11 +435,13 @@ class HTTPClient {
do {
if(feof($socket)){
$this->error = 'Premature End of File (socket)';
+ unset($this->connections[$connectionId]);
return false;
}
if(time()-$start > $this->timeout){
$this->status = -100;
$this->error = sprintf('Timeout while reading chunk (%.3fs)',$this->_time() - $this->start);
+ unset($this->connections[$connectionId]);
return false;
}
$byte = fread($socket,1);
@@ -418,10 +458,12 @@ class HTTPClient {
if($this->max_bodysize && strlen($r_body) > $this->max_bodysize){
$this->error = 'Allowed response size exceeded';
- if ($this->max_bodysize_abort)
+ if ($this->max_bodysize_abort){
+ unset($this->connections[$connectionId]);
return false;
- else
+ } else {
break;
+ }
}
} while ($chunk_size);
}else{
@@ -430,16 +472,19 @@ class HTTPClient {
if(time()-$start > $this->timeout){
$this->status = -100;
$this->error = sprintf('Timeout while reading response (%.3fs)',$this->_time() - $this->start);
+ unset($this->connections[$connectionId]);
return false;
}
$r_body .= fread($socket,4096);
$r_size = strlen($r_body);
if($this->max_bodysize && $r_size > $this->max_bodysize){
$this->error = 'Allowed response size exceeded';
- if ($this->max_bodysize_abort)
+ if ($this->max_bodysize_abort) {
+ unset($this->connections[$connectionId]);
return false;
- else
+ } else {
break;
+ }
}
if(isset($this->resp_headers['content-length']) &&
!isset($this->resp_headers['transfer-encoding']) &&
@@ -450,9 +495,13 @@ class HTTPClient {
}
}
- // close socket
- $status = socket_get_status($socket);
- fclose($socket);
+ if (!$this->keep_alive ||
+ (isset($this->resp_headers['connection']) && $this->resp_headers['connection'] == 'Close')) {
+ // close socket
+ $status = socket_get_status($socket);
+ fclose($socket);
+ unset($this->connections[$connectionId]);
+ }
// decode gzip if needed
if(isset($this->resp_headers['content-encoding']) &&
@@ -599,6 +648,14 @@ class HTTPClient {
return $out;
}
+ /**
+ * Generates a unique identifier for a connection.
+ *
+ * @return string unique identifier
+ */
+ function _uniqueConnectionId($server, $port) {
+ return "$server:$port";
+ }
}
//Setup VIM: ex: et ts=4 :
diff --git a/inc/TarLib.class.php b/inc/TarLib.class.php
index 7a7acdbdb..12418c48d 100644
--- a/inc/TarLib.class.php
+++ b/inc/TarLib.class.php
@@ -7,7 +7,7 @@
*
* Modified for Dokuwiki
*
- * @license GPL
+ * @license LGPL-2.1
* @link http://docs.maxg.info
* @author Bouchon <tarlib@bouchon.org> (Maxg)
* @author Christopher Smith <chris@jalakai.co.uk>
diff --git a/inc/actions.php b/inc/actions.php
index d98382a3b..016af4aea 100644
--- a/inc/actions.php
+++ b/inc/actions.php
@@ -292,10 +292,10 @@ function act_draftsave($act){
global $conf;
if($conf['usedraft'] && $_POST['wikitext']){
$draft = array('id' => $ID,
- 'prefix' => $_POST['prefix'],
+ 'prefix' => substr($_POST['prefix'], 0, -1),
'text' => $_POST['wikitext'],
'suffix' => $_POST['suffix'],
- 'date' => $_POST['date'],
+ 'date' => (int) $_POST['date'],
'client' => $INFO['client'],
);
$cname = getCacheName($draft['client'].$ID,'.draft');
@@ -626,6 +626,7 @@ function act_sitemap($act) {
if (is_readable($sitemap)) {
// Send headers
header('Content-Type: '.$mime);
+ header('Content-Disposition: attachment; filename='.basename($sitemap));
http_conditionalRequest(filemtime($sitemap));
diff --git a/inc/adLDAP.php b/inc/adLDAP.php
index 94cd8a50d..4c8ee5db3 100644
--- a/inc/adLDAP.php
+++ b/inc/adLDAP.php
@@ -1,7 +1,7 @@
<?php
/**
* PHP LDAP CLASS FOR MANIPULATING ACTIVE DIRECTORY
- * Version 3.3.1
+ * Version 3.3.2
*
* PHP Version 5 with SSL and LDAP support
*
@@ -9,7 +9,7 @@
* email: scott@wiggumworld.com, adldap@richardhyland.com
* http://adldap.sourceforge.net/
*
- * Copyright (c) 2006-2009 Scott Barnett, Richard Hyland
+ * Copyright (c) 2006-2010 Scott Barnett, Richard Hyland
*
* We'd appreciate any improvements or additions to be submitted back
* to benefit the entire community :)
@@ -27,10 +27,10 @@
* @category ToolsAndUtilities
* @package adLDAP
* @author Scott Barnett, Richard Hyland
- * @copyright (c) 2006-2009 Scott Barnett, Richard Hyland
+ * @copyright (c) 2006-2010 Scott Barnett, Richard Hyland
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html LGPLv2.1
- * @revision $Revision: 67 $
- * @version 3.3.1
+ * @revision $Revision: 91 $
+ * @version 3.3.2
* @link http://adldap.sourceforge.net/
*/
@@ -409,25 +409,26 @@ class adLDAP {
* @param bool optional $prevent_rebind
* @return bool
*/
- public function authenticate($username,$password,$prevent_rebind=false){
+ public function authenticate($username, $password, $prevent_rebind = false) {
// Prevent null binding
- if ($username===NULL || $password===NULL){ return (false); }
- if (empty($username) || empty($password)){ return (false); }
+ if ($username === NULL || $password === NULL) { return false; }
+ if (empty($username) || empty($password)) { return false; }
// Bind as the user
- $this->_bind = @ldap_bind($this->_conn,$username.$this->_account_suffix,$password);
- if (!$this->_bind){ return (false); }
+ $ret = true;
+ $this->_bind = @ldap_bind($this->_conn, $username . $this->_account_suffix, $password);
+ if (!$this->_bind){ $ret = false; }
// Cnce we've checked their details, kick back into admin mode if we have it
- if ($this->_ad_username!=NULL && !$prevent_rebind){
- $this->_bind = @ldap_bind($this->_conn,$this->_ad_username.$this->_account_suffix,$this->_ad_password);
+ if ($this->_ad_username !== NULL && !$prevent_rebind) {
+ $this->_bind = @ldap_bind($this->_conn, $this->_ad_username . $this->_account_suffix , $this->_ad_password);
if (!$this->_bind){
// This should never happen in theory
throw new adLDAPException('Rebind to Active Directory failed. AD said: ' . $this->get_last_error());
}
}
- return (true);
+ return $ret;
}
//*****************************************************************************************************************
@@ -758,7 +759,7 @@ class adLDAP {
$ret_groups=array();
$groups=$this->group_info($group,array("memberof"));
- if (is_array($groups[0]["memberof"])) {
+ if (isset($groups[0]["memberof"]) && is_array($groups[0]["memberof"])) {
$groups=$groups[0]["memberof"];
if ($groups){
@@ -861,7 +862,7 @@ class adLDAP {
* @param array $attributes The attributes to set to the user account
* @return bool
*/
- public function user_create($attributes){
+ public function user_create($attributes){
// Check for compulsory fields
if (!array_key_exists("username",$attributes)){ return ("Missing compulsory field [username]"); }
if (!array_key_exists("firstname",$attributes)){ return ("Missing compulsory field [firstname]"); }
@@ -963,25 +964,36 @@ class adLDAP {
$username = $this->strguid2hex($username);
$filter="objectguid=".$username;
}
+ else if (strstr($username, "@")) {
+ $filter="userPrincipalName=".$username;
+ }
else {
- $filter="samaccountname=".$username;
+ $filter="samaccountname=".$username;
}
+ $filter = "(&(objectCategory=person)({$filter}))";
if ($fields===NULL){ $fields=array("samaccountname","mail","memberof","department","displayname","telephonenumber","primarygroupid","objectsid"); }
+ if (!in_array("objectsid",$fields)){
+ $fields[] = "objectsid";
+ }
$sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
$entries = ldap_get_entries($this->_conn, $sr);
- if ($entries[0]['count'] >= 1) {
- // AD does not return the primary group in the ldap query, we may need to fudge it
- if ($this->_real_primarygroup && isset($entries[0]["primarygroupid"][0]) && isset($entries[0]["objectsid"][0])){
- //$entries[0]["memberof"][]=$this->group_cn($entries[0]["primarygroupid"][0]);
- $entries[0]["memberof"][]=$this->get_primary_group($entries[0]["primarygroupid"][0], $entries[0]["objectsid"][0]);
- } else {
- $entries[0]["memberof"][]="CN=Domain Users,CN=Users,".$this->_base_dn;
+ if (isset($entries[0])) {
+ if ($entries[0]['count'] >= 1) {
+ if (in_array("memberof", $fields)) {
+ // AD does not return the primary group in the ldap query, we may need to fudge it
+ if ($this->_real_primarygroup && isset($entries[0]["primarygroupid"][0]) && isset($entries[0]["objectsid"][0])){
+ //$entries[0]["memberof"][]=$this->group_cn($entries[0]["primarygroupid"][0]);
+ $entries[0]["memberof"][]=$this->get_primary_group($entries[0]["primarygroupid"][0], $entries[0]["objectsid"][0]);
+ } else {
+ $entries[0]["memberof"][]="CN=Domain Users,CN=Users,".$this->_base_dn;
+ }
+ $entries[0]["memberof"]["count"]++;
+ }
}
+ return $entries;
}
-
- $entries[0]["memberof"]["count"]++;
- return ($entries);
+ return false;
}
/**
@@ -1232,6 +1244,33 @@ class adLDAP {
}
}
+ /**
+ * Move a user account to a different OU
+ *
+ * @param string $username The username to move (please be careful here!)
+ * @param array $container The container or containers to move the user to (please be careful here!).
+ * accepts containers in 1. parent 2. child order
+ * @return array
+ */
+ public function user_move($username, $container) {
+ if (!$this->_bind){ return (false); }
+ if ($username === null){ return ("Missing compulsory field [username]"); }
+ if ($container === null){ return ("Missing compulsory field [container]"); }
+ if (!is_array($container)){ return ("Container must be an array"); }
+
+ $userinfo = $this->user_info($username, array("*"));
+ $dn = $userinfo[0]['distinguishedname'][0];
+ $newrdn = "cn=" . $username;
+ $container = array_reverse($container);
+ $newcontainer = "ou=" . implode(",ou=",$container);
+ $newbasedn = strtolower($newcontainer) . "," . $this->_base_dn;
+ $result=@ldap_rename($this->_conn,$dn,$newrdn,$newbasedn,true);
+ if ($result !== true) {
+ return (false);
+ }
+ return (true);
+ }
+
//*****************************************************************************************************************
// CONTACT FUNCTIONS
// * Still work to do in this area, and new functions to write
@@ -1568,6 +1607,32 @@ class adLDAP {
}
//************************************************************************************************************
+ // ORGANIZATIONAL UNIT FUNCTIONS
+
+ /**
+ * Create an organizational unit
+ *
+ * @param array $attributes Default attributes of the ou
+ * @return bool
+ */
+ public function ou_create($attributes){
+ if (!is_array($attributes)){ return ("Attributes must be an array"); }
+ if (!array_key_exists("ou_name",$attributes)){ return ("Missing compulsory field [ou_name]"); }
+ if (!array_key_exists("container",$attributes)){ return ("Missing compulsory field [container]"); }
+ if (!is_array($attributes["container"])){ return ("Container attribute must be an array."); }
+ $attributes["container"]=array_reverse($attributes["container"]);
+
+ $add=array();
+ $add["objectClass"] = "organizationalUnit";
+
+ $container="OU=".implode(",OU=",$attributes["container"]);
+ $result=ldap_add($this->_conn,"CN=".$add["cn"].", ".$container.",".$this->_base_dn,$add);
+ if ($result!=true){ return (false); }
+
+ return (true);
+ }
+
+ //************************************************************************************************************
// EXCHANGE FUNCTIONS
/**
@@ -1998,6 +2063,7 @@ class adLDAP {
if ($attributes["exchange_usedefaults"]){ $mod["mDBUseDefaults"][0]=$attributes["exchange_usedefaults"]; }
if ($attributes["exchange_policyexclude"]){ $mod["msExchPoliciesExcluded"][0]=$attributes["exchange_policyexclude"]; }
if ($attributes["exchange_policyinclude"]){ $mod["msExchPoliciesIncluded"][0]=$attributes["exchange_policyinclude"]; }
+ if ($attributes["exchange_addressbook"]){ $mod["showInAddressBook"][0]=$attributes["exchange_addressbook"]; }
// This schema is designed for contacts
if ($attributes["exchange_hidefromlists"]){ $mod["msExchHideFromAddressLists"][0]=$attributes["exchange_hidefromlists"]; }
diff --git a/inc/auth.php b/inc/auth.php
index f2de4424e..83d1d4159 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -372,63 +372,15 @@ function auth_ismanager($user=null,$groups=null,$adminonly=false){
$user = $_SERVER['REMOTE_USER'];
}
}
- $user = trim($auth->cleanUser($user));
- if($user === '') return false;
- if(is_null($groups)) $groups = (array) $USERINFO['grps'];
- $groups = array_map(array($auth,'cleanGroup'),$groups);
- $user = auth_nameencode($user);
-
- // check username against superuser and manager
- $superusers = explode(',', $conf['superuser']);
- $superusers = array_unique($superusers);
- $superusers = array_map('trim', $superusers);
- $superusers = array_filter($superusers);
- // prepare an array containing only true values for array_map call
- $alltrue = array_fill(0, count($superusers), true);
- $superusers = array_map('auth_nameencode', $superusers, $alltrue);
-
- // case insensitive?
- if(!$auth->isCaseSensitive()){
- $superusers = array_map('utf8_strtolower',$superusers);
- $user = utf8_strtolower($user);
+ if(is_null($groups)){
+ $groups = (array) $USERINFO['grps'];
}
- // check user match
- if(in_array($user, $superusers)) return true;
-
+ // check superuser match
+ if(auth_isMember($conf['superuser'],$user, $groups)) return true;
+ if($adminonly) return false;
// check managers
- if(!$adminonly){
- $managers = explode(',', $conf['manager']);
- $managers = array_unique($managers);
- $managers = array_map('trim', $managers);
- $managers = array_filter($managers);
- // prepare an array containing only true values for array_map call
- $alltrue = array_fill(0, count($managers), true);
- $managers = array_map('auth_nameencode', $managers, $alltrue);
- if(!$auth->isCaseSensitive()) $managers = array_map('utf8_strtolower',$managers);
- if(in_array($user, $managers)) return true;
- }
-
- // check user's groups against superuser and manager
- if (!empty($groups)) {
-
- //prepend groups with @ and nameencode
- $cnt = count($groups);
- for($i=0; $i<$cnt; $i++){
- $groups[$i] = '@'.auth_nameencode($groups[$i]);
- if(!$auth->isCaseSensitive()){
- $groups[$i] = utf8_strtolower($groups[$i]);
- }
- }
-
- // check groups against superuser and manager
- foreach($superusers as $supu)
- if(in_array($supu, $groups)) return true;
- if(!$adminonly){
- foreach($managers as $mana)
- if(in_array($mana, $groups)) return true;
- }
- }
+ if(auth_isMember($conf['manager'],$user, $groups)) return true;
return false;
}
@@ -447,6 +399,52 @@ function auth_isadmin($user=null,$groups=null){
return auth_ismanager($user,$groups,true);
}
+
+/**
+ * Match a user and his groups against a comma separated list of
+ * users and groups to determine membership status
+ *
+ * Note: all input should NOT be nameencoded.
+ *
+ * @param $memberlist string commaseparated list of allowed users and groups
+ * @param $user string user to match against
+ * @param $groups array groups the user is member of
+ * @returns bool true for membership acknowledged
+ */
+function auth_isMember($memberlist,$user,array $groups){
+ global $auth;
+ if (!$auth) return false;
+
+ // clean user and groups
+ if(!$auth->isCaseSensitive()){
+ $user = utf8_strtolower($user);
+ $groups = array_map('utf8_strtolower',$groups);
+ }
+ $user = $auth->cleanUser($user);
+ $groups = array_map(array($auth,'cleanGroup'),$groups);
+
+ // extract the memberlist
+ $members = explode(',',$memberlist);
+ $members = array_map('trim',$members);
+ $members = array_unique($members);
+ $members = array_filter($members);
+
+ // compare cleaned values
+ foreach($members as $member){
+ if(!$auth->isCaseSensitive()) $member = utf8_strtolower($member);
+ if($member[0] == '@'){
+ $member = $auth->cleanGroup(substr($member,1));
+ if(in_array($member, $groups)) return true;
+ }else{
+ $member = $auth->cleanUser($member);
+ if($member == $user) return true;
+ }
+ }
+
+ // still here? not a member!
+ return false;
+}
+
/**
* Convinience function for auth_aclcheck()
*
@@ -537,13 +535,13 @@ function auth_aclcheck($id,$user,$groups){
//still here? do the namespace checks
if($ns){
- $path = $ns.':\*';
+ $path = $ns.':*';
}else{
- $path = '\*'; //root document
+ $path = '*'; //root document
}
do{
- $matches = preg_grep('/^'.$path.'\s+('.$regexp.')\s+/'.$ci,$AUTH_ACL);
+ $matches = preg_grep('/^'.preg_quote($path,'/').'\s+('.$regexp.')\s+/'.$ci,$AUTH_ACL);
if(count($matches)){
foreach($matches as $match){
$match = preg_replace('/#.*$/','',$match); //ignore comments
@@ -560,9 +558,9 @@ function auth_aclcheck($id,$user,$groups){
//get next higher namespace
$ns = getNS($ns);
- if($path != '\*'){
- $path = $ns.':\*';
- if($path == ':\*') $path = '\*';
+ if($path != '*'){
+ $path = $ns.':*';
+ if($path == ':*') $path = '*';
}else{
//we did this already
//looks like there is something wrong with the ACL
diff --git a/inc/changelog.php b/inc/changelog.php
index cc7612bfd..15cd46d77 100644
--- a/inc/changelog.php
+++ b/inc/changelog.php
@@ -84,7 +84,10 @@ function addLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extr
$meta = array();
if (!$INFO['exists'] && empty($oldmeta['persistent']['date']['created'])){ // newly created
$meta['date']['created'] = $created;
- if ($user) $meta['creator'] = $INFO['userinfo']['name'];
+ if ($user){
+ $meta['creator'] = $INFO['userinfo']['name'];
+ $meta['user'] = $user;
+ }
} elseif (!$INFO['exists'] && !empty($oldmeta['persistent']['date']['created'])) { // re-created / restored
$meta['date']['created'] = $oldmeta['persistent']['date']['created'];
$meta['date']['modified'] = $created; // use the files ctime here
diff --git a/inc/common.php b/inc/common.php
index a1c4580a6..b4866bccf 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -242,13 +242,16 @@ function buildURLparams($params, $sep='&amp;'){
*/
function buildAttributes($params,$skipempty=false){
$url = '';
+ $white = false;
foreach($params as $key => $val){
if($key{0} == '_') continue;
if($val === '' && $skipempty) continue;
+ if($white) $url .= ' ';
$url .= $key.'="';
$url .= htmlspecialchars ($val);
- $url .= '" ';
+ $url .= '"';
+ $white = true;
}
return $url;
}
@@ -1128,12 +1131,15 @@ function notify($id,$who,$rev='',$summary='',$minor=false,$replace=array()){
$diff = rawWiki($id);
}
$text = str_replace('@DIFF@',$diff,$text);
- if(utf8_strlen($conf['title']) < 20) {
- $subject = '['.$conf['title'].'] '.$subject;
+ if(empty($conf['mailprefix'])) {
+ if(utf8_strlen($conf['title']) < 20) {
+ $subject = '['.$conf['title'].'] '.$subject;
+ }else{
+ $subject = '['.utf8_substr($conf['title'], 0, 20).'...] '.$subject;
+ }
}else{
- $subject = '['.utf8_substr($conf['title'], 0, 20).'...] '.$subject;
+ $subject = '['.$conf['mailprefix'].'] '.$subject;
}
-
mail_send($to,$subject,$text,$conf['mailfrom'],'',$bcc);
}
diff --git a/inc/form.php b/inc/form.php
index e614d2f30..30e16b626 100644
--- a/inc/form.php
+++ b/inc/form.php
@@ -696,7 +696,7 @@ function form_wikitext($attrs) {
*/
function form_button($attrs) {
$p = (!empty($attrs['_action'])) ? 'name="do['.$attrs['_action'].']" ' : '';
- return '<input '.$p.buildAttributes($attrs,true).'/>';
+ return '<input '.$p.buildAttributes($attrs,true).' />';
}
/**
@@ -714,7 +714,7 @@ function form_field($attrs) {
if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
$s .= '><span>'.$attrs['_text'].'</span>';
- $s .= ' <input '.buildAttributes($attrs,true).'/></label>';
+ $s .= ' <input '.buildAttributes($attrs,true).' /></label>';
if (preg_match('/(^| )block($| )/', $attrs['_class']))
$s .= '<br />';
return $s;
@@ -734,7 +734,7 @@ function form_fieldright($attrs) {
$s = '<label';
if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
- $s .= '><input '.buildAttributes($attrs,true).'/>';
+ $s .= '><input '.buildAttributes($attrs,true).' />';
$s .= ' <span>'.$attrs['_text'].'</span></label>';
if (preg_match('/(^| )block($| )/', $attrs['_class']))
$s .= '<br />';
@@ -758,7 +758,7 @@ function form_textfield($attrs) {
if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
$s .= '><span>'.$attrs['_text'].'</span> ';
- $s .= '<input type="text" '.buildAttributes($attrs,true).'/></label>';
+ $s .= '<input type="text" '.buildAttributes($attrs,true).' /></label>';
if (preg_match('/(^| )block($| )/', $attrs['_class']))
$s .= '<br />';
return $s;
@@ -781,7 +781,7 @@ function form_passwordfield($attrs) {
if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
$s .= '><span>'.$attrs['_text'].'</span> ';
- $s .= '<input type="password" '.buildAttributes($attrs,true).'/></label>';
+ $s .= '<input type="password" '.buildAttributes($attrs,true).' /></label>';
if (preg_match('/(^| )block($| )/', $attrs['_class']))
$s .= '<br />';
return $s;
@@ -807,7 +807,7 @@ function form_filefield($attrs) {
$s .= '<input type="file" '.buildAttributes($attrs,true);
if (!empty($attrs['_maxlength'])) $s .= ' maxlength="'.$attrs['_maxlength'].'"';
if (!empty($attrs['_accept'])) $s .= ' accept="'.$attrs['_accept'].'"';
- $s .= '/></label>';
+ $s .= ' /></label>';
if (preg_match('/(^| )block($| )/', $attrs['_class']))
$s .= '<br />';
return $s;
@@ -837,7 +837,7 @@ function form_checkboxfield($attrs) {
. ' value="' . hsc($attrs['value'][1]) . '" />';
$attrs['value'] = $attrs['value'][0];
}
- $s .= '<input type="checkbox" '.buildAttributes($attrs,true).'/>';
+ $s .= '<input type="checkbox" '.buildAttributes($attrs,true).' />';
$s .= ' <span>'.$attrs['_text'].'</span></label>';
if (preg_match('/(^| )block($| )/', $attrs['_class']))
$s .= '<br />';
@@ -860,7 +860,7 @@ function form_radiofield($attrs) {
$s = '<label';
if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
- $s .= '><input type="radio" '.buildAttributes($attrs,true).'/>';
+ $s .= '><input type="radio" '.buildAttributes($attrs,true).' />';
$s .= ' <span>'.$attrs['_text'].'</span></label>';
if (preg_match('/(^| )block($| )/', $attrs['_class']))
$s .= '<br />';
diff --git a/inc/fulltext.php b/inc/fulltext.php
index 59a9c1d96..be3938cac 100644
--- a/inc/fulltext.php
+++ b/inc/fulltext.php
@@ -396,6 +396,11 @@ function ft_snippet($id,$highlight){
* Wraps a search term in regex boundary checks.
*/
function ft_snippet_re_preprocess($term) {
+ // do not process asian terms where word boundaries are not explicit
+ if(preg_match('/'.IDX_ASIAN.'/u',$term)){
+ return $term;
+ }
+
if(substr($term,0,2) == '\\*'){
$term = substr($term,2);
}else{
@@ -734,7 +739,7 @@ function ft_termParser($term, &$stopwords, $consider_asian = true, $phrase_mode
// successive asian characters need to be searched as a phrase
$words = preg_split('/('.IDX_ASIAN.'+)/u', $term, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
foreach ($words as $word) {
- if (preg_match('/'.IDX_ASIAN.'/u', $word)) $phrase_mode = true;
+ $phrase_mode = $phrase_mode ? true : preg_match('/'.IDX_ASIAN.'/u', $word);
$parsed .= ft_termParser($word, $stopwords, false, $phrase_mode);
}
} else {
diff --git a/inc/html.php b/inc/html.php
index 98ee8a496..67b1c10b7 100644
--- a/inc/html.php
+++ b/inc/html.php
@@ -1041,7 +1041,10 @@ function html_conflict($text,$summary){
* @author Andreas Gohr <andi@splitbrain.org>
*/
function html_msgarea(){
- global $MSG;
+ global $MSG, $MSG_shown;
+ // store if the global $MSG has already been shown and thus HTML output has been started
+ $MSG_shown = true;
+
if(!isset($MSG)) return;
$shown = array();
@@ -1053,6 +1056,8 @@ function html_msgarea(){
print '</div>';
$shown[$hash] = 1;
}
+
+ unset($GLOBALS['MSG']);
}
/**
@@ -1221,9 +1226,9 @@ function html_edit(){
if($wr && $conf['license']){
$form->addElement(form_makeOpenTag('div', array('class'=>'license')));
$out = $lang['licenseok'];
- $out .= '<a href="'.$license[$conf['license']]['url'].'" rel="license" class="urlextern"';
+ $out .= ' <a href="'.$license[$conf['license']]['url'].'" rel="license" class="urlextern"';
if(isset($conf['target']['extern'])) $out .= ' target="'.$conf['target']['extern'].'"';
- $out .= '> '.$license[$conf['license']]['name'].'</a>';
+ $out .= '>'.$license[$conf['license']]['name'].'</a>';
$form->addElement($out);
$form->addElement(form_makeCloseTag('div'));
}
diff --git a/inc/indexer.php b/inc/indexer.php
index 5a361ddc5..943c2a8c4 100644
--- a/inc/indexer.php
+++ b/inc/indexer.php
@@ -305,7 +305,7 @@ function idx_addPage($page){
}
unset($page_idx); // free memory
- idx_saveIndexLine('title', '', $pid, p_get_first_heading($page, false));
+ idx_saveIndexLine('title', '', $pid, p_get_first_heading($page, true));
$pagewords = array();
// get word usage in page
diff --git a/inc/infoutils.php b/inc/infoutils.php
index d3c6f2918..5f406aa3e 100644
--- a/inc/infoutils.php
+++ b/inc/infoutils.php
@@ -258,7 +258,7 @@ function check(){
* @see html_msgarea
*/
function msg($message,$lvl=0,$line='',$file=''){
- global $MSG;
+ global $MSG, $MSG_shown;
$errors[-1] = 'error';
$errors[0] = 'info';
$errors[1] = 'success';
@@ -268,7 +268,7 @@ function msg($message,$lvl=0,$line='',$file=''){
if(!isset($MSG)) $MSG = array();
$MSG[]=array('lvl' => $errors[$lvl], 'msg' => $message);
- if(headers_sent()){
+ if(isset($MSG_shown) || headers_sent()){
if(function_exists('html_msgarea')){
html_msgarea();
}else{
diff --git a/inc/init.php b/inc/init.php
index ed4409729..3b438f15b 100644
--- a/inc/init.php
+++ b/inc/init.php
@@ -419,12 +419,16 @@ function getBaseURL($abs=null){
if($conf['baseurl']) return rtrim($conf['baseurl'],'/').$dir;
//split hostheader into host and port
- $addr = explode(':',$_SERVER['HTTP_HOST']);
- $host = $addr[0];
- $port = '';
- if (isset($addr[1])) {
- $port = $addr[1];
- } elseif (isset($_SERVER['SERVER_PORT'])) {
+ if(isset($_SERVER['HTTP_HOST'])){
+ list($host,$port) = explode(':',$_SERVER['HTTP_HOST']);
+ }elseif(isset($_SERVER['SERVER_NAME'])){
+ list($host,$port) = explode(':',$_SERVER['SERVER_NAME']);
+ }else{
+ $host = php_uname('n');
+ $port = '';
+ }
+
+ if(!$port && isset($_SERVER['SERVER_PORT'])) {
$port = $_SERVER['SERVER_PORT'];
}
if(!is_ssl()){
diff --git a/inc/io.php b/inc/io.php
index 1d69dabc9..559f3febc 100644
--- a/inc/io.php
+++ b/inc/io.php
@@ -486,7 +486,7 @@ function io_download($url,$file,$useAttachment=false,$defaultName='',$maxSize=20
preg_match('/attachment;\s*filename\s*=\s*"([^"]*)"/i', $content_disposition, $match)) {
$name = basename($match[1]);
- }
+ }
}
diff --git a/inc/lang/ar/lang.php b/inc/lang/ar/lang.php
index 30095347e..0a2341b97 100644
--- a/inc/lang/ar/lang.php
+++ b/inc/lang/ar/lang.php
@@ -28,7 +28,7 @@ $lang['btn_revs'] = 'نسخ قديمة';
$lang['btn_recent'] = 'أحدث التغييرات';
$lang['btn_upload'] = 'ارفع';
$lang['btn_cancel'] = 'ألغ';
-$lang['btn_index'] = 'فهرس';
+$lang['btn_index'] = 'خريطة موقع';
$lang['btn_secedit'] = 'حرر';
$lang['btn_login'] = 'لج';
$lang['btn_logout'] = 'اخرج';
@@ -54,21 +54,21 @@ $lang['newpass'] = 'كلمة سر جديدة';
$lang['oldpass'] = 'أكد كلمة السر الحالية';
$lang['passchk'] = 'مرة أخرى';
$lang['remember'] = 'تذكرني';
-$lang['fullname'] = 'الاسم الكامل';
+$lang['fullname'] = 'الاسم الحقيقي';
$lang['email'] = 'البريد الإلكتروني';
$lang['register'] = 'سجّل';
$lang['profile'] = 'الملف الشخصي';
$lang['badlogin'] = 'عذرا، اسم المشترك أو كلمة السر غير صحيحة';
$lang['minoredit'] = 'تعديلات طفيفة';
-$lang['draftdate'] = 'حفظ المسودات تلقائيا مشغل';
-$lang['nosecedit'] = 'غُيرت الصفحة في هذه الأثناء، معلومات الفقرة اصبحت قديمة. حُمُلت كل الصفحة بدلا.';
-$lang['regmissing'] = 'عذرا، يجب ملء جميع الحقول';
+$lang['draftdate'] = 'حفظ المسودات آليا مفعّل';
+$lang['nosecedit'] = 'غُيرت الصفحة في هذه الأثناء، معلومات الجزء اصبحت قديمة. حُمُلت كل الصفحة بدلا.';
+$lang['regmissing'] = 'عذرا، عليك ملء جميع الحقول.';
$lang['reguexists'] = 'عذرا، يوجد مشترك بنفس الاسم.';
$lang['regsuccess'] = 'أنشئ المستخدم و ارسلت كلمة السر بالبريد.';
$lang['regsuccess2'] = 'أنشئ المستخدم.';
-$lang['regmailfail'] = 'حدث خطأ فى إرسال رسالة كلمة اسرر. يرجى مراسلة المدير';
-$lang['regbadmail'] = 'يبدو البريد الإلكتروني المعطى غير صحيح، إن كنت تظن أن هذا خطأ، راسل المدير';
-$lang['regbadpass'] = 'كلمتى المرور غير متطابقتين، حاول مرة أخرى.';
+$lang['regmailfail'] = 'حدث خطأ فى إرسال رسالة كلمة السر. يرجى مراسلة المدير!';
+$lang['regbadmail'] = 'يبدو البريد الإلكتروني المعطى غيرَ صحيح، إن كنت تظن أن هذا خطأ، راسل المدير';
+$lang['regbadpass'] = 'كلمتا المرور غير متطابقتين، حاول مرة أخرى.';
$lang['regpwmail'] = 'كلمة مرورك إلى دوكو ويكي';
$lang['reghere'] = 'ليس لديك حساب بعد؟ احصل على واحد';
$lang['profna'] = 'هذه الويكي لا تدعم تعديل الملف الشخصي';
@@ -81,35 +81,35 @@ $lang['resendpwd'] = 'إرسال كلمة مرور';
$lang['resendpwdmissing'] = 'عذراّ، يجب أن تملأ كل الحقول.';
$lang['resendpwdnouser'] = 'عذراً، لم نجد المستخدم هذا في قاعدة بياناتنا.';
$lang['resendpwdbadauth'] = 'عذراً، رمز التفعيل هذا غير صحيح. نأكد من استخدامك كامل وصلة التأكيد.';
-$lang['resendpwdconfirm'] = 'أرسل رابط التأكيد بواسطة البريد.';
-$lang['resendpwdsuccess'] = 'كلمة السرالجديدة إرسلت عبر البريد.';
-$lang['license'] = 'مالم يشر لخلاف ذلك، فإن المحتوى على هذه الويكي مرخص وفق الرخصة التالية:';
+$lang['resendpwdconfirm'] = 'اُرسل رابط التأكيد بواسطة البريد.';
+$lang['resendpwdsuccess'] = 'كلمة السرالجديدة اُرسلت عبر البريد.';
+$lang['license'] = 'مالم يشر لخلاف ذلك، فإن المحتوى في هذه الويكي مرخص وفق الرخصة التالية:';
$lang['licenseok'] = 'لاحظ: بتحرير هذه الصفحة أنت توافق على ترخيص محتواها تحت الرخصة التالية:';
-$lang['searchmedia'] = 'ابحث في اسماء الملفات:';
+$lang['searchmedia'] = 'ابحث في أسماء الملفات:';
$lang['searchmedia_in'] = 'ابحث في %s';
$lang['txt_upload'] = 'اختر ملفاً للرفع';
$lang['txt_filename'] = 'رفع كـ (اختياري)';
$lang['txt_overwrt'] = 'اكتب على ملف موجود';
-$lang['lockedby'] = 'حالياً مقفل بواسطة';
+$lang['lockedby'] = 'مقفلة حاليا لـ';
$lang['lockexpire'] = 'ينتهي القفل في';
$lang['willexpire'] = 'سينتهي قفل تحرير هذه الصفحه خلال دقيقة.\nلتجنب التعارض استخدم زر المعاينة لتصفير مؤقت القفل.';
-$lang['js']['notsavedyet'] = 'التعديلات غير المحفوظة ستفقد. اكمل فعلا؟';
+$lang['js']['notsavedyet'] = 'التعديلات غير المحفوظة ستفقد.';
$lang['js']['searchmedia'] = 'ابحث عن ملفات';
$lang['js']['keepopen'] = 'أبقي النافذة مفتوحة أثناء الاختيار';
$lang['js']['hidedetails'] = 'أخف التفاصيل';
-$lang['js']['mediatitle'] = 'اعدادات الرابط';
+$lang['js']['mediatitle'] = 'إعدادات الرابط';
$lang['js']['mediadisplay'] = 'نوع الرابط';
$lang['js']['mediaalign'] = 'المحاذاة';
$lang['js']['mediasize'] = 'حجم الصورة';
$lang['js']['mediatarget'] = 'هدف الرابط';
-$lang['js']['mediaclose'] = 'اغلق';
+$lang['js']['mediaclose'] = 'أغلق';
$lang['js']['mediainsert'] = 'أدرج';
-$lang['js']['mediadisplayimg'] = 'اظهر الصورة.';
+$lang['js']['mediadisplayimg'] = 'أظهر الصورة.';
$lang['js']['mediadisplaylnk'] = 'اظهر الرابط فقط.';
$lang['js']['mediasmall'] = 'نسخة مصغرة';
$lang['js']['mediamedium'] = 'نسخة متوسطة';
$lang['js']['medialarge'] = 'نسخة كبيرة';
-$lang['js']['mediaoriginal'] = 'نسخة أصلية';
+$lang['js']['mediaoriginal'] = 'النسخة الأصلية';
$lang['js']['medialnk'] = 'الرابط لصفحة التفاصيل';
$lang['js']['mediadirect'] = 'رابط مباشر للأصل';
$lang['js']['medianolnk'] = 'لا رابط';
@@ -118,70 +118,73 @@ $lang['js']['medialeft'] = 'حاذي الصورة إلى اليسار.';
$lang['js']['mediaright'] = 'حاذي الصورة إلى اليمين.';
$lang['js']['mediacenter'] = 'حاذي الصورة إلى الوسط.';
$lang['js']['medianoalign'] = 'لا تستعمل المحاذاة.';
-$lang['js']['nosmblinks'] = 'الروابط لمجلدات ويندوز المشاركة تعمل فقط مع متصفح مايكروسفت Internet Explorer. ما زال بإمكانك قص و لصق الرابط.';
+$lang['js']['nosmblinks'] = 'الروابط لمجلدات مشاركة وندز تعمل فقط مع متصفح مايكروسفت Internet Explorer.
+ما زال بإمكانك قص و لصق الرابط.';
$lang['js']['linkwiz'] = 'مرشد الروابط';
$lang['js']['linkto'] = 'الرابط إلى :';
$lang['js']['del_confirm'] = 'هل حقاً تريد حذف البنود المختارة؟';
$lang['js']['mu_btn'] = 'رفع عدة ملفات في وقت واحد';
$lang['rssfailed'] = 'خطأ ما حدث أثناء جلب ملف التغذية:';
$lang['nothingfound'] = 'لا يوجد شيء';
-$lang['mediaselect'] = 'ملفات الوسائط المتعددة';
-$lang['fileupload'] = 'تحميل ملف وسائط متعددة';
-$lang['uploadsucc'] = 'تم التحميل بنجاح';
-$lang['uploadfail'] = 'فشل التحميل، قد يكون الخطأ فى التراخيص؟';
-$lang['uploadwrong'] = 'التحميل ممنوع، نوع الملف مرفوض!';
-$lang['uploadexist'] = 'الملف موجود أصلاً. لم يحدث شيء';
-$lang['uploadbadcontent'] = 'المحتوى المحمّل لم يتطابق مع نوع الملف %s';
-$lang['uploadspam'] = 'التحميل محجوب بواسطة القائمة السوداء لبرنامج تقفي التطفل';
-$lang['uploadxss'] = 'التحميل محجوب لمنع المحتويات الخبيثة';
-$lang['uploadsize'] = 'الملف الذي تم رفعه كبير جدا . ( الحد الأقصى %s )';
-$lang['deletesucc'] = 'تم حذف الملف "%s"';
-$lang['deletefail'] = 'لا يمكن حذف "%s"، تأكد من تراخيصك';
-$lang['mediainuse'] = 'لم يحذف الملف "%s"، مازال موجوداً';
+$lang['mediaselect'] = 'ملفات الوسائط';
+$lang['fileupload'] = 'تحميل ملف وسائط';
+$lang['uploadsucc'] = 'تم الرفع بنجاح';
+$lang['uploadfail'] = 'فشل الرفع، ربما خطأ تراخيص؟';
+$lang['uploadwrong'] = 'الرفع ممنوع، نوع الملف مرفوض!';
+$lang['uploadexist'] = 'الملف موجود أصلاً. لم يُعمل شيئ.';
+$lang['uploadbadcontent'] = 'المحتوى المرفوع لم يطابق لاحقة ملفات %s.';
+$lang['uploadspam'] = 'الرفع محجوب بواسطة القائمة السوداء لبرنامج تقفي التطفل.';
+$lang['uploadxss'] = 'رُفض الرفع للإشتباه بمحتوى ضار.';
+$lang['uploadsize'] = 'الملف المرفوع كان كبيرا جدا . ( الحد %s )';
+$lang['deletesucc'] = 'حُذف الملف "%s".';
+$lang['deletefail'] = 'تعذر حذف "%s" - تأكد من الصلاحيات.';
+$lang['mediainuse'] = 'لم يحذف الملف "%s" - مازال مستخدما.';
$lang['namespaces'] = 'فضاء التسمية';
$lang['mediafiles'] = 'ملفات موجودة في';
+$lang['accessdenied'] = 'لا يسمح لك برؤية هذه الصفحة.';
$lang['mediausage'] = 'استخدم هذه الصياغة للدلالة على هذا الملف:';
-$lang['mediaview'] = 'عرض الملف الأصلي';
+$lang['mediaview'] = 'اعرض الملف الأصلي';
$lang['mediaroot'] = 'الجذر';
-$lang['mediaupload'] = 'تحميل ملف إلى فضاء التسمية هنا. لإنشاء فضاءات تسمية فرعية، أضفها إلى بداية خانة تحميل باسم وافصل بينها باستخدام الفواصل';
-$lang['mediaextchange'] = 'تم تغيير نوع الملف من .%s إلى .%s!';
+$lang['mediaupload'] = 'تحميل ملف إلى فضاء التسمية هنا. لإنشاء فضاءات تسمية فرعية، أضفها إلى بداية خانة تحميل باسم وافصل بينها باستخدام الفاصلتان الرأسيتان.';
+$lang['mediaextchange'] = 'غُيرت لاحقة الملف من .%s إلى .%s!';
$lang['reference'] = 'مراجع لـ';
$lang['ref_inuse'] = 'لا يمكن حذف الملف، لأنه مستخدم من قبل الصفحات التالية:';
-$lang['ref_hidden'] = 'بعض المراجع لصفاحات لا تملك ترخيص برؤيتها';
-$lang['hits'] = 'زوار';
-$lang['quickhits'] = 'صفحات بهذا الاسم';
+$lang['ref_hidden'] = 'بعض المراجع على صفحات لا تملك صلاحيات قراءتها';
+$lang['hits'] = 'مرة';
+$lang['quickhits'] = 'صفحات مطابقة';
$lang['toc'] = 'جدول المحتويات';
$lang['current'] = 'حالي';
$lang['yours'] = 'نسختك';
-$lang['diff'] = 'مقارنة بالنسخة الحالية';
-$lang['diff2'] = 'مقارنة بين النسخ المختارة';
+$lang['diff'] = 'أظهر الاختلافات مع النسخة الحالية';
+$lang['diff2'] = 'أظهر الاختلافات بين النسخ المحددة';
+$lang['difflink'] = 'رابط إلى هذه المقارنة';
$lang['line'] = 'سطر';
$lang['breadcrumb'] = 'أثر';
$lang['youarehere'] = 'أنت هنا';
$lang['lastmod'] = 'آخر تعديل';
$lang['by'] = 'بواسطة';
-$lang['deleted'] = 'تم حذف';
-$lang['created'] = 'تم إنشاء';
-$lang['restored'] = 'عودة لنسخة قديمة';
+$lang['deleted'] = 'حذفت';
+$lang['created'] = 'اُنشئت';
+$lang['restored'] = 'استعيدت نسخة قديمة';
$lang['external_edit'] = 'تحرير خارجي';
$lang['summary'] = 'ملخص التحرير';
$lang['noflash'] = 'تحتاج إلى<a href="http://www.adobe.com/products/flashplayer/">ملحق فلاش أدوبي</a> لعرض هذا المحتوى.';
$lang['download'] = 'نزل Snippet';
$lang['mail_newpage'] = 'إضافة صفحة:';
$lang['mail_changed'] = 'تعديل صفحة:';
-$lang['mail_subscribe_list'] = 'صفحات غيرت في النظاق:';
-$lang['mail_new_user'] = 'مشترك جديد';
-$lang['mail_upload'] = 'تحميل ملف:';
+$lang['mail_subscribe_list'] = 'صفحات غيرت في النطاق:';
+$lang['mail_new_user'] = 'مشترك جديد:';
+$lang['mail_upload'] = 'رفع ملف:';
$lang['qb_bold'] = 'نص عريض';
$lang['qb_italic'] = 'نص مائل';
$lang['qb_underl'] = 'نص مسطر';
$lang['qb_code'] = 'نص برمجي';
$lang['qb_strike'] = 'نص مشطوب';
-$lang['qb_h1'] = 'عنوان مستوى أول';
-$lang['qb_h2'] = 'عنوان مستوى ثاني';
-$lang['qb_h3'] = 'عنوان مستوى ثالث';
-$lang['qb_h4'] = 'عنوان مستوى رابع';
-$lang['qb_h5'] = 'عنوان مستوى خامس';
+$lang['qb_h1'] = 'عنوان مستوى ١';
+$lang['qb_h2'] = 'عنوان مستوى ٢';
+$lang['qb_h3'] = 'عنوان مستوى ٣';
+$lang['qb_h4'] = 'عنوان مستوى ٤';
+$lang['qb_h5'] = 'عنوان مستوى ٥';
$lang['qb_h'] = 'الترويسة';
$lang['qb_hs'] = 'حدد الترويسة';
$lang['qb_hplus'] = 'ترويسة أعلى';
@@ -192,29 +195,29 @@ $lang['qb_extlink'] = 'رابط خارجي';
$lang['qb_hr'] = 'سطر أفقي';
$lang['qb_ol'] = 'بند فى قائمة مرتبة';
$lang['qb_ul'] = 'بند فى قائمة غير مرتبة';
-$lang['qb_media'] = 'إضافة صور و ملفات أخرى';
-$lang['qb_sig'] = 'أضف توقيعك';
-$lang['qb_smileys'] = 'الابتسامات';
+$lang['qb_media'] = 'أضف صورا و ملفات أخرى';
+$lang['qb_sig'] = 'أدرج التوقيع';
+$lang['qb_smileys'] = 'الإبتسامات';
$lang['qb_chars'] = 'محارف خاصة';
$lang['upperns'] = 'انتقل للنطاق الأب';
-$lang['admin_register'] = 'إضافة مشترك جديد';
+$lang['admin_register'] = 'أضف مستخدما جديدا';
$lang['metaedit'] = 'تحرير البيانات الشمولية ';
-$lang['metasaveerr'] = 'فشلت عملية كتابة البيانات الشمولية';
-$lang['metasaveok'] = 'تم حفظ البيانت الشمولية';
-$lang['img_backto'] = 'العودة إلى';
+$lang['metasaveerr'] = 'فشلت كتابة البيانات الشمولية';
+$lang['metasaveok'] = 'حُفظت البيانات الشمولية';
+$lang['img_backto'] = 'عودة إلى';
$lang['img_title'] = 'العنوان';
-$lang['img_caption'] = 'تنويه الصورة';
+$lang['img_caption'] = 'وصف';
$lang['img_date'] = 'التاريخ';
$lang['img_fname'] = 'اسم الملف';
$lang['img_fsize'] = 'الحجم';
$lang['img_artist'] = 'المصور';
$lang['img_copyr'] = 'حقوق النسخ';
-$lang['img_format'] = 'صيغ رسومية';
-$lang['img_camera'] = 'آلة التصوير';
+$lang['img_format'] = 'الهيئة';
+$lang['img_camera'] = 'الكمرا';
$lang['img_keywords'] = 'كلمات مفتاحية';
$lang['subscr_subscribe_success'] = 'اضيف %s لقائمة اشتراك %s';
$lang['subscr_subscribe_error'] = 'خطأ في إضافة %s لقائمة اشتراك %s';
-$lang['subscr_subscribe_noaddress'] = 'ليس هناك عنوان مرتبط بدخولك، لا يمكن اضافتك لقائمة الاشتراك';
+$lang['subscr_subscribe_noaddress'] = 'ليس هناك عنوان مرتبط بولوجك، لا يمكن اضافتك لقائمة الاشتراك';
$lang['subscr_unsubscribe_success'] = 'أزيل %s من قائمة اشتراك %s';
$lang['subscr_unsubscribe_error'] = 'خطأ في إزالة %s من قائمة اشتراك %s';
$lang['subscr_already_subscribed'] = '%s مشترك مسبقا في %s';
@@ -224,7 +227,7 @@ $lang['subscr_m_new_header'] = 'أضف اشتراكا';
$lang['subscr_m_current_header'] = 'الاشتراكات الحالية';
$lang['subscr_m_unsubscribe'] = 'ألغ الاشتراك';
$lang['subscr_m_subscribe'] = 'اشترك';
-$lang['subscr_m_receive'] = 'استقبل';
+$lang['subscr_m_receive'] = 'استقبال';
$lang['subscr_style_every'] = 'بريدا على كل تغيير';
$lang['subscr_style_digest'] = 'بريد ملخص عن تغييرات كل صفحة';
$lang['subscr_style_list'] = 'قائمة بالصفحات المتغيرة منذ آخر بريد';
diff --git a/inc/lang/de-informal/lang.php b/inc/lang/de-informal/lang.php
index 948a1ee51..b7c446656 100644
--- a/inc/lang/de-informal/lang.php
+++ b/inc/lang/de-informal/lang.php
@@ -17,6 +17,7 @@
* @author Juergen Schwarzer <jschwarzer@freenet.de>
* @author Marcel Metz <marcel_metz@gmx.de>
* @author Matthias Schulte <post@lupo49.de>
+ * @author Christian Wichmann <nospam@zone0.de>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -49,7 +50,7 @@ $lang['btn_delete'] = 'Löschen';
$lang['btn_back'] = 'Zurück';
$lang['btn_backlink'] = 'Links hierher';
$lang['btn_backtomedia'] = 'Zurück zur Dateiauswahl';
-$lang['btn_subscribe'] = 'Änderungen abonnieren';
+$lang['btn_subscribe'] = 'Aboverwaltung';
$lang['btn_profile'] = 'Benutzerprofil';
$lang['btn_reset'] = 'Zurücksetzen';
$lang['btn_resendpwd'] = 'Sende neues Passwort';
@@ -107,27 +108,27 @@ $lang['js']['notsavedyet'] = 'Nicht gespeicherte Änderungen gehen verloren!
$lang['js']['searchmedia'] = 'Suche nach Dateien';
$lang['js']['keepopen'] = 'Fenster nach Auswahl nicht schließen';
$lang['js']['hidedetails'] = 'Details ausblenden';
-$lang['js']['mediatitle'] = 'Link-Eigenschaften';
-$lang['js']['mediadisplay'] = 'Linktyp';
-$lang['js']['mediaalign'] = 'Ausrichtung';
-$lang['js']['mediasize'] = 'Bildgröße';
-$lang['js']['mediatarget'] = 'Linkziel';
-$lang['js']['mediaclose'] = 'Schließen';
-$lang['js']['mediainsert'] = 'Einfügen';
-$lang['js']['mediadisplayimg'] = 'Bild anzeigen.';
-$lang['js']['mediadisplaylnk'] = 'Nur den Link anzeigen.';
-$lang['js']['mediasmall'] = 'Kleine Version';
-$lang['js']['mediamedium'] = 'Mittelgroße Version';
-$lang['js']['medialarge'] = 'Große Version';
-$lang['js']['mediaoriginal'] = 'Original Version';
-$lang['js']['medialnk'] = 'Link zu der Detailseite';
-$lang['js']['mediadirect'] = 'Direkter Link zum Original';
-$lang['js']['medianolnk'] = 'Kein link';
-$lang['js']['medianolink'] = 'Keine Verlinkung des Bildes';
-$lang['js']['medialeft'] = 'Bild nach links ausrichten.';
-$lang['js']['mediaright'] = 'Bild nach rechts ausrichten.';
-$lang['js']['mediacenter'] = 'Bild in der Mitte ausrichten';
-$lang['js']['medianoalign'] = 'Keine Ausrichtung des Bildes.';
+$lang['js']['mediatitle'] = 'Link-Eigenschaften';
+$lang['js']['mediadisplay'] = 'Linktyp';
+$lang['js']['mediaalign'] = 'Ausrichtung';
+$lang['js']['mediasize'] = 'Bildgröße';
+$lang['js']['mediatarget'] = 'Linkziel';
+$lang['js']['mediaclose'] = 'Schließen';
+$lang['js']['mediainsert'] = 'Einfügen';
+$lang['js']['mediadisplayimg'] = 'Bild anzeigen.';
+$lang['js']['mediadisplaylnk'] = 'Nur den Link anzeigen.';
+$lang['js']['mediasmall'] = 'Kleine Version';
+$lang['js']['mediamedium'] = 'Mittelgroße Version';
+$lang['js']['medialarge'] = 'Große Version';
+$lang['js']['mediaoriginal'] = 'Original Version';
+$lang['js']['medialnk'] = 'Link zu der Detailseite';
+$lang['js']['mediadirect'] = 'Direkter Link zum Original';
+$lang['js']['medianolnk'] = 'Kein link';
+$lang['js']['medianolink'] = 'Keine Verlinkung des Bildes';
+$lang['js']['medialeft'] = 'Bild nach links ausrichten.';
+$lang['js']['mediaright'] = 'Bild nach rechts ausrichten.';
+$lang['js']['mediacenter'] = 'Bild in der Mitte ausrichten';
+$lang['js']['medianoalign'] = 'Keine Ausrichtung des Bildes.';
$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 zu:';
@@ -148,7 +149,6 @@ $lang['uploadsize'] = 'Die hochgeladene Datei war zu groß. (max. %s)
$lang['deletesucc'] = 'Die Datei "%s" wurde gelöscht.';
$lang['deletefail'] = '"%s" konnte nicht gelöscht werden. Keine Berechtigung?.';
$lang['mediainuse'] = 'Die Datei "%s" wurde nicht gelöscht. Sie wird noch verwendet.';
-$lang['mediainuse'] = 'Die Datei "%s" wurde nicht gelöscht. Sie wird noch verwendet.';
$lang['namespaces'] = 'Namensräume';
$lang['mediafiles'] = 'Vorhandene Dateien in';
$lang['accessdenied'] = 'Du hast keinen Zugriff auf diese Seite';
@@ -225,22 +225,22 @@ $lang['img_copyr'] = 'Copyright';
$lang['img_format'] = 'Format';
$lang['img_camera'] = 'Kamera';
$lang['img_keywords'] = 'Schlagwörter';
-$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_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';
$lang['subscr_unsubscribe_success'] = 'Die Seite %s wurde von der Abonnementenliste von %s entfernt';
-$lang['subscr_unsubscribe_error'] = 'Fehler beim Entfernen von %s von der Abonnementenliste von %s';
-$lang['subscr_already_subscribed'] = '%s ist bereits auf der Abonnementenliste von %s';
-$lang['subscr_not_subscribed'] = '%s ist nicht auf der Abonnementenliste von %s';
-$lang['subscr_m_not_subscribed'] = 'Du hast kein Abonnement von dieser Seite oder dem Namensraum.';
-$lang['subscr_m_new_header'] = 'Abonnementen hinzufügen';
-$lang['subscr_m_current_header'] = 'Aktive Abonnements';
-$lang['subscr_m_unsubscribe'] = 'Abbestellen';
-$lang['subscr_m_subscribe'] = 'Abonnieren';
-$lang['subscr_m_receive'] = 'Erhalten';
-$lang['subscr_style_every'] = 'E-Mail bei jeder Änderung';
-$lang['subscr_style_digest'] = 'E-Mail mit zusammengefasster Übersicht der Seitenänderungen (alle %.2f Tage)';
-$lang['subscr_style_list'] = 'Auflistung aller geänderten Seiten seit der letzten E-Mail (alle %.2f Tage)';
+$lang['subscr_unsubscribe_error'] = 'Fehler beim Entfernen von %s von der Abonnementenliste von %s';
+$lang['subscr_already_subscribed'] = '%s ist bereits auf der Abonnementenliste von %s';
+$lang['subscr_not_subscribed'] = '%s ist nicht auf der Abonnementenliste von %s';
+$lang['subscr_m_not_subscribed'] = 'Du hast kein Abonnement von dieser Seite oder dem Namensraum.';
+$lang['subscr_m_new_header'] = 'Abonnementen hinzufügen';
+$lang['subscr_m_current_header'] = 'Aktive Abonnements';
+$lang['subscr_m_unsubscribe'] = 'Abbestellen';
+$lang['subscr_m_subscribe'] = 'Abonnieren';
+$lang['subscr_m_receive'] = 'Erhalten';
+$lang['subscr_style_every'] = 'E-Mail bei jeder Änderung';
+$lang['subscr_style_digest'] = 'E-Mail mit zusammengefasster Übersicht der Seitenänderungen (alle %.2f Tage)';
+$lang['subscr_style_list'] = 'Auflistung aller geänderten Seiten seit der letzten E-Mail (alle %.2f Tage)';
$lang['authmodfailed'] = 'Benutzerüberprüfung nicht möglich. Bitte wende dich an den Admin.';
$lang['authtempfail'] = 'Benutzerüberprüfung momentan nicht möglich. Falls das Problem andauert, wende dich an den Admin.';
$lang['i_chooselang'] = 'Wähle deine Sprache';
diff --git a/inc/lang/de-informal/subscr_digest.txt b/inc/lang/de-informal/subscr_digest.txt
index 9e943626c..f8cab210f 100644
--- a/inc/lang/de-informal/subscr_digest.txt
+++ b/inc/lang/de-informal/subscr_digest.txt
@@ -1,7 +1,7 @@
Hallo!
Die Seite @PAGE@ im @TITLE@ Wiki wurde bearbeitet.
-Das sind die nderungen:
+Üersicht der Änderungen:
--------------------------------------------------------
@DIFF@
@@ -10,10 +10,10 @@ Das sind die nderungen:
Alte Revision: @OLDPAGE@
Neue Revision: @NEWPAGE@
-Um das Abonnement fr diese Seite aufzulsen, melde dich im Wiki an
+Um das Abonnement für diese Seite aufzulösen, melde dich im Wiki an
@DOKUWIKIURL@, besuchen dann
@SUBSCRIBE@
-und klicke auf den Link 'nderungen abbestellen'.
+und klicke auf den Link 'Aboverwaltung'.
--
Diese Mail kommt vom DokuWiki auf
diff --git a/inc/lang/de-informal/subscr_single.txt b/inc/lang/de-informal/subscr_single.txt
index 3a295be76..3c557bc17 100644
--- a/inc/lang/de-informal/subscr_single.txt
+++ b/inc/lang/de-informal/subscr_single.txt
@@ -1,22 +1,22 @@
Hallo!
Die Seite @PAGE@ im @TITLE@ Wiki wurde bearbeitet.
-Das sind die Änderungen:
+Übersicht der Änderungen:
--------------------------------------------------------
@DIFF@
--------------------------------------------------------
-Datum : @DATE@
-Benutzer : @USER@
-Übersicht: @SUMMARY@
+Datum: @DATE@
+Benutzer: @USER@
+Zusammenfassung: @SUMMARY@
Alte Revision: @OLDPAGE@
Neue Revision: @NEWPAGE@
Um das Abonnement für diese Seite aufzulösen, melde dich im Wiki an
-@DOKUWIKIURL@, besuchen dann
+@DOKUWIKIURL@, besuche dann
@NEWPAGE@
-und klicke auf den Link 'Änderungen abbestellen'.
+und klicke auf den Link 'Aboverwaltung'.
--
Diese Mail kommt vom DokuWiki auf
diff --git a/inc/lang/de/lang.php b/inc/lang/de/lang.php
index ecc190c36..a353b98ed 100644
--- a/inc/lang/de/lang.php
+++ b/inc/lang/de/lang.php
@@ -17,6 +17,8 @@
* @author Blitzi94@gmx.de
* @author Robert Bogenschneider <robog@GMX.de>
* @author Robert Bogenschneider <robog@gmx.de>
+ * @author Niels Lange <niels@boldencursief.nl>
+ * @author Christian Wichmann <nospam@zone0.de>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -49,7 +51,7 @@ $lang['btn_delete'] = 'Löschen';
$lang['btn_back'] = 'Zurück';
$lang['btn_backlink'] = 'Links hierher';
$lang['btn_backtomedia'] = 'Zurück zur Dateiauswahl';
-$lang['btn_subscribe'] = 'Änderungen abonnieren';
+$lang['btn_subscribe'] = 'Aboverwaltung';
$lang['btn_profile'] = 'Benutzerprofil';
$lang['btn_reset'] = 'Zurücksetzen';
$lang['btn_resendpwd'] = 'Sende neues Passwort';
diff --git a/inc/lang/de/subscr_digest.txt b/inc/lang/de/subscr_digest.txt
index c8bf770ee..7cc79bba2 100644
--- a/inc/lang/de/subscr_digest.txt
+++ b/inc/lang/de/subscr_digest.txt
@@ -1,7 +1,7 @@
Hallo!
Die Seite @PAGE@ im @TITLE@ Wiki wurde bearbeitet.
-Das sind die Änderungen:
+Übersicht der Änderungen:
--------------------------------------------------------
@DIFF@
@@ -13,7 +13,7 @@ Neue Revision: @NEWPAGE@
Um das Abonnement für diese Seite aufzulösen, melden Sie sich im Wiki an
@DOKUWIKIURL@, besuchen dann
@SUBSCRIBE@
-und klicken auf den Link 'Änderungen abbestellen'.
+und klicken auf den Link 'Aboverwaltung'.
--
Diese Mail kommt vom DokuWiki auf
diff --git a/inc/lang/de/subscr_single.txt b/inc/lang/de/subscr_single.txt
index fb149e927..f3e1cd393 100644
--- a/inc/lang/de/subscr_single.txt
+++ b/inc/lang/de/subscr_single.txt
@@ -1,22 +1,22 @@
Hallo!
Die Seite @PAGE@ im @TITLE@ Wiki wurde bearbeitet.
-Das sind die Änderungen:
+Übersicht der Änderungen:
--------------------------------------------------------
@DIFF@
--------------------------------------------------------
-Datum : @DATE@
-Benutzer : @USER@
-Übersicht: @SUMMARY@
+Datum: @DATE@
+Benutzer: @USER@
+Zusammenfassung: @SUMMARY@
Alte Revision: @OLDPAGE@
Neue Revision: @NEWPAGE@
-Um das Abonnement für diese Seite aufzulösen, melde Sie sich im Wiki an
+Um das Abonnement für diese Seite aufzulösen, melden Sie sich im Wiki an
@DOKUWIKIURL@, besuchen dann
@NEWPAGE@
-und klicken auf die Taste 'Änderungen abbestellen'.
+und klicken auf die Taste 'Aboverwaltung'.
--
Diese Mail kommt vom DokuWiki auf
diff --git a/inc/lang/he/conflict.txt b/inc/lang/he/conflict.txt
index d27a78559..c1cccdfcf 100644
--- a/inc/lang/he/conflict.txt
+++ b/inc/lang/he/conflict.txt
@@ -1,6 +1,6 @@
-====== גירסה עדכנית יותר של הקובץ קיימת ======
+====== קיימת גרסה עדכנית יותר של הקובץ ======
-גירסה עדכנית יותר של המסמך קיימת. דבר זה קורה כאשר משתמש אחר שינה את המסמך בזמן שערכת אותו.
+ישנה גרסה עדכנית יותר של המסמך. מצב כזה קורה כאשר משתמש אחר שינה את המסמך בזמן שערכת אותו.
-מומלץ לעיין בהבדלים תחת הודעה ולאחר מכן להחליט איזו גירסה כדאי לשמור. לחיצה על הכפתור "שמור" תשמור את הגרסה שערכת. לחיצה על הכפתור "בטל" תשמור את הגרסה הקיימת.
+מומלץ לעיין בהבדלים המופיעים להלן ולאחר מכן להחליט איזו גרסה כדאי לשמור. לחיצה על הכפתור "שמירה" תשמור את הגרסה שערכת. לחיצה על הכפתור "ביטול" תשמור את הגרסה הקיימת.
diff --git a/inc/lang/he/denied.txt b/inc/lang/he/denied.txt
index 34c8417b4..a366fc198 100644
--- a/inc/lang/he/denied.txt
+++ b/inc/lang/he/denied.txt
@@ -1,3 +1,3 @@
====== הרשאה נדחתה ======
-אנו מצטערים אך אין לך הרשאות מתאימות כדי להמשיך. אולי שכחת להכנס למערכת? \ No newline at end of file
+אנו מצטערים אך אין לך הרשאות מתאימות כדי להמשיך. אולי שכחת להיכנס למערכת? \ No newline at end of file
diff --git a/inc/lang/he/draft.txt b/inc/lang/he/draft.txt
index 22fc88d9f..b999cc187 100644
--- a/inc/lang/he/draft.txt
+++ b/inc/lang/he/draft.txt
@@ -1,5 +1,5 @@
-====== נמצא קובץ טיוטא ======
+====== נמצא קובץ טיוטה ======
-העריכה האחרונה שבוצעה לדף זה לא הסתימה כהלכה. DokuWiki שמר באופן אוטומטי טיוטה של העבודה ובאפשרותך להשתמש בה כדי להמשיך את העריכה. ניתן לראות מטה את המידע שנשמר מהפעם הקודמת.
+העריכה האחרונה שבוצעה לדף זה לא הושלמה כראוי. DokuWiki שמר באופן אוטומטי טיוטה של העבודה ובאפשרותך להשתמש בה כדי להמשיך את העריכה. ניתן לראות להלן את הנתונים שנשמרו מהפעם הקודמת.
באפשרותך לבחור ב//שחזור הטיוטה// של אותה עריכה //מחיקת הטיוטה// או //ביטול// העריכה כליל. \ No newline at end of file
diff --git a/inc/lang/he/edit.txt b/inc/lang/he/edit.txt
index 4d8151e9d..74b3cefeb 100644
--- a/inc/lang/he/edit.txt
+++ b/inc/lang/he/edit.txt
@@ -1 +1 @@
-עריכת הדף ולחיצה על הכפתור "שמור" תעדכן את תוכנו. מומלץ לעיין בדף ה[[wiki:syntax|תחביר]] כדי להכיר את כללי תחביר הויקי. נא לערוך את הדף רק אם הדבר נעשה כדי **לשפר** אותו. אם העריכה היא לצורך התנסות מומלץ לבקר ב[[playground:playground|ארגז החול]].
+עריכת הדף ולחיצה על הלחצן "שמירה" תעדכן את תוכנו. מומלץ לעיין בדף ה[[wiki:syntax|תחביר]] כדי להכיר את כללי תחביר הוויקי. נא לערוך את הדף רק אם הדבר נעשה כדי **לשפר** אותו. אם העריכה היא לצורך התנסות מומלץ לבקר ב[[playground:playground|ארגז החול]].
diff --git a/inc/lang/he/editrev.txt b/inc/lang/he/editrev.txt
index a6c755cba..e33001fa3 100644
--- a/inc/lang/he/editrev.txt
+++ b/inc/lang/he/editrev.txt
@@ -1,2 +1,2 @@
-**הדף שנפתח הוא גרסה ישנה של המסמך!** לחיצה על הכפתור "שמור" תשחזר את המסמך לגרסה המוצגת כעת.
+**הדף שנפתח הוא גרסה ישנה של המסמך!** לחיצה על הלחצן "שמירה" תשחזר את המסמך לגרסה המוצגת כעת.
---- \ No newline at end of file
diff --git a/inc/lang/he/index.txt b/inc/lang/he/index.txt
index 12b7a960e..4b0623f84 100644
--- a/inc/lang/he/index.txt
+++ b/inc/lang/he/index.txt
@@ -1,4 +1,4 @@
-====== אינדקס ======
+====== מפת אתר ======
-זהו קובץ אינדקס הנמצא מעל לכל הדפים המאורגנים ב[[ויקי:דוקיוויקי]].
+זהו קובץ מפת אתר הנמצא מעל לכל הדפים המאורגנים ב[[ויקי:דוקיוויקי]].
diff --git a/inc/lang/he/install.html b/inc/lang/he/install.html
index 7831623c9..3832fb5fb 100644
--- a/inc/lang/he/install.html
+++ b/inc/lang/he/install.html
@@ -1,13 +1,13 @@
-<p>דף זה מסייע להתקנה וההגדרה הראשוניות של
-<a href="http://dokuwiki.org">Dokuwiki</a>. מידע נוסף על מתקין זה זמין בדף
+<p>דף זה מסייע בהליכי ההתקנה וההגדרה הראשוניים של
+<a href="http://dokuwiki.org">Dokuwiki</a>. מידע נוסף על תכנית התקנה זו זמין בדף
<a href="http://dokuwiki.org/installer">התיעוד שלו</a>.</p>
-<p>DokuWiki עושה שימוש בקבצים רגילים לשמירת דפי ויקי ומידע נוסף הקשור לדפים אלו (לדוגמה תמונות, רשימות חיפוש, גרסאות קודמות וכו').
-לתפקוד תקין DokuWiki <strong>חייב</strong> גישה לכתיבה לתיקיות המכילות קבצים אלו. מתקין זה אינו יכול לקבוע הרשאות לתיקיות.
-פעולה זו צריכה בד"כ להתבצע ישירות משורת הפקודה או במקרה שנעשה שימוש בשרת מארח דרך FTP או מנשק הניהול של המארח (cPanell לדוגמה).</p>
+<p>DokuWiki עושה שימוש בקבצים רגילים לשמירת דפי ויקי ומידע נוסף הקשור לדפים אלו (לדוגמה: תמונות, רשימות חיפוש, גרסאות קודמות וכו׳).
+לצורך תפקוד תקין DokuWiki <strong>חייב</strong> גישה לכתיבה לתיקיות המכילות קבצים אלו. תכנית התקנה זו אינה יכולה להגדיר הרשאות לתיקיות.
+פעולה זו צריכה בד״כ להתבצע ישירות משורת הפקודה או במקרה שנעשה שימוש בשרת מארח דרך FTP או מנשק הניהול של המארח (cPanell לדוגמה).</p>
-<p>מתקין זה יגדיר את תצורת ה-<acronym title="access control list">ACL</acronym> ב-DokuWiki שלך
+<p>מתקין זה יגדיר את תצורת ה־<acronym title="access control list">ACL</acronym> ב-DokuWiki שלך
, זה בתורו מאפשר גישת מנהל לתפריט הניהול של DokuWiki כדי להתקין הרחבות, לנהל משתמשים, לנהל גישות לדפי ויקי ושינויים בהגדרות התצורה.
-אין הוא הכרחי לתפקוד DokuWiki אך הוא יהפוך את Dokuwiki קל יותר לניהול.</p>
+אין הוא הכרחי לתפקוד DokuWiki אך הוא יהפוך את Dokuwiki לפשוט יותר לניהול.</p>
-<p>על משתמשים מנוסים או כאלו עם דרישות מיוחדות להתקנה להשתמש בקישורים אלו לפרטים בנוגע ל<a href="http://dokuwiki.org/install">הוראות התקנה</a> ו<a href="http://dokuwiki.org/config">הגדרות תצורה</a>.</p>
+<p>על משתמשים מנוסים או כאלו עם דרישות מיוחדות להתקנה להשתמש בקישורים אלו לפרטים בנוגע ל<a href="http://dokuwiki.org/install">הוראות התקנה</a> ול<a href="http://dokuwiki.org/config">הגדרות תצורה</a>.</p>
diff --git a/inc/lang/he/lang.php b/inc/lang/he/lang.php
index a411764d2..47310d4d1 100644
--- a/inc/lang/he/lang.php
+++ b/inc/lang/he/lang.php
@@ -10,6 +10,7 @@
* @author Dotan Kamber <kamberd@yahoo.com>
* @author Moshe Kaplan <mokplan@gmail.com>
* @author Yaron Yogev <yaronyogev@gmail.com>
+ * @author Yaron Shahrabani <sh.yaron@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'rtl';
@@ -18,132 +19,153 @@ $lang['doublequoteclosing'] = '”';
$lang['singlequoteopening'] = '‘';
$lang['singlequoteclosing'] = '’';
$lang['apostrophe'] = '\'';
-$lang['btn_edit'] = 'עריכה';
-$lang['btn_source'] = 'הצג את מקור הדף';
-$lang['btn_show'] = 'הצג דף';
+$lang['btn_edit'] = 'עריכת דף זה';
+$lang['btn_source'] = 'הצגת מקור הדף';
+$lang['btn_show'] = 'הצגת דף';
$lang['btn_create'] = 'יצירת דף';
-$lang['btn_search'] = 'חפש';
-$lang['btn_save'] = 'שמור';
+$lang['btn_search'] = 'חיפוש';
+$lang['btn_save'] = 'שמירה';
$lang['btn_preview'] = 'תצוגה מקדימה';
-$lang['btn_top'] = 'חזור למעלה';
-$lang['btn_newer'] = '<< יותר חדש';
-$lang['btn_older'] = 'פחות חדש >>';
+$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_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_admin'] = 'ניהול';
+$lang['btn_update'] = 'עדכון';
+$lang['btn_delete'] = 'מחיקה';
+$lang['btn_back'] = 'חזרה';
$lang['btn_backlink'] = 'קישורים לכאן';
-$lang['btn_backtomedia'] = 'לחזור לבחירת קובץ מדיה';
-$lang['btn_subscribe'] = 'עקוב אחרי שינוים';
-$lang['btn_unsubscribe'] = 'הפסק לעקוב';
-$lang['btn_subscribens'] = 'הרשמה לשינויים במרחב השם';
-$lang['btn_unsubscribens'] = 'הסרת הרשמה לשינויים במחב השם';
-$lang['btn_profile'] = 'עדכן פרופיל';
+$lang['btn_backtomedia'] = 'חזרה לבחירת קובץ מדיה';
+$lang['btn_subscribe'] = 'מעקב אחרי שינוים';
+$lang['btn_profile'] = 'עדכון הפרופיל';
$lang['btn_reset'] = 'איפוס';
-$lang['btn_resendpwd'] = 'שלח סיסמה חדשה';
+$lang['btn_resendpwd'] = 'שליחת ססמה חדשה';
$lang['btn_draft'] = 'עריכת טיוטה';
$lang['btn_recover'] = 'שחזור טיוטה';
$lang['btn_draftdel'] = 'מחיקת טיוטה';
-$lang['btn_revert'] = 'שחזר';
-$lang['loggedinas'] = 'רשום כ-';
+$lang['btn_revert'] = 'שחזור';
+$lang['loggedinas'] = 'נכנסת בשם';
$lang['user'] = 'שם משתמש';
-$lang['pass'] = 'סיסמה';
-$lang['newpass'] = 'סיסמה חדשה';
-$lang['oldpass'] = 'אשר את הסיסמה הנוכחית';
-$lang['passchk'] = 'שוב';
-$lang['remember'] = 'זכור אותי';
+$lang['pass'] = 'ססמה';
+$lang['newpass'] = 'ססמה חדשה';
+$lang['oldpass'] = 'אישור הססמה הנוכחית';
+$lang['passchk'] = 'פעם נוספת';
+$lang['remember'] = 'שמירת הפרטים שלי';
$lang['fullname'] = 'שם מלא';
-$lang['email'] = 'דוא"ל';
+$lang['email'] = 'דוא״ל';
$lang['register'] = 'הרשמה';
-$lang['profile'] = 'פרופיל';
-$lang['badlogin'] = 'סליחה, שם המשתמש או הסיסמה שגויים';
-$lang['minoredit'] = 'שינוים מינוריים';
-$lang['draftdate'] = 'טיוטה נשמרה ב-';
+$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'] = 'סיסמת הדוקוויקי שלך';
-$lang['reghere'] = 'עדיין ללא שם-משתמש? ההרשמה כאן';
+$lang['regmissing'] = 'עליך למלא את כל השדות, עמך הסליחה.';
+$lang['reguexists'] = 'משתמש בשם זה כבר נרשם, עמך הסליחה.';
+$lang['regsuccess'] = 'ההרשמה הצליחה, המשתמש נרשם והודעה נשלחה בדוא״ל.';
+$lang['regsuccess2'] = 'ההרשמה הצליחה, המשתמש נוצר.';
+$lang['regmailfail'] = 'שליחת הודעת הדוא״ל כשלה, נא ליצור קשר עם מנהל האתר!';
+$lang['regbadmail'] = 'יתכן כי כתובת הדוא״ל אינה תקפה, אם לא כך הדבר ליצור קשר עם מנהל האתר';
+$lang['regbadpass'] = 'שתי הססמאות אינן זהות זו לזו, נא לנסות שוב.';
+$lang['regpwmail'] = 'ססמת הדוקוויקי שלך';
+$lang['reghere'] = 'עדיין אין לך חשבון? ההרשמה כאן';
$lang['profna'] = 'בוויקי הזה לא ניתן לשנות פרופיל';
-$lang['profnochange'] = 'אין שינוים, פרופיל לא עודכן';
-$lang['profnoempty'] = 'שם וכתובת דוא"ל לא יכולים להיות ריקים';
-$lang['profchanged'] = 'פרופיל עודכן בהצלחה';
-$lang['pwdforget'] = 'שכחת סיסמה? קבל חדשה';
-$lang['resendna'] = 'הוויקי הזה לא תומך בחידוש סיסמה';
-$lang['resendpwd'] = 'שלח סיסמה חדשה עבור';
-$lang['resendpwdmissing'] = 'סליחה, עליך למלא את כל השדות';
-$lang['resendpwdnouser'] = 'סליחה, משתמש בשם זה לא נמצא';
-$lang['resendpwdbadauth'] = 'סליחה, קוד אימות זה אינו תקף. יש לודא כי נעשה שימוש במלוא קישור האימות.';
-$lang['resendpwdconfirm'] = 'קישור אימות נשלח בדוא"ל.';
-$lang['resendpwdsuccess'] = 'סיסמה חדשה נשלחה בדואר';
-$lang['license'] = 'למעט מקרים בהם צוין אחרת, התוכן בוויקי זה זמין לפי הרשיון הבא:';
-$lang['licenseok'] = 'שים לב: עריכת דף זה מהווה הסכמה מצידך להצגת התוכן שהוספת לפי הרשיון הבא:';
-$lang['searchmedia'] = 'חפש שם קובץ:';
-$lang['txt_upload'] = 'בחר קובץ להעלות';
-$lang['txt_filename'] = 'הכנס שם לוויקי (בחירה)';
-$lang['txt_overwrt'] = 'לכתוב במקום קובץ קיים';
+$lang['profnochange'] = 'אין שינויים, הפרופיל לא עודכן';
+$lang['profnoempty'] = 'השם וכתובת הדוא״ל לא יכולים להיות ריקים';
+$lang['profchanged'] = 'הפרופיל עודכן בהצלחה';
+$lang['pwdforget'] = 'שכחת את הססמה שלך? ניתן לקבל חדשה';
+$lang['resendna'] = 'הוויקי הזה אינו תומך בחידוש ססמה';
+$lang['resendpwd'] = 'שליחת ססמה חדשה עבור';
+$lang['resendpwdmissing'] = 'עליך למלא את כל השדות, עמך הסליחה.';
+$lang['resendpwdnouser'] = 'משתמש בשם זה לא נמצא במסד הנתונים, עמך הסליחה.';
+$lang['resendpwdbadauth'] = 'קוד אימות זה אינו תקף. יש לוודא כי נעשה שימוש בקישור האימות המלא, עמך הסליחה.';
+$lang['resendpwdconfirm'] = 'נשלח קישור לאימות נשלח בדוא״ל.';
+$lang['resendpwdsuccess'] = 'נשלחה ססמה חדשה בדוא״ל';
+$lang['license'] = 'למעט מקרים בהם צוין אחרת, התוכן בוויקי זה זמין לפי הרישיון הבא:';
+$lang['licenseok'] = 'נא לשים לב: עריכת דף זה מהווה הסכמה מצדך להצגת התוכן שהוספת בהתאם הרישיון הבא:';
+$lang['searchmedia'] = 'חיפוש שם קובץ:';
+$lang['searchmedia_in'] = 'חיפוש תחת %s';
+$lang['txt_upload'] = 'בחירת קובץ להעלות';
+$lang['txt_filename'] = 'העלאה בשם (נתון לבחירה)';
+$lang['txt_overwrt'] = 'שכתוב על קובץ קיים';
$lang['lockedby'] = 'נעול על ידי';
-$lang['lockexpire'] = 'נעילה פגה';
-$lang['willexpire'] = 'נעילה תחלוף עוד זמן קצר. \nלמניעת התנגשויות יש להשתמש בכפתור הרענון מטה כדי לאתחל את הנעילה שנית';
-$lang['js']['notsavedyet'] = "קיימים שינויים שטרם נשמרו ואשר יאבדו \n האם להמשיך?";
-$lang['rssfailed'] = 'כשל ב-RSS';
-$lang['nothingfound'] = 'לא נמצאו תוצאות';
-$lang['mediaselect'] = 'בחירת קובץ מדיה';
-$lang['fileupload'] = 'העלאת קובץ מדיה';
-$lang['uploadsucc'] = 'העלאת הקובץ בוצעה בהצלחה';
-$lang['uploadfail'] = 'קרתה שגיאה בעת העלאת הקובץ. תיתכן ובעייה זו נוצרה עקב הרשאות שגיות.';
-$lang['uploadwrong'] = 'העלאה לא אושרה. קבצים בסיומת זו אסורים';
-$lang['uploadexist'] = 'הקובץ כבר קיים. פעולה בוטלה';
+$lang['lockexpire'] = 'הנעילה פגה';
+$lang['willexpire'] = 'הנעילה תחלוף עוד זמן קצר. \nלמניעת התנגשויות יש להשתמש בכפתור הרענון מטה כדי לאפס את מד משך הנעילה.';
+$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'] = 'לא להשתמש ביישור.';
+$lang['js']['nosmblinks'] = 'קישור לכונני שיתוף של Windows עובד רק באמצעות Microsoft Internet Explorer.
+עדיין ניתן להעתיק ולהדביק את הקישור.';
+$lang['js']['linkwiz'] = 'אשף הקישורים';
+$lang['js']['linkto'] = 'קישור אל:';
+$lang['js']['del_confirm'] = 'באמת למחוק?';
+$lang['js']['mu_btn'] = 'העלאת מספר קבצים יחד';
+$lang['rssfailed'] = 'אירע כשל בעת קבלת הזנה זו:';
+$lang['nothingfound'] = 'לא נמצאו תוצאות.';
+$lang['mediaselect'] = 'קובצי מדיה';
+$lang['fileupload'] = 'העלאת קובצי מדיה';
+$lang['uploadsucc'] = 'ההעלאה הושלמה בהצלחה';
+$lang['uploadfail'] = 'אירעה שגיאה בעת העלאת הקובץ. היתכן שתקלה זו נוצרה עקב הרשאות שגיות?';
+$lang['uploadwrong'] = 'ההעלאה לא אושרה. קבצים בסיומת זו אסורים!';
+$lang['uploadexist'] = 'הקובץ כבר קיים. הפעולה בוטלה.';
$lang['uploadbadcontent'] = 'התוכן שהועלה לא תאם את הסיומת %s של הקובץ.';
-$lang['uploadspam'] = 'ההעלאה נחסמה על ידי הרשימה השחורה של הספאם.';
+$lang['uploadspam'] = 'ההעלאה נחסמה על ידי רשימת חסימת הספאם.';
$lang['uploadxss'] = 'ההעלאה נחסמה בשל חשד לתוכן זדוני.';
-$lang['uploadsize'] = 'הקובץ שהועלה היה גדול מדי. (מקסימום %s)';
-$lang['deletesucc'] = 'קובץ %s נמחק';
-$lang['deletefail'] = 'לא יכולתי למחוק "%s" -- בדקו הרשאות';
-$lang['mediainuse'] = 'קובץ "%s" לא נמחק - הוא עדיין בשימוש';
+$lang['uploadsize'] = 'הקובץ שהועלה היה גדול מדי. (%s לכל היותר)';
+$lang['deletesucc'] = 'הקובץ %s נמחק.';
+$lang['deletefail'] = 'לא ניתן למחוק את "%s" -- נא לבדוק את ההרשאות.';
+$lang['mediainuse'] = 'הקובץ "%s" לא נמחק - הוא עדיין בשימוש.';
$lang['namespaces'] = 'שמות מתחם';
-$lang['mediafiles'] = 'קבצים זמינים ב-';
-$lang['js']['searchmedia'] = 'חיפוש קבצים';
-$lang['js']['keepopen'] = 'השאר חלון פתוח בבחירה';
-$lang['js']['hidedetails'] = 'הסתר פרטים';
-$lang['js']['nosmblinks'] = ':( קישור למערכת קבצים של חלונות פועל רק בדפדפן אינטרנט אקספלורר.
- זה בסדר, אין צורך לעבור. אפשר להעתיק ולהדביק את הקישור';
-$lang['js']['linkwiz'] = 'אשף הקישורים';
-$lang['js']['linkto'] = 'קשר אל:';
-$lang['js']['del_confirm'] = 'באמת למחוק?';
-$lang['js']['mu_btn'] = 'העלאת קבצים מרובים';
-$lang['mediausage'] = 'השתמש בתחביר הבא להתיחסות אל קובץ זה:';
-$lang['mediaview'] = 'הצג את הקובץ המקורי';
+$lang['mediafiles'] = 'קבצים זמינים תחת';
+$lang['accessdenied'] = 'אין לך הרשאה לצפות בדף זה.';
+$lang['mediausage'] = 'יש להשתמש בתחביר הבא כדי להפנות לקובץ זה:';
+$lang['mediaview'] = 'הצגת הקובץ המקורי';
$lang['mediaroot'] = 'root';
-$lang['mediaupload'] = 'כאן ניתן להעלות קובץ למרחב השמות הנוכחי. ליצירת תתי-מרחבי שמות צרפם ב-"העלה" לתחילת שם הקובץ מופרדים בפסיקים';
-$lang['mediaextchange'] = 'סיומת הקובץ השתנתה מ-.%s ל-.%s!';
-$lang['reference'] = 'קישורים ל';
+$lang['mediaupload'] = 'כאן ניתן להעלות קובץ למרחב השם הנוכחי. ליצירת תת־מרחבי שם יש לצרף אותם לתחילת שם הקובץ, מופרדים בפסיקים, בשם הקובץ תחת "העלאה בתור".';
+$lang['mediaextchange'] = 'סיומת הקובץ השתנתה מ־‎.%s ל־‎.%s!';
+$lang['reference'] = 'הפניות אל';
$lang['ref_inuse'] = 'לא ניתן למחוק קובץ זה, כיוון שהדפים הבאים עדיין משתמשים בו:';
-$lang['ref_hidden'] = 'יש קישורים לדפים ללא הרשאת קריאה';
-$lang['hits'] = 'פגיעות';
-$lang['quickhits'] = 'דפים שנמצאו';
+$lang['ref_hidden'] = 'חלק מההפניות נמצאות בדפים שאין לך הרשאות לקרוא אותם';
+$lang['hits'] = 'ביקורים';
+$lang['quickhits'] = 'שמות דפים שנמצאו';
$lang['toc'] = 'תוכן עניינים';
-$lang['current'] = 'גירסה נוכחית';
+$lang['current'] = 'הגרסה הנוכחית';
$lang['yours'] = 'הגרסה שלך';
-$lang['diff'] = 'הצג שינוים מגרסה זו ועד הנוכחית';
+$lang['diff'] = 'הצגת שינוים מגרסה זו ועד הנוכחית';
$lang['diff2'] = 'הצגת הבדלים בין הגרסאות שנבחרו';
+$lang['difflink'] = 'קישור לתצוגה השוואה זו';
$lang['line'] = 'שורה';
$lang['breadcrumb'] = 'ביקורים אחרונים';
-$lang['youarehere'] = 'אתה נמצא כאן';
-$lang['lastmod'] = 'שונה לאחרונה ב';
+$lang['youarehere'] = 'זהו מיקומך';
+$lang['lastmod'] = 'מועד השינוי האחרון';
$lang['by'] = 'על ידי';
$lang['deleted'] = 'נמחק';
$lang['created'] = 'נוצר';
@@ -151,9 +173,10 @@ $lang['restored'] = 'שוחזר';
$lang['external_edit'] = 'עריכה חיצונית';
$lang['summary'] = 'תקציר העריכה';
$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">תוסף פלאש לדפדפן</a> נדרש כדי להציג תוכן זה.';
-$lang['download'] = 'הורד מקטע';
+$lang['download'] = 'הורדת מקטע';
$lang['mail_newpage'] = 'דף נוסף:';
$lang['mail_changed'] = 'דף שונה:';
+$lang['mail_subscribe_list'] = 'דפים שהשתנו במרחב השם:';
$lang['mail_new_user'] = 'משתמש חדש:';
$lang['mail_upload'] = 'קובץ הועלה:';
$lang['qb_bold'] = 'טקסט מודגש';
@@ -167,7 +190,7 @@ $lang['qb_h3'] = 'כותרת רמה 3';
$lang['qb_h4'] = 'כותרת רמה 4';
$lang['qb_h5'] = 'כותרת רמה 5';
$lang['qb_h'] = 'כותרת';
-$lang['qb_hs'] = 'בחירת כותרת';
+$lang['qb_hs'] = 'כותרת נבחרת';
$lang['qb_hplus'] = 'כותרת ברמה גבוהה יותר';
$lang['qb_hminus'] = 'כותרת ברמה נמוכה יותר';
$lang['qb_hequal'] = 'כותרת באותה רמה';
@@ -175,73 +198,85 @@ $lang['qb_link'] = 'קישור פנימי';
$lang['qb_extlink'] = 'קישור חיצוני';
$lang['qb_hr'] = 'קו אופקי';
$lang['qb_ol'] = 'איבר ברשימה ממוספרת';
-$lang['qb_ul'] = 'אבר ברשימה לא ממוספרת';
-$lang['qb_media'] = 'תמונות או קובץ אחר';
-$lang['qb_sig'] = 'הזנת חתימה';
-$lang['qb_smileys'] = 'פרצופונים';
-$lang['qb_chars'] = 'סימנים מיוחדים';
-$lang['upperns'] = 'עבור למרחב השם שברמה שמעל הנוכחית';
-$lang['admin_register'] = 'להוסיף משתמש חדש';
-$lang['metaedit'] = 'ערוך נתונים';
-$lang['metasaveerr'] = 'כשל בשמירת נתונים';
-$lang['metasaveok'] = 'נתונים נשמרו';
-$lang['img_backto'] = 'הזור ל';
-$lang['img_title'] = 'כותרת';
-$lang['img_caption'] = 'תיאור';
+$lang['qb_ul'] = 'איבר ברשימה לא ממוספרת';
+$lang['qb_media'] = 'תמונות וקבצים אחרים';
+$lang['qb_sig'] = 'הוספת חתימה';
+$lang['qb_smileys'] = 'חייכנים';
+$lang['qb_chars'] = 'תווים מיוחדים';
+$lang['upperns'] = 'מעבר למרחב השם שברמה שמעל הנוכחית';
+$lang['admin_register'] = 'הוספת משתמש חדש';
+$lang['metaedit'] = 'עריכת נתוני העל';
+$lang['metasaveerr'] = 'אירע כשל בשמירת נתוני העל';
+$lang['metasaveok'] = 'נתוני העל נשמרו';
+$lang['img_backto'] = 'חזרה אל';
+$lang['img_title'] = 'שם';
+$lang['img_caption'] = 'כותרת';
$lang['img_date'] = 'תאריך';
$lang['img_fname'] = 'שם הקובץ';
$lang['img_fsize'] = 'גודל';
$lang['img_artist'] = 'צלם';
-$lang['img_copyr'] = 'זכויות';
-$lang['img_format'] = 'פורמט';
+$lang['img_copyr'] = 'זכויות יוצרים';
+$lang['img_format'] = 'מבנה';
$lang['img_camera'] = 'מצלמה';
$lang['img_keywords'] = 'מילות מפתח';
-$lang['subscribe_success'] = '%s נוסף לרשימת המכותבים עבור %s';
-$lang['subscribe_error'] = 'שגיאה בהוספת %s לרשימת המכותבים עבור %s';
-$lang['subscribe_noaddress'] = 'אין כתובת המשויכת לרישום שלך ולכן אין באפשרותך להצטרף לרשימת המכותבים';
-$lang['unsubscribe_success'] = '%s הוסר מרשימת המכותבים עבור %s';
-$lang['unsubscribe_error'] = 'שגיאה בהסרת %s מרשימת המכותבים עבור %s';
-$lang['authmodfailed'] = 'תצורת אימות משתמשים גרועה. נא לדווח למנהל הויקי.';
-$lang['authtempfail'] = 'אימות משתמשים אינו זמין כרגע. אם מצב זה נמשך נא להודיע למנהל הויקי.';
+$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'] = 'הודעת דוא״ל המציגה את כל השינויים בכל עמוד (בכל %.2f ימים)';
+$lang['subscr_style_list'] = 'רשימת השינויים בדפים מאז הודעת הדוא״ל האחרונה (בכל %.2f ימים)';
+$lang['authmodfailed'] = 'תצורת אימות המשתמשים אינה תקינה. נא ליידע את מנהל הוויקי.';
+$lang['authtempfail'] = 'אימות משתמשים אינו זמין כרגע. אם מצב זה נמשך נא ליידע את מנהל הוויקי.';
$lang['i_chooselang'] = 'נא לבחור שפה';
-$lang['i_installer'] = 'DokuWiki Installer';
-$lang['i_wikiname'] = 'שם הויקי';
-$lang['i_enableacl'] = 'אפשר ACL (מומלץ)';
-$lang['i_superuser'] = 'משתמש-על';
-$lang['i_problems'] = 'המתקין זיהה מספר בעיות המצוינות מטה. אין באפשרותך להמשיך לפני תיקונן.';
-$lang['i_modified'] = 'משיקולי אבטחה תסריט זה יעבוד אך ורק עם התקנת DokuWiki חדשה שלא עברה כל שינוי.
- עליך לחלץ שנית את הקבצים מהחבילה שהורדה או להעזר בדף
+$lang['i_installer'] = 'תכנית ההתקנה של DokuWiki';
+$lang['i_wikiname'] = 'שם הוויקי';
+$lang['i_enableacl'] = 'הפעלת ACL (מומלץ)';
+$lang['i_superuser'] = 'משתמש־על';
+$lang['i_problems'] = 'תכנית ההתקנה זיהתה מספר בעיות המפורטות להלן. אין באפשרותך להמשיך לפני תיקונן.';
+$lang['i_modified'] = 'משיקולי אבטחה סקריפט זה יעבוד אך ורק עם התקנת DokuWiki חדשה שלא עברה כל שינוי.
+ עליך לחלץ שנית את הקבצים מהחבילה שהורדה או להיעזר בדף
<a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a>';
-$lang['i_funcna'] = 'פונקצית ה-PHP <code>%s</code> אינה זמינה. יתכן כי מארח האתר חסם אותה מסיבה כלשהי?';
-$lang['i_phpver'] = 'גרסת ה-PHP שלך <code>%s</code> נמוכה מהדרוש. עליך לשדרג את התקנת ה-PHP';
-$lang['i_permfail'] = '<code>%s</code> אינה ברת כתיבה על ידי DokuWiki. עליך לשנות הרשאות ספריה זו!';
+$lang['i_funcna'] = 'פונקציית ה-PHP&rlm; <code>%s</code> אינה זמינה. יתכן כי מארח האתר חסם אותה מסיבה כלשהי?';
+$lang['i_phpver'] = 'גרסת ה־PHP שלך <code>%s</code> נמוכה מהדרוש. עליך לשדרג את התקנת ה־PHP שלך.';
+$lang['i_permfail'] = '<code>%s</code> אינה ניתנת לכתיבה על ידי DokuWiki. עליך לשנות הרשאות תיקייה זו!';
$lang['i_confexists'] = '<code>%s</code> כבר קיים';
-$lang['i_writeerr'] = 'אין אפשרות ליצור את <code>%s</code>. נא לבדוק את הרשאות הקובץ/ספריה וליצור את הקובץ ידנית.';
-$lang['i_badhash'] = 'קובץ Dokuwiki.php לא מזוהה או שעבר שינויים (hash=<code>%s</code>)';
-$lang['i_badval'] = '<code>%s</code> - ערך לא חוקי או ריק';
-$lang['i_success'] = 'ההגדרה הסתימה בהצלחה. באפשרותך למחוק עתה את הקובץ install.php ולהמשיך אל <a href="doku.php">DokuWiki החדש שלך</a>.';
-$lang['i_failure'] = 'מספר שגיאות ארעו בעת כתיבת קבצי התצורה. ייתכן כי יהיה צורך לתקנם ידנית לפני שניתן יהיה להשתמש ב<a href="doku.php">DokuWiki החדש שלך</a>.';
-$lang['i_policy'] = 'מדיניות ACL תחילית';
+$lang['i_writeerr'] = 'אין אפשרות ליצור את <code>%s</code>. נא לבדוק את הרשאות הקובץ/תיקייה וליצור את הקובץ ידנית.';
+$lang['i_badhash'] = 'הקובץ Dokuwiki.php אינו מזוהה או שעבר שינויים (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - הערך אינו חוקי או ריק';
+$lang['i_success'] = 'תהליך ההגדרה הסתיים בהצלחה. כעת ניתן למחוק את הקובץ install.php ולהמשיך אל ה־<a href="doku.php">DokuWiki החדש שלך</a>.';
+$lang['i_failure'] = 'מספר שגיאות אירעו בעת כתיבת קובצי התצורה. יתכן כי יהיה צורך לתקנם ידנית לפני שניתן יהיה להשתמש ב־<a href="doku.php">DokuWiki החדש שלך</a>.';
+$lang['i_policy'] = 'מדיניות ACL התחלתית';
$lang['i_pol0'] = 'ויקי פתוח (קריאה, כתיבה והעלאה לכולם)';
$lang['i_pol1'] = ' ויקי ציבורי (קריאה לכולם, כתיבה והעלאה למשתמשים רשומים)';
$lang['i_pol2'] = 'ויקי סגור (קריאה, כתיבה והעלאה למשתמשים רשומים בלבד)';
-$lang['i_retry'] = 'נסיון נוסף';
-$lang['mu_intro'] = 'כאן תוכל להעלות קבצים מרובים. לחץ על כפתור החיפוש להוסיף אותם למחסנית. לחץ על העלאה לסיום.';
-$lang['mu_gridname'] = 'שם קובץ';
+$lang['i_retry'] = 'ניסיון נוסף';
+$lang['i_license'] = 'נא לבחור את הרישיון שיחול על התוכן שבוויקי שלך:';
+$lang['mu_intro'] = 'דרך כאן ניתן להעלות מספר קבצים בבת אחת. יש ללחוץ על לחצן החיפוש להוסיף אותם למחסנית. ניתן ללחוץ על העלאה לסיום.';
+$lang['mu_gridname'] = 'שם הקובץ';
$lang['mu_gridsize'] = 'גודל';
-$lang['mu_gridstat'] = 'סטאטןס';
+$lang['mu_gridstat'] = 'מצב';
$lang['mu_namespace'] = 'מרחב שם';
$lang['mu_browse'] = 'חיפוש';
$lang['mu_toobig'] = 'גדול מדי';
-$lang['mu_ready'] = 'מוכן להעלאה';
-$lang['mu_done'] = 'סיים';
+$lang['mu_ready'] = 'בהמתנה להעלאה';
+$lang['mu_done'] = 'הסתיים';
$lang['mu_fail'] = 'נכשל';
-$lang['mu_authfail'] = 'תקוף נעילת עריכה פג';
+$lang['mu_authfail'] = 'תוקף ההפעלה פג';
$lang['mu_progress'] = '@PCT@% הועלה';
$lang['mu_filetypes'] = 'סוגי קבצים מורשים';
$lang['mu_info'] = 'הקבצים הועלו';
$lang['mu_lasterr'] = 'שגיאה אחרונה:';
-$lang['recent_global'] = 'אתה צופה כעת בשינויים בתוך מרחב השם <b>%s</b>. אתה יכול גם <a href="%s">לצפות בשינויים האחרונים של כל הוויקי </a>.';
+$lang['recent_global'] = 'נכון לעכשיו מתנהל על ידיך מעקב אחר מרחב השם <b>%s</b>. כמו כן, באפשרותך <a href="%s">לצפות בשינויים האחרונים בוויקי כולו</a>.';
$lang['years'] = 'לפני %d שנים';
$lang['months'] = 'לפני %d חודשים';
$lang['weeks'] = 'לפני %d שבועות';
@@ -249,3 +284,4 @@ $lang['days'] = 'לפני %d ימים';
$lang['hours'] = 'לפני %d שעות';
$lang['minutes'] = 'לפני %d דקות';
$lang['seconds'] = 'לפני %d שניות';
+$lang['wordblock'] = 'השינויים שלך לא נשמרו כיוון שהם מכילים טקסט חסום (ספאם).';
diff --git a/inc/lang/he/mailtext.txt b/inc/lang/he/mailtext.txt
index d7990b2b3..222ee1b6d 100644
--- a/inc/lang/he/mailtext.txt
+++ b/inc/lang/he/mailtext.txt
@@ -1,17 +1,17 @@
-דף בDokuWiki נוסף או שונה. הנה הפרטים:
+דף בDokuWiki נוסף או שונה. להלן הפרטים:
-Date : @DATE@
-Browser : @BROWSER@
-IP-Address : @IPADDRESS@
-Hostname : @HOSTNAME@
-Old Revision: @OLDPAGE@
-New Revision: @NEWPAGE@
-Edit Summary: @SUMMARY@
-User : @USER@
+תאריך : @DATE@
+דפדפן : @BROWSER@
+כתובת ה־IP&rlm; : @IPADDRESS@
+שם המארח : @HOSTNAME@
+המהדורה הישנה: @OLDPAGE@
+המהדורה החדשה: @NEWPAGE@
+תקציר העריכה: @SUMMARY@
+משתמש : @USER@
@DIFF@
--
-דף זה נוצר ע"י DokuWiki ב-
+דף זה נוצר ע״י ה־DokuWiki הזמין בכתובת
@DOKUWIKIURL@
diff --git a/inc/lang/he/password.txt b/inc/lang/he/password.txt
index 29742ebda..745c5cb5c 100644
--- a/inc/lang/he/password.txt
+++ b/inc/lang/he/password.txt
@@ -1,10 +1,10 @@
שלום @FULLNAME@!
-הנה נתוני המשתמש שלך עבור @TITLE@ ב- @DOKUWIKIURL@
+הנה נתוני המשתמש שלך עבור @TITLE@ ב־@DOKUWIKIURL@
-כניסה : @LOGIN@
-סיסמה : @PASSWORD@
+שם כניסה : @LOGIN@
+ססמה : @PASSWORD@
--
-מכתב זה נוצר על ידי דוקוויקי ב-
+מכתב זה נוצר על ידי ה־DokuWiki הזמין בכתובת
@DOKUWIKIURL@ \ No newline at end of file
diff --git a/inc/lang/he/pwconfirm.txt b/inc/lang/he/pwconfirm.txt
index 255195c7f..7dc46c340 100644
--- a/inc/lang/he/pwconfirm.txt
+++ b/inc/lang/he/pwconfirm.txt
@@ -1,13 +1,13 @@
שלום @FULLNAME@!
-מישהו ביקש סיסמה חדשה עבור הכניסה שלך ל-@TITLE@ ב-@DOKUWIKIURL@
+מישהו ביקש ססמה חדשה עבור שם הכניסה שלך לוויקי @TITLE@ בכתובת @DOKUWIKIURL@
-אם לא ביקשת סיסמה חדשה פשוט התעלם מדוא"ל זה.
+אם לא ביקשת ססמה חדשה באפשרותך פשוט להתעלם מהודעת דוא״ל זו.
-כדי לאשר שהבקשה באמת נשלחה על ידך נא השתמש בקישור הבא.
+כדי לאשר שהבקשה באמת נשלחה על ידך עליך השתמש בקישור הבא.
@CONFIRM@
--
-דואר זה נוצר על ידי DokuWiki ב-
+הודעת דוא״ל זו נוצרה על ידי ה־DokuWiki הזמין בכתובת
@DOKUWIKIURL@
diff --git a/inc/lang/he/read.txt b/inc/lang/he/read.txt
index 8e4c177ee..18efc5e03 100644
--- a/inc/lang/he/read.txt
+++ b/inc/lang/he/read.txt
@@ -1,2 +1,2 @@
-דף זה הוא דף לקריאה בלבד. ניתן לצפות בקוד המקור שלו, אבל לא ניתן לערוך אותו. ניתן לפנות אל מנהל הויקי אם לדעתך נפלה טעות.
+דף זה הוא דף לקריאה בלבד. ניתן לצפות בקוד המקור שלו, אך לא ניתן לערוך אותו. ניתן לפנות למנהל הוויקי אם לדעתך נפלה טעות.
diff --git a/inc/lang/he/register.txt b/inc/lang/he/register.txt
index 7225b02fd..c4dfad752 100644
--- a/inc/lang/he/register.txt
+++ b/inc/lang/he/register.txt
@@ -1,3 +1,3 @@
====== הרשמה כמשתמש חדש ======
-יש למלא את כל המידע מטה כדי ליצור חשבון חדש בויקי זה. יש לודא כי מוזנת **כתובת דוא"ל תקפה**- סיסמתך החדשה תשלח לכתובת זו\\ על שם המשתמש להיות [[hdoku>ויקי:שם דף|שם דף]] תקף.
+יש למלא את כל המידע להלן כדי ליצור חשבון חדש בוויקי זה. עליך לוודא כי הזנת **כתובת דוא״ל תקפה**- ססמתך החדשה תשלח לכתובת זו. על שם המשתמש להיות [[hdoku>ויקי:שם דף|שם דף]] תקף.
diff --git a/inc/lang/he/registermail.txt b/inc/lang/he/registermail.txt
index bb64a8158..3edca3fa0 100644
--- a/inc/lang/he/registermail.txt
+++ b/inc/lang/he/registermail.txt
@@ -1,14 +1,14 @@
-משתמש חדש נרשם. הנה הפרטים:
+משתמש חדש נרשם. להלן הפרטים:
שם משתמש : @NEWUSER@
שם מלא : @NEWNAME@
-דוא"ל : @NEWEMAIL@
+דוא״ל : @NEWEMAIL@
תאריך : @DATE@
דפדפן : @BROWSER@
-כתובת רשת : @IPADDRESS@
-שם המחשב : @HOSTNAME@
+כתובת IP&rlm; : @IPADDRESS@
+שם המארח : @HOSTNAME@
--
-דוא"ל זה נוצר על ידי DokuWiki ב-
+הודעת דוא״ל זו נוצרה על ידי ה־DokuWiki הזמין בכתובת
@DOKUWIKIURL@
diff --git a/inc/lang/he/resendpwd.txt b/inc/lang/he/resendpwd.txt
index 47e7749c2..8ca27207b 100644
--- a/inc/lang/he/resendpwd.txt
+++ b/inc/lang/he/resendpwd.txt
@@ -1,4 +1,4 @@
-====== שליחת סיסמה חדשה ======
+====== שליחת ססמה חדשה ======
-יש להזין את שם המשתמש בטופס מטה ולבקש סיסמה חדשה לחשבון שלך בויקי זה. קישור לאימות ישלח לכתובת הדו"ל איתה נרשמת.
+יש להזין את שם המשתמש בטופס מטה ולבקש ססמה חדשה לחשבון שלך בוויקי זה. הקישור לאימות יישלח לכתובת הדוא״ל באמצעותה נרשמת.
diff --git a/inc/lang/he/subscr_digest.txt b/inc/lang/he/subscr_digest.txt
new file mode 100644
index 000000000..af5220229
--- /dev/null
+++ b/inc/lang/he/subscr_digest.txt
@@ -0,0 +1,20 @@
+שלום!
+
+הדף @PAGE@ שבאתר הוויקי @TITLE@ השתנה.
+להלן השינויים:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+המהדורה הישנה: @OLDPAGE@
+המהדורה החדשה: @NEWPAGE@
+
+כדי לבטל את ההתרעות לשינויי העמוד, יש להיכנס לאתר הוויקי בכתובת
+@DOKUWIKIURL@ ואז לבקר באגף
+@SUBSCRIBE@
+ולבטל את המינוי לשינויים בדף ו/או במרחב השם.
+
+--
+הודעת דוא״ל זו נוצרה על ידי ה־DokuWiki שבכתובת
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/inc/lang/he/subscr_single.txt b/inc/lang/he/subscr_single.txt
new file mode 100644
index 000000000..123b186c8
--- /dev/null
+++ b/inc/lang/he/subscr_single.txt
@@ -0,0 +1,22 @@
+שלום!
+
+הדף @PAGE@ באתר הוויקי @TITLE@ השתנה.
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+תאריך : @DATE@
+משתמש : @USER@
+תקציר העריכה: @SUMMARY@
+המהדורה הישנה: @OLDPAGE@
+המהדורה החדשה: @NEWPAGE@
+
+לביטול התרעות בנוגע לעמוד, יש להיכנס לאתר הוויקי בכתובת
+@DOKUWIKIURL@ ואז לבקר בדף
+@NEWPAGE@
+ולבטל את המינוי לקבלת שינויים בדף ו/או במרחב השם.
+
+--
+הודעת דוא״ל זו נוצרה על ידי ה־DokuWiki הזמין בכתובת
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/inc/lang/la/conflict.txt b/inc/lang/la/conflict.txt
index 3d1f66ab6..aebc38b25 100644
--- a/inc/lang/la/conflict.txt
+++ b/inc/lang/la/conflict.txt
@@ -1,5 +1,5 @@
-====== Recentior uersio est ======
+====== Recentior forma est ======
-Recentior uersio est: nam dum hanc paginam recensibas, aliquis paginam mutauit.
+Recentior forma est: nam dum hanc paginam recensibas, aliquis paginam mutauit.
-Discrimina uides et uersionem seruandam eligis. Alia uersio delebitur. \ No newline at end of file
+Discrimina uides et formam seruandam eligis. Alia forma delebitur. \ No newline at end of file
diff --git a/inc/lang/la/editrev.txt b/inc/lang/la/editrev.txt
index bac047d31..6a4d082cc 100644
--- a/inc/lang/la/editrev.txt
+++ b/inc/lang/la/editrev.txt
@@ -1,2 +1,2 @@
-**Vetus uersio a te restituta est** Si hanc uersionem seruabis, nouam creabis.
+**Vetus forma a te restituta est** Si hanc formam seruabis, nouam creabis.
---- \ No newline at end of file
diff --git a/inc/lang/la/index.txt b/inc/lang/la/index.txt
index eb6f06f79..cd65dbb59 100644
--- a/inc/lang/la/index.txt
+++ b/inc/lang/la/index.txt
@@ -1,3 +1,3 @@
====== Forma Situs ======
-Haec forma situs ordinata a(b) [[doku>namespaces|namespaces]]. \ No newline at end of file
+Haec forma situs ordinata [[doku>namespaces|generatim]]. \ No newline at end of file
diff --git a/inc/lang/la/install.html b/inc/lang/la/install.html
new file mode 100644
index 000000000..c06f3ac2c
--- /dev/null
+++ b/inc/lang/la/install.html
@@ -0,0 +1,8 @@
+<p>Haec pagina te adiuuat in <a href="http://dokuwiki.org">Dokuuiki</a> conformando. Maiores res in
+<a href="http://dokuwiki.org/installer">hac pagina</a> sunt.</p>
+
+<p>DokuWiki documenta ut omnes paginas uicis et omnia (ut imagines, indices, ueteres formas) quae ad easdem pertinent colligat. Vt bene operet DokuWiki omnes facultates scrini habere <strong>debes</strong>. Hoc instrumentum facultates eligere non potest, his facultatibus locatori spati interretis quaeras uel FTP intrumento uel aliis rebus (ut cPanel) uteraris.</p>
+
+<p>Hoc intrumentum optiones primae DokuWiki <acronym title="index custodiae ,aditus">ICA</acronym>, quos rectori situs inire et indicem, ut addenda optiones uicis et alia administrare possit uidere licet. Hoc instrumentum non necessarium DokuWiki ut feliciter operet, sed melius administrare adiuuat.</p>
+
+<p>Periti uel qui certa quaesita habet paginas <a href="http://dokuwiki.org/install">rationis conformandum uicem</a> et <a href="http://dokuwiki.org/config">optionum conformationis</a> uidere possunt.</p> \ No newline at end of file
diff --git a/inc/lang/la/lang.php b/inc/lang/la/lang.php
index 49ae67c31..ec80ac4d1 100644
--- a/inc/lang/la/lang.php
+++ b/inc/lang/la/lang.php
@@ -8,6 +8,7 @@
* lines starting with @author
*
* @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesLa.php?view=co
+ * @author Massimiliano Vassalli <vassalli.max@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -19,9 +20,9 @@ $lang['apostrophe'] = '´';
$lang['btn_edit'] = 'Recensere hanc paginam';
$lang['btn_source'] = 'Fontem uidere';
$lang['btn_show'] = 'Ostendere paginam';
-$lang['btn_create'] = 'Facere paginam';
+$lang['btn_create'] = 'Creare paginam';
$lang['btn_search'] = 'Quaerere';
-$lang['btn_save'] = 'Seruare paginam';
+$lang['btn_save'] = 'Seruare';
$lang['btn_preview'] = 'Praeuidere';
$lang['btn_top'] = 'I ad summa';
$lang['btn_newer'] = '<< recentiores';
@@ -39,7 +40,7 @@ $lang['btn_update'] = 'Nouare';
$lang['btn_delete'] = 'Delere';
$lang['btn_back'] = 'Redire';
$lang['btn_backlink'] = 'Nexus ad paginam';
-$lang['btn_backtomedia'] = 'Ad medias redire';
+$lang['btn_backtomedia'] = 'Ad media redire';
$lang['btn_subscribe'] = 'Custodire';
$lang['btn_profile'] = 'Tabellam nouare';
$lang['btn_reset'] = 'Abrogare';
@@ -55,14 +56,14 @@ $lang['newpass'] = 'Tessera noua';
$lang['oldpass'] = 'Tessera uetus:';
$lang['passchk'] = 'Tesseram tuam adfirmare';
$lang['remember'] = 'Tesseram meam sodalitatis memento';
-$lang['fullname'] = 'Nomen tuum uerum:';
+$lang['fullname'] = 'Nomen tuom uerum:';
$lang['email'] = 'Cursus interretialis:';
$lang['register'] = 'Te adscribere';
$lang['profile'] = 'Tabella Sodalis';
-$lang['badlogin'] = 'Error in ineundo est.';
-$lang['minoredit'] = 'Haec est recensio minor';
+$lang['badlogin'] = 'Error in ineundo est, rectum nomen uel tessera cedo.';
+$lang['minoredit'] = 'Recensio minor';
$lang['draftdate'] = 'Propositum seruatur die:';
-$lang['nosecedit'] = 'Pagina interea mutatur, pars rerum exiit.';
+$lang['nosecedit'] = 'Pagina interea mutatur, pars rerum exiit, in loco eius tota pagina reclamata est.';
$lang['regmissing'] = 'Omnes campi complendi sunt.';
$lang['reguexists'] = 'Nomen Sodalis ab aliquo iam elegitur.';
$lang['regsuccess'] = 'Adscriptio feliciter perficitur et tessera cursu interretiali mittitur';
@@ -92,17 +93,17 @@ $lang['txt_upload'] = 'Eligere documenta oneranda:';
$lang['txt_filename'] = 'Onerare (optio):';
$lang['txt_overwrt'] = 'Documento ueteri imponere:';
$lang['lockedby'] = 'Nunc hoc intercludit';
-$lang['lockexpire'] = 'Hoc aperiuit';
+$lang['lockexpire'] = 'Hoc apertum';
$lang['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';
$lang['js']['hidedetails'] = 'Singulas res abscondere';
-$lang['js']['mediatitle'] = 'Optiones connectendi';
-$lang['js']['mediadisplay'] = 'Exemplar connectendi';
+$lang['js']['mediatitle'] = 'Optiones nexorum';
+$lang['js']['mediadisplay'] = 'Genus nexi';
$lang['js']['mediaalign'] = 'Collocatio';
$lang['js']['mediasize'] = 'Amplitudo imaginis';
-$lang['js']['mediatarget'] = 'Signum connectere';
+$lang['js']['mediatarget'] = 'Cui nexum est';
$lang['js']['mediaclose'] = 'Claudere';
$lang['js']['mediainsert'] = 'Insere';
$lang['js']['mediadisplayimg'] = 'Imaginem ostendere';
@@ -122,7 +123,7 @@ $lang['js']['medianoalign'] = 'Collocationem remouere';
$lang['js']['nosmblinks'] = 'Windows nexa solum cum Microsoft Internet Explorer ostendi possunt.
Adhuc transcribere nexum potes.';
$lang['js']['linkwiz'] = 'Connectendi ductor';
-$lang['js']['linkto'] = 'Nexum:';
+$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 ';
@@ -140,13 +141,13 @@ $lang['uploadsize'] = 'Documentum onerandum ponderosius est. (Maxime
$lang['deletesucc'] = 'Documentum "%s" deletum est.';
$lang['deletefail'] = '"%s" non deletur: uide facultates.';
$lang['mediainuse'] = 'documentum "%s" non deletur, nam aliquis hoc utitur.';
-$lang['namespaces'] = 'Spatium nominis';
+$lang['namespaces'] = 'Genus';
$lang['mediafiles'] = 'Documentum liberum in:';
$lang['accessdenied'] = 'Non uidere documentum potes.';
$lang['mediausage'] = 'Hac forma uteris ut documentum referas:';
$lang['mediaview'] = 'Vide documentum primigenium';
$lang['mediaroot'] = 'scrinium';
-$lang['mediaupload'] = 'Spatium nominis hic oneras. Si nouom spatium nominis creare uis, ante "Onerare ut" nomen documenti diuisum a duabus punctis ponas.';
+$lang['mediaupload'] = 'Hic genus oneras. Si nouom genus creare uis, ante "Onerare ut" nomen documenti diuisum a duabus punctis ponas.';
$lang['mediaextchange'] = 'Genus documenti mutatum a(b) ".%s" ad ".%s"!';
$lang['reference'] = 'Referre:';
$lang['ref_inuse'] = 'Documentum non deleri potest, nam in his paginis apertum est:';
@@ -170,10 +171,10 @@ $lang['restored'] = 'Recensio uetus restituta';
$lang['external_edit'] = 'Externe recensere';
$lang['summary'] = 'Indicem recensere';
$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> necessarium est.';
-$lang['download'] = 'Snippet cape';
+$lang['download'] = 'Snippet capere';
$lang['mail_newpage'] = 'Pagina addita:';
$lang['mail_changed'] = 'Pagina mutata:';
-$lang['mail_subscribe_list'] = 'Pagina in spatio nominis mutata:';
+$lang['mail_subscribe_list'] = 'Paginae in genere mutatae:';
$lang['mail_new_user'] = 'Nouos Sodalis:';
$lang['mail_upload'] = 'Documentum oneratum:';
$lang['qb_bold'] = 'Litterae pingues';
@@ -198,9 +199,9 @@ $lang['qb_ol'] = 'Index ordinatus rerum';
$lang['qb_ul'] = 'Index non ordinatus rerum';
$lang['qb_media'] = 'Imagines et documenta addere';
$lang['qb_sig'] = 'Subscriptio tua cum indicatione temporis';
-$lang['qb_smileys'] = 'Facies';
+$lang['qb_smileys'] = 'Pupuli';
$lang['qb_chars'] = 'Signa singularia';
-$lang['upperns'] = 'I ad anterius spatium nominis';
+$lang['upperns'] = 'I ad anterius genus';
$lang['admin_register'] = 'Nouom Sodalem creare';
$lang['metaedit'] = 'Res codicis mutare';
$lang['metasaveerr'] = 'Res codicis non scribitur.';
@@ -223,7 +224,7 @@ $lang['subscr_unsubscribe_success'] = 'A subscriptione %s deletur quod %s';
$lang['subscr_unsubscribe_error'] = 'Error delendi %s a subscriptione quod %s';
$lang['subscr_already_subscribed'] = '%s iam subscriptus\a est in %s';
$lang['subscr_not_subscribed'] = '%s non subscriptus\a est in %n';
-$lang['subscr_m_not_subscribed'] = 'Non hanc paginam uel spatium nominis subscribere potes.';
+$lang['subscr_m_not_subscribed'] = 'Non hanc paginam uel genus subscribere potes.';
$lang['subscr_m_new_header'] = 'Subscriptionem addere';
$lang['subscr_m_current_header'] = 'haec subscriptio:';
$lang['subscr_m_unsubscribe'] = 'Delere';
@@ -237,12 +238,12 @@ $lang['authtempfail'] = 'Confirmare non potes. Rectorem conuenis.';
$lang['i_chooselang'] = 'Linguam eligere';
$lang['i_installer'] = 'Docuuicis creator';
$lang['i_wikiname'] = 'Nomen Vicis';
-$lang['i_enableacl'] = 'AAA aptum facias (consulatum est)';
+$lang['i_enableacl'] = 'ICA aptum facias (consulatum est)';
$lang['i_superuser'] = 'Magister\stra';
$lang['i_problems'] = 'Creator hos errores habes. Continuare potes postquam omnia soluentur.';
-$lang['i_modified'] = 'Hoc scriptum solum cum noua uersione Dokuuicis est. Hoc rursum capere in pagina, in qua haec machina capta est, potes aut i ad <a href="http://dokuwiki.org/install">Dokuuicis installation instructions</a>';
+$lang['i_modified'] = 'Hoc scriptum solum cum noua forma Dokuuicis est. Hoc rursum capere in pagina, in qua haec machina capta est, potes aut i ad <a href="http://dokuwiki.org/install">Dokuuicis installation instructions</a>';
$lang['i_funcna'] = 'PHP functio <code>%s</code> inepta est.';
-$lang['i_phpver'] = 'Versio tua PHP <code>%s</code> minor quam illa necessaria <code>%s</code>.';
+$lang['i_phpver'] = 'Forma tua PHP <code>%s</code> minor quam illa necessaria <code>%s</code>.';
$lang['i_permfail'] = '<code>%s</code> non a uice scribitur. Facultates inspicere.';
$lang['i_confexists'] = '<code>%s</code> iam est.';
$lang['i_writeerr'] = '<code>%s</code> non creari potest. Manu illum creas.';
@@ -250,7 +251,7 @@ $lang['i_badhash'] = 'Ignotum uel mutatum dokuwiki.php (<code>%s</co
$lang['i_badval'] = '<code>%s</code> non legitimum uel uacuom';
$lang['i_success'] = 'Administratio feliciter perficitur. Delere install.php documentum potes. I ad <a href="doku.php">hanc paginam</a> ut continues.';
$lang['i_failure'] = 'Aliqui errores dum documenta administrantur sunt. Manu onerare omnes potes priusquam <a href="doku.php">tuo nouo uice</a> uteris.';
-$lang['i_policy'] = 'AAA ratio prima';
+$lang['i_policy'] = 'ICA ratio prima';
$lang['i_pol0'] = 'Vicem aperire (omnes legere, scribere, onerare possunt)';
$lang['i_pol1'] = 'Publicus uicis (omnes legere, Sodales scribere et onerare possunt)';
$lang['i_pol2'] = 'Clausus uicis (Soli Sodales legere scribere et onerare poccunt)';
@@ -260,7 +261,7 @@ $lang['mu_intro'] = 'Plura documenta uno tempore onerare potes.';
$lang['mu_gridname'] = 'Documenti nomen';
$lang['mu_gridsize'] = 'Pondus';
$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Spatium nominis';
+$lang['mu_namespace'] = 'Genus';
$lang['mu_browse'] = 'Euoluere';
$lang['mu_toobig'] = 'Ponderosius';
$lang['mu_ready'] = 'Aptus ad onerandum';
@@ -271,7 +272,7 @@ $lang['mu_progress'] = '@PCT@% oneratum';
$lang['mu_filetypes'] = 'Genera documenti apta facere';
$lang['mu_info'] = 'Documenta onerare';
$lang['mu_lasterr'] = 'Extremus error:';
-$lang['recent_global'] = 'Mutatione in hoc spatio nominis uides. Recentiores mutationes quoque uidere <a href="%s">potes</a>';
+$lang['recent_global'] = 'Mutatione in hoc genere uides. Recentiores mutationes quoque uidere <a href="%s">potes</a>';
$lang['years'] = 'ab annis %d';
$lang['months'] = 'a mensibus %d';
$lang['weeks'] = 'a septimanis %d';
diff --git a/inc/lang/la/norev.txt b/inc/lang/la/norev.txt
index 872eb8070..19b60fe15 100644
--- a/inc/lang/la/norev.txt
+++ b/inc/lang/la/norev.txt
@@ -1,3 +1,3 @@
-====== Versio non reperta ======
+====== Forma non reperta ======
-Haec uersio non reperta est. Aliam uersionem quaeris. \ No newline at end of file
+Haec forma non reperta est. Aliam formam quaeris. \ No newline at end of file
diff --git a/inc/lang/la/showrev.txt b/inc/lang/la/showrev.txt
index c5019d798..b95e68265 100644
--- a/inc/lang/la/showrev.txt
+++ b/inc/lang/la/showrev.txt
@@ -1,2 +1,2 @@
-**Haec uetus uersio documenti est!**
+**Haec uetus forma documenti est!**
---- \ No newline at end of file
diff --git a/inc/lang/la/subscr_digest.txt b/inc/lang/la/subscr_digest.txt
index a64a2c61b..629213359 100644
--- a/inc/lang/la/subscr_digest.txt
+++ b/inc/lang/la/subscr_digest.txt
@@ -13,7 +13,7 @@ Noua recensio: @NEWPAGE@
Ut paginae adnotationes deleas, in uicem ineas in
@DOKUWIKIURL@, deinde uideas
@NEWPAGE@
-et paginarum spatiorum nominis optiones mutasa.
+et paginarum generum optiones mutes.
--
Hic cursus a uicis generatus
diff --git a/inc/lang/la/subscr_form.txt b/inc/lang/la/subscr_form.txt
index 82b0a692e..23000b31e 100644
--- a/inc/lang/la/subscr_form.txt
+++ b/inc/lang/la/subscr_form.txt
@@ -1,3 +1,3 @@
====== Inscriptionis Administratio ======
-In hac pagina inscriptiones paginae et spatio nominis sunt. \ No newline at end of file
+In hac pagina inscriptiones huius paginae et generis sunt. \ No newline at end of file
diff --git a/inc/lang/la/subscr_list.txt b/inc/lang/la/subscr_list.txt
index 87ce97215..e6ff8d89d 100644
--- a/inc/lang/la/subscr_list.txt
+++ b/inc/lang/la/subscr_list.txt
@@ -10,7 +10,7 @@ Hae mutationes sunt:
Ut adnotationes deleas, preme hic
@DOKUWIKIURL@ then visit
@SUBSCRIBE@
-et paginarum spatiorum nominis mutationes tollis.
+et paginarum et\aut generum mutationes tollis.
--
Hic cursus generatus a(b)
diff --git a/inc/lang/la/subscr_single.txt b/inc/lang/la/subscr_single.txt
index e21af04bb..7839791ea 100644
--- a/inc/lang/la/subscr_single.txt
+++ b/inc/lang/la/subscr_single.txt
@@ -16,7 +16,7 @@ Noua recensio: @NEWPAGE@
Ut paginae adnotationes deleas, in uicem ineas in
@DOKUWIKIURL@, deinde uideas
@NEWPAGE@
-et paginarum spatiorum nominis optiones mutasa.
+et paginarum et\aut generum optiones mutasa.
--
Hic cursus a uicis generatus
diff --git a/inc/lang/ru/conflict.txt b/inc/lang/ru/conflict.txt
index f1ac60bd4..6c5e33dce 100644
--- a/inc/lang/ru/conflict.txt
+++ b/inc/lang/ru/conflict.txt
@@ -2,4 +2,4 @@
Существует более новая версия документа, который вы редактировали. Такое случается, когда другой пользователь изменил документ, пока вы делали то же самое.
-Внимательно изучите различия, приведенные ниже и решите, какую версию оставить. Если вы выберете ''Сохранить'', то ваша версия будет сохранена. Нажав ''Отменить',' вы оставите текущую версию.
+Внимательно изучите различия, приведенные ниже, и решите, какую версию оставить. Если вы выберете «Сохранить», то ваша версия будет сохранена. Нажав «Отменить», вы оставите текущую версию.
diff --git a/inc/lang/ru/draft.txt b/inc/lang/ru/draft.txt
index bbd2e5913..cb35f72b6 100644
--- a/inc/lang/ru/draft.txt
+++ b/inc/lang/ru/draft.txt
@@ -1,6 +1,6 @@
====== Найден черновик ======
-Последний раз редактирование этой страницы не было корректно завершено. Во время вашей работы был автоматически сохранён черновик, который вы теперь можете восстановить и продолжить прерванную правку. Ниже вы видите автоматически сохраненную версию.
+Последний раз редактирование этой страницы не было корректно завершено. Во время вашей работы был автоматически сохранён черновик, который вы теперь можете восстановить и продолжить прерванную правку. Ниже вы видите автоматически сохранённую версию.
Пожалуйста, решите, хотите ли вы //восстановить// потерянную версию, //удалить// черновик, или //отменить// редактирование.
diff --git a/inc/lang/ru/edit.txt b/inc/lang/ru/edit.txt
index 6398e8e83..aac399d7c 100644
--- a/inc/lang/ru/edit.txt
+++ b/inc/lang/ru/edit.txt
@@ -1,2 +1,2 @@
-Отредактируйте страницу и нажмите ''Сохранить''. Прочтите [[wiki:syntax]] для ознакомления с синтаксисом вики. Пожалуйста, редактируйте только в том случае, если планируете **улучшить** содержимое. Если вы просто хотите потестировать что-либо, воспользуйтесь специальной страницей: [[playground:playground]].
+Отредактируйте страницу и нажмите «Сохранить». Прочтите [[wiki:syntax|справочную страницу]] для ознакомления с синтаксисом вики. Пожалуйста, редактируйте только в том случае, если планируете **улучшить** содержимое. Если вы просто хотите потестировать что-либо, воспользуйтесь специальной страницей: [[playground:playground]].
diff --git a/inc/lang/ru/editrev.txt b/inc/lang/ru/editrev.txt
index db843ec1c..97b799a70 100644
--- a/inc/lang/ru/editrev.txt
+++ b/inc/lang/ru/editrev.txt
@@ -1,2 +1,2 @@
-**Вы загрузили старую ревизию документа!** Сохранив её, вы создадите новую текущую версию с этим содержимым.
+**Вы загрузили старую ревизию документа.** Сохранив её, вы создадите новую текущую версию с этим содержимым.
----
diff --git a/inc/lang/ru/install.html b/inc/lang/ru/install.html
index da0c5e239..b830b06c0 100644
--- a/inc/lang/ru/install.html
+++ b/inc/lang/ru/install.html
@@ -1,6 +1,6 @@
-<p>Эта страница предназначена помочь в первоначальной установке и конфигурации «<a href="http://www.dokuwiki.org">ДокуВики</a>». Дополнительная информация о программе установки доступна на её <a href="http://www.dokuwiki.org/installer">странице документации</a>.</p>
+<p>Эта страница предназначена помочь в первоначальной установке и конфигурации «<a href="http://www.dokuwiki.org/">ДокуВики</a>». Дополнительная информация о программе установки доступна на её <a href="http://www.dokuwiki.org/installer">странице документации</a>.</p>
-<p>«ДокуВики» использует обычные файлы для хранения страниц и дополнительной информации (например, изображений, поискового индекса, предыдущих версий страницы, и т. д.). Для успешной работы «ДокуВики» <strong>необходим</strong> доступ на запись к директориям с этими файлами. Данная программа установки не может самостоятельно изменять системные права доступа к директориям. Обычно это делается напрямую из командной строки (shell), или, если вы используете удалённый хостинг, через FTP или панель управления вашего хостинга (например, cPanel).</p>
+<p>«ДокуВики» использует обычные файлы для хранения страниц и дополнительной информации (например, изображений, поискового индекса, предыдущих версий страницы, и т. д.). Для успешной работы «ДокуВики» <strong>необходим</strong> доступ на запись к директориям с этими файлами. Данная программа установки не может самостоятельно изменять системные права доступа к директориям. Обычно это делается напрямую из командной строки (shell), или, если вы используете удалённый хостинг, через FTP или панель управления своего хостинга (например, cPanel).</p>
<p>Программа установки включит использование списков контроля доступа (<acronym title="access control list">ACL</acronym>) в вашей «ДокуВики». Это позволит администратору, после авторизации в «ДокуВики», использовать специальное меню для установки плагинов, управления пользователями и доступом к страницам вики, а также для настройки конфигурационных параметров. Списки контроля доступа не обязательны для работы «ДокуВики», однако они позволяют упростить управление вашей «ДокуВики».</p>
diff --git a/inc/lang/ru/lang.php b/inc/lang/ru/lang.php
index 88692ae93..2968d72bd 100644
--- a/inc/lang/ru/lang.php
+++ b/inc/lang/ru/lang.php
@@ -76,7 +76,7 @@ $lang['regmissing'] = 'Извините, вам следует зап
$lang['reguexists'] = 'Извините, пользователь с таким логином уже существует.';
$lang['regsuccess'] = 'Пользователь создан, пароль выслан на адрес электронной почты.';
$lang['regsuccess2'] = 'Пользователь создан.';
-$lang['regmailfail'] = 'Похоже, проблема с отправкой пароля по почте. Пожалуйста, сообщите администратору.';
+$lang['regmailfail'] = 'Похоже есть проблема с отправкой пароля по почте. Пожалуйста, сообщите об этом администратору.';
$lang['regbadmail'] = 'Данный вами адрес электронной почты выглядит неправильным. Если вы считаете это ошибкой, сообщите администратору.';
$lang['regbadpass'] = 'Два введённых пароля не идентичны. Пожалуйста, попробуйте ещё раз.';
$lang['regpwmail'] = 'Ваш пароль для системы «ДокуВики»';
@@ -94,7 +94,7 @@ $lang['resendpwdbadauth'] = 'Извините, неверный код ав
$lang['resendpwdconfirm'] = 'Ссылка для подтверждения пароля была выслана по электронной почте. ';
$lang['resendpwdsuccess'] = 'Ваш новый пароль был выслан по электронной почте.';
$lang['license'] = 'За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:';
-$lang['licenseok'] = 'Примечание: редактируя эту страницу, вы соглашаетесь на использование вашего вклада на условиях следующей лицензии:';
+$lang['licenseok'] = 'Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии:';
$lang['searchmedia'] = 'Поиск по имени файла:';
$lang['searchmedia_in'] = 'Поиск в %s';
$lang['txt_upload'] = 'Выберите файл для загрузки';
@@ -103,8 +103,7 @@ $lang['txt_overwrt'] = 'Перезаписать существующ
$lang['lockedby'] = 'В данный момент заблокирован';
$lang['lockexpire'] = 'Блокировка истекает в';
$lang['willexpire'] = 'Ваша блокировка редактирования этой страницы истекает в течение минуты.\nЧтобы избежать конфликтов и сбросить таймер блокировки, нажмите кнопку просмотра.';
-$lang['js']['notsavedyet'] = 'Несохранённые изменения будут потеряны.
-Вы действительно хотите продолжить?';
+$lang['js']['notsavedyet'] = 'Несохранённые изменения будут потеряны. Вы действительно хотите продолжить?';
$lang['js']['searchmedia'] = 'Поиск файлов';
$lang['js']['keepopen'] = 'Не закрывать окно после выбора';
$lang['js']['hidedetails'] = 'Скрыть детали';
@@ -112,7 +111,7 @@ $lang['js']['mediatitle'] = 'Настройки ссылок';
$lang['js']['mediadisplay'] = 'Тип ссылки';
$lang['js']['mediaalign'] = 'Выравнивание';
$lang['js']['mediasize'] = 'Размер изображения';
-$lang['js']['mediatarget'] = 'target ссылки';
+$lang['js']['mediatarget'] = 'Значение target ссылки';
$lang['js']['mediaclose'] = 'Закрыть';
$lang['js']['mediainsert'] = 'Вставить';
$lang['js']['mediadisplayimg'] = 'Показывать изображение.';
@@ -129,8 +128,7 @@ $lang['js']['medialeft'] = 'Выровнять изображение по
$lang['js']['mediaright'] = 'Выровнять изображение по правому краю.';
$lang['js']['mediacenter'] = 'Выровнять изображение по центру.';
$lang['js']['medianoalign'] = 'Не выравнивать.';
-$lang['js']['nosmblinks'] = 'Ссылка на сетевые каталоги Windows работает только из Интернет Эксплорера
-Но вы можете скопировать ссылку.';
+$lang['js']['nosmblinks'] = 'Ссылка на сетевые каталоги Windows работает только из Интернет Эксплорера. Но вы можете скопировать ссылку.';
$lang['js']['linkwiz'] = 'Мастер ссылок';
$lang['js']['linkto'] = 'Ссылка на:';
$lang['js']['del_confirm'] = 'Вы на самом деле желаете удалить выбранное?';
@@ -149,18 +147,18 @@ $lang['uploadxss'] = 'Загрузка заблокирована п
$lang['uploadsize'] = 'Загруженный файл был слишком большой. (макс. %s)';
$lang['deletesucc'] = 'Файл "%s" был удалён.';
$lang['deletefail'] = 'Невозможно удалить файл "%s". Проверьте права доступа к файлу.';
-$lang['mediainuse'] = 'Файл "%s" не был удалён - файл всё ещё используется.';
+$lang['mediainuse'] = 'Файл "%s" не был удалён — файл всё ещё используется.';
$lang['namespaces'] = 'Пространства имён';
$lang['mediafiles'] = 'Доступные файлы';
$lang['accessdenied'] = 'Вы не можете просмотреть эту страницу.';
$lang['mediausage'] = 'Для ссылки на этот файл используйте следующий синтаксис:';
$lang['mediaview'] = 'Посмотреть исходный файл';
$lang['mediaroot'] = 'корень';
-$lang['mediaupload'] = 'Здесь можно загрузить файл в текущий каталог («пространство имен»). Чтобы создать подкаталоги, добавьте их к началу имени файла («Загрузить как»). Имена подкаталогов разделяются двоеточиями. ';
+$lang['mediaupload'] = 'Здесь можно загрузить файл в текущий каталог («пространство имён»). Чтобы создать подкаталоги, добавьте их к началу имени файла («Загрузить как»). Имена подкаталогов разделяются двоеточиями. ';
$lang['mediaextchange'] = 'Расширение изменилось: с .%s на .%s!';
$lang['reference'] = 'Ссылки для';
-$lang['ref_inuse'] = 'Этот файл не может быть удалён, так как он используется следующими страницами:';
-$lang['ref_hidden'] = 'Некоторые ссылки находятся на страницах, на чтение которых у вас нет прав';
+$lang['ref_inuse'] = 'Этот файл не может быть удалён, так как он используется на следующих страницах:';
+$lang['ref_hidden'] = 'Некоторые ссылки находятся на страницах, на чтение которых у вас нет прав доступа';
$lang['hits'] = 'соответствий';
$lang['quickhits'] = 'Соответствия в названиях страниц';
$lang['toc'] = 'Содержание';
@@ -183,7 +181,7 @@ $lang['noflash'] = 'Для просмотра этого соде
$lang['download'] = 'Скачать код';
$lang['mail_newpage'] = 'страница добавлена:';
$lang['mail_changed'] = 'страница изменена:';
-$lang['mail_subscribe_list'] = 'изменились страницы в пространстве имен:';
+$lang['mail_subscribe_list'] = 'изменились страницы в пространстве имён:';
$lang['mail_new_user'] = 'новый пользователь:';
$lang['mail_upload'] = 'файл закачан:';
$lang['qb_bold'] = 'Полужирный';
@@ -210,7 +208,7 @@ $lang['qb_media'] = 'Добавить изображения или
$lang['qb_sig'] = 'Вставить подпись';
$lang['qb_smileys'] = 'Смайлики';
$lang['qb_chars'] = 'Специальные символы';
-$lang['upperns'] = 'Перейти в родительское пространство имен';
+$lang['upperns'] = 'Перейти в родительское пространство имён';
$lang['admin_register'] = 'Добавить пользователя';
$lang['metaedit'] = 'Править метаданные';
$lang['metasaveerr'] = 'Ошибка записи метаданных';
@@ -233,7 +231,7 @@ $lang['subscr_unsubscribe_success'] = 'Удалён %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_not_subscribed'] = 'Вы не подписаны на текущую страницу или пространство имён.';
$lang['subscr_m_new_header'] = 'Добавить подписку';
$lang['subscr_m_current_header'] = 'Текущие подписки';
$lang['subscr_m_unsubscribe'] = 'Отменить подписку';
@@ -242,8 +240,8 @@ $lang['subscr_m_receive'] = 'Получить';
$lang['subscr_style_every'] = 'уведомлять о каждом изменении';
$lang['subscr_style_digest'] = 'сводка изменений по каждой странице';
$lang['subscr_style_list'] = 'перечислять изменившиеся страницы с прошлого уведомления';
-$lang['authmodfailed'] = 'Неправильная конфигурация аутентификации пользователя. Пожалуйста, сообщите об этом вашему администратору вики.';
-$lang['authtempfail'] = 'Аутентификация пользователей временно недоступна. Если проблема продолжается какое-то время, пожалуйста, сообщите об этом вашему администратору вики.';
+$lang['authmodfailed'] = 'Неправильная конфигурация аутентификации пользователя. Пожалуйста, сообщите об этом своему администратору вики.';
+$lang['authtempfail'] = 'Аутентификация пользователей временно недоступна. Если проблема продолжается какое-то время, пожалуйста, сообщите об этом своему администратору вики.';
$lang['i_chooselang'] = 'Выберите свой язык/Choose your language';
$lang['i_installer'] = 'Установка «ДокуВики»';
$lang['i_wikiname'] = 'Название вики';
@@ -258,18 +256,18 @@ $lang['i_phpver'] = 'Ваша версия PHP (<code>%s</code>) н
$lang['i_permfail'] = '<code>%s</code> недоступна для записи «ДокуВики». Вам необходимо исправить системные права доступа для этой директории!';
$lang['i_confexists'] = '<code>%s</code> уже существует';
$lang['i_writeerr'] = 'Не удалось создать <code>%s</code>. Вам необходимо проверить системные права доступа к файлу/директориям и создать файл вручную. ';
-$lang['i_badhash'] = 'dokuwiki.php не распознана или изменена (хэш=<code>%s</code>)';
+$lang['i_badhash'] = 'dokuwiki.php не распознан или изменён (хэш=<code>%s</code>)';
$lang['i_badval'] = '<code>%s</code> — недопустимое или пустое значение';
$lang['i_success'] = 'Конфигурация прошла успешно. Теперь вы можете удалить файл install.php. Переходите к
- <a href="doku.php">вашей новой «ДокуВики»</a>.';
-$lang['i_failure'] = 'При записи в файлы конфигурации были обнаружены ошибки. Возможно, вам придется исправить их вручную, прежде чем вы сможете использовать <a href="doku.php">вашу новую «ДокуВики»</a>.';
+ <a href="doku.php">своей новой «ДокуВики»</a>.';
+$lang['i_failure'] = 'При записи в файлы конфигурации были обнаружены ошибки. Возможно, вам придётся исправить их вручную, прежде чем вы сможете использовать <a href="doku.php">свою новую «ДокуВики»</a>.';
$lang['i_policy'] = 'Исходная политика прав доступа';
$lang['i_pol0'] = 'Открытая вики (чтение, запись, закачка файлов для всех)';
$lang['i_pol1'] = 'Общедоступная вики (чтение для всех, запись и загрузка файлов для зарегистрированных пользователей)';
$lang['i_pol2'] = 'Закрытая вики (чтение, запись и загрузка файлов только для зарегистрированных пользователей)';
$lang['i_retry'] = 'Повторить попытку';
-$lang['i_license'] = 'Пожалуйста, выберите тип лицензии для вашей вики:';
-$lang['mu_intro'] = 'Здесь вы можете загрузить несколько файлов сразу. Кликните на «обзор», чтобы добавить их в список. Нажмите «загрузить» когда будете готовы.';
+$lang['i_license'] = 'Пожалуйста, выберите тип лицензии для своей вики:';
+$lang['mu_intro'] = 'Здесь вы можете загрузить несколько файлов сразу. Кликните на «обзор», чтобы добавить их в список. Нажмите «загрузить», когда будете готовы.';
$lang['mu_gridname'] = 'Имя файла';
$lang['mu_gridsize'] = 'Размер';
$lang['mu_gridstat'] = 'Статус';
@@ -284,7 +282,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['recent_global'] = 'Вы просматриваете изменения в пространстве имён <b>%s</b>. Вы можете также <a href="%s">просмотреть недавние изменения во всей вики</a>.';
$lang['years'] = '%d лет назад';
$lang['months'] = '%d месяц(ев) назад';
$lang['weeks'] = '%d недель назад';
diff --git a/inc/lang/ru/norev.txt b/inc/lang/ru/norev.txt
index db36a0ddd..388d6149d 100644
--- a/inc/lang/ru/norev.txt
+++ b/inc/lang/ru/norev.txt
@@ -1,4 +1,4 @@
====== Такой версии не существует ======
-Указанная версия страницы не существует. Нажмите на кнопку ''История страницы'', чтобы получить список доступных предыдущих версий этого документа.
+Указанная версия страницы не существует. Нажмите на кнопку «История страницы», чтобы получить список доступных предыдущих версий этого документа.
diff --git a/inc/lang/ru/password.txt b/inc/lang/ru/password.txt
index af6a7d14d..91117ca56 100644
--- a/inc/lang/ru/password.txt
+++ b/inc/lang/ru/password.txt
@@ -1,9 +1,10 @@
-Здравствуйте, @FULLNAME@!
+Здравствуйте, @FULLNAME@.
Ваши данные для @TITLE@ (@DOKUWIKIURL@)
-Имя пользователя : @LOGIN@
-Пароль : @PASSWORD@
+Имя пользователя: @LOGIN@
+
+Пароль: @PASSWORD@
--
Это письмо было сгенерировано «ДокуВики» по адресу
diff --git a/inc/lang/ru/preview.txt b/inc/lang/ru/preview.txt
index 2bc383eb2..401827607 100644
--- a/inc/lang/ru/preview.txt
+++ b/inc/lang/ru/preview.txt
@@ -1,4 +1,4 @@
====== Просмотр ======
-Здесь показано, как ваш текст будет выглядеть. Внимание: текст ещё **не сохранён!**
+Здесь показано, как ваш текст будет выглядеть. Внимание: текст ещё **не сохранён.**
diff --git a/inc/lang/ru/pwconfirm.txt b/inc/lang/ru/pwconfirm.txt
index 3e2331269..9c27af752 100644
--- a/inc/lang/ru/pwconfirm.txt
+++ b/inc/lang/ru/pwconfirm.txt
@@ -1,4 +1,4 @@
-Здравствуйте, @FULLNAME@!
+Здравствуйте, @FULLNAME@.
Кто-то запросил новый пароль для входа в @TITLE@ по адресу @DOKUWIKIURL@
diff --git a/inc/lang/ru/revisions.txt b/inc/lang/ru/revisions.txt
index 06022323f..55072cd8a 100644
--- a/inc/lang/ru/revisions.txt
+++ b/inc/lang/ru/revisions.txt
@@ -1,3 +1,3 @@
====== История страницы ======
-Перед вами — история правок текущего документа. Чтобы вернуться к одной из предыдущих версий, выберите нужную, нажмите ''Править страницу'' и сохраните.
+Перед вами — история правок текущего документа. Чтобы вернуться к одной из предыдущих версий, выберите нужную, нажмите «Править страницу» и сохраните.
diff --git a/inc/lang/ru/searchpage.txt b/inc/lang/ru/searchpage.txt
index 608220495..04feb21cd 100644
--- a/inc/lang/ru/searchpage.txt
+++ b/inc/lang/ru/searchpage.txt
@@ -1,5 +1,5 @@
====== Поиск ======
-Перед вами результаты поиска. Если вы не нашли то, что искали, вы можете создать новую страницу с именем, совпадающим с запросом. Чтобы сделать это, просто нажмите на кнопку ''Создать страницу''.
+Перед вами результаты поиска. Если вы не нашли то, что искали, вы можете создать новую страницу с именем, совпадающим с запросом. Чтобы сделать это, просто нажмите на кнопку «Создать страницу».
===== Результаты ===== \ No newline at end of file
diff --git a/inc/lang/ru/showrev.txt b/inc/lang/ru/showrev.txt
index b3f3852eb..596815870 100644
--- a/inc/lang/ru/showrev.txt
+++ b/inc/lang/ru/showrev.txt
@@ -1,2 +1,2 @@
-**Это старая версия документа!**
+**Это старая версия документа.**
----
diff --git a/inc/lang/ru/subscr_digest.txt b/inc/lang/ru/subscr_digest.txt
index 3d1d35d30..41774a4e9 100644
--- a/inc/lang/ru/subscr_digest.txt
+++ b/inc/lang/ru/subscr_digest.txt
@@ -1,4 +1,4 @@
-Привет!
+Привет.
Страница @PAGE@ в вики @TITLE@ изменилась.
Список изменений:
diff --git a/inc/lang/ru/subscr_list.txt b/inc/lang/ru/subscr_list.txt
index 9d0eb10e0..df5c2aa54 100644
--- a/inc/lang/ru/subscr_list.txt
+++ b/inc/lang/ru/subscr_list.txt
@@ -1,6 +1,7 @@
-Привет!
-Страницы в пространстве имен @PAGE@ в вики @TITLE@ были изменены.
+Привет.
+
+Страницы в пространстве имён @PAGE@ в вики @TITLE@ были изменены.
Список изменившихся страниц:
--------------------------------------------------------
@@ -10,7 +11,7 @@
Чтобы отписаться от уведомлений об изменениях, войдите в вики
@DOKUWIKIURL@ в раздел
@SUBSCRIBE@
-и отмените подписку на страницу и/или пространство имен.
+и отмените подписку на страницу и/или пространство имён.
--
Это письмо создано «ДокуВики» с сайта
diff --git a/inc/lang/ru/subscr_single.txt b/inc/lang/ru/subscr_single.txt
index ed8ead4cd..0e67d8f59 100644
--- a/inc/lang/ru/subscr_single.txt
+++ b/inc/lang/ru/subscr_single.txt
@@ -1,4 +1,5 @@
-Привет!
+Привет.
+
Страница @PAGE@ в вики @TITLE@ изменилась.
Список изменений:
@@ -7,8 +8,9 @@
@DIFF@
--------------------------------------------------------
-Дата : @DATE@
-Автор : @USER@
+Дата: @DATE@
+Автор: @USER@
+
Примечание: @SUMMARY@
Старая версия: @OLDPAGE@
Новая версия: @NEWPAGE@
@@ -16,7 +18,7 @@
Чтобы отписаться от уведомлений об изменениях, войдите в вики
@DOKUWIKIURL@ в раздел
@SUBSCRIBE@
-и отмените подписку на страницу и/или пространство имен.
+и отмените подписку на страницу и/или пространство имён.
--
Это письмо создано «ДокуВики» с сайта
diff --git a/inc/lang/sl/admin.txt b/inc/lang/sl/admin.txt
new file mode 100644
index 000000000..fc78273ac
--- /dev/null
+++ b/inc/lang/sl/admin.txt
@@ -0,0 +1,3 @@
+===== Administracija =====
+
+Spodaj lahko vidite seznam administrativnih opravil v DokuWikiju. \ No newline at end of file
diff --git a/inc/lang/sl/adminplugins.txt b/inc/lang/sl/adminplugins.txt
new file mode 100644
index 000000000..9438b4759
--- /dev/null
+++ b/inc/lang/sl/adminplugins.txt
@@ -0,0 +1 @@
+===== Dodatni vtičniki ===== \ No newline at end of file
diff --git a/inc/lang/sl/draft.txt b/inc/lang/sl/draft.txt
new file mode 100644
index 000000000..9fea86fd1
--- /dev/null
+++ b/inc/lang/sl/draft.txt
@@ -0,0 +1,5 @@
+=====Najden je bil osnutek strani=====
+
+Vaša zadnja seja na tej strani ni bila pravilno zaključena. DokuWiki je samodejno shranil osnutek med vašim delom, katerega sedaj lahko nadaljujete. Spodaj lahko vidite podatke, ki so bili samodejno shranjeni v vaši zadnji seji.
+
+Prosimo, odločite se ali boste //obnovili// vašo sejo, //izbrisali// samodejno shranjen osnutek alo //prekinili// proces urejanja. \ No newline at end of file
diff --git a/inc/lang/sl/lang.php b/inc/lang/sl/lang.php
index 9d94bab49..8014d8a70 100644
--- a/inc/lang/sl/lang.php
+++ b/inc/lang/sl/lang.php
@@ -6,8 +6,10 @@
* @author Jaka Kranjc <lynxlupodian@hotmail.com>
* @author Boštjan Seničar <senicar@gmail.com>
* @author Dejan Levec <webphp@gmail.com>
+ * @author Gregor Skumavc (grega.skumavc@gmail.com)
*/
$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
$lang['doublequoteopening'] = '„';
$lang['doublequoteclosing'] = '“';
$lang['singlequoteopening'] = '‚';
@@ -35,12 +37,16 @@ $lang['btn_admin'] = 'Administrator';
$lang['btn_update'] = 'Posodobi';
$lang['btn_delete'] = 'Izbriši';
$lang['btn_back'] = 'Nazaj';
+$lang['btn_backlink'] = 'Navzkrižne povezave';
+$lang['btn_backtomedia'] = 'Nazaj na izbiro medijskih datotek';
+$lang['btn_subscribe'] = 'Uredi naročnine';
$lang['btn_profile'] = 'Posodobi profil';
$lang['btn_reset'] = 'Ponastavi';
$lang['btn_resendpwd'] = 'Pošlji novo geslo';
$lang['btn_draft'] = 'Uredi osnutek';
$lang['btn_recover'] = 'Obnovi osnutek';
$lang['btn_draftdel'] = 'Izbriši osnutek';
+$lang['btn_revert'] = 'Povrni';
$lang['loggedinas'] = 'Prijavljen kot';
$lang['user'] = 'Uporabniško ime';
$lang['pass'] = 'Geslo';
@@ -55,6 +61,7 @@ $lang['profile'] = 'Profil uporabnika';
$lang['badlogin'] = 'Oprostite, uporabniško ime ali geslo ni pravo.';
$lang['minoredit'] = 'Manjše spremembe';
$lang['draftdate'] = 'Samodejno shranjevanje osnutka vključeno';
+$lang['nosecedit'] = 'Stran se je medtem spremenila, informacije odseka so bile stare, naložila se je celotna stran.';
$lang['regmissing'] = 'Oprostite, zapolniti morate vsa polja.';
$lang['reguexists'] = 'Oprostite, uporabnik s tem imenom že obstaja.';
$lang['regsuccess'] = 'Uporabnik je bil ustvarjen. Geslo je bilo poslano na vaš elektronski naslov.';
@@ -64,21 +71,60 @@ $lang['regbadmail'] = 'Podan elektronski naslov izgleda neveljaven -
$lang['regbadpass'] = 'Gesli nista enaki.';
$lang['regpwmail'] = 'Vaše geslo za DokuWiki';
$lang['reghere'] = 'Nimate še računa? Priskrbite si ga';
+$lang['profna'] = 'Ta wiki ne podpira sprememb profila';
$lang['profnochange'] = 'Brez sprememb, ničesar za storiti.';
+$lang['profnoempty'] = 'Prazno polje "e-pošta" ali "ime" ni dovoljeno.';
$lang['profchanged'] = 'Uporabniški profil uspešno posodobljen';
$lang['pwdforget'] = 'Pozabili geslo? Pridobite novega';
+$lang['resendna'] = 'Ta wiki ne podpira ponovnega pošiljanja gesel.';
$lang['resendpwd'] = 'Pošlji novo geslo za';
$lang['resendpwdmissing'] = 'Se opravičujemo, vendar morate izpolniti vsa polja.';
$lang['resendpwdnouser'] = 'Se opravičujemo, vendar tega uporabniškega imena ni v bazi.';
+$lang['resendpwdbadauth'] = 'Oprostite, ta avtorizacijska koda ni prava. Prepričajte se, da ste uporabili celotno povezavo za potrditev.';
$lang['resendpwdconfirm'] = 'Potrditvena povezava je bila poslana na vaš elektronski naslov';
$lang['resendpwdsuccess'] = 'Vaše novo geslo je bilo poslano na vaš elektronski naslov';
+$lang['license'] = 'Če ni drugače navedeno, je vsebina tega wikija licencirana z naslednjo licenco:';
+$lang['licenseok'] = 'Pomembno: Z urejanjem te strani se strinjate s tem, da se vsebina zaščiti z naslednjo licenco:';
+$lang['searchmedia'] = 'Išči datoteko:';
+$lang['searchmedia_in'] = 'Išči v %s';
$lang['txt_upload'] = 'Izberite datoteko za pošiljanje';
$lang['txt_filename'] = 'Vnesite wikiname (neobvezno)';
$lang['txt_overwrt'] = 'Prepiši obstoječo datoteko';
$lang['lockedby'] = 'Trenutno zaklenjeno od';
$lang['lockexpire'] = 'Zaklep preteče';
$lang['willexpire'] = 'Vaš zaklep za urejevanje bo pretekel čez eno minuto.\nDa se izognete konfliktom, uporabite predogled, da se merilnik časa za zaklep ponastavi.';
-$lang['js']['notsavedyet'] = "Obstajajo neshranjene spremembe, ki bodo izgubljene.\nRes želite nadaljevati?";
+$lang['js']['notsavedyet'] = 'Obstajajo neshranjene spremembe, ki bodo izgubljene.
+Res želite nadaljevati?';
+$lang['js']['searchmedia'] = 'Išči datoteke';
+$lang['js']['keepopen'] = 'Od izbiri obdrži okno odprto';
+$lang['js']['hidedetails'] = 'Skrij podrobnosti';
+$lang['js']['mediatitle'] = 'Nastavitve povezave';
+$lang['js']['mediadisplay'] = 'Vrsta povezave';
+$lang['js']['mediaalign'] = 'Poravnava';
+$lang['js']['mediasize'] = 'Velikost slike';
+$lang['js']['mediatarget'] = 'Mesto povezave';
+$lang['js']['mediaclose'] = 'Zapri';
+$lang['js']['mediainsert'] = 'Vstavi';
+$lang['js']['mediadisplayimg'] = 'Pokaži sliko.';
+$lang['js']['mediadisplaylnk'] = 'Pokaži le povezavo.';
+$lang['js']['mediasmall'] = 'Manjša različica';
+$lang['js']['mediamedium'] = 'Srednja različica';
+$lang['js']['medialarge'] = 'Velika različica';
+$lang['js']['mediaoriginal'] = 'Originalna različica';
+$lang['js']['medialnk'] = 'Povezava na detajle strani';
+$lang['js']['mediadirect'] = 'Direktna povezava na original';
+$lang['js']['medianolnk'] = 'Brez povezave';
+$lang['js']['medianolink'] = 'Ne poveži na sliko';
+$lang['js']['medialeft'] = 'Poravnaj sliko na levi';
+$lang['js']['mediaright'] = 'Poravnaj sliko na desni';
+$lang['js']['mediacenter'] = 'Poravnaj sliko na sredino';
+$lang['js']['medianoalign'] = 'Ne uporabi poravnave';
+$lang['js']['nosmblinks'] = 'Povezovanje do Windows deljenih datotek deluje samo v Microsoft Internet Explorer-ju.
+Še vedno pa lahko ročno kopirate povezavo.';
+$lang['js']['linkwiz'] = 'Čarovnik za povezave';
+$lang['js']['linkto'] = 'Poveži na:';
+$lang['js']['del_confirm'] = 'Resnično brišem izbrano(e) sliko(e)?';
+$lang['js']['mu_btn'] = 'Prenesite več dokumentov naenkrat.';
$lang['rssfailed'] = 'Prišlo je do napake pri prenašanju tega dovoda: ';
$lang['nothingfound'] = 'Nič ni bilo najdeno.';
$lang['mediaselect'] = 'Mediafile Izbira';
@@ -87,23 +133,32 @@ $lang['uploadsucc'] = 'Pošiljanje uspelo';
$lang['uploadfail'] = 'Pošiljanje je spodletelo. Mogoče nimate dovoljenj?';
$lang['uploadwrong'] = 'Pošiljanje zavrnjeno. Ta datotečna končnica je prepovedana';
$lang['uploadexist'] = 'Dokument že obstaja. Brez sprememb.';
+$lang['uploadbadcontent'] = 'Naložena datoteka se ne ujema z/s %s končnico datoteke.';
+$lang['uploadspam'] = 'Nalaganje je bilo ustavljeno zaradi "črne liste" neželenih datotek.';
$lang['uploadxss'] = 'Prenos je bil zaustavljen zaradi možne zlonamerne vsebine.';
$lang['uploadsize'] = 'Prenesen dokument je prevelik. (max. %s)';
$lang['deletesucc'] = 'Datoteka "%s" je bila izbrisana.';
+$lang['deletefail'] = '"%s" ni bilo možno izbrisati - preverite nastavitve CHMOD';
$lang['mediainuse'] = 'Dokument "%s" ni bil izbrisan - je še vedno v uporabi.';
$lang['namespaces'] = 'Imenski prostori';
$lang['mediafiles'] = 'Datoteke ki so na voljo v';
-$lang['js']['hidedetails'] = 'Skrij podrobnosti';
-$lang['js']['nosmblinks'] = 'Povezovanje do Windows deljenih datotek deluje samo v Microsoft Internet Explorer-ju.
-Še vedno pa lahko ročno kopirate povezavo.';
-$lang['js']['mu_btn'] = 'Prenesite več dokumentov naenkrat.';
+$lang['accessdenied'] = 'Nimate dovoljenja za ogled te strani.';
+$lang['mediausage'] = 'Uporabite naslednjo kodo za navajanje te datoteke:';
$lang['mediaview'] = 'Poglej originalno datoteko';
+$lang['mediaroot'] = 'korenska mapa';
+$lang['mediaupload'] = 'Naložite datoteko v trenutno mapo. Za ustvarjanje novih podmap, jih pripnite pred "Naloži kot" ime in jih ločite z navpičnico.';
+$lang['mediaextchange'] = 'Končnica datoteke se je spremenila iz .%s v .%s!';
+$lang['reference'] = 'Reference za';
+$lang['ref_inuse'] = 'Te datoteke ni možno izbrisati, ker jo še vedno uporablja(jo) stran(i):';
+$lang['ref_hidden'] = 'Nekaj referenc je na straneh, do katerih nimate dostopa.';
$lang['hits'] = 'Zadetkov';
$lang['quickhits'] = 'Ujemanja v imenih strani';
$lang['toc'] = 'Kazalo';
$lang['current'] = 'trenutna';
$lang['yours'] = 'Vaša različica';
$lang['diff'] = 'prikaži razlike s trenutno različico';
+$lang['diff2'] = 'Pokaži razlike med izbranimi revizijami';
+$lang['difflink'] = 'Naredi povezavo na to primerjavo';
$lang['line'] = 'Vrstica';
$lang['breadcrumb'] = 'Sled';
$lang['youarehere'] = 'Tukaj ste';
@@ -112,10 +167,13 @@ $lang['by'] = 'od';
$lang['deleted'] = 'odstranjena';
$lang['created'] = 'ustvarjena';
$lang['restored'] = 'stara različica povrnjena';
+$lang['external_edit'] = 'urejanje v zunanjem urejevalniku';
$lang['summary'] = 'Povzetek urejanja';
$lang['noflash'] = 'Za prikaz vsebine potrebujete <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>';
+$lang['download'] = 'Naloži izrezek';
$lang['mail_newpage'] = '[DokuWiki] stran dodana:';
$lang['mail_changed'] = '[DokuWiki] stran spremenjena:';
+$lang['mail_subscribe_list'] = 'strani s spremenjenim imenom:';
$lang['mail_new_user'] = 'nov uporabnik.';
$lang['mail_upload'] = 'naložena datoteka:';
$lang['qb_bold'] = 'Krepki tisk';
@@ -128,6 +186,11 @@ $lang['qb_h2'] = 'Naslov drugee stopnje';
$lang['qb_h3'] = 'Naslov tretje stopnje';
$lang['qb_h4'] = 'Naslov četrte stopnje';
$lang['qb_h5'] = 'Naslov pete stopnje';
+$lang['qb_h'] = 'Naslov';
+$lang['qb_hs'] = 'Izberi naslov';
+$lang['qb_hplus'] = 'Naslov na višjem nivoju';
+$lang['qb_hminus'] = 'Naslov na nižjem nivoju';
+$lang['qb_hequal'] = 'Naslov na istem nivoju';
$lang['qb_link'] = 'Notranja povezava';
$lang['qb_extlink'] = 'Zunanja povezava';
$lang['qb_hr'] = 'Vodoravna črta';
@@ -137,6 +200,7 @@ $lang['qb_media'] = 'Dodaj slike in druge datoteke';
$lang['qb_sig'] = 'Vstavi podpis';
$lang['qb_smileys'] = 'Smeški';
$lang['qb_chars'] = 'Posebni znaki';
+$lang['upperns'] = 'skoči na starševski članek';
$lang['admin_register'] = 'Dodaj novega uporabnika';
$lang['metaedit'] = 'Popravi metapodatke';
$lang['metasaveerr'] = 'Zapisovanje metapodatkov ni uspelo';
@@ -148,15 +212,71 @@ $lang['img_date'] = 'Datum';
$lang['img_fname'] = 'Ime datoteke';
$lang['img_fsize'] = 'Velikost';
$lang['img_artist'] = 'Fotograf';
+$lang['img_copyr'] = 'Avtorska zaščita';
$lang['img_format'] = 'Velikost';
$lang['img_camera'] = 'Fotoaparat';
$lang['img_keywords'] = 'Ključne besede';
+$lang['subscr_subscribe_success'] = 'Dodan %s na seznam naročnin za %s';
+$lang['subscr_subscribe_error'] = 'Napaka pri dodajanju %s na seznam naročnin za %s';
+$lang['subscr_subscribe_noaddress'] = 'Z vašo prijavo ni povezan noben e-naslov, zato vas ne moremo dodati na seznam naročnikov';
+$lang['subscr_unsubscribe_success'] = 'Odstranjeno %s s seznama naročnin za %s';
+$lang['subscr_unsubscribe_error'] = 'Napaka pri odstranjevanju %s s seznama naročnin za %s';
+$lang['subscr_already_subscribed'] = '%s je že naročen na %s';
+$lang['subscr_not_subscribed'] = '%s ni naročen na %s';
+$lang['subscr_m_not_subscribed'] = 'Niste naročeni na trenutno stran ali članek.';
+$lang['subscr_m_new_header'] = 'Naroči se na spremembe';
+$lang['subscr_m_current_header'] = 'Trenutne naročnine';
+$lang['subscr_m_unsubscribe'] = 'Odjavi se';
+$lang['subscr_m_subscribe'] = 'Naroči se';
+$lang['subscr_m_receive'] = 'Prejmi';
+$lang['subscr_style_every'] = 'e-pošto ob vsaki spremembi';
+$lang['subscr_style_digest'] = 'strnjeno e-pošti sprememb za vsako stran (vsake %.2f dni)';
+$lang['subscr_style_list'] = 'seznam spremenjenih strani od zadnje pošte (vsake %.2f dni)';
+$lang['authmodfailed'] = 'Slaba nastavitev potrditve. Prosimo obvestite administratorja wikija.';
+$lang['authtempfail'] = 'Potrditev uporabnika je trenutno nedostopna. Če se ta napaka ponavlja, prosimo obvestite administratorja wikija.';
$lang['i_chooselang'] = 'Izberite jezik';
$lang['i_installer'] = 'DokuWiki namestitev';
$lang['i_wikiname'] = 'Wiki ime';
$lang['i_enableacl'] = 'Omogoči ACL (priporočeno)';
$lang['i_superuser'] = 'Naduporabnik';
+$lang['i_problems'] = 'Installer je naletel na težave, ki so opisane spodaj. Ne morete nadaljevati, dokler jih ne odpravite.';
+$lang['i_modified'] = 'Iz varnostnih razlogov bo ta skrip deloval le v novi in nespremenjeneni namestitvi DokuWikija. Potrebno je ali ponovno razširiti datoteke iz naloženega paketa, ali preberete popolna <a href="http://dokuwiki.org/install">Dokuwiki navodila za namestitev</a>.';
+$lang['i_funcna'] = 'PHP funkcija <code>%s</code> ni na voljo. Morda jo je vaš ponudnik onemogočil?';
+$lang['i_phpver'] = 'Verzija vašega PHP-ja <code>%s</code> je nižja od potrebne <code>%s</code>. Potrebno je posodobiti PHP inštalacijo.';
+$lang['i_permfail'] = '<code>%s</code> ni zapisljiva. Potrebno je nastaviti CHMOD nastavitve dostopa do direktorija.';
$lang['i_confexists'] = '<code>%s</code> že obstaja';
+$lang['i_writeerr'] = 'Ni mogoče ustvariti <code>%s</code>. Preveriti morate CHMOD nastavitve dostopa direktorija ali datoteke in ustvariti datoteko ročno.';
+$lang['i_badhash'] = 'nepoznana ali spremenjena dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - neveljavna ali prazna vrednost';
+$lang['i_success'] = 'Konfiguracija se je zaključila uspešno. Datoteko install.php lahko sedaj izbrišete. Nadaljujte v vaš <a href="doku.php">novi DokuWiki</a>.';
+$lang['i_failure'] = 'Med zapisovanjem nastavitvenih datotek je prišlo do nekaj napak. Preden lahko uporabite vaš <a href="doku.php">novi DokuWiki</a>, jih boste morali ročno popraviti.';
+$lang['i_policy'] = 'Namesti ACL';
+$lang['i_pol0'] = 'Odprt Wiki (branje, zapis, nalaganje datotek je javno za vse)';
+$lang['i_pol1'] = 'Javni Wiki (branje za vse, zapis in nalaganje datotek za prijavljene uporabnike)';
+$lang['i_pol2'] = 'Zaprt Wiki (berejo in urejajo lahko le prijavljeni uporabniki)';
+$lang['i_retry'] = 'Ponovni poskus';
+$lang['i_license'] = 'Prosimo, izberite licenco, pod katero bo objsavljena vsebina:';
+$lang['mu_intro'] = 'Tukaj lahko naložite več datotek hkrati. Kliknite gumb "Brskaj", da jih dodate v vrsto. Kliknite "Naloži", ko ste končali';
+$lang['mu_gridname'] = 'Ime datoteke';
$lang['mu_gridsize'] = 'Velikost';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Ime';
+$lang['mu_browse'] = 'Brskaj';
+$lang['mu_toobig'] = 'prevelika datoteka';
+$lang['mu_ready'] = 'pripravljena na nalaganje';
$lang['mu_done'] = 'končano';
+$lang['mu_fail'] = 'ni uspelo';
+$lang['mu_authfail'] = 'seja je potekla';
+$lang['mu_progress'] = '@PCT@% naloženo';
$lang['mu_filetypes'] = 'Dovoljeni tipi datotek';
+$lang['mu_info'] = 'datoteke naložene';
+$lang['mu_lasterr'] = 'Zadnja napaka:';
+$lang['recent_global'] = 'Trenutno gledate spremembe znotraj imenskega prostora <b>%s</b>. Lahko si <a href="%s">ogledate tudi spremembe, narejene v celotnem wikiju</a>.';
+$lang['years'] = '%d let nazaj';
+$lang['months'] = '%d mesecev nazaj';
+$lang['weeks'] = '%d tednov nazaj';
+$lang['days'] = '%d dni nazaj';
+$lang['hours'] = '%d ur nazaj';
+$lang['minutes'] = '%d minut nazaj';
+$lang['seconds'] = '%d sekund nazaj';
+$lang['wordblock'] = 'Vaša sprememba ni bila shranjena, ker vsebuje neželeno besedilo (spam).';
diff --git a/inc/lang/sl/subscr_digest.txt b/inc/lang/sl/subscr_digest.txt
new file mode 100644
index 000000000..983cab233
--- /dev/null
+++ b/inc/lang/sl/subscr_digest.txt
@@ -0,0 +1,20 @@
+Pozdravljeni!
+
+Stran @PAGE@ v wikiju @TITLE@ je bila spremenjena.
+Tu so spremembe:
+
+------------------------------------------------
+@DIFF@
+------------------------------------------------
+
+Stara revizija: @OLDPAGE@
+Nova revizija: @NEWPAGE@
+
+Za odjavo pošiljanja sprememb se prijavite v wiki na naslovu
+@DOKUWIKIURL@, nato obiščite
+@SUBSCRIBE@
+in se odjavite od sprememb strani in/ali imenskega prostora.
+
+--
+To sporočilo je generiral DokuWiki na naslovu
+@DUKOWIKIURL@ \ No newline at end of file
diff --git a/inc/lang/sl/subscr_form.txt b/inc/lang/sl/subscr_form.txt
new file mode 100644
index 000000000..46be8c954
--- /dev/null
+++ b/inc/lang/sl/subscr_form.txt
@@ -0,0 +1,3 @@
+===== Urejanje naročnin ====
+
+Ta stran vam omogoča urejanje vaših naročnin za trenutno stran in imenski prostor. \ No newline at end of file
diff --git a/inc/lang/sl/subscr_list.txt b/inc/lang/sl/subscr_list.txt
new file mode 100644
index 000000000..f4cfbc268
--- /dev/null
+++ b/inc/lang/sl/subscr_list.txt
@@ -0,0 +1,17 @@
+Pozdravljeni!
+
+Strani v imenskem prostoru @PAGE@ wikija @TITLE@ so se spremenile.
+Tu so spremenjene strani:
+
+------------------------------------------------
+@DIFF@
+------------------------------------------------
+
+Za odjavo pošiljanja sprememb se prijavite v wiki na naslovu
+@DOKUWIKIURL@, nato obiščite
+@SUBSCRIBE@
+in se odjavite od sprememb strani in/ali imenskega prostora.
+
+--
+To sporočilo je generiral DokuWiki na naslovu
+@DUKOWIKIURL@ \ No newline at end of file
diff --git a/inc/lang/sl/updateprofile.txt b/inc/lang/sl/updateprofile.txt
new file mode 100644
index 000000000..45aa7d92f
--- /dev/null
+++ b/inc/lang/sl/updateprofile.txt
@@ -0,0 +1,3 @@
+===== Posodobite svoj profil računa =====
+
+Posodobite le tista polja, ki jih želite spremeniti. Svojega uporabiškega imena ne morete spreminjati. \ No newline at end of file
diff --git a/inc/lang/sl/uploadmail.txt b/inc/lang/sl/uploadmail.txt
new file mode 100644
index 000000000..6006bd379
--- /dev/null
+++ b/inc/lang/sl/uploadmail.txt
@@ -0,0 +1,13 @@
+Datoteka je bila naložena v vaš DokuWiki. Tu so podatki:
+
+Datoteka: @MEDIA@
+Datum: @DATE@
+Brskalnik: @BROWSER@
+IP naslov: @IPADDRESS@
+Ponudnik: @HOSTNAME@
+Velikost: @SIZE@
+MIME tip: @MIME@
+Uporabnik: @USER@
+
+--
+Sporočilo je generiral DokuWiki na naslovu @DOKUWIKIURL@ \ No newline at end of file
diff --git a/inc/mail.php b/inc/mail.php
index 604a0999a..aa9d195d1 100644
--- a/inc/mail.php
+++ b/inc/mail.php
@@ -44,7 +44,9 @@ function mail_setup(){
if(!empty($USERINFO['mail'])){
$replace['@MAIL@'] = $USERINFO['mail'];
}else{
- $replace['@MAIL@'] = 'noreply@'.parse_url(DOKU_URL,PHP_URL_HOST);
+ $host = @parse_url(DOKU_URL,PHP_URL_HOST);
+ if(!$host) $host = 'example.com';
+ $replace['@MAIL@'] = 'noreply@'.$host;
}
if(!empty($_SERVER['REMOTE_USER'])){
@@ -225,6 +227,7 @@ function mail_encode_address($string,$header='',$names=true){
*/
function mail_isvalid($email){
$validator = new EmailAddressValidator;
+ $validator->allowLocalAddresses = true;
return $validator->check_email_address($email);
}
diff --git a/inc/pageutils.php b/inc/pageutils.php
index 42a485bdf..cd01dcae7 100644
--- a/inc/pageutils.php
+++ b/inc/pageutils.php
@@ -311,14 +311,13 @@ function metaFN($id,$ext){
* returns an array of full paths to all metafiles of a given ID
*
* @author Esther Brunner <esther@kaffeehaus.ch>
+ * @author Michael Hamann <michael@content-space.de>
*/
function metaFiles($id){
- $name = noNS($id);
- $ns = getNS($id);
- $dir = ($ns) ? metaFN($ns,'').'/' : metaFN($ns,'');
- $files = array();
- $files = glob($dir.$name.'.*');
- return $files;
+ $basename = metaFN($id, '');
+ $files = glob($basename.'.*', GLOB_MARK);
+ // filter files like foo.bar.meta when $id == 'foo'
+ return $files ? preg_grep('/^'.preg_quote($basename, '/').'\.[^.\/]*$/u', $files) : array();
}
/**
@@ -344,10 +343,13 @@ function mediaFN($id){
*/
function localeFN($id){
global $conf;
- $file = DOKU_INC.'inc/lang/'.$conf['lang'].'/'.$id.'.txt';
+ $file = DOKU_CONF.'/lang/'.$conf['lang'].'/'.$id.'.txt';
if(!@file_exists($file)){
- //fall back to english
- $file = DOKU_INC.'inc/lang/en/'.$id.'.txt';
+ $file = DOKU_INC.'inc/lang/'.$conf['lang'].'/'.$id.'.txt';
+ if(!@file_exists($file)){
+ //fall back to english
+ $file = DOKU_INC.'inc/lang/en/'.$id.'.txt';
+ }
}
return $file;
}
diff --git a/inc/parser/metadata.php b/inc/parser/metadata.php
index 263745593..fc2c8cbc5 100644
--- a/inc/parser/metadata.php
+++ b/inc/parser/metadata.php
@@ -45,6 +45,9 @@ class Doku_Renderer_metadata extends Doku_Renderer {
if(!$this->persistent['date']['created']){
$this->persistent['date']['created'] = filectime(wikiFN($ID));
}
+ if(!isset($this->persistent['user'])){
+ $this->persistent['user'] = '';
+ }
if(!isset($this->persistent['creator'])){
$this->persistent['creator'] = '';
}
@@ -461,7 +464,7 @@ class Doku_Renderer_metadata extends Doku_Renderer {
} else if (is_string($title)){
return $title;
} else if (is_array($title)){
- return '['.$title['title'].']';
+ if($title['title']) return '['.$title['title'].']';
}
}
diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php
index b0d93f93e..9405d9420 100644
--- a/inc/parser/xhtml.php
+++ b/inc/parser/xhtml.php
@@ -734,9 +734,9 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
$name = $this->_getLinkTitle($name, '', $isImage);
if ( !$isImage ) {
- $link['class']='mail JSnocheck';
+ $link['class']='mail';
} else {
- $link['class']='media JSnocheck';
+ $link['class']='media';
}
$address = $this->_xmlEntities($address);
diff --git a/inc/parserutils.php b/inc/parserutils.php
index d4f55a6e4..6e349e984 100644
--- a/inc/parserutils.php
+++ b/inc/parserutils.php
@@ -10,6 +10,13 @@
if(!defined('DOKU_INC')) die('meh.');
/**
+ * For how many different pages shall the first heading be loaded from the
+ * metadata? When this limit is reached the title index is loaded and used for
+ * all following requests.
+ */
+if (!defined('P_GET_FIRST_HEADING_METADATA_LIMIT')) define('P_GET_FIRST_HEADING_METADATA_LIMIT', 10);
+
+/**
* Returns the parsed Wikitext in XHTML for the given id and revision.
*
* If $excuse is true an explanation is returned if the file
@@ -220,10 +227,15 @@ function p_get_instructions($text){
/**
* returns the metadata of a page
*
+ * @param string $id The id of the page the metadata should be returned from
+ * @param string $key The key of the metdata value that shall be read (by default everything) - separate hierarchies by " " like "date created"
+ * @param boolean $render If the page should be rendererd when the cache can't be used - default true
+ * @return mixed The requested metadata fields
+ *
* @author Esther Brunner <esther@kaffeehaus.ch>
* @author Michael Hamann <michael@content-space.de>
*/
-function p_get_metadata($id, $key='', $render=false){
+function p_get_metadata($id, $key='', $render=true){
global $ID;
// cache the current page
@@ -234,14 +246,16 @@ function p_get_metadata($id, $key='', $render=false){
// prevent recursive calls in the cache
static $recursion = false;
- if (!$recursion){
+ if (!$recursion && $render){
$recursion = true;
$cachefile = new cache_renderer($id, wikiFN($id), 'metadata');
if (page_exists($id) && !$cachefile->useCache()){
+ $old_meta = $meta;
$meta = p_render_metadata($id, $meta);
- if (p_save_metadata($id, $meta)) {
+ // only update the file when the metadata has been changed
+ if ($meta == $old_meta || p_save_metadata($id, $meta)) {
// store a timestamp in order to make sure that the cachefile is touched
$cachefile->storeCache(time());
} else {
@@ -618,9 +632,41 @@ function & p_get_renderer($mode) {
* headings ... and so on.
*
* @author Andreas Gohr <andi@splitbrain.org>
+ * @author Michael Hamann <michael@content-space.de>
*/
function p_get_first_heading($id, $render=true){
- return p_get_metadata($id,'title',$render);
+ // counter how many titles have been requested using p_get_metadata
+ static $count = 1;
+ // the index of all titles, only loaded when many titles are requested
+ static $title_index = null;
+ // cache for titles requested using p_get_metadata
+ static $title_cache = array();
+
+ $id = cleanID($id);
+
+ // check if this title has already been requested
+ if (isset($title_cache[$id]))
+ return $title_cache[$id];
+
+ // check if already too many titles have been requested and probably
+ // using the title index is better
+ if ($count > P_GET_FIRST_HEADING_METADATA_LIMIT) {
+ if (is_null($title_index)) {
+ $pages = array_map('rtrim', idx_getIndex('page', ''));
+ $titles = array_map('rtrim', idx_getIndex('title', ''));
+ // check for corrupt title index #FS2076
+ if(count($pages) != count($titles)){
+ $titles = array_fill(0,count($pages),'');
+ @unlink($conf['indexdir'].'/title.idx'); // will be rebuilt in inc/init.php
+ }
+ $title_index = array_combine($pages, $titles);
+ }
+ return $title_index[$id];
+ }
+
+ ++$count;
+ $title_cache[$id] = p_get_metadata($id,'title',$render);
+ return $title_cache[$id];
}
/**
diff --git a/inc/plugin.php b/inc/plugin.php
index aff07c1e5..628ae39b0 100644
--- a/inc/plugin.php
+++ b/inc/plugin.php
@@ -88,10 +88,13 @@ class DokuWiki_Plugin {
function localFN($id) {
global $conf;
$plugin = $this->getPluginName();
- $file = DOKU_PLUGIN.$plugin.'/lang/'.$conf['lang'].'/'.$id.'.txt';
- if(!@file_exists($file)){
- //fall back to english
- $file = DOKU_PLUGIN.$plugin.'/lang/en/'.$id.'.txt';
+ $file = DOKU_CONF.'/plugin_lang/'.$plugin.'/'.$conf['lang'].'/'.$id.'.txt';
+ if (!@file_exists($file)){
+ $file = DOKU_PLUGIN.$plugin.'/lang/'.$conf['lang'].'/'.$id.'.txt';
+ if(!@file_exists($file)){
+ //fall back to english
+ $file = DOKU_PLUGIN.$plugin.'/lang/en/'.$id.'.txt';
+ }
}
return $file;
}
diff --git a/inc/subscription.php b/inc/subscription.php
index 08d4cb241..1b5476553 100644
--- a/inc/subscription.php
+++ b/inc/subscription.php
@@ -46,7 +46,7 @@ function subscription_filename($id) {
*/
function subscription_lock_filename ($id){
global $conf;
- return $conf['lockdir'].'/_subscr_' . $id . '.lock';
+ return $conf['lockdir'].'/_subscr_' . md5($id) . '.lock';
}
function subscription_lock($id) {
diff --git a/inc/template.php b/inc/template.php
index 53ae9abce..e4c74a714 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -748,39 +748,27 @@ function tpl_youarehere($sep=' &raquo; '){
echo '<span class="bchead">'.$lang['youarehere'].': </span>';
// always print the startpage
- $title = useHeading('navigation') ? p_get_first_heading($conf['start']) : $conf['start'];
- if(!$title) $title = $conf['start'];
- tpl_link(wl($conf['start']),hsc($title),'title="'.$conf['start'].'"');
+ tpl_pagelink(':'.$conf['start']);
// print intermediate namespace links
$part = '';
for($i=0; $i<$count - 1; $i++){
$part .= $parts[$i].':';
$page = $part;
- resolve_pageid('',$page,$exists);
if ($page == $conf['start']) continue; // Skip startpage
// output
echo $sep;
- if($exists){
- $title = useHeading('navigation') ? p_get_first_heading($page) : $parts[$i];
- tpl_link(wl($page),hsc($title),'title="'.$page.'"');
- }else{
- tpl_link(wl($page),$parts[$i],'title="'.$page.'" class="wikilink2" rel="nofollow"');
- }
+ tpl_pagelink($page);
}
// print current page, skipping start page, skipping for namespace index
+ resolve_pageid('',$page,$exists);
if(isset($page) && $page==$part.$parts[$i]) return;
$page = $part.$parts[$i];
if($page == $conf['start']) return;
echo $sep;
- if(page_exists($page)){
- $title = useHeading('navigation') ? p_get_first_heading($page) : $parts[$i];
- tpl_link(wl($page),hsc($title),'title="'.$page.'"');
- }else{
- tpl_link(wl($page),$parts[$i],'title="'.$page.'" class="wikilink2" rel="nofollow"');
- }
+ tpl_pagelink($page);
return true;
}
@@ -1000,8 +988,6 @@ function tpl_indexerWebBug(){
global $INFO;
if(!$INFO['exists']) return false;
- if(isHiddenPage($ID)) return false; //no need to index hidden pages
-
$p = array();
$p['src'] = DOKU_BASE.'lib/exe/indexer.php?id='.rawurlencode($ID).
'&'.time();
@@ -1248,7 +1234,7 @@ function tpl_license($img='badge',$imgonly=false,$return=false){
}
if(!$imgonly) {
$out .= $lang['license'];
- $out .= '<a href="'.$lic['url'].'" rel="license" class="urlextern"';
+ $out .= ' <a href="'.$lic['url'].'" rel="license" class="urlextern"';
if($conf['target']['extern']) $out .= ' target="'.$conf['target']['extern'].'"';
$out .= '>'.$lic['name'].'</a>';
}
diff --git a/lib/exe/ajax.php b/lib/exe/ajax.php
index e514762fd..540399a59 100644
--- a/lib/exe/ajax.php
+++ b/lib/exe/ajax.php
@@ -8,7 +8,7 @@
//fix for Opera XMLHttpRequests
if(!count($_POST) && !empty($HTTP_RAW_POST_DATA)){
- parse_str($HTTP_RAW_POST_DATA, $_POST);
+ parse_str($HTTP_RAW_POST_DATA, $_POST);
}
if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
@@ -20,25 +20,25 @@ header('Content-Type: text/html; charset=utf-8');
//call the requested function
-if(isset($_POST['call']))
- $call = $_POST['call'];
-else if(isset($_GET['call']))
- $call = $_GET['call'];
-else
- exit;
-
+if(isset($_POST['call'])){
+ $call = $_POST['call'];
+}else if(isset($_GET['call'])){
+ $call = $_GET['call'];
+}else{
+ exit;
+}
$callfn = 'ajax_'.$call;
if(function_exists($callfn)){
- $callfn();
+ $callfn();
}else{
- $evt = new Doku_Event('AJAX_CALL_UNKNOWN', $call);
- if ($evt->advise_before()) {
- print "AJAX call '".htmlspecialchars($call)."' unknown!\n";
- exit;
- }
- $evt->advise_after();
- unset($evt);
+ $evt = new Doku_Event('AJAX_CALL_UNKNOWN', $call);
+ if ($evt->advise_before()) {
+ print "AJAX call '".htmlspecialchars($call)."' unknown!\n";
+ exit;
+ }
+ $evt->advise_after();
+ unset($evt);
}
/**
@@ -47,33 +47,33 @@ if(function_exists($callfn)){
* @author Andreas Gohr <andi@splitbrain.org>
*/
function ajax_qsearch(){
- global $conf;
- global $lang;
-
- $query = $_POST['q'];
- if(empty($query)) $query = $_GET['q'];
- if(empty($query)) return;
-
- $data = ft_pageLookup($query, true, useHeading('navigation'));
-
- if(!count($data)) return;
-
- print '<strong>'.$lang['quickhits'].'</strong>';
- print '<ul>';
- foreach($data as $id => $title){
- if (useHeading('navigation')) {
- $name = $title;
- } else {
- $ns = getNS($id);
- if($ns){
- $name = shorten(noNS($id), ' ('.$ns.')',30);
- }else{
- $name = $id;
+ global $conf;
+ global $lang;
+
+ $query = $_POST['q'];
+ if(empty($query)) $query = $_GET['q'];
+ if(empty($query)) return;
+
+ $data = ft_pageLookup($query, true, useHeading('navigation'));
+
+ if(!count($data)) return;
+
+ print '<strong>'.$lang['quickhits'].'</strong>';
+ print '<ul>';
+ foreach($data as $id => $title){
+ if (useHeading('navigation')) {
+ $name = $title;
+ } else {
+ $ns = getNS($id);
+ if($ns){
+ $name = shorten(noNS($id), ' ('.$ns.')',30);
+ }else{
+ $name = $id;
+ }
}
+ echo '<li>' . html_wikilink(':'.$id,$name) . '</li>';
}
- echo '<li>' . html_wikilink(':'.$id,$name) . '</li>';
- }
- print '</ul>';
+ print '</ul>';
}
/**
@@ -83,36 +83,36 @@ function ajax_qsearch(){
* @author Mike Frysinger <vapier@gentoo.org>
*/
function ajax_suggestions() {
- global $conf;
- global $lang;
-
- $query = cleanID($_POST['q']);
- if(empty($query)) $query = cleanID($_GET['q']);
- if(empty($query)) return;
-
- $data = array();
- $data = ft_pageLookup($query);
- if(!count($data)) return;
- $data = array_keys($data);
-
- // limit results to 15 hits
- $data = array_slice($data, 0, 15);
- $data = array_map('trim',$data);
- $data = array_map('noNS',$data);
- $data = array_unique($data);
- sort($data);
-
- /* now construct a json */
- $suggestions = array(
- $query, // the original query
- $data, // some suggestions
- array(), // no description
- array() // no urls
- );
- $json = new JSON();
-
- header('Content-Type: application/x-suggestions+json');
- print $json->encode($suggestions);
+ global $conf;
+ global $lang;
+
+ $query = cleanID($_POST['q']);
+ if(empty($query)) $query = cleanID($_GET['q']);
+ if(empty($query)) return;
+
+ $data = array();
+ $data = ft_pageLookup($query);
+ if(!count($data)) return;
+ $data = array_keys($data);
+
+ // limit results to 15 hits
+ $data = array_slice($data, 0, 15);
+ $data = array_map('trim',$data);
+ $data = array_map('noNS',$data);
+ $data = array_unique($data);
+ sort($data);
+
+ /* now construct a json */
+ $suggestions = array(
+ $query, // the original query
+ $data, // some suggestions
+ array(), // no description
+ array() // no urls
+ );
+ $json = new JSON();
+
+ header('Content-Type: application/x-suggestions+json');
+ print $json->encode($suggestions);
}
/**
@@ -121,32 +121,32 @@ function ajax_suggestions() {
* Andreas Gohr <andi@splitbrain.org>
*/
function ajax_lock(){
- global $conf;
- global $lang;
- $id = cleanID($_POST['id']);
- if(empty($id)) return;
-
- if(!checklock($id)){
- lock($id);
- echo 1;
- }
-
- if($conf['usedraft'] && $_POST['wikitext']){
- $client = $_SERVER['REMOTE_USER'];
- if(!$client) $client = clientIP(true);
+ global $conf;
+ global $lang;
+ $id = cleanID($_POST['id']);
+ if(empty($id)) return;
+
+ if(!checklock($id)){
+ lock($id);
+ echo 1;
+ }
- $draft = array('id' => $id,
- 'prefix' => substr($_POST['prefix'], 0, -1),
- 'text' => $_POST['wikitext'],
- 'suffix' => $_POST['suffix'],
- 'date' => (int) $_POST['date'],
- 'client' => $client,
- );
- $cname = getCacheName($draft['client'].$id,'.draft');
- if(io_saveFile($cname,serialize($draft))){
- echo $lang['draftdate'].' '.dformat();
+ if($conf['usedraft'] && $_POST['wikitext']){
+ $client = $_SERVER['REMOTE_USER'];
+ if(!$client) $client = clientIP(true);
+
+ $draft = array('id' => $id,
+ 'prefix' => substr($_POST['prefix'], 0, -1),
+ 'text' => $_POST['wikitext'],
+ 'suffix' => $_POST['suffix'],
+ 'date' => (int) $_POST['date'],
+ 'client' => $client,
+ );
+ $cname = getCacheName($draft['client'].$id,'.draft');
+ if(io_saveFile($cname,serialize($draft))){
+ echo $lang['draftdate'].' '.dformat();
+ }
}
- }
}
@@ -156,14 +156,14 @@ function ajax_lock(){
* @author Andreas Gohr <andi@splitbrain.org>
*/
function ajax_draftdel(){
- $id = cleanID($_REQUEST['id']);
- if(empty($id)) return;
+ $id = cleanID($_REQUEST['id']);
+ if(empty($id)) return;
- $client = $_SERVER['REMOTE_USER'];
- if(!$client) $client = clientIP(true);
+ $client = $_SERVER['REMOTE_USER'];
+ if(!$client) $client = clientIP(true);
- $cname = getCacheName($client.$id,'.draft');
- @unlink($cname);
+ $cname = getCacheName($client.$id,'.draft');
+ @unlink($cname);
}
/**
@@ -172,22 +172,22 @@ function ajax_draftdel(){
* @author Andreas Gohr <andi@splitbrain.org>
*/
function ajax_medians(){
- global $conf;
-
- // wanted namespace
- $ns = cleanID($_POST['ns']);
- $dir = utf8_encodeFN(str_replace(':','/',$ns));
-
- $lvl = count(explode(':',$ns));
-
- $data = array();
- search($data,$conf['mediadir'],'search_index',array('nofiles' => true),$dir);
- foreach($data as $item){
- $item['level'] = $lvl+1;
- echo media_nstree_li($item);
- echo media_nstree_item($item);
- echo '</li>';
- }
+ global $conf;
+
+ // wanted namespace
+ $ns = cleanID($_POST['ns']);
+ $dir = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $lvl = count(explode(':',$ns));
+
+ $data = array();
+ search($data,$conf['mediadir'],'search_index',array('nofiles' => true),$dir);
+ foreach($data as $item){
+ $item['level'] = $lvl+1;
+ echo media_nstree_li($item);
+ echo media_nstree_item($item);
+ echo '</li>';
+ }
}
/**
@@ -196,11 +196,11 @@ function ajax_medians(){
* @author Andreas Gohr <andi@splitbrain.org>
*/
function ajax_medialist(){
- global $conf;
- global $NS;
+ global $conf;
+ global $NS;
- $NS = $_POST['ns'];
- tpl_mediaContent(true);
+ $NS = $_POST['ns'];
+ tpl_mediaContent(true);
}
/**
@@ -209,24 +209,24 @@ function ajax_medialist(){
* @author Andreas Gohr <andi@splitbrain.org>
*/
function ajax_index(){
- global $conf;
-
- // wanted namespace
- $ns = cleanID($_POST['idx']);
- $dir = utf8_encodeFN(str_replace(':','/',$ns));
-
- $lvl = count(explode(':',$ns));
-
- $data = array();
- search($data,$conf['datadir'],'search_index',array('ns' => $ns),$dir);
- foreach($data as $item){
- $item['level'] = $lvl+1;
- echo html_li_index($item);
- echo '<div class="li">';
- echo html_list_index($item);
- echo '</div>';
- echo '</li>';
- }
+ global $conf;
+
+ // wanted namespace
+ $ns = cleanID($_POST['idx']);
+ $dir = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $lvl = count(explode(':',$ns));
+
+ $data = array();
+ search($data,$conf['datadir'],'search_index',array('ns' => $ns),$dir);
+ foreach($data as $item){
+ $item['level'] = $lvl+1;
+ echo html_li_index($item);
+ echo '<div class="li">';
+ echo html_list_index($item);
+ echo '</div>';
+ echo '</li>';
+ }
}
/**
@@ -235,107 +235,105 @@ function ajax_index(){
* @author Andreas Gohr <gohr@cosmocode.de>
*/
function ajax_linkwiz(){
- global $conf;
- global $lang;
-
- $q = ltrim($_POST['q'],':');
- $id = noNS($q);
- $ns = getNS($q);
-
- $ns = cleanID($ns);
- $id = cleanID($id);
-
- $nsd = utf8_encodeFN(str_replace(':','/',$ns));
- $idd = utf8_encodeFN(str_replace(':','/',$id));
-
- $data = array();
- if($q && !$ns){
-
- // use index to lookup matching pages
- $pages = array();
- $pages = ft_pageLookup($id,true);
-
- // result contains matches in pages and namespaces
- // we now extract the matching namespaces to show
- // them seperately
- $dirs = array();
-
-
- foreach($pages as $pid => $title){
- if(strpos(noNS($pid),$id) === false){
- // match was in the namespace
- $dirs[getNS($pid)] = 1; // assoc array avoids dupes
- }else{
- // it is a matching page, add it to the result
- $data[] = array(
- 'id' => $pid,
- 'title' => $title,
- 'type' => 'f',
- );
- }
- unset($pages[$pid]);
- }
- foreach($dirs as $dir => $junk){
- $data[] = array(
- 'id' => $dir,
- 'type' => 'd',
- );
- }
+ global $conf;
+ global $lang;
+
+ $q = ltrim($_POST['q'],':');
+ $id = noNS($q);
+ $ns = getNS($q);
+
+ $ns = cleanID($ns);
+ $id = cleanID($id);
+
+ $nsd = utf8_encodeFN(str_replace(':','/',$ns));
+ $idd = utf8_encodeFN(str_replace(':','/',$id));
+
+ $data = array();
+ if($q && !$ns){
+
+ // use index to lookup matching pages
+ $pages = array();
+ $pages = ft_pageLookup($id,true);
+
+ // result contains matches in pages and namespaces
+ // we now extract the matching namespaces to show
+ // them seperately
+ $dirs = array();
+
+ foreach($pages as $pid => $title){
+ if(strpos(noNS($pid),$id) === false){
+ // match was in the namespace
+ $dirs[getNS($pid)] = 1; // assoc array avoids dupes
+ }else{
+ // it is a matching page, add it to the result
+ $data[] = array(
+ 'id' => $pid,
+ 'title' => $title,
+ 'type' => 'f',
+ );
+ }
+ unset($pages[$pid]);
+ }
+ foreach($dirs as $dir => $junk){
+ $data[] = array(
+ 'id' => $dir,
+ 'type' => 'd',
+ );
+ }
- }else{
-
- $opts = array(
- 'depth' => 1,
- 'listfiles' => true,
- 'listdirs' => true,
- 'pagesonly' => true,
- 'firsthead' => true,
- 'sneakyacl' => $conf['sneaky_index'],
- );
- if($id) $opts['filematch'] = '^.*\/'.$id;
- if($id) $opts['dirmatch'] = '^.*\/'.$id;
- search($data,$conf['datadir'],'search_universal',$opts,$nsd);
-
- // add back to upper
- if($ns){
- array_unshift($data,array(
- 'id' => getNS($ns),
- 'type' => 'u',
- ));
- }
- }
+ }else{
- // fixme sort results in a useful way ?
+ $opts = array(
+ 'depth' => 1,
+ 'listfiles' => true,
+ 'listdirs' => true,
+ 'pagesonly' => true,
+ 'firsthead' => true,
+ 'sneakyacl' => $conf['sneaky_index'],
+ );
+ if($id) $opts['filematch'] = '^.*\/'.$id;
+ if($id) $opts['dirmatch'] = '^.*\/'.$id;
+ search($data,$conf['datadir'],'search_universal',$opts,$nsd);
+
+ // add back to upper
+ if($ns){
+ array_unshift($data,array(
+ 'id' => getNS($ns),
+ 'type' => 'u',
+ ));
+ }
+ }
- if(!count($data)){
- echo $lang['nothingfound'];
- exit;
- }
+ // fixme sort results in a useful way ?
- // output the found data
- $even = 1;
- foreach($data as $item){
- $even *= -1; //zebra
+ if(!count($data)){
+ echo $lang['nothingfound'];
+ exit;
+ }
- if(($item['type'] == 'd' || $item['type'] == 'u') && $item['id']) $item['id'] .= ':';
- $link = wl($item['id']);
+ // output the found data
+ $even = 1;
+ foreach($data as $item){
+ $even *= -1; //zebra
- echo '<div class="'.(($even > 0)?'even':'odd').' type_'.$item['type'].'">';
+ if(($item['type'] == 'd' || $item['type'] == 'u') && $item['id']) $item['id'] .= ':';
+ $link = wl($item['id']);
+ echo '<div class="'.(($even > 0)?'even':'odd').' type_'.$item['type'].'">';
- if($item['type'] == 'u'){
- $name = $lang['upperns'];
- }else{
- $name = htmlspecialchars($item['id']);
- }
+ if($item['type'] == 'u'){
+ $name = $lang['upperns'];
+ }else{
+ $name = htmlspecialchars($item['id']);
+ }
- echo '<a href="'.$link.'" title="'.htmlspecialchars($item['id']).'" class="wikilink1">'.$name.'</a>';
+ echo '<a href="'.$link.'" title="'.htmlspecialchars($item['id']).'" class="wikilink1">'.$name.'</a>';
- if($item['title']){
- echo '<span>'.htmlspecialchars($item['title']).'</span>';
+ if($item['title']){
+ echo '<span>'.htmlspecialchars($item['title']).'</span>';
+ }
+ echo '</div>';
}
- echo '</div>';
- }
}
diff --git a/lib/exe/css.php b/lib/exe/css.php
index e64ebc22a..4db81de0b 100644
--- a/lib/exe/css.php
+++ b/lib/exe/css.php
@@ -122,6 +122,9 @@ function css_out(){
// apply style replacements
$css = css_applystyle($css,$tplinc);
+
+ // place all @import statements at the top of the file
+ $css = css_moveimports($css);
// compress whitespace and comments
if($conf['compress']){
@@ -264,7 +267,8 @@ function css_loadfile($file,$location=''){
$css = io_readFile($file);
if(!$location) return $css;
- $css = preg_replace('#(url\([ \'"]*)((?!/|http://|https://| |\'|"))#','\\1'.$location.'\\3',$css);
+ $css = preg_replace('#(url\([ \'"]*)(?!/|http://|https://| |\'|")#','\\1'.$location,$css);
+ $css = preg_replace('#(@import\s+[\'"])(?!/|http://|https://)#', '\\1'.$location, $css);
return $css;
}
@@ -297,6 +301,29 @@ function css_pluginstyles($mode='screen'){
}
/**
+ * Move all @import statements in a combined stylesheet to the top so they
+ * aren't ignored by the browser.
+ *
+ * @author Gabriel Birke <birke@d-scribe.de>
+ */
+function css_moveimports($css)
+{
+ if(!preg_match_all('/@import\s+(?:url\([^)]+\)|"[^"]+")\s*[^;]*;\s*/', $css, $matches, PREG_OFFSET_CAPTURE)) {
+ return $css;
+ }
+ $newCss = "";
+ $imports = "";
+ $offset = 0;
+ foreach($matches[0] as $match) {
+ $newCss .= substr($css, $offset, $match[1] - $offset);
+ $imports .= $match[0];
+ $offset = $match[1] + strlen($match[0]);
+ }
+ $newCss .= substr($css, $offset);
+ return $imports.$newCss;
+}
+
+/**
* Very simple CSS optimizer
*
* @author Andreas Gohr <andi@splitbrain.org>
diff --git a/lib/images/interwiki/paypal.gif b/lib/images/interwiki/paypal.gif
new file mode 100644
index 000000000..4a063b4a5
--- /dev/null
+++ b/lib/images/interwiki/paypal.gif
Binary files differ
diff --git a/lib/images/interwiki/sb.gif b/lib/images/interwiki/sb.gif
index e272a29b7..8771b346d 100644
--- a/lib/images/interwiki/sb.gif
+++ b/lib/images/interwiki/sb.gif
Binary files differ
diff --git a/lib/plugins/acl/lang/de-informal/lang.php b/lib/plugins/acl/lang/de-informal/lang.php
index fdb6f5a89..e24584a55 100644
--- a/lib/plugins/acl/lang/de-informal/lang.php
+++ b/lib/plugins/acl/lang/de-informal/lang.php
@@ -6,6 +6,7 @@
* @author Juergen Schwarzer <jschwarzer@freenet.de>
* @author Marcel Metz <marcel_metz@gmx.de>
* @author Matthias Schulte <post@lupo49.de>
+ * @author Christian Wichmann <nospam@zone0.de>
*/
$lang['admin_acl'] = 'Zugriffskontrollsystem Management';
$lang['acl_group'] = 'Gruppe';
diff --git a/lib/plugins/acl/lang/de/lang.php b/lib/plugins/acl/lang/de/lang.php
index 0d30fe7a1..3c6bf8cf0 100644
--- a/lib/plugins/acl/lang/de/lang.php
+++ b/lib/plugins/acl/lang/de/lang.php
@@ -17,6 +17,8 @@
* @author Blitzi94@gmx.de
* @author Robert Bogenschneider <robog@GMX.de>
* @author Robert Bogenschneider <robog@gmx.de>
+ * @author Niels Lange <niels@boldencursief.nl>
+ * @author Christian Wichmann <nospam@zone0.de>
*/
$lang['admin_acl'] = 'Zugangsverwaltung';
$lang['acl_group'] = 'Gruppe';
diff --git a/lib/plugins/acl/lang/he/lang.php b/lib/plugins/acl/lang/he/lang.php
index ac00730dd..91025f4b8 100644
--- a/lib/plugins/acl/lang/he/lang.php
+++ b/lib/plugins/acl/lang/he/lang.php
@@ -7,6 +7,7 @@
* @author Dotan Kamber <kamberd@yahoo.com>
* @author Moshe Kaplan <mokplan@gmail.com>
* @author Yaron Yogev <yaronyogev@gmail.com>
+ * @author Yaron Shahrabani <sh.yaron@gmail.com>
*/
$lang['admin_acl'] = 'ניהול רשימת בקרת גישות';
$lang['acl_group'] = 'קבוצה';
diff --git a/lib/plugins/acl/lang/la/help.txt b/lib/plugins/acl/lang/la/help.txt
index ba974f48c..553884c30 100644
--- a/lib/plugins/acl/lang/la/help.txt
+++ b/lib/plugins/acl/lang/la/help.txt
@@ -1,8 +1,8 @@
=== Auxilium: ===
-Hic facultates spatiorum nominis paginarumque addere delereue potes.
+Hic facultates generum paginarumque addere delereue potes.
-Tabella sinistra omnes paginas spatia nominisque ostendit.
+Tabella sinistra omnes paginas generaque ostendit.
His campis mutare facultates electorum Sodalium Gregumque potes.
diff --git a/lib/plugins/acl/lang/la/lang.php b/lib/plugins/acl/lang/la/lang.php
index dd6043602..941de1f79 100644
--- a/lib/plugins/acl/lang/la/lang.php
+++ b/lib/plugins/acl/lang/la/lang.php
@@ -2,25 +2,26 @@
/**
* Latin language file
*
+ * @author Massimiliano Vassalli <vassalli.max@gmail.com>
*/
-$lang['admin_acl'] = 'Aditus Administrationis Aditus';
+$lang['admin_acl'] = 'Administratio Indicis Custodiae Aditus';
$lang['acl_group'] = 'Grex';
$lang['acl_user'] = 'Sodalis';
$lang['acl_perms'] = 'Facultas:';
$lang['page'] = 'Pagina';
-$lang['namespace'] = 'Spatium nominis';
+$lang['namespace'] = 'Genus';
$lang['btn_select'] = 'eligere';
$lang['p_user_id'] = 'Sodalis <b class="acluser">%s</b> nunc has facultates paginae "<b class="aclpage">%s</b> habes: <i>%s</i>.';
-$lang['p_user_ns'] = 'Sodalis <b class="acluser">%s</b> nunc has facultates spatio nominis "<b class="aclns">%s</b> habes: <i>%s</i>.';
+$lang['p_user_ns'] = 'Sodalis <b class="acluser">%s</b> nunc has facultates generis "<b class="aclns">%s</b> habes: <i>%s</i>.';
$lang['p_group_id'] = 'Socius\a gregis <b class="aclgroup">%s</b> nunc has facultates paginae "<b class="aclpage">%s</b> habes: <i>%s</i>.';
-$lang['p_group_ns'] = 'Socius\a gregis <b class="aclgroup">%s</b> nunc has facultates paginae "<b class="aclns">%s</b> habes: <i>%s</i>.';
+$lang['p_group_ns'] = 'Socius\a gregis <b class="aclgroup">%s</b> nunc has facultates generis "<b class="aclns">%s</b> habes: <i>%s</i>.';
$lang['p_choose_id'] = '<b>Sodalis grexue</b> in campo insere ut facultates paginae <b class="aclpage">%s</b> uideas.';
-$lang['p_choose_ns'] = '<b>Sodalis grexue</b> in campo insere ut facultates paginae <b class="aclns">%s</b> uideas.';
-$lang['p_inherited'] = 'Caue: hae facultates et huic rei et aliis gregibus uel spatiis nominis legitimae sunt.';
+$lang['p_choose_ns'] = '<b>Sodalis grexue</b> in campo insere ut facultates generis <b class="aclns">%s</b> uideas.';
+$lang['p_inherited'] = 'Caue: hae facultates et huic rei et aliis gregibus uel generibus legitimae sunt.';
$lang['p_isadmin'] = 'Caue: electi greges semper plenum ius habent, eo quod ut magister\stra elegitur.';
-$lang['p_include'] = 'Maiores facultates minores includunt. Creare, onerare uel delere facultates solum spatis nominis, non paginis potes';
-$lang['current'] = 'Communes AAA leges';
-$lang['where'] = 'Pagina/Spatium nominis';
+$lang['p_include'] = 'Maiores facultates minores includunt. Creandi, onerandi uel delendi facultates solum generibus, non paginis sunt.';
+$lang['current'] = 'Communes ICA leges';
+$lang['where'] = 'Pagina/Genus';
$lang['who'] = 'Sodalis/Grex';
$lang['perm'] = 'Facultates';
$lang['acl_perm0'] = 'Nihil';
diff --git a/lib/plugins/acl/lang/ru/help.txt b/lib/plugins/acl/lang/ru/help.txt
index a3c1b4f64..7807105a8 100644
--- a/lib/plugins/acl/lang/ru/help.txt
+++ b/lib/plugins/acl/lang/ru/help.txt
@@ -1,11 +1,7 @@
-=== Краткая справка: ===
+=== Краткая справка ===
-На этой странице вы можете добавить или удалить права доступа к пространствам имён и страницам вашей вики.
-
-На панели слева отображены доступные пространства имён и страницы.
-
-Форма выше позволяет вам просмотреть и изменить права доступа для выбранного пользователя или группы.
-
-Текущие права доступа отображены в таблице ниже. Вы можете использовать её для быстрого удаления или изменения правил.
-
-Прочтение [[doku>acl|официальной документации по ACL]] может помочь вам в полном понимании работы управления правами доступа в «ДокуВики».
+На этой странице вы можете добавить или удалить права доступа к пространствам имён и страницам своей вики.\\
+На панели слева отображены доступные пространства имён и страницы.\\
+Форма выше позволяет вам просмотреть и изменить права доступа для выбранного пользователя или группы.\\
+Текущие права доступа отображены в таблице ниже. Вы можете использовать её для быстрого удаления или изменения правил.\\
+Прочтение [[doku>acl|официальной документации по ACL]] может помочь вам в полном понимании работы управления правами доступа в «ДокуВики».
diff --git a/lib/plugins/acl/lang/ru/lang.php b/lib/plugins/acl/lang/ru/lang.php
index 0c02dfbb1..f49e4b55a 100644
--- a/lib/plugins/acl/lang/ru/lang.php
+++ b/lib/plugins/acl/lang/ru/lang.php
@@ -19,7 +19,7 @@ $lang['acl_group'] = 'Группа';
$lang['acl_user'] = 'Пользователь';
$lang['acl_perms'] = 'Права доступа для';
$lang['page'] = 'Страница';
-$lang['namespace'] = 'Пространство имен';
+$lang['namespace'] = 'Пространство имён';
$lang['btn_select'] = 'Выбрать';
$lang['p_user_id'] = 'Сейчас пользователь <b class="acluser">%s</b> имеет следующие права на доступ к странице <b class="aclpage">%s</b>: <i>%s</i>.';
$lang['p_user_ns'] = 'Сейчас пользователь <b class="acluser">%s</b> имеет следующие права на доступ к пространству имён <b class="aclns">%s</b>: <i>%s</i>.';
diff --git a/lib/plugins/acl/lang/sl/lang.php b/lib/plugins/acl/lang/sl/lang.php
index 32141fbce..f6dec25ef 100644
--- a/lib/plugins/acl/lang/sl/lang.php
+++ b/lib/plugins/acl/lang/sl/lang.php
@@ -4,14 +4,29 @@
*
* @author Dejan Levec <webphp@gmail.com>
* @author Boštjan Seničar <senicar@gmail.com>
+ * @author Gregor Skumavc (grega.skumavc@gmail.com)
*/
+$lang['admin_acl'] = 'ACL administracija';
$lang['acl_group'] = 'Skupina';
$lang['acl_user'] = 'Uporabnik';
$lang['acl_perms'] = 'Dovoljenja za';
$lang['page'] = 'Stran';
+$lang['namespace'] = 'Imenski prostor';
$lang['btn_select'] = 'Izberi';
+$lang['p_user_id'] = 'Uporabnik %s ima trenutno naslednje pravice na strani %s: %s.';
+$lang['p_user_ns'] = 'Uporabnik %s ima trenutno naslednje pravice v imenskem prostoru %s: %s.';
+$lang['p_group_id'] = 'Uporabnikka skupina %s ima trenutno naslednje pravice na strani %s: %s.';
+$lang['p_group_ns'] = 'Uporabniška skupina %s ima trenutno naslednje pravice v imenskem prostoru %s: %s.';
+$lang['p_choose_id'] = 'Prosimo vnesite <b>uporabnika ali skupino</b> v zgornji obrazec za ogled ali urejanje pravic za stran %s.';
+$lang['p_choose_ns'] = 'Prosimo vnesite <b>uporabnika ali skupino</b> v zgornji obrazec za ogled ali urejanje pravic za imenski prostor %s.';
+$lang['p_inherited'] = 'Opomba: Te pravice niso bile posebej nastavljene, temveč prevzete iz drugih skupin ali višjih imenskih prostorov.';
+$lang['p_isadmin'] = 'Opomba: Izbrana skupina ali uporabnik imajo vedno vse pravice, ker so določeni kot superuporabniki.';
+$lang['p_include'] = 'Višje pravice vključujejo tudi nižje. ';
+$lang['current'] = 'Trenutna ACL pravila';
+$lang['where'] = 'Stran / Imenski prostor';
$lang['who'] = 'Uporabnik/Skupina';
$lang['perm'] = 'Dovoljenja';
+$lang['acl_perm0'] = 'Nič';
$lang['acl_perm1'] = 'Preberi';
$lang['acl_perm2'] = 'Uredi';
$lang['acl_perm4'] = 'Ustvari';
diff --git a/lib/plugins/config/lang/ar/lang.php b/lib/plugins/config/lang/ar/lang.php
index 5d0ff76b9..26cc16e5c 100644
--- a/lib/plugins/config/lang/ar/lang.php
+++ b/lib/plugins/config/lang/ar/lang.php
@@ -116,6 +116,7 @@ $lang['rss_update'] = 'تحديث تلقيم XML (ثوان)';
$lang['recent_days'] = 'مدة إبقاء أحدث التغييرات (ايام)';
$lang['rss_show_summary'] = 'تلقيم XML يظهر ملخصا في العنوان';
$lang['target____wiki'] = 'النافذة الهدف للروابط الداخلية';
+$lang['target____interwiki'] = 'النافذة الهدف للروابط الممرة interwiki';
$lang['target____extern'] = 'النافذة الهدف للروابط الخارجية';
$lang['target____media'] = 'النافذة الهدف لروابط الوسائط';
$lang['target____windows'] = 'النافذة الهدف لروابط النوافذ';
@@ -124,6 +125,7 @@ $lang['proxy____port'] = 'منفذ الوكيل';
$lang['proxy____user'] = 'اسم مستخدم الوكيل';
$lang['proxy____pass'] = 'كلمة سر الوكيل';
$lang['proxy____ssl'] = 'استخدم ssl للاتصال بالوكيل';
+$lang['proxy____except'] = 'تعبير شرطي لمقابلة العناوين التي ستتجاوز البروكسي.';
$lang['safemodehack'] = 'مكّن hack الوضع الآمن';
$lang['ftp____host'] = 'خادوم FTP ل hack الوضع الآمن';
$lang['ftp____port'] = 'منفذ FTP ل hack الوضع الآمن';
@@ -136,6 +138,7 @@ $lang['typography_o_1'] = 'استبعاد الاقتباس المفرد';
$lang['typography_o_2'] = 'تضمين علامات اقتباس مفردة (قد لا يعمل دائما)';
$lang['userewrite_o_0'] = 'لاشيء';
$lang['userewrite_o_1'] = '.htaccess';
+$lang['userewrite_o_2'] = 'دو';
$lang['deaccent_o_0'] = 'معطل';
$lang['gdlib_o_0'] = 'مكتبة GD غير متوفرة';
$lang['gdlib_o_1'] = 'الاصدار 1.x';
@@ -156,11 +159,15 @@ $lang['compression_o_0'] = 'لا شيء';
$lang['compression_o_gz'] = 'gzip';
$lang['compression_o_bz2'] = 'bz2';
$lang['xsendfile_o_0'] = 'لا تستخدم';
+$lang['xsendfile_o_1'] = 'ترويسة lighttpd مملوكة (قبل الاصدار 1.5)';
+$lang['xsendfile_o_2'] = 'ترويسة X-Sendfile قياسية';
+$lang['xsendfile_o_3'] = 'ترويسة Nginx X-Accel-Redirect مملوكة';
$lang['showuseras_o_loginname'] = 'اسم الدخول';
$lang['showuseras_o_username'] = 'اسم المستخدم الكامل';
$lang['showuseras_o_email'] = 'عنوان بريد المستخدم (مبهم تبعا لاعدادات حارس_البريد)';
$lang['showuseras_o_email_link'] = 'عنوان بريد المستخدم كـ مالتيو: رابط';
$lang['useheading_o_0'] = 'أبدا';
-$lang['useheading_o_navigation'] = 'ال';
+$lang['useheading_o_navigation'] = 'التنقل فقط';
$lang['useheading_o_content'] = 'محتوى الويكي فقط';
$lang['useheading_o_1'] = 'دائما';
+$lang['readdircache'] = 'المدة القصوى لتخزين ';
diff --git a/lib/plugins/config/lang/de-informal/lang.php b/lib/plugins/config/lang/de-informal/lang.php
index 01beeeeb9..f6ddaa8e9 100644
--- a/lib/plugins/config/lang/de-informal/lang.php
+++ b/lib/plugins/config/lang/de-informal/lang.php
@@ -6,6 +6,7 @@
* @author Juergen Schwarzer <jschwarzer@freenet.de>
* @author Marcel Metz <marcel_metz@gmx.de>
* @author Matthias Schulte <post@lupo49.de>
+ * @author Christian Wichmann <nospam@zone0.de>
*/
$lang['menu'] = 'Einstellungen';
$lang['error'] = 'Einstellungen wurden nicht aktualisiert auf Grund eines ungültigen Wertes. Bitte überprüfe deine Änderungen und versuche es erneut.<br />Die/der ungültige(n) Wert(e) werden durch eine rote Umrandung hervorgehoben.';
@@ -102,6 +103,7 @@ $lang['fetchsize'] = 'Maximale Größe (in Bytes), die fetch.php von
$lang['notify'] = 'Sende Änderungsbenachrichtigungen an diese E-Mail-Adresse.';
$lang['registernotify'] = 'Sende Information bei neu registrierten Benutzern an diese E-Mail-Adresse.';
$lang['mailfrom'] = 'Absenderadresse für automatisch erzeugte E-Mails';
+$lang['mailprefix'] = 'Präfix für E-Mail-Betreff beim automatischen Versand von Benachrichtigungen';
$lang['gzip_output'] = 'Seiten mit gzip komprimiert ausliefern';
$lang['gdlib'] = 'GD Lib Version';
$lang['im_convert'] = 'Pfad zu ImageMagicks Konvertierwerkzeug';
diff --git a/lib/plugins/config/lang/de/lang.php b/lib/plugins/config/lang/de/lang.php
index aa763da03..b26df4993 100644
--- a/lib/plugins/config/lang/de/lang.php
+++ b/lib/plugins/config/lang/de/lang.php
@@ -13,6 +13,8 @@
* @author Blitzi94@gmx.de
* @author Robert Bogenschneider <robog@GMX.de>
* @author Robert Bogenschneider <robog@gmx.de>
+ * @author Niels Lange <niels@boldencursief.nl>
+ * @author Christian Wichmann <nospam@zone0.de>
*/
$lang['menu'] = 'Konfiguration';
$lang['error'] = 'Die Einstellungen wurden wegen einer fehlerhaften Eingabe nicht gespeichert.
@@ -111,6 +113,7 @@ $lang['fetchsize'] = 'Maximale Größe (in Bytes), die fetch.php von
$lang['notify'] = 'Änderungsmitteilungen an diese E-Mail-Adresse versenden';
$lang['registernotify'] = 'Information über neu registrierte Nutzer an diese E-Mail-Adresse senden';
$lang['mailfrom'] = 'Absender-E-Mail-Adresse für automatische Mails';
+$lang['mailprefix'] = 'Präfix für E-Mail-Betreff beim automatischen Versand von Benachrichtigungen';
$lang['gzip_output'] = 'Seiten mit gzip komprimiert ausliefern';
$lang['gdlib'] = 'GD Lib Version';
$lang['im_convert'] = 'Pfad zu ImageMagicks Konvertierwerkzeug';
diff --git a/lib/plugins/config/lang/en/lang.php b/lib/plugins/config/lang/en/lang.php
index a944d6bd7..18bfb56fa 100644
--- a/lib/plugins/config/lang/en/lang.php
+++ b/lib/plugins/config/lang/en/lang.php
@@ -125,6 +125,7 @@ $lang['fetchsize'] = 'Maximum size (bytes) fetch.php may download from extern'
$lang['notify'] = 'Send change notifications to this email address';
$lang['registernotify'] = 'Send info on newly registered users to this email address';
$lang['mailfrom'] = 'Email address to use for automatic mails';
+$lang['mailprefix'] = 'Email subject prefix to use for automatic mails';
$lang['gzip_output'] = 'Use gzip Content-Encoding for xhtml';
$lang['gdlib'] = 'GD Lib version';
$lang['im_convert'] = 'Path to ImageMagick\'s convert tool';
diff --git a/lib/plugins/config/lang/he/lang.php b/lib/plugins/config/lang/he/lang.php
index a39d0ab5c..ab4a8928e 100644
--- a/lib/plugins/config/lang/he/lang.php
+++ b/lib/plugins/config/lang/he/lang.php
@@ -7,6 +7,7 @@
* @author Dotan Kamber <kamberd@yahoo.com>
* @author Moshe Kaplan <mokplan@gmail.com>
* @author Yaron Yogev <yaronyogev@gmail.com>
+ * @author Yaron Shahrabani <sh.yaron@gmail.com>
*/
$lang['menu'] = 'הגדרות תצורה';
$lang['error'] = 'ההגדרות לא עודכנו בגלל ערך לא תקף, נא לעיין בשינויים ולשלוח שנית.
diff --git a/lib/plugins/config/lang/la/intro.txt b/lib/plugins/config/lang/la/intro.txt
index d23029ab1..573d34ac1 100644
--- a/lib/plugins/config/lang/la/intro.txt
+++ b/lib/plugins/config/lang/la/intro.txt
@@ -1,6 +1,6 @@
-====== Administrationis Administrator ======
+====== Optionum Administratio ======
-In hac pagina administratoris optiones mutare et inspicere potes. Auxilia in pagina [[doku>config]] sunt, si singulas res uidere uis, i ad paginam [[doku>plugin:config]].
+In hac pagina administratoris optiones mutare et inspicere potes. Auxilia in pagina [[doku>config|conformationis]] sunt, si singulas res uidere uis, i ad paginam [[doku>plugin:config|conformationis]].
Optiones ostensae rubro colore tutae et non nunc mutabiles sunt. Optiones ostensae caeruleo colore praecipuae sunt et optiones ostensae in area alba singulares huic uici sunt. Et caerulae et albae optiones mutabiles sunt.
diff --git a/lib/plugins/config/lang/la/lang.php b/lib/plugins/config/lang/la/lang.php
index ca0eb1c31..689ea004d 100644
--- a/lib/plugins/config/lang/la/lang.php
+++ b/lib/plugins/config/lang/la/lang.php
@@ -2,6 +2,7 @@
/**
* Latin language file
*
+ * @author Massimiliano Vassalli <vassalli.max@gmail.com>
*/
$lang['menu'] = 'Optiones Administrationis';
$lang['error'] = 'Optiones non nouatae ob errores: rursum temptat. Errores rubro colore signati sunt.';
@@ -9,17 +10,17 @@ $lang['updated'] = 'Optiones feliciter nouatae.';
$lang['nochoice'] = '(nulla optio est)';
$lang['locked'] = 'Optio documenti non nouata est, <br/> optiones et facultates documenti inspicis.';
$lang['danger'] = 'CAVE: si has optiones mutabis, in administrationis indicem non inire potes.';
-$lang['warning'] = 'CAVE: si hae optiones mutantur, graues errores erunt.';
-$lang['security'] = 'CAVE: si hae optiones mutantur, graues errores erunt.';
-$lang['_configuration_manager'] = 'Administrationis Administrator';
+$lang['warning'] = 'CAVE: si hae optiones mutabis, graues errores erunt.';
+$lang['security'] = 'CAVE: si hae optiones mutabis, graues errores erunt.';
+$lang['_configuration_manager'] = 'Optionum administratio';
$lang['_header_dokuwiki'] = 'Vicis Optiones';
$lang['_header_plugin'] = 'Addendorum Optiones';
$lang['_header_template'] = 'Vicis Formae Optiones';
$lang['_header_undefined'] = 'Variae Optiones';
-$lang['_basic'] = 'Fundamenti Optiones';
-$lang['_display'] = 'Visiuae Optiones';
+$lang['_basic'] = 'Praecipuae Optiones';
+$lang['_display'] = 'Speciei Optiones';
$lang['_authentication'] = 'Confirmationis Optiones';
-$lang['_anti_spam'] = 'Malorum Optiones';
+$lang['_anti_spam'] = 'In Mala Optiones';
$lang['_editing'] = 'Recensendi Optiones';
$lang['_links'] = 'Nexi Optiones';
$lang['_media'] = 'Visiuorum Optiones';
@@ -70,7 +71,7 @@ $lang['autopasswd'] = 'Tessera machinatione generata';
$lang['authtype'] = 'Confirmationis finis';
$lang['passcrypt'] = 'Ratio tesserae tuendae';
$lang['defaultgroup'] = 'Grex communis';
-$lang['superuser'] = 'Magister\stra - grex, Sodalis uel index diuisus a uigulis sodalis1,@grex,sodalis2 cum plenis facultatibus sine AAA optionum termino';
+$lang['superuser'] = 'Magister\stra - grex, Sodalis uel index diuisus a uigulis sodalis1,@grex,sodalis2 cum plenis facultatibus sine ICA optionum termino';
$lang['manager'] = 'Administrator - grex, Sodalis uel index diuisus a uigulis sodalis1,@grex,sodalis2 cum certis facultatibus';
$lang['profileconfirm'] = 'Mutationes tessera confirmanda sunt';
$lang['disableactions'] = 'Vicis actiones ineptas facere';
@@ -78,14 +79,14 @@ $lang['disableactions_check'] = 'Inspicere';
$lang['disableactions_subscription'] = 'Inscribe/Delere';
$lang['disableactions_wikicode'] = 'Fontem uidere/Rudem transcribere';
$lang['disableactions_other'] = 'Aliae actiones (uirgulis diuisae)';
-$lang['sneaky_index'] = 'Hic uicis omnes spatia nomini in indice inserit. Si ineptam hanc optionem facias, solum ea spatia, quae Sodales uidere possunt, in indice erunt. Hoc suggreges et subspatia abscondere potest.';
+$lang['sneaky_index'] = 'Hic uicis omnia genera in indice inserit. Si ineptam hanc optionem facias, solum ea, quae Sodales uidere possunt, in indice erunt. Hoc suggreges et suggenera abscondere potest.';
$lang['auth_security_timeout'] = 'Confirmationis Tempus (secundis)';
$lang['securecookie'] = 'Formulae HTTPS mittine solum per HTTPS possunt? Ineptam hanc optio facias, si accessus uicis tutus est, sed interretis non.';
$lang['xmlrpc'] = 'Aptam\Ineptam XML-RPC administrationem facere';
$lang['xmlrpcuser'] = 'Accessus XML-RPC gregibus uel Sodalibus in hoc indice astringere. Nihil scribere ut omnes accessum habeant';
$lang['updatecheck'] = 'Nouationes et fiducias inspicerene? Hic uicis connectere splitbrain.org debes.';
$lang['userewrite'] = 'VRL formosis uti';
-$lang['useslash'] = 'Repagula ut spatium nominis diuidas uti';
+$lang['useslash'] = 'Repagula in URL, ut genera diuidas, uti';
$lang['usedraft'] = 'Propositum in recensione machinatione seruatur';
$lang['sepchar'] = 'Signum, quod paginas diuidit';
$lang['canonical'] = 'VRL perfecto uti';
@@ -99,7 +100,7 @@ $lang['notify'] = 'Adnotationis mutationes ad hunc cursum mittere
$lang['registernotify'] = 'De nouis Sodalibus ad hunc cursum notas mittere';
$lang['mailfrom'] = 'Cursus interretialis, quo in cursibus uti';
$lang['gzip_output'] = 'gzip Argumentum-Codificans xhtml uti';
-$lang['gdlib'] = 'GD Lib uersio';
+$lang['gdlib'] = 'GD Lib forma';
$lang['im_convert'] = 'Domicilium machinae ImageMagick\'s';
$lang['jpg_quality'] = 'JPG compressio colorum (0-100)';
$lang['subscribers'] = 'Inscriptionis paginarum auxilium aptus facere';
@@ -148,7 +149,7 @@ $lang['deaccent_o_0'] = 'ex';
$lang['deaccent_o_1'] = 'accentum tollere';
$lang['deaccent_o_2'] = 'Latinis litteris';
$lang['gdlib_o_0'] = 'GD Lib inepta';
-$lang['gdlib_o_1'] = 'Versio 1.x';
+$lang['gdlib_o_1'] = 'Forma 1.x';
$lang['gdlib_o_2'] = 'Machinatione inspicere';
$lang['rss_type_o_rss'] = 'RSS 0.91';
$lang['rss_type_o_rss1'] = 'RSS 1.0';
diff --git a/lib/plugins/config/lang/ru/intro.txt b/lib/plugins/config/lang/ru/intro.txt
index c66a69e64..a629d9332 100644
--- a/lib/plugins/config/lang/ru/intro.txt
+++ b/lib/plugins/config/lang/ru/intro.txt
@@ -1,9 +1,9 @@
====== Настройки вики ======
-Здесь вы можете изменить настройки вашей «ДокуВики». Для справки по поводу конкретных опций смотрите [[doku>config]]. Дополнительные детали об этом плагине доступны здесь: [[doku>plugin:config]].
+Здесь вы можете изменить настройки своей «ДокуВики». Для справки по поводу конкретных опций смотрите [[doku>config]]. Дополнительные детали об этом плагине доступны здесь: [[doku>plugin:config]].
Настройки, отображаемые на светло-красном фоне, защищены от изменений и не могут быть отредактированы с помощью этого плагина. Голубым фоном отмечены настройки со значениями по умолчанию, а белым фоном — настройки, которые были локально изменены для этой конкретной «ДокуВики». Как голубые, так и белые настройки доступны для изменения.
-Не забудьте нажать кнопку **Сохранить** перед тем, как покинуть эту страницу, иначе все ваши изменения будут потеряны.
+Не забудьте нажать кнопку «**Сохранить**» перед тем, как покинуть эту страницу, иначе все ваши изменения будут потеряны.
diff --git a/lib/plugins/config/lang/ru/lang.php b/lib/plugins/config/lang/ru/lang.php
index 167c54eea..5e624eda0 100644
--- a/lib/plugins/config/lang/ru/lang.php
+++ b/lib/plugins/config/lang/ru/lang.php
@@ -16,11 +16,10 @@
* @author Aleksandr Selivanov <alexgearbox@gmail.com>
*/
$lang['menu'] = 'Настройки вики';
-$lang['error'] = 'Настройки не были сохранены из-за ошибки в одном из значений. Пожалуйста, проверьте ваши изменения и попробуйте еще раз.<br />Неправильные значения будут обведены красной рамкой.';
+$lang['error'] = 'Настройки не были сохранены из-за ошибки в одном из значений. Пожалуйста, проверьте свои изменения и попробуйте ещё раз.<br />Неправильные значения будут обведены красной рамкой.';
$lang['updated'] = 'Настройки успешно сохранены.';
$lang['nochoice'] = '(нет других вариантов)';
-$lang['locked'] = 'Файл настройки недоступен для изменения. Если это не специально, <br />
-убедитесь, что файл локальной настройки имеет правильное имя и права доступа.';
+$lang['locked'] = 'Файл настройки недоступен для изменения. Если это не специально, <br />убедитесь, что файл локальной настройки имеет правильное имя и права доступа.';
$lang['danger'] = 'Внимание: изменение этой опции может сделать вашу вики и меню конфигурации недоступными.';
$lang['warning'] = 'Предостережение: изменение этой опции может вызвать непредсказуемое поведение.';
$lang['security'] = 'Предостережение по безопасности: изменение этой опции может вызвать риск, связанный с безопасностью.';
@@ -63,7 +62,7 @@ $lang['phpok'] = 'Разрешить PHP';
$lang['dformat'] = 'Формат даты и времени';
$lang['signature'] = 'Шаблон подписи';
$lang['toptoclevel'] = 'Мин. уровень в содержании';
-$lang['tocminheads'] = 'Минимальное количество заголовков, при котором будет составлено содержание';
+$lang['tocminheads'] = 'Мин. количество заголовков, при котором будет составлено содержание';
$lang['maxtoclevel'] = 'Макс. уровень в содержании';
$lang['maxseclevel'] = 'Макс. уровень для правки';
$lang['camelcase'] = 'Использовать ВикиРегистр для ссылок';
@@ -84,22 +83,22 @@ $lang['authtype'] = 'Механизм аутентификации'
$lang['passcrypt'] = 'Метод шифрования пароля';
$lang['defaultgroup'] = 'Группа по умолчанию';
$lang['superuser'] = 'Суперпользователь — группа или пользователь с полным доступом ко всем страницам и функциям администрирования, независимо от установок ACL. Перечень разделяйте запятыми: user1,@group1,user2';
-$lang['manager'] = 'Менеджер — группа или пользователь с доступом к определенным функциям управления. Перечень разделяйте запятыми: user1,@group1,user2';
+$lang['manager'] = 'Менеджер — группа или пользователь с доступом к определённым функциям управления. Перечень разделяйте запятыми: user1,@group1,user2';
$lang['profileconfirm'] = 'Пароль для изменения профиля';
$lang['disableactions'] = 'Заблокировать операции «ДокуВики»';
$lang['disableactions_check'] = 'Проверка';
$lang['disableactions_subscription'] = 'Подписка/Отмена подписки';
$lang['disableactions_wikicode'] = 'Показ/экспорт исходного текста';
$lang['disableactions_other'] = 'Другие операции (через запятую)';
-$lang['sneaky_index'] = 'По умолчанию, «ДокуВики» показывает в индексе страниц все пространства имен. Включение этой опции скроет пространства имен, для которых пользователь не имеет прав чтения. Это может привести к скрытию доступных вложенных пространств имен и потере функциональности индекса страниц при некоторых конфигурациях прав доступа.';
+$lang['sneaky_index'] = 'По умолчанию, «ДокуВики» показывает в индексе страниц все пространства имён. Включение этой опции скроет пространства имён, для которых пользователь не имеет прав чтения. Это может привести к скрытию доступных вложенных пространств имён и потере функциональности индекса страниц при некоторых конфигурациях прав доступа.';
$lang['auth_security_timeout'] = 'Интервал для безопасности авторизации (сек.)';
$lang['securecookie'] = 'Должны ли куки (cookies), выставленные через HTTPS, отправляться браузером только через HTTPS. Отключите эту опцию в случае, когда только логин вашей вики передаётся через SSL, а обычный просмотр осуществляется в небезопасном режиме.';
$lang['xmlrpc'] = 'Включить/выключить XML-RPC интерфейс.';
-$lang['xmlrpcuser'] = 'Запретить XML-RPC доступ для списка групп и пользователей, перечисленных через запятую. Оставьте пустым, если хотите оставить доступ всем.';
-$lang['updatecheck'] = 'Проверять наличие обновлений и предупреждений о безопасности? Для этого «ДокуВики» потребуется связываться со <a href="http://www.splitbrain.org/">splitbrain.org</a>.';
+$lang['xmlrpcuser'] = 'Запретить XML-RPC-доступ для списка групп и пользователей, перечисленных через запятую. Оставьте пустым, если хотите оставить доступ всем.';
+$lang['updatecheck'] = 'Проверять наличие обновлений и предупреждений о безопасности? Для этого «ДокуВики» потребуется связываться с сайтом <a href="http://www.splitbrain.org/">splitbrain.org</a>.';
$lang['userewrite'] = 'Удобочитаемые адреса (URL)';
$lang['useslash'] = 'Использовать слэш';
-$lang['usedraft'] = 'Автоматически сохранять черновик в время правки';
+$lang['usedraft'] = 'Автоматически сохранять черновик во время правки';
$lang['sepchar'] = 'Разделитель слов в имени страницы';
$lang['canonical'] = 'Полные канонические адреса (URL)';
$lang['fnencode'] = 'Метод кодирования имён файлов, записанных не ASCII-символами.';
@@ -114,15 +113,15 @@ $lang['mailfrom'] = 'Электронный адрес вики (О
$lang['gzip_output'] = 'Использовать gzip-сжатие для xhtml';
$lang['gdlib'] = 'Версия LibGD';
$lang['im_convert'] = 'Путь к ImageMagick';
-$lang['jpg_quality'] = 'Качество сжатия JPG (0–100). Значение о умолчнию — 70.';
+$lang['jpg_quality'] = 'Качество сжатия JPG (0–100). Значение по умолчанию — 70.';
$lang['subscribers'] = 'Разрешить подписку на изменения';
-$lang['subscribe_time'] = 'Интервал рассылки подписок и сводок (сек.); Должен быть меньше, чем значение, указанное в recent_days.';
+$lang['subscribe_time'] = 'Интервал рассылки подписок и сводок (сек.). Должен быть меньше, чем значение, указанное в recent_days.';
$lang['compress'] = 'Сжимать файлы CSS и javascript';
$lang['hidepages'] = 'Скрыть страницы (рег. выражение)';
$lang['send404'] = 'Посылать «HTTP404/Page Not Found»';
$lang['sitemap'] = 'Число дней, через которое нужно создавать (обновлять) карту сайта для поисковиков (Гугл, Яндекс и др.)';
$lang['broken_iua'] = 'Возможно, функция ignore_user_abort не работает в вашей системе? Это может привести к потере функциональности индексирования поиска. Эта проблема присутствует, например, в IIS+PHP/CGI. Для дополнительной информации смотрите <a href="http://bugs.splitbrain.org/?do=details&amp;task_id=852">баг 852</a>.';
-$lang['xsendfile'] = 'Используете заголовок X-Sendfile для загрузки файлов на вебсервер? Ваш вебсервер должен поддерживать это.';
+$lang['xsendfile'] = 'Используете заголовок X-Sendfile для загрузки файлов на веб-сервер? Ваш веб-сервер должен поддерживать это.';
$lang['renderer_xhtml'] = 'Обработчик основного (xhtml) вывода вики';
$lang['renderer__core'] = '%s (ядро dokuwiki)';
$lang['renderer__plugin'] = '%s (плагин)';
@@ -138,18 +137,18 @@ $lang['target____interwiki'] = 'target для ссылок между вики
$lang['target____extern'] = 'target для внешних ссылок';
$lang['target____media'] = 'target для ссылок на медиафайлы';
$lang['target____windows'] = 'target для ссылок на сетевые каталоги';
-$lang['proxy____host'] = 'proxy - адрес';
-$lang['proxy____port'] = 'proxy - порт';
-$lang['proxy____user'] = 'proxy - имя пользователя';
-$lang['proxy____pass'] = 'proxy - пароль';
-$lang['proxy____ssl'] = 'proxy - ssl';
+$lang['proxy____host'] = 'proxy-адрес';
+$lang['proxy____port'] = 'proxy-порт';
+$lang['proxy____user'] = 'proxy-имя пользователя';
+$lang['proxy____pass'] = 'proxy-пароль';
+$lang['proxy____ssl'] = 'proxy-ssl';
$lang['proxy____except'] = 'Регулярное выражение для адресов (URL), для которых прокси должен быть пропущен.';
$lang['safemodehack'] = 'Включить обход safemode (хак)';
-$lang['ftp____host'] = 'ftp - адрес';
-$lang['ftp____port'] = 'ftp - порт';
-$lang['ftp____user'] = 'ftp - имя пользователя';
-$lang['ftp____pass'] = 'ftp - пароль';
-$lang['ftp____root'] = 'ftp - корневая директория';
+$lang['ftp____host'] = 'ftp-адрес';
+$lang['ftp____port'] = 'ftp-порт';
+$lang['ftp____user'] = 'ftp-имя пользователя';
+$lang['ftp____pass'] = 'ftp-пароль';
+$lang['ftp____root'] = 'ftp-корневая директория';
$lang['license_o_'] = 'Не выбрано';
$lang['typography_o_0'] = 'нет';
$lang['typography_o_1'] = 'Только двойные кавычки';
@@ -185,10 +184,10 @@ $lang['xsendfile_o_2'] = 'Стандартный заголовок X-Se
$lang['xsendfile_o_3'] = 'Проприетарный заголовок Nginx X-Accel-Redirect';
$lang['showuseras_o_loginname'] = 'Логин';
$lang['showuseras_o_username'] = 'Полное имя пользователя';
-$lang['showuseras_o_email'] = 'Адрес электронной почты пользователя (зашифрован согласно настройкам mailguard)';
-$lang['showuseras_o_email_link'] = 'Адрес электронной почты пользователя в виде ссылки mailto:';
+$lang['showuseras_o_email'] = 'Адрес электропочты в шифрованном виде (см. mailguard)';
+$lang['showuseras_o_email_link'] = 'Адрес электропочты в виде ссылки mailto:';
$lang['useheading_o_0'] = 'Никогда';
$lang['useheading_o_navigation'] = 'Только навигация';
$lang['useheading_o_content'] = 'Только содержимое вики';
$lang['useheading_o_1'] = 'Всегда';
-$lang['readdircache'] = 'Максимальное время жизни кэша readdir (сек)';
+$lang['readdircache'] = 'Максимальное время жизни кэша readdir (сек.)';
diff --git a/lib/plugins/config/lang/sl/lang.php b/lib/plugins/config/lang/sl/lang.php
index 52b88a053..5b5b3d3d8 100644
--- a/lib/plugins/config/lang/sl/lang.php
+++ b/lib/plugins/config/lang/sl/lang.php
@@ -4,6 +4,7 @@
*
* @author Dejan Levec <webphp@gmail.com>
* @author Boštjan Seničar <senicar@gmail.com>
+ * @author Gregor Skumavc (grega.skumavc@gmail.com)
*/
$lang['lang'] = 'Jezik';
$lang['template'] = 'Predloga';
diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php
index c2c3a2d0c..f5eb1da18 100644
--- a/lib/plugins/config/settings/config.metadata.php
+++ b/lib/plugins/config/settings/config.metadata.php
@@ -177,6 +177,7 @@ $meta['canonical'] = array('onoff');
$meta['fnencode'] = array('multichoice','_choices' => array('url','safe','utf-8'));
$meta['autoplural'] = array('onoff');
$meta['mailfrom'] = array('richemail');
+$meta['mailprefix'] = array('string');
$meta['compress'] = array('onoff');
$meta['gzip_output'] = array('onoff');
$meta['hidepages'] = array('string');
diff --git a/lib/plugins/plugin/lang/de-informal/lang.php b/lib/plugins/plugin/lang/de-informal/lang.php
index 65050b896..3ba729fd6 100644
--- a/lib/plugins/plugin/lang/de-informal/lang.php
+++ b/lib/plugins/plugin/lang/de-informal/lang.php
@@ -6,6 +6,7 @@
* @author Juergen Schwarzer <jschwarzer@freenet.de>
* @author Marcel Metz <marcel_metz@gmx.de>
* @author Matthias Schulte <post@lupo49.de>
+ * @author Christian Wichmann <nospam@zone0.de>
*/
$lang['menu'] = 'Plugins verwalten';
$lang['download'] = 'Herunterladen und installieren einer neuen Erweiterung';
diff --git a/lib/plugins/plugin/lang/de/lang.php b/lib/plugins/plugin/lang/de/lang.php
index e981f4a60..6f785168b 100644
--- a/lib/plugins/plugin/lang/de/lang.php
+++ b/lib/plugins/plugin/lang/de/lang.php
@@ -14,6 +14,8 @@
* @author Blitzi94@gmx.de
* @author Robert Bogenschneider <robog@GMX.de>
* @author Robert Bogenschneider <robog@gmx.de>
+ * @author Niels Lange <niels@boldencursief.nl>
+ * @author Christian Wichmann <nospam@zone0.de>
*/
$lang['menu'] = 'Plugins verwalten';
$lang['download'] = 'Neues Plugin herunterladen und installieren';
diff --git a/lib/plugins/plugin/lang/he/lang.php b/lib/plugins/plugin/lang/he/lang.php
index c6e462193..47253e335 100644
--- a/lib/plugins/plugin/lang/he/lang.php
+++ b/lib/plugins/plugin/lang/he/lang.php
@@ -7,6 +7,7 @@
* @author Dotan Kamber <kamberd@yahoo.com>
* @author Moshe Kaplan <mokplan@gmail.com>
* @author Yaron Yogev <yaronyogev@gmail.com>
+ * @author Yaron Shahrabani <sh.yaron@gmail.com>
*/
$lang['menu'] = 'ניהול הרחבות';
$lang['download'] = 'הורדת והתקנת הרחבה חדשה';
diff --git a/lib/plugins/plugin/lang/la/admin_plugin.txt b/lib/plugins/plugin/lang/la/admin_plugin.txt
index 1a361140c..2a41977fc 100644
--- a/lib/plugins/plugin/lang/la/admin_plugin.txt
+++ b/lib/plugins/plugin/lang/la/admin_plugin.txt
@@ -1,3 +1,3 @@
====== Addendorum Administratio ======
-In hac pagina omnia uicis [[doku>plugins|plugins]] mutare et administrare potes. Ut addenda capere et his uti, in scrinio addendorum scribere et legere potest. \ No newline at end of file
+In hac pagina omnia uicis [[doku>plugins|plugins]] mutare et administrare potes. Vt addenda capere et his uti, in scrinio addendorum scribere et legere potest. \ No newline at end of file
diff --git a/lib/plugins/plugin/lang/la/lang.php b/lib/plugins/plugin/lang/la/lang.php
index 021dc84d5..cd2d81cbd 100644
--- a/lib/plugins/plugin/lang/la/lang.php
+++ b/lib/plugins/plugin/lang/la/lang.php
@@ -2,8 +2,9 @@
/**
* Latin language file
*
+ * @author Massimiliano Vassalli <vassalli.max@gmail.com>
*/
-$lang['menu'] = 'Administrationis addenda';
+$lang['menu'] = 'Addendorum administratio';
$lang['download'] = 'Noua addenda cape';
$lang['manage'] = 'Addenta in usu';
$lang['btn_info'] = 'Notae';
diff --git a/lib/plugins/plugin/lang/pt-br/admin_plugin.txt b/lib/plugins/plugin/lang/pt-br/admin_plugin.txt
index 1809bb585..9e49f5136 100644
--- a/lib/plugins/plugin/lang/pt-br/admin_plugin.txt
+++ b/lib/plugins/plugin/lang/pt-br/admin_plugin.txt
@@ -1,3 +1,3 @@
====== Gerenciamento de Plug-ins ======
-Nesta página você pode gerenciar tudo relacionado aos [[doku>plug-ins|plug-ins]] do DokuWiki. Para você baixar e instalar um plug-in o servidor web deve ter permissão de escrita na pasta onde ficam os plug-ins.
+Nesta página você pode gerenciar tudo relacionado aos [[doku>plugins|plug-ins]] do DokuWiki. Para você baixar e instalar um plug-in o servidor web deve ter permissão de escrita na pasta onde ficam os plug-ins.
diff --git a/lib/plugins/plugin/lang/ru/lang.php b/lib/plugins/plugin/lang/ru/lang.php
index a33f95418..ed1fc22b3 100644
--- a/lib/plugins/plugin/lang/ru/lang.php
+++ b/lib/plugins/plugin/lang/ru/lang.php
@@ -30,11 +30,11 @@ $lang['lastupdate'] = 'Последнее обновление:';
$lang['source'] = 'Источник:';
$lang['unknown'] = 'неизвестно';
$lang['updating'] = 'Обновление...';
-$lang['updated'] = 'Плагин %s успешно обновлен';
+$lang['updated'] = 'Плагин %s успешно обновлён';
$lang['updates'] = 'Следующие плагины были успешно обновлены';
$lang['update_none'] = 'Обновления не найдены.';
$lang['deleting'] = 'Удаление...';
-$lang['deleted'] = 'Плагин %s удален.';
+$lang['deleted'] = 'Плагин %s удалён.';
$lang['downloading'] = 'Скачивание...';
$lang['downloaded'] = 'Плагин %s успешно установлен';
$lang['downloads'] = 'Следующие плагины были успешно установлены:';
@@ -50,9 +50,9 @@ $lang['author'] = 'Автор:';
$lang['www'] = 'Странца:';
$lang['error'] = 'Произошла неизвестная ошибка.';
$lang['error_download'] = 'Не могу скачать файл плагина: %s';
-$lang['error_badurl'] = 'Возможно, неправильный адрес — не могу определить имя файла из адреса';
+$lang['error_badurl'] = 'Возможно неправильный адрес — не могу определить имя файла из адреса';
$lang['error_dircreate'] = 'Не могу создать временную директорию для скачивания';
-$lang['error_decompress'] = 'Менеджеру плагинов не удалось распаковать скачанный файл. Это может быть результатом ошибки при скачивании, в этом случае вы можете попробовать снова; или же плагин упакован неизвестным архиватором, тогда вам необходимо скачать и установить плагин вручную.';
+$lang['error_decompress'] = 'Менеджеру плагинов не удалось распаковать скачанный файл. Это может быть результатом ошибки при скачивании, в этом случае вы можете попробовать снова, или же плагин упакован неизвестным архиватором, тогда вам необходимо скачать и установить плагин вручную.';
$lang['error_copy'] = 'Произошла ошибка копирования при попытке установки файлов для плагина <em>%s</em>: переполнение диска или неправильные права доступа. Это могло привести к частичной установке плагина и неустойчивости вашей вики.';
$lang['error_delete'] = 'Произошла ошибка при попытке удалить плагин <em>%s</em>. Наиболее вероятно, что нет необходимых прав доступа к файлам или директориям';
$lang['enabled'] = 'Плагин %s включён.';
diff --git a/lib/plugins/plugin/lang/sl/lang.php b/lib/plugins/plugin/lang/sl/lang.php
index 9423e4e75..41d857979 100644
--- a/lib/plugins/plugin/lang/sl/lang.php
+++ b/lib/plugins/plugin/lang/sl/lang.php
@@ -4,6 +4,7 @@
*
* @author Dejan Levec <webphp@gmail.com>
* @author Boštjan Seničar <senicar@gmail.com>
+ * @author Gregor Skumavc (grega.skumavc@gmail.com)
*/
$lang['btn_delete'] = 'Izbriši';
$lang['btn_settings'] = 'Nastavitve';
diff --git a/lib/plugins/popularity/action.php b/lib/plugins/popularity/action.php
new file mode 100644
index 000000000..bf11efba6
--- /dev/null
+++ b/lib/plugins/popularity/action.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Popularity Feedback Plugin
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ */
+
+require_once(DOKU_PLUGIN.'action.php');
+require_once(DOKU_PLUGIN.'popularity/admin.php');
+
+class action_plugin_popularity extends Dokuwiki_Action_Plugin {
+ var $helper;
+
+ function action_plugin_popularity(){
+ $this->helper = $this->loadHelper('popularity', false);
+ }
+
+ /**
+ * Register its handlers with the dokuwiki's event controller
+ */
+ function register(&$controller) {
+ $controller->register_hook('INDEXER_TASKS_RUN', 'AFTER', $this, '_autosubmit', array());
+ }
+
+ function _autosubmit(&$event, $param){
+ //Do we have to send the data now
+ if ( !$this->helper->isAutosubmitEnabled() || $this->_isTooEarlyToSubmit() ){
+ return;
+ }
+
+ //Actually send it
+ $status = $this->helper->sendData( $this->helper->gatherAsString() );
+
+
+ if ( $status !== '' ){
+ //If an error occured, log it
+ io_saveFile( $this->helper->autosubmitErrorFile, $status );
+ } else {
+ //If the data has been sent successfully, previous log of errors are useless
+ @unlink($this->helper->autosubmitErrorFile);
+ //Update the last time we sent data
+ touch ( $this->helper->autosubmitFile );
+ }
+
+ $event->stopPropagation();
+ $event->preventDefault();
+ }
+
+ /**
+ * Check if it's time to send autosubmit data
+ * (we should have check if autosubmit is enabled first)
+ */
+ function _isTooEarlyToSubmit(){
+ $lastSubmit = $this->helper->lastSentTime();
+ return $lastSubmit + 24*60*60*30 > time();
+ }
+}
diff --git a/lib/plugins/popularity/admin.php b/lib/plugins/popularity/admin.php
index 71ea40799..40c3f5452 100644
--- a/lib/plugins/popularity/admin.php
+++ b/lib/plugins/popularity/admin.php
@@ -13,21 +13,15 @@ if(!defined('DOKU_INC')) die();
* need to inherit from this class
*/
class admin_plugin_popularity extends DokuWiki_Admin_Plugin {
- var $version = '2010-09-17';
+ var $version;
+ var $helper;
+ var $sentStatus = null;
+ function admin_plugin_popularity(){
+ $this->helper = $this->loadHelper('popularity', false);
- /**
- * return some info
- */
- function getInfo(){
- return array(
- 'author' => 'Andreas Gohr',
- 'email' => 'andi@splitbrain.org',
- 'date' => $this->version,
- 'name' => 'Popularity Feedback Plugin',
- 'desc' => 'Send anonymous data about your wiki to the developers.',
- 'url' => 'http://www.dokuwiki.org/plugin:popularity',
- );
+ $pluginInfo = $this->getInfo();
+ $this->version = $pluginInfo['date'];
}
/**
@@ -56,204 +50,99 @@ class admin_plugin_popularity extends DokuWiki_Admin_Plugin {
* handle user request
*/
function handle() {
+ //Send the data
+ if ( isset($_REQUEST['data']) ){
+ $this->sentStatus = $this->helper->sendData( $_REQUEST['data'] );
+ if ( $this->sentStatus === '' ){
+ //Update the last time we sent the data
+ touch ( $this->helper->popularityLastSubmitFile );
+ }
+ //Deal with the autosubmit option
+ $this->_enableAutosubmit( isset($_REQUEST['autosubmit']) );
+ }
}
/**
- * Output HTML form
+ * Enable or disable autosubmit
+ * @param bool $enable If TRUE, it will enable autosubmit. Else, it will disable it.
*/
- function html() {
- echo $this->locale_xhtml('intro');
-
- flush();
- $data = $this->_gather();
- echo '<form method="post" action="http://update.dokuwiki.org/popularity.php" accept-charset="utf-8">';
- echo '<fieldset style="width: 60%;">';
- echo '<textarea class="edit" rows="10" cols="80" readonly="readonly" name="data">';
- foreach($data as $key => $val){
- if(is_array($val)) foreach($val as $v){
- echo hsc($key)."\t".hsc($v)."\n";
- }else{
- echo hsc($key)."\t".hsc($val)."\n";
- }
+ function _enableAutosubmit( $enable ){
+ if ( $enable ){
+ io_saveFile( $this->helper->autosubmitFile, ' ');
+ } else {
+ @unlink($this->helper->autosubmitFile);
}
- echo '</textarea><br />';
- echo '<input type="submit" class="button" value="'.$this->getLang('submit').'"/>';
- echo '</fieldset>';
- echo '</form>';
-
-// dbg($data);
}
-
/**
- * Gather all information
+ * Output HTML form
*/
- function _gather(){
- global $conf;
- global $auth;
- $data = array();
- $phptime = ini_get('max_execution_time');
- @set_time_limit(0);
-
- // version
- $data['anon_id'] = md5(auth_cookiesalt());
- $data['version'] = getVersion();
- $data['popversion'] = $this->version;
- $data['language'] = $conf['lang'];
- $data['now'] = time();
-
- // some config values
- $data['conf_useacl'] = $conf['useacl'];
- $data['conf_authtype'] = $conf['authtype'];
- $data['conf_template'] = $conf['template'];
-
- // number and size of pages
- $list = array();
- search($list,$conf['datadir'],array($this,'_search_count'),'','');
- $data['page_count'] = $list['file_count'];
- $data['page_size'] = $list['file_size'];
- $data['page_biggest'] = $list['file_max'];
- $data['page_smallest'] = $list['file_min'];
- $data['page_nscount'] = $list['dir_count'];
- $data['page_nsnest'] = $list['dir_nest'];
- if($list['file_count']) $data['page_avg'] = $list['file_size'] / $list['file_count'];
- $data['page_oldest'] = $list['file_oldest'];
- unset($list);
-
- // number and size of media
- $list = array();
- search($list,$conf['mediadir'],array($this,'_search_count'),array('all'=>true));
- $data['media_count'] = $list['file_count'];
- $data['media_size'] = $list['file_size'];
- $data['media_biggest'] = $list['file_max'];
- $data['media_smallest'] = $list['file_min'];
- $data['media_nscount'] = $list['dir_count'];
- $data['media_nsnest'] = $list['dir_nest'];
- if($list['file_count']) $data['media_avg'] = $list['file_size'] / $list['file_count'];
- unset($list);
-
- // number and size of cache
- $list = array();
- search($list,$conf['cachedir'],array($this,'_search_count'),array('all'=>true));
- $data['cache_count'] = $list['file_count'];
- $data['cache_size'] = $list['file_size'];
- $data['cache_biggest'] = $list['file_max'];
- $data['cache_smallest'] = $list['file_min'];
- if($list['file_count']) $data['cache_avg'] = $list['file_size'] / $list['file_count'];
- unset($list);
-
- // number and size of index
- $list = array();
- search($list,$conf['indexdir'],array($this,'_search_count'),array('all'=>true));
- $data['index_count'] = $list['file_count'];
- $data['index_size'] = $list['file_size'];
- $data['index_biggest'] = $list['file_max'];
- $data['index_smallest'] = $list['file_min'];
- if($list['file_count']) $data['index_avg'] = $list['file_size'] / $list['file_count'];
- unset($list);
-
- // number and size of meta
- $list = array();
- search($list,$conf['metadir'],array($this,'_search_count'),array('all'=>true));
- $data['meta_count'] = $list['file_count'];
- $data['meta_size'] = $list['file_size'];
- $data['meta_biggest'] = $list['file_max'];
- $data['meta_smallest'] = $list['file_min'];
- if($list['file_count']) $data['meta_avg'] = $list['file_size'] / $list['file_count'];
- unset($list);
-
- // number and size of attic
- $list = array();
- search($list,$conf['olddir'],array($this,'_search_count'),array('all'=>true));
- $data['attic_count'] = $list['file_count'];
- $data['attic_size'] = $list['file_size'];
- $data['attic_biggest'] = $list['file_max'];
- $data['attic_smallest'] = $list['file_min'];
- if($list['file_count']) $data['attic_avg'] = $list['file_size'] / $list['file_count'];
- $data['attic_oldest'] = $list['file_oldest'];
- unset($list);
+ function html() {
+ if ( ! isset($_REQUEST['data']) ){
+ echo $this->locale_xhtml('intro');
+
+ //If there was an error the last time we tried to autosubmit, warn the user
+ if ( $this->helper->isAutoSubmitEnabled() ){
+ if ( @file_exists($this->helper->autosubmitErrorFile) ){
+ echo $this->getLang('autosubmitError');
+ echo io_readFile( $this->helper->autosubmitErrorFile );
+ }
+ }
- // user count
- if($auth && $auth->canDo('getUserCount')){
- $data['user_count'] = $auth->getUserCount();
- }
+ flush();
+ echo $this->buildForm('server');
- // calculate edits per day
- $list = @file($conf['metadir'].'/_dokuwiki.changes');
- $count = count($list);
- if($count > 2){
- $first = (int) substr(array_shift($list),0,10);
- $last = (int) substr(array_pop($list),0,10);
- $dur = ($last - $first)/(60*60*24); // number of days in the changelog
- $data['edits_per_day'] = $count/$dur;
+ //Print the last time the data was sent
+ $lastSent = $this->helper->lastSentTime();
+ if ( $lastSent !== 0 ){
+ echo $this->getLang('lastSent') . datetime_h($lastSent);
+ }
+ } else {
+ //If we just submitted the form
+ if ( $this->sentStatus === '' ){
+ //If we successfully sent the data
+ echo $this->locale_xhtml('submitted');
+ } else {
+ //If we failed to submit the data, try directly with the browser
+ echo $this->getLang('submissionFailed') . $this->sentStatus . '<br />';
+ echo $this->getLang('submitDirectly');
+ echo $this->buildForm('browser', $_REQUEST['data']);
+ }
}
- unset($list);
-
- // plugins
- $data['plugin'] = plugin_list();
-
- // pcre info
- if(defined('PCRE_VERSION')) $data['pcre_version'] = PCRE_VERSION;
- $data['pcre_backtrack'] = ini_get('pcre.backtrack_limit');
- $data['pcre_recursion'] = ini_get('pcre.recursion_limit');
-
- // php info
- $data['os'] = PHP_OS;
- $data['webserver'] = $_SERVER['SERVER_SOFTWARE'];
- $data['php_version'] = phpversion();
- $data['php_sapi'] = php_sapi_name();
- $data['php_memory'] = $this->_to_byte(ini_get('memory_limit'));
- $data['php_exectime'] = $phptime;
- $data['php_extension'] = get_loaded_extensions();
-
- return $data;
}
- function _search_count(&$data,$base,$file,$type,$lvl,$opts){
- // traverse
- if($type == 'd'){
- if($data['dir_nest'] < $lvl) $data['dir_nest'] = $lvl;
- $data['dir_count']++;
- return true;
- }
-
- //only search txt files if 'all' option not set
- if($opts['all'] || substr($file,-4) == '.txt'){
- $size = filesize($base.'/'.$file);
- $date = filemtime($base.'/'.$file);
- $data['file_count']++;
- $data['file_size'] += $size;
- if(!isset($data['file_min']) || $data['file_min'] > $size) $data['file_min'] = $size;
- if($data['file_max'] < $size) $data['file_max'] = $size;
- if(!isset($data['file_oldest']) || $data['file_oldest'] > $date) $data['file_oldest'] = $date;
- }
-
- return false;
- }
-
/**
- * Convert php.ini shorthands to byte
- *
- * @author <gilthans dot NO dot SPAM at gmail dot com>
- * @link http://de3.php.net/manual/en/ini.core.php#79564
+ * Build the form which presents the data to be sent
+ * @param string $submit How is the data supposed to be sent? (may be: 'browser' or 'server')
+ * @param string $data The popularity data, if it has already been computed. NULL otherwise.
+ * @return The form, as an html string
*/
- function _to_byte($v){
- $l = substr($v, -1);
- $ret = substr($v, 0, -1);
- switch(strtoupper($l)){
- case 'P':
- $ret *= 1024;
- case 'T':
- $ret *= 1024;
- case 'G':
- $ret *= 1024;
- case 'M':
- $ret *= 1024;
- case 'K':
- $ret *= 1024;
- break;
+ function buildForm($submissionMode, $data = null){
+ $url = ($submissionMode === 'browser' ? $this->helper->submitUrl : script());
+ if ( is_null($data) ){
+ $data = $this->helper->gatherAsString();
+ }
+
+ $form = '<form method="post" action="'. $url .'" accept-charset="utf-8">'
+ .'<fieldset style="width: 60%;">'
+ .'<textarea class="edit" rows="10" cols="80" readonly="readonly" name="data">'
+ .$data
+ .'</textarea><br />';
+
+ //If we submit via the server, we give the opportunity to suscribe to the autosubmission option
+ if ( $submissionMode !== 'browser' ){
+ $form .= '<label for="autosubmit">'
+ .'<input type="checkbox" name="autosubmit" id="autosubmit" '
+ .($this->helper->isAutosubmitEnabled() ? 'checked' : '' )
+ .'/>' . $this->getLang('autosubmit') .'<br />'
+ .'</label>'
+ .'<input type="hidden" name="do" value="admin">'
+ .'<input type="hidden" name="page" value="popularity">';
}
- return $ret;
+ $form .= '<input type="submit" class="button" value="'.$this->getLang('submit').'"/>'
+ .'</fieldset>'
+ .'</form>';
+ return $form;
}
}
diff --git a/lib/plugins/popularity/helper.php b/lib/plugins/popularity/helper.php
new file mode 100644
index 000000000..629d0bd67
--- /dev/null
+++ b/lib/plugins/popularity/helper.php
@@ -0,0 +1,291 @@
+<?php
+/**
+ * Popularity Feedback Plugin
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ */
+
+class helper_plugin_popularity extends Dokuwiki_Plugin {
+ /**
+ * The url where the data should be sent
+ */
+ var $submitUrl = 'http://update.dokuwiki.org/popularity.php';
+
+ /**
+ * Name of the file which determine if the the autosubmit is enabled,
+ * and when it was submited for the last time
+ */
+ var $autosubmitFile;
+
+ /**
+ * File where the last error which happened when we tried to autosubmit, will be log
+ */
+ var $autosubmitErrorFile;
+
+ /**
+ * Name of the file which determine when the popularity data was manually
+ * submitted for the last time
+ * (If this file doesn't exist, the data has never been sent)
+ */
+ var $popularityLastSubmitFile;
+
+
+ function helper_plugin_popularity(){
+ global $conf;
+ $this->autosubmitFile = $conf['cachedir'].'/autosubmit.txt';
+ $this->autosubmitErrorFile = $conf['cachedir'].'/autosubmitError.txt';
+ $this->popularityLastSubmitFile = $conf['cachedir'].'/lastSubmitTime.txt';
+ }
+
+ function getMethods(){
+ $result = array();
+ $result[] = array(
+ 'name' => 'isAutoSubmitEnabled',
+ 'desc' => 'Check if autosubmit is enabled',
+ 'params' => array(),
+ 'return' => array('result' => 'bool')
+ );
+ $result[] = array(
+ 'name' => 'sendData',
+ 'desc' => 'Send the popularity data',
+ 'params' => array('data' => 'string'),
+ 'return' => array()
+ );
+ $result[] = array(
+ 'name' => 'gatherAsString',
+ 'desc' => 'Gather the popularity data',
+ 'params' => array(),
+ 'return' => array('data' => 'string')
+ );
+ $result[] = array(
+ 'name' => 'lastSentTime',
+ 'desc' => 'Compute the last time popularity data was sent',
+ 'params' => 'array()',
+ 'return' => array('data' => 'int')
+ );
+ return $result;
+
+ }
+
+ /**
+ * Check if autosubmit is enabled
+ * @return TRUE if we should send data once a month, FALSE otherwise
+ */
+ function isAutoSubmitEnabled(){
+ return @file_exists($this->autosubmitFile);
+ }
+
+ /**
+ * Send the data, to the submit url
+ * @param string $data The popularity data
+ * @return An empty string if everything worked fine, a string describing the error otherwise
+ */
+ function sendData($data){
+ $error = '';
+ $httpClient = new DokuHTTPClient();
+ $status = $httpClient->sendRequest($this->submitUrl, $data, 'POST');
+ if ( ! $status ){
+ $error = $httpClient->error;
+ }
+ return $error;
+ }
+
+ /**
+ * Compute the last time the data was sent. If it has never been sent, we return 0.
+ */
+ function lastSentTime(){
+ $manualSubmission = @filemtime($this->popularityLastSubmitFile);
+ $autoSubmission = @filemtime($this->autosubmitFile);
+
+ return max((int) $manualSubmission, (int) $autoSubmission);
+ }
+
+ /**
+ * Gather all information
+ * @return The popularity data as a string
+ */
+ function gatherAsString(){
+ $data = $this->_gather();
+ $string = '';
+ foreach($data as $key => $val){
+ if(is_array($val)) foreach($val as $v){
+ $string .= hsc($key)."\t".hsc($v)."\n";
+ }else{
+ $string .= hsc($key)."\t".hsc($val)."\n";
+ }
+ }
+ return $string;
+ }
+
+ /**
+ * Gather all information
+ * @return The popularity data as an array
+ */
+ function _gather(){
+ global $conf;
+ global $auth;
+ $data = array();
+ $phptime = ini_get('max_execution_time');
+ @set_time_limit(0);
+
+ // version
+ $data['anon_id'] = md5(auth_cookiesalt());
+ $data['version'] = getVersion();
+ $data['popversion'] = $this->version;
+ $data['language'] = $conf['lang'];
+ $data['now'] = time();
+
+ // some config values
+ $data['conf_useacl'] = $conf['useacl'];
+ $data['conf_authtype'] = $conf['authtype'];
+ $data['conf_template'] = $conf['template'];
+
+ // number and size of pages
+ $list = array();
+ search($list,$conf['datadir'],array($this,'_search_count'),'','');
+ $data['page_count'] = $list['file_count'];
+ $data['page_size'] = $list['file_size'];
+ $data['page_biggest'] = $list['file_max'];
+ $data['page_smallest'] = $list['file_min'];
+ $data['page_nscount'] = $list['dir_count'];
+ $data['page_nsnest'] = $list['dir_nest'];
+ if($list['file_count']) $data['page_avg'] = $list['file_size'] / $list['file_count'];
+ $data['page_oldest'] = $list['file_oldest'];
+ unset($list);
+
+ // number and size of media
+ $list = array();
+ search($list,$conf['mediadir'],array($this,'_search_count'),array('all'=>true));
+ $data['media_count'] = $list['file_count'];
+ $data['media_size'] = $list['file_size'];
+ $data['media_biggest'] = $list['file_max'];
+ $data['media_smallest'] = $list['file_min'];
+ $data['media_nscount'] = $list['dir_count'];
+ $data['media_nsnest'] = $list['dir_nest'];
+ if($list['file_count']) $data['media_avg'] = $list['file_size'] / $list['file_count'];
+ unset($list);
+
+ // number and size of cache
+ $list = array();
+ search($list,$conf['cachedir'],array($this,'_search_count'),array('all'=>true));
+ $data['cache_count'] = $list['file_count'];
+ $data['cache_size'] = $list['file_size'];
+ $data['cache_biggest'] = $list['file_max'];
+ $data['cache_smallest'] = $list['file_min'];
+ if($list['file_count']) $data['cache_avg'] = $list['file_size'] / $list['file_count'];
+ unset($list);
+
+ // number and size of index
+ $list = array();
+ search($list,$conf['indexdir'],array($this,'_search_count'),array('all'=>true));
+ $data['index_count'] = $list['file_count'];
+ $data['index_size'] = $list['file_size'];
+ $data['index_biggest'] = $list['file_max'];
+ $data['index_smallest'] = $list['file_min'];
+ if($list['file_count']) $data['index_avg'] = $list['file_size'] / $list['file_count'];
+ unset($list);
+
+ // number and size of meta
+ $list = array();
+ search($list,$conf['metadir'],array($this,'_search_count'),array('all'=>true));
+ $data['meta_count'] = $list['file_count'];
+ $data['meta_size'] = $list['file_size'];
+ $data['meta_biggest'] = $list['file_max'];
+ $data['meta_smallest'] = $list['file_min'];
+ if($list['file_count']) $data['meta_avg'] = $list['file_size'] / $list['file_count'];
+ unset($list);
+
+ // number and size of attic
+ $list = array();
+ search($list,$conf['olddir'],array($this,'_search_count'),array('all'=>true));
+ $data['attic_count'] = $list['file_count'];
+ $data['attic_size'] = $list['file_size'];
+ $data['attic_biggest'] = $list['file_max'];
+ $data['attic_smallest'] = $list['file_min'];
+ if($list['file_count']) $data['attic_avg'] = $list['file_size'] / $list['file_count'];
+ $data['attic_oldest'] = $list['file_oldest'];
+ unset($list);
+
+ // user count
+ if($auth && $auth->canDo('getUserCount')){
+ $data['user_count'] = $auth->getUserCount();
+ }
+
+ // calculate edits per day
+ $list = @file($conf['metadir'].'/_dokuwiki.changes');
+ $count = count($list);
+ if($count > 2){
+ $first = (int) substr(array_shift($list),0,10);
+ $last = (int) substr(array_pop($list),0,10);
+ $dur = ($last - $first)/(60*60*24); // number of days in the changelog
+ $data['edits_per_day'] = $count/$dur;
+ }
+ unset($list);
+
+ // plugins
+ $data['plugin'] = plugin_list();
+
+ // pcre info
+ if(defined('PCRE_VERSION')) $data['pcre_version'] = PCRE_VERSION;
+ $data['pcre_backtrack'] = ini_get('pcre.backtrack_limit');
+ $data['pcre_recursion'] = ini_get('pcre.recursion_limit');
+
+ // php info
+ $data['os'] = PHP_OS;
+ $data['webserver'] = $_SERVER['SERVER_SOFTWARE'];
+ $data['php_version'] = phpversion();
+ $data['php_sapi'] = php_sapi_name();
+ $data['php_memory'] = $this->_to_byte(ini_get('memory_limit'));
+ $data['php_exectime'] = $phptime;
+ $data['php_extension'] = get_loaded_extensions();
+
+ return $data;
+ }
+
+ function _search_count(&$data,$base,$file,$type,$lvl,$opts){
+ // traverse
+ if($type == 'd'){
+ if($data['dir_nest'] < $lvl) $data['dir_nest'] = $lvl;
+ $data['dir_count']++;
+ return true;
+ }
+
+ //only search txt files if 'all' option not set
+ if($opts['all'] || substr($file,-4) == '.txt'){
+ $size = filesize($base.'/'.$file);
+ $date = filemtime($base.'/'.$file);
+ $data['file_count']++;
+ $data['file_size'] += $size;
+ if(!isset($data['file_min']) || $data['file_min'] > $size) $data['file_min'] = $size;
+ if($data['file_max'] < $size) $data['file_max'] = $size;
+ if(!isset($data['file_oldest']) || $data['file_oldest'] > $date) $data['file_oldest'] = $date;
+ }
+
+ return false;
+ }
+
+ /**
+ * Convert php.ini shorthands to byte
+ *
+ * @author <gilthans dot NO dot SPAM at gmail dot com>
+ * @link http://de3.php.net/manual/en/ini.core.php#79564
+ */
+ function _to_byte($v){
+ $l = substr($v, -1);
+ $ret = substr($v, 0, -1);
+ switch(strtoupper($l)){
+ case 'P':
+ $ret *= 1024;
+ case 'T':
+ $ret *= 1024;
+ case 'G':
+ $ret *= 1024;
+ case 'M':
+ $ret *= 1024;
+ case 'K':
+ $ret *= 1024;
+ break;
+ }
+ return $ret;
+ }
+}
diff --git a/lib/plugins/popularity/lang/ar/lang.php b/lib/plugins/popularity/lang/ar/lang.php
index c0e7dc6af..b2581294a 100644
--- a/lib/plugins/popularity/lang/ar/lang.php
+++ b/lib/plugins/popularity/lang/ar/lang.php
@@ -7,3 +7,8 @@
*/
$lang['name'] = 'رد الشعبية (قد يأخذ بعض الوقت ليحمل)';
$lang['submit'] = 'أرسل البيانات';
+$lang['autosubmit'] = 'ارسل البيانات آليا كل شهر';
+$lang['submissionFailed'] = 'تعذر إرسال البيانات بسبب الخطأ التالي:';
+$lang['submitDirectly'] = 'يمكنك إرسال البيانات يدويا بارسال النموذج التالي.';
+$lang['autosubmitError'] = 'فشلت آخر محاولة للإرسال، بسبب الخطأ التالي:';
+$lang['lastSent'] = 'أرسلت البيانات';
diff --git a/lib/plugins/popularity/lang/ar/submitted.txt b/lib/plugins/popularity/lang/ar/submitted.txt
new file mode 100644
index 000000000..085e3bd98
--- /dev/null
+++ b/lib/plugins/popularity/lang/ar/submitted.txt
@@ -0,0 +1,3 @@
+====== رد الشعبية ======
+
+أرسلت البيانات بنجاح. \ No newline at end of file
diff --git a/lib/plugins/popularity/lang/de-informal/lang.php b/lib/plugins/popularity/lang/de-informal/lang.php
index 076b37115..f884ed690 100644
--- a/lib/plugins/popularity/lang/de-informal/lang.php
+++ b/lib/plugins/popularity/lang/de-informal/lang.php
@@ -6,6 +6,12 @@
* @author Juergen Schwarzer <jschwarzer@freenet.de>
* @author Marcel Metz <marcel_metz@gmx.de>
* @author Matthias Schulte <post@lupo49.de>
+ * @author Christian Wichmann <nospam@zone0.de>
*/
$lang['name'] = 'Popularitätsrückmeldung (kann eine Weile dauern, bis es fertig geladen wurde)';
$lang['submit'] = 'Sende Daten';
+$lang['autosubmit'] = 'Daten einmal im Monat automatisch senden';
+$lang['submissionFailed'] = 'Die Daten konnten aufgrund des folgenden Fehlers nicht gesendet werden: ';
+$lang['submitDirectly'] = 'Du kannst die Daten durch Betätigung des Buttons manuell versenden.';
+$lang['autosubmitError'] = 'Beim letzten automatischen Versuch die Daten zu senden, ist folgender Fehler aufgetreten: ';
+$lang['lastSent'] = 'Die Daten wurden gesendet';
diff --git a/lib/plugins/popularity/lang/de-informal/submitted.txt b/lib/plugins/popularity/lang/de-informal/submitted.txt
new file mode 100644
index 000000000..e7b45b5b7
--- /dev/null
+++ b/lib/plugins/popularity/lang/de-informal/submitted.txt
@@ -0,0 +1,3 @@
+====== Popularitäts-Feedback ======
+
+Die Daten wurden erfolgreich versandt. \ No newline at end of file
diff --git a/lib/plugins/popularity/lang/de/lang.php b/lib/plugins/popularity/lang/de/lang.php
index 1372e9d8a..4649062f7 100644
--- a/lib/plugins/popularity/lang/de/lang.php
+++ b/lib/plugins/popularity/lang/de/lang.php
@@ -11,6 +11,13 @@
* @author Blitzi94@gmx.de
* @author Robert Bogenschneider <robog@GMX.de>
* @author Robert Bogenschneider <robog@gmx.de>
+ * @author Niels Lange <niels@boldencursief.nl>
+ * @author Christian Wichmann <nospam@zone0.de>
*/
$lang['name'] = 'Popularitäts-Feedback (Eventuell längere Ladezeit)';
$lang['submit'] = 'Daten senden';
+$lang['autosubmit'] = 'Daten einmal im Monat automatisch senden';
+$lang['submissionFailed'] = 'Die Daten konnten aufgrund des folgenden Fehlers nicht gesendet werden: ';
+$lang['submitDirectly'] = 'Sie können die Daten durch Betätigung des Buttons manuell versenden.';
+$lang['autosubmitError'] = 'Beim letzten automatischen Versuch die Daten zu senden, ist folgender Fehler aufgetreten: ';
+$lang['lastSent'] = 'Die Daten wurden gesendet';
diff --git a/lib/plugins/popularity/lang/de/submitted.txt b/lib/plugins/popularity/lang/de/submitted.txt
new file mode 100644
index 000000000..e7b45b5b7
--- /dev/null
+++ b/lib/plugins/popularity/lang/de/submitted.txt
@@ -0,0 +1,3 @@
+====== Popularitäts-Feedback ======
+
+Die Daten wurden erfolgreich versandt. \ No newline at end of file
diff --git a/lib/plugins/popularity/lang/en/lang.php b/lib/plugins/popularity/lang/en/lang.php
index c9912b7ad..78a5e862c 100644
--- a/lib/plugins/popularity/lang/en/lang.php
+++ b/lib/plugins/popularity/lang/en/lang.php
@@ -1,4 +1,9 @@
<?php
-$lang['name'] = 'Popularity Feedback (may take some time to load)';
-$lang['submit'] = 'Send Data';
+$lang['name'] = 'Popularity Feedback (may take some time to load)';
+$lang['submit'] = 'Send Data';
+$lang['autosubmit'] = 'Automatically send data once a month';
+$lang['submissionFailed'] = 'The data couldn\'t be sent due to the following error:';
+$lang['submitDirectly'] = 'You can send the data manually by submitting the following form.';
+$lang['autosubmitError'] = 'The last autosubmit failed, because of the following error: ';
+$lang['lastSent'] = 'The data has been sent ';
diff --git a/lib/plugins/popularity/lang/en/submitted.txt b/lib/plugins/popularity/lang/en/submitted.txt
new file mode 100644
index 000000000..30f2784aa
--- /dev/null
+++ b/lib/plugins/popularity/lang/en/submitted.txt
@@ -0,0 +1,3 @@
+====== Popularity Feedback ======
+
+The data has been sent succesfully.
diff --git a/lib/plugins/popularity/lang/es/lang.php b/lib/plugins/popularity/lang/es/lang.php
index c76190c2c..6aa9a823d 100644
--- a/lib/plugins/popularity/lang/es/lang.php
+++ b/lib/plugins/popularity/lang/es/lang.php
@@ -19,3 +19,8 @@
*/
$lang['name'] = 'Retroinformación (Feedback) plugin Popularity';
$lang['submit'] = 'Enviar datos';
+$lang['autosubmit'] = 'Enviar automáticamente datos una vez al mes';
+$lang['submissionFailed'] = 'Los datos no se pudo enviar debido al error siguiente:';
+$lang['submitDirectly'] = 'Puede enviar los datos de forma manual mediante la presentación de la siguiente forma.';
+$lang['autosubmitError'] = 'El último auto no pudo presentar, debido al error siguiente:';
+$lang['lastSent'] = 'Los datos se han enviado';
diff --git a/lib/plugins/popularity/lang/es/submitted.txt b/lib/plugins/popularity/lang/es/submitted.txt
new file mode 100644
index 000000000..bb1754cdd
--- /dev/null
+++ b/lib/plugins/popularity/lang/es/submitted.txt
@@ -0,0 +1,3 @@
+====== Retroinformación Popularity ======
+
+Los datos se han enviado con éxito. \ No newline at end of file
diff --git a/lib/plugins/popularity/lang/he/lang.php b/lib/plugins/popularity/lang/he/lang.php
index 024f94ae8..f619127cd 100644
--- a/lib/plugins/popularity/lang/he/lang.php
+++ b/lib/plugins/popularity/lang/he/lang.php
@@ -5,6 +5,7 @@
* @author Dotan Kamber <kamberd@yahoo.com>
* @author Moshe Kaplan <mokplan@gmail.com>
* @author Yaron Yogev <yaronyogev@gmail.com>
+ * @author Yaron Shahrabani <sh.yaron@gmail.com>
*/
$lang['name'] = 'משוב פופולריות (יתכן זמן טעינה ארוך)';
$lang['submit'] = 'שלח מידע';
diff --git a/lib/plugins/popularity/lang/la/intro.txt b/lib/plugins/popularity/lang/la/intro.txt
index 6f4ce8488..c3029caf4 100644
--- a/lib/plugins/popularity/lang/la/intro.txt
+++ b/lib/plugins/popularity/lang/la/intro.txt
@@ -1,5 +1,10 @@
====== Index Fauoris Popularis ======
-Haec machina fauorem popularem mittis sic ut creatores uicis meliorem illum facere possint.
+Haoc instrumentum fauorem popularem mittis sic ut creatores uicis meliorem illum facere possint.
+
+Rursum te fauorem mittere experamus sic ut si mutationes meliores uel peiores esse uidere possimus.
+
+Res mittendae tua forma in usu, numerus et pondus paginarum et aliarum rerum, addenda in usu et de PHP.
+
+Res rudes mittendae subter ostenduntur. "Res mittere" premas ut eas transferas.
-Rursum te fauorem mittere experamus sic ut si mutationes meliores uel peiores esse uidere possimus. \ No newline at end of file
diff --git a/lib/plugins/popularity/lang/la/lang.php b/lib/plugins/popularity/lang/la/lang.php
index e634f9d41..c7f307c29 100644
--- a/lib/plugins/popularity/lang/la/lang.php
+++ b/lib/plugins/popularity/lang/la/lang.php
@@ -2,6 +2,12 @@
/**
* Latin language file
*
+ * @author Massimiliano Vassalli <vassalli.max@gmail.com>
*/
$lang['name'] = 'Index fauoris popularis (multum tempus quaerere potest)';
$lang['submit'] = 'Missum die';
+$lang['autosubmit'] = 'Constanter res omni mense mittuntur';
+$lang['submissionFailed'] = 'Res non mittuntur ea causa:';
+$lang['submitDirectly'] = 'Res tu mittere potes cum hoc exemplar compleas.';
+$lang['autosubmitError'] = 'Extrema missio lapsa est ea causa:';
+$lang['lastSent'] = 'Res missae sunt';
diff --git a/lib/plugins/popularity/lang/la/submitted.txt b/lib/plugins/popularity/lang/la/submitted.txt
new file mode 100644
index 000000000..2b2faf439
--- /dev/null
+++ b/lib/plugins/popularity/lang/la/submitted.txt
@@ -0,0 +1,3 @@
+====== Index fauoris popularis ======
+
+Res feliciter missae sunt. \ No newline at end of file
diff --git a/lib/plugins/popularity/lang/ru/intro.txt b/lib/plugins/popularity/lang/ru/intro.txt
index 587a7ae85..e8118e4eb 100644
--- a/lib/plugins/popularity/lang/ru/intro.txt
+++ b/lib/plugins/popularity/lang/ru/intro.txt
@@ -1,10 +1,10 @@
====== Сбор информации о популярности ======
-Этот инструмент собирает анонимные данные о вашей вики и позволяет вам отправить их разработчикам «ДокуВики». Эти данные помогут им понять то, как именно используется «ДокуВики», и удостовериться, что принимаемые проектные решения соответствуют жизненным реалиям.
+Этот инструмент собирает анонимные данные о вашей вики и позволяет вам отправить их разработчикам «ДокуВики». Эти данные помогут им понять, как именно используется «ДокуВики», и удостовериться, что принимаемые проектные решения соответствуют жизненным реалиям.
-Отправляйте данные время от времени для того, чтобы сообщить разработчикам о том, что ваша вики «подросла». Отправленные вами данные будут идентифицированы по анонимному ID.
+Отправляйте данные время от времени для того, чтобы сообщать разработчикам о том, что ваша вики «подросла». Отправленные вами данные будут идентифицированы по анонимному ID.
Собранные данные содержат такую информацию, как: версия «ДокуВики», количество и размер ваших страниц и файлов, установленные плагины, информацию об установленном PHP.
-Данные, которые будут посланы, представлены ниже. Пожалуйста, используйте кнопку «Отправить данные», чтобы передать информацию.
+Данные, которые будут отосланы, представлены ниже. Пожалуйста, используйте кнопку «Отправить данные», чтобы передать информацию.
diff --git a/lib/plugins/popularity/lang/ru/lang.php b/lib/plugins/popularity/lang/ru/lang.php
index df89c7022..b63558134 100644
--- a/lib/plugins/popularity/lang/ru/lang.php
+++ b/lib/plugins/popularity/lang/ru/lang.php
@@ -14,3 +14,8 @@
*/
$lang['name'] = 'Сбор информации о популярности (для загрузки может потребоваться некоторое время)';
$lang['submit'] = 'Отправить данные';
+$lang['autosubmit'] = 'Автоматически отправлять данные один раз в месяц';
+$lang['submissionFailed'] = 'Данные не могут быть отправлены из-за ошибки:';
+$lang['submitDirectly'] = 'Вы можете отправлять данные вручную, заполнив форму:';
+$lang['autosubmitError'] = 'Последнее автоотправление данных не удалось из-за ошибки:';
+$lang['lastSent'] = 'Данные отправлены';
diff --git a/lib/plugins/popularity/lang/sl/lang.php b/lib/plugins/popularity/lang/sl/lang.php
index befb1eec0..dc81ec060 100644
--- a/lib/plugins/popularity/lang/sl/lang.php
+++ b/lib/plugins/popularity/lang/sl/lang.php
@@ -4,5 +4,6 @@
*
* @author Dejan Levec <webphp@gmail.com>
* @author Boštjan Seničar <senicar@gmail.com>
+ * @author Gregor Skumavc (grega.skumavc@gmail.com)
*/
$lang['submit'] = 'Pošlji';
diff --git a/lib/plugins/popularity/plugin.info.txt b/lib/plugins/popularity/plugin.info.txt
new file mode 100644
index 000000000..2652bd669
--- /dev/null
+++ b/lib/plugins/popularity/plugin.info.txt
@@ -0,0 +1,7 @@
+base popularity
+author Andreas Gohr
+email andi@splitbrain.org
+date 2010-12-09
+name Popularity Feedback Plugin
+desc Send anonymous data about your wiki to the developers.
+url http://www.dokuwiki.org/plugin:popularity
diff --git a/lib/plugins/revert/lang/de-informal/lang.php b/lib/plugins/revert/lang/de-informal/lang.php
index ac2f35e85..b6709d2fa 100644
--- a/lib/plugins/revert/lang/de-informal/lang.php
+++ b/lib/plugins/revert/lang/de-informal/lang.php
@@ -6,6 +6,7 @@
* @author Juergen Schwarzer <jschwarzer@freenet.de>
* @author Marcel Metz <marcel_metz@gmx.de>
* @author Matthias Schulte <post@lupo49.de>
+ * @author Christian Wichmann <nospam@zone0.de>
*/
$lang['menu'] = 'Zurückstellungsmanager';
$lang['filter'] = 'Durchsuche als Spam markierte Seiten';
diff --git a/lib/plugins/revert/lang/de/lang.php b/lib/plugins/revert/lang/de/lang.php
index 5dee8007b..0bc8e2ce0 100644
--- a/lib/plugins/revert/lang/de/lang.php
+++ b/lib/plugins/revert/lang/de/lang.php
@@ -12,6 +12,8 @@
* @author Blitzi94@gmx.de
* @author Robert Bogenschneider <robog@GMX.de>
* @author Robert Bogenschneider <robog@gmx.de>
+ * @author Niels Lange <niels@boldencursief.nl>
+ * @author Christian Wichmann <nospam@zone0.de>
*/
$lang['menu'] = 'Seiten wieder herstellen';
$lang['filter'] = 'Nach betroffenen Seiten suchen';
diff --git a/lib/plugins/revert/lang/he/lang.php b/lib/plugins/revert/lang/he/lang.php
index 585487816..ac3c3412e 100644
--- a/lib/plugins/revert/lang/he/lang.php
+++ b/lib/plugins/revert/lang/he/lang.php
@@ -5,6 +5,7 @@
* @author Dotan Kamber <kamberd@yahoo.com>
* @author Moshe Kaplan <mokplan@gmail.com>
* @author Yaron Yogev <yaronyogev@gmail.com>
+ * @author Yaron Shahrabani <sh.yaron@gmail.com>
*/
$lang['menu'] = 'מנהל שחזור';
$lang['filter'] = 'חפש דפים עם ספאם';
diff --git a/lib/plugins/revert/lang/la/intro.txt b/lib/plugins/revert/lang/la/intro.txt
index 35916f683..99a206f63 100644
--- a/lib/plugins/revert/lang/la/intro.txt
+++ b/lib/plugins/revert/lang/la/intro.txt
@@ -1,3 +1,3 @@
====== Restituendi Administrator ======
-Haec pagina contra mala interretialia paginas restituta. Ut paginas aegras quaeras, malum VRL scribe, deinde paginas malas eligas. \ No newline at end of file
+Haec pagina contra mala interretialia paginas restituta. Vt paginas aegras quaeras, malum VRL scribe, deinde paginas malas eligas. \ No newline at end of file
diff --git a/lib/plugins/revert/lang/la/lang.php b/lib/plugins/revert/lang/la/lang.php
index f742e63f2..af4203437 100644
--- a/lib/plugins/revert/lang/la/lang.php
+++ b/lib/plugins/revert/lang/la/lang.php
@@ -2,6 +2,7 @@
/**
* Latin language file
*
+ * @author Massimiliano Vassalli <vassalli.max@gmail.com>
*/
$lang['menu'] = 'Restituendi administrator';
$lang['filter'] = 'Malas paginas quaerere';
diff --git a/lib/plugins/revert/lang/ru/intro.txt b/lib/plugins/revert/lang/ru/intro.txt
index 66c5af005..52d1f8d3d 100644
--- a/lib/plugins/revert/lang/ru/intro.txt
+++ b/lib/plugins/revert/lang/ru/intro.txt
@@ -1,3 +1,3 @@
====== Менеджер откаток ======
-Эта страница поможет вам в автоматической откатке изменений после спам-атаки. Для того, чтобы найти спам-страницы, введите ключевые слова и произведите поиск (например, по URL спамера). Затем убедитесь, что найденные страницы действительно содержат спам, и сделайте откатку изменений.
+Эта страница поможет вам в автоматической откатке изменений после спам-атаки. Для того, чтобы найти спам-страницы, введите ключевые слова и произведите поиск (например, по URL спамера). Затем убедитесь, что найденные страницы действительно содержат спам и сделайте откатку изменений.
diff --git a/lib/plugins/revert/lang/sl/lang.php b/lib/plugins/revert/lang/sl/lang.php
index 1fcf4ca36..57ae9d092 100644
--- a/lib/plugins/revert/lang/sl/lang.php
+++ b/lib/plugins/revert/lang/sl/lang.php
@@ -4,4 +4,5 @@
*
* @author Dejan Levec <webphp@gmail.com>
* @author Boštjan Seničar <senicar@gmail.com>
+ * @author Gregor Skumavc (grega.skumavc@gmail.com)
*/
diff --git a/lib/plugins/syntax.php b/lib/plugins/syntax.php
index 05b0dc466..12451f636 100644
--- a/lib/plugins/syntax.php
+++ b/lib/plugins/syntax.php
@@ -188,10 +188,13 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode {
function localFN($id) {
global $conf;
$plugin = $this->getPluginName();
- $file = DOKU_PLUGIN.$plugin.'/lang/'.$conf['lang'].'/'.$id.'.txt';
- if(!@file_exists($file)){
- //fall back to english
- $file = DOKU_PLUGIN.$plugin.'/lang/en/'.$id.'.txt';
+ $file = DOKU_CONF.'/plugin_lang/'.$plugin.'/'.$conf['lang'].'/'.$id.'.txt';
+ if (!@file_exists($file)){
+ $file = DOKU_PLUGIN.$plugin.'/lang/'.$conf['lang'].'/'.$id.'.txt';
+ if(!@file_exists($file)){
+ //fall back to english
+ $file = DOKU_PLUGIN.$plugin.'/lang/en/'.$id.'.txt';
+ }
}
return $file;
}
diff --git a/lib/plugins/usermanager/lang/de-informal/lang.php b/lib/plugins/usermanager/lang/de-informal/lang.php
index e906c0cf8..95b36c60f 100644
--- a/lib/plugins/usermanager/lang/de-informal/lang.php
+++ b/lib/plugins/usermanager/lang/de-informal/lang.php
@@ -6,6 +6,7 @@
* @author Juergen Schwarzer <jschwarzer@freenet.de>
* @author Marcel Metz <marcel_metz@gmx.de>
* @author Matthias Schulte <post@lupo49.de>
+ * @author Christian Wichmann <nospam@zone0.de>
*/
$lang['menu'] = 'Benutzerverwalter';
$lang['noauth'] = '(Benutzeranmeldung ist nicht verfügbar)';
diff --git a/lib/plugins/usermanager/lang/de/lang.php b/lib/plugins/usermanager/lang/de/lang.php
index 816aaebd7..090d1d1d9 100644
--- a/lib/plugins/usermanager/lang/de/lang.php
+++ b/lib/plugins/usermanager/lang/de/lang.php
@@ -13,6 +13,8 @@
* @author Blitzi94@gmx.de
* @author Robert Bogenschneider <robog@GMX.de>
* @author Robert Bogenschneider <robog@gmx.de>
+ * @author Niels Lange <niels@boldencursief.nl>
+ * @author Christian Wichmann <nospam@zone0.de>
*/
$lang['menu'] = 'Benutzerverwaltung';
$lang['noauth'] = '(Authentifizierungssystem nicht verfügbar)';
diff --git a/lib/plugins/usermanager/lang/he/lang.php b/lib/plugins/usermanager/lang/he/lang.php
index b2b55c3b4..601163013 100644
--- a/lib/plugins/usermanager/lang/he/lang.php
+++ b/lib/plugins/usermanager/lang/he/lang.php
@@ -6,6 +6,7 @@
* @author Dotan Kamber <kamberd@yahoo.com>
* @author Moshe Kaplan <mokplan@gmail.com>
* @author Yaron Yogev <yaronyogev@gmail.com>
+ * @author Yaron Shahrabani <sh.yaron@gmail.com>
*/
$lang['menu'] = 'מנהל משתמשים';
$lang['noauth'] = '(אימות משתמשים אינו זמין)';
diff --git a/lib/plugins/usermanager/lang/la/lang.php b/lib/plugins/usermanager/lang/la/lang.php
index 2646979bd..52c848754 100644
--- a/lib/plugins/usermanager/lang/la/lang.php
+++ b/lib/plugins/usermanager/lang/la/lang.php
@@ -2,6 +2,7 @@
/**
* Latin language file
*
+ * @author Massimiliano Vassalli <vassalli.max@gmail.com>
*/
$lang['menu'] = 'Sodalis Tabella';
$lang['noauth'] = '(Sodalis confirmatio deest)';
diff --git a/lib/plugins/usermanager/lang/ru/lang.php b/lib/plugins/usermanager/lang/ru/lang.php
index 81d9a72a6..d7a0591ab 100644
--- a/lib/plugins/usermanager/lang/ru/lang.php
+++ b/lib/plugins/usermanager/lang/ru/lang.php
@@ -47,12 +47,12 @@ $lang['start'] = 'в начало';
$lang['prev'] = 'назад';
$lang['next'] = 'вперёд';
$lang['last'] = 'в конец';
-$lang['edit_usermissing'] = 'Выбранный пользователь не найден. Возможно, указанный логин был удалён или изменен извне.';
+$lang['edit_usermissing'] = 'Выбранный пользователь не найден. Возможно, указанный логин был удалён или изменён извне.';
$lang['user_notify'] = 'Сообщить пользователю';
$lang['note_notify'] = 'Письма с уведомлением высылаются только в случае получения нового пароля.';
$lang['note_group'] = 'Если группа не указана, новые пользователи будут добавлены в группу по умолчанию (%s).';
$lang['note_pass'] = 'Пароль будет сгенерирован автоматически, если поле оставлено пустым и включено уведомление пользователя.';
$lang['add_ok'] = 'Пользователь успешно добавлен';
$lang['add_fail'] = 'Не удалось добавить пользователя';
-$lang['notify_ok'] = 'Пиьмо с уведомлением отправлено';
+$lang['notify_ok'] = 'Письмо с уведомлением отправлено';
$lang['notify_fail'] = 'Не удалось отправить письмо с уведомлением';
diff --git a/lib/plugins/usermanager/lang/sl/lang.php b/lib/plugins/usermanager/lang/sl/lang.php
index e31f8ff1a..b671d65dc 100644
--- a/lib/plugins/usermanager/lang/sl/lang.php
+++ b/lib/plugins/usermanager/lang/sl/lang.php
@@ -4,17 +4,35 @@
*
* @author Dejan Levec <webphp@gmail.com>
* @author Boštjan Seničar <senicar@gmail.com>
+ * @author Gregor Skumavc (grega.skumavc@gmail.com)
*/
+$lang['menu'] = 'Urejanje uporabnikov';
+$lang['noauth'] = '(preverjanje uporabnikov ni na voljo)';
+$lang['nosupport'] = '(urejanje uporabnikov ni podprto)';
+$lang['badauth'] = 'neeljaven mehanizem za preverjanje';
$lang['user_id'] = 'Uporabnik';
$lang['user_pass'] = 'Geslo';
+$lang['user_name'] = 'Pravo ime';
$lang['user_mail'] = 'Email';
$lang['user_groups'] = 'Skupine';
+$lang['field'] = 'Polje';
+$lang['value'] = 'Vrednost';
$lang['add'] = 'Dodaj';
$lang['delete'] = 'Izbriši';
$lang['delete_selected'] = 'Izbriši izbrano';
$lang['edit'] = 'Uredi';
+$lang['edit_prompt'] = 'Uredi tega uporabnika';
$lang['modify'] = 'Shrani spremembe';
$lang['search'] = 'Iskanje';
+$lang['search_prompt'] = 'Išči';
+$lang['clear'] = 'Ponastavi filter iskanja';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Prikazujem uporabnike %1$d-%2$d od najdenih %3$d. Vseh je %4$d.';
+$lang['nonefound'] = 'Ni najdenih uporabnikov. Vseh uporabnikov je %d.';
+$lang['delete_ok'] = '%d uporabnikov izbrisanih';
+$lang['delete_fail'] = '%d ni bilo možno izbrisati';
+$lang['update_ok'] = 'Uporabnik uspešno posodobljen';
+$lang['update_fail'] = 'Posodobitev uporabnika ni uspela';
$lang['prev'] = 'Prejšnji';
$lang['next'] = 'Naslednji';
$lang['last'] = 'Zadnji';
diff --git a/lib/scripts/ajax.js b/lib/scripts/ajax.js
index de009d448..d752edb38 100644
--- a/lib/scripts/ajax.js
+++ b/lib/scripts/ajax.js
@@ -31,6 +31,55 @@ addInitEvent(function () {
outObj.innerHTML = data;
outObj.style.display = 'block';
+ outObj.style['white-space'] = 'nowrap';
+
+ // shorten namespaces if too long
+ var width = outObj.clientWidth;
+ var links = outObj.getElementsByTagName('a');
+ for(var i=0; i<links.length; i++){
+ // maximum allowed width:
+ var max = width - links[i].offsetLeft;
+ var isRTL = (document.documentElement.dir == 'rtl');
+
+ if(!isRTL && links[i].offsetWidth < max) continue;
+ if(isRTL && links[i].offsetLeft > 0) continue;
+
+ var nsL = links[i].innerText.indexOf('(');
+ var nsR = links[i].innerText.indexOf(')');
+ var eli = 0;
+ var runaway = 0;
+
+ while( (nsR - nsL > 3) &&
+ (
+ (!isRTL && links[i].offsetWidth > max) ||
+ (isRTL && links[i].offsetLeft < 0)
+ )
+ ){
+ if(runaway++ > 500) return; // just in case something went wrong
+
+ if(eli){
+ // elipsis already inserted
+ if( (eli - nsL) > (nsR - eli) ){
+ // cut left
+ links[i].innerText = links[i].innerText.substring(0,eli-2)+
+ links[i].innerText.substring(eli);
+ }else{
+ // cut right
+ links[i].innerText = links[i].innerText.substring(0,eli+1)+
+ links[i].innerText.substring(eli+2);
+ }
+ }else{
+ // replace middle with ellipsis
+ var mid = Math.floor( nsL + ((nsR-nsL)/2) );
+ links[i].innerText = links[i].innerText.substring(0,mid)+'…'+
+ links[i].innerText.substring(mid+1);
+ }
+ eli = links[i].innerText.indexOf('…');
+ nsL = links[i].innerText.indexOf('(');
+ nsR = links[i].innerText.indexOf(')');
+ }
+ }
+
};
// attach eventhandler to search field
diff --git a/lib/tpl/default/rtl.css b/lib/tpl/default/rtl.css
index e40dd966d..82c85839b 100644
--- a/lib/tpl/default/rtl.css
+++ b/lib/tpl/default/rtl.css
@@ -55,8 +55,7 @@ div.dokuwiki li ol {
div.dokuwiki a.urlextern,
div.dokuwiki a.interwiki,
div.dokuwiki a.windows,
-div.dokuwiki a.mail,
-div.dokuwiki a.mail.JSnocheck {
+div.dokuwiki a.mail {
/* should work but doesn't - so we just disable icons here*/
/*
background-position: right 1px;