summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_test/tests/inc/init_checkssl.test.php81
-rw-r--r--_test/tests/inc/input.test.php50
-rw-r--r--inc/Input.class.php58
-rw-r--r--inc/auth.php14
-rw-r--r--inc/common.php30
-rw-r--r--inc/fulltext.php2
-rw-r--r--inc/infoutils.php7
-rw-r--r--inc/init.php12
-rw-r--r--inc/lang/ar/lang.php13
-rw-r--r--inc/lang/cs/lang.php5
-rw-r--r--inc/lang/de/backlinks.txt2
-rw-r--r--inc/lang/de/lang.php2
-rw-r--r--inc/lang/es/lang.php1
-rw-r--r--inc/lang/fa/index.txt4
-rw-r--r--inc/lang/fa/lang.php64
-rw-r--r--inc/lang/fr/denied.txt2
-rw-r--r--inc/lang/fr/lang.php2
-rw-r--r--inc/lang/fr/newpage.txt2
-rw-r--r--inc/lang/hr/adminplugins.txt2
-rw-r--r--inc/lang/hr/backlinks.txt4
-rw-r--r--inc/lang/hr/edit.txt2
-rw-r--r--inc/lang/hr/index.txt4
-rw-r--r--inc/lang/hr/lang.php127
-rw-r--r--inc/lang/hr/revisions.txt2
-rw-r--r--inc/lang/hr/searchpage.txt6
-rw-r--r--inc/lang/hr/showrev.txt2
-rw-r--r--inc/lang/it/lang.php1
-rw-r--r--inc/lang/pt-br/lang.php2
-rw-r--r--inc/lang/ru/lang.php1
-rw-r--r--inc/lang/ta/lang.php7
-rw-r--r--inc/lang/zh-tw/lang.php2
-rw-r--r--inc/lang/zh/lang.php2
-rw-r--r--inc/template.php6
-rw-r--r--lib/plugins/acl/lang/fr/help.txt2
-rw-r--r--lib/plugins/auth.php5
-rw-r--r--lib/plugins/authad/auth.php3
-rw-r--r--lib/plugins/authad/lang/ar/lang.php8
-rw-r--r--lib/plugins/authad/lang/cs/lang.php8
-rw-r--r--lib/plugins/authad/lang/fa/lang.php8
-rw-r--r--lib/plugins/authad/lang/pt-br/lang.php8
-rw-r--r--lib/plugins/authad/lang/zh-tw/lang.php8
-rw-r--r--lib/plugins/authad/lang/zh-tw/settings.php2
-rw-r--r--lib/plugins/authldap/auth.php13
-rw-r--r--lib/plugins/authldap/lang/hr/settings.php4
-rw-r--r--lib/plugins/authmysql/auth.php188
-rw-r--r--lib/plugins/authmysql/lang/fa/settings.php10
-rw-r--r--lib/plugins/authmysql/lang/hr/settings.php2
-rw-r--r--lib/plugins/authpgsql/auth.php8
-rw-r--r--lib/plugins/authpgsql/lang/es/settings.php12
-rw-r--r--lib/plugins/authpgsql/lang/fa/settings.php8
-rw-r--r--lib/plugins/authplain/auth.php3
-rw-r--r--lib/plugins/extension/helper/list.php10
-rw-r--r--lib/plugins/extension/lang/cs/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/cs/lang.php57
-rw-r--r--lib/plugins/extension/lang/fa/lang.php40
-rw-r--r--lib/plugins/extension/lang/hr/lang.php48
-rw-r--r--lib/plugins/extension/lang/it/lang.php2
-rw-r--r--lib/plugins/extension/lang/pt-br/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/pt-br/intro_plugins.txt1
-rw-r--r--lib/plugins/extension/lang/pt-br/intro_search.txt1
-rw-r--r--lib/plugins/extension/lang/pt-br/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/pt-br/lang.php75
-rw-r--r--lib/plugins/extension/lang/ru/lang.php8
-rw-r--r--lib/plugins/extension/lang/zh-tw/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/zh-tw/lang.php39
-rw-r--r--lib/plugins/popularity/lang/hr/intro.txt7
-rw-r--r--lib/plugins/popularity/lang/hr/lang.php14
-rw-r--r--lib/plugins/popularity/lang/hr/submitted.txt3
-rw-r--r--lib/plugins/revert/lang/ar/lang.php1
-rw-r--r--lib/plugins/revert/lang/cs/lang.php2
-rw-r--r--lib/plugins/revert/lang/hr/intro.txt3
-rw-r--r--lib/plugins/revert/lang/hr/lang.php16
-rw-r--r--lib/plugins/usermanager/lang/fa/lang.php16
-rw-r--r--lib/plugins/usermanager/lang/hr/add.txt1
-rw-r--r--lib/plugins/usermanager/lang/hr/delete.txt1
-rw-r--r--lib/plugins/usermanager/lang/hr/edit.txt1
-rw-r--r--lib/plugins/usermanager/lang/hr/import.txt9
-rw-r--r--lib/plugins/usermanager/lang/hr/intro.txt1
-rw-r--r--lib/plugins/usermanager/lang/hr/lang.php66
-rw-r--r--lib/plugins/usermanager/lang/hr/list.txt1
-rw-r--r--lib/plugins/usermanager/lang/it/lang.php6
-rw-r--r--lib/plugins/usermanager/lang/ru/lang.php2
82 files changed, 1052 insertions, 204 deletions
diff --git a/_test/tests/inc/init_checkssl.test.php b/_test/tests/inc/init_checkssl.test.php
new file mode 100644
index 000000000..c57d3c37e
--- /dev/null
+++ b/_test/tests/inc/init_checkssl.test.php
@@ -0,0 +1,81 @@
+<?php
+
+class init_checkssl_test extends DokuWikiTest {
+
+ /**
+ * Running behind an SSL proxy, HTTP between server and proxy
+ * HTTPS not set
+ * HTTP_X_FORWARDED_PROTO
+ * set to https
+ */
+ function test1() {
+ $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'https';
+
+ $this->assertEquals(is_ssl(), true);
+ }
+
+ /**
+ * Running behind a plain HTTP proxy, HTTP between server and proxy
+ * HTTPS not set
+ * HTTP_X_FORWARDED_PROTO set to http
+ */
+ function test2() {
+ $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'http';
+
+ $this->assertEquals(is_ssl(), false);
+ }
+
+ /**
+ * Running behind an SSL proxy, HTTP between server and proxy
+ * HTTPS set to off,
+ * HTTP_X_FORWARDED_PROTO set to https
+ */
+ function test3() {
+ $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'https';
+ $_SERVER['HTTPS'] = 'off';
+
+ $this->assertEquals(is_ssl(), true);
+ }
+
+ /**
+ * Not running behind a proxy, HTTPS server
+ * HTTPS set to on,
+ * HTTP_X_FORWARDED_PROTO not set
+ */
+ function test4() {
+ $_SERVER['HTTPS'] = 'on';
+
+ $this->assertEquals(is_ssl(), true);
+ }
+
+ /**
+ * Not running behind a proxy, plain HTTP server
+ * HTTPS not set
+ * HTTP_X_FORWARDED_PROTO not set
+ */
+ function test5() {
+ $this->assertEquals(is_ssl(), false);
+ }
+
+ /**
+ * Not running behind a proxy, plain HTTP server
+ * HTTPS set to off
+ * HTTP_X_FORWARDED_PROTO not set
+ */
+ function test6() {
+ $_SERVER['HTTPS'] = 'off';
+ $this->assertEquals(is_ssl(), false);
+ }
+
+ /**
+ * Running behind an SSL proxy, SSL between proxy and HTTP server
+ * HTTPS set to on,
+ * HTTP_X_FORWARDED_PROTO set to https
+ */
+ function test7() {
+ $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'https';
+ $_SERVER['HTTPS'] = 'on';
+
+ $this->assertEquals(is_ssl(), true);
+ }
+}
diff --git a/_test/tests/inc/input.test.php b/_test/tests/inc/input.test.php
index cec0b80f6..4a8fb8d71 100644
--- a/_test/tests/inc/input.test.php
+++ b/_test/tests/inc/input.test.php
@@ -14,8 +14,58 @@ class input_test extends DokuWikiTest {
'empty' => '',
'emptya' => array(),
'do' => array('save' => 'Speichern'),
+
);
+ /**
+ * custom filter function
+ *
+ * @param $string
+ * @return mixed
+ */
+ public function myfilter($string) {
+ $string = str_replace('foo', 'bar', $string);
+ $string = str_replace('baz', '', $string);
+ return $string;
+ }
+
+ public function test_filter() {
+ $_GET = array(
+ 'foo' => 'foo',
+ 'zstring'=> "foo\0bar",
+ 'znull' => "\0",
+ 'zint' => '42'."\0".'42',
+ 'zintbaz'=> "baz42",
+ );
+ $_POST = $_GET;
+ $_REQUEST = $_GET;
+ $INPUT = new Input();
+
+ $filter = array($this,'myfilter');
+
+ $this->assertNotSame('foobar', $INPUT->str('zstring'));
+ $this->assertSame('foobar', $INPUT->filter()->str('zstring'));
+ $this->assertSame('bar', $INPUT->filter($filter)->str('foo'));
+ $this->assertSame('bar', $INPUT->filter()->str('znull', 'bar', true));
+ $this->assertNotSame('foobar', $INPUT->str('zstring')); // make sure original input is unmodified
+
+ $this->assertNotSame('foobar', $INPUT->get->str('zstring'));
+ $this->assertSame('foobar', $INPUT->get->filter()->str('zstring'));
+ $this->assertSame('bar', $INPUT->get->filter($filter)->str('foo'));
+ $this->assertSame('bar', $INPUT->get->filter()->str('znull', 'bar', true));
+ $this->assertNotSame('foobar', $INPUT->get->str('zstring')); // make sure original input is unmodified
+
+ $this->assertNotSame(4242, $INPUT->int('zint'));
+ $this->assertSame(4242, $INPUT->filter()->int('zint'));
+ $this->assertSame(42, $INPUT->filter($filter)->int('zintbaz'));
+ $this->assertSame(42, $INPUT->filter()->str('znull', 42, true));
+
+ $this->assertSame(true, $INPUT->bool('znull'));
+ $this->assertSame(false, $INPUT->filter()->bool('znull'));
+
+ $this->assertSame('foobar', $INPUT->filter()->valid('zstring', array('foobar', 'bang')));
+ }
+
public function test_str() {
$_REQUEST = $this->data;
$_POST = $this->data;
diff --git a/inc/Input.class.php b/inc/Input.class.php
index e7eef1c29..94da2a10e 100644
--- a/inc/Input.class.php
+++ b/inc/Input.class.php
@@ -21,6 +21,11 @@ class Input {
protected $access;
/**
+ * @var Callable
+ */
+ protected $filter;
+
+ /**
* Intilizes the Input class and it subcomponents
*/
function __construct() {
@@ -31,6 +36,32 @@ class Input {
}
/**
+ * Apply the set filter to the given value
+ *
+ * @param string $data
+ * @return string
+ */
+ protected function applyfilter($data){
+ if(!$this->filter) return $data;
+ return call_user_func($this->filter, $data);
+ }
+
+ /**
+ * Return a filtered copy of the input object
+ *
+ * Expects a callable that accepts one string parameter and returns a filtered string
+ *
+ * @param Callable|string $filter
+ * @return Input
+ */
+ public function filter($filter='stripctl'){
+ $this->filter = $filter;
+ $clone = clone $this;
+ $this->filter = '';
+ return $clone;
+ }
+
+ /**
* Check if a parameter was set
*
* Basically a wrapper around isset. When called on the $post and $get subclasses,
@@ -77,8 +108,9 @@ class Input {
*/
public function param($name, $default = null, $nonempty = false) {
if(!isset($this->access[$name])) return $default;
- if($nonempty && empty($this->access[$name])) return $default;
- return $this->access[$name];
+ $value = $this->applyfilter($this->access[$name]);
+ if($nonempty && empty($value)) return $default;
+ return $value;
}
/**
@@ -121,10 +153,11 @@ class Input {
public function int($name, $default = 0, $nonempty = false) {
if(!isset($this->access[$name])) return $default;
if(is_array($this->access[$name])) return $default;
- if($this->access[$name] === '') return $default;
- if($nonempty && empty($this->access[$name])) return $default;
+ $value = $this->applyfilter($this->access[$name]);
+ if($value === '') return $default;
+ if($nonempty && empty($value)) return $default;
- return (int) $this->access[$name];
+ return (int) $value;
}
/**
@@ -138,9 +171,10 @@ class Input {
public function str($name, $default = '', $nonempty = false) {
if(!isset($this->access[$name])) return $default;
if(is_array($this->access[$name])) return $default;
- if($nonempty && empty($this->access[$name])) return $default;
+ $value = $this->applyfilter($this->access[$name]);
+ if($nonempty && empty($value)) return $default;
- return (string) $this->access[$name];
+ return (string) $value;
}
/**
@@ -158,7 +192,8 @@ class Input {
public function valid($name, $valids, $default = null) {
if(!isset($this->access[$name])) return $default;
if(is_array($this->access[$name])) return $default; // we don't allow arrays
- $found = array_search($this->access[$name], $valids);
+ $value = $this->applyfilter($this->access[$name]);
+ $found = array_search($value, $valids);
if($found !== false) return $valids[$found]; // return the valid value for type safety
return $default;
}
@@ -176,10 +211,11 @@ class Input {
public function bool($name, $default = false, $nonempty = false) {
if(!isset($this->access[$name])) return $default;
if(is_array($this->access[$name])) return $default;
- if($this->access[$name] === '') return $default;
- if($nonempty && empty($this->access[$name])) return $default;
+ $value = $this->applyfilter($this->access[$name]);
+ if($value === '') return $default;
+ if($nonempty && empty($value)) return $default;
- return (bool) $this->access[$name];
+ return (bool) $value;
}
/**
diff --git a/inc/auth.php b/inc/auth.php
index e224b2fb5..e938830ef 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -95,9 +95,10 @@ function auth_setup() {
$INPUT->set('http_credentials', true);
}
- // apply cleaning
+ // apply cleaning (auth specific user names, remove control chars)
if (true === $auth->success) {
- $INPUT->set('u', $auth->cleanUser($INPUT->str('u')));
+ $INPUT->set('u', $auth->cleanUser(stripctl($INPUT->str('u'))));
+ $INPUT->set('p', stripctl($INPUT->str('p')));
}
if($INPUT->str('authtok')) {
@@ -228,7 +229,7 @@ function auth_login($user, $pass, $sticky = false, $silent = false) {
if(!empty($user)) {
//usual login
- if($auth->checkPass($user, $pass)) {
+ if(!empty($pass) && $auth->checkPass($user, $pass)) {
// make logininfo globally available
$INPUT->server->set('REMOTE_USER', $user);
$secret = auth_cookiesalt(!$sticky, true); //bind non-sticky to session
@@ -638,6 +639,7 @@ function auth_isMember($memberlist, $user, array $groups) {
// compare cleaned values
foreach($members as $member) {
+ if($member == '@ALL' ) return true;
if(!$auth->isCaseSensitive()) $member = utf8_strtolower($member);
if($member[0] == '@') {
$member = $auth->cleanGroup(substr($member, 1));
@@ -922,7 +924,7 @@ function auth_sendPassword($user, $password) {
if(!$auth) return false;
$user = $auth->cleanUser($user);
- $userinfo = $auth->getUserData($user);
+ $userinfo = $auth->getUserData($user, $requireGroups = false);
if(!$userinfo['mail']) return false;
@@ -1184,7 +1186,7 @@ function act_resendpwd() {
}
$user = io_readfile($tfile);
- $userinfo = $auth->getUserData($user);
+ $userinfo = $auth->getUserData($user, $requireGroups = false);
if(!$userinfo['mail']) {
msg($lang['resendpwdnouser'], -1);
return false;
@@ -1236,7 +1238,7 @@ function act_resendpwd() {
$user = trim($auth->cleanUser($INPUT->post->str('login')));
}
- $userinfo = $auth->getUserData($user);
+ $userinfo = $auth->getUserData($user, $requireGroups = false);
if(!$userinfo['mail']) {
msg($lang['resendpwdnouser'], -1);
return false;
diff --git a/inc/common.php b/inc/common.php
index 8c9956018..e56285f62 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -1583,7 +1583,7 @@ function shorten($keep, $short, $max, $min = 9, $char = '…') {
}
/**
- * Return the users realname or e-mail address for use
+ * Return the users real name or e-mail address for use
* in page footer and recent changes pages
*
* @param string|null $username or null when currently logged-in user should be used
@@ -1641,22 +1641,20 @@ function userlink($username = null, $textonly = false) {
$evt = new Doku_Event('COMMON_USER_LINK', $data);
if($evt->advise_before(true)) {
if(empty($data['name'])) {
- if($conf['showuseras'] == 'loginname') {
- $data['name'] = $textonly ? $data['username'] : hsc($data['username']);
- } else {
- if($auth) $info = $auth->getUserData($username);
- if(isset($info) && $info) {
- switch($conf['showuseras']) {
- case 'username':
- case 'username_link':
- $data['name'] = $textonly ? $info['name'] : hsc($info['name']);
- break;
- case 'email':
- case 'email_link':
- $data['name'] = obfuscate($info['mail']);
- break;
- }
+ if($auth) $info = $auth->getUserData($username);
+ if($conf['showuseras'] != 'loginname' && isset($info) && $info) {
+ switch($conf['showuseras']) {
+ case 'username':
+ case 'username_link':
+ $data['name'] = $textonly ? $info['name'] : hsc($info['name']);
+ break;
+ case 'email':
+ case 'email_link':
+ $data['name'] = obfuscate($info['mail']);
+ break;
}
+ } else {
+ $data['name'] = $textonly ? $data['username'] : hsc($data['username']);
}
}
diff --git a/inc/fulltext.php b/inc/fulltext.php
index dd918f214..aaef090e1 100644
--- a/inc/fulltext.php
+++ b/inc/fulltext.php
@@ -215,7 +215,7 @@ function ft_pageLookup($id, $in_ns=false, $in_title=false){
function _ft_pageLookup(&$data){
// split out original parameters
$id = $data['id'];
- if (preg_match('/(?:^| )@(\w+)/', $id, $matches)) {
+ if (preg_match('/(?:^| )(?:@|ns:)([\w:]+)/', $id, $matches)) {
$ns = cleanID($matches[1]) . ':';
$id = str_replace($matches[0], '', $id);
}
diff --git a/inc/infoutils.php b/inc/infoutils.php
index db856141f..f9ba11560 100644
--- a/inc/infoutils.php
+++ b/inc/infoutils.php
@@ -30,7 +30,12 @@ function checkUpdateMessages(){
$http = new DokuHTTPClient();
$http->timeout = 12;
$data = $http->get(DOKU_MESSAGEURL.$updateVersion);
- io_saveFile($cf,$data);
+ if(substr(trim($data), -1) != '%') {
+ // this doesn't look like one of our messages, maybe some WiFi login interferred
+ $data = '';
+ }else {
+ io_saveFile($cf,$data);
+ }
}else{
dbglog("checkUpdateMessages(): messages.txt up to date");
$data = io_readFile($cf);
diff --git a/inc/init.php b/inc/init.php
index 4ff239787..d825b5250 100644
--- a/inc/init.php
+++ b/inc/init.php
@@ -456,10 +456,6 @@ function getBaseURL($abs=null){
$port = '';
}
- if(!$port && isset($_SERVER['SERVER_PORT'])) {
- $port = $_SERVER['SERVER_PORT'];
- }
-
if(is_null($port)){
$port = '';
}
@@ -490,6 +486,14 @@ function getBaseURL($abs=null){
* @returns bool true when SSL is active
*/
function is_ssl(){
+ // check if we are behind a reverse proxy
+ if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
+ if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
+ return true;
+ } else {
+ return false;
+ }
+ }
if (!isset($_SERVER['HTTPS']) ||
preg_match('/^(|off|false|disabled)$/i',$_SERVER['HTTPS'])){
return false;
diff --git a/inc/lang/ar/lang.php b/inc/lang/ar/lang.php
index a63e1ed44..9d192639b 100644
--- a/inc/lang/ar/lang.php
+++ b/inc/lang/ar/lang.php
@@ -9,6 +9,7 @@
* @author uahello@gmail.com
* @author Ahmad Abd-Elghany <tolpa1@gmail.com>
* @author alhajr <alhajr300@gmail.com>
+ * @author Mohamed Belhsine <b.mohamed897@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'rtl';
@@ -53,6 +54,8 @@ $lang['btn_register'] = 'سجّل';
$lang['btn_apply'] = 'طبق';
$lang['btn_media'] = 'مدير الوسائط';
$lang['btn_deleteuser'] = 'احذف حسابي الخاص';
+$lang['btn_img_backto'] = 'عودة إلى %s';
+$lang['btn_mediaManager'] = 'اعرض في مدير الوسائط';
$lang['loggedinas'] = 'داخل باسم:';
$lang['user'] = 'اسم المستخدم';
$lang['pass'] = 'كلمة السر';
@@ -86,6 +89,7 @@ $lang['profdeleteuser'] = 'احذف حساب';
$lang['profdeleted'] = 'حسابك الخاص تم حذفه من هذه الموسوعة';
$lang['profconfdelete'] = 'أنا أرغب في حذف حسابي من هذه الموسوعة.<br/>
هذا الحدث غير ممكن.';
+$lang['profconfdeletemissing'] = 'لم تقم بوضع علامة في مربع التأكيد';
$lang['pwdforget'] = 'أنسيت كلمة السر؟ احصل على واحدة جديدة';
$lang['resendna'] = 'هذه الويكي لا تدعم إعادة إرسال كلمة المرور.';
$lang['resendpwd'] = 'اضبط كلمة سر جديدة لـ';
@@ -183,6 +187,11 @@ $lang['difflink'] = 'رابط إلى هذه المقارنة';
$lang['diff_type'] = 'أظهر الفروق:';
$lang['diff_inline'] = 'ضمنا';
$lang['diff_side'] = 'جنبا إلى جنب';
+$lang['diffprevrev'] = 'المراجعة السابقة';
+$lang['diffnextrev'] = 'المراجعة التالية';
+$lang['difflastrev'] = 'المراجعة الأخيرة';
+$lang['diffbothprevrev'] = 'جانبي المراجعة السابقة';
+$lang['diffbothnextrev'] = 'جانبي المراجعة التالية';
$lang['line'] = 'سطر';
$lang['breadcrumb'] = 'أثر:';
$lang['youarehere'] = 'أنت هنا:';
@@ -239,7 +248,6 @@ $lang['admin_register'] = 'أضف مستخدما جديدا';
$lang['metaedit'] = 'تحرير البيانات الشمولية ';
$lang['metasaveerr'] = 'فشلت كتابة البيانات الشمولية';
$lang['metasaveok'] = 'حُفظت البيانات الشمولية';
-$lang['btn_img_backto'] = 'عودة إلى %s';
$lang['img_title'] = 'العنوان:';
$lang['img_caption'] = 'وصف:';
$lang['img_date'] = 'التاريخ:';
@@ -252,7 +260,6 @@ $lang['img_camera'] = 'الكمرا:';
$lang['img_keywords'] = 'كلمات مفتاحية:';
$lang['img_width'] = 'العرض:';
$lang['img_height'] = 'الإرتفاع:';
-$lang['btn_mediaManager'] = 'اعرض في مدير الوسائط';
$lang['subscr_subscribe_success'] = 'اضيف %s لقائمة اشتراك %s';
$lang['subscr_subscribe_error'] = 'خطأ في إضافة %s لقائمة اشتراك %s';
$lang['subscr_subscribe_noaddress'] = 'ليس هناك عنوان مرتبط بولوجك، لا يمكن اضافتك لقائمة الاشتراك';
@@ -287,6 +294,7 @@ $lang['i_phpver'] = 'نسخة PHP التي لديك هي
وهي أقل من النسخة المطلوبة
<code>%s</code>
عليك تحديث نسخة PHP';
+$lang['i_mbfuncoverload'] = 'يجب ايقاف تشغيل mbstring.func_overload في ملف php.ini لتشغيل دوكوويكي.';
$lang['i_permfail'] = 'إن <code>%s</code> غير قابل للكتابة بواسطة دوكو ويكي، عليك تعديل إعدادات الصلاحيات لهذا المجلد!';
$lang['i_confexists'] = 'إن <code>%s</code> موجود أصلاً';
$lang['i_writeerr'] = 'لا يمكن إنشاء <code>%s</code>، عليك التأكد من صلاحيات الملف أو المجلد وإنشاء الملف يدوياً.';
@@ -340,4 +348,5 @@ $lang['media_update'] = 'ارفع إصدارا أحدث';
$lang['media_restore'] = 'استرجع هذه النسخة';
$lang['currentns'] = 'مساحة الاسم الحالية';
$lang['searchresult'] = 'نتيجة البحث';
+$lang['plainhtml'] = 'نص HTML غير منسق';
$lang['wikimarkup'] = 'علامات الوكي';
diff --git a/inc/lang/cs/lang.php b/inc/lang/cs/lang.php
index fa0a65044..4d084d479 100644
--- a/inc/lang/cs/lang.php
+++ b/inc/lang/cs/lang.php
@@ -17,6 +17,8 @@
* @author Zbyněk Křivka <krivka@fit.vutbr.cz>
* @author Petr Klíma <qaxi@seznam.cz>
* @author Radovan Buroň <radovan@buron.cz>
+ * @author Viktor Zavadil <vzavadil@newps.cz>
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -194,6 +196,9 @@ $lang['difflink'] = 'Odkaz na výstup diff';
$lang['diff_type'] = 'Zobrazit rozdíly:';
$lang['diff_inline'] = 'Vložené';
$lang['diff_side'] = 'Přidané';
+$lang['diffprevrev'] = 'Předchozí verze';
+$lang['diffnextrev'] = 'Následující verze';
+$lang['difflastrev'] = 'Poslední revize';
$lang['line'] = 'Řádek';
$lang['breadcrumb'] = 'Historie:';
$lang['youarehere'] = 'Umístění:';
diff --git a/inc/lang/de/backlinks.txt b/inc/lang/de/backlinks.txt
index 1ffa815c2..25e0ed5f9 100644
--- a/inc/lang/de/backlinks.txt
+++ b/inc/lang/de/backlinks.txt
@@ -1,5 +1,5 @@
====== Links hierher ======
-Dies ist eine Liste der Seiten, welche zurück zur momentanen Seite verlinken.
+Dies ist eine Liste der Seiten, welche zurück zur momentanen Seite führen.
diff --git a/inc/lang/de/lang.php b/inc/lang/de/lang.php
index 12b7db396..183571681 100644
--- a/inc/lang/de/lang.php
+++ b/inc/lang/de/lang.php
@@ -26,6 +26,7 @@
* @author Joerg <scooter22@gmx.de>
* @author Simon <st103267@stud.uni-stuttgart.de>
* @author Hoisl <hoisl@gmx.at>
+ * @author Marcel Eickhoff <eickhoff.marcel@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -299,6 +300,7 @@ $lang['i_problems'] = 'Das Installationsprogramm hat unten aufgeführ
$lang['i_modified'] = 'Aus Sicherheitsgründen arbeitet dieses Skript nur mit einer neuen bzw. nicht modifizierten DokuWiki Installation. Sie sollten entweder alle Dateien noch einmal frisch installieren oder die <a href="http://dokuwiki.org/install">Dokuwiki-Installationsanleitung</a> konsultieren.';
$lang['i_funcna'] = 'Die PHP-Funktion <code>%s</code> ist nicht verfügbar. Unter Umständen wurde sie von Ihrem Hoster deaktiviert?';
$lang['i_phpver'] = 'Ihre PHP-Version <code>%s</code> ist niedriger als die benötigte Version <code>%s</code>. Bitte aktualisieren Sie Ihre PHP-Installation.';
+$lang['i_mbfuncoverload'] = 'Um DokuWiki zu starten muss mbstring.func_overload in php.ini ausgeschaltet sein.';
$lang['i_permfail'] = '<code>%s</code> ist nicht durch DokuWiki beschreibbar. Sie müssen die Berechtigungen dieses Ordners ändern!';
$lang['i_confexists'] = '<code>%s</code> existiert bereits';
$lang['i_writeerr'] = '<code>%s</code> konnte nicht erzeugt werden. Sie sollten die Verzeichnis-/Datei-Rechte überprüfen und die Datei manuell anlegen.';
diff --git a/inc/lang/es/lang.php b/inc/lang/es/lang.php
index 03cbd51d2..47bee3b6f 100644
--- a/inc/lang/es/lang.php
+++ b/inc/lang/es/lang.php
@@ -36,6 +36,7 @@
* @author Eloy <ej.perezgomez@gmail.com>
* @author Antonio Castilla <antoniocastilla@trazoide.com>
* @author Jonathan Hernández <me@jhalicea.com>
+ * @author pokesakura <pokesakura@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
diff --git a/inc/lang/fa/index.txt b/inc/lang/fa/index.txt
index 89ed74b7d..993c8d164 100644
--- a/inc/lang/fa/index.txt
+++ b/inc/lang/fa/index.txt
@@ -1,3 +1,3 @@
-====== فهرست ======
+====== نقشه‌ی سایت ======
-این صفحه فهرست تمامی صفحات بر اساس [[doku>namespaces|فضای‌نام‌ها]] است. \ No newline at end of file
+این صفحه حاوی فهرست تمامی صفحات موجود به ترتیب [[doku>namespaces|فضای‌نام‌ها]] است. \ No newline at end of file
diff --git a/inc/lang/fa/lang.php b/inc/lang/fa/lang.php
index d3016c0bd..96ffcaf90 100644
--- a/inc/lang/fa/lang.php
+++ b/inc/lang/fa/lang.php
@@ -11,6 +11,8 @@
* @author AmirH Hassaneini <mytechmix@gmail.com>
* @author mehrdad <mehrdad.jafari.bojd@gmail.com>
* @author reza_khn <reza_khn@yahoo.com>
+ * @author Hamid <zarrabi@sharif.edu>
+ * @author Mohamad Mehdi Habibi <habibi.esf@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'rtl';
@@ -38,30 +40,32 @@ $lang['btn_secedit'] = 'ویرایش';
$lang['btn_login'] = 'ورود به سیستم';
$lang['btn_logout'] = 'خروج از سیستم';
$lang['btn_admin'] = 'مدیر';
-$lang['btn_update'] = 'به روز رسانی';
+$lang['btn_update'] = 'به‌روزرسانی';
$lang['btn_delete'] = 'حذف';
$lang['btn_back'] = 'عقب';
$lang['btn_backlink'] = 'پیوندهای به این صفحه';
$lang['btn_backtomedia'] = 'بازگشت به انتخاب فایل';
$lang['btn_subscribe'] = 'عضویت در تغییرات صفحه';
-$lang['btn_profile'] = 'به روز رسانی پروفایل';
+$lang['btn_profile'] = 'به‌روزرسانی پروفایل';
$lang['btn_reset'] = 'بازنشاندن';
-$lang['btn_resendpwd'] = 'تعیین کلمه عبور جدید';
+$lang['btn_resendpwd'] = 'تعیین گذرواژه‌ی جدید';
$lang['btn_draft'] = 'ویرایش پیش‌نویس';
$lang['btn_recover'] = 'بازیابی پیش‌نویس';
$lang['btn_draftdel'] = 'حذف پیش‌نویس';
$lang['btn_revert'] = 'بازیابی';
-$lang['btn_register'] = 'یک حساب جدید بسازید';
-$lang['btn_apply'] = 'اعمال کن';
-$lang['btn_media'] = 'مدیریت محتوای چند رسانه ای';
-$lang['btn_deleteuser'] = 'حذف حساب کاربری خود';
-$lang['loggedinas'] = 'به عنوان کاربر روبرو وارد شده‌اید:';
-$lang['user'] = 'نام کاربری:';
-$lang['pass'] = 'گذرواژه‌ی شما';
+$lang['btn_register'] = 'ثبت نام';
+$lang['btn_apply'] = 'اعمال';
+$lang['btn_media'] = 'مدیریت رسانه‌ها';
+$lang['btn_deleteuser'] = 'حساب کاربری مرا حذف کن';
+$lang['btn_img_backto'] = 'بازگشت به %s';
+$lang['btn_mediaManager'] = 'مشاهده در مدیریت رسانه‌ها';
+$lang['loggedinas'] = 'به این عنوان وارد شده‌اید:';
+$lang['user'] = 'نام کاربری';
+$lang['pass'] = 'گذرواژه‌';
$lang['newpass'] = 'گذروازه‌ی جدید';
-$lang['oldpass'] = 'گذرواژه‌ی پیشین';
-$lang['passchk'] = 'گذرواژه را دوباره وارد کنید';
-$lang['remember'] = 'گذرواژه را به یاد بسپار.';
+$lang['oldpass'] = 'گذرواژه‌ی فعلی را تایید کنید';
+$lang['passchk'] = 'یک بار دیگر';
+$lang['remember'] = 'مرا به خاطر بسپار.';
$lang['fullname'] = '*نام واقعی شما';
$lang['email'] = 'ایمیل شما*';
$lang['profile'] = 'پروفایل کاربر';
@@ -86,6 +90,8 @@ $lang['profchanged'] = 'پروفایل کاربر با موفقیت ب
$lang['profnodelete'] = 'ویکی توانایی پشتیبانی از حذف کاربران را ندارد';
$lang['profdeleteuser'] = 'حذف حساب کاربری';
$lang['profdeleted'] = 'حساب کاربری شما حذف گردیده است.';
+$lang['profconfdelete'] = 'می‌خواهم حساب کاربری من از این ویکی حذف شود. <br/> این عمل قابل برگشت نیست.';
+$lang['profconfdeletemissing'] = 'جعبه‌ی تأیید تیک نخورده است';
$lang['pwdforget'] = 'گذرواژه‌ی خود را فراموش کرده‌اید؟ جدید دریافت کنید';
$lang['resendna'] = 'این ویکی ارسال مجدد گذرواژه را پشتیبانی نمی‌کند';
$lang['resendpwd'] = 'تعیین کلمه عبور جدید برای ';
@@ -135,9 +141,9 @@ $lang['js']['nosmblinks'] = 'پیوند به Windows share فقط در ای
شما می‌توانید پیوند‌ها رو کپی کنید.';
$lang['js']['linkwiz'] = 'ویزارد پیوند';
$lang['js']['linkto'] = 'پیوند به:';
-$lang['js']['del_confirm'] = 'واقعن تصمیم به حذف این موارد دارید؟';
-$lang['js']['restore_confirm'] = 'آیا مطمئن هستید که می خواهید این نسخه را بازیابی کنید؟';
-$lang['js']['media_diff'] = 'تفاوت ها را ببینید : ';
+$lang['js']['del_confirm'] = 'واقعا تصمیم به حذف این موارد دارید؟';
+$lang['js']['restore_confirm'] = 'آیا مطمئن هستید که می خواهید این نگارش را بازیابی کنید؟';
+$lang['js']['media_diff'] = 'تفاوت ها را ببینید: ';
$lang['js']['media_diff_both'] = 'پهلو به پهلو';
$lang['js']['media_diff_opacity'] = 'درخشش از';
$lang['js']['media_diff_portions'] = 'کش رفتن';
@@ -184,6 +190,11 @@ $lang['difflink'] = 'پیوند به صفحه‌ی تفاوت‌ه
$lang['diff_type'] = 'مشاهده تغییرات:';
$lang['diff_inline'] = 'خطی';
$lang['diff_side'] = 'کلی';
+$lang['diffprevrev'] = 'نگارش قبل';
+$lang['diffnextrev'] = 'نگارش بعد';
+$lang['difflastrev'] = 'آخرین نگارش';
+$lang['diffbothprevrev'] = 'نگارش قبل در دو طرف';
+$lang['diffbothnextrev'] = 'نگارش بعد در دو طرف';
$lang['line'] = 'خط';
$lang['breadcrumb'] = 'ردپا:';
$lang['youarehere'] = 'محل شما:';
@@ -240,7 +251,6 @@ $lang['admin_register'] = 'یک حساب جدید بسازید';
$lang['metaedit'] = 'ویرایش داده‌های متا';
$lang['metasaveerr'] = 'نوشتن داده‌نما با مشکل مواجه شد';
$lang['metasaveok'] = 'داده‌نما ذخیره شد';
-$lang['btn_img_backto'] = 'بازگشت به %s';
$lang['img_title'] = 'عنوان تصویر:';
$lang['img_caption'] = 'عنوان:';
$lang['img_date'] = 'تاریخ:';
@@ -253,7 +263,6 @@ $lang['img_camera'] = 'دوربین:';
$lang['img_keywords'] = 'واژه‌های کلیدی:';
$lang['img_width'] = 'عرض:';
$lang['img_height'] = 'ارتفاع:';
-$lang['btn_mediaManager'] = 'دیدن در مدیریت محتوای چند رسانه ای';
$lang['subscr_subscribe_success'] = '%s به لیست آبونه %s افزوده شد';
$lang['subscr_subscribe_error'] = 'اشکال در افزودن %s به لیست آبونه %s';
$lang['subscr_subscribe_noaddress'] = 'هیچ آدرسی برای این عضویت اضافه نشده است، شما نمی‌توانید به لیست آبونه اضافه شوید';
@@ -268,6 +277,8 @@ $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['authtempfail'] = 'معتبرسازی کابران موقتن مسدود می‌باشد. اگر این حالت پایدار بود، مدیر ویکی را باخبر سازید.';
$lang['authpwdexpire'] = 'کلمه عبور شما در %d روز منقضی خواهد شد ، شما باید آن را زود تغییر دهید';
$lang['i_chooselang'] = 'انتخاب زبان';
@@ -279,6 +290,7 @@ $lang['i_problems'] = 'نصب کننده با مشکلات زیر م
$lang['i_modified'] = 'به دلایل امنیتی، این اسکریپت فقط با نصب تازه و بدون تغییر DokuWiki کار خواهد کرد.شما باید دوباره فایل فشرده را باز کنید <a href="http://dokuwiki.org/install">راهنمای نصب DokuWiki</a> را بررسی کنید.';
$lang['i_funcna'] = 'تابع <code>%s</code> در PHP موجود نیست. ممکن است شرکت خدمات وب شما آن را مسدود کرده باشد.';
$lang['i_phpver'] = 'نگارش پی‌اچ‌پی <code>%s</code> پایین‌تر از نگارش مورد نیاز، یعنی <code>%s</code> می‌باشد. خواهشمندیم به روز رسانی کنید.';
+$lang['i_mbfuncoverload'] = 'برای اجرای دوکوویکی باید mbstring.func_overload را در php.ini غیرفعال کنید.';
$lang['i_permfail'] = 'شاخه‌ی <code>%s</code> قابلیت نوشتن ندارد. شما باید دسترسی‌های این شاخه را تنظیم کنید!';
$lang['i_confexists'] = '<code>%s</code> پیش‌تر موجود است';
$lang['i_writeerr'] = 'توانایی ایجاد <code>%s</code> نیست. شما باید دسترسی‌های شاخه یا فایل را بررسی کنید و فایل را به طور دستی ایجاد کنید.';
@@ -290,8 +302,12 @@ $lang['i_policy'] = 'کنترل دسترسی‌های اولیه';
$lang['i_pol0'] = 'ویکی باز (همه می‌توانند بخوانند، بنویسند و فایل ارسال کنند)';
$lang['i_pol1'] = 'ویکی عمومی (همه می‌توانند بخوانند، کاربران ثبت شده می‌توانند بنویسند و فایل ارسال کنند)';
$lang['i_pol2'] = 'ویکی بسته (فقط کاربران ثبت شده می‌توانند بخوانند، بنویسند و فایل ارسال کنند)';
+$lang['i_allowreg'] = 'اجازه دهید که کاربران خود را ثبت نام کنند';
$lang['i_retry'] = 'تلاش مجدد';
$lang['i_license'] = 'لطفن مجوز این محتوا را وارد کنید:';
+$lang['i_license_none'] = 'هیچ اطلاعات مجوزی را نشان نده';
+$lang['i_pop_field'] = 'لطفا کمک کنید تا تجربه‌ی دوکوویکی را بهبود دهیم.';
+$lang['i_pop_label'] = 'ماهی یک بار، اطلاعات بدون‌نامی از نحوه‌ی استفاده به توسعه‌دهندگان دوکوویکی ارسال کن';
$lang['recent_global'] = 'شما هم‌اکنون تغییرات فضای‌نام <b>%s</b> را مشاهده می‌کنید. شما هم‌چنین می‌توانید <a href="%s">تغییرات اخیر در کل ویکی را مشاهده نمایید</a>.';
$lang['years'] = '%d سال پیش';
$lang['months'] = '%d ماه پیش';
@@ -319,8 +335,12 @@ $lang['media_view'] = '%s';
$lang['media_viewold'] = '%s در %s';
$lang['media_edit'] = '%s ویرایش';
$lang['media_history'] = 'تاریخچه %s';
-$lang['media_meta_edited'] = 'فرا داده ها ویرایش شدند.';
-$lang['media_perm_read'] = 'متاسفانه ، شما حق خواندن این فایل ها را ندارید.';
-$lang['media_perm_upload'] = 'متاسفانه ، شما حق آپلود این فایل ها را ندارید.';
-$lang['media_update'] = 'آپلود نسخه جدید';
+$lang['media_meta_edited'] = 'فراداده‌ها ویرایش شدند.';
+$lang['media_perm_read'] = 'متاسفانه شما حق خواندن این فایل‌ها را ندارید.';
+$lang['media_perm_upload'] = 'متاسفانه شما حق آپلود این فایل‌ها را ندارید.';
+$lang['media_update'] = 'آپلود نسخه‌ی جدید';
$lang['media_restore'] = 'بازیابی این نسخه';
+$lang['currentns'] = 'فضای نام جاری';
+$lang['searchresult'] = 'نتیجه‌ی جستجو';
+$lang['plainhtml'] = 'HTML ساده';
+$lang['wikimarkup'] = 'نشانه‌گذاری ویکی';
diff --git a/inc/lang/fr/denied.txt b/inc/lang/fr/denied.txt
index da01a4086..6de193004 100644
--- a/inc/lang/fr/denied.txt
+++ b/inc/lang/fr/denied.txt
@@ -1,4 +1,4 @@
====== Autorisation refusée ======
-Désolé, vous n'avez pas suffisement d'autorisations pour poursuivre votre demande.
+Désolé, vous n'avez pas suffisamment d'autorisations pour poursuivre votre demande.
diff --git a/inc/lang/fr/lang.php b/inc/lang/fr/lang.php
index c5edd4cf7..a7651e730 100644
--- a/inc/lang/fr/lang.php
+++ b/inc/lang/fr/lang.php
@@ -360,7 +360,7 @@ $lang['media_perm_read'] = 'Désolé, vous n\'avez pas l\'autorisation de
$lang['media_perm_upload'] = 'Désolé, vous n\'avez pas l\'autorisation d\'envoyer des fichiers.';
$lang['media_update'] = 'Envoyer une nouvelle version';
$lang['media_restore'] = 'Restaurer cette version';
-$lang['currentns'] = 'Namespace actuel';
+$lang['currentns'] = 'Catégorie courante';
$lang['searchresult'] = 'Résultat de la recherche';
$lang['plainhtml'] = 'HTML brut';
$lang['wikimarkup'] = 'Wiki balise';
diff --git a/inc/lang/fr/newpage.txt b/inc/lang/fr/newpage.txt
index b23bf4fe4..c649489fa 100644
--- a/inc/lang/fr/newpage.txt
+++ b/inc/lang/fr/newpage.txt
@@ -1,4 +1,4 @@
====== Cette page n'existe pas encore ======
-Vous avez suivi un lien vers une page qui n'existe pas encore. Si vos autorisations sont suffisants, vous pouvez la créer en cliquant sur « Créer cette page ».
+Vous avez suivi un lien vers une page qui n'existe pas encore. Si vos permissions sont suffisantes, vous pouvez la créer en cliquant sur « Créer cette page ».
diff --git a/inc/lang/hr/adminplugins.txt b/inc/lang/hr/adminplugins.txt
index 556ffda0b..5a7656d27 100644
--- a/inc/lang/hr/adminplugins.txt
+++ b/inc/lang/hr/adminplugins.txt
@@ -1 +1 @@
-===== Dodatni Pluginovi ===== \ No newline at end of file
+===== Dodatni dodatci ===== \ No newline at end of file
diff --git a/inc/lang/hr/backlinks.txt b/inc/lang/hr/backlinks.txt
index e7115a6b6..a78b9213e 100644
--- a/inc/lang/hr/backlinks.txt
+++ b/inc/lang/hr/backlinks.txt
@@ -1,3 +1,3 @@
-====== Linkovi na stranicu ======
+====== Veze na stranicu ======
-Slijedi spisak svih dokumenata koji imaju link na trenutni.
+Slijedi spisak svih stanica koje imaju vezu na trenutnu stranicu.
diff --git a/inc/lang/hr/edit.txt b/inc/lang/hr/edit.txt
index 8cd57d524..bce1abeea 100644
--- a/inc/lang/hr/edit.txt
+++ b/inc/lang/hr/edit.txt
@@ -1 +1 @@
-Nakon što ste napravili sve potrebne promjene - odaberite ''Snimi'' za snimanje dokumenta.
+Uredite stranicu i pritisnite "Snimi". Pogledajte [[wiki:syntax]] za Wiki sintaksu. Molimo izmijenite samo ako možete unaprijediti sadržaj. Ako trebate testirati ili naučiti kako se nešto radi, molimo koristite za to namijenjene stranice kao što je [[playground:playground|igraonica]].
diff --git a/inc/lang/hr/index.txt b/inc/lang/hr/index.txt
index 9c30a805c..4395994c4 100644
--- a/inc/lang/hr/index.txt
+++ b/inc/lang/hr/index.txt
@@ -1 +1,3 @@
-====== Indeks ======
+====== Mapa stranica ======
+
+Ovo je mapa svih dostupnih stranica poredanih po [[doku>namespaces|imenskom prostoru]].
diff --git a/inc/lang/hr/lang.php b/inc/lang/hr/lang.php
index 6a3fa20e2..69157015b 100644
--- a/inc/lang/hr/lang.php
+++ b/inc/lang/hr/lang.php
@@ -16,42 +16,42 @@ $lang['doublequoteclosing'] = '”';
$lang['singlequoteopening'] = '‘';
$lang['singlequoteclosing'] = '’';
$lang['apostrophe'] = '\'';
-$lang['btn_edit'] = 'Izmijeni dokument';
-$lang['btn_source'] = 'Prikaži kod dokumenta';
+$lang['btn_edit'] = 'Izmijeni stranicu';
+$lang['btn_source'] = 'Prikaži kod stranice';
$lang['btn_show'] = 'Prikaži dokument';
-$lang['btn_create'] = 'Novi dokument';
+$lang['btn_create'] = 'Stvori ovu stranicu';
$lang['btn_search'] = 'Pretraži';
$lang['btn_save'] = 'Spremi';
$lang['btn_preview'] = 'Prikaži';
$lang['btn_top'] = 'Na vrh';
$lang['btn_newer'] = '<< noviji';
$lang['btn_older'] = 'stariji >>';
-$lang['btn_revs'] = 'Stare inačice';
+$lang['btn_revs'] = 'Stare promjene';
$lang['btn_recent'] = 'Nedavne izmjene';
-$lang['btn_upload'] = 'Postavi';
+$lang['btn_upload'] = 'Učitaj';
$lang['btn_cancel'] = 'Odustani';
-$lang['btn_index'] = 'Indeks';
-$lang['btn_secedit'] = 'Izmjeni';
+$lang['btn_index'] = 'Mapa lokacije';
+$lang['btn_secedit'] = 'Uredi';
$lang['btn_login'] = 'Prijavi se';
$lang['btn_logout'] = 'Odjavi se';
$lang['btn_admin'] = 'Administriranje';
-$lang['btn_update'] = 'Ažuriraj';
+$lang['btn_update'] = 'Dopuni';
$lang['btn_delete'] = 'Obriši';
-$lang['btn_back'] = 'Povratak';
+$lang['btn_back'] = 'Nazad';
$lang['btn_backlink'] = 'Povratni linkovi';
-$lang['btn_backtomedia'] = 'Povratak na Mediafile izbornik';
-$lang['btn_subscribe'] = 'Pretplati se na promjene dokumenta';
-$lang['btn_profile'] = 'Ažuriraj profil';
-$lang['btn_reset'] = 'Poništi promjene';
+$lang['btn_backtomedia'] = 'Natrag na odabir datoteka';
+$lang['btn_subscribe'] = 'Uređivanje pretplata';
+$lang['btn_profile'] = 'Dopuni profil';
+$lang['btn_reset'] = 'Poništi';
$lang['btn_resendpwd'] = 'Postavi novu lozinku';
$lang['btn_draft'] = 'Uredi nacrt dokumenta';
-$lang['btn_recover'] = 'Vrati prijašnji nacrt dokumenta';
-$lang['btn_draftdel'] = 'Obriši nacrt dokumenta';
+$lang['btn_recover'] = 'Vrati nacrt stranice';
+$lang['btn_draftdel'] = 'Obriši nacrt stranice';
$lang['btn_revert'] = 'Vrati';
$lang['btn_register'] = 'Registracija';
$lang['btn_apply'] = 'Primjeni';
$lang['btn_media'] = 'Upravitelj datoteka';
-$lang['btn_deleteuser'] = 'Ukloni mojeg korisnika';
+$lang['btn_deleteuser'] = 'Ukloni mog korisnika';
$lang['btn_img_backto'] = 'Povratak na %s';
$lang['btn_mediaManager'] = 'Pogledaj u upravitelju datoteka';
$lang['loggedinas'] = 'Prijavljen kao:';
@@ -59,7 +59,7 @@ $lang['user'] = 'Korisničko ime';
$lang['pass'] = 'Lozinka';
$lang['newpass'] = 'Nova lozinka';
$lang['oldpass'] = 'Potvrdi trenutnu lozinku';
-$lang['passchk'] = 'Ponoviti';
+$lang['passchk'] = 'još jednom';
$lang['remember'] = 'Zapamti me';
$lang['fullname'] = 'Ime i prezime';
$lang['email'] = 'Email';
@@ -67,7 +67,7 @@ $lang['profile'] = 'Korisnički profil';
$lang['badlogin'] = 'Ne ispravno korisničko ime ili lozinka.';
$lang['badpassconfirm'] = 'Nažalost, lozinka nije ispravna';
$lang['minoredit'] = 'Manje izmjene';
-$lang['draftdate'] = 'Nacrt dokumenta je automatski spremljen u ';
+$lang['draftdate'] = 'Nacrt promjena automatski spremljen u';
$lang['nosecedit'] = 'Stranica se u međuvremenu promijenila. Informacija o odjeljku je ostarila pa je učitana kompletna stranica.';
$lang['regmissing'] = 'Morate popuniti sva polja.';
$lang['reguexists'] = 'Korisnik s tim korisničkim imenom već postoji.';
@@ -80,7 +80,7 @@ $lang['regpwmail'] = 'Vaša DokuWiki lozinka';
$lang['reghere'] = 'Još uvijek nemate korisnički račun? Registrirajte se.';
$lang['profna'] = 'Ovaj wiki ne dopušta izmjene korisničkog profila.';
$lang['profnochange'] = 'Nema izmjena.';
-$lang['profnoempty'] = 'Prazno korisničko ime ili email nisu dopušteni.';
+$lang['profnoempty'] = 'Prazno korisničko ime ili e-pošta nisu dopušteni.';
$lang['profchanged'] = 'Korisnički profil je uspješno izmijenjen.';
$lang['profnodelete'] = 'Ovaj wiki ne podržava brisanje korisnika';
$lang['profdeleteuser'] = 'Obriši korisnika';
@@ -88,13 +88,13 @@ $lang['profdeleted'] = 'Vaš korisnik je obrisan s ovog wiki-a';
$lang['profconfdelete'] = 'Želim ukloniti mojeg korisnika s ovog wiki-a. <br/> Ova akcija se ne može poništiti.';
$lang['profconfdeletemissing'] = 'Kvačica za potvrdu nije označena';
$lang['pwdforget'] = 'Izgubili ste lozinku? Zatražite novu';
-$lang['resendna'] = 'Ovaj wiki ne podržava ponovno slanje lozinke emailom.';
+$lang['resendna'] = 'Ovaj wiki ne podržava ponovno slanje lozinke e-poštom.';
$lang['resendpwd'] = 'Postavi novu lozinku za';
$lang['resendpwdmissing'] = 'Ispunite sva polja.';
$lang['resendpwdnouser'] = 'Nije moguće pronaći korisnika.';
$lang['resendpwdbadauth'] = 'Neispravan autorizacijski kod. Provjerite da li ste koristili potpun potvrdni link.';
-$lang['resendpwdconfirm'] = 'Potvrdni link je poslan emailom.';
-$lang['resendpwdsuccess'] = 'Nova lozinka je poslana emailom.';
+$lang['resendpwdconfirm'] = 'Potvrdni link je poslan e-poštom.';
+$lang['resendpwdsuccess'] = 'Nova lozinka je poslana e-poštom.';
$lang['license'] = 'Osim na mjestima gdje je naznačeno drugačije, sadržaj ovog wikija je licenciran sljedećom licencom:';
$lang['licenseok'] = 'Pažnja: promjenom ovog dokumenta pristajete licencirati sadržaj sljedećom licencom: ';
$lang['searchmedia'] = 'Traži naziv datoteke:';
@@ -103,7 +103,7 @@ $lang['txt_upload'] = 'Odaberite datoteku za postavljanje:';
$lang['txt_filename'] = 'Postaviti kao (nije obavezno):';
$lang['txt_overwrt'] = 'Prepiši postojeću datoteku';
$lang['maxuploadsize'] = 'Moguće je učitati maks. %s po datoteci.';
-$lang['lockedby'] = 'Zaključao:';
+$lang['lockedby'] = 'Trenutno zaključao:';
$lang['lockexpire'] = 'Zaključano do:';
$lang['js']['willexpire'] = 'Dokument kojeg mijenjate će biti zaključan još 1 minutu.\n Ukoliko želite i dalje raditi izmjene na dokumentu - kliknite na "Pregled".';
$lang['js']['notsavedyet'] = 'Vaše izmjene će se izgubiti.
@@ -149,16 +149,16 @@ $lang['js']['media_cancel'] = 'ukloni';
$lang['js']['media_overwrt'] = 'Prepiši preko postojeće datoteke';
$lang['rssfailed'] = 'Došlo je do greške prilikom preuzimanja feed-a: ';
$lang['nothingfound'] = 'Traženi dokumetni nisu pronađeni.';
-$lang['mediaselect'] = 'Mediafile datoteke';
-$lang['fileupload'] = 'Mediafile postavljanje';
-$lang['uploadsucc'] = 'Postavljanje uspješno';
-$lang['uploadfail'] = 'Neuspješno postavljanje. Možda dozvole na poslužitelju nisu ispravne?';
-$lang['uploadwrong'] = 'Postavljanje nije dopušteno. Nastavak datoteke je zabranjen!';
+$lang['mediaselect'] = 'Datoteke';
+$lang['fileupload'] = 'Učitavanje datoteka';
+$lang['uploadsucc'] = 'Učitavanje uspješno';
+$lang['uploadfail'] = 'Neuspješno učitavanje. Možda dozvole na poslužitelju nisu ispravne?';
+$lang['uploadwrong'] = 'Učitavanje nije dopušteno. Nastavak datoteke je zabranjen!';
$lang['uploadexist'] = 'Datoteka već postoji.';
$lang['uploadbadcontent'] = 'Postavljeni sadržaj ne odgovara ekstenziji %s datoteke.';
-$lang['uploadspam'] = 'Postavljanje je blokirano spam crnom listom.';
-$lang['uploadxss'] = 'Postavljanje je blokirano zbog mogućeg zlonamjernog sadržaja.';
-$lang['uploadsize'] = 'Postavljena datoteka je prevelika (max. %s)';
+$lang['uploadspam'] = 'Učitavanje je spriječeno od spam crne liste.';
+$lang['uploadxss'] = 'Učitavanje je spriječeno zbog mogućeg zlonamjernog sadržaja.';
+$lang['uploadsize'] = 'Učitana datoteka je prevelika (max. %s)';
$lang['deletesucc'] = 'Datoteka "%s" je obrisana.';
$lang['deletefail'] = '"%s" se ne može obrisati - provjerite dozvole na poslužitelju.';
$lang['mediainuse'] = 'Datoteka "%s" nije obrisana - još uvijek se koristi.';
@@ -166,10 +166,10 @@ $lang['namespaces'] = 'Imenski prostori';
$lang['mediafiles'] = 'Datoteke u';
$lang['accessdenied'] = 'Nemate potrebne dozvole za pregled ove stranice.';
$lang['mediausage'] = 'Koristi sljedeću sintaksu za referenciranje ove datoteke:';
-$lang['mediaview'] = 'Pregledaj originalnu datoteku';
+$lang['mediaview'] = 'Vidi izvornu datoteku';
$lang['mediaroot'] = 'root';
$lang['mediaupload'] = 'Postavi datoteku u odabrani imenski prostor. Podimenski prostori se stvaraju dodavanjem istih kao prefiks naziva datoteke u "Postavi kao" polju, tako da se odvoje dvotočkama.';
-$lang['mediaextchange'] = 'Ekstenzija datoteke promijenjena iz .%s u .%s!';
+$lang['mediaextchange'] = 'Nastavak datoteke promijenjen iz .%s u .%s!';
$lang['reference'] = 'Reference za';
$lang['ref_inuse'] = 'Datoteka se ne može obrisati jer se još uvijek koristi u sljedećim dokumentima:';
$lang['ref_hidden'] = 'Neke reference se nalaze na dokumentima koje nemate dozvolu čitati';
@@ -178,17 +178,17 @@ $lang['quickhits'] = 'Pronađeno po nazivima dokumenata';
$lang['toc'] = 'Sadržaj';
$lang['current'] = 'trenutno';
$lang['yours'] = 'Vaša inačica';
-$lang['diff'] = 'Prikaži razlike u odnosu na trenutnu inačicu';
-$lang['diff2'] = 'Pokaži razlike između odabranih inačica';
-$lang['difflink'] = 'Poveznica na ovaj prikaz usporedbe';
-$lang['diff_type'] = 'Razlike u prikazu:';
+$lang['diff'] = 'Prikaži razlike u odnosu na zadnje stanje';
+$lang['diff2'] = 'Pokaži razlike između odabranih izmjena';
+$lang['difflink'] = 'Poveznica na ovu usporedbu';
+$lang['diff_type'] = 'Vidi razlike:';
$lang['diff_inline'] = 'U istoj razini';
$lang['diff_side'] = 'Usporedo';
-$lang['diffprevrev'] = 'Prošla verzija';
-$lang['diffnextrev'] = 'Novija verzija';
-$lang['difflastrev'] = 'Zadnja verzija';
-$lang['diffbothprevrev'] = 'Prošle verzije na obje strane';
-$lang['diffbothnextrev'] = 'Novije verzije na obje strane';
+$lang['diffprevrev'] = 'Starija izmjena';
+$lang['diffnextrev'] = 'Novija izmjena';
+$lang['difflastrev'] = 'Zadnja izmjena';
+$lang['diffbothprevrev'] = 'Starije izmjene na obje strane';
+$lang['diffbothnextrev'] = 'Novije izmjene na obje strane';
$lang['line'] = 'Redak';
$lang['breadcrumb'] = 'Putanja:';
$lang['youarehere'] = 'Vi ste ovdje:';
@@ -196,7 +196,7 @@ $lang['lastmod'] = 'Zadnja izmjena:';
$lang['by'] = 'od';
$lang['deleted'] = 'obrisano';
$lang['created'] = 'stvoreno';
-$lang['restored'] = 'vraćena prijašnja inačica (%s)';
+$lang['restored'] = 'vraćeno na prijašnju izmjenu (%s)';
$lang['external_edit'] = 'vanjsko uređivanje';
$lang['summary'] = 'Sažetak izmjena';
$lang['noflash'] = 'Za prikazivanje ovog sadržaja potreban je <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>';
@@ -214,30 +214,30 @@ $lang['mail_new_user'] = 'novi korisnik:';
$lang['mail_upload'] = 'datoteka postavljena:';
$lang['changes_type'] = 'Vidi promjene od';
$lang['pages_changes'] = 'Stranice';
-$lang['media_changes'] = 'Medijske datoteke';
+$lang['media_changes'] = 'Datoteke';
$lang['both_changes'] = 'Zajedno stranice i datoteke';
$lang['qb_bold'] = 'Podebljani tekst';
$lang['qb_italic'] = 'Ukošeni tekst';
$lang['qb_underl'] = 'Podcrtani tekst';
$lang['qb_code'] = 'Kod';
$lang['qb_strike'] = 'Precrtani tekst';
-$lang['qb_h1'] = 'Naslov - razina 1';
-$lang['qb_h2'] = 'Naslov - razina 2';
-$lang['qb_h3'] = 'Naslov - razina 3';
-$lang['qb_h4'] = 'Naslov - razina 4';
-$lang['qb_h5'] = 'Naslov - razina 5';
+$lang['qb_h1'] = 'Naslov 1. razine';
+$lang['qb_h2'] = 'Naslov 2. razine';
+$lang['qb_h3'] = 'Naslov 3. razine';
+$lang['qb_h4'] = 'Naslov 4. razine';
+$lang['qb_h5'] = 'Naslov 5. razine';
$lang['qb_h'] = 'Naslov';
$lang['qb_hs'] = 'Odaberite naslov';
$lang['qb_hplus'] = 'Naslov više razine';
$lang['qb_hminus'] = 'Naslov niže razine';
$lang['qb_hequal'] = 'Naslov iste razine';
-$lang['qb_link'] = 'Interni link';
-$lang['qb_extlink'] = 'Vanjski link';
+$lang['qb_link'] = 'Interna poveznica';
+$lang['qb_extlink'] = 'Vanjska poveznica';
$lang['qb_hr'] = 'Vodoravna crta';
-$lang['qb_ol'] = 'Pobrojana lista';
-$lang['qb_ul'] = 'Lista';
-$lang['qb_media'] = 'Dodaj slike i ostale datoteke';
-$lang['qb_sig'] = 'Potpis';
+$lang['qb_ol'] = 'Element brojane liste';
+$lang['qb_ul'] = 'Element obične liste';
+$lang['qb_media'] = 'Dodaj slike i ostale datoteke (prikaz u novom prozoru)';
+$lang['qb_sig'] = 'Ubaci potpis';
$lang['qb_smileys'] = 'Smiješkići';
$lang['qb_chars'] = 'Posebni znakovi';
$lang['upperns'] = 'Skoči u nadređeni imenski prostor';
@@ -269,10 +269,10 @@ $lang['subscr_m_new_header'] = 'Dodaj pretplatu';
$lang['subscr_m_current_header'] = 'Trenutne pretplate';
$lang['subscr_m_unsubscribe'] = 'Odjavi pretplatu';
$lang['subscr_m_subscribe'] = 'Pretplati se';
-$lang['subscr_m_receive'] = 'Primaj';
-$lang['subscr_style_every'] = 'email za svaku promjenu';
-$lang['subscr_style_digest'] = 'email s kratakim prikazom promjena za svaku stranicu (svaka %.2f dana)';
-$lang['subscr_style_list'] = 'listu promijenjenih stranica od zadnjeg primljenog email-a (svaka %.2f dana)';
+$lang['subscr_m_receive'] = 'Primi';
+$lang['subscr_style_every'] = 'e-pošta za svaku promjenu';
+$lang['subscr_style_digest'] = 'e-pošta s kratakim prikazom promjena za svaku stranicu (svaka %.2f dana)';
+$lang['subscr_style_list'] = 'listu promijenjenih stranica od zadnje primljene e-pošte (svaka %.2f dana)';
$lang['authtempfail'] = 'Autentifikacija korisnika je privremeno nedostupna. Molimo Vas da kontaktirate administratora.';
$lang['authpwdexpire'] = 'Vaša lozinka će isteći za %d dana, trebate ju promijeniti.';
$lang['i_chooselang'] = 'Izaberite vaš jezik';
@@ -281,7 +281,8 @@ $lang['i_wikiname'] = 'Naziv Wikija';
$lang['i_enableacl'] = 'Omogući ACL (preporučeno)';
$lang['i_superuser'] = 'Superkorisnik';
$lang['i_problems'] = 'Instalacija je pronašla probleme koji su naznačeni ispod. Nije moguće nastaviti dok se ti problemi ne riješe.';
-$lang['i_modified'] = 'Zbog sigurnosnih razlog, ova skripta ce raditi samo sa novim i nepromijenjenim instalacijama dokuWikija. Preporucujemo da ili re-ekstraktirate fajlove iz downloadovanog paketa ili konsultujete pune a href="http://dokuwiki.org/install">Instrukcije za instalaciju Dokuwikija</a>';
+$lang['i_modified'] = 'Zbog sigurnosnih razlog, ova skripta raditi će samo sa novim i neizmijenjenim DokuWiki instalacijama.
+ Molimo ponovno prekopirajte datoteke iz preuzetoga paketa ili pogledajte detaljno <a href="http://dokuwiki.org/install">Uputstvo za postavljanje DokuWiki-a</a>';
$lang['i_funcna'] = 'PHP funkcija <code>%s</code> nije dostupna. Možda ju je vaš pružatelj hostinga onemogućio iz nekog razloga?';
$lang['i_phpver'] = 'Vaša PHP verzija <code>%s</code> je niža od potrebne <code>%s</code>. Trebate nadograditi vašu PHP instalaciju.';
$lang['i_mbfuncoverload'] = 'mbstring.func_overload mora biti onemogućena u php.ini da bi ste pokrenuli DokuWiki.';
@@ -321,15 +322,15 @@ $lang['media_list_thumbs'] = 'Ikone';
$lang['media_list_rows'] = 'Redovi';
$lang['media_sort_name'] = 'Naziv';
$lang['media_sort_date'] = 'Datum';
-$lang['media_namespaces'] = 'Odaberi namespace';
-$lang['media_files'] = 'Datoteka u %s';
+$lang['media_namespaces'] = 'Odaberi imenski prostor';
+$lang['media_files'] = 'Datoteke u %s';
$lang['media_upload'] = 'Učitaj u %s';
$lang['media_search'] = 'Potraži u %s';
$lang['media_view'] = '%s';
$lang['media_viewold'] = '%s na %s';
$lang['media_edit'] = 'Uredi %s';
$lang['media_history'] = 'Povijest %s';
-$lang['media_meta_edited'] = 'meta podatci uređeni';
+$lang['media_meta_edited'] = 'meta podaci uređeni';
$lang['media_perm_read'] = 'Nažalost, nemate prava za čitanje datoteka.';
$lang['media_perm_upload'] = 'Nažalost, nemate prava za učitavanje datoteka.';
$lang['media_update'] = 'Učitaj novu verziju';
diff --git a/inc/lang/hr/revisions.txt b/inc/lang/hr/revisions.txt
index d224a56f3..67d4cb89f 100644
--- a/inc/lang/hr/revisions.txt
+++ b/inc/lang/hr/revisions.txt
@@ -1,3 +1,3 @@
====== Stare verzije ======
-Slijedi spisak starih verzija za traženi dokument.
+Slijedi spisak starih verzija za traženi dokument. Da bi ste se vratili na neku od njih, odaberite ju, pritisnite Uređivanje i snimite ju.
diff --git a/inc/lang/hr/searchpage.txt b/inc/lang/hr/searchpage.txt
index 91d9f9c0a..7a94f32d2 100644
--- a/inc/lang/hr/searchpage.txt
+++ b/inc/lang/hr/searchpage.txt
@@ -1 +1,5 @@
-====== Rezultati pretraživanja ======
+====== Pretraživanja ======
+
+Možete naći rezultat vaše pretrage u nastavku. Ako ne možete naći što tražite, možete urediti ili stvoriti novu stranicu s odgovarajućim alatom.
+
+====== Rezultati ======
diff --git a/inc/lang/hr/showrev.txt b/inc/lang/hr/showrev.txt
index aba2c0db0..86c1a0295 100644
--- a/inc/lang/hr/showrev.txt
+++ b/inc/lang/hr/showrev.txt
@@ -1,2 +1,2 @@
-**Ovo je stara verzija dokumenta!**
+**Ovo je stara izmjena dokumenta!**
----
diff --git a/inc/lang/it/lang.php b/inc/lang/it/lang.php
index a3017a92e..f59a7b948 100644
--- a/inc/lang/it/lang.php
+++ b/inc/lang/it/lang.php
@@ -19,6 +19,7 @@
* @author Claudio Lanconelli <lancos@libero.it>
* @author Mirko <malisan.mirko@gmail.com>
* @author Francesco <francesco.cavalli@hotmail.com>
+ * @author Fabio <fabioslurp@yahoo.it>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
diff --git a/inc/lang/pt-br/lang.php b/inc/lang/pt-br/lang.php
index 4f1baf22c..31940f5be 100644
--- a/inc/lang/pt-br/lang.php
+++ b/inc/lang/pt-br/lang.php
@@ -204,6 +204,8 @@ $lang['diff_side'] = 'Lado a lado';
$lang['diffprevrev'] = 'Revisão anterior';
$lang['diffnextrev'] = 'Próxima revisão';
$lang['difflastrev'] = 'Última revisão';
+$lang['diffbothprevrev'] = 'Ambos lados da revisão anterior';
+$lang['diffbothnextrev'] = 'Ambos lados da revisão seguinte';
$lang['line'] = 'Linha';
$lang['breadcrumb'] = 'Visitou:';
$lang['youarehere'] = 'Você está aqui:';
diff --git a/inc/lang/ru/lang.php b/inc/lang/ru/lang.php
index c36c611c0..e2f9b3d57 100644
--- a/inc/lang/ru/lang.php
+++ b/inc/lang/ru/lang.php
@@ -26,6 +26,7 @@
* @author Erli Moen <evseev.jr@gmail.com>
* @author Aleksandr Selivanov <alexgearbox@yandex.ru>
* @author Владимир <id37736@yandex.ru>
+ * @author Igor Degraf <igordegraf@gmail.com>
*/
$lang['encoding'] = ' utf-8';
$lang['direction'] = 'ltr';
diff --git a/inc/lang/ta/lang.php b/inc/lang/ta/lang.php
index 4a1da3531..a5b89527a 100644
--- a/inc/lang/ta/lang.php
+++ b/inc/lang/ta/lang.php
@@ -10,7 +10,7 @@ $lang['btn_show'] = 'பக்கத்தை காண்பி ';
$lang['btn_create'] = 'இந்த பக்கத்தை உருவாக்கு ';
$lang['btn_search'] = 'தேடு';
$lang['btn_save'] = 'சேமி ';
-$lang['btn_revs'] = 'old திருத்தங்கள்';
+$lang['btn_revs'] = 'பழைய திருத்தங்கள்';
$lang['btn_recent'] = 'சமீபத்திய மாற்றங்கள்';
$lang['btn_upload'] = 'பதிவேற்று';
$lang['btn_cancel'] = 'ரத்து';
@@ -30,3 +30,8 @@ $lang['fullname'] = 'உண்மையான பெயர்';
$lang['email'] = 'மின்னஞ்சல்';
$lang['profile'] = 'பயன்படுத்துபவர் விவரம்';
$lang['minoredit'] = 'சிறிய மாற்றங்கள்';
+$lang['media_historytab'] = 'வரலாறு';
+$lang['media_list_rows'] = 'வரிசைகள் ';
+$lang['media_sort_name'] = 'பெயர் ';
+$lang['media_sort_date'] = 'தேதி ';
+$lang['media_namespaces'] = 'பெயர்வெளியை தேர்வுசெய் ';
diff --git a/inc/lang/zh-tw/lang.php b/inc/lang/zh-tw/lang.php
index 953d866f8..bf7f89130 100644
--- a/inc/lang/zh-tw/lang.php
+++ b/inc/lang/zh-tw/lang.php
@@ -14,6 +14,7 @@
* @author tsangho <ou4222@gmail.com>
* @author Danny Lin <danny0838@gmail.com>
* @author Stan <talktostan@gmail.com>
+ * @author June-Hao Hou <junehao@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -303,6 +304,7 @@ $lang['i_policy'] = '初步的 ACL 政策';
$lang['i_pol0'] = '開放的 wiki (任何人可讀取、寫入、上傳)';
$lang['i_pol1'] = '公開的 wiki (任何人可讀取,註冊使用者可寫入與上傳)';
$lang['i_pol2'] = '封閉的 wiki (只有註冊使用者可讀取、寫入、上傳)';
+$lang['i_allowreg'] = '允許使用者自行註冊';
$lang['i_retry'] = '重試';
$lang['i_license'] = '請選擇您想要的內容發佈授權方式:';
$lang['i_license_none'] = '不要顯示任何關於授權方式的訊息';
diff --git a/inc/lang/zh/lang.php b/inc/lang/zh/lang.php
index c8a76b66b..797a9b7a1 100644
--- a/inc/lang/zh/lang.php
+++ b/inc/lang/zh/lang.php
@@ -23,6 +23,7 @@
* @author Cupen <Cupenoruler@foxmail.com>
* @author xiqingongzi <Xiqingongzi@Gmail.com>
* @author qinghao <qingxianhao@gmail.com>
+ * @author Yuwei Sun <yuwei@hrz.tu-chemnitz.de>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -302,6 +303,7 @@ $lang['i_modified'] = '由于安全上的考虑,该脚本只能用
<a href="http://dokuwiki.org/install">Dokuwiki 安装指南</a>';
$lang['i_funcna'] = 'PHP 功能 <code>%s</code> 无法使用。也许您的服务器提供商因为某些原因禁用了它。';
$lang['i_phpver'] = '您的 PHP 版本 <code>%s</code> 低于最低要求的 <code>%s</code>。您需要升级您的 PHP 版本。';
+$lang['i_mbfuncoverload'] = '为了运行DocuWiki,您必须在php.ini中禁用mbstring.func_overload。';
$lang['i_permfail'] = 'DokuWiki 无法写入 <code>%s</code>。您需要修改该路径的权限设定!';
$lang['i_confexists'] = '<code>%s</code> 已经存在';
$lang['i_writeerr'] = '无法创建 <code>%s</code>。您需要检查该路径/文件的权限设定并手动创建该文件。';
diff --git a/inc/template.php b/inc/template.php
index 8b39529c5..7f3c68534 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -369,7 +369,11 @@ function tpl_metaheaders($alt = true) {
} else {
$head['meta'][] = array('name'=> 'robots', 'content'=> 'noindex,nofollow');
}
- $head['link'][] = array('rel'=> 'canonical', 'href'=> wl($ID, '', true, '&'));
+ $canonicalUrl = wl($ID, '', true, '&');
+ if ($ID == $conf['start']) {
+ $canonicalUrl = DOKU_URL;
+ }
+ $head['link'][] = array('rel'=> 'canonical', 'href'=> $canonicalUrl);
} else {
$head['meta'][] = array('name'=> 'robots', 'content'=> 'noindex,follow');
}
diff --git a/lib/plugins/acl/lang/fr/help.txt b/lib/plugins/acl/lang/fr/help.txt
index 081978488..9fc2af665 100644
--- a/lib/plugins/acl/lang/fr/help.txt
+++ b/lib/plugins/acl/lang/fr/help.txt
@@ -6,6 +6,6 @@ Le panneau de gauche liste toutes les catégories et les pages disponibles.
Le formulaire ci-dessus permet d'afficher et de modifier les autorisations d'un utilisateur ou d'un groupe sélectionné.
-Dans le tableau ci-dessous, toutes les listes de contrôle d'accès (ACL) actuelles sont affichées. Vous pouvez l'utiliser pour supprimer ou modifier rapidement plusieurs contrôles d'accès.
+Le tableau ci-dessous présente toutes les listes de contrôle d'accès (ACL) actuelles. Vous pouvez l'utiliser pour supprimer ou modifier rapidement plusieurs contrôles d'accès.
La lecture de [[doku>fr:acl|la documentation officielle des contrôles d'accès]] pourra vous permettre de mieux comprendre le fonctionnement du contrôle d'accès dans DokuWiki.
diff --git a/lib/plugins/auth.php b/lib/plugins/auth.php
index b04735639..b38b591a3 100644
--- a/lib/plugins/auth.php
+++ b/lib/plugins/auth.php
@@ -229,14 +229,15 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin {
* at least these fields:
*
* name string full name of the user
- * mail string email addres of the user
+ * mail string email address of the user
* grps array list of groups the user is in
*
* @author Andreas Gohr <andi@splitbrain.org>
* @param string $user the user name
+ * @param bool $requireGroups whether or not the returned data must include groups
* @return array containing user data or false
*/
- public function getUserData($user) {
+ public function getUserData($user, $requireGroups=true) {
if(!$this->cando['external']) msg("no valid authorisation system in use", -1);
return false;
}
diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php
index 0860e5756..a3119dda6 100644
--- a/lib/plugins/authad/auth.php
+++ b/lib/plugins/authad/auth.php
@@ -177,9 +177,10 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
*
* @author James Van Lommel <james@nosq.com>
* @param string $user
+ * @param bool $requireGroups (optional) - ignored, groups are always supplied by this plugin
* @return array
*/
- public function getUserData($user) {
+ public function getUserData($user, $requireGroups=true) {
global $conf;
global $lang;
global $ID;
diff --git a/lib/plugins/authad/lang/ar/lang.php b/lib/plugins/authad/lang/ar/lang.php
new file mode 100644
index 000000000..e0ba7681a
--- /dev/null
+++ b/lib/plugins/authad/lang/ar/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Mohamed Belhsine <b.mohamed897@gmail.com>
+ */
+$lang['domain'] = 'مجال تسجيل الدخول';
diff --git a/lib/plugins/authad/lang/cs/lang.php b/lib/plugins/authad/lang/cs/lang.php
new file mode 100644
index 000000000..8119d208a
--- /dev/null
+++ b/lib/plugins/authad/lang/cs/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
+ */
+$lang['domain'] = 'Přihlašovací doména';
diff --git a/lib/plugins/authad/lang/fa/lang.php b/lib/plugins/authad/lang/fa/lang.php
new file mode 100644
index 000000000..1ea73cfdb
--- /dev/null
+++ b/lib/plugins/authad/lang/fa/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Hamid <zarrabi@sharif.edu>
+ */
+$lang['domain'] = 'دامنه‌ی ورود';
diff --git a/lib/plugins/authad/lang/pt-br/lang.php b/lib/plugins/authad/lang/pt-br/lang.php
new file mode 100644
index 000000000..5fa963d4e
--- /dev/null
+++ b/lib/plugins/authad/lang/pt-br/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Felipe Castro <fefcas@gmail.com>
+ */
+$lang['domain'] = 'Domínio de "Logon"';
diff --git a/lib/plugins/authad/lang/zh-tw/lang.php b/lib/plugins/authad/lang/zh-tw/lang.php
new file mode 100644
index 000000000..6ad0947a2
--- /dev/null
+++ b/lib/plugins/authad/lang/zh-tw/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author June-Hao Hou <junehao@gmail.com>
+ */
+$lang['domain'] = '登入網域';
diff --git a/lib/plugins/authad/lang/zh-tw/settings.php b/lib/plugins/authad/lang/zh-tw/settings.php
index bd5d9413a..42cd8c96b 100644
--- a/lib/plugins/authad/lang/zh-tw/settings.php
+++ b/lib/plugins/authad/lang/zh-tw/settings.php
@@ -4,6 +4,7 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author syaoranhinata@gmail.com
+ * @author June-Hao Hou <junehao@gmail.com>
*/
$lang['account_suffix'] = '您的帳號後綴。如: <code>@my.domain.org</code>';
$lang['base_dn'] = '您的基本識別名。如: <code>DC=my,DC=domain,DC=org</code>';
@@ -11,6 +12,7 @@ $lang['domain_controllers'] = '以逗號分隔的域名控制器列表。如
$lang['admin_username'] = 'Active Directory 的特權使用者,可以查看所有使用者的數據。(非必要,但對發送訂閱郵件等活動來說,這是必須的。)';
$lang['admin_password'] = '上述使用者的密碼。';
$lang['sso'] = '是否使用 Kerberos 或 NTLM 的單一登入系統 (Single-Sign-On)?';
+$lang['sso_charset'] = '你的網站伺服器傳遞 Kerberos 或 NTML 帳號名稱所用的語系編碼。空白表示 UTF-8 或 latin-1。此設定需要用到 iconv 套件。';
$lang['real_primarygroup'] = '是否視作真正的主要群組,而不是假設為網域使用者 (比較慢)';
$lang['use_ssl'] = '使用 SSL 連接嗎?如果要使用,請不要啟用下方的 TLS。';
$lang['use_tls'] = '使用 TLS 連接嗎?如果要使用,請不要啟用上方的 SSL。';
diff --git a/lib/plugins/authldap/auth.php b/lib/plugins/authldap/auth.php
index 0d5e130ea..b22b82ecc 100644
--- a/lib/plugins/authldap/auth.php
+++ b/lib/plugins/authldap/auth.php
@@ -103,7 +103,7 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
return true;
} else {
// See if we can find the user
- $info = $this->getUserData($user, true);
+ $info = $this->_getUserData($user, true);
if(empty($info['dn'])) {
return false;
} else {
@@ -146,10 +146,19 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
* @author Steffen Schoch <schoch@dsb.net>
*
* @param string $user
+ * @param bool $requireGroups (optional) - ignored, groups are always supplied by this plugin
+ * @return array containing user data or false
+ */
+ public function getUserData($user, $requireGroups=true) {
+ return $this->_getUserData($user);
+ }
+
+ /**
+ * @param string $user
* @param bool $inbind authldap specific, true if in bind phase
* @return array containing user data or false
*/
- public function getUserData($user, $inbind = false) {
+ protected function _getUserData($user, $inbind = false) {
global $conf;
if(!$this->_openLDAP()) return false;
diff --git a/lib/plugins/authldap/lang/hr/settings.php b/lib/plugins/authldap/lang/hr/settings.php
index 44caeacc8..cb8df7218 100644
--- a/lib/plugins/authldap/lang/hr/settings.php
+++ b/lib/plugins/authldap/lang/hr/settings.php
@@ -21,3 +21,7 @@ $lang['userscope'] = 'Ograniči područje za pretragu korisnika';
$lang['groupscope'] = 'Ograniči područje za pretragu grupa';
$lang['groupkey'] = 'Članstvo grupa iz svih atributa korisnika (umjesto standardnih AD grupa) npr. grupa iz odjela ili telefonskog broja';
$lang['debug'] = 'Prikaži dodatne informacije u slučaju greške';
+$lang['deref_o_0'] = 'LDAP_DEREF_NEVER';
+$lang['deref_o_1'] = 'LDAP_DEREF_SEARCHING';
+$lang['deref_o_2'] = 'LDAP_DEREF_FINDING';
+$lang['deref_o_3'] = 'LDAP_DEREF_ALWAYS';
diff --git a/lib/plugins/authmysql/auth.php b/lib/plugins/authmysql/auth.php
index 1e6e6a4a9..95c62f636 100644
--- a/lib/plugins/authmysql/auth.php
+++ b/lib/plugins/authmysql/auth.php
@@ -21,6 +21,9 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
/** @var int database subrevision */
protected $dbsub = 0;
+ /** @var array cache to avoid re-reading user info data */
+ protected $cacheUserInfo = array();
+
/**
* Constructor
*
@@ -157,10 +160,11 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
$result = $this->_queryDB($sql);
if($result !== false && count($result) == 1) {
- if($this->getConf('forwardClearPass') == 1)
+ if($this->getConf('forwardClearPass') == 1) {
$rc = true;
- else
+ } else {
$rc = auth_verifyPassword($pass, $result[0]['pass']);
+ }
}
$this->_closeDB();
}
@@ -174,16 +178,23 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*
* @param string $user user login to get data for
+ * @param bool $requireGroups when true, group membership information should be included in the returned array;
+ * when false, it maybe included, but is not required by the caller
* @return array|bool
*/
- public function getUserData($user) {
+ public function getUserData($user, $requireGroups=true) {
+ if($this->_cacheExists($user, $requireGroups)) {
+ return $this->cacheUserInfo[$user];
+ }
+
if($this->_openDB()) {
$this->_lockTables("READ");
- $info = $this->_getUserInfo($user);
+ $info = $this->_getUserInfo($user, $requireGroups);
$this->_unlockTables();
$this->_closeDB();
- } else
+ } else {
$info = false;
+ }
return $info;
}
@@ -209,12 +220,14 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
global $conf;
if($this->_openDB()) {
- if(($info = $this->_getUserInfo($user)) !== false)
+ if(($info = $this->_getUserInfo($user)) !== false) {
return false; // user already exists
+ }
// set defaultgroup if no groups were given
- if($grps == null)
+ if($grps == null) {
$grps = array($conf['defaultgroup']);
+ }
$this->_lockTables("WRITE");
$pwd = $this->getConf('forwardClearPass') ? $pwd : auth_cryptPassword($pwd);
@@ -234,17 +247,17 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
* The dataset update will be rejected if the user name should be changed
* to an already existing one.
*
- * The password must be provides unencrypted. Pasword cryption is done
+ * The password must be provided unencrypted. Pasword encryption is done
* automatically if configured.
*
- * If one or more groups could't be updated, an error would be set. In
+ * If one or more groups can't be updated, an error will be set. In
* this case the dataset might already be changed and we can't rollback
- * the changes. Transactions would be really usefull here.
+ * the changes. Transactions would be really useful here.
*
* modifyUser() may be called without SQL statements defined that are
* needed to change group membership (for example if only the user profile
- * should be modified). In this case we asure that we don't touch groups
- * even $changes['grps'] is set by mistake.
+ * should be modified). In this case we assure that we don't touch groups
+ * even when $changes['grps'] is set by mistake.
*
* @author Chris Smith <chris@jalakai.co.uk>
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
@@ -256,27 +269,30 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
public function modifyUser($user, $changes) {
$rc = false;
- if(!is_array($changes) || !count($changes))
+ if(!is_array($changes) || !count($changes)) {
return true; // nothing to change
+ }
if($this->_openDB()) {
$this->_lockTables("WRITE");
- if(($uid = $this->_getUserID($user))) {
- $rc = $this->_updateUserInfo($changes, $uid);
+ $rc = $this->_updateUserInfo($user, $changes);
- if($rc && isset($changes['grps']) && $this->cando['modGroups']) {
- $groups = $this->_getGroups($user);
- $grpadd = array_diff($changes['grps'], $groups);
- $grpdel = array_diff($groups, $changes['grps']);
+ if($rc && isset($changes['grps']) && $this->cando['modGroups']) {
+ $groups = $this->_getGroups($user);
+ $grpadd = array_diff($changes['grps'], $groups);
+ $grpdel = array_diff($groups, $changes['grps']);
- foreach($grpadd as $group)
- if(($this->_addUserToGroup($user, $group, 1)) == false)
- $rc = false;
+ foreach($grpadd as $group) {
+ if(($this->_addUserToGroup($user, $group, 1)) == false) {
+ $rc = false;
+ }
+ }
- foreach($grpdel as $group)
- if(($this->_delUserFromGroup($user, $group)) == false)
- $rc = false;
+ foreach($grpdel as $group) {
+ if(($this->_delUserFromGroup($user, $group)) == false) {
+ $rc = false;
+ }
}
}
@@ -304,8 +320,9 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
if(is_array($users) && count($users)) {
$this->_lockTables("WRITE");
foreach($users as $user) {
- if($this->_delUser($user))
+ if($this->_delUser($user)) {
$count++;
+ }
}
$this->_unlockTables();
}
@@ -367,9 +384,11 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
$result = $this->_queryDB($sql);
if(!empty($result)) {
- foreach($result as $user)
- if(($info = $this->_getUserInfo($user['user'])))
+ foreach($result as $user) {
+ if(($info = $this->_getUserInfo($user['user']))) {
$out[$user['user']] = $info;
+ }
+ }
}
$this->_unlockTables();
@@ -466,7 +485,10 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
$sql = str_replace('%{user}', $this->_escape($user), $sql);
$sql = str_replace('%{gid}', $this->_escape($gid), $sql);
$sql = str_replace('%{group}', $this->_escape($group), $sql);
- if($this->_modifyDB($sql) !== false) return true;
+ if($this->_modifyDB($sql) !== false) {
+ $this->_flushUserInfoCache($user);
+ return true;
+ }
if($newgroup) { // remove previously created group on error
$sql = str_replace('%{gid}', $this->_escape($gid), $this->getConf('delGroup'));
@@ -501,6 +523,10 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
$sql = str_replace('%{gid}', $this->_escape($gid), $sql);
$sql = str_replace('%{group}', $this->_escape($group), $sql);
$rc = $this->_modifyDB($sql) == 0 ? true : false;
+
+ if ($rc) {
+ $this->_flushUserInfoCache($user);
+ }
}
}
return $rc;
@@ -526,8 +552,9 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
$result = $this->_queryDB($sql);
if($result !== false && count($result)) {
- foreach($result as $row)
+ foreach($result as $row) {
$groups[] = $row['group'];
+ }
}
return $groups;
}
@@ -590,6 +617,7 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
}
if($gid !== false){
+ $this->_flushUserInfoCache($user);
return true;
} else {
/* remove the new user and all group relations if a group can't
@@ -614,7 +642,7 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
*
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*
- * @param string $user user whose id is desired
+ * @param string $user username of the user to be deleted
* @return bool
*/
protected function _delUser($user) {
@@ -626,16 +654,96 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
$sql = str_replace('%{uid}', $this->_escape($uid), $this->getConf('delUser'));
$sql = str_replace('%{user}', $this->_escape($user), $sql);
$this->_modifyDB($sql);
+ $this->_flushUserInfoCache($user);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Flush cached user information
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ *
+ * @param string $user username of the user whose data is to be removed from the cache
+ * if null, empty the whole cache
+ * @return none
+ */
+ protected function _flushUserInfoCache($user=null) {
+ if (is_null($user)) {
+ $this->cacheUserInfo = array();
+ } else {
+ unset($this->cacheUserInfo[$user]);
+ }
+ }
+
+ /**
+ * Quick lookup to see if a user's information has been cached
+ *
+ * This test does not need a database connection or read lock
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ *
+ * @param string $user username to be looked up in the cache
+ * @param bool $requireGroups true, if cached info should include group memberships
+ *
+ * @return bool existence of required user information in the cache
+ */
+ protected function _cacheExists($user, $requireGroups=true) {
+ if (isset($this->cacheUserInfo[$user])) {
+ if (!is_array($this->cacheUserInfo[$user])) {
+ return true; // user doesn't exist
+ }
+
+ if (!$requireGroups || isset($this->cacheUserInfo[$user]['grps'])) {
return true;
}
}
+
return false;
}
/**
- * getUserInfo
+ * Get a user's information
+ *
+ * The database connection must already be established for this function to work.
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ *
+ * @param string $user username of the user whose information is being reterieved
+ * @param bool $requireGroups true if group memberships should be included
+ * @param bool $useCache true if ok to return cached data & to cache returned data
+ *
+ * @return mixed false|array false if the user doesn't exist
+ * array containing user information if user does exist
+ */
+ protected function _getUserInfo($user, $requireGroups=true, $useCache=true) {
+ $info = null;
+
+ if ($useCache && isset($this->cacheUserInfo[$user])) {
+ $info = $this->cacheUserInfo[$user];
+ }
+
+ if (is_null($info)) {
+ $info = $this->_retrieveUserInfo($user);
+ }
+
+ if (($requireGroups == true) && $info && !isset($info['grps'])) {
+ $info['grps'] = $this->_getGroups($user);
+ }
+
+ if ($useCache) {
+ $this->cacheUserInfo[$user] = $info;
+ }
+
+ return $info;
+ }
+
+ /**
+ * retrieveUserInfo
*
- * Gets the data for a specific user The database connection
+ * Gets the data for a specific user. The database connection
* must already be established for this function to work.
* Otherwise it will return 'false'.
*
@@ -644,12 +752,11 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
* @param string $user user's nick to get data for
* @return bool|array false on error, user info on success
*/
- protected function _getUserInfo($user) {
+ protected function _retrieveUserInfo($user) {
$sql = str_replace('%{user}', $this->_escape($user), $this->getConf('getUserInfo'));
$result = $this->_queryDB($sql);
if($result !== false && count($result)) {
$info = $result[0];
- $info['grps'] = $this->_getGroups($user);
return $info;
}
return false;
@@ -666,20 +773,26 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
* The database connection has already to be established for this
* function to work. Otherwise it will return 'false'.
*
- * The password will be crypted if necessary.
+ * The password will be encrypted if necessary.
*
+ * @param string $user user's nick being updated
* @param array $changes array of items to change as pairs of item and value
* @param mixed $uid user id of dataset to change, must be unique in DB
* @return bool true on success or false on error
*
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
- protected function _updateUserInfo($changes, $uid) {
+ protected function _updateUserInfo($user, $changes) {
$sql = $this->getConf('updateUser')." ";
$cnt = 0;
$err = 0;
if($this->dbcon) {
+ $uid = $this->_getUserID($user);
+ if ($uid === false) {
+ return false;
+ }
+
foreach($changes as $item => $value) {
if($item == 'user') {
if(($this->_getUserID($changes['user']))) {
@@ -707,6 +820,7 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
$sql .= " ".str_replace('%{uid}', $uid, $this->getConf('UpdateTarget'));
if(get_class($this) == 'auth_mysql') $sql .= " LIMIT 1"; //some PgSQL inheritance comp.
$this->_modifyDB($sql);
+ $this->_flushUserInfoCache($user);
}
return true;
}
diff --git a/lib/plugins/authmysql/lang/fa/settings.php b/lib/plugins/authmysql/lang/fa/settings.php
new file mode 100644
index 000000000..68ad5ce83
--- /dev/null
+++ b/lib/plugins/authmysql/lang/fa/settings.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Mohamad Mehdi Habibi <habibi.esf@gmail.com>
+ */
+$lang['server'] = 'سرور MySQL';
+$lang['user'] = 'نام کاربری MySQL';
+$lang['database'] = 'پایگاه داده مورد استفاده';
diff --git a/lib/plugins/authmysql/lang/hr/settings.php b/lib/plugins/authmysql/lang/hr/settings.php
index 0ef389f46..af9966999 100644
--- a/lib/plugins/authmysql/lang/hr/settings.php
+++ b/lib/plugins/authmysql/lang/hr/settings.php
@@ -19,7 +19,7 @@ $lang['getGroups'] = 'SQL izraz za dohvaćanje članstva u grupama';
$lang['getUsers'] = 'SQL izraz za ispis svih korisnika';
$lang['FilterLogin'] = 'SQL izraz za izdvajanje korisnika po korisničkom imenu';
$lang['FilterName'] = 'SQL izraz za izdvajanje korisnika po punom imenu';
-$lang['FilterEmail'] = 'SQL izraz za izdvajanje korisnika po email adresi';
+$lang['FilterEmail'] = 'SQL izraz za izdvajanje korisnika po adresi e-pošte';
$lang['FilterGroup'] = 'SQL izraz za izdvajanje korisnika po članstvu u grupama';
$lang['SortOrder'] = 'SQL izraz za sortiranje korisnika';
$lang['addUser'] = 'SQL izraz za dodavanje novih korisnika';
diff --git a/lib/plugins/authpgsql/auth.php b/lib/plugins/authpgsql/auth.php
index e51b39858..99f3ed443 100644
--- a/lib/plugins/authpgsql/auth.php
+++ b/lib/plugins/authpgsql/auth.php
@@ -160,7 +160,7 @@ class auth_plugin_authpgsql extends auth_plugin_authmysql {
$result = $this->_queryDB($sql);
foreach($result as $user)
- if(($info = $this->_getUserInfo($user['user'])))
+ if(($info = $this->_getCachedUserInfo($user['user'])))
$out[$user['user']] = $info;
$this->_unlockTables();
@@ -212,7 +212,10 @@ class auth_plugin_authpgsql extends auth_plugin_authmysql {
$sql = str_replace('%{user}', addslashes($user), $sql);
$sql = str_replace('%{gid}', addslashes($gid), $sql);
$sql = str_replace('%{group}', addslashes($group), $sql);
- if($this->_modifyDB($sql) !== false) return true;
+ if($this->_modifyDB($sql) !== false) {
+ $this->_flushUserInfoCache($user);
+ return true;
+ }
if($newgroup) { // remove previously created group on error
$sql = str_replace('%{gid}', addslashes($gid), $this->conf['delGroup']);
@@ -267,6 +270,7 @@ class auth_plugin_authpgsql extends auth_plugin_authmysql {
}
if($gid !== false){
+ $this->_flushUserInfoCache($user);
return true;
} else {
/* remove the new user and all group relations if a group can't
diff --git a/lib/plugins/authpgsql/lang/es/settings.php b/lib/plugins/authpgsql/lang/es/settings.php
index 2e02fc0ec..abfb00d38 100644
--- a/lib/plugins/authpgsql/lang/es/settings.php
+++ b/lib/plugins/authpgsql/lang/es/settings.php
@@ -5,6 +5,7 @@
*
* @author Antonio Bueno <atnbueno@gmail.com>
* @author Antonio Castilla <antoniocastilla@trazoide.com>
+ * @author pokesakura <pokesakura@gmail.com>
*/
$lang['server'] = 'Su servidor PostgreSQL';
$lang['port'] = 'Puerto de su servidor PostgreSQL';
@@ -17,10 +18,21 @@ $lang['checkPass'] = 'Sentencia SQL para el control de las contrase
$lang['getUserInfo'] = 'Sentencia SQL para recuperar información del usuario';
$lang['getGroups'] = 'Sentencia SQL para recuperar la pertenencia a grupos de un usuario';
$lang['getUsers'] = 'Sentencia SQL para enumerar todos los usuarios';
+$lang['FilterLogin'] = 'Sentencia SQL para filtrar a los usuarios por su login';
+$lang['FilterName'] = 'Sentencia SQL para filtrar a los usuarios por su nombre completo';
+$lang['FilterEmail'] = 'Sentencia SQL para filtrar a los usuarios por su correo electrónico';
+$lang['FilterGroup'] = 'Sentencia SQL para filtrar a los usuarios por su membresía en un grupo';
+$lang['SortOrder'] = 'Sentencia SQL para ordenar a los usuarios';
$lang['addUser'] = 'Sentencia de SQL para agregar un nuevo usuario';
$lang['addGroup'] = 'Sentencia de SQL para agregar un nuevo grupo';
$lang['addUserGroup'] = 'Sentencia SQL para agregar un usuario a un grupo existente';
$lang['delGroup'] = 'Instrucción SQL para eliminar un grupo';
$lang['getUserID'] = 'Sentencia SQL para obtener la clave principal de un usuario';
$lang['delUser'] = 'Sentencia SQL para eliminar un usuario';
+$lang['delUserRefs'] = 'Sentencia SQL para remover a un usuario de su memebresia en todos los grupos';
+$lang['updateUser'] = 'Sentencia SQL para actualizar los datos del usuario';
+$lang['UpdateLogin'] = 'Sentencia de actualizacion para el login del usuario';
+$lang['UpdatePass'] = 'Sentencia de actualizacion para el password del usuario';
+$lang['UpdateEmail'] = 'Sentencia de actualizacion del correo electrónico del usuario';
+$lang['UpdateName'] = 'Sentencia de actualizacion del nombre completo del usuario';
$lang['getGroupID'] = 'Sentencia SQL para obtener la clave principal de un grupo dado';
diff --git a/lib/plugins/authpgsql/lang/fa/settings.php b/lib/plugins/authpgsql/lang/fa/settings.php
new file mode 100644
index 000000000..813493967
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/fa/settings.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Mohamad Mehdi Habibi <habibi.esf@gmail.com>
+ */
+$lang['database'] = 'پایگاه داده مورد استفاده';
diff --git a/lib/plugins/authplain/auth.php b/lib/plugins/authplain/auth.php
index e53f56667..b3ca988b9 100644
--- a/lib/plugins/authplain/auth.php
+++ b/lib/plugins/authplain/auth.php
@@ -76,9 +76,10 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
*
* @author Andreas Gohr <andi@splitbrain.org>
* @param string $user
+ * @param bool $requireGroups (optional) ignored by this plugin, grps info always supplied
* @return array|bool
*/
- public function getUserData($user) {
+ public function getUserData($user, $requireGroups=true) {
if($this->users === null) $this->_loadUserData();
return isset($this->users[$user]) ? $this->users[$user] : false;
}
diff --git a/lib/plugins/extension/helper/list.php b/lib/plugins/extension/helper/list.php
index 47edca8c1..9b1988d84 100644
--- a/lib/plugins/extension/helper/list.php
+++ b/lib/plugins/extension/helper/list.php
@@ -387,7 +387,8 @@ class helper_plugin_extension_list extends DokuWiki_Plugin {
$return .= '<dd>';
$return .= hsc($extension->getInstalledVersion());
$return .= '</dd>';
- } else {
+ }
+ if (!$extension->isBundled()) {
$return .= '<dt>'.$this->getLang('install_date').'</dt>';
$return .= '<dd>';
$return .= ($extension->getUpdateDate() ? hsc($extension->getUpdateDate()) : $this->getLang('unknown'));
@@ -401,13 +402,6 @@ class helper_plugin_extension_list extends DokuWiki_Plugin {
$return .= '</dd>';
}
- if($extension->getInstallDate()) {
- $return .= '<dt>'.$this->getLang('installed').'</dt>';
- $return .= '<dd>';
- $return .= hsc($extension->getInstallDate());
- $return .= '</dd>';
- }
-
$return .= '<dt>'.$this->getLang('provides').'</dt>';
$return .= '<dd><bdi>';
$return .= ($extension->getTypes() ? hsc(implode(', ', $extension->getTypes())) : $default);
diff --git a/lib/plugins/extension/lang/cs/intro_install.txt b/lib/plugins/extension/lang/cs/intro_install.txt
new file mode 100644
index 000000000..b274959b9
--- /dev/null
+++ b/lib/plugins/extension/lang/cs/intro_install.txt
@@ -0,0 +1 @@
+Zde můžete ručně instalovat zásuvné moduly a šablony vzhledu, buď nahráním, nebo zadáním přímé URL pro stažení. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/cs/lang.php b/lib/plugins/extension/lang/cs/lang.php
new file mode 100644
index 000000000..27b3a94a3
--- /dev/null
+++ b/lib/plugins/extension/lang/cs/lang.php
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Viktor Zavadil <vzavadil@newps.cz>
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
+ */
+$lang['menu'] = 'Manager rozšíření';
+$lang['tab_plugins'] = 'Instalované moduly';
+$lang['tab_templates'] = 'Instalované šablony';
+$lang['tab_search'] = 'Vyhledej a instaluj';
+$lang['tab_install'] = 'Ruční instalování';
+$lang['notimplemented'] = 'Tato vychytávka není dosud implementována';
+$lang['notinstalled'] = 'Toto rozšíření není instalováno';
+$lang['alreadyenabled'] = 'Toto rozšíření je již povoleno';
+$lang['alreadydisabled'] = 'Toto rozšíření je již vypnuto';
+$lang['unknownauthor'] = 'Neznámý autor';
+$lang['unknownversion'] = 'Neznámá verze';
+$lang['btn_info'] = 'Zobrazit více informací';
+$lang['btn_update'] = 'Aktualizovat';
+$lang['btn_uninstall'] = 'Odinstalovat';
+$lang['btn_enable'] = 'Povolit';
+$lang['btn_disable'] = 'Zakázat';
+$lang['btn_install'] = 'Instalovat';
+$lang['btn_reinstall'] = 'Přeinstalovat';
+$lang['js']['reallydel'] = 'Opravdu odinstalovat toto rozšíření?';
+$lang['search_for'] = 'Hledat rozšíření:';
+$lang['search'] = 'Hledat';
+$lang['popularity'] = 'Popularita: %s%%';
+$lang['homepage_link'] = 'Dokumenty';
+$lang['bugs_features'] = 'Chyby';
+$lang['tags'] = 'Štítky:';
+$lang['author_hint'] = 'Vyhledat rozšíření podle tohoto autora';
+$lang['installed'] = 'Nainstalováno:';
+$lang['repository'] = 'Repozitář:';
+$lang['unknown'] = '<em>neznámý</em>';
+$lang['installed_version'] = 'Nainstalovaná verze:';
+$lang['install_date'] = 'Poslední aktualizace';
+$lang['available_version'] = 'Dostupná verze:';
+$lang['compatible'] = 'Kompatibilní s:';
+$lang['depends'] = 'Závisí na:';
+$lang['similar'] = 'Podobný jako:';
+$lang['donate'] = 'Líbí se ti to?';
+$lang['donate_action'] = 'Kup autorovi kávu!';
+$lang['repo_retry'] = 'Opakovat';
+$lang['provides'] = 'Poskytuje:';
+$lang['status'] = 'Stav:';
+$lang['status_installed'] = 'instalovaný';
+$lang['status_not_installed'] = 'nenainstalovaný';
+$lang['status_protected'] = 'chráněný';
+$lang['status_enabled'] = 'povolený';
+$lang['status_disabled'] = 'zakázaný';
+$lang['status_unmodifiable'] = 'neměnný';
+$lang['status_plugin'] = 'zásuvný modul';
+$lang['status_template'] = 'šablona';
+$lang['msg_delete_success'] = 'Rozšíření odinstalováno';
diff --git a/lib/plugins/extension/lang/fa/lang.php b/lib/plugins/extension/lang/fa/lang.php
new file mode 100644
index 000000000..95c3e9652
--- /dev/null
+++ b/lib/plugins/extension/lang/fa/lang.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Mohamad Mehdi Habibi <habibi.esf@gmail.com>
+ */
+$lang['menu'] = 'مدیریت افزونه ها';
+$lang['tab_plugins'] = 'پلاگین های نصب شده';
+$lang['tab_templates'] = 'قالب های نصب شده';
+$lang['tab_search'] = 'جستجو و نصب';
+$lang['tab_install'] = 'نصب دستی';
+$lang['notinstalled'] = 'این افزونه نصب نشده است';
+$lang['alreadyenabled'] = 'این افزونه فعال شده است';
+$lang['alreadydisabled'] = 'این افزونه غیرفعال شده است';
+$lang['unknownversion'] = 'نسخه ناشناخته';
+$lang['btn_info'] = 'نمایش اطلاعات بیشتر';
+$lang['btn_update'] = 'به روز رسانی';
+$lang['btn_enable'] = 'فعال';
+$lang['btn_disable'] = 'غیرفعال';
+$lang['btn_install'] = 'نصب';
+$lang['btn_reinstall'] = 'نصب مجدد';
+$lang['search_for'] = 'جستجوی افزونه:';
+$lang['search'] = 'جستجو';
+$lang['tags'] = 'برچسب ها:';
+$lang['installed_version'] = 'نسخه نصب شده:';
+$lang['available_version'] = 'نسخه در دسترس:';
+$lang['repo_retry'] = 'دوباره';
+$lang['status'] = 'وضعیت';
+$lang['status_installed'] = 'نصب شده';
+$lang['status_not_installed'] = 'نصب نشده';
+$lang['status_enabled'] = 'فعال';
+$lang['status_disabled'] = 'غیرفعال';
+$lang['status_plugin'] = 'پلاگین';
+$lang['status_template'] = 'قالب';
+$lang['noperms'] = 'پوشه افزونه ها قابل نوشتن نیست';
+$lang['notplperms'] = 'پوشه قالب ها قابل نوشتن نیست';
+$lang['nopluginperms'] = 'پوشه پلاگین ها قابل نوشتن نیست';
+$lang['install_url'] = 'نصب از آدرس:';
+$lang['install_upload'] = 'بارگذاری افزونه:';
diff --git a/lib/plugins/extension/lang/hr/lang.php b/lib/plugins/extension/lang/hr/lang.php
index 890681301..4905fe864 100644
--- a/lib/plugins/extension/lang/hr/lang.php
+++ b/lib/plugins/extension/lang/hr/lang.php
@@ -18,7 +18,7 @@ $lang['pluginlistsaveerror'] = 'Dogodila se greška pri snimanju liste dodatak
$lang['unknownauthor'] = 'Nepoznat autor';
$lang['unknownversion'] = 'Nepoznata inačica';
$lang['btn_info'] = 'Prikaži više informacija';
-$lang['btn_update'] = 'Ažuriraj';
+$lang['btn_update'] = 'Dopuni';
$lang['btn_uninstall'] = 'Ukloni';
$lang['btn_enable'] = 'Omogući';
$lang['btn_disable'] = 'Onemogući';
@@ -40,3 +40,49 @@ $lang['repository'] = 'Repozitorij:';
$lang['unknown'] = '<em>nepoznat</em>';
$lang['installed_version'] = 'Postavljena inačica:';
$lang['install_date'] = 'Vaše zadnje osvježavanje:';
+$lang['available_version'] = 'Dostupna inačica';
+$lang['compatible'] = 'Kompatibilan s:';
+$lang['depends'] = 'Zavisi o:';
+$lang['similar'] = 'Sličan s:';
+$lang['conflicts'] = 'U sukobu s:';
+$lang['donate'] = 'Poput ovog?';
+$lang['donate_action'] = 'Kupite autoru kavu!';
+$lang['repo_retry'] = 'Ponovi';
+$lang['provides'] = 'Osigurava:';
+$lang['status'] = 'Status:';
+$lang['status_installed'] = 'ugrađen';
+$lang['status_not_installed'] = 'nije ugrađen';
+$lang['status_protected'] = 'zaštićen';
+$lang['status_enabled'] = 'omogućen';
+$lang['status_disabled'] = 'onemogućen';
+$lang['status_unmodifiable'] = 'neizmjenjiv';
+$lang['status_plugin'] = 'dodatak';
+$lang['status_template'] = 'predložak';
+$lang['status_bundled'] = 'ugrađen';
+$lang['msg_enabled'] = 'Dodatak %s omogućen';
+$lang['msg_disabled'] = 'Dodatak %s onemogućen';
+$lang['msg_delete_success'] = 'Proširenje uklonjeno';
+$lang['msg_template_install_success'] = 'Predložak %s uspješno ugrađen';
+$lang['msg_template_update_success'] = 'Predložak %s uspješno nadograđen';
+$lang['msg_plugin_install_success'] = 'Dodatak %s uspješno ugrađen';
+$lang['msg_plugin_update_success'] = 'Dodatak %s uspješno nadograđen';
+$lang['msg_upload_failed'] = 'Učitavanje datoteke nije uspjelo';
+$lang['missing_dependency'] = '<strong>Nedostaje ili onemogućena zavisnost:</strong> %s';
+$lang['security_issue'] = '<strong>Sigurnosno pitanje:</strong> %s';
+$lang['security_warning'] = '<strong>Sigurnosno upozorenje:</strong> %s';
+$lang['update_available'] = '<strong>Nadogranja:</strong> Nova inačica %s je dostupna.';
+$lang['wrong_folder'] = '<strong>Dodatak neispravno ugrađen:</strong> Preimenujte mapu dodatka iz "%s" u "%s".';
+$lang['url_change'] = '<strong>URL izmijenjen:</strong> Adresa za preuzimanje je promijenjena od zadnjeg preuzimanja. Provjerite da li je novu URL valjan prije nadogradnje proširenja.<br />Novi: %s<br />Stari: %s';
+$lang['error_badurl'] = 'URL adrese trebaju započinjati sa http ili https';
+$lang['error_dircreate'] = 'Ne mogu napraviti privremenu mapu za prihvat preuzimanja';
+$lang['error_download'] = 'Ne mogu preuzeti datoteku: %s';
+$lang['error_decompress'] = 'Ne mogu raspakirati preuzetu datoteku. To može biti rezultati lošeg preuzimanja i tada treba pokušati ponovo; ili format sažimanja je nepoznat i u tom slučaju treba datoteku ručno preuzeti i ugraditi.';
+$lang['error_findfolder'] = 'Ne mogu odrediti mapu proširenja, trebate ga ručno preuzeti i ugraditi';
+$lang['error_copy'] = 'Dogodila se greška pri kopiranju dok je pokušavanja ugradnja datoteka u mapu <em>%s</em>: disk može biti pun ili dozvole pristupa nisu dobre. Ovo može rezultirati djelomično ugrađenim dodatkom i može učiniti Vaš wiki nestabilnim';
+$lang['noperms'] = 'Nije moguće pisati u mapu proširanja';
+$lang['notplperms'] = 'Nije moguće pisati u mapu predloška';
+$lang['nopluginperms'] = 'Nije moguće pisati u mapu dodatka';
+$lang['git'] = 'Proširenje je ugrađeno preko Git-a, možda ga ne želite nadograđivati ovdje.';
+$lang['install_url'] = 'Ugradi s URL-a:';
+$lang['install_upload'] = 'Učitaj proširenje:';
+$lang['repo_error'] = 'Repozitorij dodataka nije dostupan. Budite sigurni da server može pristupiti www.dokuwiki.org i provjerite proxy postavke.';
diff --git a/lib/plugins/extension/lang/it/lang.php b/lib/plugins/extension/lang/it/lang.php
index fbf163d57..7dff6c5b2 100644
--- a/lib/plugins/extension/lang/it/lang.php
+++ b/lib/plugins/extension/lang/it/lang.php
@@ -4,6 +4,7 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Francesco <francesco.cavalli@hotmail.com>
+ * @author Fabio <fabioslurp@yahoo.it>
*/
$lang['btn_enable'] = 'Abilita';
$lang['btn_disable'] = 'Disabilita';
@@ -36,6 +37,7 @@ $lang['status_template'] = 'modello';
$lang['error_badurl'] = 'URLs deve iniziare con http o https';
$lang['error_dircreate'] = 'Impossibile creare una cartella temporanea per ricevere il download';
$lang['error_download'] = 'Impossibile scaricare il file: %s';
+$lang['noperms'] = 'La directory Extension non è scrivibile';
$lang['notplperms'] = 'Il modello di cartella non è scrivibile';
$lang['nopluginperms'] = 'La cartella plugin non è scrivibile';
$lang['install_url'] = 'Installa da URL:';
diff --git a/lib/plugins/extension/lang/pt-br/intro_install.txt b/lib/plugins/extension/lang/pt-br/intro_install.txt
new file mode 100644
index 000000000..08527b0f6
--- /dev/null
+++ b/lib/plugins/extension/lang/pt-br/intro_install.txt
@@ -0,0 +1 @@
+Aqui você pode instalar extensões e modelos manualmente, ou subindo eles ou submetendo uma URL de baixar diretamente. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/pt-br/intro_plugins.txt b/lib/plugins/extension/lang/pt-br/intro_plugins.txt
new file mode 100644
index 000000000..e0a8c7f3f
--- /dev/null
+++ b/lib/plugins/extension/lang/pt-br/intro_plugins.txt
@@ -0,0 +1 @@
+Estas são as extensões instaladas atualmente no seu DokuWiki. Você pode habilitar ou desabilitar ou desinstalar completamente elas aqui. Atualizações das extensões também são mostradas, certifique-se de ler a documentação da extensão antes de atualizá-la. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/pt-br/intro_search.txt b/lib/plugins/extension/lang/pt-br/intro_search.txt
new file mode 100644
index 000000000..f2101d73b
--- /dev/null
+++ b/lib/plugins/extension/lang/pt-br/intro_search.txt
@@ -0,0 +1 @@
+Esta aba lhe dá acesso a extensões e modelos disponibilizados por terceiros para o DokuWiki. Favor ter cuidado pois instalar código de terceiros pode acarretar um **risco de segurança**, você poderia ler sobre [[doku>security#plugin_security|segurança de extensões]] primeiramente. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/pt-br/intro_templates.txt b/lib/plugins/extension/lang/pt-br/intro_templates.txt
new file mode 100644
index 000000000..aa3e07f0c
--- /dev/null
+++ b/lib/plugins/extension/lang/pt-br/intro_templates.txt
@@ -0,0 +1 @@
+Estes são os modelos instalados atualmente no seu DokuWiki. Você pode selecionar o modelo a ser usado no [[?do=admin&page=config|Configuration Manager]]. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/pt-br/lang.php b/lib/plugins/extension/lang/pt-br/lang.php
new file mode 100644
index 000000000..0d897616a
--- /dev/null
+++ b/lib/plugins/extension/lang/pt-br/lang.php
@@ -0,0 +1,75 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Felipe Castro <fefcas@gmail.com>
+ */
+$lang['menu'] = 'Gerenciador de extensões';
+$lang['tab_plugins'] = 'Extensões instaladas';
+$lang['tab_templates'] = 'Modelos instalados';
+$lang['tab_search'] = 'Procurar e instalar';
+$lang['tab_install'] = 'Instalar manualmente';
+$lang['notimplemented'] = 'Esta função ainda não foi implementada';
+$lang['notinstalled'] = 'Esta extensão não está instalada';
+$lang['alreadyenabled'] = 'Esta extensão já foi habilitada';
+$lang['alreadydisabled'] = 'Esta extensão já foi desabilitada';
+$lang['pluginlistsaveerror'] = 'Houve um erro ao salvar a lista de extensões';
+$lang['unknownauthor'] = 'Autor desconhecido';
+$lang['unknownversion'] = 'Versão desconhecida';
+$lang['btn_info'] = 'Mostrar mais informações';
+$lang['btn_update'] = 'Atualizar';
+$lang['btn_uninstall'] = 'Desinstalar';
+$lang['btn_enable'] = 'Habilitar';
+$lang['btn_disable'] = 'Desabilitar';
+$lang['btn_install'] = 'Instalar';
+$lang['btn_reinstall'] = 'Re-instalar';
+$lang['js']['reallydel'] = 'Quer mesmo desinstalar esta extensão?';
+$lang['search_for'] = 'Procurar extensão:';
+$lang['search'] = 'Procurar';
+$lang['extensionby'] = '<strong>%s</strong> de %s';
+$lang['screenshot'] = 'Tela congelada de %s';
+$lang['popularity'] = 'Popularidade: %s%%';
+$lang['homepage_link'] = 'Docs';
+$lang['bugs_features'] = 'Erros';
+$lang['tags'] = 'Etiquetas:';
+$lang['author_hint'] = 'Procurar extensões deste autor';
+$lang['installed'] = 'Instalado:';
+$lang['downloadurl'] = 'URL para baixar:';
+$lang['repository'] = 'Repositório:';
+$lang['unknown'] = '<em>desconhecido</em>';
+$lang['installed_version'] = 'Versão instalada:';
+$lang['install_date'] = 'Sua última atualização:';
+$lang['available_version'] = 'Versão disponível:';
+$lang['compatible'] = 'Compatível com:';
+$lang['depends'] = 'Depende de:';
+$lang['similar'] = 'Similar a:';
+$lang['conflicts'] = 'Colide com:';
+$lang['donate'] = 'Gostou deste?';
+$lang['donate_action'] = 'Pague um café ao autor!';
+$lang['repo_retry'] = 'Tentar de novo';
+$lang['provides'] = 'Disponibiliza:';
+$lang['status'] = 'Estado:';
+$lang['status_installed'] = 'instalado';
+$lang['status_not_installed'] = 'não instalado';
+$lang['status_protected'] = 'protegido';
+$lang['status_enabled'] = 'habilitado';
+$lang['status_disabled'] = 'desabilitado';
+$lang['status_unmodifiable'] = 'não modificável';
+$lang['status_plugin'] = 'extensão';
+$lang['status_template'] = 'modelo';
+$lang['status_bundled'] = 'agrupado';
+$lang['msg_enabled'] = 'Extensão %s habilitada';
+$lang['msg_disabled'] = 'Extensão %s desabilitada';
+$lang['msg_delete_success'] = 'Extensão desinstalada';
+$lang['msg_template_install_success'] = 'Modelo %s instalado com sucesso';
+$lang['msg_template_update_success'] = 'Modelo %s atualizado com sucesso';
+$lang['msg_plugin_install_success'] = 'Extensão %s instalada com sucesso';
+$lang['msg_plugin_update_success'] = 'Extensão %s atualizada com sucesso';
+$lang['msg_upload_failed'] = 'Subida do arquivo falhou';
+$lang['missing_dependency'] = '<strong>Dependência faltante ou desabilitada:</strong> %s';
+$lang['security_issue'] = '<strong>Problema com segurança:</strong> %s';
+$lang['security_warning'] = '<strong>Aviso sobre segurança:</strong> %s';
+$lang['update_available'] = '<strong>Atualização:</strong> Nova versão %s está disponível.';
+$lang['wrong_folder'] = '<strong>Extensão instalada incorretamente:</strong> Renomeie o diretório de extensões "%s" para "%s".';
+$lang['url_change'] = '<strong>URL mudou:</strong> A URL para baixar mudou desde a última baixada. Verifique se a nova URL é válida antes de atualizar a extensão.<br />Novo: %s<br />Velho: %s';
diff --git a/lib/plugins/extension/lang/ru/lang.php b/lib/plugins/extension/lang/ru/lang.php
index d524f072b..fa1625f28 100644
--- a/lib/plugins/extension/lang/ru/lang.php
+++ b/lib/plugins/extension/lang/ru/lang.php
@@ -4,6 +4,7 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Aleksandr Selivanov <alexgearbox@yandex.ru>
+ * @author Igor Degraf <igordegraf@gmail.com>
*/
$lang['menu'] = 'Управление дополнениями';
$lang['tab_plugins'] = 'Установленные плагины';
@@ -58,3 +59,10 @@ $lang['msg_template_install_success'] = 'Шаблон %s успешно уста
$lang['msg_template_update_success'] = 'Шаблон %s успешно обновлён';
$lang['msg_plugin_install_success'] = 'Плагин %s успешно установлен';
$lang['msg_plugin_update_success'] = 'Плагин %s успешно обновлён';
+$lang['noperms'] = 'Папка для расширений не доступна на запись';
+$lang['notplperms'] = 'Папка для шаблонов не доступна на запись';
+$lang['nopluginperms'] = 'Папка плагинов не доступна на запись';
+$lang['git'] = 'Это расширение было установлено через git, Вы не можете обновить его тут.';
+$lang['install_url'] = 'Установить с адреса URL:';
+$lang['install_upload'] = 'Скачать расширение:';
+$lang['repo_error'] = 'Сайт с плагинами недоступен. Убедитесь, что у сайта есть доступ на www.dokuwiki.org и также проверьте настройки соединения прокси.';
diff --git a/lib/plugins/extension/lang/zh-tw/intro_install.txt b/lib/plugins/extension/lang/zh-tw/intro_install.txt
new file mode 100644
index 000000000..3ba93f5f8
--- /dev/null
+++ b/lib/plugins/extension/lang/zh-tw/intro_install.txt
@@ -0,0 +1 @@
+在此你可以透過檔案上傳或提供下載網址的方式,進行手動安裝外掛與版型風格。 \ No newline at end of file
diff --git a/lib/plugins/extension/lang/zh-tw/lang.php b/lib/plugins/extension/lang/zh-tw/lang.php
index 304aed5ee..a86364d7a 100644
--- a/lib/plugins/extension/lang/zh-tw/lang.php
+++ b/lib/plugins/extension/lang/zh-tw/lang.php
@@ -4,8 +4,47 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Stan <talktostan@gmail.com>
+ * @author June-Hao Hou <junehao@gmail.com>
*/
+$lang['menu'] = '延伸功能管理';
+$lang['tab_plugins'] = '已安裝外掛';
$lang['tab_templates'] = '已安裝裝模版
';
$lang['tab_search'] = '搜尋與安裝';
+$lang['tab_install'] = '手動安裝';
+$lang['notimplemented'] = '此功能尚未完成';
+$lang['notinstalled'] = '此延伸功能尚未安裝';
+$lang['alreadyenabled'] = '此延伸功能已經安裝';
+$lang['alreadydisabled'] = '此延伸功能停用';
+$lang['unknownauthor'] = '作者未知';
+$lang['unknownversion'] = '版本未知';
+$lang['btn_info'] = '顯示更多訊息';
$lang['btn_update'] = '更新';
+$lang['btn_uninstall'] = '移除安裝';
+$lang['btn_enable'] = '啟用';
+$lang['btn_disable'] = '停用';
+$lang['btn_install'] = '安裝';
+$lang['btn_reinstall'] = '重新安裝';
+$lang['js']['reallydel'] = '確定要移除此延伸功能?';
+$lang['search_for'] = '搜尋延伸功能:';
+$lang['search'] = '搜尋';
+$lang['tags'] = '標籤:';
+$lang['author_hint'] = '搜尋相同作者的延伸功能';
+$lang['installed'] = '已安裝:';
+$lang['downloadurl'] = '下載網址:';
+$lang['installed_version'] = '已安裝版本:';
+$lang['available_version'] = '可用版本:';
+$lang['compatible'] = '相容於:';
+$lang['repo_retry'] = '再試一次';
+$lang['status'] = '狀態:';
+$lang['status_installed'] = '已安裝';
+$lang['status_not_installed'] = '未安裝';
+$lang['status_enabled'] = '作用中';
+$lang['status_disabled'] = '停用中';
+$lang['status_plugin'] = '外掛';
+$lang['noperms'] = '延伸功能資料夾無法寫入';
+$lang['notplperms'] = '版型資料夾無法寫入';
+$lang['nopluginperms'] = '外掛資料夾無法寫入';
+$lang['git'] = '此延伸功能是透過git安裝的,最好不要用上傳方式。';
+$lang['install_url'] = '透過網址安裝:';
+$lang['install_upload'] = '上傳延伸功能:';
diff --git a/lib/plugins/popularity/lang/hr/intro.txt b/lib/plugins/popularity/lang/hr/intro.txt
new file mode 100644
index 000000000..c7c3eba61
--- /dev/null
+++ b/lib/plugins/popularity/lang/hr/intro.txt
@@ -0,0 +1,7 @@
+====== Povratna informacija o popularnosti ======
+
+Ovaj [[doku>popularity|alat]] prikupla anonimne podatke o Vašem wiki i omogućava Vam da ih pošaljete DokuWiki razvojnom timu. To im pomaže da bolje razumiju kako korisnici koriste DokuWiki i osigurava kvalitetnije odluke o budućem razvoju u skladu s stvarnim korištenjem.
+
+Pozivamo Vas da ponavljate ovaj korak s vremena na vrijeme kako bi razvojni tim bio obaviješten o razvoju Vašeg wiki-a. Vaši novi podaci biti će identificirani putem anonimne oznake.
+
+Prikupljeni podatci sadrže informacije kako što je DokuWiki inačica, broj i veličina vaših stranica i datoteka, ugrađeni dodatci i PHP-u koji se koristi. Sirovi podatci koji će biti poslani su prikazani niže. Molim koristite gumb "Pošalji podatke" da bi ste poslali ove informacije.
diff --git a/lib/plugins/popularity/lang/hr/lang.php b/lib/plugins/popularity/lang/hr/lang.php
new file mode 100644
index 000000000..a8ea70728
--- /dev/null
+++ b/lib/plugins/popularity/lang/hr/lang.php
@@ -0,0 +1,14 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Davor Turkalj <turki.bsc@gmail.com>
+ */
+$lang['name'] = 'Povratna informacija o popularnosti (može proteći neko vrijeme dok se učita)';
+$lang['submit'] = 'Pošalji podatke';
+$lang['autosubmit'] = 'Šalji podatke automatski jednom mjesečno';
+$lang['submissionFailed'] = 'Podatci ne mogu biti poslani zbog slijedeće greške:';
+$lang['submitDirectly'] = 'Podatke možete poslati ručno potvrđivanjem forme u nastavku.';
+$lang['autosubmitError'] = 'Zadnje automatsko slanje nije uspješno zbog slijedeće greške:';
+$lang['lastSent'] = 'Podatci su poslani';
diff --git a/lib/plugins/popularity/lang/hr/submitted.txt b/lib/plugins/popularity/lang/hr/submitted.txt
new file mode 100644
index 000000000..8c841b3df
--- /dev/null
+++ b/lib/plugins/popularity/lang/hr/submitted.txt
@@ -0,0 +1,3 @@
+====== Povratna informacija o popularnosti ======
+
+Podatci su uspješno poslani. \ No newline at end of file
diff --git a/lib/plugins/revert/lang/ar/lang.php b/lib/plugins/revert/lang/ar/lang.php
index 71f411c52..6262cc674 100644
--- a/lib/plugins/revert/lang/ar/lang.php
+++ b/lib/plugins/revert/lang/ar/lang.php
@@ -8,6 +8,7 @@
* @author uahello@gmail.com
* @author Ahmad Abd-Elghany <tolpa1@gmail.com>
* @author alhajr <alhajr300@gmail.com>
+ * @author Mohamed Belhsine <b.mohamed897@gmail.com>
*/
$lang['menu'] = 'مدير الاسترجاع';
$lang['filter'] = 'ابحث في الصفحات المتأذاة';
diff --git a/lib/plugins/revert/lang/cs/lang.php b/lib/plugins/revert/lang/cs/lang.php
index e1b47bb8d..619a9d929 100644
--- a/lib/plugins/revert/lang/cs/lang.php
+++ b/lib/plugins/revert/lang/cs/lang.php
@@ -17,6 +17,8 @@
* @author Gerrit Uitslag <klapinklapin@gmail.com>
* @author Petr Klíma <qaxi@seznam.cz>
* @author Radovan Buroň <radovan@buron.cz>
+ * @author Viktor Zavadil <vzavadil@newps.cz>
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
*/
$lang['menu'] = 'Obnova zaspamovaných stránek';
$lang['filter'] = 'Hledat zaspamované stránky';
diff --git a/lib/plugins/revert/lang/hr/intro.txt b/lib/plugins/revert/lang/hr/intro.txt
new file mode 100644
index 000000000..5d7a52dfb
--- /dev/null
+++ b/lib/plugins/revert/lang/hr/intro.txt
@@ -0,0 +1,3 @@
+====== Pomoćnik za povrat ======
+
+Pomaže vam pri povratku u slučaju spam napada. Da bi ste našli listu stranica koje su onečišćene spam-om unesite tekst za potragu (npr. spam URL), te potvrdite da su nađene stranice zaista spam i vratite na prethodno stanje. \ No newline at end of file
diff --git a/lib/plugins/revert/lang/hr/lang.php b/lib/plugins/revert/lang/hr/lang.php
new file mode 100644
index 000000000..594136902
--- /dev/null
+++ b/lib/plugins/revert/lang/hr/lang.php
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Davor Turkalj <turki.bsc@gmail.com>
+ */
+$lang['menu'] = 'Pomoćnik za povrat stanja';
+$lang['filter'] = 'Potraži spam stranice';
+$lang['revert'] = 'Povrati odabrane stranice';
+$lang['reverted'] = '%s vraćena na izdanje %s';
+$lang['removed'] = '%s uklonjen';
+$lang['revstart'] = 'Proces povratka započeo. To može potrajati. Ako se dogodi istek vremena prije završetka, trebate povrat stranica vršiti u manjim grupama.';
+$lang['revstop'] = 'Proces povratka uspješno završio.';
+$lang['note1'] = 'Obavijest: ova pretraga razlikuje velika/mala slova';
+$lang['note2'] = 'Obavijest: stranica će biti vraćena na zadnje stanje koje ne sadrži traženi spam termin <i>%s</i>.';
diff --git a/lib/plugins/usermanager/lang/fa/lang.php b/lib/plugins/usermanager/lang/fa/lang.php
index a6a484411..bb2505a27 100644
--- a/lib/plugins/usermanager/lang/fa/lang.php
+++ b/lib/plugins/usermanager/lang/fa/lang.php
@@ -10,6 +10,8 @@
* @author Mohammad Reza Shoaei <shoaei@gmail.com>
* @author Milad DZand <M.DastanZand@gmail.com>
* @author AmirH Hassaneini <mytechmix@gmail.com>
+ * @author Hamid <zarrabi@sharif.edu>
+ * @author Mohamad Mehdi Habibi <habibi.esf@gmail.com>
*/
$lang['menu'] = 'مدیریت کاربر';
$lang['noauth'] = '(معتبرسازی کاربر ممکن نیست)';
@@ -32,23 +34,25 @@ $lang['search'] = 'جستجو';
$lang['search_prompt'] = 'انجام جستجو';
$lang['clear'] = 'بازنویسی فیلترهای جستجو';
$lang['filter'] = 'فیلتر';
+$lang['import'] = 'ورود کاربران جدید';
+$lang['error'] = 'متن خطا';
$lang['summary'] = 'نمایش کاربر %1$d-%2$d از %3$d. در کل %4$d کاربر.';
$lang['nonefound'] = 'هیچ کاربری یافت نشد. در کل %d کاربر.';
$lang['delete_ok'] = '%d کاربر حذف شد';
$lang['delete_fail'] = 'حذف %d کاربر با مشکل مواجه شد.';
-$lang['update_ok'] = 'کاربر با موفقیت به روز رسانی شد.';
-$lang['update_fail'] = 'به روز رسانی کاربر با مشکل مواجه شد';
-$lang['update_exists'] = 'تغییر نام کاربری ممکن نیست، نام کاربری مورد نظر (%s) قبلن وجود داشته (مابقی تغییرات اعمال شده است)';
+$lang['update_ok'] = 'کاربر با موفقیت به‌روز شد.';
+$lang['update_fail'] = 'به‌روزرسانی کاربر با مشکل مواجه شد';
+$lang['update_exists'] = 'تغییر نام کاربری ممکن نیست، نام کاربری مورد نظر (%s) از قبل وجود داشته است (مابقی تغییرات اعمال خواهد شد).';
$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_fail'] = 'ارسال ایمیل آگاهی دهنده با مشکل مواجه شد';
+$lang['notify_ok'] = 'ایمیل آگاهی‌دهنده ارسال شد';
+$lang['notify_fail'] = 'ارسال ایمیل آگاهی‌دهنده با مشکل مواجه شد';
diff --git a/lib/plugins/usermanager/lang/hr/add.txt b/lib/plugins/usermanager/lang/hr/add.txt
new file mode 100644
index 000000000..f7c866495
--- /dev/null
+++ b/lib/plugins/usermanager/lang/hr/add.txt
@@ -0,0 +1 @@
+===== Dodaj korisnika =====
diff --git a/lib/plugins/usermanager/lang/hr/delete.txt b/lib/plugins/usermanager/lang/hr/delete.txt
new file mode 100644
index 000000000..072185fc1
--- /dev/null
+++ b/lib/plugins/usermanager/lang/hr/delete.txt
@@ -0,0 +1 @@
+===== Ukloni korisnika =====
diff --git a/lib/plugins/usermanager/lang/hr/edit.txt b/lib/plugins/usermanager/lang/hr/edit.txt
new file mode 100644
index 000000000..752fd81f3
--- /dev/null
+++ b/lib/plugins/usermanager/lang/hr/edit.txt
@@ -0,0 +1 @@
+===== Uredi korisnika =====
diff --git a/lib/plugins/usermanager/lang/hr/import.txt b/lib/plugins/usermanager/lang/hr/import.txt
new file mode 100644
index 000000000..85ea92723
--- /dev/null
+++ b/lib/plugins/usermanager/lang/hr/import.txt
@@ -0,0 +1,9 @@
+===== Masovni unos korisnika =====
+
+Zahtjeva CSV datoteku popisa korisnika s minimalno četiri kolone.
+Kolone moraju sadržavati redom: korisničko ime, puno ime, adresu e-pošte i grupe.
+Polja trebaju biti odvojena zarezom (,) a znakovni nizovi s dvostrukim navodnicima (%%""%%). Obrnuta kosa crta (\) koristi se za specijalne kodove (escaping).
+Koristite "Izvoz korisnika" funkciju da bi ste dobili primjer odgovarajuće datoteke.
+Duplikati korisničkih imena biti će ignorirani.
+
+Uspješno kreiranim korisnicima lozinka će biti generirana i poslana e-poštom. \ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/hr/intro.txt b/lib/plugins/usermanager/lang/hr/intro.txt
new file mode 100644
index 000000000..0f156579b
--- /dev/null
+++ b/lib/plugins/usermanager/lang/hr/intro.txt
@@ -0,0 +1 @@
+====== Upravitelj korisnicima ====== \ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/hr/lang.php b/lib/plugins/usermanager/lang/hr/lang.php
new file mode 100644
index 000000000..80613ed6f
--- /dev/null
+++ b/lib/plugins/usermanager/lang/hr/lang.php
@@ -0,0 +1,66 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Davor Turkalj <turki.bsc@gmail.com>
+ */
+$lang['menu'] = 'Upravitelj korisnicima';
+$lang['noauth'] = '(korisnička prijava nije dostupna)';
+$lang['nosupport'] = '(upravljanje korisnikom nije podržano)';
+$lang['badauth'] = 'pogrešan mehanizam prijave';
+$lang['user_id'] = 'Korisnik';
+$lang['user_pass'] = 'Lozinka';
+$lang['user_name'] = 'Stvarno ime';
+$lang['user_mail'] = 'E-pošta';
+$lang['user_groups'] = 'Grupe';
+$lang['field'] = 'Polje';
+$lang['value'] = 'Vrijednost';
+$lang['add'] = 'Dodaj';
+$lang['delete'] = 'Obriši';
+$lang['delete_selected'] = 'Obriši odabrano';
+$lang['edit'] = 'Uredi';
+$lang['edit_prompt'] = 'Uredi ovog korisnika';
+$lang['modify'] = 'Snimi promjene';
+$lang['search'] = 'Potraži';
+$lang['search_prompt'] = 'Izvedi potragu';
+$lang['clear'] = 'Obriši filtar potrage';
+$lang['filter'] = 'Filtar';
+$lang['export_all'] = 'Izvezi sve korisnike (CSV)';
+$lang['export_filtered'] = 'Izvezi filtriranu listu korisnika (CSV)';
+$lang['import'] = 'Unos novih korisnika';
+$lang['line'] = 'Linija br.';
+$lang['error'] = 'Poruka o grešci';
+$lang['summary'] = 'Prikaz korisnika %1$d-%2$d od %3$d nađenih. Ukupno %4$d korisnika.';
+$lang['nonefound'] = 'Nema korisnika koji odgovaraju filtru.Ukupno %d korisnika.';
+$lang['delete_ok'] = '%d korisnik obrisano';
+$lang['delete_fail'] = '%d neuspjelih brisanja.';
+$lang['update_ok'] = 'Korisnik uspješno izmijenjen';
+$lang['update_fail'] = 'Neuspjela izmjena korisnika';
+$lang['update_exists'] = 'Promjena korisničkog imena neuspješna, traženo ime (%s) već postoji (ostale izmjene biti će primijenjene).';
+$lang['start'] = 'početni';
+$lang['prev'] = 'prethodni';
+$lang['next'] = 'slijedeći';
+$lang['last'] = 'zadnji';
+$lang['edit_usermissing'] = 'Odabrani korisnik nije nađen, traženo korisničko ime vjerojatno je obrisano i promijenjeno negdje drugdje.';
+$lang['user_notify'] = 'Obavijesti korisnika';
+$lang['note_notify'] = 'Obavijest korisniku biti će poslana samo ako je upisana nova lozinka.';
+$lang['note_group'] = 'Novi korisnik biti će dodijeljen u podrazumijevanu grupu (%s) ako grupa nije specificirana.';
+$lang['note_pass'] = 'Lozinka će biti generirana ako se polje ostavi prazno i obavješćivanje korisnika je omogućeno.';
+$lang['add_ok'] = 'Korisnik uspješno dodan';
+$lang['add_fail'] = 'Neuspješno dodavanje korisnika';
+$lang['notify_ok'] = 'Obavijest korisniku poslana';
+$lang['notify_fail'] = 'Obavijest korisniku ne može biti poslana';
+$lang['import_userlistcsv'] = 'Datoteka s popisom korisnika (CSV):';
+$lang['import_header'] = 'Zadnje greške pri uvozu';
+$lang['import_success_count'] = 'Uvoz korisnika: %d korisnika nađeno, %d uspješno uvezeno';
+$lang['import_failure_count'] = 'Uvoz korisnika: %d neuspješno. Greške su navedene niže.';
+$lang['import_error_fields'] = 'Nedovoljan broj polja, nađeno %d, potrebno 4.';
+$lang['import_error_baduserid'] = 'Nedostaje korisničko ime';
+$lang['import_error_badname'] = 'Krivo ime';
+$lang['import_error_badmail'] = 'Kriva adresa e-pošte';
+$lang['import_error_upload'] = 'Uvoz neuspješan. CSV datoteka ne može biti učitana ili je prazna.';
+$lang['import_error_readfail'] = 'Uvoz neuspješan. Ne mogu pročitati učitanu datoteku.';
+$lang['import_error_create'] = 'Ne mogu kreirati korisnika';
+$lang['import_notify_fail'] = 'Obavijest uvezenom korisniku %s nije moguće poslati na adresu e-pošte %s.';
+$lang['import_downloadfailures'] = 'Preuzmi greške kao CSV za ispravak';
diff --git a/lib/plugins/usermanager/lang/hr/list.txt b/lib/plugins/usermanager/lang/hr/list.txt
new file mode 100644
index 000000000..50b1d2513
--- /dev/null
+++ b/lib/plugins/usermanager/lang/hr/list.txt
@@ -0,0 +1 @@
+===== Lista korisnika ===== \ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/it/lang.php b/lib/plugins/usermanager/lang/it/lang.php
index af19e293e..ffded3481 100644
--- a/lib/plugins/usermanager/lang/it/lang.php
+++ b/lib/plugins/usermanager/lang/it/lang.php
@@ -17,6 +17,7 @@
* @author snarchio@gmail.com
* @author Claudio Lanconelli <lancos@libero.it>
* @author Francesco <francesco.cavalli@hotmail.com>
+ * @author Fabio <fabioslurp@yahoo.it>
*/
$lang['menu'] = 'Gestione Utenti';
$lang['noauth'] = '(autenticazione non disponibile)';
@@ -64,7 +65,12 @@ $lang['add_ok'] = 'Utente aggiunto correttamente';
$lang['add_fail'] = 'Aggiunta utente fallita';
$lang['notify_ok'] = 'Email di notifica inviata';
$lang['notify_fail'] = 'L\'email di notifica non può essere inviata';
+$lang['import_success_count'] = 'Importazione utenti: %d utenti trovati, %d utenti importati con successo.';
+$lang['import_failure_count'] = 'Importazione utenti: %d falliti. Errori riportati qui sotto.';
+$lang['import_error_fields'] = 'Campi insufficienti, trovati %d, richiesti 4.';
+$lang['import_error_baduserid'] = 'User-id non trovato';
$lang['import_error_badname'] = 'Nome errato';
$lang['import_error_badmail'] = 'Indirizzo email errato';
+$lang['import_error_upload'] = 'Importazione fallita. Il file CSV non può essere caricato, o è vuoto.';
$lang['import_error_readfail'] = 'Importazione in errore. Impossibile leggere i file caricati.';
$lang['import_error_create'] = 'Impossibile creare l\'utente';
diff --git a/lib/plugins/usermanager/lang/ru/lang.php b/lib/plugins/usermanager/lang/ru/lang.php
index 83158df31..8bbfa639c 100644
--- a/lib/plugins/usermanager/lang/ru/lang.php
+++ b/lib/plugins/usermanager/lang/ru/lang.php
@@ -20,6 +20,7 @@
* @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua)
* @author Pavel <ivanovtsk@mail.ru>
* @author Aleksandr Selivanov <alexgearbox@yandex.ru>
+ * @author Igor Degraf <igordegraf@gmail.com>
*/
$lang['menu'] = 'Управление пользователями';
$lang['noauth'] = '(авторизация пользователей недоступна)';
@@ -77,3 +78,4 @@ $lang['import_error_upload'] = 'Импорт не удался. CSV-файл
$lang['import_error_readfail'] = 'Импорт не удался. Невозможно прочесть загруженный файл.';
$lang['import_error_create'] = 'Невозможно создать пользователя';
$lang['import_notify_fail'] = 'Оповещение не может быть отправлено импортированному пользователю %s по электронной почте %s.';
+$lang['import_downloadfailures'] = 'Скачать Ошибки в формате CSV для исправления';