diff options
-rw-r--r-- | _test/tests/lib/exe/js_js_compress.test.php | 60 | ||||
-rw-r--r-- | doku.php | 2 | ||||
-rw-r--r-- | inc/auth.php | 1 | ||||
-rw-r--r-- | inc/compatibility.php | 36 | ||||
-rw-r--r-- | inc/infoutils.php | 21 | ||||
-rw-r--r-- | inc/lang/hr/lang.php | 16 | ||||
-rw-r--r-- | inc/lang/ko/lang.php | 4 | ||||
-rw-r--r-- | inc/lang/no/lang.php | 2 | ||||
-rw-r--r-- | lib/exe/css.php | 3 | ||||
-rw-r--r-- | lib/exe/js.php | 34 | ||||
-rw-r--r-- | lib/plugins/auth.php | 2 | ||||
-rw-r--r-- | lib/plugins/authplain/_test/escaping.test.php | 43 | ||||
-rw-r--r-- | lib/plugins/authplain/auth.php | 34 | ||||
-rw-r--r-- | lib/plugins/extension/lang/hr/lang.php | 20 | ||||
-rw-r--r-- | lib/plugins/usermanager/lang/hr/lang.php | 4 |
15 files changed, 230 insertions, 52 deletions
diff --git a/_test/tests/lib/exe/js_js_compress.test.php b/_test/tests/lib/exe/js_js_compress.test.php index b1ae2a84f..78e089d89 100644 --- a/_test/tests/lib/exe/js_js_compress.test.php +++ b/_test/tests/lib/exe/js_js_compress.test.php @@ -145,6 +145,66 @@ EOF; $this->assertEquals($out, js_compress($text)); } + function test_plusplus1(){ + $text = 'a = 5 + ++b;'; + $this->assertEquals('a=5+ ++b;',js_compress($text)); + } + + function test_plusplus2(){ + $text = 'a = 5+ ++b;'; + $this->assertEquals('a=5+ ++b;',js_compress($text)); + } + + function test_plusplus3(){ + $text = 'a = 5++ + b;'; + $this->assertEquals('a=5++ +b;',js_compress($text)); + } + + function test_plusplus4(){ + $text = 'a = 5++ +b;'; + $this->assertEquals('a=5++ +b;',js_compress($text)); + } + + function test_minusminus1(){ + $text = 'a = 5 - --b;'; + $this->assertEquals('a=5- --b;',js_compress($text)); + } + + function test_minusminus2(){ + $text = 'a = 5- --b;'; + $this->assertEquals('a=5- --b;',js_compress($text)); + } + + function test_minusminus3(){ + $text = 'a = 5-- - b;'; + $this->assertEquals('a=5-- -b;',js_compress($text)); + } + + function test_minusminus4(){ + $text = 'a = 5-- -b;'; + $this->assertEquals('a=5-- -b;',js_compress($text)); + } + + function test_minusplus1(){ + $text = 'a = 5-- +b;'; + $this->assertEquals('a=5--+b;',js_compress($text)); + } + + function test_minusplus2(){ + $text = 'a = 5-- + b;'; + $this->assertEquals('a=5--+b;',js_compress($text)); + } + + function test_plusminus1(){ + $text = 'a = 5++ - b;'; + $this->assertEquals('a=5++-b;',js_compress($text)); + } + + function test_plusminus2(){ + $text = 'a = 5++ -b;'; + $this->assertEquals('a=5++-b;',js_compress($text)); + } + /** * Test the files provided with the original JsStrip */ @@ -9,7 +9,7 @@ */ // update message version -$updateVersion = 46; +$updateVersion = 46.1; // xdebug_start_profiling(); diff --git a/inc/auth.php b/inc/auth.php index e938830ef..4b1e6ce31 100644 --- a/inc/auth.php +++ b/inc/auth.php @@ -335,7 +335,6 @@ function auth_browseruid() { $ip = clientIP(true); $uid = ''; $uid .= $INPUT->server->str('HTTP_USER_AGENT'); - $uid .= $INPUT->server->str('HTTP_ACCEPT_ENCODING'); $uid .= $INPUT->server->str('HTTP_ACCEPT_CHARSET'); $uid .= substr($ip, 0, strpos($ip, '.')); $uid = strtolower($uid); diff --git a/inc/compatibility.php b/inc/compatibility.php index 2738c9bb1..cb865a2d7 100644 --- a/inc/compatibility.php +++ b/inc/compatibility.php @@ -41,12 +41,42 @@ if(!function_exists('gzopen') && function_exists('gzopen64')) { * * @link http://stackoverflow.com/questions/23417519/php-zlib-gzopen-not-exists * - * @param string $filename - * @param string $mode - * @param int $use_include_path + * @param string $filename + * @param string $mode + * @param int $use_include_path * @return mixed */ function gzopen($filename, $mode, $use_include_path = 0) { return gzopen64($filename, $mode, $use_include_path); } +} + +if(!function_exists('gzseek') && function_exists('gzseek64')) { + /** + * work around for PHP compiled against certain zlib versions #865 + * + * @link http://stackoverflow.com/questions/23417519/php-zlib-gzopen-not-exists + * + * @param resource $zp + * @param int $offset + * @param int $whence + * @return int + */ + function gzseek($zp, $offset, $whence = SEEK_SET) { + return gzseek64($zp, $offset, $whence); + } +} + +if(!function_exists('gztell') && function_exists('gztell64')) { + /** + * work around for PHP compiled against certain zlib versions #865 + * + * @link http://stackoverflow.com/questions/23417519/php-zlib-gzopen-not-exists + * + * @param resource $zp + * @return int + */ + function gztell($zp) { + return gztell64($zp); + } }
\ No newline at end of file diff --git a/inc/infoutils.php b/inc/infoutils.php index f9ba11560..8fe344093 100644 --- a/inc/infoutils.php +++ b/inc/infoutils.php @@ -20,27 +20,28 @@ function checkUpdateMessages(){ if(!$conf['updatecheck']) return; if($conf['useacl'] && !$INFO['ismanager']) return; - $cf = $conf['cachedir'].'/messages.txt'; + $cf = getCacheName($updateVersion, '.updmsg'); $lm = @filemtime($cf); // check if new messages needs to be fetched if($lm < time()-(60*60*24) || $lm < @filemtime(DOKU_INC.DOKU_SCRIPT)){ @touch($cf); - dbglog("checkUpdateMessages(): downloading messages.txt"); + dbglog("checkUpdateMessages(): downloading messages to ".$cf); $http = new DokuHTTPClient(); $http->timeout = 12; - $data = $http->get(DOKU_MESSAGEURL.$updateVersion); - 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); + $resp = $http->get(DOKU_MESSAGEURL.$updateVersion); + if(is_string($resp) && ($resp == "" || substr(trim($resp), -1) == '%')) { + // basic sanity check that this is either an empty string response (ie "no messages") + // or it looks like one of our messages, not WiFi login or other interposed response + io_saveFile($cf,$resp); + } else { + dbglog("checkUpdateMessages(): unexpected HTTP response received"); } }else{ - dbglog("checkUpdateMessages(): messages.txt up to date"); - $data = io_readFile($cf); + dbglog("checkUpdateMessages(): messages up to date"); } + $data = io_readFile($cf); // show messages through the usual message mechanism $msgs = explode("\n%\n",$data); foreach($msgs as $msg){ diff --git a/inc/lang/hr/lang.php b/inc/lang/hr/lang.php index d7c20b413..c3cf6d822 100644 --- a/inc/lang/hr/lang.php +++ b/inc/lang/hr/lang.php @@ -62,7 +62,7 @@ $lang['oldpass'] = 'Potvrdi trenutnu lozinku'; $lang['passchk'] = 'još jednom'; $lang['remember'] = 'Zapamti me'; $lang['fullname'] = 'Ime i prezime'; -$lang['email'] = 'Email'; +$lang['email'] = 'E-pošta'; $lang['profile'] = 'Korisnički profil'; $lang['badlogin'] = 'Ne ispravno korisničko ime ili lozinka.'; $lang['badpassconfirm'] = 'Nažalost, lozinka nije ispravna'; @@ -100,8 +100,8 @@ $lang['license'] = 'Osim na mjestima gdje je naznačeno drugačije $lang['licenseok'] = 'Pažnja: promjenom ovog dokumenta pristajete licencirati sadržaj sljedećom licencom: '; $lang['searchmedia'] = 'Traži naziv datoteke:'; $lang['searchmedia_in'] = 'Traži u %s'; -$lang['txt_upload'] = 'Odaberite datoteku za postavljanje:'; -$lang['txt_filename'] = 'Postaviti kao (nije obavezno):'; +$lang['txt_upload'] = 'Odaberite datoteku za učitavanje:'; +$lang['txt_filename'] = 'Učitaj kao (nije obavezno):'; $lang['txt_overwrt'] = 'Prepiši postojeću datoteku'; $lang['maxuploadsize'] = 'Moguće je učitati maks. %s po datoteci.'; $lang['lockedby'] = 'Trenutno zaključao:'; @@ -156,7 +156,7 @@ $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['uploadbadcontent'] = 'Učitani sadržaj ne odgovara ekstenziji %s datoteke.'; $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)'; @@ -191,7 +191,7 @@ $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['breadcrumb'] = 'Zadnje viđeno:'; $lang['youarehere'] = 'Vi ste ovdje:'; $lang['lastmod'] = 'Zadnja izmjena:'; $lang['by'] = 'od'; @@ -212,7 +212,7 @@ $lang['mail_newpage'] = 'stranica dodana:'; $lang['mail_changed'] = 'stranica izmjenjena:'; $lang['mail_subscribe_list'] = 'stranice promijenjene u imenskom prostoru:'; $lang['mail_new_user'] = 'novi korisnik:'; -$lang['mail_upload'] = 'datoteka postavljena:'; +$lang['mail_upload'] = 'datoteka učitana:'; $lang['changes_type'] = 'Vidi promjene od'; $lang['pages_changes'] = 'Stranice'; $lang['media_changes'] = 'Datoteke'; @@ -277,7 +277,7 @@ $lang['subscr_style_list'] = 'listu promijenjenih stranica od zadnje primlje $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'; -$lang['i_installer'] = 'DokuWiki instalacija'; +$lang['i_installer'] = 'DokuWiki postavljanje'; $lang['i_wikiname'] = 'Naziv Wikija'; $lang['i_enableacl'] = 'Omogući ACL (preporučeno)'; $lang['i_superuser'] = 'Superkorisnik'; @@ -340,3 +340,5 @@ $lang['currentns'] = 'Tekući imenički prostor'; $lang['searchresult'] = 'Rezultati pretraživanja'; $lang['plainhtml'] = 'Čisti HTML'; $lang['wikimarkup'] = 'Wiki kod'; +$lang['page_nonexist_rev'] = 'Stranica ne postoji na %s. Ona je naknadno napravljena na <a href="%s">%s</a>.'; +$lang['unable_to_parse_date'] = 'Ne mogu analizirati parametar "%s".'; diff --git a/inc/lang/ko/lang.php b/inc/lang/ko/lang.php index 3cedf021a..61bb58350 100644 --- a/inc/lang/ko/lang.php +++ b/inc/lang/ko/lang.php @@ -74,7 +74,7 @@ $lang['badpassconfirm'] = '죄송하지만 비밀번호가 잘못되었 $lang['minoredit'] = '사소한 바뀜'; $lang['draftdate'] = '초안 자동 저장 시간'; $lang['nosecedit'] = '한 동안 문서가 바뀌었으며, 문단 정보가 오래되어 문서 전체를 대신 열었습니다.'; -$lang['searchcreatepage'] = "만약 원하는 문서를 찾지 못했다면, ''문서 만들기''나 ''문서 편집''을 사용해 검색어와 같은 이름의 문서를 만들거나 편집할 수 있습니다."; +$lang['searchcreatepage'] = '만약 원하는 문서를 찾지 못했다면, \'\'문서 만들기\'\'나 \'\'문서 편집\'\'을 사용해 검색어와 같은 이름의 문서를 만들거나 편집할 수 있습니다.'; $lang['regmissing'] = '죄송하지만 모든 필드를 채워야 합니다.'; $lang['reguexists'] = '죄송하지만 같은 이름을 사용하는 사용자가 있습니다.'; $lang['regsuccess'] = '사용자를 만들었으며 비밀번호는 이메일로 보냈습니다.'; @@ -344,3 +344,5 @@ $lang['currentns'] = '현재 이름공간'; $lang['searchresult'] = '검색 결과'; $lang['plainhtml'] = '일반 HTML'; $lang['wikimarkup'] = '위키 문법'; +$lang['page_nonexist_rev'] = '문서가 %s에 존재하지 않았습니다. 그 뒤로 <a href="%s">%s</a>에 만들어졌습니다.'; +$lang['unable_to_parse_date'] = '"%s" 변수에서 구문 분석할 수 없습니다.'; diff --git a/inc/lang/no/lang.php b/inc/lang/no/lang.php index 5e508617e..aeea982f2 100644 --- a/inc/lang/no/lang.php +++ b/inc/lang/no/lang.php @@ -116,7 +116,7 @@ $lang['searchmedia_in'] = 'Søk i %s'; $lang['txt_upload'] = 'Velg fil som skal lastes opp:'; $lang['txt_filename'] = 'Skriv inn wikinavn (alternativt):'; $lang['txt_overwrt'] = 'Overskriv eksisterende fil'; -$lang['maxuploadsize'] = 'Opplast maks % per fil.'; +$lang['maxuploadsize'] = 'Opplast maks %s per fil.'; $lang['lockedby'] = 'Låst av:'; $lang['lockexpire'] = 'Låsingen utløper:'; $lang['js']['willexpire'] = 'Din redigeringslås for dette dokumentet kommer snart til å utløpe.\nFor å unngå versjonskonflikter bør du forhåndsvise dokumentet ditt for å forlenge redigeringslåsen.'; diff --git a/lib/exe/css.php b/lib/exe/css.php index 6c1d60751..f7235fd4e 100644 --- a/lib/exe/css.php +++ b/lib/exe/css.php @@ -166,8 +166,11 @@ function css_out(){ * @return string */ function css_parseless($css) { + global $conf; + $less = new lessc(); $less->importDir[] = DOKU_INC; + $less->setPreserveComments(!$conf['compress']); if (defined('DOKU_UNITTEST')){ $less->importDir[] = TMP_DIR; diff --git a/lib/exe/js.php b/lib/exe/js.php index bec12ef7a..2ab78dfc3 100644 --- a/lib/exe/js.php +++ b/lib/exe/js.php @@ -289,6 +289,10 @@ function js_compress($s){ // items that don't need spaces next to them $chars = "^&|!+\-*\/%=\?:;,{}()<>% \t\n\r'\"[]"; + // items which need a space if the sign before and after whitespace is equal. + // E.g. '+ ++' may not be compressed to '+++' --> syntax error. + $ops = "+-"; + $regex_starters = array("(", "=", "[", "," , ":", "!"); $whitespaces_chars = array(" ", "\t", "\n", "\r", "\0", "\x0B"); @@ -389,19 +393,27 @@ function js_compress($s){ // whitespaces if( $ch == ' ' || $ch == "\r" || $ch == "\n" || $ch == "\t" ){ - // leading spaces - if($i+1 < $slen && (strpos($chars,$s[$i+1]) !== false)){ - $i = $i + 1; - continue; - } - // trailing spaces - // if this ch is space AND the last char processed - // is special, then skip the space $lch = substr($result,-1); - if($lch && (strpos($chars,$lch) !== false)){ - $i = $i + 1; - continue; + + // Only consider deleting whitespace if the signs before and after + // are not equal and are not an operator which may not follow itself. + if ((!$lch || $s[$i+1] == ' ') + || $lch != $s[$i+1] + || strpos($ops,$s[$i+1]) === false) { + // leading spaces + if($i+1 < $slen && (strpos($chars,$s[$i+1]) !== false)){ + $i = $i + 1; + continue; + } + // trailing spaces + // if this ch is space AND the last char processed + // is special, then skip the space + if($lch && (strpos($chars,$lch) !== false)){ + $i = $i + 1; + continue; + } } + // else after all of this convert the "whitespace" to // a single space. It will get appended below $ch = ' '; diff --git a/lib/plugins/auth.php b/lib/plugins/auth.php index b38b591a3..02e0613dd 100644 --- a/lib/plugins/auth.php +++ b/lib/plugins/auth.php @@ -129,7 +129,7 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { $eventdata = array('type' => $type, 'params' => $params, 'modification_result' => null); $evt = new Doku_Event('AUTH_USER_CHANGE', $eventdata); if($evt->advise_before(true)) { - $result = call_user_func_array(array($this, $validTypes[$type]), $params); + $result = call_user_func_array(array($this, $validTypes[$type]), $evt->data['params']); $evt->data['modification_result'] = $result; } $evt->advise_after(); diff --git a/lib/plugins/authplain/_test/escaping.test.php b/lib/plugins/authplain/_test/escaping.test.php index cd5294157..cbfbbc587 100644 --- a/lib/plugins/authplain/_test/escaping.test.php +++ b/lib/plugins/authplain/_test/escaping.test.php @@ -13,12 +13,12 @@ */ class helper_plugin_authplain_escaping_test extends DokuWikiTest { - protected $pluginsEnabled = array('authplain'); + protected $pluginsEnabled = array('authplainharness'); protected $auth; protected function reloadUsers() { /* auth caches data loaded from file, but recreated object forces reload */ - $this->auth = new auth_plugin_authplain(); + $this->auth = new auth_plugin_authplainharness(); } function setUp() { @@ -76,7 +76,44 @@ class helper_plugin_authplain_escaping_test extends DokuWikiTest { $this->assertEquals($saved['name'], $user['name']); $this->assertTrue($this->auth->checkPass("testuser", $user['pass'])); } + + // really only required for developers to ensure this plugin will + // work with systems running on PCRE 6.6 and lower. + public function testLineSplit(){ + $this->auth->setPregsplit_safe(false); + + $names = array( + 'plain', + 'ut-fठ8', + 'colon:', + 'backslash\\', + 'alltogether\\ठ:' + ); + $userpass = 'user:password_hash:'; + $other_user_data = ':email@address:group1,group2'; + + foreach ($names as $testname) { + $escaped = str_replace(array('\\',':'),array('\\\\','\\:'),$testname); // escape : & \ + $test_line = $userpass.$escaped.$other_user_data; + $result = $this->auth->splitUserData($test_line); + + $this->assertEquals($escaped, $result[2]); + } + } } -?>
\ No newline at end of file +class auth_plugin_authplainharness extends auth_plugin_authplain { + + public function setPregsplit_safe($bool) { + $this->_pregsplit_safe = $bool; + } + + public function getPregsplit_safe(){ + return $this->_pregsplit_safe; + } + + public function splitUserData($line){ + return $this->_splitUserData($line); + } +}
\ No newline at end of file diff --git a/lib/plugins/authplain/auth.php b/lib/plugins/authplain/auth.php index b3ca988b9..3d303597c 100644 --- a/lib/plugins/authplain/auth.php +++ b/lib/plugins/authplain/auth.php @@ -17,6 +17,9 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin { /** @var array filter pattern */ protected $_pattern = array(); + /** @var bool safe version of preg_split */ + protected $_pregsplit_safe = false; + /** * Constructor * @@ -44,6 +47,8 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin { $this->cando['getUsers'] = true; $this->cando['getUserCount'] = true; } + + $this->_pregsplit_safe = version_compare(PCRE_VERSION,'6.7','>='); } /** @@ -329,7 +334,7 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin { if(empty($line)) continue; /* NB: preg_split can be deprecated/replaced with str_getcsv once dokuwiki is min php 5.3 */ - $row = preg_split('/(?<![^\\\\]\\\\)\:/', $line, 5); // allow for : escaped as \: + $row = $this->_splitUserData($line); $row = str_replace('\\:', ':', $row); $row = str_replace('\\\\', '\\', $row); @@ -342,6 +347,33 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin { } } + protected function _splitUserData($line){ + // due to a bug in PCRE 6.6, preg_split will fail with the regex we use here + // refer github issues 877 & 885 + if ($this->_pregsplit_safe){ + return preg_split('/(?<![^\\\\]\\\\)\:/', $line, 5); // allow for : escaped as \: + } + + $row = array(); + $piece = ''; + $len = strlen($line); + for($i=0; $i<$len; $i++){ + if ($line[$i]=='\\'){ + $piece .= $line[$i]; + $i++; + if ($i>=$len) break; + } else if ($line[$i]==':'){ + $row[] = $piece; + $piece = ''; + continue; + } + $piece .= $line[$i]; + } + $row[] = $piece; + + return $row; + } + /** * return true if $user + $info match $filter criteria, false otherwise * diff --git a/lib/plugins/extension/lang/hr/lang.php b/lib/plugins/extension/lang/hr/lang.php index 4905fe864..f43defcb1 100644 --- a/lib/plugins/extension/lang/hr/lang.php +++ b/lib/plugins/extension/lang/hr/lang.php @@ -6,24 +6,24 @@ * @author Davor Turkalj <turki.bsc@gmail.com> */ $lang['menu'] = 'Upravitelj dodataka'; -$lang['tab_plugins'] = 'Instalirani dodatci'; -$lang['tab_templates'] = 'Instalirani predlošci'; -$lang['tab_search'] = 'Potraži i instaliraj'; -$lang['tab_install'] = 'Ručno instaliranje'; +$lang['tab_plugins'] = 'Ugrađeni dodatci'; +$lang['tab_templates'] = 'Ugrađeni predlošci'; +$lang['tab_search'] = 'Potraži i ugradi'; +$lang['tab_install'] = 'Ručna ugradnja'; $lang['notimplemented'] = 'Ova mogućnost još nije napravljena'; -$lang['notinstalled'] = 'Dodatak nije instaliran'; +$lang['notinstalled'] = 'Dodatak nije ugrađen'; $lang['alreadyenabled'] = 'Ovaj dodatak je već omogućen'; $lang['alreadydisabled'] = 'Ovaj dodatak je već onemogućen'; $lang['pluginlistsaveerror'] = 'Dogodila se greška pri snimanju liste dodataka'; $lang['unknownauthor'] = 'Nepoznat autor'; $lang['unknownversion'] = 'Nepoznata inačica'; $lang['btn_info'] = 'Prikaži više informacija'; -$lang['btn_update'] = 'Dopuni'; +$lang['btn_update'] = 'Dogradi'; $lang['btn_uninstall'] = 'Ukloni'; $lang['btn_enable'] = 'Omogući'; $lang['btn_disable'] = 'Onemogući'; -$lang['btn_install'] = 'Postavi'; -$lang['btn_reinstall'] = 'Ponovno postavi'; +$lang['btn_install'] = 'Ugradi'; +$lang['btn_reinstall'] = 'Ponovno ugradi'; $lang['js']['reallydel'] = 'Zaista ukloniti ovo proširenje?'; $lang['search_for'] = 'Pretraži proširenja'; $lang['search'] = 'Pretraži'; @@ -34,11 +34,11 @@ $lang['homepage_link'] = 'Upute'; $lang['bugs_features'] = 'Greške'; $lang['tags'] = 'Oznake:'; $lang['author_hint'] = 'Potraži dodatke od ovog autora'; -$lang['installed'] = 'Postavljeno:'; +$lang['installed'] = 'Ugrađeno:'; $lang['downloadurl'] = 'URL adresa preuzimanja:'; $lang['repository'] = 'Repozitorij:'; $lang['unknown'] = '<em>nepoznat</em>'; -$lang['installed_version'] = 'Postavljena inačica:'; +$lang['installed_version'] = 'Ugrađena inačica:'; $lang['install_date'] = 'Vaše zadnje osvježavanje:'; $lang['available_version'] = 'Dostupna inačica'; $lang['compatible'] = 'Kompatibilan s:'; diff --git a/lib/plugins/usermanager/lang/hr/lang.php b/lib/plugins/usermanager/lang/hr/lang.php index 80613ed6f..a71afb60a 100644 --- a/lib/plugins/usermanager/lang/hr/lang.php +++ b/lib/plugins/usermanager/lang/hr/lang.php @@ -33,7 +33,7 @@ $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_ok'] = '%d korisnika obrisano'; $lang['delete_fail'] = '%d neuspjelih brisanja.'; $lang['update_ok'] = 'Korisnik uspješno izmijenjen'; $lang['update_fail'] = 'Neuspjela izmjena korisnika'; @@ -49,7 +49,7 @@ $lang['note_group'] = 'Novi korisnik biti će dodijeljen u podrazumij $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_ok'] = 'Poslana obavijest korisniku'; $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'; |