From 0dbf1d02600ef4075ceffe9c62c1ed32cc24592f Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Mon, 24 Dec 2012 13:45:52 -0500 Subject: [PATCH 001/719] Show status icons for mount points in external storage UI --- apps/files_external/ajax/addMountPoint.php | 5 +- apps/files_external/css/settings.css | 5 +- apps/files_external/img/error.png | Bin 0 -> 533 bytes apps/files_external/img/success.png | Bin 0 -> 545 bytes apps/files_external/img/waiting.png | Bin 0 -> 512 bytes apps/files_external/js/settings.js | 21 +++++- apps/files_external/lib/amazons3.php | 14 +++- apps/files_external/lib/config.php | 37 +++++++-- apps/files_external/lib/dropbox.php | 5 +- apps/files_external/lib/ftp.php | 41 ++++++---- apps/files_external/lib/google.php | 4 + apps/files_external/lib/smb.php | 50 +++++++------ apps/files_external/lib/swift.php | 49 ++++++------ apps/files_external/lib/webdav.php | 83 ++++++++++++--------- apps/files_external/templates/settings.php | 6 ++ 15 files changed, 208 insertions(+), 112 deletions(-) create mode 100644 apps/files_external/img/error.png create mode 100644 apps/files_external/img/success.png create mode 100644 apps/files_external/img/waiting.png diff --git a/apps/files_external/ajax/addMountPoint.php b/apps/files_external/ajax/addMountPoint.php index 4cd8871b31..fed2ddfcf3 100644 --- a/apps/files_external/ajax/addMountPoint.php +++ b/apps/files_external/ajax/addMountPoint.php @@ -10,9 +10,10 @@ if ($_POST['isPersonal'] == 'true') { OCP\JSON::checkAdminUser(); $isPersonal = false; } -OC_Mount_Config::addMountPoint($_POST['mountPoint'], +$status = OC_Mount_Config::addMountPoint($_POST['mountPoint'], $_POST['class'], $_POST['classOptions'], $_POST['mountType'], $_POST['applicable'], - $isPersonal); \ No newline at end of file + $isPersonal); +OCP\JSON::success(array('data' => array('message' => $status))); \ No newline at end of file diff --git a/apps/files_external/css/settings.css b/apps/files_external/css/settings.css index ca4b1c3ba8..94b453793b 100644 --- a/apps/files_external/css/settings.css +++ b/apps/files_external/css/settings.css @@ -1,4 +1,7 @@ -.error { color: #FF3B3B; } +td.status>span { display:inline-block; height:16px; width:16px; } +span.success { background-image: url('../img/success.png'); background-repeat:no-repeat; } +span.error { background-image: url('../img/error.png'); background-repeat:no-repeat; } +span.waiting { background-image: url('../img/waiting.png'); background-repeat:no-repeat; } td.mountPoint, td.backend { width:10em; } td.remove>img { visibility:hidden; padding-top:0.8em; } tr:hover>td.remove>img { visibility:visible; cursor:pointer; } diff --git a/apps/files_external/img/error.png b/apps/files_external/img/error.png new file mode 100644 index 0000000000000000000000000000000000000000..e8cf45e7a41e358da5d573dc48edf966b9d8d3cb GIT binary patch literal 533 zcmV+w0_y#VP)WFU8GbZ8()Nlj2>E@cM*00DVPL_t(I%XO2zP9s4O zguh~X5z9j$Ik*!Eu?ZcT0EtI%c=tr!kViP_BtS$CaeUzg7B7Jj7!|?H{uwjLtV-3> zRn@&>@BFDwr{D!*hBZL|-hfuX?akZEddSzfxLzWDb$|;+?nzd2^ZxSt%L9Lp>wCjo z7RIR5cLWLBC<71IZ`&(?BY?Z(dKqS3StOYXNP-X~AP`{_Kr)0izpLscfF7%Q3VJGf z4;&5s?4Qd>umES9`pRhSHdlY8_f9u^WUw@(B~!+tc1@Q1y$m+`aROHyyL9&FY2k_$#&k$!-Ejh_DEk1(FGggfnJm+z@tivD>aYVgKXg9y8ycq@@yO zj~gC-e!TXp4De(3dX=EbtDDs%pekKkJfLZd55>!KI++RWFU8GbZ8()Nlj2>E@cM*00D(bL_t(I%Vm>6irYXC zMc-GKURaaHl z|G!$?Jl#{fHSB>Muqo~f_yios$A9NKUbS)e)E>a!C1KY)u0x0M@$JXE0^QH{#imD# zvraQ0=N0ifetUZWXaKtB_CTUnfRbLN5O!H_ zxDv+Zb11Z5S`|z+EUcWIojJx*Nfy99NbGK@Dk&8MTF7!`i(L@f$gV<+BxKKMTz+KN z)e&rhw6v)i-3sYyZ~hvL2|^d((}aJKQFFVugR?-@rBQHVk|~O?&00o6S-!}&lBT^= zqokuk5JCwQLXiU$MfU_W!b!#FDfZZ0zm8`TLq0X1L@C6Skc?VT^3p+Qxc1|D2KeFE z-HV`Ksa3|eqNk9m*X#Ybj55IWetaNlAj;^*GPWFU8GbZ8()Nlj2>E@cM*00Cr4L_t(I%Wab}PQySD zMc?=OBI&q6DAPm=ir@@s5Vr7fKnVhgoB>b>3PnmdMUL_*c5Saswz6mc{Mq^QM~u$q z;bDqdA!fiNg-^f{*j7#Ro8vV~UISGZ@E8$cRnye}2%a7vKLrb?s4R>JnFbU?`@81; zsv~&WJgqHP@(A2L!5F2lNMd<&Th+B*U!JF!p9pZ4GAu2?%6f`Smt_&k754co1hHC2 zuMB9jDnk)wWR>%D+MbovuzKZUU{;0@CXsniG{cPKwy`=fCuI=|IP>yea?!V#E~J)= zGK6pfE(Vp{&LD!-GCR&Cjv*SX3?UqCE+jg^`j@EZ8+js~V_Af-1*-nuS-+{aoJ)`o zY%73|xA!%;iYRscJGE;IrT^U0*EctHH@V$z7p?5^AamEdz1c69%d3CO^!2r0+f*dm z'); $(tr).find('.backend').data('class', backendClass); var configurations = $(this).data('configurations'); var td = $(tr).find('td.configuration'); diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php index 235ade06db..c1b2e889bb 100644 --- a/apps/files_external/lib/amazons3.php +++ b/apps/files_external/lib/amazons3.php @@ -30,11 +30,19 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common { private static $tempFiles = array(); - // TODO options: storage class, encryption server side, encrypt before upload? + // TODO Update to new AWS SDK public function __construct($params) { - $this->s3 = new AmazonS3(array('key' => $params['key'], 'secret' => $params['secret'])); - $this->bucket = $params['bucket']; + if (isset($params['key']) && isset($params['secret']) && isset($params['bucket'])) { + $this->s3 = new AmazonS3(array('key' => $params['key'], 'secret' => $params['secret'])); + $this->bucket = $params['bucket']; + $test = $this->s3->get_canonical_user_id(); + if (!isset($test['id']) || $test['id'] == '') { + throw new Exception(); + } + } else { + throw new Exception(); + } } private function getObject($path) { diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 1be544fbc0..99d31c5aa2 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -131,7 +131,9 @@ class OC_Mount_Config { 'class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options'], - 'applicable' => array('groups' => array($group), 'users' => array())); + 'applicable' => array('groups' => array($group), 'users' => array()), + 'status' => self::getBackendStatus($mount['class'], $mount['options']) + ); } } } @@ -146,10 +148,13 @@ class OC_Mount_Config { $system[$mountPoint]['applicable']['users'] = array_merge($system[$mountPoint]['applicable']['users'], array($user)); } else { - $system[$mountPoint] = array('class' => $mount['class'], + $system[$mountPoint] = array( + 'class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options'], - 'applicable' => array('groups' => array(), 'users' => array($user))); + 'applicable' => array('groups' => array(), 'users' => array($user)), + 'status' => self::getBackendStatus($mount['class'], $mount['options']) + ); } } } @@ -170,14 +175,32 @@ class OC_Mount_Config { if (isset($mountPoints[self::MOUNT_TYPE_USER][$uid])) { foreach ($mountPoints[self::MOUNT_TYPE_USER][$uid] as $mountPoint => $mount) { // Remove '/uid/files/' from mount point - $personal[substr($mountPoint, strlen($uid) + 8)] = array('class' => $mount['class'], - 'backend' => $backends[$mount['class']]['backend'], - 'configuration' => $mount['options']); + $personal[substr($mountPoint, strlen($uid) + 8)] = array( + 'class' => $mount['class'], + 'backend' => $backends[$mount['class']]['backend'], + 'configuration' => $mount['options'], + 'status' => self::getBackendStatus($mount['class'], $mount['options']) + ); } } return $personal; } + private static function getBackendStatus($class, $options) { + foreach ($options as &$option) { + $option = str_replace('$user', OCP\User::getUser(), $option); + } + if (class_exists($class)) { + try { + new $class($options); + return true; + } catch (Exception $exception) { + return false; + } + } + return false; + } + /** * Add directory for mount point to the filesystem * @param OC_Fileview instance $view @@ -259,7 +282,7 @@ class OC_Mount_Config { $mountPoints[$mountType] = $mount; } self::writeData($isPersonal, $mountPoints); - return true; + return self::getBackendStatus($class, $classOptions); } /** diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php index 33ca14cab1..a4f3f67834 100755 --- a/apps/files_external/lib/dropbox.php +++ b/apps/files_external/lib/dropbox.php @@ -41,7 +41,10 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { $oauth = new Dropbox_OAuth_Curl($params['app_key'], $params['app_secret']); $oauth->setToken($params['token'], $params['token_secret']); $this->dropbox = new Dropbox_API($oauth, 'dropbox'); - $this->mkdir(''); + $test = $this->stat(''); + if (!$test) { + throw new Exception('Creating OC_Filestorage_Dropbox storage failed'); + } } else { throw new Exception('Creating OC_Filestorage_Dropbox storage failed'); } diff --git a/apps/files_external/lib/ftp.php b/apps/files_external/lib/ftp.php index e796ae446b..ac487156c1 100644 --- a/apps/files_external/lib/ftp.php +++ b/apps/files_external/lib/ftp.php @@ -16,26 +16,35 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{ private static $tempFiles=array(); public function __construct($params) { - $this->host=$params['host']; - $this->user=$params['user']; - $this->password=$params['password']; - if (isset($params['secure'])) { - if (is_string($params['secure'])) { - $this->secure = ($params['secure'] === 'true'); + if (isset($params['host']) && isset($params['user']) && isset($params['password'])) { + $this->host=$params['host']; + $this->user=$params['user']; + $this->password=$params['password']; + if (isset($params['secure'])) { + if (is_string($params['secure'])) { + $this->secure = ($params['secure'] === 'true'); + } else { + $this->secure = (bool)$params['secure']; + } } else { - $this->secure = (bool)$params['secure']; + $this->secure = false; + } + $this->root=isset($params['root'])?$params['root']:'/'; + if ( ! $this->root || $this->root[0]!='/') { + $this->root='/'.$this->root; + } + $test = $this->stat(''); + if (!$test) { + throw new Exception(); + } + //create the root folder if necesary + if ( ! $this->is_dir('')) { + $this->mkdir(''); } } else { - $this->secure = false; - } - $this->root=isset($params['root'])?$params['root']:'/'; - if ( ! $this->root || $this->root[0]!='/') { - $this->root='/'.$this->root; - } - //create the root folder if necesary - if ( ! $this->is_dir('')) { - $this->mkdir(''); + throw new Exception(); } + } /** diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php index c836a5a07c..19772d4d37 100644 --- a/apps/files_external/lib/google.php +++ b/apps/files_external/lib/google.php @@ -42,6 +42,10 @@ class OC_Filestorage_Google extends OC_Filestorage_Common { $this->oauth_token = new OAuthToken($params['token'], $params['token_secret']); $this->sig_method = new OAuthSignatureMethod_HMAC_SHA1(); $this->entries = array(); + $test = $this->free_space(''); + if (!$test) { + throw new Exception(); + } } else { throw new Exception('Creating OC_Filestorage_Google storage failed'); } diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php index 071a9cd5f9..97454b4601 100644 --- a/apps/files_external/lib/smb.php +++ b/apps/files_external/lib/smb.php @@ -16,28 +16,36 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{ private $share; public function __construct($params) { - $this->host=$params['host']; - $this->user=$params['user']; - $this->password=$params['password']; - $this->share=$params['share']; - $this->root=isset($params['root'])?$params['root']:'/'; - if ( ! $this->root || $this->root[0]!='/') { - $this->root='/'.$this->root; - } - if (substr($this->root, -1, 1)!='/') { - $this->root.='/'; - } - if ( ! $this->share || $this->share[0]!='/') { - $this->share='/'.$this->share; - } - if (substr($this->share, -1, 1)=='/') { - $this->share=substr($this->share, 0, -1); - } - - //create the root folder if necesary - if ( ! $this->is_dir('')) { - $this->mkdir(''); + if (isset($params['host']) && isset($params['user']) && isset($params['password']) && isset($params['share'])) { + $this->host=$params['host']; + $this->user=$params['user']; + $this->password=$params['password']; + $this->share=$params['share']; + $this->root=isset($params['root'])?$params['root']:'/'; + if ( ! $this->root || $this->root[0]!='/') { + $this->root='/'.$this->root; + } + if (substr($this->root, -1, 1)!='/') { + $this->root.='/'; + } + if ( ! $this->share || $this->share[0]!='/') { + $this->share='/'.$this->share; + } + if (substr($this->share, -1, 1)=='/') { + $this->share=substr($this->share, 0, -1); + } + $test = $this->stat(''); + if (!$test) { + throw new Exception(); + } + //create the root folder if necesary + if ( ! $this->is_dir('')) { + $this->mkdir(''); + } + } else { + throw new Exception(); } + } public function constructUrl($path) { diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php index a071dfdbb0..e2add2c987 100644 --- a/apps/files_external/lib/swift.php +++ b/apps/files_external/lib/swift.php @@ -267,32 +267,37 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } public function __construct($params) { - $this->token=$params['token']; - $this->host=$params['host']; - $this->user=$params['user']; - $this->root=isset($params['root'])?$params['root']:'/'; - if (isset($params['secure'])) { - if (is_string($params['secure'])) { - $this->secure = ($params['secure'] === 'true'); + if (isset($params['token']) && isset($params['host']) && isset($params['user'])) { + $this->token=$params['token']; + $this->host=$params['host']; + $this->user=$params['user']; + $this->root=isset($params['root'])?$params['root']:'/'; + if (isset($params['secure'])) { + if (is_string($params['secure'])) { + $this->secure = ($params['secure'] === 'true'); + } else { + $this->secure = (bool)$params['secure']; + } } else { - $this->secure = (bool)$params['secure']; + $this->secure = false; + } + if ( ! $this->root || $this->root[0]!='/') { + $this->root='/'.$this->root; + } + $this->auth = new CF_Authentication($this->user, $this->token, null, $this->host); + $this->auth->authenticate(); + + $this->conn = new CF_Connection($this->auth); + + if ( ! $this->containerExists('/')) { + $this->rootContainer=$this->createContainer('/'); + } else { + $this->rootContainer=$this->getContainer('/'); } } else { - $this->secure = false; - } - if ( ! $this->root || $this->root[0]!='/') { - $this->root='/'.$this->root; - } - $this->auth = new CF_Authentication($this->user, $this->token, null, $this->host); - $this->auth->authenticate(); - - $this->conn = new CF_Connection($this->auth); - - if ( ! $this->containerExists('/')) { - $this->rootContainer=$this->createContainer('/'); - } else { - $this->rootContainer=$this->getContainer('/'); + throw new Exception(); } + } diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php index 68aca228bc..cfe073a1f1 100644 --- a/apps/files_external/lib/webdav.php +++ b/apps/files_external/lib/webdav.php @@ -20,47 +20,56 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ private static $tempFiles=array(); public function __construct($params) { - $host = $params['host']; - //remove leading http[s], will be generated in createBaseUri() - if (substr($host, 0, 8) == "https://") $host = substr($host, 8); - else if (substr($host, 0, 7) == "http://") $host = substr($host, 7); - $this->host=$host; - $this->user=$params['user']; - $this->password=$params['password']; - if (isset($params['secure'])) { - if (is_string($params['secure'])) { - $this->secure = ($params['secure'] === 'true'); + if (isset($params['host']) && isset($params['user']) && isset($params['password'])) { + $host = $params['host']; + //remove leading http[s], will be generated in createBaseUri() + if (substr($host, 0, 8) == "https://") $host = substr($host, 8); + else if (substr($host, 0, 7) == "http://") $host = substr($host, 7); + $this->host=$host; + $this->user=$params['user']; + $this->password=$params['password']; + if (isset($params['secure'])) { + if (is_string($params['secure'])) { + $this->secure = ($params['secure'] === 'true'); + } else { + $this->secure = (bool)$params['secure']; + } } else { - $this->secure = (bool)$params['secure']; + $this->secure = false; } + $this->root=isset($params['root'])?$params['root']:'/'; + if ( ! $this->root || $this->root[0]!='/') { + $this->root='/'.$this->root; + } + if (substr($this->root, -1, 1)!='/') { + $this->root.='/'; + } + + $settings = array( + 'baseUri' => $this->createBaseUri(), + 'userName' => $this->user, + 'password' => $this->password, + ); + + $this->client = new OC_Connector_Sabre_Client($settings); + + $caview = \OCP\Files::getStorage('files_external'); + if ($caview) { + $certPath=\OCP\Config::getSystemValue('datadirectory').$caview->getAbsolutePath("").'rootcerts.crt'; + if (file_exists($certPath)) { + $this->client->addTrustedCertificates($certPath); + } + } + $test = $this->stat(''); + if (!$test) { + throw new Exception(); + } + //create the root folder if necesary + $this->mkdir(''); } else { - $this->secure = false; + throw new Exception(); } - $this->root=isset($params['root'])?$params['root']:'/'; - if ( ! $this->root || $this->root[0]!='/') { - $this->root='/'.$this->root; - } - if (substr($this->root, -1, 1)!='/') { - $this->root.='/'; - } - - $settings = array( - 'baseUri' => $this->createBaseUri(), - 'userName' => $this->user, - 'password' => $this->password, - ); - - $this->client = new OC_Connector_Sabre_Client($settings); - - $caview = \OCP\Files::getStorage('files_external'); - if ($caview) { - $certPath=\OCP\Config::getSystemValue('datadirectory').$caview->getAbsolutePath("").'rootcerts.crt'; - if (file_exists($certPath)) { - $this->client->addTrustedCertificates($certPath); - } - } - //create the root folder if necesary - $this->mkdir(''); + } private function createBaseUri() { diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index dd537d779a..9702ebfb4c 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -5,6 +5,7 @@ '> + @@ -17,6 +18,11 @@ array())); ?> $mount): ?> > + From 3c08d2ba23e36dbf79ea5fdabaf931bdad32b3b9 Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Mon, 24 Dec 2012 13:48:18 -0500 Subject: [PATCH 002/719] Change callback url to path only in case oauth parameters are still in url --- apps/files_external/js/google.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_external/js/google.js b/apps/files_external/js/google.js index 0b3c314eb5..f9fb807861 100644 --- a/apps/files_external/js/google.js +++ b/apps/files_external/js/google.js @@ -60,7 +60,7 @@ $(document).ready(function() { var configured = $(this).parent().find('[data-parameter="configured"]'); var token = $(this).parent().find('[data-parameter="token"]'); var token_secret = $(this).parent().find('[data-parameter="token_secret"]'); - $.post(OC.filePath('files_external', 'ajax', 'google.php'), { step: 1, callback: window.location.href }, function(result) { + $.post(OC.filePath('files_external', 'ajax', 'google.php'), { step: 1, callback: location.protocol + '//' + location.host + location.pathname }, function(result) { if (result && result.status == 'success') { $(configured).val('false'); $(token).val(result.data.request_token); From a0e47a2c67f0fe5ff3ed07174e0922dae67707dc Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Mon, 24 Dec 2012 13:55:37 -0500 Subject: [PATCH 003/719] Prevent javascript error if no value is set for the multiselect --- apps/files_external/js/settings.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index eb74dd487f..a3abcfebb8 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -27,11 +27,16 @@ OC.MountConfig={ classOptions[$(input).data('parameter')] = $(input).val(); } }); + if ($('#externalStorage').data('admin') === true) { + var multiselect = $(tr).find('.chzn-select').val(); + if (multiselect == null) { + return false; + } + } if (addMountPoint) { var status = false; if ($('#externalStorage').data('admin') === true) { var isPersonal = false; - var multiselect = $(tr).find('.chzn-select').val(); var oldGroups = $(tr).find('.applicable').data('applicable-groups'); var oldUsers = $(tr).find('.applicable').data('applicable-users'); $.each(multiselect, function(index, value) { From 08156cc57f8d96a923989c5a0263455631299577 Mon Sep 17 00:00:00 2001 From: hkjolhede Date: Wed, 26 Dec 2012 08:59:08 -0800 Subject: [PATCH 004/719] Create sftp.php Adapter for SFTP using the pure php SSH library phpseclib --- apps/files_external/lib/sftp.php | 1170 ++++++++++++++++++++++++++++++ 1 file changed, 1170 insertions(+) create mode 100644 apps/files_external/lib/sftp.php diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php new file mode 100644 index 0000000000..ecf4e728fe --- /dev/null +++ b/apps/files_external/lib/sftp.php @@ -0,0 +1,1170 @@ +host = $params['host']; + $proto = strpos($this->host, '://'); + if ($proto != false) { + $this->host = substr($this->host, $proto+3); + } + $this->user = $params['user']; + $this->password = $params['password']; + $this->root = isset($params['root']) ? $params['root'] : '/'; + if ($this->root[0] != '/') $this->root = '/' . $this->root; + if (substr($this->root, -1, 1) != '/') $this->root .= '/'; + + $this->client = new Net_SFTP($this->host); + if (!$this->client->login($this->user, $this->password)) { + exit('Login failed'); + } + } + + private function path($path) { + return $this->root . $path; + } + + public function mkdir($path) { + return $this->client->mkdir($this->path($path)); + } + + public function rmdir($path) { + return $this->client->delete($this->path($path), true); + } + + public function opendir($path) { + $list = $this->client->nlist($this->path($path)); + try { + $id = md5('sftp:' . $path); + OC_FakeDirStream::$dirs[$id] = array(); + foreach($list as $file) { + if ($file != '.' && $file != '..') { + OC_FakeDirStream::$dirs[$id][] = $file; + } + } + return opendir('fakedir://' . $id); + } catch(Exception $e) { + return false; + } + } + + public function filetype($path) { + $stat = $this->client->stat($this->path($path)); + if ($stat['type'] == NET_SFTP_TYPE_REGULAR) return 'file'; + if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) return 'dir'; + return false; + } + + public function isReadable($path) { + return true; + } + + public function isUpdatable($path) { + return true; + } + + public function file_exists($path) { + return $this->client->stat($this->path($path)) === false ? false : true; + } + + public function unlink($path) { + return $this->client->delete($this->path($path), true); + } + + public function fopen($path, $mode) { + $abs_path = $this->path($path); + switch($mode) { + case 'r': + case 'rb': + if ( !$this->file_exists($path)) return false; + if (strrpos($path, '.')!==false) { + $ext=substr($path, strrpos($path, '.')); + } else { + $ext=''; + } + $tmp = OC_Helper::tmpFile($ext); + $this->getFile($abs_path, $tmp); + return fopen($tmp, $mode); + + case 'w': + case 'wb': + case 'a': + case 'ab': + case 'r+': + case 'w+': + case 'wb+': + case 'a+': + case 'x': + case 'x+': + case 'c': + case 'c+': + if (strrpos($path, '.')!==false) { + $ext=substr($path, strrpos($path, '.')); + } else { + $ext=''; + } + $tmpFile=OC_Helper::tmpFile($ext); + OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack'); + if ($this->file_exists($path)) { + $this->getFile($abs_path, $tmpFile); + } + self::$tempFiles[$tmpFile]=$abs_path; + return fopen('close://'.$tmpFile, $mode); + } + return false; + } + + public function writeBack($tmpFile) { + if (array_key_exists($tmpFile, self::$tempFiles)) { + $this->uploadFile($tmpFile, self::$tempFiles[$tmpFile]); + unlink($tmpFile); + unset(self::$tempFiles[$tmpFile]); + } + } + + public function free_space($path) { + return -1; + } + + public function touch($path, $mtime=null) { + if (!$this->file_exists($path)) { + $this->client->put($this->path($path), ''); + } + } + + public function getFile($path, $target) { + $this->client->get($path, $target); + } + + public function uploadFile($path, $target) { + $this->client->put($target, $path, NET_SFTP_LOCAL_FILE); + } + + public function rename($source, $target) { + return $this->client->rename($this->path($source), $this->path($target)); + } + + public function stat($path) { + $stat = $this->client->stat($this->path($path)); + + $mtime = $stat ? $stat['mtime'] : -1; + $size = $stat ? $stat['size'] : 0; + + return array('mtime' => $mtime, 'size' => $size, 'ctime' => -1); + } + + public function getMimeType($path) { + if($this->is_dir($path)) { + return 'httpd/unix-directory'; + } + if (strrpos($path, '.')!==false) { + $ext=strtolower(substr($path, strrpos($path, '.')+1)); + } else { + return false; + } + + if (array_key_exists($ext, self::$mimeTypes)) { + return self::$mimeTypes[$ext]; + } + + return false; + } + + + public static $mimeTypes = array( + 'ez' => 'application/andrew-inset', + 'aw' => 'application/applixware', + 'atom' => 'application/atom+xml', + 'atomcat' => 'application/atomcat+xml', + 'atomsvc' => 'application/atomsvc+xml', + 'ccxml' => 'application/ccxml+xml', + 'cdmia' => 'application/cdmi-capability', + 'cdmic' => 'application/cdmi-container', + 'cdmid' => 'application/cdmi-domain', + 'cdmio' => 'application/cdmi-object', + 'cdmiq' => 'application/cdmi-queue', + 'cu' => 'application/cu-seeme', + 'davmount' => 'application/davmount+xml', + 'dbk' => 'application/docbook+xml', + 'dssc' => 'application/dssc+der', + 'xdssc' => 'application/dssc+xml', + 'ecma' => 'application/ecmascript', + 'emma' => 'application/emma+xml', + 'epub' => 'application/epub+zip', + 'exi' => 'application/exi', + 'pfr' => 'application/font-tdpfr', + 'gml' => 'application/gml+xml', + 'gpx' => 'application/gpx+xml', + 'gxf' => 'application/gxf', + 'stk' => 'application/hyperstudio', + 'ink' => 'application/inkml+xml', + 'inkml' => 'application/inkml+xml', + 'ipfix' => 'application/ipfix', + 'jar' => 'application/java-archive', + 'ser' => 'application/java-serialized-object', + 'class' => 'application/java-vm', + 'js' => 'application/javascript', + 'json' => 'application/json', + 'jsonml' => 'application/jsonml+json', + 'lostxml' => 'application/lost+xml', + 'hqx' => 'application/mac-binhex40', + 'cpt' => 'application/mac-compactpro', + 'mads' => 'application/mads+xml', + 'mrc' => 'application/marc', + 'mrcx' => 'application/marcxml+xml', + 'ma' => 'application/mathematica', + 'nb' => 'application/mathematica', + 'mb' => 'application/mathematica', + 'mathml' => 'application/mathml+xml', + 'mbox' => 'application/mbox', + 'mscml' => 'application/mediaservercontrol+xml', + 'metalink' => 'application/metalink+xml', + 'meta4' => 'application/metalink4+xml', + 'mets' => 'application/mets+xml', + 'mods' => 'application/mods+xml', + 'm21' => 'application/mp21', + 'mp21' => 'application/mp21', + 'mp4s' => 'application/mp4', + 'doc' => 'application/msword', + 'dot' => 'application/msword', + 'mxf' => 'application/mxf', + 'bin' => 'application/octet-stream', + 'dms' => 'application/octet-stream', + 'lrf' => 'application/octet-stream', + 'mar' => 'application/octet-stream', + 'so' => 'application/octet-stream', + 'dist' => 'application/octet-stream', + 'distz' => 'application/octet-stream', + 'pkg' => 'application/octet-stream', + 'bpk' => 'application/octet-stream', + 'dump' => 'application/octet-stream', + 'elc' => 'application/octet-stream', + 'deploy' => 'application/octet-stream', + 'oda' => 'application/oda', + 'opf' => 'application/oebps-package+xml', + 'ogx' => 'application/ogg', + 'omdoc' => 'application/omdoc+xml', + 'onetoc' => 'application/onenote', + 'onetoc2' => 'application/onenote', + 'onetmp' => 'application/onenote', + 'onepkg' => 'application/onenote', + 'oxps' => 'application/oxps', + 'xer' => 'application/patch-ops-error+xml', + 'pdf' => 'application/pdf', + 'pgp' => 'application/pgp-encrypted', + 'asc' => 'application/pgp-signature', + 'sig' => 'application/pgp-signature', + 'prf' => 'application/pics-rules', + 'p10' => 'application/pkcs10', + 'p7m' => 'application/pkcs7-mime', + 'p7c' => 'application/pkcs7-mime', + 'p7s' => 'application/pkcs7-signature', + 'p8' => 'application/pkcs8', + 'ac' => 'application/pkix-attr-cert', + 'cer' => 'application/pkix-cert', + 'crl' => 'application/pkix-crl', + 'pkipath' => 'application/pkix-pkipath', + 'pki' => 'application/pkixcmp', + 'pls' => 'application/pls+xml', + 'ai' => 'application/postscript', + 'eps' => 'application/postscript', + 'ps' => 'application/postscript', + 'cww' => 'application/prs.cww', + 'pskcxml' => 'application/pskc+xml', + 'rdf' => 'application/rdf+xml', + 'rif' => 'application/reginfo+xml', + 'rnc' => 'application/relax-ng-compact-syntax', + 'rl' => 'application/resource-lists+xml', + 'rld' => 'application/resource-lists-diff+xml', + 'rs' => 'application/rls-services+xml', + 'gbr' => 'application/rpki-ghostbusters', + 'mft' => 'application/rpki-manifest', + 'roa' => 'application/rpki-roa', + 'rsd' => 'application/rsd+xml', + 'rss' => 'application/rss+xml', + 'rtf' => 'application/rtf', + 'sbml' => 'application/sbml+xml', + 'scq' => 'application/scvp-cv-request', + 'scs' => 'application/scvp-cv-response', + 'spq' => 'application/scvp-vp-request', + 'spp' => 'application/scvp-vp-response', + 'sdp' => 'application/sdp', + 'setpay' => 'application/set-payment-initiation', + 'setreg' => 'application/set-registration-initiation', + 'shf' => 'application/shf+xml', + 'smi' => 'application/smil+xml', + 'smil' => 'application/smil+xml', + 'rq' => 'application/sparql-query', + 'srx' => 'application/sparql-results+xml', + 'gram' => 'application/srgs', + 'grxml' => 'application/srgs+xml', + 'sru' => 'application/sru+xml', + 'ssdl' => 'application/ssdl+xml', + 'ssml' => 'application/ssml+xml', + 'tei' => 'application/tei+xml', + 'teicorpus' => 'application/tei+xml', + 'tfi' => 'application/thraud+xml', + 'tsd' => 'application/timestamped-data', + 'plb' => 'application/vnd.3gpp.pic-bw-large', + 'psb' => 'application/vnd.3gpp.pic-bw-small', + 'pvb' => 'application/vnd.3gpp.pic-bw-var', + 'tcap' => 'application/vnd.3gpp2.tcap', + 'pwn' => 'application/vnd.3m.post-it-notes', + 'aso' => 'application/vnd.accpac.simply.aso', + 'imp' => 'application/vnd.accpac.simply.imp', + 'acu' => 'application/vnd.acucobol', + 'atc' => 'application/vnd.acucorp', + 'acutc' => 'application/vnd.acucorp', + 'air' => 'application/vnd.adobe.air-application-installer-package+zip', + 'fcdt' => 'application/vnd.adobe.formscentral.fcdt', + 'fxp' => 'application/vnd.adobe.fxp', + 'fxpl' => 'application/vnd.adobe.fxp', + 'xdp' => 'application/vnd.adobe.xdp+xml', + 'xfdf' => 'application/vnd.adobe.xfdf', + 'ahead' => 'application/vnd.ahead.space', + 'azf' => 'application/vnd.airzip.filesecure.azf', + 'azs' => 'application/vnd.airzip.filesecure.azs', + 'azw' => 'application/vnd.amazon.ebook', + 'acc' => 'application/vnd.americandynamics.acc', + 'ami' => 'application/vnd.amiga.ami', + 'apk' => 'application/vnd.android.package-archive', + 'cii' => 'application/vnd.anser-web-certificate-issue-initiation', + 'fti' => 'application/vnd.anser-web-funds-transfer-initiation', + 'atx' => 'application/vnd.antix.game-component', + 'mpkg' => 'application/vnd.apple.installer+xml', + 'm3u8' => 'application/vnd.apple.mpegurl', + 'swi' => 'application/vnd.aristanetworks.swi', + 'iota' => 'application/vnd.astraea-software.iota', + 'aep' => 'application/vnd.audiograph', + 'mpm' => 'application/vnd.blueice.multipass', + 'bmi' => 'application/vnd.bmi', + 'rep' => 'application/vnd.businessobjects', + 'cdxml' => 'application/vnd.chemdraw+xml', + 'mmd' => 'application/vnd.chipnuts.karaoke-mmd', + 'cdy' => 'application/vnd.cinderella', + 'cla' => 'application/vnd.claymore', + 'rp9' => 'application/vnd.cloanto.rp9', + 'c4g' => 'application/vnd.clonk.c4group', + 'c4d' => 'application/vnd.clonk.c4group', + 'c4f' => 'application/vnd.clonk.c4group', + 'c4p' => 'application/vnd.clonk.c4group', + 'c4u' => 'application/vnd.clonk.c4group', + 'c11amc' => 'application/vnd.cluetrust.cartomobile-config', + 'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg', + 'csp' => 'application/vnd.commonspace', + 'cdbcmsg' => 'application/vnd.contact.cmsg', + 'cmc' => 'application/vnd.cosmocaller', + 'clkx' => 'application/vnd.crick.clicker', + 'clkk' => 'application/vnd.crick.clicker.keyboard', + 'clkp' => 'application/vnd.crick.clicker.palette', + 'clkt' => 'application/vnd.crick.clicker.template', + 'clkw' => 'application/vnd.crick.clicker.wordbank', + 'wbs' => 'application/vnd.criticaltools.wbs+xml', + 'pml' => 'application/vnd.ctc-posml', + 'ppd' => 'application/vnd.cups-ppd', + 'car' => 'application/vnd.curl.car', + 'pcurl' => 'application/vnd.curl.pcurl', + 'dart' => 'application/vnd.dart', + 'rdz' => 'application/vnd.data-vision.rdz', + 'uvf' => 'application/vnd.dece.data', + 'uvvf' => 'application/vnd.dece.data', + 'uvd' => 'application/vnd.dece.data', + 'uvvd' => 'application/vnd.dece.data', + 'uvt' => 'application/vnd.dece.ttml+xml', + 'uvvt' => 'application/vnd.dece.ttml+xml', + 'uvx' => 'application/vnd.dece.unspecified', + 'uvvx' => 'application/vnd.dece.unspecified', + 'uvz' => 'application/vnd.dece.zip', + 'uvvz' => 'application/vnd.dece.zip', + 'fe_launch' => 'application/vnd.denovo.fcselayout-link', + 'dna' => 'application/vnd.dna', + 'mlp' => 'application/vnd.dolby.mlp', + 'dpg' => 'application/vnd.dpgraph', + 'dfac' => 'application/vnd.dreamfactory', + 'kpxx' => 'application/vnd.ds-keypoint', + 'ait' => 'application/vnd.dvb.ait', + 'svc' => 'application/vnd.dvb.service', + 'geo' => 'application/vnd.dynageo', + 'mag' => 'application/vnd.ecowin.chart', + 'nml' => 'application/vnd.enliven', + 'esf' => 'application/vnd.epson.esf', + 'msf' => 'application/vnd.epson.msf', + 'qam' => 'application/vnd.epson.quickanime', + 'slt' => 'application/vnd.epson.salt', + 'ssf' => 'application/vnd.epson.ssf', + 'es3' => 'application/vnd.eszigno3+xml', + 'et3' => 'application/vnd.eszigno3+xml', + 'ez2' => 'application/vnd.ezpix-album', + 'ez3' => 'application/vnd.ezpix-package', + 'fdf' => 'application/vnd.fdf', + 'mseed' => 'application/vnd.fdsn.mseed', + 'seed' => 'application/vnd.fdsn.seed', + 'dataless' => 'application/vnd.fdsn.seed', + 'gph' => 'application/vnd.flographit', + 'ftc' => 'application/vnd.fluxtime.clip', + 'fm' => 'application/vnd.framemaker', + 'frame' => 'application/vnd.framemaker', + 'maker' => 'application/vnd.framemaker', + 'book' => 'application/vnd.framemaker', + 'fnc' => 'application/vnd.frogans.fnc', + 'ltf' => 'application/vnd.frogans.ltf', + 'fsc' => 'application/vnd.fsc.weblaunch', + 'oas' => 'application/vnd.fujitsu.oasys', + 'oa2' => 'application/vnd.fujitsu.oasys2', + 'oa3' => 'application/vnd.fujitsu.oasys3', + 'fg5' => 'application/vnd.fujitsu.oasysgp', + 'bh2' => 'application/vnd.fujitsu.oasysprs', + 'ddd' => 'application/vnd.fujixerox.ddd', + 'xdw' => 'application/vnd.fujixerox.docuworks', + 'xbd' => 'application/vnd.fujixerox.docuworks.binder', + 'fzs' => 'application/vnd.fuzzysheet', + 'txd' => 'application/vnd.genomatix.tuxedo', + 'ggb' => 'application/vnd.geogebra.file', + 'ggt' => 'application/vnd.geogebra.tool', + 'gex' => 'application/vnd.geometry-explorer', + 'gre' => 'application/vnd.geometry-explorer', + 'gxt' => 'application/vnd.geonext', + 'g2w' => 'application/vnd.geoplan', + 'g3w' => 'application/vnd.geospace', + 'gmx' => 'application/vnd.gmx', + 'kml' => 'application/vnd.google-earth.kml+xml', + 'kmz' => 'application/vnd.google-earth.kmz', + 'gqf' => 'application/vnd.grafeq', + 'gqs' => 'application/vnd.grafeq', + 'gac' => 'application/vnd.groove-account', + 'ghf' => 'application/vnd.groove-help', + 'gim' => 'application/vnd.groove-identity-message', + 'grv' => 'application/vnd.groove-injector', + 'gtm' => 'application/vnd.groove-tool-message', + 'tpl' => 'application/vnd.groove-tool-template', + 'vcg' => 'application/vnd.groove-vcard', + 'hal' => 'application/vnd.hal+xml', + 'zmm' => 'application/vnd.handheld-entertainment+xml', + 'hbci' => 'application/vnd.hbci', + 'les' => 'application/vnd.hhe.lesson-player', + 'hpgl' => 'application/vnd.hp-hpgl', + 'hpid' => 'application/vnd.hp-hpid', + 'hps' => 'application/vnd.hp-hps', + 'jlt' => 'application/vnd.hp-jlyt', + 'pcl' => 'application/vnd.hp-pcl', + 'pclxl' => 'application/vnd.hp-pclxl', + 'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data', + 'mpy' => 'application/vnd.ibm.minipay', + 'afp' => 'application/vnd.ibm.modcap', + 'listafp' => 'application/vnd.ibm.modcap', + 'list3820' => 'application/vnd.ibm.modcap', + 'irm' => 'application/vnd.ibm.rights-management', + 'sc' => 'application/vnd.ibm.secure-container', + 'icc' => 'application/vnd.iccprofile', + 'icm' => 'application/vnd.iccprofile', + 'igl' => 'application/vnd.igloader', + 'ivp' => 'application/vnd.immervision-ivp', + 'ivu' => 'application/vnd.immervision-ivu', + 'igm' => 'application/vnd.insors.igm', + 'xpw' => 'application/vnd.intercon.formnet', + 'xpx' => 'application/vnd.intercon.formnet', + 'i2g' => 'application/vnd.intergeo', + 'qbo' => 'application/vnd.intu.qbo', + 'qfx' => 'application/vnd.intu.qfx', + 'rcprofile' => 'application/vnd.ipunplugged.rcprofile', + 'irp' => 'application/vnd.irepository.package+xml', + 'xpr' => 'application/vnd.is-xpr', + 'fcs' => 'application/vnd.isac.fcs', + 'jam' => 'application/vnd.jam', + 'rms' => 'application/vnd.jcp.javame.midlet-rms', + 'jisp' => 'application/vnd.jisp', + 'joda' => 'application/vnd.joost.joda-archive', + 'ktz' => 'application/vnd.kahootz', + 'ktr' => 'application/vnd.kahootz', + 'karbon' => 'application/vnd.kde.karbon', + 'chrt' => 'application/vnd.kde.kchart', + 'kfo' => 'application/vnd.kde.kformula', + 'flw' => 'application/vnd.kde.kivio', + 'kon' => 'application/vnd.kde.kontour', + 'kpr' => 'application/vnd.kde.kpresenter', + 'kpt' => 'application/vnd.kde.kpresenter', + 'ksp' => 'application/vnd.kde.kspread', + 'kwd' => 'application/vnd.kde.kword', + 'kwt' => 'application/vnd.kde.kword', + 'htke' => 'application/vnd.kenameaapp', + 'kia' => 'application/vnd.kidspiration', + 'kne' => 'application/vnd.kinar', + 'knp' => 'application/vnd.kinar', + 'skp' => 'application/vnd.koan', + 'skd' => 'application/vnd.koan', + 'skt' => 'application/vnd.koan', + 'skm' => 'application/vnd.koan', + 'sse' => 'application/vnd.kodak-descriptor', + 'lasxml' => 'application/vnd.las.las+xml', + 'lbd' => 'application/vnd.llamagraphics.life-balance.desktop', + 'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml', + '123' => 'application/vnd.lotus-1-2-3', + 'apr' => 'application/vnd.lotus-approach', + 'pre' => 'application/vnd.lotus-freelance', + 'nsf' => 'application/vnd.lotus-notes', + 'org' => 'application/vnd.lotus-organizer', + 'scm' => 'application/vnd.lotus-screencam', + 'lwp' => 'application/vnd.lotus-wordpro', + 'portpkg' => 'application/vnd.macports.portpkg', + 'mcd' => 'application/vnd.mcd', + 'mc1' => 'application/vnd.medcalcdata', + 'cdkey' => 'application/vnd.mediastation.cdkey', + 'mwf' => 'application/vnd.mfer', + 'mfm' => 'application/vnd.mfmp', + 'flo' => 'application/vnd.micrografx.flo', + 'igx' => 'application/vnd.micrografx.igx', + 'mif' => 'application/vnd.mif', + 'daf' => 'application/vnd.mobius.daf', + 'dis' => 'application/vnd.mobius.dis', + 'mbk' => 'application/vnd.mobius.mbk', + 'mqy' => 'application/vnd.mobius.mqy', + 'msl' => 'application/vnd.mobius.msl', + 'plc' => 'application/vnd.mobius.plc', + 'txf' => 'application/vnd.mobius.txf', + 'mpn' => 'application/vnd.mophun.application', + 'mpc' => 'application/vnd.mophun.certificate', + 'xul' => 'application/vnd.mozilla.xul+xml', + 'cil' => 'application/vnd.ms-artgalry', + 'cab' => 'application/vnd.ms-cab-compressed', + 'xls' => 'application/vnd.ms-excel', + 'xlm' => 'application/vnd.ms-excel', + 'xla' => 'application/vnd.ms-excel', + 'xlc' => 'application/vnd.ms-excel', + 'xlt' => 'application/vnd.ms-excel', + 'xlw' => 'application/vnd.ms-excel', + 'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12', + 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12', + 'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12', + 'xltm' => 'application/vnd.ms-excel.template.macroenabled.12', + 'eot' => 'application/vnd.ms-fontobject', + 'chm' => 'application/vnd.ms-htmlhelp', + 'ims' => 'application/vnd.ms-ims', + 'lrm' => 'application/vnd.ms-lrm', + 'thmx' => 'application/vnd.ms-officetheme', + 'cat' => 'application/vnd.ms-pki.seccat', + 'stl' => 'application/vnd.ms-pki.stl', + 'ppt' => 'application/vnd.ms-powerpoint', + 'pps' => 'application/vnd.ms-powerpoint', + 'pot' => 'application/vnd.ms-powerpoint', + 'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12', + 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12', + 'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12', + 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', + 'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12', + 'mpp' => 'application/vnd.ms-project', + 'mpt' => 'application/vnd.ms-project', + 'docm' => 'application/vnd.ms-word.document.macroenabled.12', + 'dotm' => 'application/vnd.ms-word.template.macroenabled.12', + 'wps' => 'application/vnd.ms-works', + 'wks' => 'application/vnd.ms-works', + 'wcm' => 'application/vnd.ms-works', + 'wdb' => 'application/vnd.ms-works', + 'wpl' => 'application/vnd.ms-wpl', + 'xps' => 'application/vnd.ms-xpsdocument', + 'mseq' => 'application/vnd.mseq', + 'mus' => 'application/vnd.musician', + 'msty' => 'application/vnd.muvee.style', + 'taglet' => 'application/vnd.mynfc', + 'nlu' => 'application/vnd.neurolanguage.nlu', + 'ntf' => 'application/vnd.nitf', + 'nitf' => 'application/vnd.nitf', + 'nnd' => 'application/vnd.noblenet-directory', + 'nns' => 'application/vnd.noblenet-sealer', + 'nnw' => 'application/vnd.noblenet-web', + 'ngdat' => 'application/vnd.nokia.n-gage.data', + 'n-gage' => 'application/vnd.nokia.n-gage.symbian.install', + 'rpst' => 'application/vnd.nokia.radio-preset', + 'rpss' => 'application/vnd.nokia.radio-presets', + 'edm' => 'application/vnd.novadigm.edm', + 'edx' => 'application/vnd.novadigm.edx', + 'ext' => 'application/vnd.novadigm.ext', + 'odc' => 'application/vnd.oasis.opendocument.chart', + 'otc' => 'application/vnd.oasis.opendocument.chart-template', + 'odb' => 'application/vnd.oasis.opendocument.database', + 'odf' => 'application/vnd.oasis.opendocument.formula', + 'odft' => 'application/vnd.oasis.opendocument.formula-template', + 'odg' => 'application/vnd.oasis.opendocument.graphics', + 'otg' => 'application/vnd.oasis.opendocument.graphics-template', + 'odi' => 'application/vnd.oasis.opendocument.image', + 'oti' => 'application/vnd.oasis.opendocument.image-template', + 'odp' => 'application/vnd.oasis.opendocument.presentation', + 'otp' => 'application/vnd.oasis.opendocument.presentation-template', + 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', + 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', + 'odt' => 'application/vnd.oasis.opendocument.text', + 'odm' => 'application/vnd.oasis.opendocument.text-master', + 'ott' => 'application/vnd.oasis.opendocument.text-template', + 'oth' => 'application/vnd.oasis.opendocument.text-web', + 'xo' => 'application/vnd.olpc-sugar', + 'dd2' => 'application/vnd.oma.dd2+xml', + 'oxt' => 'application/vnd.openofficeorg.extension', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', + 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', + 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', + 'mgp' => 'application/vnd.osgeo.mapguide.package', + 'dp' => 'application/vnd.osgi.dp', + 'esa' => 'application/vnd.osgi.subsystem', + 'pdb' => 'application/vnd.palm', + 'pqa' => 'application/vnd.palm', + 'oprc' => 'application/vnd.palm', + 'paw' => 'application/vnd.pawaafile', + 'str' => 'application/vnd.pg.format', + 'ei6' => 'application/vnd.pg.osasli', + 'efif' => 'application/vnd.picsel', + 'wg' => 'application/vnd.pmi.widget', + 'plf' => 'application/vnd.pocketlearn', + 'pbd' => 'application/vnd.powerbuilder6', + 'box' => 'application/vnd.previewsystems.box', + 'mgz' => 'application/vnd.proteus.magazine', + 'qps' => 'application/vnd.publishare-delta-tree', + 'ptid' => 'application/vnd.pvi.ptid1', + 'qxd' => 'application/vnd.quark.quarkxpress', + 'qxt' => 'application/vnd.quark.quarkxpress', + 'qwd' => 'application/vnd.quark.quarkxpress', + 'qwt' => 'application/vnd.quark.quarkxpress', + 'qxl' => 'application/vnd.quark.quarkxpress', + 'qxb' => 'application/vnd.quark.quarkxpress', + 'bed' => 'application/vnd.realvnc.bed', + 'mxl' => 'application/vnd.recordare.musicxml', + 'musicxml' => 'application/vnd.recordare.musicxml+xml', + 'cryptonote' => 'application/vnd.rig.cryptonote', + 'cod' => 'application/vnd.rim.cod', + 'rm' => 'application/vnd.rn-realmedia', + 'rmvb' => 'application/vnd.rn-realmedia-vbr', + 'link66' => 'application/vnd.route66.link66+xml', + 'st' => 'application/vnd.sailingtracker.track', + 'see' => 'application/vnd.seemail', + 'sema' => 'application/vnd.sema', + 'semd' => 'application/vnd.semd', + 'semf' => 'application/vnd.semf', + 'ifm' => 'application/vnd.shana.informed.formdata', + 'itp' => 'application/vnd.shana.informed.formtemplate', + 'iif' => 'application/vnd.shana.informed.interchange', + 'ipk' => 'application/vnd.shana.informed.package', + 'twd' => 'application/vnd.simtech-mindmapper', + 'twds' => 'application/vnd.simtech-mindmapper', + 'mmf' => 'application/vnd.smaf', + 'teacher' => 'application/vnd.smart.teacher', + 'sdkm' => 'application/vnd.solent.sdkm+xml', + 'sdkd' => 'application/vnd.solent.sdkm+xml', + 'dxp' => 'application/vnd.spotfire.dxp', + 'sfs' => 'application/vnd.spotfire.sfs', + 'sdc' => 'application/vnd.stardivision.calc', + 'sda' => 'application/vnd.stardivision.draw', + 'sdd' => 'application/vnd.stardivision.impress', + 'smf' => 'application/vnd.stardivision.math', + 'sdw' => 'application/vnd.stardivision.writer', + 'vor' => 'application/vnd.stardivision.writer', + 'sgl' => 'application/vnd.stardivision.writer-global', + 'smzip' => 'application/vnd.stepmania.package', + 'sm' => 'application/vnd.stepmania.stepchart', + 'sxc' => 'application/vnd.sun.xml.calc', + 'stc' => 'application/vnd.sun.xml.calc.template', + 'sxd' => 'application/vnd.sun.xml.draw', + 'std' => 'application/vnd.sun.xml.draw.template', + 'sxi' => 'application/vnd.sun.xml.impress', + 'sti' => 'application/vnd.sun.xml.impress.template', + 'sxm' => 'application/vnd.sun.xml.math', + 'sxw' => 'application/vnd.sun.xml.writer', + 'sxg' => 'application/vnd.sun.xml.writer.global', + 'stw' => 'application/vnd.sun.xml.writer.template', + 'sus' => 'application/vnd.sus-calendar', + 'susp' => 'application/vnd.sus-calendar', + 'svd' => 'application/vnd.svd', + 'sis' => 'application/vnd.symbian.install', + 'sisx' => 'application/vnd.symbian.install', + 'xsm' => 'application/vnd.syncml+xml', + 'bdm' => 'application/vnd.syncml.dm+wbxml', + 'xdm' => 'application/vnd.syncml.dm+xml', + 'tao' => 'application/vnd.tao.intent-module-archive', + 'pcap' => 'application/vnd.tcpdump.pcap', + 'cap' => 'application/vnd.tcpdump.pcap', + 'dmp' => 'application/vnd.tcpdump.pcap', + 'tmo' => 'application/vnd.tmobile-livetv', + 'tpt' => 'application/vnd.trid.tpt', + 'mxs' => 'application/vnd.triscape.mxs', + 'tra' => 'application/vnd.trueapp', + 'ufd' => 'application/vnd.ufdl', + 'ufdl' => 'application/vnd.ufdl', + 'utz' => 'application/vnd.uiq.theme', + 'umj' => 'application/vnd.umajin', + 'unityweb' => 'application/vnd.unity', + 'uoml' => 'application/vnd.uoml+xml', + 'vcx' => 'application/vnd.vcx', + 'vsd' => 'application/vnd.visio', + 'vst' => 'application/vnd.visio', + 'vss' => 'application/vnd.visio', + 'vsw' => 'application/vnd.visio', + 'vis' => 'application/vnd.visionary', + 'vsf' => 'application/vnd.vsf', + 'wbxml' => 'application/vnd.wap.wbxml', + 'wmlc' => 'application/vnd.wap.wmlc', + 'wmlsc' => 'application/vnd.wap.wmlscriptc', + 'wtb' => 'application/vnd.webturbo', + 'nbp' => 'application/vnd.wolfram.player', + 'wpd' => 'application/vnd.wordperfect', + 'wqd' => 'application/vnd.wqd', + 'stf' => 'application/vnd.wt.stf', + 'xar' => 'application/vnd.xara', + 'xfdl' => 'application/vnd.xfdl', + 'hvd' => 'application/vnd.yamaha.hv-dic', + 'hvs' => 'application/vnd.yamaha.hv-script', + 'hvp' => 'application/vnd.yamaha.hv-voice', + 'osf' => 'application/vnd.yamaha.openscoreformat', + 'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml', + 'saf' => 'application/vnd.yamaha.smaf-audio', + 'spf' => 'application/vnd.yamaha.smaf-phrase', + 'cmp' => 'application/vnd.yellowriver-custom-menu', + 'zir' => 'application/vnd.zul', + 'zirz' => 'application/vnd.zul', + 'zaz' => 'application/vnd.zzazz.deck+xml', + 'vxml' => 'application/voicexml+xml', + 'wgt' => 'application/widget', + 'hlp' => 'application/winhlp', + 'wsdl' => 'application/wsdl+xml', + 'wspolicy' => 'application/wspolicy+xml', + '7z' => 'application/x-7z-compressed', + 'abw' => 'application/x-abiword', + 'ace' => 'application/x-ace-compressed', + 'dmg' => 'application/x-apple-diskimage', + 'aab' => 'application/x-authorware-bin', + 'x32' => 'application/x-authorware-bin', + 'u32' => 'application/x-authorware-bin', + 'vox' => 'application/x-authorware-bin', + 'aam' => 'application/x-authorware-map', + 'aas' => 'application/x-authorware-seg', + 'bcpio' => 'application/x-bcpio', + 'torrent' => 'application/x-bittorrent', + 'blb' => 'application/x-blorb', + 'blorb' => 'application/x-blorb', + 'bz' => 'application/x-bzip', + 'bz2' => 'application/x-bzip2', + 'boz' => 'application/x-bzip2', + 'cbr' => 'application/x-cbr', + 'cba' => 'application/x-cbr', + 'cbt' => 'application/x-cbr', + 'cbz' => 'application/x-cbr', + 'cb7' => 'application/x-cbr', + 'vcd' => 'application/x-cdlink', + 'cfs' => 'application/x-cfs-compressed', + 'chat' => 'application/x-chat', + 'pgn' => 'application/x-chess-pgn', + 'nsc' => 'application/x-conference', + 'cpio' => 'application/x-cpio', + 'csh' => 'application/x-csh', + 'deb' => 'application/x-debian-package', + 'udeb' => 'application/x-debian-package', + 'dgc' => 'application/x-dgc-compressed', + 'dir' => 'application/x-director', + 'dcr' => 'application/x-director', + 'dxr' => 'application/x-director', + 'cst' => 'application/x-director', + 'cct' => 'application/x-director', + 'cxt' => 'application/x-director', + 'w3d' => 'application/x-director', + 'fgd' => 'application/x-director', + 'swa' => 'application/x-director', + 'wad' => 'application/x-doom', + 'ncx' => 'application/x-dtbncx+xml', + 'dtb' => 'application/x-dtbook+xml', + 'res' => 'application/x-dtbresource+xml', + 'dvi' => 'application/x-dvi', + 'evy' => 'application/x-envoy', + 'eva' => 'application/x-eva', + 'bdf' => 'application/x-font-bdf', + 'gsf' => 'application/x-font-ghostscript', + 'psf' => 'application/x-font-linux-psf', + 'otf' => 'application/x-font-otf', + 'pcf' => 'application/x-font-pcf', + 'snf' => 'application/x-font-snf', + 'ttf' => 'application/x-font-ttf', + 'ttc' => 'application/x-font-ttf', + 'pfa' => 'application/x-font-type1', + 'pfb' => 'application/x-font-type1', + 'pfm' => 'application/x-font-type1', + 'afm' => 'application/x-font-type1', + 'woff' => 'application/x-font-woff', + 'arc' => 'application/x-freearc', + 'spl' => 'application/x-futuresplash', + 'gca' => 'application/x-gca-compressed', + 'ulx' => 'application/x-glulx', + 'gnumeric' => 'application/x-gnumeric', + 'gramps' => 'application/x-gramps-xml', + 'gtar' => 'application/x-gtar', + 'hdf' => 'application/x-hdf', + 'install' => 'application/x-install-instructions', + 'iso' => 'application/x-iso9660-image', + 'jnlp' => 'application/x-java-jnlp-file', + 'latex' => 'application/x-latex', + 'lzh' => 'application/x-lzh-compressed', + 'lha' => 'application/x-lzh-compressed', + 'mie' => 'application/x-mie', + 'prc' => 'application/x-mobipocket-ebook', + 'mobi' => 'application/x-mobipocket-ebook', + 'application' => 'application/x-ms-application', + 'lnk' => 'application/x-ms-shortcut', + 'wmd' => 'application/x-ms-wmd', + 'wmz' => 'application/x-ms-wmz', + 'xbap' => 'application/x-ms-xbap', + 'mdb' => 'application/x-msaccess', + 'obd' => 'application/x-msbinder', + 'crd' => 'application/x-mscardfile', + 'clp' => 'application/x-msclip', + 'exe' => 'application/x-msdownload', + 'dll' => 'application/x-msdownload', + 'com' => 'application/x-msdownload', + 'bat' => 'application/x-msdownload', + 'msi' => 'application/x-msdownload', + 'mvb' => 'application/x-msmediaview', + 'm13' => 'application/x-msmediaview', + 'm14' => 'application/x-msmediaview', + 'wmf' => 'application/x-msmetafile', + 'wmz' => 'application/x-msmetafile', + 'emf' => 'application/x-msmetafile', + 'emz' => 'application/x-msmetafile', + 'mny' => 'application/x-msmoney', + 'pub' => 'application/x-mspublisher', + 'scd' => 'application/x-msschedule', + 'trm' => 'application/x-msterminal', + 'wri' => 'application/x-mswrite', + 'nc' => 'application/x-netcdf', + 'cdf' => 'application/x-netcdf', + 'nzb' => 'application/x-nzb', + 'p12' => 'application/x-pkcs12', + 'pfx' => 'application/x-pkcs12', + 'p7b' => 'application/x-pkcs7-certificates', + 'spc' => 'application/x-pkcs7-certificates', + 'p7r' => 'application/x-pkcs7-certreqresp', + 'rar' => 'application/x-rar-compressed', + 'ris' => 'application/x-research-info-systems', + 'sh' => 'application/x-sh', + 'shar' => 'application/x-shar', + 'swf' => 'application/x-shockwave-flash', + 'xap' => 'application/x-silverlight-app', + 'sql' => 'application/x-sql', + 'sit' => 'application/x-stuffit', + 'sitx' => 'application/x-stuffitx', + 'srt' => 'application/x-subrip', + 'sv4cpio' => 'application/x-sv4cpio', + 'sv4crc' => 'application/x-sv4crc', + 't3' => 'application/x-t3vm-image', + 'gam' => 'application/x-tads', + 'tar' => 'application/x-tar', + 'tcl' => 'application/x-tcl', + 'tex' => 'application/x-tex', + 'tfm' => 'application/x-tex-tfm', + 'texinfo' => 'application/x-texinfo', + 'texi' => 'application/x-texinfo', + 'obj' => 'application/x-tgif', + 'ustar' => 'application/x-ustar', + 'src' => 'application/x-wais-source', + 'der' => 'application/x-x509-ca-cert', + 'crt' => 'application/x-x509-ca-cert', + 'fig' => 'application/x-xfig', + 'xlf' => 'application/x-xliff+xml', + 'xpi' => 'application/x-xpinstall', + 'xz' => 'application/x-xz', + 'z1' => 'application/x-zmachine', + 'z2' => 'application/x-zmachine', + 'z3' => 'application/x-zmachine', + 'z4' => 'application/x-zmachine', + 'z5' => 'application/x-zmachine', + 'z6' => 'application/x-zmachine', + 'z7' => 'application/x-zmachine', + 'z8' => 'application/x-zmachine', + 'xaml' => 'application/xaml+xml', + 'xdf' => 'application/xcap-diff+xml', + 'xenc' => 'application/xenc+xml', + 'xhtml' => 'application/xhtml+xml', + 'xht' => 'application/xhtml+xml', + 'xml' => 'application/xml', + 'xsl' => 'application/xml', + 'dtd' => 'application/xml-dtd', + 'xop' => 'application/xop+xml', + 'xpl' => 'application/xproc+xml', + 'xslt' => 'application/xslt+xml', + 'xspf' => 'application/xspf+xml', + 'mxml' => 'application/xv+xml', + 'xhvml' => 'application/xv+xml', + 'xvml' => 'application/xv+xml', + 'xvm' => 'application/xv+xml', + 'yang' => 'application/yang', + 'yin' => 'application/yin+xml', + 'zip' => 'application/zip', + 'adp' => 'audio/adpcm', + 'au' => 'audio/basic', + 'snd' => 'audio/basic', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'kar' => 'audio/midi', + 'rmi' => 'audio/midi', + 'mp4a' => 'audio/mp4', + 'mpga' => 'audio/mpeg', + 'mp2' => 'audio/mpeg', + 'mp2a' => 'audio/mpeg', + 'mp3' => 'audio/mpeg', + 'm2a' => 'audio/mpeg', + 'm3a' => 'audio/mpeg', + 'oga' => 'audio/ogg', + 'ogg' => 'audio/ogg', + 'spx' => 'audio/ogg', + 's3m' => 'audio/s3m', + 'sil' => 'audio/silk', + 'uva' => 'audio/vnd.dece.audio', + 'uvva' => 'audio/vnd.dece.audio', + 'eol' => 'audio/vnd.digital-winds', + 'dra' => 'audio/vnd.dra', + 'dts' => 'audio/vnd.dts', + 'dtshd' => 'audio/vnd.dts.hd', + 'lvp' => 'audio/vnd.lucent.voice', + 'pya' => 'audio/vnd.ms-playready.media.pya', + 'ecelp4800' => 'audio/vnd.nuera.ecelp4800', + 'ecelp7470' => 'audio/vnd.nuera.ecelp7470', + 'ecelp9600' => 'audio/vnd.nuera.ecelp9600', + 'rip' => 'audio/vnd.rip', + 'weba' => 'audio/webm', + 'aac' => 'audio/x-aac', + 'aif' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'caf' => 'audio/x-caf', + 'flac' => 'audio/x-flac', + 'mka' => 'audio/x-matroska', + 'm3u' => 'audio/x-mpegurl', + 'wax' => 'audio/x-ms-wax', + 'wma' => 'audio/x-ms-wma', + 'ram' => 'audio/x-pn-realaudio', + 'ra' => 'audio/x-pn-realaudio', + 'rmp' => 'audio/x-pn-realaudio-plugin', + 'wav' => 'audio/x-wav', + 'xm' => 'audio/xm', + 'cdx' => 'chemical/x-cdx', + 'cif' => 'chemical/x-cif', + 'cmdf' => 'chemical/x-cmdf', + 'cml' => 'chemical/x-cml', + 'csml' => 'chemical/x-csml', + 'xyz' => 'chemical/x-xyz', + 'bmp' => 'image/bmp', + 'cgm' => 'image/cgm', + 'g3' => 'image/g3fax', + 'gif' => 'image/gif', + 'ief' => 'image/ief', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'jpe' => 'image/jpeg', + 'ktx' => 'image/ktx', + 'png' => 'image/png', + 'btif' => 'image/prs.btif', + 'sgi' => 'image/sgi', + 'svg' => 'image/svg+xml', + 'svgz' => 'image/svg+xml', + 'tiff' => 'image/tiff', + 'tif' => 'image/tiff', + 'psd' => 'image/vnd.adobe.photoshop', + 'uvi' => 'image/vnd.dece.graphic', + 'uvvi' => 'image/vnd.dece.graphic', + 'uvg' => 'image/vnd.dece.graphic', + 'uvvg' => 'image/vnd.dece.graphic', + 'sub' => 'image/vnd.dvb.subtitle', + 'djvu' => 'image/vnd.djvu', + 'djv' => 'image/vnd.djvu', + 'dwg' => 'image/vnd.dwg', + 'dxf' => 'image/vnd.dxf', + 'fbs' => 'image/vnd.fastbidsheet', + 'fpx' => 'image/vnd.fpx', + 'fst' => 'image/vnd.fst', + 'mmr' => 'image/vnd.fujixerox.edmics-mmr', + 'rlc' => 'image/vnd.fujixerox.edmics-rlc', + 'mdi' => 'image/vnd.ms-modi', + 'wdp' => 'image/vnd.ms-photo', + 'npx' => 'image/vnd.net-fpx', + 'wbmp' => 'image/vnd.wap.wbmp', + 'xif' => 'image/vnd.xiff', + 'webp' => 'image/webp', + '3ds' => 'image/x-3ds', + 'ras' => 'image/x-cmu-raster', + 'cmx' => 'image/x-cmx', + 'fh' => 'image/x-freehand', + 'fhc' => 'image/x-freehand', + 'fh4' => 'image/x-freehand', + 'fh5' => 'image/x-freehand', + 'fh7' => 'image/x-freehand', + 'ico' => 'image/x-icon', + 'sid' => 'image/x-mrsid-image', + 'pcx' => 'image/x-pcx', + 'pic' => 'image/x-pict', + 'pct' => 'image/x-pict', + 'pnm' => 'image/x-portable-anymap', + 'pbm' => 'image/x-portable-bitmap', + 'pgm' => 'image/x-portable-graymap', + 'ppm' => 'image/x-portable-pixmap', + 'rgb' => 'image/x-rgb', + 'tga' => 'image/x-tga', + 'xbm' => 'image/x-xbitmap', + 'xpm' => 'image/x-xpixmap', + 'xwd' => 'image/x-xwindowdump', + 'eml' => 'message/rfc822', + 'mime' => 'message/rfc822', + 'igs' => 'model/iges', + 'iges' => 'model/iges', + 'msh' => 'model/mesh', + 'mesh' => 'model/mesh', + 'silo' => 'model/mesh', + 'dae' => 'model/vnd.collada+xml', + 'dwf' => 'model/vnd.dwf', + 'gdl' => 'model/vnd.gdl', + 'gtw' => 'model/vnd.gtw', + 'mts' => 'model/vnd.mts', + 'vtu' => 'model/vnd.vtu', + 'wrl' => 'model/vrml', + 'vrml' => 'model/vrml', + 'x3db' => 'model/x3d+binary', + 'x3dbz' => 'model/x3d+binary', + 'x3dv' => 'model/x3d+vrml', + 'x3dvz' => 'model/x3d+vrml', + 'x3d' => 'model/x3d+xml', + 'x3dz' => 'model/x3d+xml', + 'appcache' => 'text/cache-manifest', + 'ics' => 'text/calendar', + 'ifb' => 'text/calendar', + 'css' => 'text/css', + 'csv' => 'text/csv', + 'html' => 'text/html', + 'htm' => 'text/html', + 'n3' => 'text/n3', + 'txt' => 'text/plain', + 'text' => 'text/plain', + 'conf' => 'text/plain', + 'def' => 'text/plain', + 'list' => 'text/plain', + 'log' => 'text/plain', + 'in' => 'text/plain', + 'dsc' => 'text/prs.lines.tag', + 'rtx' => 'text/richtext', + 'sgml' => 'text/sgml', + 'sgm' => 'text/sgml', + 'tsv' => 'text/tab-separated-values', + 't' => 'text/troff', + 'tr' => 'text/troff', + 'roff' => 'text/troff', + 'man' => 'text/troff', + 'me' => 'text/troff', + 'ms' => 'text/troff', + 'ttl' => 'text/turtle', + 'uri' => 'text/uri-list', + 'uris' => 'text/uri-list', + 'urls' => 'text/uri-list', + 'vcard' => 'text/vcard', + 'curl' => 'text/vnd.curl', + 'dcurl' => 'text/vnd.curl.dcurl', + 'scurl' => 'text/vnd.curl.scurl', + 'mcurl' => 'text/vnd.curl.mcurl', + 'sub' => 'text/vnd.dvb.subtitle', + 'fly' => 'text/vnd.fly', + 'flx' => 'text/vnd.fmi.flexstor', + 'gv' => 'text/vnd.graphviz', + '3dml' => 'text/vnd.in3d.3dml', + 'spot' => 'text/vnd.in3d.spot', + 'jad' => 'text/vnd.sun.j2me.app-descriptor', + 'wml' => 'text/vnd.wap.wml', + 'wmls' => 'text/vnd.wap.wmlscript', + 's' => 'text/x-asm', + 'asm' => 'text/x-asm', + 'c' => 'text/x-c', + 'cc' => 'text/x-c', + 'cxx' => 'text/x-c', + 'cpp' => 'text/x-c', + 'h' => 'text/x-c', + 'hh' => 'text/x-c', + 'dic' => 'text/x-c', + 'f' => 'text/x-fortran', + 'for' => 'text/x-fortran', + 'f77' => 'text/x-fortran', + 'f90' => 'text/x-fortran', + 'java' => 'text/x-java-source', + 'opml' => 'text/x-opml', + 'p' => 'text/x-pascal', + 'pas' => 'text/x-pascal', + 'nfo' => 'text/x-nfo', + 'etx' => 'text/x-setext', + 'sfv' => 'text/x-sfv', + 'uu' => 'text/x-uuencode', + 'vcs' => 'text/x-vcalendar', + 'vcf' => 'text/x-vcard', + '3gp' => 'video/3gpp', + '3g2' => 'video/3gpp2', + 'h261' => 'video/h261', + 'h263' => 'video/h263', + 'h264' => 'video/h264', + 'jpgv' => 'video/jpeg', + 'jpm' => 'video/jpm', + 'jpgm' => 'video/jpm', + 'mj2' => 'video/mj2', + 'mjp2' => 'video/mj2', + 'mp4' => 'video/mp4', + 'mp4v' => 'video/mp4', + 'mpg4' => 'video/mp4', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpe' => 'video/mpeg', + 'm1v' => 'video/mpeg', + 'm2v' => 'video/mpeg', + 'ogv' => 'video/ogg', + 'qt' => 'video/quicktime', + 'mov' => 'video/quicktime', + 'uvh' => 'video/vnd.dece.hd', + 'uvvh' => 'video/vnd.dece.hd', + 'uvm' => 'video/vnd.dece.mobile', + 'uvvm' => 'video/vnd.dece.mobile', + 'uvp' => 'video/vnd.dece.pd', + 'uvvp' => 'video/vnd.dece.pd', + 'uvs' => 'video/vnd.dece.sd', + 'uvvs' => 'video/vnd.dece.sd', + 'uvv' => 'video/vnd.dece.video', + 'uvvv' => 'video/vnd.dece.video', + 'dvb' => 'video/vnd.dvb.file', + 'fvt' => 'video/vnd.fvt', + 'mxu' => 'video/vnd.mpegurl', + 'm4u' => 'video/vnd.mpegurl', + 'pyv' => 'video/vnd.ms-playready.media.pyv', + 'uvu' => 'video/vnd.uvvu.mp4', + 'uvvu' => 'video/vnd.uvvu.mp4', + 'viv' => 'video/vnd.vivo', + 'webm' => 'video/webm', + 'f4v' => 'video/x-f4v', + 'fli' => 'video/x-fli', + 'flv' => 'video/x-flv', + 'm4v' => 'video/x-m4v', + 'mkv' => 'video/x-matroska', + 'mk3d' => 'video/x-matroska', + 'mks' => 'video/x-matroska', + 'mng' => 'video/x-mng', + 'asf' => 'video/x-ms-asf', + 'asx' => 'video/x-ms-asf', + 'vob' => 'video/x-ms-vob', + 'wm' => 'video/x-ms-wm', + 'wmv' => 'video/x-ms-wmv', + 'wmx' => 'video/x-ms-wmx', + 'wvx' => 'video/x-ms-wvx', + 'avi' => 'video/x-msvideo', + 'movie' => 'video/x-sgi-movie', + 'smv' => 'video/x-smv', + 'ice' => 'x-conference/x-cooltalk'); +} + +?> From 180ab42c063d3e0e36e00a82ef7a383b45630c11 Mon Sep 17 00:00:00 2001 From: hkjolhede Date: Wed, 26 Dec 2012 18:00:04 +0100 Subject: [PATCH 005/719] Update apps/files_external/appinfo/app.php Adding support for SFTP --- apps/files_external/appinfo/app.php | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php index 837d35c9c6..cafd0637b8 100644 --- a/apps/files_external/appinfo/app.php +++ b/apps/files_external/appinfo/app.php @@ -14,6 +14,7 @@ OC::$CLASSPATH['OC_Filestorage_SWIFT']='apps/files_external/lib/swift.php'; OC::$CLASSPATH['OC_Filestorage_SMB']='apps/files_external/lib/smb.php'; OC::$CLASSPATH['OC_Filestorage_AmazonS3']='apps/files_external/lib/amazons3.php'; OC::$CLASSPATH['OC_Filestorage_Dropbox']='apps/files_external/lib/dropbox.php'; +OC::$CLASSPATH['OC_Filestorage_SFTP']='apps/files_external/lib/sftp.php'; OC::$CLASSPATH['OC_Mount_Config']='apps/files_external/lib/config.php'; OCP\App::registerAdmin('files_external', 'settings'); From 6aded84f10ff2818e876411594ad7fa9b0e4fe4b Mon Sep 17 00:00:00 2001 From: hkjolhede Date: Wed, 26 Dec 2012 18:03:16 +0100 Subject: [PATCH 006/719] Update apps/files_external/lib/config.php Adding support for SFTP mounts --- apps/files_external/lib/config.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 1be544fbc0..880e6d97e6 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -103,7 +103,15 @@ class OC_Mount_Config { 'user' => 'Username', 'password' => '*Password', 'root' => '&Root', - 'secure' => '!Secure https://')); + 'secure' => '!Secure https://')); + + $backends['OC_Filestorage_SFTP']=array( + 'backend' => 'SFTP', + 'configuration' => array( + 'host' => 'URL', + 'user' => 'Username', + 'password' => '*Password', + 'root' => '&Root')); return($backends); } From 30a07e95737e3bed7be1d418c49fa9b60e160e7b Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Wed, 26 Dec 2012 13:35:22 -0500 Subject: [PATCH 007/719] Save configuration after paste events and 2 seconds after typing --- apps/files_external/js/settings.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index a3abcfebb8..f2a08ed6df 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -157,8 +157,23 @@ $(document).ready(function() { return defaultMountPoint+append; } - $('#externalStorage td').live('change', function() { - OC.MountConfig.saveStorage($(this).parent()); + $('#externalStorage td').live('paste', function() { + var tr = $(this).parent(); + setTimeout(function() { + OC.MountConfig.saveStorage(tr); + }, 20); + }); + + var timer; + + $('#externalStorage td').live('keyup', function() { + clearTimeout(timer); + var tr = $(this).parent(); + if ($(this).val) { + timer = setTimeout(function() { + OC.MountConfig.saveStorage(tr); + }, 2000); + } }); $('td.remove>img').live('click', function() { From 5d68e04e5a43d6d6f52ff511f899bc831a6aa4be Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Wed, 26 Dec 2012 13:45:22 -0500 Subject: [PATCH 008/719] Change callback url for dropbox as well --- apps/files_external/js/dropbox.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_external/js/dropbox.js b/apps/files_external/js/dropbox.js index c1e3864070..cc6a37d051 100644 --- a/apps/files_external/js/dropbox.js +++ b/apps/files_external/js/dropbox.js @@ -61,7 +61,7 @@ $(document).ready(function() { var configured = $(this).parent().find('[data-parameter="configured"]'); var token = $(this).parent().find('[data-parameter="token"]'); var token_secret = $(this).parent().find('[data-parameter="token_secret"]'); - $.post(OC.filePath('files_external', 'ajax', 'dropbox.php'), { step: 1, app_key: app_key, app_secret: app_secret, callback: window.location.href }, function(result) { + $.post(OC.filePath('files_external', 'ajax', 'dropbox.php'), { step: 1, app_key: app_key, app_secret: app_secret, callback: location.protocol + '//' + location.host + location.pathname }, function(result) { if (result && result.status == 'success') { $(configured).val('false'); $(token).val(result.data.request_token); From 48a3966ea979a56e9277f588d6001c47e8a9c606 Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Wed, 26 Dec 2012 14:04:02 -0500 Subject: [PATCH 009/719] Listen to paste events for dropbox configuration --- apps/files_external/js/dropbox.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/apps/files_external/js/dropbox.js b/apps/files_external/js/dropbox.js index cc6a37d051..824c47d9f6 100644 --- a/apps/files_external/js/dropbox.js +++ b/apps/files_external/js/dropbox.js @@ -36,9 +36,20 @@ $(document).ready(function() { } }); - $('#externalStorage tbody tr input').live('keyup', function() { - var tr = $(this).parent().parent(); - if ($(tr).hasClass('OC_Filestorage_Dropbox') && $(tr).find('[data-parameter="configured"]').val() != 'true') { + $('#externalStorage tbody tr.OC_Filestorage_Dropbox td').live('paste', function() { + var tr = $(this).parent(); + setTimeout(function() { + showButton(tr); + }, 20); + }); + + $('#externalStorage tbody tr.OC_Filestorage_Dropbox td').live('keyup', function() { + showButton($(this).parent().parent()); + + }); + + function showButton(tr) { + if ($(tr).find('[data-parameter="configured"]').val() != 'true') { var config = $(tr).find('.configuration'); if ($(tr).find('.mountPoint input').val() != '' && $(config).find('[data-parameter="app_key"]').val() != '' && $(config).find('[data-parameter="app_secret"]').val() != '') { if ($(tr).find('.dropbox').length == 0) { @@ -50,7 +61,7 @@ $(document).ready(function() { $(tr).find('.dropbox').hide(); } } - }); + } $('.dropbox').live('click', function(event) { event.preventDefault(); From d9ff3b68602d511ede1fd8bf2516a842dee2cfd1 Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Wed, 26 Dec 2012 14:18:51 -0500 Subject: [PATCH 010/719] Fix last commit's variable --- apps/files_external/js/dropbox.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/files_external/js/dropbox.js b/apps/files_external/js/dropbox.js index 824c47d9f6..247d6bb8bb 100644 --- a/apps/files_external/js/dropbox.js +++ b/apps/files_external/js/dropbox.js @@ -44,8 +44,7 @@ $(document).ready(function() { }); $('#externalStorage tbody tr.OC_Filestorage_Dropbox td').live('keyup', function() { - showButton($(this).parent().parent()); - + showButton($(this).parent()); }); function showButton(tr) { From 3375253e1d85a7354975101c4a9a980049335ca7 Mon Sep 17 00:00:00 2001 From: hkjolhede Date: Wed, 26 Dec 2012 23:38:17 +0100 Subject: [PATCH 011/719] Update apps/files_external/lib/sftp.php Added checks for host keys and added exceptions thrown if constructor fails. --- apps/files_external/lib/sftp.php | 1091 ++---------------------------- 1 file changed, 74 insertions(+), 1017 deletions(-) diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index ecf4e728fe..bf9a63ad63 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -3,7 +3,7 @@ set_include_path(get_include_path() . PATH_SEPARATOR . OC::$THIRDPARTYROOT . '/3 require('Net/SFTP.php'); class OC_Filestorage_SFTP extends OC_Filestorage_Common { - private $host; + private $host; private $user; private $password; private $root; @@ -13,6 +13,10 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { private static $tempFiles = array(); public function __construct($params) { + if (!isset($params['host']) || !isset($params['user']) || !isset($params['password'])) { + throw new Exception("Required parameters not set"); + } + $this->host = $params['host']; $proto = strpos($this->host, '://'); if ($proto != false) { @@ -24,26 +28,83 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { if ($this->root[0] != '/') $this->root = '/' . $this->root; if (substr($this->root, -1, 1) != '/') $this->root .= '/'; + $host_keys = $this->read_host_keys(); + $this->client = new Net_SFTP($this->host); if (!$this->client->login($this->user, $this->password)) { - exit('Login failed'); + throw new Exception('Login failed'); + } + + $current_host_key = $this->client->getServerPublicHostKey(); + + if (array_key_exists($this->host, $host_keys)) { + if ($host_keys[$this->host] != $current_host_key) { + throw new Exception('Host public key does not match known key'); + } + } else { + $host_keys[$this->host] = $current_host_key; + $this->write_host_keys($host_keys); } } - private function path($path) { + private function abs_path($path) { return $this->root . $path; } + private function host_keys_path() { + $storage_view = \OCP\Files::getStorage('files_external'); + if ($storage_view) { + return \OCP\Config::getSystemValue('datadirectory') . + $storage_view->getAbsolutePath('') . + 'ssh_host_keys'; + } + return false; + } + + private function write_host_keys($keys) { + try { + $key_path = $this->host_keys_path(); + $fp = fopen($key_path, 'w'); + foreach ($keys as $host => $key) { + fwrite($fp, $host . '::' . $key . "\n"); + } + fclose($fp); + return true; + } catch (Exception $e) { + return false; + } + } + + private function read_host_keys() { + $key_path = $this->host_keys_path(); + if (file_exists($key_path)) { + $hosts = array(); + $keys = array(); + $lines = file($key_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if ($lines) { + foreach ($lines as $line) { + $host_key_arr = explode("::", $line, 2); + if (count($host_key_arr) == 2) { + $hosts[] = $host_key_arr[0]; + $keys[] = $host_key_arr[1]; + } + } + return array_combine($hosts, $keys); + } + } + return array(); + } + public function mkdir($path) { - return $this->client->mkdir($this->path($path)); + return $this->client->mkdir($this->abs_path($path)); } public function rmdir($path) { - return $this->client->delete($this->path($path), true); + return $this->client->delete($this->abs_path($path), true); } public function opendir($path) { - $list = $this->client->nlist($this->path($path)); + $list = $this->client->nlist($this->abs_path($path)); try { $id = md5('sftp:' . $path); OC_FakeDirStream::$dirs[$id] = array(); @@ -59,7 +120,7 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { } public function filetype($path) { - $stat = $this->client->stat($this->path($path)); + $stat = $this->client->stat($this->abs_path($path)); if ($stat['type'] == NET_SFTP_TYPE_REGULAR) return 'file'; if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) return 'dir'; return false; @@ -74,15 +135,15 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { } public function file_exists($path) { - return $this->client->stat($this->path($path)) === false ? false : true; + return $this->client->stat($this->abs_path($path)) === false ? false : true; } public function unlink($path) { - return $this->client->delete($this->path($path), true); + return $this->client->delete($this->abs_path($path), true); } public function fopen($path, $mode) { - $abs_path = $this->path($path); + $abs_path = $this->abs_path($path); switch($mode) { case 'r': case 'rb': @@ -138,7 +199,7 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { public function touch($path, $mtime=null) { if (!$this->file_exists($path)) { - $this->client->put($this->path($path), ''); + $this->client->put($this->abs_path($path), ''); } } @@ -151,1020 +212,16 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { } public function rename($source, $target) { - return $this->client->rename($this->path($source), $this->path($target)); + return $this->client->rename($this->abs_path($source), $this->abs_path($target)); } public function stat($path) { - $stat = $this->client->stat($this->path($path)); + $stat = $this->client->stat($this->abs_path($path)); $mtime = $stat ? $stat['mtime'] : -1; $size = $stat ? $stat['size'] : 0; return array('mtime' => $mtime, 'size' => $size, 'ctime' => -1); } - - public function getMimeType($path) { - if($this->is_dir($path)) { - return 'httpd/unix-directory'; - } - if (strrpos($path, '.')!==false) { - $ext=strtolower(substr($path, strrpos($path, '.')+1)); - } else { - return false; - } - - if (array_key_exists($ext, self::$mimeTypes)) { - return self::$mimeTypes[$ext]; - } - - return false; - } - - - public static $mimeTypes = array( - 'ez' => 'application/andrew-inset', - 'aw' => 'application/applixware', - 'atom' => 'application/atom+xml', - 'atomcat' => 'application/atomcat+xml', - 'atomsvc' => 'application/atomsvc+xml', - 'ccxml' => 'application/ccxml+xml', - 'cdmia' => 'application/cdmi-capability', - 'cdmic' => 'application/cdmi-container', - 'cdmid' => 'application/cdmi-domain', - 'cdmio' => 'application/cdmi-object', - 'cdmiq' => 'application/cdmi-queue', - 'cu' => 'application/cu-seeme', - 'davmount' => 'application/davmount+xml', - 'dbk' => 'application/docbook+xml', - 'dssc' => 'application/dssc+der', - 'xdssc' => 'application/dssc+xml', - 'ecma' => 'application/ecmascript', - 'emma' => 'application/emma+xml', - 'epub' => 'application/epub+zip', - 'exi' => 'application/exi', - 'pfr' => 'application/font-tdpfr', - 'gml' => 'application/gml+xml', - 'gpx' => 'application/gpx+xml', - 'gxf' => 'application/gxf', - 'stk' => 'application/hyperstudio', - 'ink' => 'application/inkml+xml', - 'inkml' => 'application/inkml+xml', - 'ipfix' => 'application/ipfix', - 'jar' => 'application/java-archive', - 'ser' => 'application/java-serialized-object', - 'class' => 'application/java-vm', - 'js' => 'application/javascript', - 'json' => 'application/json', - 'jsonml' => 'application/jsonml+json', - 'lostxml' => 'application/lost+xml', - 'hqx' => 'application/mac-binhex40', - 'cpt' => 'application/mac-compactpro', - 'mads' => 'application/mads+xml', - 'mrc' => 'application/marc', - 'mrcx' => 'application/marcxml+xml', - 'ma' => 'application/mathematica', - 'nb' => 'application/mathematica', - 'mb' => 'application/mathematica', - 'mathml' => 'application/mathml+xml', - 'mbox' => 'application/mbox', - 'mscml' => 'application/mediaservercontrol+xml', - 'metalink' => 'application/metalink+xml', - 'meta4' => 'application/metalink4+xml', - 'mets' => 'application/mets+xml', - 'mods' => 'application/mods+xml', - 'm21' => 'application/mp21', - 'mp21' => 'application/mp21', - 'mp4s' => 'application/mp4', - 'doc' => 'application/msword', - 'dot' => 'application/msword', - 'mxf' => 'application/mxf', - 'bin' => 'application/octet-stream', - 'dms' => 'application/octet-stream', - 'lrf' => 'application/octet-stream', - 'mar' => 'application/octet-stream', - 'so' => 'application/octet-stream', - 'dist' => 'application/octet-stream', - 'distz' => 'application/octet-stream', - 'pkg' => 'application/octet-stream', - 'bpk' => 'application/octet-stream', - 'dump' => 'application/octet-stream', - 'elc' => 'application/octet-stream', - 'deploy' => 'application/octet-stream', - 'oda' => 'application/oda', - 'opf' => 'application/oebps-package+xml', - 'ogx' => 'application/ogg', - 'omdoc' => 'application/omdoc+xml', - 'onetoc' => 'application/onenote', - 'onetoc2' => 'application/onenote', - 'onetmp' => 'application/onenote', - 'onepkg' => 'application/onenote', - 'oxps' => 'application/oxps', - 'xer' => 'application/patch-ops-error+xml', - 'pdf' => 'application/pdf', - 'pgp' => 'application/pgp-encrypted', - 'asc' => 'application/pgp-signature', - 'sig' => 'application/pgp-signature', - 'prf' => 'application/pics-rules', - 'p10' => 'application/pkcs10', - 'p7m' => 'application/pkcs7-mime', - 'p7c' => 'application/pkcs7-mime', - 'p7s' => 'application/pkcs7-signature', - 'p8' => 'application/pkcs8', - 'ac' => 'application/pkix-attr-cert', - 'cer' => 'application/pkix-cert', - 'crl' => 'application/pkix-crl', - 'pkipath' => 'application/pkix-pkipath', - 'pki' => 'application/pkixcmp', - 'pls' => 'application/pls+xml', - 'ai' => 'application/postscript', - 'eps' => 'application/postscript', - 'ps' => 'application/postscript', - 'cww' => 'application/prs.cww', - 'pskcxml' => 'application/pskc+xml', - 'rdf' => 'application/rdf+xml', - 'rif' => 'application/reginfo+xml', - 'rnc' => 'application/relax-ng-compact-syntax', - 'rl' => 'application/resource-lists+xml', - 'rld' => 'application/resource-lists-diff+xml', - 'rs' => 'application/rls-services+xml', - 'gbr' => 'application/rpki-ghostbusters', - 'mft' => 'application/rpki-manifest', - 'roa' => 'application/rpki-roa', - 'rsd' => 'application/rsd+xml', - 'rss' => 'application/rss+xml', - 'rtf' => 'application/rtf', - 'sbml' => 'application/sbml+xml', - 'scq' => 'application/scvp-cv-request', - 'scs' => 'application/scvp-cv-response', - 'spq' => 'application/scvp-vp-request', - 'spp' => 'application/scvp-vp-response', - 'sdp' => 'application/sdp', - 'setpay' => 'application/set-payment-initiation', - 'setreg' => 'application/set-registration-initiation', - 'shf' => 'application/shf+xml', - 'smi' => 'application/smil+xml', - 'smil' => 'application/smil+xml', - 'rq' => 'application/sparql-query', - 'srx' => 'application/sparql-results+xml', - 'gram' => 'application/srgs', - 'grxml' => 'application/srgs+xml', - 'sru' => 'application/sru+xml', - 'ssdl' => 'application/ssdl+xml', - 'ssml' => 'application/ssml+xml', - 'tei' => 'application/tei+xml', - 'teicorpus' => 'application/tei+xml', - 'tfi' => 'application/thraud+xml', - 'tsd' => 'application/timestamped-data', - 'plb' => 'application/vnd.3gpp.pic-bw-large', - 'psb' => 'application/vnd.3gpp.pic-bw-small', - 'pvb' => 'application/vnd.3gpp.pic-bw-var', - 'tcap' => 'application/vnd.3gpp2.tcap', - 'pwn' => 'application/vnd.3m.post-it-notes', - 'aso' => 'application/vnd.accpac.simply.aso', - 'imp' => 'application/vnd.accpac.simply.imp', - 'acu' => 'application/vnd.acucobol', - 'atc' => 'application/vnd.acucorp', - 'acutc' => 'application/vnd.acucorp', - 'air' => 'application/vnd.adobe.air-application-installer-package+zip', - 'fcdt' => 'application/vnd.adobe.formscentral.fcdt', - 'fxp' => 'application/vnd.adobe.fxp', - 'fxpl' => 'application/vnd.adobe.fxp', - 'xdp' => 'application/vnd.adobe.xdp+xml', - 'xfdf' => 'application/vnd.adobe.xfdf', - 'ahead' => 'application/vnd.ahead.space', - 'azf' => 'application/vnd.airzip.filesecure.azf', - 'azs' => 'application/vnd.airzip.filesecure.azs', - 'azw' => 'application/vnd.amazon.ebook', - 'acc' => 'application/vnd.americandynamics.acc', - 'ami' => 'application/vnd.amiga.ami', - 'apk' => 'application/vnd.android.package-archive', - 'cii' => 'application/vnd.anser-web-certificate-issue-initiation', - 'fti' => 'application/vnd.anser-web-funds-transfer-initiation', - 'atx' => 'application/vnd.antix.game-component', - 'mpkg' => 'application/vnd.apple.installer+xml', - 'm3u8' => 'application/vnd.apple.mpegurl', - 'swi' => 'application/vnd.aristanetworks.swi', - 'iota' => 'application/vnd.astraea-software.iota', - 'aep' => 'application/vnd.audiograph', - 'mpm' => 'application/vnd.blueice.multipass', - 'bmi' => 'application/vnd.bmi', - 'rep' => 'application/vnd.businessobjects', - 'cdxml' => 'application/vnd.chemdraw+xml', - 'mmd' => 'application/vnd.chipnuts.karaoke-mmd', - 'cdy' => 'application/vnd.cinderella', - 'cla' => 'application/vnd.claymore', - 'rp9' => 'application/vnd.cloanto.rp9', - 'c4g' => 'application/vnd.clonk.c4group', - 'c4d' => 'application/vnd.clonk.c4group', - 'c4f' => 'application/vnd.clonk.c4group', - 'c4p' => 'application/vnd.clonk.c4group', - 'c4u' => 'application/vnd.clonk.c4group', - 'c11amc' => 'application/vnd.cluetrust.cartomobile-config', - 'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg', - 'csp' => 'application/vnd.commonspace', - 'cdbcmsg' => 'application/vnd.contact.cmsg', - 'cmc' => 'application/vnd.cosmocaller', - 'clkx' => 'application/vnd.crick.clicker', - 'clkk' => 'application/vnd.crick.clicker.keyboard', - 'clkp' => 'application/vnd.crick.clicker.palette', - 'clkt' => 'application/vnd.crick.clicker.template', - 'clkw' => 'application/vnd.crick.clicker.wordbank', - 'wbs' => 'application/vnd.criticaltools.wbs+xml', - 'pml' => 'application/vnd.ctc-posml', - 'ppd' => 'application/vnd.cups-ppd', - 'car' => 'application/vnd.curl.car', - 'pcurl' => 'application/vnd.curl.pcurl', - 'dart' => 'application/vnd.dart', - 'rdz' => 'application/vnd.data-vision.rdz', - 'uvf' => 'application/vnd.dece.data', - 'uvvf' => 'application/vnd.dece.data', - 'uvd' => 'application/vnd.dece.data', - 'uvvd' => 'application/vnd.dece.data', - 'uvt' => 'application/vnd.dece.ttml+xml', - 'uvvt' => 'application/vnd.dece.ttml+xml', - 'uvx' => 'application/vnd.dece.unspecified', - 'uvvx' => 'application/vnd.dece.unspecified', - 'uvz' => 'application/vnd.dece.zip', - 'uvvz' => 'application/vnd.dece.zip', - 'fe_launch' => 'application/vnd.denovo.fcselayout-link', - 'dna' => 'application/vnd.dna', - 'mlp' => 'application/vnd.dolby.mlp', - 'dpg' => 'application/vnd.dpgraph', - 'dfac' => 'application/vnd.dreamfactory', - 'kpxx' => 'application/vnd.ds-keypoint', - 'ait' => 'application/vnd.dvb.ait', - 'svc' => 'application/vnd.dvb.service', - 'geo' => 'application/vnd.dynageo', - 'mag' => 'application/vnd.ecowin.chart', - 'nml' => 'application/vnd.enliven', - 'esf' => 'application/vnd.epson.esf', - 'msf' => 'application/vnd.epson.msf', - 'qam' => 'application/vnd.epson.quickanime', - 'slt' => 'application/vnd.epson.salt', - 'ssf' => 'application/vnd.epson.ssf', - 'es3' => 'application/vnd.eszigno3+xml', - 'et3' => 'application/vnd.eszigno3+xml', - 'ez2' => 'application/vnd.ezpix-album', - 'ez3' => 'application/vnd.ezpix-package', - 'fdf' => 'application/vnd.fdf', - 'mseed' => 'application/vnd.fdsn.mseed', - 'seed' => 'application/vnd.fdsn.seed', - 'dataless' => 'application/vnd.fdsn.seed', - 'gph' => 'application/vnd.flographit', - 'ftc' => 'application/vnd.fluxtime.clip', - 'fm' => 'application/vnd.framemaker', - 'frame' => 'application/vnd.framemaker', - 'maker' => 'application/vnd.framemaker', - 'book' => 'application/vnd.framemaker', - 'fnc' => 'application/vnd.frogans.fnc', - 'ltf' => 'application/vnd.frogans.ltf', - 'fsc' => 'application/vnd.fsc.weblaunch', - 'oas' => 'application/vnd.fujitsu.oasys', - 'oa2' => 'application/vnd.fujitsu.oasys2', - 'oa3' => 'application/vnd.fujitsu.oasys3', - 'fg5' => 'application/vnd.fujitsu.oasysgp', - 'bh2' => 'application/vnd.fujitsu.oasysprs', - 'ddd' => 'application/vnd.fujixerox.ddd', - 'xdw' => 'application/vnd.fujixerox.docuworks', - 'xbd' => 'application/vnd.fujixerox.docuworks.binder', - 'fzs' => 'application/vnd.fuzzysheet', - 'txd' => 'application/vnd.genomatix.tuxedo', - 'ggb' => 'application/vnd.geogebra.file', - 'ggt' => 'application/vnd.geogebra.tool', - 'gex' => 'application/vnd.geometry-explorer', - 'gre' => 'application/vnd.geometry-explorer', - 'gxt' => 'application/vnd.geonext', - 'g2w' => 'application/vnd.geoplan', - 'g3w' => 'application/vnd.geospace', - 'gmx' => 'application/vnd.gmx', - 'kml' => 'application/vnd.google-earth.kml+xml', - 'kmz' => 'application/vnd.google-earth.kmz', - 'gqf' => 'application/vnd.grafeq', - 'gqs' => 'application/vnd.grafeq', - 'gac' => 'application/vnd.groove-account', - 'ghf' => 'application/vnd.groove-help', - 'gim' => 'application/vnd.groove-identity-message', - 'grv' => 'application/vnd.groove-injector', - 'gtm' => 'application/vnd.groove-tool-message', - 'tpl' => 'application/vnd.groove-tool-template', - 'vcg' => 'application/vnd.groove-vcard', - 'hal' => 'application/vnd.hal+xml', - 'zmm' => 'application/vnd.handheld-entertainment+xml', - 'hbci' => 'application/vnd.hbci', - 'les' => 'application/vnd.hhe.lesson-player', - 'hpgl' => 'application/vnd.hp-hpgl', - 'hpid' => 'application/vnd.hp-hpid', - 'hps' => 'application/vnd.hp-hps', - 'jlt' => 'application/vnd.hp-jlyt', - 'pcl' => 'application/vnd.hp-pcl', - 'pclxl' => 'application/vnd.hp-pclxl', - 'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data', - 'mpy' => 'application/vnd.ibm.minipay', - 'afp' => 'application/vnd.ibm.modcap', - 'listafp' => 'application/vnd.ibm.modcap', - 'list3820' => 'application/vnd.ibm.modcap', - 'irm' => 'application/vnd.ibm.rights-management', - 'sc' => 'application/vnd.ibm.secure-container', - 'icc' => 'application/vnd.iccprofile', - 'icm' => 'application/vnd.iccprofile', - 'igl' => 'application/vnd.igloader', - 'ivp' => 'application/vnd.immervision-ivp', - 'ivu' => 'application/vnd.immervision-ivu', - 'igm' => 'application/vnd.insors.igm', - 'xpw' => 'application/vnd.intercon.formnet', - 'xpx' => 'application/vnd.intercon.formnet', - 'i2g' => 'application/vnd.intergeo', - 'qbo' => 'application/vnd.intu.qbo', - 'qfx' => 'application/vnd.intu.qfx', - 'rcprofile' => 'application/vnd.ipunplugged.rcprofile', - 'irp' => 'application/vnd.irepository.package+xml', - 'xpr' => 'application/vnd.is-xpr', - 'fcs' => 'application/vnd.isac.fcs', - 'jam' => 'application/vnd.jam', - 'rms' => 'application/vnd.jcp.javame.midlet-rms', - 'jisp' => 'application/vnd.jisp', - 'joda' => 'application/vnd.joost.joda-archive', - 'ktz' => 'application/vnd.kahootz', - 'ktr' => 'application/vnd.kahootz', - 'karbon' => 'application/vnd.kde.karbon', - 'chrt' => 'application/vnd.kde.kchart', - 'kfo' => 'application/vnd.kde.kformula', - 'flw' => 'application/vnd.kde.kivio', - 'kon' => 'application/vnd.kde.kontour', - 'kpr' => 'application/vnd.kde.kpresenter', - 'kpt' => 'application/vnd.kde.kpresenter', - 'ksp' => 'application/vnd.kde.kspread', - 'kwd' => 'application/vnd.kde.kword', - 'kwt' => 'application/vnd.kde.kword', - 'htke' => 'application/vnd.kenameaapp', - 'kia' => 'application/vnd.kidspiration', - 'kne' => 'application/vnd.kinar', - 'knp' => 'application/vnd.kinar', - 'skp' => 'application/vnd.koan', - 'skd' => 'application/vnd.koan', - 'skt' => 'application/vnd.koan', - 'skm' => 'application/vnd.koan', - 'sse' => 'application/vnd.kodak-descriptor', - 'lasxml' => 'application/vnd.las.las+xml', - 'lbd' => 'application/vnd.llamagraphics.life-balance.desktop', - 'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml', - '123' => 'application/vnd.lotus-1-2-3', - 'apr' => 'application/vnd.lotus-approach', - 'pre' => 'application/vnd.lotus-freelance', - 'nsf' => 'application/vnd.lotus-notes', - 'org' => 'application/vnd.lotus-organizer', - 'scm' => 'application/vnd.lotus-screencam', - 'lwp' => 'application/vnd.lotus-wordpro', - 'portpkg' => 'application/vnd.macports.portpkg', - 'mcd' => 'application/vnd.mcd', - 'mc1' => 'application/vnd.medcalcdata', - 'cdkey' => 'application/vnd.mediastation.cdkey', - 'mwf' => 'application/vnd.mfer', - 'mfm' => 'application/vnd.mfmp', - 'flo' => 'application/vnd.micrografx.flo', - 'igx' => 'application/vnd.micrografx.igx', - 'mif' => 'application/vnd.mif', - 'daf' => 'application/vnd.mobius.daf', - 'dis' => 'application/vnd.mobius.dis', - 'mbk' => 'application/vnd.mobius.mbk', - 'mqy' => 'application/vnd.mobius.mqy', - 'msl' => 'application/vnd.mobius.msl', - 'plc' => 'application/vnd.mobius.plc', - 'txf' => 'application/vnd.mobius.txf', - 'mpn' => 'application/vnd.mophun.application', - 'mpc' => 'application/vnd.mophun.certificate', - 'xul' => 'application/vnd.mozilla.xul+xml', - 'cil' => 'application/vnd.ms-artgalry', - 'cab' => 'application/vnd.ms-cab-compressed', - 'xls' => 'application/vnd.ms-excel', - 'xlm' => 'application/vnd.ms-excel', - 'xla' => 'application/vnd.ms-excel', - 'xlc' => 'application/vnd.ms-excel', - 'xlt' => 'application/vnd.ms-excel', - 'xlw' => 'application/vnd.ms-excel', - 'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12', - 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12', - 'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12', - 'xltm' => 'application/vnd.ms-excel.template.macroenabled.12', - 'eot' => 'application/vnd.ms-fontobject', - 'chm' => 'application/vnd.ms-htmlhelp', - 'ims' => 'application/vnd.ms-ims', - 'lrm' => 'application/vnd.ms-lrm', - 'thmx' => 'application/vnd.ms-officetheme', - 'cat' => 'application/vnd.ms-pki.seccat', - 'stl' => 'application/vnd.ms-pki.stl', - 'ppt' => 'application/vnd.ms-powerpoint', - 'pps' => 'application/vnd.ms-powerpoint', - 'pot' => 'application/vnd.ms-powerpoint', - 'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12', - 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12', - 'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12', - 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', - 'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12', - 'mpp' => 'application/vnd.ms-project', - 'mpt' => 'application/vnd.ms-project', - 'docm' => 'application/vnd.ms-word.document.macroenabled.12', - 'dotm' => 'application/vnd.ms-word.template.macroenabled.12', - 'wps' => 'application/vnd.ms-works', - 'wks' => 'application/vnd.ms-works', - 'wcm' => 'application/vnd.ms-works', - 'wdb' => 'application/vnd.ms-works', - 'wpl' => 'application/vnd.ms-wpl', - 'xps' => 'application/vnd.ms-xpsdocument', - 'mseq' => 'application/vnd.mseq', - 'mus' => 'application/vnd.musician', - 'msty' => 'application/vnd.muvee.style', - 'taglet' => 'application/vnd.mynfc', - 'nlu' => 'application/vnd.neurolanguage.nlu', - 'ntf' => 'application/vnd.nitf', - 'nitf' => 'application/vnd.nitf', - 'nnd' => 'application/vnd.noblenet-directory', - 'nns' => 'application/vnd.noblenet-sealer', - 'nnw' => 'application/vnd.noblenet-web', - 'ngdat' => 'application/vnd.nokia.n-gage.data', - 'n-gage' => 'application/vnd.nokia.n-gage.symbian.install', - 'rpst' => 'application/vnd.nokia.radio-preset', - 'rpss' => 'application/vnd.nokia.radio-presets', - 'edm' => 'application/vnd.novadigm.edm', - 'edx' => 'application/vnd.novadigm.edx', - 'ext' => 'application/vnd.novadigm.ext', - 'odc' => 'application/vnd.oasis.opendocument.chart', - 'otc' => 'application/vnd.oasis.opendocument.chart-template', - 'odb' => 'application/vnd.oasis.opendocument.database', - 'odf' => 'application/vnd.oasis.opendocument.formula', - 'odft' => 'application/vnd.oasis.opendocument.formula-template', - 'odg' => 'application/vnd.oasis.opendocument.graphics', - 'otg' => 'application/vnd.oasis.opendocument.graphics-template', - 'odi' => 'application/vnd.oasis.opendocument.image', - 'oti' => 'application/vnd.oasis.opendocument.image-template', - 'odp' => 'application/vnd.oasis.opendocument.presentation', - 'otp' => 'application/vnd.oasis.opendocument.presentation-template', - 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', - 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', - 'odt' => 'application/vnd.oasis.opendocument.text', - 'odm' => 'application/vnd.oasis.opendocument.text-master', - 'ott' => 'application/vnd.oasis.opendocument.text-template', - 'oth' => 'application/vnd.oasis.opendocument.text-web', - 'xo' => 'application/vnd.olpc-sugar', - 'dd2' => 'application/vnd.oma.dd2+xml', - 'oxt' => 'application/vnd.openofficeorg.extension', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', - 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', - 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', - 'mgp' => 'application/vnd.osgeo.mapguide.package', - 'dp' => 'application/vnd.osgi.dp', - 'esa' => 'application/vnd.osgi.subsystem', - 'pdb' => 'application/vnd.palm', - 'pqa' => 'application/vnd.palm', - 'oprc' => 'application/vnd.palm', - 'paw' => 'application/vnd.pawaafile', - 'str' => 'application/vnd.pg.format', - 'ei6' => 'application/vnd.pg.osasli', - 'efif' => 'application/vnd.picsel', - 'wg' => 'application/vnd.pmi.widget', - 'plf' => 'application/vnd.pocketlearn', - 'pbd' => 'application/vnd.powerbuilder6', - 'box' => 'application/vnd.previewsystems.box', - 'mgz' => 'application/vnd.proteus.magazine', - 'qps' => 'application/vnd.publishare-delta-tree', - 'ptid' => 'application/vnd.pvi.ptid1', - 'qxd' => 'application/vnd.quark.quarkxpress', - 'qxt' => 'application/vnd.quark.quarkxpress', - 'qwd' => 'application/vnd.quark.quarkxpress', - 'qwt' => 'application/vnd.quark.quarkxpress', - 'qxl' => 'application/vnd.quark.quarkxpress', - 'qxb' => 'application/vnd.quark.quarkxpress', - 'bed' => 'application/vnd.realvnc.bed', - 'mxl' => 'application/vnd.recordare.musicxml', - 'musicxml' => 'application/vnd.recordare.musicxml+xml', - 'cryptonote' => 'application/vnd.rig.cryptonote', - 'cod' => 'application/vnd.rim.cod', - 'rm' => 'application/vnd.rn-realmedia', - 'rmvb' => 'application/vnd.rn-realmedia-vbr', - 'link66' => 'application/vnd.route66.link66+xml', - 'st' => 'application/vnd.sailingtracker.track', - 'see' => 'application/vnd.seemail', - 'sema' => 'application/vnd.sema', - 'semd' => 'application/vnd.semd', - 'semf' => 'application/vnd.semf', - 'ifm' => 'application/vnd.shana.informed.formdata', - 'itp' => 'application/vnd.shana.informed.formtemplate', - 'iif' => 'application/vnd.shana.informed.interchange', - 'ipk' => 'application/vnd.shana.informed.package', - 'twd' => 'application/vnd.simtech-mindmapper', - 'twds' => 'application/vnd.simtech-mindmapper', - 'mmf' => 'application/vnd.smaf', - 'teacher' => 'application/vnd.smart.teacher', - 'sdkm' => 'application/vnd.solent.sdkm+xml', - 'sdkd' => 'application/vnd.solent.sdkm+xml', - 'dxp' => 'application/vnd.spotfire.dxp', - 'sfs' => 'application/vnd.spotfire.sfs', - 'sdc' => 'application/vnd.stardivision.calc', - 'sda' => 'application/vnd.stardivision.draw', - 'sdd' => 'application/vnd.stardivision.impress', - 'smf' => 'application/vnd.stardivision.math', - 'sdw' => 'application/vnd.stardivision.writer', - 'vor' => 'application/vnd.stardivision.writer', - 'sgl' => 'application/vnd.stardivision.writer-global', - 'smzip' => 'application/vnd.stepmania.package', - 'sm' => 'application/vnd.stepmania.stepchart', - 'sxc' => 'application/vnd.sun.xml.calc', - 'stc' => 'application/vnd.sun.xml.calc.template', - 'sxd' => 'application/vnd.sun.xml.draw', - 'std' => 'application/vnd.sun.xml.draw.template', - 'sxi' => 'application/vnd.sun.xml.impress', - 'sti' => 'application/vnd.sun.xml.impress.template', - 'sxm' => 'application/vnd.sun.xml.math', - 'sxw' => 'application/vnd.sun.xml.writer', - 'sxg' => 'application/vnd.sun.xml.writer.global', - 'stw' => 'application/vnd.sun.xml.writer.template', - 'sus' => 'application/vnd.sus-calendar', - 'susp' => 'application/vnd.sus-calendar', - 'svd' => 'application/vnd.svd', - 'sis' => 'application/vnd.symbian.install', - 'sisx' => 'application/vnd.symbian.install', - 'xsm' => 'application/vnd.syncml+xml', - 'bdm' => 'application/vnd.syncml.dm+wbxml', - 'xdm' => 'application/vnd.syncml.dm+xml', - 'tao' => 'application/vnd.tao.intent-module-archive', - 'pcap' => 'application/vnd.tcpdump.pcap', - 'cap' => 'application/vnd.tcpdump.pcap', - 'dmp' => 'application/vnd.tcpdump.pcap', - 'tmo' => 'application/vnd.tmobile-livetv', - 'tpt' => 'application/vnd.trid.tpt', - 'mxs' => 'application/vnd.triscape.mxs', - 'tra' => 'application/vnd.trueapp', - 'ufd' => 'application/vnd.ufdl', - 'ufdl' => 'application/vnd.ufdl', - 'utz' => 'application/vnd.uiq.theme', - 'umj' => 'application/vnd.umajin', - 'unityweb' => 'application/vnd.unity', - 'uoml' => 'application/vnd.uoml+xml', - 'vcx' => 'application/vnd.vcx', - 'vsd' => 'application/vnd.visio', - 'vst' => 'application/vnd.visio', - 'vss' => 'application/vnd.visio', - 'vsw' => 'application/vnd.visio', - 'vis' => 'application/vnd.visionary', - 'vsf' => 'application/vnd.vsf', - 'wbxml' => 'application/vnd.wap.wbxml', - 'wmlc' => 'application/vnd.wap.wmlc', - 'wmlsc' => 'application/vnd.wap.wmlscriptc', - 'wtb' => 'application/vnd.webturbo', - 'nbp' => 'application/vnd.wolfram.player', - 'wpd' => 'application/vnd.wordperfect', - 'wqd' => 'application/vnd.wqd', - 'stf' => 'application/vnd.wt.stf', - 'xar' => 'application/vnd.xara', - 'xfdl' => 'application/vnd.xfdl', - 'hvd' => 'application/vnd.yamaha.hv-dic', - 'hvs' => 'application/vnd.yamaha.hv-script', - 'hvp' => 'application/vnd.yamaha.hv-voice', - 'osf' => 'application/vnd.yamaha.openscoreformat', - 'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml', - 'saf' => 'application/vnd.yamaha.smaf-audio', - 'spf' => 'application/vnd.yamaha.smaf-phrase', - 'cmp' => 'application/vnd.yellowriver-custom-menu', - 'zir' => 'application/vnd.zul', - 'zirz' => 'application/vnd.zul', - 'zaz' => 'application/vnd.zzazz.deck+xml', - 'vxml' => 'application/voicexml+xml', - 'wgt' => 'application/widget', - 'hlp' => 'application/winhlp', - 'wsdl' => 'application/wsdl+xml', - 'wspolicy' => 'application/wspolicy+xml', - '7z' => 'application/x-7z-compressed', - 'abw' => 'application/x-abiword', - 'ace' => 'application/x-ace-compressed', - 'dmg' => 'application/x-apple-diskimage', - 'aab' => 'application/x-authorware-bin', - 'x32' => 'application/x-authorware-bin', - 'u32' => 'application/x-authorware-bin', - 'vox' => 'application/x-authorware-bin', - 'aam' => 'application/x-authorware-map', - 'aas' => 'application/x-authorware-seg', - 'bcpio' => 'application/x-bcpio', - 'torrent' => 'application/x-bittorrent', - 'blb' => 'application/x-blorb', - 'blorb' => 'application/x-blorb', - 'bz' => 'application/x-bzip', - 'bz2' => 'application/x-bzip2', - 'boz' => 'application/x-bzip2', - 'cbr' => 'application/x-cbr', - 'cba' => 'application/x-cbr', - 'cbt' => 'application/x-cbr', - 'cbz' => 'application/x-cbr', - 'cb7' => 'application/x-cbr', - 'vcd' => 'application/x-cdlink', - 'cfs' => 'application/x-cfs-compressed', - 'chat' => 'application/x-chat', - 'pgn' => 'application/x-chess-pgn', - 'nsc' => 'application/x-conference', - 'cpio' => 'application/x-cpio', - 'csh' => 'application/x-csh', - 'deb' => 'application/x-debian-package', - 'udeb' => 'application/x-debian-package', - 'dgc' => 'application/x-dgc-compressed', - 'dir' => 'application/x-director', - 'dcr' => 'application/x-director', - 'dxr' => 'application/x-director', - 'cst' => 'application/x-director', - 'cct' => 'application/x-director', - 'cxt' => 'application/x-director', - 'w3d' => 'application/x-director', - 'fgd' => 'application/x-director', - 'swa' => 'application/x-director', - 'wad' => 'application/x-doom', - 'ncx' => 'application/x-dtbncx+xml', - 'dtb' => 'application/x-dtbook+xml', - 'res' => 'application/x-dtbresource+xml', - 'dvi' => 'application/x-dvi', - 'evy' => 'application/x-envoy', - 'eva' => 'application/x-eva', - 'bdf' => 'application/x-font-bdf', - 'gsf' => 'application/x-font-ghostscript', - 'psf' => 'application/x-font-linux-psf', - 'otf' => 'application/x-font-otf', - 'pcf' => 'application/x-font-pcf', - 'snf' => 'application/x-font-snf', - 'ttf' => 'application/x-font-ttf', - 'ttc' => 'application/x-font-ttf', - 'pfa' => 'application/x-font-type1', - 'pfb' => 'application/x-font-type1', - 'pfm' => 'application/x-font-type1', - 'afm' => 'application/x-font-type1', - 'woff' => 'application/x-font-woff', - 'arc' => 'application/x-freearc', - 'spl' => 'application/x-futuresplash', - 'gca' => 'application/x-gca-compressed', - 'ulx' => 'application/x-glulx', - 'gnumeric' => 'application/x-gnumeric', - 'gramps' => 'application/x-gramps-xml', - 'gtar' => 'application/x-gtar', - 'hdf' => 'application/x-hdf', - 'install' => 'application/x-install-instructions', - 'iso' => 'application/x-iso9660-image', - 'jnlp' => 'application/x-java-jnlp-file', - 'latex' => 'application/x-latex', - 'lzh' => 'application/x-lzh-compressed', - 'lha' => 'application/x-lzh-compressed', - 'mie' => 'application/x-mie', - 'prc' => 'application/x-mobipocket-ebook', - 'mobi' => 'application/x-mobipocket-ebook', - 'application' => 'application/x-ms-application', - 'lnk' => 'application/x-ms-shortcut', - 'wmd' => 'application/x-ms-wmd', - 'wmz' => 'application/x-ms-wmz', - 'xbap' => 'application/x-ms-xbap', - 'mdb' => 'application/x-msaccess', - 'obd' => 'application/x-msbinder', - 'crd' => 'application/x-mscardfile', - 'clp' => 'application/x-msclip', - 'exe' => 'application/x-msdownload', - 'dll' => 'application/x-msdownload', - 'com' => 'application/x-msdownload', - 'bat' => 'application/x-msdownload', - 'msi' => 'application/x-msdownload', - 'mvb' => 'application/x-msmediaview', - 'm13' => 'application/x-msmediaview', - 'm14' => 'application/x-msmediaview', - 'wmf' => 'application/x-msmetafile', - 'wmz' => 'application/x-msmetafile', - 'emf' => 'application/x-msmetafile', - 'emz' => 'application/x-msmetafile', - 'mny' => 'application/x-msmoney', - 'pub' => 'application/x-mspublisher', - 'scd' => 'application/x-msschedule', - 'trm' => 'application/x-msterminal', - 'wri' => 'application/x-mswrite', - 'nc' => 'application/x-netcdf', - 'cdf' => 'application/x-netcdf', - 'nzb' => 'application/x-nzb', - 'p12' => 'application/x-pkcs12', - 'pfx' => 'application/x-pkcs12', - 'p7b' => 'application/x-pkcs7-certificates', - 'spc' => 'application/x-pkcs7-certificates', - 'p7r' => 'application/x-pkcs7-certreqresp', - 'rar' => 'application/x-rar-compressed', - 'ris' => 'application/x-research-info-systems', - 'sh' => 'application/x-sh', - 'shar' => 'application/x-shar', - 'swf' => 'application/x-shockwave-flash', - 'xap' => 'application/x-silverlight-app', - 'sql' => 'application/x-sql', - 'sit' => 'application/x-stuffit', - 'sitx' => 'application/x-stuffitx', - 'srt' => 'application/x-subrip', - 'sv4cpio' => 'application/x-sv4cpio', - 'sv4crc' => 'application/x-sv4crc', - 't3' => 'application/x-t3vm-image', - 'gam' => 'application/x-tads', - 'tar' => 'application/x-tar', - 'tcl' => 'application/x-tcl', - 'tex' => 'application/x-tex', - 'tfm' => 'application/x-tex-tfm', - 'texinfo' => 'application/x-texinfo', - 'texi' => 'application/x-texinfo', - 'obj' => 'application/x-tgif', - 'ustar' => 'application/x-ustar', - 'src' => 'application/x-wais-source', - 'der' => 'application/x-x509-ca-cert', - 'crt' => 'application/x-x509-ca-cert', - 'fig' => 'application/x-xfig', - 'xlf' => 'application/x-xliff+xml', - 'xpi' => 'application/x-xpinstall', - 'xz' => 'application/x-xz', - 'z1' => 'application/x-zmachine', - 'z2' => 'application/x-zmachine', - 'z3' => 'application/x-zmachine', - 'z4' => 'application/x-zmachine', - 'z5' => 'application/x-zmachine', - 'z6' => 'application/x-zmachine', - 'z7' => 'application/x-zmachine', - 'z8' => 'application/x-zmachine', - 'xaml' => 'application/xaml+xml', - 'xdf' => 'application/xcap-diff+xml', - 'xenc' => 'application/xenc+xml', - 'xhtml' => 'application/xhtml+xml', - 'xht' => 'application/xhtml+xml', - 'xml' => 'application/xml', - 'xsl' => 'application/xml', - 'dtd' => 'application/xml-dtd', - 'xop' => 'application/xop+xml', - 'xpl' => 'application/xproc+xml', - 'xslt' => 'application/xslt+xml', - 'xspf' => 'application/xspf+xml', - 'mxml' => 'application/xv+xml', - 'xhvml' => 'application/xv+xml', - 'xvml' => 'application/xv+xml', - 'xvm' => 'application/xv+xml', - 'yang' => 'application/yang', - 'yin' => 'application/yin+xml', - 'zip' => 'application/zip', - 'adp' => 'audio/adpcm', - 'au' => 'audio/basic', - 'snd' => 'audio/basic', - 'mid' => 'audio/midi', - 'midi' => 'audio/midi', - 'kar' => 'audio/midi', - 'rmi' => 'audio/midi', - 'mp4a' => 'audio/mp4', - 'mpga' => 'audio/mpeg', - 'mp2' => 'audio/mpeg', - 'mp2a' => 'audio/mpeg', - 'mp3' => 'audio/mpeg', - 'm2a' => 'audio/mpeg', - 'm3a' => 'audio/mpeg', - 'oga' => 'audio/ogg', - 'ogg' => 'audio/ogg', - 'spx' => 'audio/ogg', - 's3m' => 'audio/s3m', - 'sil' => 'audio/silk', - 'uva' => 'audio/vnd.dece.audio', - 'uvva' => 'audio/vnd.dece.audio', - 'eol' => 'audio/vnd.digital-winds', - 'dra' => 'audio/vnd.dra', - 'dts' => 'audio/vnd.dts', - 'dtshd' => 'audio/vnd.dts.hd', - 'lvp' => 'audio/vnd.lucent.voice', - 'pya' => 'audio/vnd.ms-playready.media.pya', - 'ecelp4800' => 'audio/vnd.nuera.ecelp4800', - 'ecelp7470' => 'audio/vnd.nuera.ecelp7470', - 'ecelp9600' => 'audio/vnd.nuera.ecelp9600', - 'rip' => 'audio/vnd.rip', - 'weba' => 'audio/webm', - 'aac' => 'audio/x-aac', - 'aif' => 'audio/x-aiff', - 'aiff' => 'audio/x-aiff', - 'aifc' => 'audio/x-aiff', - 'caf' => 'audio/x-caf', - 'flac' => 'audio/x-flac', - 'mka' => 'audio/x-matroska', - 'm3u' => 'audio/x-mpegurl', - 'wax' => 'audio/x-ms-wax', - 'wma' => 'audio/x-ms-wma', - 'ram' => 'audio/x-pn-realaudio', - 'ra' => 'audio/x-pn-realaudio', - 'rmp' => 'audio/x-pn-realaudio-plugin', - 'wav' => 'audio/x-wav', - 'xm' => 'audio/xm', - 'cdx' => 'chemical/x-cdx', - 'cif' => 'chemical/x-cif', - 'cmdf' => 'chemical/x-cmdf', - 'cml' => 'chemical/x-cml', - 'csml' => 'chemical/x-csml', - 'xyz' => 'chemical/x-xyz', - 'bmp' => 'image/bmp', - 'cgm' => 'image/cgm', - 'g3' => 'image/g3fax', - 'gif' => 'image/gif', - 'ief' => 'image/ief', - 'jpeg' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'jpe' => 'image/jpeg', - 'ktx' => 'image/ktx', - 'png' => 'image/png', - 'btif' => 'image/prs.btif', - 'sgi' => 'image/sgi', - 'svg' => 'image/svg+xml', - 'svgz' => 'image/svg+xml', - 'tiff' => 'image/tiff', - 'tif' => 'image/tiff', - 'psd' => 'image/vnd.adobe.photoshop', - 'uvi' => 'image/vnd.dece.graphic', - 'uvvi' => 'image/vnd.dece.graphic', - 'uvg' => 'image/vnd.dece.graphic', - 'uvvg' => 'image/vnd.dece.graphic', - 'sub' => 'image/vnd.dvb.subtitle', - 'djvu' => 'image/vnd.djvu', - 'djv' => 'image/vnd.djvu', - 'dwg' => 'image/vnd.dwg', - 'dxf' => 'image/vnd.dxf', - 'fbs' => 'image/vnd.fastbidsheet', - 'fpx' => 'image/vnd.fpx', - 'fst' => 'image/vnd.fst', - 'mmr' => 'image/vnd.fujixerox.edmics-mmr', - 'rlc' => 'image/vnd.fujixerox.edmics-rlc', - 'mdi' => 'image/vnd.ms-modi', - 'wdp' => 'image/vnd.ms-photo', - 'npx' => 'image/vnd.net-fpx', - 'wbmp' => 'image/vnd.wap.wbmp', - 'xif' => 'image/vnd.xiff', - 'webp' => 'image/webp', - '3ds' => 'image/x-3ds', - 'ras' => 'image/x-cmu-raster', - 'cmx' => 'image/x-cmx', - 'fh' => 'image/x-freehand', - 'fhc' => 'image/x-freehand', - 'fh4' => 'image/x-freehand', - 'fh5' => 'image/x-freehand', - 'fh7' => 'image/x-freehand', - 'ico' => 'image/x-icon', - 'sid' => 'image/x-mrsid-image', - 'pcx' => 'image/x-pcx', - 'pic' => 'image/x-pict', - 'pct' => 'image/x-pict', - 'pnm' => 'image/x-portable-anymap', - 'pbm' => 'image/x-portable-bitmap', - 'pgm' => 'image/x-portable-graymap', - 'ppm' => 'image/x-portable-pixmap', - 'rgb' => 'image/x-rgb', - 'tga' => 'image/x-tga', - 'xbm' => 'image/x-xbitmap', - 'xpm' => 'image/x-xpixmap', - 'xwd' => 'image/x-xwindowdump', - 'eml' => 'message/rfc822', - 'mime' => 'message/rfc822', - 'igs' => 'model/iges', - 'iges' => 'model/iges', - 'msh' => 'model/mesh', - 'mesh' => 'model/mesh', - 'silo' => 'model/mesh', - 'dae' => 'model/vnd.collada+xml', - 'dwf' => 'model/vnd.dwf', - 'gdl' => 'model/vnd.gdl', - 'gtw' => 'model/vnd.gtw', - 'mts' => 'model/vnd.mts', - 'vtu' => 'model/vnd.vtu', - 'wrl' => 'model/vrml', - 'vrml' => 'model/vrml', - 'x3db' => 'model/x3d+binary', - 'x3dbz' => 'model/x3d+binary', - 'x3dv' => 'model/x3d+vrml', - 'x3dvz' => 'model/x3d+vrml', - 'x3d' => 'model/x3d+xml', - 'x3dz' => 'model/x3d+xml', - 'appcache' => 'text/cache-manifest', - 'ics' => 'text/calendar', - 'ifb' => 'text/calendar', - 'css' => 'text/css', - 'csv' => 'text/csv', - 'html' => 'text/html', - 'htm' => 'text/html', - 'n3' => 'text/n3', - 'txt' => 'text/plain', - 'text' => 'text/plain', - 'conf' => 'text/plain', - 'def' => 'text/plain', - 'list' => 'text/plain', - 'log' => 'text/plain', - 'in' => 'text/plain', - 'dsc' => 'text/prs.lines.tag', - 'rtx' => 'text/richtext', - 'sgml' => 'text/sgml', - 'sgm' => 'text/sgml', - 'tsv' => 'text/tab-separated-values', - 't' => 'text/troff', - 'tr' => 'text/troff', - 'roff' => 'text/troff', - 'man' => 'text/troff', - 'me' => 'text/troff', - 'ms' => 'text/troff', - 'ttl' => 'text/turtle', - 'uri' => 'text/uri-list', - 'uris' => 'text/uri-list', - 'urls' => 'text/uri-list', - 'vcard' => 'text/vcard', - 'curl' => 'text/vnd.curl', - 'dcurl' => 'text/vnd.curl.dcurl', - 'scurl' => 'text/vnd.curl.scurl', - 'mcurl' => 'text/vnd.curl.mcurl', - 'sub' => 'text/vnd.dvb.subtitle', - 'fly' => 'text/vnd.fly', - 'flx' => 'text/vnd.fmi.flexstor', - 'gv' => 'text/vnd.graphviz', - '3dml' => 'text/vnd.in3d.3dml', - 'spot' => 'text/vnd.in3d.spot', - 'jad' => 'text/vnd.sun.j2me.app-descriptor', - 'wml' => 'text/vnd.wap.wml', - 'wmls' => 'text/vnd.wap.wmlscript', - 's' => 'text/x-asm', - 'asm' => 'text/x-asm', - 'c' => 'text/x-c', - 'cc' => 'text/x-c', - 'cxx' => 'text/x-c', - 'cpp' => 'text/x-c', - 'h' => 'text/x-c', - 'hh' => 'text/x-c', - 'dic' => 'text/x-c', - 'f' => 'text/x-fortran', - 'for' => 'text/x-fortran', - 'f77' => 'text/x-fortran', - 'f90' => 'text/x-fortran', - 'java' => 'text/x-java-source', - 'opml' => 'text/x-opml', - 'p' => 'text/x-pascal', - 'pas' => 'text/x-pascal', - 'nfo' => 'text/x-nfo', - 'etx' => 'text/x-setext', - 'sfv' => 'text/x-sfv', - 'uu' => 'text/x-uuencode', - 'vcs' => 'text/x-vcalendar', - 'vcf' => 'text/x-vcard', - '3gp' => 'video/3gpp', - '3g2' => 'video/3gpp2', - 'h261' => 'video/h261', - 'h263' => 'video/h263', - 'h264' => 'video/h264', - 'jpgv' => 'video/jpeg', - 'jpm' => 'video/jpm', - 'jpgm' => 'video/jpm', - 'mj2' => 'video/mj2', - 'mjp2' => 'video/mj2', - 'mp4' => 'video/mp4', - 'mp4v' => 'video/mp4', - 'mpg4' => 'video/mp4', - 'mpeg' => 'video/mpeg', - 'mpg' => 'video/mpeg', - 'mpe' => 'video/mpeg', - 'm1v' => 'video/mpeg', - 'm2v' => 'video/mpeg', - 'ogv' => 'video/ogg', - 'qt' => 'video/quicktime', - 'mov' => 'video/quicktime', - 'uvh' => 'video/vnd.dece.hd', - 'uvvh' => 'video/vnd.dece.hd', - 'uvm' => 'video/vnd.dece.mobile', - 'uvvm' => 'video/vnd.dece.mobile', - 'uvp' => 'video/vnd.dece.pd', - 'uvvp' => 'video/vnd.dece.pd', - 'uvs' => 'video/vnd.dece.sd', - 'uvvs' => 'video/vnd.dece.sd', - 'uvv' => 'video/vnd.dece.video', - 'uvvv' => 'video/vnd.dece.video', - 'dvb' => 'video/vnd.dvb.file', - 'fvt' => 'video/vnd.fvt', - 'mxu' => 'video/vnd.mpegurl', - 'm4u' => 'video/vnd.mpegurl', - 'pyv' => 'video/vnd.ms-playready.media.pyv', - 'uvu' => 'video/vnd.uvvu.mp4', - 'uvvu' => 'video/vnd.uvvu.mp4', - 'viv' => 'video/vnd.vivo', - 'webm' => 'video/webm', - 'f4v' => 'video/x-f4v', - 'fli' => 'video/x-fli', - 'flv' => 'video/x-flv', - 'm4v' => 'video/x-m4v', - 'mkv' => 'video/x-matroska', - 'mk3d' => 'video/x-matroska', - 'mks' => 'video/x-matroska', - 'mng' => 'video/x-mng', - 'asf' => 'video/x-ms-asf', - 'asx' => 'video/x-ms-asf', - 'vob' => 'video/x-ms-vob', - 'wm' => 'video/x-ms-wm', - 'wmv' => 'video/x-ms-wmv', - 'wmx' => 'video/x-ms-wmx', - 'wvx' => 'video/x-ms-wvx', - 'avi' => 'video/x-msvideo', - 'movie' => 'video/x-sgi-movie', - 'smv' => 'video/x-smv', - 'ice' => 'x-conference/x-cooltalk'); } - ?> From 00bfcd94ec450a29585ccecac95ccabe225f0763 Mon Sep 17 00:00:00 2001 From: hkjolhede Date: Wed, 26 Dec 2012 23:49:53 +0100 Subject: [PATCH 012/719] Update apps/files_external/lib/sftp.php Added a little better exception handling, hopefully making it a little more robust --- apps/files_external/lib/sftp.php | 182 +++++++++++++++++++------------ 1 file changed, 111 insertions(+), 71 deletions(-) diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index bf9a63ad63..68c3339274 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -52,11 +52,14 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { } private function host_keys_path() { - $storage_view = \OCP\Files::getStorage('files_external'); - if ($storage_view) { - return \OCP\Config::getSystemValue('datadirectory') . - $storage_view->getAbsolutePath('') . - 'ssh_host_keys'; + try { + $storage_view = \OCP\Files::getStorage('files_external'); + if ($storage_view) { + return \OCP\Config::getSystemValue('datadirectory') . + $storage_view->getAbsolutePath('') . + 'ssh_host_keys'; + } + } catch (Exception $e) { } return false; } @@ -76,36 +79,47 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { } private function read_host_keys() { - $key_path = $this->host_keys_path(); - if (file_exists($key_path)) { - $hosts = array(); - $keys = array(); - $lines = file($key_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); - if ($lines) { - foreach ($lines as $line) { - $host_key_arr = explode("::", $line, 2); - if (count($host_key_arr) == 2) { - $hosts[] = $host_key_arr[0]; - $keys[] = $host_key_arr[1]; + try { + $key_path = $this->host_keys_path(); + if (file_exists($key_path)) { + $hosts = array(); + $keys = array(); + $lines = file($key_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if ($lines) { + foreach ($lines as $line) { + $host_key_arr = explode("::", $line, 2); + if (count($host_key_arr) == 2) { + $hosts[] = $host_key_arr[0]; + $keys[] = $host_key_arr[1]; + } } + return array_combine($hosts, $keys); } - return array_combine($hosts, $keys); } + } catch (Exception $e) { } return array(); } public function mkdir($path) { - return $this->client->mkdir($this->abs_path($path)); + try { + return $this->client->mkdir($this->abs_path($path)); + } catch (Exception $e) { + return false; + } } public function rmdir($path) { - return $this->client->delete($this->abs_path($path), true); - } + try { + return $this->client->delete($this->abs_path($path), true); + } catch (Exception $e) { + return false; + } public function opendir($path) { - $list = $this->client->nlist($this->abs_path($path)); try { + $list = $this->client->nlist($this->abs_path($path)); + $id = md5('sftp:' . $path); OC_FakeDirStream::$dirs[$id] = array(); foreach($list as $file) { @@ -120,9 +134,12 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { } public function filetype($path) { - $stat = $this->client->stat($this->abs_path($path)); - if ($stat['type'] == NET_SFTP_TYPE_REGULAR) return 'file'; - if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) return 'dir'; + try { + $stat = $this->client->stat($this->abs_path($path)); + if ($stat['type'] == NET_SFTP_TYPE_REGULAR) return 'file'; + if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) return 'dir'; + } catch (Exeption $e) { + } return false; } @@ -135,52 +152,63 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { } public function file_exists($path) { - return $this->client->stat($this->abs_path($path)) === false ? false : true; + try { + return $this->client->stat($this->abs_path($path)) === false ? false : true; + } catch (Exception $e) { + return false; + } } public function unlink($path) { - return $this->client->delete($this->abs_path($path), true); + try { + return $this->client->delete($this->abs_path($path), true); + } catch (Exception $e) { + return false; + } } public function fopen($path, $mode) { - $abs_path = $this->abs_path($path); - switch($mode) { - case 'r': - case 'rb': - if ( !$this->file_exists($path)) return false; - if (strrpos($path, '.')!==false) { - $ext=substr($path, strrpos($path, '.')); - } else { - $ext=''; - } - $tmp = OC_Helper::tmpFile($ext); - $this->getFile($abs_path, $tmp); - return fopen($tmp, $mode); + try { + $abs_path = $this->abs_path($path); + switch($mode) { + case 'r': + case 'rb': + if ( !$this->file_exists($path)) return false; + if (strrpos($path, '.')!==false) { + $ext=substr($path, strrpos($path, '.')); + } else { + $ext=''; + } + $tmp = OC_Helper::tmpFile($ext); + $this->getFile($abs_path, $tmp); + return fopen($tmp, $mode); - case 'w': - case 'wb': - case 'a': - case 'ab': - case 'r+': - case 'w+': - case 'wb+': - case 'a+': - case 'x': - case 'x+': - case 'c': - case 'c+': - if (strrpos($path, '.')!==false) { - $ext=substr($path, strrpos($path, '.')); - } else { - $ext=''; - } - $tmpFile=OC_Helper::tmpFile($ext); - OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack'); - if ($this->file_exists($path)) { - $this->getFile($abs_path, $tmpFile); - } - self::$tempFiles[$tmpFile]=$abs_path; - return fopen('close://'.$tmpFile, $mode); + case 'w': + case 'wb': + case 'a': + case 'ab': + case 'r+': + case 'w+': + case 'wb+': + case 'a+': + case 'x': + case 'x+': + case 'c': + case 'c+': + if (strrpos($path, '.')!==false) { + $ext=substr($path, strrpos($path, '.')); + } else { + $ext=''; + } + $tmpFile=OC_Helper::tmpFile($ext); + OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack'); + if ($this->file_exists($path)) { + $this->getFile($abs_path, $tmpFile); + } + self::$tempFiles[$tmpFile]=$abs_path; + return fopen('close://'.$tmpFile, $mode); + } + } catch (Exception $e) { } return false; } @@ -198,9 +226,13 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { } public function touch($path, $mtime=null) { - if (!$this->file_exists($path)) { - $this->client->put($this->abs_path($path), ''); + try { + if (!$this->file_exists($path)) { + $this->client->put($this->abs_path($path), ''); + } + } catch (Exception $e) { } + } public function getFile($path, $target) { @@ -212,16 +244,24 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { } public function rename($source, $target) { - return $this->client->rename($this->abs_path($source), $this->abs_path($target)); - } + try { + return $this->client->rename($this->abs_path($source), $this->abs_path($target)); + } catch (Exception $e) { + return false; + } public function stat($path) { - $stat = $this->client->stat($this->abs_path($path)); + try { + $stat = $this->client->stat($this->abs_path($path)); - $mtime = $stat ? $stat['mtime'] : -1; - $size = $stat ? $stat['size'] : 0; + $mtime = $stat ? $stat['mtime'] : -1; + $size = $stat ? $stat['size'] : 0; + + return array('mtime' => $mtime, 'size' => $size, 'ctime' => -1); + } catch (Exception $e) { + return false; + } - return array('mtime' => $mtime, 'size' => $size, 'ctime' => -1); } } ?> From be197d52b16416022b23528e5bd18a8c5f0f785d Mon Sep 17 00:00:00 2001 From: hkjolhede Date: Thu, 27 Dec 2012 19:47:46 +0100 Subject: [PATCH 013/719] Update apps/files_external/lib/sftp.php Added copyright notice --- apps/files_external/lib/sftp.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index 68c3339274..67a11fc3a4 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -1,4 +1,11 @@ + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + set_include_path(get_include_path() . PATH_SEPARATOR . OC::$THIRDPARTYROOT . '/3rdparty/phpseclib/phpseclib'); require('Net/SFTP.php'); From 8598d18529359c7f27cdd23a7ab40ab69c4139f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Kj=C3=B6lhede?= Date: Thu, 27 Dec 2012 20:23:56 +0100 Subject: [PATCH 014/719] Added phpseclib to files_external as 3rdparty --- .../files_external/3rdparty/phpseclib/AUTHORS | 3 + .../files_external/3rdparty/phpseclib/LICENSE | 21 + .../3rdparty/phpseclib/README.md | 15 + .../3rdparty/phpseclib/composer.json | 48 + .../phpseclib/phpseclib/Crypt/AES.php | 611 +++ .../phpseclib/phpseclib/Crypt/DES.php | 1313 +++++ .../phpseclib/phpseclib/Crypt/Hash.php | 825 ++++ .../phpseclib/phpseclib/Crypt/RC4.php | 531 ++ .../phpseclib/phpseclib/Crypt/RSA.php | 2664 ++++++++++ .../phpseclib/phpseclib/Crypt/Random.php | 243 + .../phpseclib/phpseclib/Crypt/Rijndael.php | 1496 ++++++ .../phpseclib/phpseclib/Crypt/TripleDES.php | 1061 ++++ .../phpseclib/phpseclib/File/ANSI.php | 558 +++ .../phpseclib/phpseclib/File/ASN1.php | 1295 +++++ .../phpseclib/phpseclib/File/X509.php | 4341 +++++++++++++++++ .../phpseclib/phpseclib/Math/BigInteger.php | 3633 ++++++++++++++ .../3rdparty/phpseclib/phpseclib/Net/SFTP.php | 2029 ++++++++ .../3rdparty/phpseclib/phpseclib/Net/SSH1.php | 1435 ++++++ .../3rdparty/phpseclib/phpseclib/Net/SSH2.php | 2997 ++++++++++++ .../3rdparty/phpseclib/phpseclib/openssl.cnf | 6 + .../3rdparty/phpseclib/phpunit.xml.dist | 18 + .../phpseclib/tests/Crypt/Hash/MD5Test.php | 47 + .../phpseclib/tests/Crypt/Hash/TestCase.php | 47 + .../phpseclib/tests/Math/BigIntegerTest.php | 259 + .../3rdparty/phpseclib/tests/bootstrap.php | 22 + 25 files changed, 25518 insertions(+) create mode 100644 apps/files_external/3rdparty/phpseclib/AUTHORS create mode 100644 apps/files_external/3rdparty/phpseclib/LICENSE create mode 100644 apps/files_external/3rdparty/phpseclib/README.md create mode 100644 apps/files_external/3rdparty/phpseclib/composer.json create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/AES.php create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/DES.php create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Hash.php create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RC4.php create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RSA.php create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Random.php create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Rijndael.php create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/TripleDES.php create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/File/ANSI.php create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/File/ASN1.php create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/File/X509.php create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/Math/BigInteger.php create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP.php create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php create mode 100644 apps/files_external/3rdparty/phpseclib/phpseclib/openssl.cnf create mode 100644 apps/files_external/3rdparty/phpseclib/phpunit.xml.dist create mode 100644 apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/MD5Test.php create mode 100644 apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/TestCase.php create mode 100644 apps/files_external/3rdparty/phpseclib/tests/Math/BigIntegerTest.php create mode 100644 apps/files_external/3rdparty/phpseclib/tests/bootstrap.php diff --git a/apps/files_external/3rdparty/phpseclib/AUTHORS b/apps/files_external/3rdparty/phpseclib/AUTHORS new file mode 100644 index 0000000000..7bae8ab94e --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/AUTHORS @@ -0,0 +1,3 @@ +phpseclib Lead Developer: TerraFrost (Jim Wigginton) + +phpseclib Developers: monnerat (Patrick Monnerat) \ No newline at end of file diff --git a/apps/files_external/3rdparty/phpseclib/LICENSE b/apps/files_external/3rdparty/phpseclib/LICENSE new file mode 100644 index 0000000000..6ecd9b9bec --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/LICENSE @@ -0,0 +1,21 @@ +Copyright 2007-2012 TerraFrost and other contributors +http://phpseclib.sourceforge.net/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/apps/files_external/3rdparty/phpseclib/README.md b/apps/files_external/3rdparty/phpseclib/README.md new file mode 100644 index 0000000000..4e1330e896 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/README.md @@ -0,0 +1,15 @@ +# phpseclib - PHP Secure Communications Library + +[![Build Status](https://secure.travis-ci.org/phpseclib/phpseclib.png?branch=master)](http://travis-ci.org/phpseclib/phpseclib) + +MIT-licensed pure-PHP implementations of an arbitrary-precision integer +arithmetic library, fully PKCS#1 (v2.1) compliant RSA, DES, 3DES, RC4, Rijndael, +AES, SSH-1, SSH-2, SFTP, and X.509 + +* [Download (0.3.1)](http://sourceforge.net/projects/phpseclib/files/phpseclib0.3.1.zip/download) +* [Browse Git](https://github.com/phpseclib/phpseclib) +* [Documentation](http://phpseclib.sourceforge.net/) +* [Support](http://www.frostjedi.com/phpbb/viewforum.php?f=46) + +PEAR Channel +PEAR Channel: [phpseclib.sourceforge.net](http://phpseclib.sourceforge.net/pear.htm) diff --git a/apps/files_external/3rdparty/phpseclib/composer.json b/apps/files_external/3rdparty/phpseclib/composer.json new file mode 100644 index 0000000000..11008cd81d --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/composer.json @@ -0,0 +1,48 @@ +{ + "name": "phpseclib/phpseclib", + "type": "library", + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "keywords": [ + "security", + "crypto", + "cryptography", + "encryption", + "signature", + "signing", + "rsa", + "aes", + "ssh", + "sftp", + "x509", + "x.509", + "asn1", + "asn.1", + "BigInteger" + ], + "homepage": "http://phpseclib.sourceforge.net", + "license": "MIT", + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Developer" + } + ], + "require": { + "php": ">=5.0.0" + }, + "suggest": { + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.", + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP >= 4.3.3." + }, + "include-path": ["phpseclib/"], + "autoload": { + "psr-0": { + "Crypt": "phpseclib/", + "File": "phpseclib/", + "Math": "phpseclib/", + "Net": "phpseclib/" + } + } +} diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/AES.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/AES.php new file mode 100644 index 0000000000..74383cce8a --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/AES.php @@ -0,0 +1,611 @@ + + * setKey('abcdefghijklmnop'); + * + * $size = 10 * 1024; + * $plaintext = ''; + * for ($i = 0; $i < $size; $i++) { + * $plaintext.= 'a'; + * } + * + * echo $aes->decrypt($aes->encrypt($plaintext)); + * ?> + * + * + * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @category Crypt + * @package Crypt_AES + * @author Jim Wigginton + * @copyright MMVIII Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @version $Id: AES.php,v 1.7 2010/02/09 06:10:25 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/** + * Include Crypt_Rijndael + */ +if (!class_exists('Crypt_Rijndael')) { + require_once 'Rijndael.php'; +} + +/**#@+ + * @access public + * @see Crypt_AES::encrypt() + * @see Crypt_AES::decrypt() + */ +/** + * Encrypt / decrypt using the Counter mode. + * + * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29 + */ +define('CRYPT_AES_MODE_CTR', -1); +/** + * Encrypt / decrypt using the Electronic Code Book mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29 + */ +define('CRYPT_AES_MODE_ECB', 1); +/** + * Encrypt / decrypt using the Code Book Chaining mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29 + */ +define('CRYPT_AES_MODE_CBC', 2); +/** + * Encrypt / decrypt using the Cipher Feedback mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29 + */ +define('CRYPT_AES_MODE_CFB', 3); +/** + * Encrypt / decrypt using the Cipher Feedback mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29 + */ +define('CRYPT_AES_MODE_OFB', 4); +/**#@-*/ + +/**#@+ + * @access private + * @see Crypt_AES::Crypt_AES() + */ +/** + * Toggles the internal implementation + */ +define('CRYPT_AES_MODE_INTERNAL', 1); +/** + * Toggles the mcrypt implementation + */ +define('CRYPT_AES_MODE_MCRYPT', 2); +/**#@-*/ + +/** + * Pure-PHP implementation of AES. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Crypt_AES + */ +class Crypt_AES extends Crypt_Rijndael { + /** + * mcrypt resource for encryption + * + * The mcrypt resource can be recreated every time something needs to be created or it can be created just once. + * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode. + * + * @see Crypt_AES::encrypt() + * @var String + * @access private + */ + var $enmcrypt; + + /** + * mcrypt resource for decryption + * + * The mcrypt resource can be recreated every time something needs to be created or it can be created just once. + * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode. + * + * @see Crypt_AES::decrypt() + * @var String + * @access private + */ + var $demcrypt; + + /** + * mcrypt resource for CFB mode + * + * @see Crypt_AES::encrypt() + * @see Crypt_AES::decrypt() + * @var String + * @access private + */ + var $ecb; + + /** + * Default Constructor. + * + * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be + * CRYPT_AES_MODE_ECB or CRYPT_AES_MODE_CBC. If not explictly set, CRYPT_AES_MODE_CBC will be used. + * + * @param optional Integer $mode + * @return Crypt_AES + * @access public + */ + function Crypt_AES($mode = CRYPT_AES_MODE_CBC) + { + if ( !defined('CRYPT_AES_MODE') ) { + switch (true) { + case extension_loaded('mcrypt') && in_array('rijndael-128', mcrypt_list_algorithms()): + define('CRYPT_AES_MODE', CRYPT_AES_MODE_MCRYPT); + break; + default: + define('CRYPT_AES_MODE', CRYPT_AES_MODE_INTERNAL); + } + } + + switch ( CRYPT_AES_MODE ) { + case CRYPT_AES_MODE_MCRYPT: + switch ($mode) { + case CRYPT_AES_MODE_ECB: + $this->paddable = true; + $this->mode = MCRYPT_MODE_ECB; + break; + case CRYPT_AES_MODE_CTR: + // ctr doesn't have a constant associated with it even though it appears to be fairly widely + // supported. in lieu of knowing just how widely supported it is, i've, for now, opted not to + // include a compatibility layer. the layer has been implemented but, for now, is commented out. + $this->mode = 'ctr'; + //$this->mode = in_array('ctr', mcrypt_list_modes()) ? 'ctr' : CRYPT_AES_MODE_CTR; + break; + case CRYPT_AES_MODE_CFB: + $this->mode = 'ncfb'; + break; + case CRYPT_AES_MODE_OFB: + $this->mode = MCRYPT_MODE_NOFB; + break; + case CRYPT_AES_MODE_CBC: + default: + $this->paddable = true; + $this->mode = MCRYPT_MODE_CBC; + } + + $this->debuffer = $this->enbuffer = ''; + + break; + default: + switch ($mode) { + case CRYPT_AES_MODE_ECB: + $this->paddable = true; + $this->mode = CRYPT_RIJNDAEL_MODE_ECB; + break; + case CRYPT_AES_MODE_CTR: + $this->mode = CRYPT_RIJNDAEL_MODE_CTR; + break; + case CRYPT_AES_MODE_CFB: + $this->mode = CRYPT_RIJNDAEL_MODE_CFB; + break; + case CRYPT_AES_MODE_OFB: + $this->mode = CRYPT_RIJNDAEL_MODE_OFB; + break; + case CRYPT_AES_MODE_CBC: + default: + $this->paddable = true; + $this->mode = CRYPT_RIJNDAEL_MODE_CBC; + } + } + + if (CRYPT_AES_MODE == CRYPT_AES_MODE_INTERNAL) { + parent::Crypt_Rijndael($this->mode); + } + } + + /** + * Dummy function + * + * Since Crypt_AES extends Crypt_Rijndael, this function is, technically, available, but it doesn't do anything. + * + * @access public + * @param Integer $length + */ + function setBlockLength($length) + { + return; + } + + + /** + * Sets the initialization vector. (optional) + * + * SetIV is not required when CRYPT_RIJNDAEL_MODE_ECB is being used. If not explictly set, it'll be assumed + * to be all zero's. + * + * @access public + * @param String $iv + */ + function setIV($iv) + { + parent::setIV($iv); + if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) { + $this->changed = true; + } + } + + /** + * Encrypts a message. + * + * $plaintext will be padded with up to 16 additional bytes. Other AES implementations may or may not pad in the + * same manner. Other common approaches to padding and the reasons why it's necessary are discussed in the following + * URL: + * + * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html} + * + * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does. + * strlen($plaintext) will still need to be a multiple of 16, however, arbitrary values can be added to make it that + * length. + * + * @see Crypt_AES::decrypt() + * @access public + * @param String $plaintext + */ + function encrypt($plaintext) + { + if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) { + $changed = $this->changed; + $this->_mcryptSetup(); + /* + if ($this->mode == CRYPT_AES_MODE_CTR) { + $iv = $this->encryptIV; + $xor = mcrypt_generic($this->enmcrypt, $this->_generate_xor(strlen($plaintext), $iv)); + $ciphertext = $plaintext ^ $xor; + if ($this->continuousBuffer) { + $this->encryptIV = $iv; + } + return $ciphertext; + } + */ + // re: http://phpseclib.sourceforge.net/cfb-demo.phps + // using mcrypt's default handing of CFB the above would output two different things. using phpseclib's + // rewritten CFB implementation the above outputs the same thing twice. + if ($this->mode == 'ncfb') { + if ($changed) { + $this->ecb = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, ''); + mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); + } + + if (strlen($this->enbuffer)) { + $ciphertext = $plaintext ^ substr($this->encryptIV, strlen($this->enbuffer)); + $this->enbuffer.= $ciphertext; + if (strlen($this->enbuffer) == 16) { + $this->encryptIV = $this->enbuffer; + $this->enbuffer = ''; + mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV); + } + $plaintext = substr($plaintext, strlen($ciphertext)); + } else { + $ciphertext = ''; + } + + $last_pos = strlen($plaintext) & 0xFFFFFFF0; + $ciphertext.= $last_pos ? mcrypt_generic($this->enmcrypt, substr($plaintext, 0, $last_pos)) : ''; + + if (strlen($plaintext) & 0xF) { + if (strlen($ciphertext)) { + $this->encryptIV = substr($ciphertext, -16); + } + $this->encryptIV = mcrypt_generic($this->ecb, $this->encryptIV); + $this->enbuffer = substr($plaintext, $last_pos) ^ $this->encryptIV; + $ciphertext.= $this->enbuffer; + } + + return $ciphertext; + } + + if ($this->paddable) { + $plaintext = $this->_pad($plaintext); + } + + $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext); + + if (!$this->continuousBuffer) { + mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv); + } + + return $ciphertext; + } + + return parent::encrypt($plaintext); + } + + /** + * Decrypts a message. + * + * If strlen($ciphertext) is not a multiple of 16, null bytes will be added to the end of the string until it is. + * + * @see Crypt_AES::encrypt() + * @access public + * @param String $ciphertext + */ + function decrypt($ciphertext) + { + if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) { + $changed = $this->changed; + $this->_mcryptSetup(); + /* + if ($this->mode == CRYPT_AES_MODE_CTR) { + $iv = $this->decryptIV; + $xor = mcrypt_generic($this->enmcrypt, $this->_generate_xor(strlen($ciphertext), $iv)); + $plaintext = $ciphertext ^ $xor; + if ($this->continuousBuffer) { + $this->decryptIV = $iv; + } + return $plaintext; + } + */ + if ($this->mode == 'ncfb') { + if ($changed) { + $this->ecb = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, ''); + mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); + } + + if (strlen($this->debuffer)) { + $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($this->debuffer)); + + $this->debuffer.= substr($ciphertext, 0, strlen($plaintext)); + if (strlen($this->debuffer) == 16) { + $this->decryptIV = $this->debuffer; + $this->debuffer = ''; + mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV); + } + $ciphertext = substr($ciphertext, strlen($plaintext)); + } else { + $plaintext = ''; + } + + $last_pos = strlen($ciphertext) & 0xFFFFFFF0; + $plaintext.= $last_pos ? mdecrypt_generic($this->demcrypt, substr($ciphertext, 0, $last_pos)) : ''; + + if (strlen($ciphertext) & 0xF) { + if (strlen($plaintext)) { + $this->decryptIV = substr($ciphertext, $last_pos - 16, 16); + } + $this->decryptIV = mcrypt_generic($this->ecb, $this->decryptIV); + $this->debuffer = substr($ciphertext, $last_pos); + $plaintext.= $this->debuffer ^ $this->decryptIV; + } + + return $plaintext; + } + + if ($this->paddable) { + // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic : + // "The data is padded with "\0" to make sure the length of the data is n * blocksize." + $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 15) & 0xFFFFFFF0, chr(0)); + } + + $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext); + + if (!$this->continuousBuffer) { + mcrypt_generic_init($this->demcrypt, $this->key, $this->iv); + } + + return $this->paddable ? $this->_unpad($plaintext) : $plaintext; + } + + return parent::decrypt($ciphertext); + } + + /** + * Setup mcrypt + * + * Validates all the variables. + * + * @access private + */ + function _mcryptSetup() + { + if (!$this->changed) { + return; + } + + if (!$this->explicit_key_length) { + // this just copied from Crypt_Rijndael::_setup() + $length = strlen($this->key) >> 2; + if ($length > 8) { + $length = 8; + } else if ($length < 4) { + $length = 4; + } + $this->Nk = $length; + $this->key_size = $length << 2; + } + + switch ($this->Nk) { + case 4: // 128 + $this->key_size = 16; + break; + case 5: // 160 + case 6: // 192 + $this->key_size = 24; + break; + case 7: // 224 + case 8: // 256 + $this->key_size = 32; + } + + $this->key = str_pad(substr($this->key, 0, $this->key_size), $this->key_size, chr(0)); + $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($this->iv, 0, 16), 16, chr(0)); + + if (!isset($this->enmcrypt)) { + $mode = $this->mode; + //$mode = $this->mode == CRYPT_AES_MODE_CTR ? MCRYPT_MODE_ECB : $this->mode; + + $this->demcrypt = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', $mode, ''); + $this->enmcrypt = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', $mode, ''); + } // else should mcrypt_generic_deinit be called? + + mcrypt_generic_init($this->demcrypt, $this->key, $this->iv); + mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv); + + $this->changed = false; + } + + /** + * Encrypts a block + * + * Optimized over Crypt_Rijndael's implementation by means of loop unrolling. + * + * @see Crypt_Rijndael::_encryptBlock() + * @access private + * @param String $in + * @return String + */ + function _encryptBlock($in) + { + $state = unpack('N*word', $in); + + $Nr = $this->Nr; + $w = $this->w; + $t0 = $this->t0; + $t1 = $this->t1; + $t2 = $this->t2; + $t3 = $this->t3; + + // addRoundKey and reindex $state + $state = array( + $state['word1'] ^ $w[0][0], + $state['word2'] ^ $w[0][1], + $state['word3'] ^ $w[0][2], + $state['word4'] ^ $w[0][3] + ); + + // shiftRows + subWord + mixColumns + addRoundKey + // we could loop unroll this and use if statements to do more rounds as necessary, but, in my tests, that yields + // only a marginal improvement. since that also, imho, hinders the readability of the code, i've opted not to do it. + for ($round = 1; $round < $this->Nr; $round++) { + $state = array( + $t0[$state[0] & 0xFF000000] ^ $t1[$state[1] & 0x00FF0000] ^ $t2[$state[2] & 0x0000FF00] ^ $t3[$state[3] & 0x000000FF] ^ $w[$round][0], + $t0[$state[1] & 0xFF000000] ^ $t1[$state[2] & 0x00FF0000] ^ $t2[$state[3] & 0x0000FF00] ^ $t3[$state[0] & 0x000000FF] ^ $w[$round][1], + $t0[$state[2] & 0xFF000000] ^ $t1[$state[3] & 0x00FF0000] ^ $t2[$state[0] & 0x0000FF00] ^ $t3[$state[1] & 0x000000FF] ^ $w[$round][2], + $t0[$state[3] & 0xFF000000] ^ $t1[$state[0] & 0x00FF0000] ^ $t2[$state[1] & 0x0000FF00] ^ $t3[$state[2] & 0x000000FF] ^ $w[$round][3] + ); + + } + + // subWord + $state = array( + $this->_subWord($state[0]), + $this->_subWord($state[1]), + $this->_subWord($state[2]), + $this->_subWord($state[3]) + ); + + // shiftRows + addRoundKey + $state = array( + ($state[0] & 0xFF000000) ^ ($state[1] & 0x00FF0000) ^ ($state[2] & 0x0000FF00) ^ ($state[3] & 0x000000FF) ^ $this->w[$this->Nr][0], + ($state[1] & 0xFF000000) ^ ($state[2] & 0x00FF0000) ^ ($state[3] & 0x0000FF00) ^ ($state[0] & 0x000000FF) ^ $this->w[$this->Nr][1], + ($state[2] & 0xFF000000) ^ ($state[3] & 0x00FF0000) ^ ($state[0] & 0x0000FF00) ^ ($state[1] & 0x000000FF) ^ $this->w[$this->Nr][2], + ($state[3] & 0xFF000000) ^ ($state[0] & 0x00FF0000) ^ ($state[1] & 0x0000FF00) ^ ($state[2] & 0x000000FF) ^ $this->w[$this->Nr][3] + ); + + return pack('N*', $state[0], $state[1], $state[2], $state[3]); + } + + /** + * Decrypts a block + * + * Optimized over Crypt_Rijndael's implementation by means of loop unrolling. + * + * @see Crypt_Rijndael::_decryptBlock() + * @access private + * @param String $in + * @return String + */ + function _decryptBlock($in) + { + $state = unpack('N*word', $in); + + $Nr = $this->Nr; + $dw = $this->dw; + $dt0 = $this->dt0; + $dt1 = $this->dt1; + $dt2 = $this->dt2; + $dt3 = $this->dt3; + + // addRoundKey and reindex $state + $state = array( + $state['word1'] ^ $dw[$this->Nr][0], + $state['word2'] ^ $dw[$this->Nr][1], + $state['word3'] ^ $dw[$this->Nr][2], + $state['word4'] ^ $dw[$this->Nr][3] + ); + + + // invShiftRows + invSubBytes + invMixColumns + addRoundKey + for ($round = $this->Nr - 1; $round > 0; $round--) { + $state = array( + $dt0[$state[0] & 0xFF000000] ^ $dt1[$state[3] & 0x00FF0000] ^ $dt2[$state[2] & 0x0000FF00] ^ $dt3[$state[1] & 0x000000FF] ^ $dw[$round][0], + $dt0[$state[1] & 0xFF000000] ^ $dt1[$state[0] & 0x00FF0000] ^ $dt2[$state[3] & 0x0000FF00] ^ $dt3[$state[2] & 0x000000FF] ^ $dw[$round][1], + $dt0[$state[2] & 0xFF000000] ^ $dt1[$state[1] & 0x00FF0000] ^ $dt2[$state[0] & 0x0000FF00] ^ $dt3[$state[3] & 0x000000FF] ^ $dw[$round][2], + $dt0[$state[3] & 0xFF000000] ^ $dt1[$state[2] & 0x00FF0000] ^ $dt2[$state[1] & 0x0000FF00] ^ $dt3[$state[0] & 0x000000FF] ^ $dw[$round][3] + ); + } + + // invShiftRows + invSubWord + addRoundKey + $state = array( + $this->_invSubWord(($state[0] & 0xFF000000) ^ ($state[3] & 0x00FF0000) ^ ($state[2] & 0x0000FF00) ^ ($state[1] & 0x000000FF)) ^ $dw[0][0], + $this->_invSubWord(($state[1] & 0xFF000000) ^ ($state[0] & 0x00FF0000) ^ ($state[3] & 0x0000FF00) ^ ($state[2] & 0x000000FF)) ^ $dw[0][1], + $this->_invSubWord(($state[2] & 0xFF000000) ^ ($state[1] & 0x00FF0000) ^ ($state[0] & 0x0000FF00) ^ ($state[3] & 0x000000FF)) ^ $dw[0][2], + $this->_invSubWord(($state[3] & 0xFF000000) ^ ($state[2] & 0x00FF0000) ^ ($state[1] & 0x0000FF00) ^ ($state[0] & 0x000000FF)) ^ $dw[0][3] + ); + + return pack('N*', $state[0], $state[1], $state[2], $state[3]); + } +} + +// vim: ts=4:sw=4:et: +// vim6: fdl=1: diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/DES.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/DES.php new file mode 100644 index 0000000000..6a6d33897e --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/DES.php @@ -0,0 +1,1313 @@ + + * setKey('abcdefgh'); + * + * $size = 10 * 1024; + * $plaintext = ''; + * for ($i = 0; $i < $size; $i++) { + * $plaintext.= 'a'; + * } + * + * echo $des->decrypt($des->encrypt($plaintext)); + * ?> + * + * + * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @category Crypt + * @package Crypt_DES + * @author Jim Wigginton + * @copyright MMVII Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @version $Id: DES.php,v 1.12 2010/02/09 06:10:26 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/**#@+ + * @access private + * @see Crypt_DES::_prepareKey() + * @see Crypt_DES::_processBlock() + */ +/** + * Contains array_reverse($keys[CRYPT_DES_DECRYPT]) + */ +define('CRYPT_DES_ENCRYPT', 0); +/** + * Contains array_reverse($keys[CRYPT_DES_ENCRYPT]) + */ +define('CRYPT_DES_DECRYPT', 1); +/**#@-*/ + +/**#@+ + * @access public + * @see Crypt_DES::encrypt() + * @see Crypt_DES::decrypt() + */ +/** + * Encrypt / decrypt using the Counter mode. + * + * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29 + */ +define('CRYPT_DES_MODE_CTR', -1); +/** + * Encrypt / decrypt using the Electronic Code Book mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29 + */ +define('CRYPT_DES_MODE_ECB', 1); +/** + * Encrypt / decrypt using the Code Book Chaining mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29 + */ +define('CRYPT_DES_MODE_CBC', 2); +/** + * Encrypt / decrypt using the Cipher Feedback mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29 + */ +define('CRYPT_DES_MODE_CFB', 3); +/** + * Encrypt / decrypt using the Cipher Feedback mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29 + */ +define('CRYPT_DES_MODE_OFB', 4); +/**#@-*/ + +/**#@+ + * @access private + * @see Crypt_DES::Crypt_DES() + */ +/** + * Toggles the internal implementation + */ +define('CRYPT_DES_MODE_INTERNAL', 1); +/** + * Toggles the mcrypt implementation + */ +define('CRYPT_DES_MODE_MCRYPT', 2); +/**#@-*/ + +/** + * Pure-PHP implementation of DES. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Crypt_DES + */ +class Crypt_DES { + /** + * The Key Schedule + * + * @see Crypt_DES::setKey() + * @var Array + * @access private + */ + var $keys = "\0\0\0\0\0\0\0\0"; + + /** + * The Encryption Mode + * + * @see Crypt_DES::Crypt_DES() + * @var Integer + * @access private + */ + var $mode; + + /** + * Continuous Buffer status + * + * @see Crypt_DES::enableContinuousBuffer() + * @var Boolean + * @access private + */ + var $continuousBuffer = false; + + /** + * Padding status + * + * @see Crypt_DES::enablePadding() + * @var Boolean + * @access private + */ + var $padding = true; + + /** + * The Initialization Vector + * + * @see Crypt_DES::setIV() + * @var String + * @access private + */ + var $iv = "\0\0\0\0\0\0\0\0"; + + /** + * A "sliding" Initialization Vector + * + * @see Crypt_DES::enableContinuousBuffer() + * @var String + * @access private + */ + var $encryptIV = "\0\0\0\0\0\0\0\0"; + + /** + * A "sliding" Initialization Vector + * + * @see Crypt_DES::enableContinuousBuffer() + * @var String + * @access private + */ + var $decryptIV = "\0\0\0\0\0\0\0\0"; + + /** + * mcrypt resource for encryption + * + * The mcrypt resource can be recreated every time something needs to be created or it can be created just once. + * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode. + * + * @see Crypt_DES::encrypt() + * @var String + * @access private + */ + var $enmcrypt; + + /** + * mcrypt resource for decryption + * + * The mcrypt resource can be recreated every time something needs to be created or it can be created just once. + * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode. + * + * @see Crypt_DES::decrypt() + * @var String + * @access private + */ + var $demcrypt; + + /** + * Does the enmcrypt resource need to be (re)initialized? + * + * @see Crypt_DES::setKey() + * @see Crypt_DES::setIV() + * @var Boolean + * @access private + */ + var $enchanged = true; + + /** + * Does the demcrypt resource need to be (re)initialized? + * + * @see Crypt_DES::setKey() + * @see Crypt_DES::setIV() + * @var Boolean + * @access private + */ + var $dechanged = true; + + /** + * Is the mode one that is paddable? + * + * @see Crypt_DES::Crypt_DES() + * @var Boolean + * @access private + */ + var $paddable = false; + + /** + * Encryption buffer for CTR, OFB and CFB modes + * + * @see Crypt_DES::encrypt() + * @var String + * @access private + */ + var $enbuffer = ''; + + /** + * Decryption buffer for CTR, OFB and CFB modes + * + * @see Crypt_DES::decrypt() + * @var String + * @access private + */ + var $debuffer = ''; + + /** + * mcrypt resource for CFB mode + * + * @see Crypt_DES::encrypt() + * @see Crypt_DES::decrypt() + * @var String + * @access private + */ + var $ecb; + + /** + * Default Constructor. + * + * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be + * CRYPT_DES_MODE_ECB or CRYPT_DES_MODE_CBC. If not explictly set, CRYPT_DES_MODE_CBC will be used. + * + * @param optional Integer $mode + * @return Crypt_DES + * @access public + */ + function Crypt_DES($mode = CRYPT_DES_MODE_CBC) + { + if ( !defined('CRYPT_DES_MODE') ) { + switch (true) { + case extension_loaded('mcrypt') && in_array('des', mcrypt_list_algorithms()): + define('CRYPT_DES_MODE', CRYPT_DES_MODE_MCRYPT); + break; + default: + define('CRYPT_DES_MODE', CRYPT_DES_MODE_INTERNAL); + } + } + + switch ( CRYPT_DES_MODE ) { + case CRYPT_DES_MODE_MCRYPT: + switch ($mode) { + case CRYPT_DES_MODE_ECB: + $this->paddable = true; + $this->mode = MCRYPT_MODE_ECB; + break; + case CRYPT_DES_MODE_CTR: + $this->mode = 'ctr'; + //$this->mode = in_array('ctr', mcrypt_list_modes()) ? 'ctr' : CRYPT_DES_MODE_CTR; + break; + case CRYPT_DES_MODE_CFB: + $this->mode = 'ncfb'; + break; + case CRYPT_DES_MODE_OFB: + $this->mode = MCRYPT_MODE_NOFB; + break; + case CRYPT_DES_MODE_CBC: + default: + $this->paddable = true; + $this->mode = MCRYPT_MODE_CBC; + } + + break; + default: + switch ($mode) { + case CRYPT_DES_MODE_ECB: + case CRYPT_DES_MODE_CBC: + $this->paddable = true; + $this->mode = $mode; + break; + case CRYPT_DES_MODE_CTR: + case CRYPT_DES_MODE_CFB: + case CRYPT_DES_MODE_OFB: + $this->mode = $mode; + break; + default: + $this->paddable = true; + $this->mode = CRYPT_DES_MODE_CBC; + } + } + } + + /** + * Sets the key. + * + * Keys can be of any length. DES, itself, uses 64-bit keys (eg. strlen($key) == 8), however, we + * only use the first eight, if $key has more then eight characters in it, and pad $key with the + * null byte if it is less then eight characters long. + * + * DES also requires that every eighth bit be a parity bit, however, we'll ignore that. + * + * If the key is not explicitly set, it'll be assumed to be all zero's. + * + * @access public + * @param String $key + */ + function setKey($key) + { + $this->keys = ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) ? str_pad(substr($key, 0, 8), 8, chr(0)) : $this->_prepareKey($key); + $this->changed = true; + } + + /** + * Sets the password. + * + * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows: + * {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2}: + * $hash, $salt, $count + * + * @param String $password + * @param optional String $method + * @access public + */ + function setPassword($password, $method = 'pbkdf2') + { + $key = ''; + + switch ($method) { + default: // 'pbkdf2' + list(, , $hash, $salt, $count) = func_get_args(); + if (!isset($hash)) { + $hash = 'sha1'; + } + // WPA and WPA use the SSID as the salt + if (!isset($salt)) { + $salt = 'phpseclib/salt'; + } + // RFC2898#section-4.2 uses 1,000 iterations by default + // WPA and WPA2 use 4,096. + if (!isset($count)) { + $count = 1000; + } + + if (!class_exists('Crypt_Hash')) { + require_once('Crypt/Hash.php'); + } + + $i = 1; + while (strlen($key) < 8) { // $dkLen == 8 + //$dk.= $this->_pbkdf($password, $salt, $count, $i++); + $hmac = new Crypt_Hash(); + $hmac->setHash($hash); + $hmac->setKey($password); + $f = $u = $hmac->hash($salt . pack('N', $i++)); + for ($j = 2; $j <= $count; $j++) { + $u = $hmac->hash($u); + $f^= $u; + } + $key.= $f; + } + } + + $this->setKey($key); + } + + /** + * Sets the initialization vector. (optional) + * + * SetIV is not required when CRYPT_DES_MODE_ECB is being used. If not explictly set, it'll be assumed + * to be all zero's. + * + * @access public + * @param String $iv + */ + function setIV($iv) + { + $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, 8), 8, chr(0)); + $this->changed = true; + } + + /** + * Generate CTR XOR encryption key + * + * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the + * plaintext / ciphertext in CTR mode. + * + * @see Crypt_DES::decrypt() + * @see Crypt_DES::encrypt() + * @access public + * @param Integer $length + * @param String $iv + */ + function _generate_xor($length, &$iv) + { + $xor = ''; + $num_blocks = ($length + 7) >> 3; + for ($i = 0; $i < $num_blocks; $i++) { + $xor.= $iv; + for ($j = 4; $j <= 8; $j+=4) { + $temp = substr($iv, -$j, 4); + switch ($temp) { + case "\xFF\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4); + break; + case "\x7F\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4); + break 2; + default: + extract(unpack('Ncount', $temp)); + $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4); + break 2; + } + } + } + + return $xor; + } + + /** + * Encrypts a message. + * + * $plaintext will be padded with up to 8 additional bytes. Other DES implementations may or may not pad in the + * same manner. Other common approaches to padding and the reasons why it's necessary are discussed in the following + * URL: + * + * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html} + * + * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does. + * strlen($plaintext) will still need to be a multiple of 8, however, arbitrary values can be added to make it that + * length. + * + * @see Crypt_DES::decrypt() + * @access public + * @param String $plaintext + */ + function encrypt($plaintext) + { + if ($this->paddable) { + $plaintext = $this->_pad($plaintext); + } + + if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) { + if ($this->enchanged) { + if (!isset($this->enmcrypt)) { + $this->enmcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, ''); + } + mcrypt_generic_init($this->enmcrypt, $this->keys, $this->encryptIV); + if ($this->mode != 'ncfb') { + $this->enchanged = false; + } + } + + if ($this->mode != 'ncfb') { + $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext); + } else { + if ($this->enchanged) { + $this->ecb = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, ''); + mcrypt_generic_init($this->ecb, $this->keys, "\0\0\0\0\0\0\0\0"); + $this->enchanged = false; + } + + if (strlen($this->enbuffer)) { + $ciphertext = $plaintext ^ substr($this->encryptIV, strlen($this->enbuffer)); + $this->enbuffer.= $ciphertext; + if (strlen($this->enbuffer) == 8) { + $this->encryptIV = $this->enbuffer; + $this->enbuffer = ''; + mcrypt_generic_init($this->enmcrypt, $this->keys, $this->encryptIV); + } + $plaintext = substr($plaintext, strlen($ciphertext)); + } else { + $ciphertext = ''; + } + + $last_pos = strlen($plaintext) & 0xFFFFFFF8; + $ciphertext.= $last_pos ? mcrypt_generic($this->enmcrypt, substr($plaintext, 0, $last_pos)) : ''; + + if (strlen($plaintext) & 0x7) { + if (strlen($ciphertext)) { + $this->encryptIV = substr($ciphertext, -8); + } + $this->encryptIV = mcrypt_generic($this->ecb, $this->encryptIV); + $this->enbuffer = substr($plaintext, $last_pos) ^ $this->encryptIV; + $ciphertext.= $this->enbuffer; + } + } + + if (!$this->continuousBuffer) { + mcrypt_generic_init($this->enmcrypt, $this->keys, $this->encryptIV); + } + + return $ciphertext; + } + + if (!is_array($this->keys)) { + $this->keys = $this->_prepareKey("\0\0\0\0\0\0\0\0"); + } + + $buffer = &$this->enbuffer; + $continuousBuffer = $this->continuousBuffer; + $ciphertext = ''; + switch ($this->mode) { + case CRYPT_DES_MODE_ECB: + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $ciphertext.= $this->_processBlock(substr($plaintext, $i, 8), CRYPT_DES_ENCRYPT); + } + break; + case CRYPT_DES_MODE_CBC: + $xor = $this->encryptIV; + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $block = substr($plaintext, $i, 8); + $block = $this->_processBlock($block ^ $xor, CRYPT_DES_ENCRYPT); + $xor = $block; + $ciphertext.= $block; + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + } + break; + case CRYPT_DES_MODE_CTR: + $xor = $this->encryptIV; + if (strlen($buffer['encrypted'])) { + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $block = substr($plaintext, $i, 8); + $buffer['encrypted'].= $this->_processBlock($this->_generate_xor(8, $xor), CRYPT_DES_ENCRYPT); + $key = $this->_string_shift($buffer['encrypted'], 8); + $ciphertext.= $block ^ $key; + } + } else { + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $block = substr($plaintext, $i, 8); + $key = $this->_processBlock($this->_generate_xor(8, $xor), CRYPT_DES_ENCRYPT); + $ciphertext.= $block ^ $key; + } + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + if ($start = strlen($plaintext) & 7) { + $buffer['encrypted'] = substr($key, $start) . $buffer['encrypted']; + } + } + break; + case CRYPT_DES_MODE_CFB: + if (!empty($buffer['xor'])) { + $ciphertext = $plaintext ^ $buffer['xor']; + $iv = $buffer['encrypted'] . $ciphertext; + $start = strlen($ciphertext); + $buffer['encrypted'].= $ciphertext; + $buffer['xor'] = substr($buffer['xor'], strlen($ciphertext)); + } else { + $ciphertext = ''; + $iv = $this->encryptIV; + $start = 0; + } + + for ($i = $start; $i < strlen($plaintext); $i+=8) { + $block = substr($plaintext, $i, 8); + $xor = $this->_processBlock($iv, CRYPT_DES_ENCRYPT); + $iv = $block ^ $xor; + if ($continuousBuffer && strlen($iv) != 8) { + $buffer = array( + 'encrypted' => $iv, + 'xor' => substr($xor, strlen($iv)) + ); + } + $ciphertext.= $iv; + } + + if ($this->continuousBuffer) { + $this->encryptIV = $iv; + } + break; + case CRYPT_DES_MODE_OFB: + $xor = $this->encryptIV; + if (strlen($buffer)) { + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $xor = $this->_processBlock($xor, CRYPT_DES_ENCRYPT); + $buffer.= $xor; + $key = $this->_string_shift($buffer, 8); + $ciphertext.= substr($plaintext, $i, 8) ^ $key; + } + } else { + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $xor = $this->_processBlock($xor, CRYPT_DES_ENCRYPT); + $ciphertext.= substr($plaintext, $i, 8) ^ $xor; + } + $key = $xor; + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + if ($start = strlen($plaintext) & 7) { + $buffer = substr($key, $start) . $buffer; + } + } + } + + return $ciphertext; + } + + /** + * Decrypts a message. + * + * If strlen($ciphertext) is not a multiple of 8, null bytes will be added to the end of the string until it is. + * + * @see Crypt_DES::encrypt() + * @access public + * @param String $ciphertext + */ + function decrypt($ciphertext) + { + if ($this->paddable) { + // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic : + // "The data is padded with "\0" to make sure the length of the data is n * blocksize." + $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, chr(0)); + } + + if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) { + if ($this->dechanged) { + if (!isset($this->demcrypt)) { + $this->demcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, ''); + } + mcrypt_generic_init($this->demcrypt, $this->keys, $this->decryptIV); + if ($this->mode != 'ncfb') { + $this->dechanged = false; + } + } + + if ($this->mode != 'ncfb') { + $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext); + } else { + if ($this->dechanged) { + $this->ecb = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, ''); + mcrypt_generic_init($this->ecb, $this->keys, "\0\0\0\0\0\0\0\0"); + $this->dechanged = false; + } + + if (strlen($this->debuffer)) { + $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($this->debuffer)); + + $this->debuffer.= substr($ciphertext, 0, strlen($plaintext)); + if (strlen($this->debuffer) == 8) { + $this->decryptIV = $this->debuffer; + $this->debuffer = ''; + mcrypt_generic_init($this->demcrypt, $this->keys, $this->decryptIV); + } + $ciphertext = substr($ciphertext, strlen($plaintext)); + } else { + $plaintext = ''; + } + + $last_pos = strlen($ciphertext) & 0xFFFFFFF8; + $plaintext.= $last_pos ? mdecrypt_generic($this->demcrypt, substr($ciphertext, 0, $last_pos)) : ''; + + if (strlen($ciphertext) & 0x7) { + if (strlen($plaintext)) { + $this->decryptIV = substr($ciphertext, $last_pos - 8, 8); + } + $this->decryptIV = mcrypt_generic($this->ecb, $this->decryptIV); + $this->debuffer = substr($ciphertext, $last_pos); + $plaintext.= $this->debuffer ^ $this->decryptIV; + } + + return $plaintext; + } + + if (!$this->continuousBuffer) { + mcrypt_generic_init($this->demcrypt, $this->keys, $this->decryptIV); + } + + return $this->paddable ? $this->_unpad($plaintext) : $plaintext; + } + + if (!is_array($this->keys)) { + $this->keys = $this->_prepareKey("\0\0\0\0\0\0\0\0"); + } + + $buffer = &$this->debuffer; + $continuousBuffer = $this->continuousBuffer; + $plaintext = ''; + switch ($this->mode) { + case CRYPT_DES_MODE_ECB: + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $plaintext.= $this->_processBlock(substr($ciphertext, $i, 8), CRYPT_DES_DECRYPT); + } + break; + case CRYPT_DES_MODE_CBC: + $xor = $this->decryptIV; + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $block = substr($ciphertext, $i, 8); + $plaintext.= $this->_processBlock($block, CRYPT_DES_DECRYPT) ^ $xor; + $xor = $block; + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + } + break; + case CRYPT_DES_MODE_CTR: + $xor = $this->decryptIV; + if (strlen($buffer['ciphertext'])) { + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $block = substr($ciphertext, $i, 8); + $buffer['ciphertext'].= $this->_processBlock($this->_generate_xor(8, $xor), CRYPT_DES_ENCRYPT); + $key = $this->_string_shift($buffer['ciphertext'], 8); + $plaintext.= $block ^ $key; + } + } else { + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $block = substr($ciphertext, $i, 8); + $key = $this->_processBlock($this->_generate_xor(8, $xor), CRYPT_DES_ENCRYPT); + $plaintext.= $block ^ $key; + } + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + if ($start = strlen($ciphertext) % 8) { + $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext']; + } + } + break; + case CRYPT_DES_MODE_CFB: + if (!empty($buffer['ciphertext'])) { + $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($buffer['ciphertext'])); + $buffer['ciphertext'].= substr($ciphertext, 0, strlen($plaintext)); + if (strlen($buffer['ciphertext']) == 8) { + $xor = $this->_processBlock($buffer['ciphertext'], CRYPT_DES_ENCRYPT); + $buffer['ciphertext'] = ''; + } + $start = strlen($plaintext); + $block = $this->decryptIV; + } else { + $plaintext = ''; + $xor = $this->_processBlock($this->decryptIV, CRYPT_DES_ENCRYPT); + $start = 0; + } + + for ($i = $start; $i < strlen($ciphertext); $i+=8) { + $block = substr($ciphertext, $i, 8); + $plaintext.= $block ^ $xor; + if ($continuousBuffer && strlen($block) != 8) { + $buffer['ciphertext'].= $block; + $block = $xor; + } else if (strlen($block) == 8) { + $xor = $this->_processBlock($block, CRYPT_DES_ENCRYPT); + } + } + if ($this->continuousBuffer) { + $this->decryptIV = $block; + } + break; + case CRYPT_DES_MODE_OFB: + $xor = $this->decryptIV; + if (strlen($buffer)) { + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $xor = $this->_processBlock($xor, CRYPT_DES_ENCRYPT); + $buffer.= $xor; + $key = $this->_string_shift($buffer, 8); + $plaintext.= substr($ciphertext, $i, 8) ^ $key; + } + } else { + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $xor = $this->_processBlock($xor, CRYPT_DES_ENCRYPT); + $plaintext.= substr($ciphertext, $i, 8) ^ $xor; + } + $key = $xor; + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + if ($start = strlen($ciphertext) % 8) { + $buffer = substr($key, $start) . $buffer; + } + } + } + + return $this->paddable ? $this->_unpad($plaintext) : $plaintext; + } + + /** + * Treat consecutive "packets" as if they are a continuous buffer. + * + * Say you have a 16-byte plaintext $plaintext. Using the default behavior, the two following code snippets + * will yield different outputs: + * + * + * echo $des->encrypt(substr($plaintext, 0, 8)); + * echo $des->encrypt(substr($plaintext, 8, 8)); + * + * + * echo $des->encrypt($plaintext); + * + * + * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates + * another, as demonstrated with the following: + * + * + * $des->encrypt(substr($plaintext, 0, 8)); + * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8))); + * + * + * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8))); + * + * + * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different + * outputs. The reason is due to the fact that the initialization vector's change after every encryption / + * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant. + * + * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each + * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that + * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them), + * however, they are also less intuitive and more likely to cause you problems. + * + * @see Crypt_DES::disableContinuousBuffer() + * @access public + */ + function enableContinuousBuffer() + { + $this->continuousBuffer = true; + } + + /** + * Treat consecutive packets as if they are a discontinuous buffer. + * + * The default behavior. + * + * @see Crypt_DES::enableContinuousBuffer() + * @access public + */ + function disableContinuousBuffer() + { + $this->continuousBuffer = false; + $this->encryptIV = $this->iv; + $this->decryptIV = $this->iv; + } + + /** + * Pad "packets". + * + * DES works by encrypting eight bytes at a time. If you ever need to encrypt or decrypt something that's not + * a multiple of eight, it becomes necessary to pad the input so that it's length is a multiple of eight. + * + * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH1, + * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping + * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is + * transmitted separately) + * + * @see Crypt_DES::disablePadding() + * @access public + */ + function enablePadding() + { + $this->padding = true; + } + + /** + * Do not pad packets. + * + * @see Crypt_DES::enablePadding() + * @access public + */ + function disablePadding() + { + $this->padding = false; + } + + /** + * Pads a string + * + * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize (8). + * 8 - (strlen($text) & 7) bytes are added, each of which is equal to chr(8 - (strlen($text) & 7) + * + * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless + * and padding will, hence forth, be enabled. + * + * @see Crypt_DES::_unpad() + * @access private + */ + function _pad($text) + { + $length = strlen($text); + + if (!$this->padding) { + if (($length & 7) == 0) { + return $text; + } else { + $this->_handle_error("The plaintext's length ($length) is not a multiple of the block size (8)"); + $this->padding = true; + } + } + + $pad = 8 - ($length & 7); + return str_pad($text, $length + $pad, chr($pad)); + } + + /** + * Unpads a string + * + * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong + * and false will be returned. + * + * @see Crypt_DES::_pad() + * @access private + */ + function _unpad($text) + { + if (!$this->padding) { + return $text; + } + + $length = ord($text[strlen($text) - 1]); + + if (!$length || $length > 8) { + return false; + } + + return substr($text, 0, -$length); + } + + /** + * Encrypts or decrypts a 64-bit block + * + * $mode should be either CRYPT_DES_ENCRYPT or CRYPT_DES_DECRYPT. See + * {@link http://en.wikipedia.org/wiki/Image:Feistel.png Feistel.png} to get a general + * idea of what this function does. + * + * @access private + * @param String $block + * @param Integer $mode + * @return String + */ + function _processBlock($block, $mode) + { + // s-boxes. in the official DES docs, they're described as being matrices that + // one accesses by using the first and last bits to determine the row and the + // middle four bits to determine the column. in this implementation, they've + // been converted to vectors + static $sbox = array( + array( + 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, + 3, 10 ,10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, + 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, + 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13 + ), + array( + 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, + 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, + 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, + 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9 + ), + array( + 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, + 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, + 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, + 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12 + ), + array( + 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, + 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, + 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, + 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14 + ), + array( + 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, + 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, + 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, + 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3 + ), + array( + 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, + 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, + 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, + 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13 + ), + array( + 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, + 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, + 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, + 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12 + ), + array( + 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, + 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, + 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, + 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11 + ) + ); + + $keys = $this->keys; + + $temp = unpack('Na/Nb', $block); + $block = array($temp['a'], $temp['b']); + + // because php does arithmetic right shifts, if the most significant bits are set, right + // shifting those into the correct position will add 1's - not 0's. this will intefere + // with the | operation unless a second & is done. so we isolate these bits and left shift + // them into place. we then & each block with 0x7FFFFFFF to prevennt 1's from being added + // for any other shifts. + $msb = array( + ($block[0] >> 31) & 1, + ($block[1] >> 31) & 1 + ); + $block[0] &= 0x7FFFFFFF; + $block[1] &= 0x7FFFFFFF; + + // we isolate the appropriate bit in the appropriate integer and shift as appropriate. in + // some cases, there are going to be multiple bits in the same integer that need to be shifted + // in the same way. we combine those into one shift operation. + $block = array( + (($block[1] & 0x00000040) << 25) | (($block[1] & 0x00004000) << 16) | + (($block[1] & 0x00400001) << 7) | (($block[1] & 0x40000100) >> 2) | + (($block[0] & 0x00000040) << 21) | (($block[0] & 0x00004000) << 12) | + (($block[0] & 0x00400001) << 3) | (($block[0] & 0x40000100) >> 6) | + (($block[1] & 0x00000010) << 19) | (($block[1] & 0x00001000) << 10) | + (($block[1] & 0x00100000) << 1) | (($block[1] & 0x10000000) >> 8) | + (($block[0] & 0x00000010) << 15) | (($block[0] & 0x00001000) << 6) | + (($block[0] & 0x00100000) >> 3) | (($block[0] & 0x10000000) >> 12) | + (($block[1] & 0x00000004) << 13) | (($block[1] & 0x00000400) << 4) | + (($block[1] & 0x00040000) >> 5) | (($block[1] & 0x04000000) >> 14) | + (($block[0] & 0x00000004) << 9) | ( $block[0] & 0x00000400 ) | + (($block[0] & 0x00040000) >> 9) | (($block[0] & 0x04000000) >> 18) | + (($block[1] & 0x00010000) >> 11) | (($block[1] & 0x01000000) >> 20) | + (($block[0] & 0x00010000) >> 15) | (($block[0] & 0x01000000) >> 24) + , + (($block[1] & 0x00000080) << 24) | (($block[1] & 0x00008000) << 15) | + (($block[1] & 0x00800002) << 6) | (($block[0] & 0x00000080) << 20) | + (($block[0] & 0x00008000) << 11) | (($block[0] & 0x00800002) << 2) | + (($block[1] & 0x00000020) << 18) | (($block[1] & 0x00002000) << 9) | + ( $block[1] & 0x00200000 ) | (($block[1] & 0x20000000) >> 9) | + (($block[0] & 0x00000020) << 14) | (($block[0] & 0x00002000) << 5) | + (($block[0] & 0x00200000) >> 4) | (($block[0] & 0x20000000) >> 13) | + (($block[1] & 0x00000008) << 12) | (($block[1] & 0x00000800) << 3) | + (($block[1] & 0x00080000) >> 6) | (($block[1] & 0x08000000) >> 15) | + (($block[0] & 0x00000008) << 8) | (($block[0] & 0x00000800) >> 1) | + (($block[0] & 0x00080000) >> 10) | (($block[0] & 0x08000000) >> 19) | + (($block[1] & 0x00000200) >> 3) | (($block[0] & 0x00000200) >> 7) | + (($block[1] & 0x00020000) >> 12) | (($block[1] & 0x02000000) >> 21) | + (($block[0] & 0x00020000) >> 16) | (($block[0] & 0x02000000) >> 25) | + ($msb[1] << 28) | ($msb[0] << 24) + ); + + for ($i = 0; $i < 16; $i++) { + // start of "the Feistel (F) function" - see the following URL: + // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png + $temp = (($sbox[0][((($block[1] >> 27) & 0x1F) | (($block[1] & 1) << 5)) ^ $keys[$mode][$i][0]]) << 28) + | (($sbox[1][(($block[1] & 0x1F800000) >> 23) ^ $keys[$mode][$i][1]]) << 24) + | (($sbox[2][(($block[1] & 0x01F80000) >> 19) ^ $keys[$mode][$i][2]]) << 20) + | (($sbox[3][(($block[1] & 0x001F8000) >> 15) ^ $keys[$mode][$i][3]]) << 16) + | (($sbox[4][(($block[1] & 0x0001F800) >> 11) ^ $keys[$mode][$i][4]]) << 12) + | (($sbox[5][(($block[1] & 0x00001F80) >> 7) ^ $keys[$mode][$i][5]]) << 8) + | (($sbox[6][(($block[1] & 0x000001F8) >> 3) ^ $keys[$mode][$i][6]]) << 4) + | ( $sbox[7][((($block[1] & 0x1F) << 1) | (($block[1] >> 31) & 1)) ^ $keys[$mode][$i][7]]); + + $msb = ($temp >> 31) & 1; + $temp &= 0x7FFFFFFF; + $newBlock = (($temp & 0x00010000) << 15) | (($temp & 0x02020120) << 5) + | (($temp & 0x00001800) << 17) | (($temp & 0x01000000) >> 10) + | (($temp & 0x00000008) << 24) | (($temp & 0x00100000) << 6) + | (($temp & 0x00000010) << 21) | (($temp & 0x00008000) << 9) + | (($temp & 0x00000200) << 12) | (($temp & 0x10000000) >> 27) + | (($temp & 0x00000040) << 14) | (($temp & 0x08000000) >> 8) + | (($temp & 0x00004000) << 4) | (($temp & 0x00000002) << 16) + | (($temp & 0x00442000) >> 6) | (($temp & 0x40800000) >> 15) + | (($temp & 0x00000001) << 11) | (($temp & 0x20000000) >> 20) + | (($temp & 0x00080000) >> 13) | (($temp & 0x00000004) << 3) + | (($temp & 0x04000000) >> 22) | (($temp & 0x00000480) >> 7) + | (($temp & 0x00200000) >> 19) | ($msb << 23); + // end of "the Feistel (F) function" - $newBlock is F's output + + $temp = $block[1]; + $block[1] = $block[0] ^ $newBlock; + $block[0] = $temp; + } + + $msb = array( + ($block[0] >> 31) & 1, + ($block[1] >> 31) & 1 + ); + $block[0] &= 0x7FFFFFFF; + $block[1] &= 0x7FFFFFFF; + + $block = array( + (($block[0] & 0x01000004) << 7) | (($block[1] & 0x01000004) << 6) | + (($block[0] & 0x00010000) << 13) | (($block[1] & 0x00010000) << 12) | + (($block[0] & 0x00000100) << 19) | (($block[1] & 0x00000100) << 18) | + (($block[0] & 0x00000001) << 25) | (($block[1] & 0x00000001) << 24) | + (($block[0] & 0x02000008) >> 2) | (($block[1] & 0x02000008) >> 3) | + (($block[0] & 0x00020000) << 4) | (($block[1] & 0x00020000) << 3) | + (($block[0] & 0x00000200) << 10) | (($block[1] & 0x00000200) << 9) | + (($block[0] & 0x00000002) << 16) | (($block[1] & 0x00000002) << 15) | + (($block[0] & 0x04000000) >> 11) | (($block[1] & 0x04000000) >> 12) | + (($block[0] & 0x00040000) >> 5) | (($block[1] & 0x00040000) >> 6) | + (($block[0] & 0x00000400) << 1) | ( $block[1] & 0x00000400 ) | + (($block[0] & 0x08000000) >> 20) | (($block[1] & 0x08000000) >> 21) | + (($block[0] & 0x00080000) >> 14) | (($block[1] & 0x00080000) >> 15) | + (($block[0] & 0x00000800) >> 8) | (($block[1] & 0x00000800) >> 9) + , + (($block[0] & 0x10000040) << 3) | (($block[1] & 0x10000040) << 2) | + (($block[0] & 0x00100000) << 9) | (($block[1] & 0x00100000) << 8) | + (($block[0] & 0x00001000) << 15) | (($block[1] & 0x00001000) << 14) | + (($block[0] & 0x00000010) << 21) | (($block[1] & 0x00000010) << 20) | + (($block[0] & 0x20000080) >> 6) | (($block[1] & 0x20000080) >> 7) | + ( $block[0] & 0x00200000 ) | (($block[1] & 0x00200000) >> 1) | + (($block[0] & 0x00002000) << 6) | (($block[1] & 0x00002000) << 5) | + (($block[0] & 0x00000020) << 12) | (($block[1] & 0x00000020) << 11) | + (($block[0] & 0x40000000) >> 15) | (($block[1] & 0x40000000) >> 16) | + (($block[0] & 0x00400000) >> 9) | (($block[1] & 0x00400000) >> 10) | + (($block[0] & 0x00004000) >> 3) | (($block[1] & 0x00004000) >> 4) | + (($block[0] & 0x00800000) >> 18) | (($block[1] & 0x00800000) >> 19) | + (($block[0] & 0x00008000) >> 12) | (($block[1] & 0x00008000) >> 13) | + ($msb[0] << 7) | ($msb[1] << 6) + ); + + return pack('NN', $block[0], $block[1]); + } + + /** + * Creates the key schedule. + * + * @access private + * @param String $key + * @return Array + */ + function _prepareKey($key) + { + static $shifts = array( // number of key bits shifted per round + 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 + ); + + // pad the key and remove extra characters as appropriate. + $key = str_pad(substr($key, 0, 8), 8, chr(0)); + + $temp = unpack('Na/Nb', $key); + $key = array($temp['a'], $temp['b']); + $msb = array( + ($key[0] >> 31) & 1, + ($key[1] >> 31) & 1 + ); + $key[0] &= 0x7FFFFFFF; + $key[1] &= 0x7FFFFFFF; + + $key = array( + (($key[1] & 0x00000002) << 26) | (($key[1] & 0x00000204) << 17) | + (($key[1] & 0x00020408) << 8) | (($key[1] & 0x02040800) >> 1) | + (($key[0] & 0x00000002) << 22) | (($key[0] & 0x00000204) << 13) | + (($key[0] & 0x00020408) << 4) | (($key[0] & 0x02040800) >> 5) | + (($key[1] & 0x04080000) >> 10) | (($key[0] & 0x04080000) >> 14) | + (($key[1] & 0x08000000) >> 19) | (($key[0] & 0x08000000) >> 23) | + (($key[0] & 0x00000010) >> 1) | (($key[0] & 0x00001000) >> 10) | + (($key[0] & 0x00100000) >> 19) | (($key[0] & 0x10000000) >> 28) + , + (($key[1] & 0x00000080) << 20) | (($key[1] & 0x00008000) << 11) | + (($key[1] & 0x00800000) << 2) | (($key[0] & 0x00000080) << 16) | + (($key[0] & 0x00008000) << 7) | (($key[0] & 0x00800000) >> 2) | + (($key[1] & 0x00000040) << 13) | (($key[1] & 0x00004000) << 4) | + (($key[1] & 0x00400000) >> 5) | (($key[1] & 0x40000000) >> 14) | + (($key[0] & 0x00000040) << 9) | ( $key[0] & 0x00004000 ) | + (($key[0] & 0x00400000) >> 9) | (($key[0] & 0x40000000) >> 18) | + (($key[1] & 0x00000020) << 6) | (($key[1] & 0x00002000) >> 3) | + (($key[1] & 0x00200000) >> 12) | (($key[1] & 0x20000000) >> 21) | + (($key[0] & 0x00000020) << 2) | (($key[0] & 0x00002000) >> 7) | + (($key[0] & 0x00200000) >> 16) | (($key[0] & 0x20000000) >> 25) | + (($key[1] & 0x00000010) >> 1) | (($key[1] & 0x00001000) >> 10) | + (($key[1] & 0x00100000) >> 19) | (($key[1] & 0x10000000) >> 28) | + ($msb[1] << 24) | ($msb[0] << 20) + ); + + $keys = array(); + for ($i = 0; $i < 16; $i++) { + $key[0] <<= $shifts[$i]; + $temp = ($key[0] & 0xF0000000) >> 28; + $key[0] = ($key[0] | $temp) & 0x0FFFFFFF; + + $key[1] <<= $shifts[$i]; + $temp = ($key[1] & 0xF0000000) >> 28; + $key[1] = ($key[1] | $temp) & 0x0FFFFFFF; + + $temp = array( + (($key[1] & 0x00004000) >> 9) | (($key[1] & 0x00000800) >> 7) | + (($key[1] & 0x00020000) >> 14) | (($key[1] & 0x00000010) >> 2) | + (($key[1] & 0x08000000) >> 26) | (($key[1] & 0x00800000) >> 23) + , + (($key[1] & 0x02400000) >> 20) | (($key[1] & 0x00000001) << 4) | + (($key[1] & 0x00002000) >> 10) | (($key[1] & 0x00040000) >> 18) | + (($key[1] & 0x00000080) >> 6) + , + ( $key[1] & 0x00000020 ) | (($key[1] & 0x00000200) >> 5) | + (($key[1] & 0x00010000) >> 13) | (($key[1] & 0x01000000) >> 22) | + (($key[1] & 0x00000004) >> 1) | (($key[1] & 0x00100000) >> 20) + , + (($key[1] & 0x00001000) >> 7) | (($key[1] & 0x00200000) >> 17) | + (($key[1] & 0x00000002) << 2) | (($key[1] & 0x00000100) >> 6) | + (($key[1] & 0x00008000) >> 14) | (($key[1] & 0x04000000) >> 26) + , + (($key[0] & 0x00008000) >> 10) | ( $key[0] & 0x00000010 ) | + (($key[0] & 0x02000000) >> 22) | (($key[0] & 0x00080000) >> 17) | + (($key[0] & 0x00000200) >> 8) | (($key[0] & 0x00000002) >> 1) + , + (($key[0] & 0x04000000) >> 21) | (($key[0] & 0x00010000) >> 12) | + (($key[0] & 0x00000020) >> 2) | (($key[0] & 0x00000800) >> 9) | + (($key[0] & 0x00800000) >> 22) | (($key[0] & 0x00000100) >> 8) + , + (($key[0] & 0x00001000) >> 7) | (($key[0] & 0x00000088) >> 3) | + (($key[0] & 0x00020000) >> 14) | (($key[0] & 0x00000001) << 2) | + (($key[0] & 0x00400000) >> 21) + , + (($key[0] & 0x00000400) >> 5) | (($key[0] & 0x00004000) >> 10) | + (($key[0] & 0x00000040) >> 3) | (($key[0] & 0x00100000) >> 18) | + (($key[0] & 0x08000000) >> 26) | (($key[0] & 0x01000000) >> 24) + ); + + $keys[] = $temp; + } + + $temp = array( + CRYPT_DES_ENCRYPT => $keys, + CRYPT_DES_DECRYPT => array_reverse($keys) + ); + + return $temp; + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param String $string + * @param optional Integer $index + * @return String + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } + + /** + * Error Handler + * + * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. + * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. + * + * @param String $string + * @access private + */ + function _handle_error($err_msg) { + if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { + $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; + throw(new $class($err_msg)); + } else { + user_error($err_msg); + } + } +} + +// vim: ts=4:sw=4:et: +// vim6: fdl=1: \ No newline at end of file diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Hash.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Hash.php new file mode 100644 index 0000000000..c5d314f009 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Hash.php @@ -0,0 +1,825 @@ + + * setKey('abcdefg'); + * + * echo base64_encode($hash->hash('abcdefg')); + * ?> + * + * + * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @category Crypt + * @package Crypt_Hash + * @author Jim Wigginton + * @copyright MMVII Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @version $Id: Hash.php,v 1.6 2009/11/23 23:37:07 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/**#@+ + * @access private + * @see Crypt_Hash::Crypt_Hash() + */ +/** + * Toggles the internal implementation + */ +define('CRYPT_HASH_MODE_INTERNAL', 1); +/** + * Toggles the mhash() implementation, which has been deprecated on PHP 5.3.0+. + */ +define('CRYPT_HASH_MODE_MHASH', 2); +/** + * Toggles the hash() implementation, which works on PHP 5.1.2+. + */ +define('CRYPT_HASH_MODE_HASH', 3); +/**#@-*/ + +/** + * Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic hashing functions. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Crypt_Hash + */ +class Crypt_Hash { + /** + * Byte-length of compression blocks / key (Internal HMAC) + * + * @see Crypt_Hash::setAlgorithm() + * @var Integer + * @access private + */ + var $b; + + /** + * Byte-length of hash output (Internal HMAC) + * + * @see Crypt_Hash::setHash() + * @var Integer + * @access private + */ + var $l = false; + + /** + * Hash Algorithm + * + * @see Crypt_Hash::setHash() + * @var String + * @access private + */ + var $hash; + + /** + * Key + * + * @see Crypt_Hash::setKey() + * @var String + * @access private + */ + var $key = false; + + /** + * Outer XOR (Internal HMAC) + * + * @see Crypt_Hash::setKey() + * @var String + * @access private + */ + var $opad; + + /** + * Inner XOR (Internal HMAC) + * + * @see Crypt_Hash::setKey() + * @var String + * @access private + */ + var $ipad; + + /** + * Default Constructor. + * + * @param optional String $hash + * @return Crypt_Hash + * @access public + */ + function Crypt_Hash($hash = 'sha1') + { + if ( !defined('CRYPT_HASH_MODE') ) { + switch (true) { + case extension_loaded('hash'): + define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_HASH); + break; + case extension_loaded('mhash'): + define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_MHASH); + break; + default: + define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_INTERNAL); + } + } + + $this->setHash($hash); + } + + /** + * Sets the key for HMACs + * + * Keys can be of any length. + * + * @access public + * @param String $key + */ + function setKey($key = false) + { + $this->key = $key; + } + + /** + * Sets the hash function. + * + * @access public + * @param String $hash + */ + function setHash($hash) + { + $hash = strtolower($hash); + switch ($hash) { + case 'md5-96': + case 'sha1-96': + $this->l = 12; // 96 / 8 = 12 + break; + case 'md2': + case 'md5': + $this->l = 16; + break; + case 'sha1': + $this->l = 20; + break; + case 'sha256': + $this->l = 32; + break; + case 'sha384': + $this->l = 48; + break; + case 'sha512': + $this->l = 64; + } + + switch ($hash) { + case 'md2': + $mode = CRYPT_HASH_MODE == CRYPT_HASH_MODE_HASH && in_array('md2', hash_algos()) ? + CRYPT_HASH_MODE_HASH : CRYPT_HASH_MODE_INTERNAL; + break; + case 'sha384': + case 'sha512': + $mode = CRYPT_HASH_MODE == CRYPT_HASH_MODE_MHASH ? CRYPT_HASH_MODE_INTERNAL : CRYPT_HASH_MODE; + break; + default: + $mode = CRYPT_HASH_MODE; + } + + switch ( $mode ) { + case CRYPT_HASH_MODE_MHASH: + switch ($hash) { + case 'md5': + case 'md5-96': + $this->hash = MHASH_MD5; + break; + case 'sha256': + $this->hash = MHASH_SHA256; + break; + case 'sha1': + case 'sha1-96': + default: + $this->hash = MHASH_SHA1; + } + return; + case CRYPT_HASH_MODE_HASH: + switch ($hash) { + case 'md5': + case 'md5-96': + $this->hash = 'md5'; + return; + case 'md2': + case 'sha256': + case 'sha384': + case 'sha512': + $this->hash = $hash; + return; + case 'sha1': + case 'sha1-96': + default: + $this->hash = 'sha1'; + } + return; + } + + switch ($hash) { + case 'md2': + $this->b = 16; + $this->hash = array($this, '_md2'); + break; + case 'md5': + case 'md5-96': + $this->b = 64; + $this->hash = array($this, '_md5'); + break; + case 'sha256': + $this->b = 64; + $this->hash = array($this, '_sha256'); + break; + case 'sha384': + case 'sha512': + $this->b = 128; + $this->hash = array($this, '_sha512'); + break; + case 'sha1': + case 'sha1-96': + default: + $this->b = 64; + $this->hash = array($this, '_sha1'); + } + + $this->ipad = str_repeat(chr(0x36), $this->b); + $this->opad = str_repeat(chr(0x5C), $this->b); + } + + /** + * Compute the HMAC. + * + * @access public + * @param String $text + * @return String + */ + function hash($text) + { + $mode = is_array($this->hash) ? CRYPT_HASH_MODE_INTERNAL : CRYPT_HASH_MODE; + + if (!empty($this->key) || is_string($this->key)) { + switch ( $mode ) { + case CRYPT_HASH_MODE_MHASH: + $output = mhash($this->hash, $text, $this->key); + break; + case CRYPT_HASH_MODE_HASH: + $output = hash_hmac($this->hash, $text, $this->key, true); + break; + case CRYPT_HASH_MODE_INTERNAL: + /* "Applications that use keys longer than B bytes will first hash the key using H and then use the + resultant L byte string as the actual key to HMAC." + + -- http://tools.ietf.org/html/rfc2104#section-2 */ + $key = strlen($this->key) > $this->b ? call_user_func($this->hash, $this->key) : $this->key; + + $key = str_pad($key, $this->b, chr(0)); // step 1 + $temp = $this->ipad ^ $key; // step 2 + $temp .= $text; // step 3 + $temp = call_user_func($this->hash, $temp); // step 4 + $output = $this->opad ^ $key; // step 5 + $output.= $temp; // step 6 + $output = call_user_func($this->hash, $output); // step 7 + } + } else { + switch ( $mode ) { + case CRYPT_HASH_MODE_MHASH: + $output = mhash($this->hash, $text); + break; + case CRYPT_HASH_MODE_HASH: + $output = hash($this->hash, $text, true); + break; + case CRYPT_HASH_MODE_INTERNAL: + $output = call_user_func($this->hash, $text); + } + } + + return substr($output, 0, $this->l); + } + + /** + * Returns the hash length (in bytes) + * + * @access public + * @return Integer + */ + function getLength() + { + return $this->l; + } + + /** + * Wrapper for MD5 + * + * @access private + * @param String $text + */ + function _md5($m) + { + return pack('H*', md5($m)); + } + + /** + * Wrapper for SHA1 + * + * @access private + * @param String $text + */ + function _sha1($m) + { + return pack('H*', sha1($m)); + } + + /** + * Pure-PHP implementation of MD2 + * + * See {@link http://tools.ietf.org/html/rfc1319 RFC1319}. + * + * @access private + * @param String $text + */ + function _md2($m) + { + static $s = array( + 41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6, + 19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188, + 76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24, + 138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251, + 245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63, + 148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50, + 39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48, 179, 72, 165, + 181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210, + 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157, + 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27, + 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15, + 85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197, + 234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65, + 129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123, + 8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233, + 203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228, + 166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237, + 31, 26, 219, 153, 141, 51, 159, 17, 131, 20 + ); + + // Step 1. Append Padding Bytes + $pad = 16 - (strlen($m) & 0xF); + $m.= str_repeat(chr($pad), $pad); + + $length = strlen($m); + + // Step 2. Append Checksum + $c = str_repeat(chr(0), 16); + $l = chr(0); + for ($i = 0; $i < $length; $i+= 16) { + for ($j = 0; $j < 16; $j++) { + // RFC1319 incorrectly states that C[j] should be set to S[c xor L] + //$c[$j] = chr($s[ord($m[$i + $j] ^ $l)]); + // per , however, C[j] should be set to S[c xor L] xor C[j] + $c[$j] = chr($s[ord($m[$i + $j] ^ $l)] ^ ord($c[$j])); + $l = $c[$j]; + } + } + $m.= $c; + + $length+= 16; + + // Step 3. Initialize MD Buffer + $x = str_repeat(chr(0), 48); + + // Step 4. Process Message in 16-Byte Blocks + for ($i = 0; $i < $length; $i+= 16) { + for ($j = 0; $j < 16; $j++) { + $x[$j + 16] = $m[$i + $j]; + $x[$j + 32] = $x[$j + 16] ^ $x[$j]; + } + $t = chr(0); + for ($j = 0; $j < 18; $j++) { + for ($k = 0; $k < 48; $k++) { + $x[$k] = $t = $x[$k] ^ chr($s[ord($t)]); + //$t = $x[$k] = $x[$k] ^ chr($s[ord($t)]); + } + $t = chr(ord($t) + $j); + } + } + + // Step 5. Output + return substr($x, 0, 16); + } + + /** + * Pure-PHP implementation of SHA256 + * + * See {@link http://en.wikipedia.org/wiki/SHA_hash_functions#SHA-256_.28a_SHA-2_variant.29_pseudocode SHA-256 (a SHA-2 variant) pseudocode - Wikipedia}. + * + * @access private + * @param String $text + */ + function _sha256($m) + { + if (extension_loaded('suhosin')) { + return pack('H*', sha256($m)); + } + + // Initialize variables + $hash = array( + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + ); + // Initialize table of round constants + // (first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311) + static $k = array( + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 + ); + + // Pre-processing + $length = strlen($m); + // to round to nearest 56 mod 64, we'll add 64 - (length + (64 - 56)) % 64 + $m.= str_repeat(chr(0), 64 - (($length + 8) & 0x3F)); + $m[$length] = chr(0x80); + // we don't support hashing strings 512MB long + $m.= pack('N2', 0, $length << 3); + + // Process the message in successive 512-bit chunks + $chunks = str_split($m, 64); + foreach ($chunks as $chunk) { + $w = array(); + for ($i = 0; $i < 16; $i++) { + extract(unpack('Ntemp', $this->_string_shift($chunk, 4))); + $w[] = $temp; + } + + // Extend the sixteen 32-bit words into sixty-four 32-bit words + for ($i = 16; $i < 64; $i++) { + $s0 = $this->_rightRotate($w[$i - 15], 7) ^ + $this->_rightRotate($w[$i - 15], 18) ^ + $this->_rightShift( $w[$i - 15], 3); + $s1 = $this->_rightRotate($w[$i - 2], 17) ^ + $this->_rightRotate($w[$i - 2], 19) ^ + $this->_rightShift( $w[$i - 2], 10); + $w[$i] = $this->_add($w[$i - 16], $s0, $w[$i - 7], $s1); + + } + + // Initialize hash value for this chunk + list($a, $b, $c, $d, $e, $f, $g, $h) = $hash; + + // Main loop + for ($i = 0; $i < 64; $i++) { + $s0 = $this->_rightRotate($a, 2) ^ + $this->_rightRotate($a, 13) ^ + $this->_rightRotate($a, 22); + $maj = ($a & $b) ^ + ($a & $c) ^ + ($b & $c); + $t2 = $this->_add($s0, $maj); + + $s1 = $this->_rightRotate($e, 6) ^ + $this->_rightRotate($e, 11) ^ + $this->_rightRotate($e, 25); + $ch = ($e & $f) ^ + ($this->_not($e) & $g); + $t1 = $this->_add($h, $s1, $ch, $k[$i], $w[$i]); + + $h = $g; + $g = $f; + $f = $e; + $e = $this->_add($d, $t1); + $d = $c; + $c = $b; + $b = $a; + $a = $this->_add($t1, $t2); + } + + // Add this chunk's hash to result so far + $hash = array( + $this->_add($hash[0], $a), + $this->_add($hash[1], $b), + $this->_add($hash[2], $c), + $this->_add($hash[3], $d), + $this->_add($hash[4], $e), + $this->_add($hash[5], $f), + $this->_add($hash[6], $g), + $this->_add($hash[7], $h) + ); + } + + // Produce the final hash value (big-endian) + return pack('N8', $hash[0], $hash[1], $hash[2], $hash[3], $hash[4], $hash[5], $hash[6], $hash[7]); + } + + /** + * Pure-PHP implementation of SHA384 and SHA512 + * + * @access private + * @param String $text + */ + function _sha512($m) + { + if (!class_exists('Math_BigInteger')) { + require_once('Math/BigInteger.php'); + } + + static $init384, $init512, $k; + + if (!isset($k)) { + // Initialize variables + $init384 = array( // initial values for SHA384 + 'cbbb9d5dc1059ed8', '629a292a367cd507', '9159015a3070dd17', '152fecd8f70e5939', + '67332667ffc00b31', '8eb44a8768581511', 'db0c2e0d64f98fa7', '47b5481dbefa4fa4' + ); + $init512 = array( // initial values for SHA512 + '6a09e667f3bcc908', 'bb67ae8584caa73b', '3c6ef372fe94f82b', 'a54ff53a5f1d36f1', + '510e527fade682d1', '9b05688c2b3e6c1f', '1f83d9abfb41bd6b', '5be0cd19137e2179' + ); + + for ($i = 0; $i < 8; $i++) { + $init384[$i] = new Math_BigInteger($init384[$i], 16); + $init384[$i]->setPrecision(64); + $init512[$i] = new Math_BigInteger($init512[$i], 16); + $init512[$i]->setPrecision(64); + } + + // Initialize table of round constants + // (first 64 bits of the fractional parts of the cube roots of the first 80 primes 2..409) + $k = array( + '428a2f98d728ae22', '7137449123ef65cd', 'b5c0fbcfec4d3b2f', 'e9b5dba58189dbbc', + '3956c25bf348b538', '59f111f1b605d019', '923f82a4af194f9b', 'ab1c5ed5da6d8118', + 'd807aa98a3030242', '12835b0145706fbe', '243185be4ee4b28c', '550c7dc3d5ffb4e2', + '72be5d74f27b896f', '80deb1fe3b1696b1', '9bdc06a725c71235', 'c19bf174cf692694', + 'e49b69c19ef14ad2', 'efbe4786384f25e3', '0fc19dc68b8cd5b5', '240ca1cc77ac9c65', + '2de92c6f592b0275', '4a7484aa6ea6e483', '5cb0a9dcbd41fbd4', '76f988da831153b5', + '983e5152ee66dfab', 'a831c66d2db43210', 'b00327c898fb213f', 'bf597fc7beef0ee4', + 'c6e00bf33da88fc2', 'd5a79147930aa725', '06ca6351e003826f', '142929670a0e6e70', + '27b70a8546d22ffc', '2e1b21385c26c926', '4d2c6dfc5ac42aed', '53380d139d95b3df', + '650a73548baf63de', '766a0abb3c77b2a8', '81c2c92e47edaee6', '92722c851482353b', + 'a2bfe8a14cf10364', 'a81a664bbc423001', 'c24b8b70d0f89791', 'c76c51a30654be30', + 'd192e819d6ef5218', 'd69906245565a910', 'f40e35855771202a', '106aa07032bbd1b8', + '19a4c116b8d2d0c8', '1e376c085141ab53', '2748774cdf8eeb99', '34b0bcb5e19b48a8', + '391c0cb3c5c95a63', '4ed8aa4ae3418acb', '5b9cca4f7763e373', '682e6ff3d6b2b8a3', + '748f82ee5defb2fc', '78a5636f43172f60', '84c87814a1f0ab72', '8cc702081a6439ec', + '90befffa23631e28', 'a4506cebde82bde9', 'bef9a3f7b2c67915', 'c67178f2e372532b', + 'ca273eceea26619c', 'd186b8c721c0c207', 'eada7dd6cde0eb1e', 'f57d4f7fee6ed178', + '06f067aa72176fba', '0a637dc5a2c898a6', '113f9804bef90dae', '1b710b35131c471b', + '28db77f523047d84', '32caab7b40c72493', '3c9ebe0a15c9bebc', '431d67c49c100d4c', + '4cc5d4becb3e42b6', '597f299cfc657e2a', '5fcb6fab3ad6faec', '6c44198c4a475817' + ); + + for ($i = 0; $i < 80; $i++) { + $k[$i] = new Math_BigInteger($k[$i], 16); + } + } + + $hash = $this->l == 48 ? $init384 : $init512; + + // Pre-processing + $length = strlen($m); + // to round to nearest 112 mod 128, we'll add 128 - (length + (128 - 112)) % 128 + $m.= str_repeat(chr(0), 128 - (($length + 16) & 0x7F)); + $m[$length] = chr(0x80); + // we don't support hashing strings 512MB long + $m.= pack('N4', 0, 0, 0, $length << 3); + + // Process the message in successive 1024-bit chunks + $chunks = str_split($m, 128); + foreach ($chunks as $chunk) { + $w = array(); + for ($i = 0; $i < 16; $i++) { + $temp = new Math_BigInteger($this->_string_shift($chunk, 8), 256); + $temp->setPrecision(64); + $w[] = $temp; + } + + // Extend the sixteen 32-bit words into eighty 32-bit words + for ($i = 16; $i < 80; $i++) { + $temp = array( + $w[$i - 15]->bitwise_rightRotate(1), + $w[$i - 15]->bitwise_rightRotate(8), + $w[$i - 15]->bitwise_rightShift(7) + ); + $s0 = $temp[0]->bitwise_xor($temp[1]); + $s0 = $s0->bitwise_xor($temp[2]); + $temp = array( + $w[$i - 2]->bitwise_rightRotate(19), + $w[$i - 2]->bitwise_rightRotate(61), + $w[$i - 2]->bitwise_rightShift(6) + ); + $s1 = $temp[0]->bitwise_xor($temp[1]); + $s1 = $s1->bitwise_xor($temp[2]); + $w[$i] = $w[$i - 16]->copy(); + $w[$i] = $w[$i]->add($s0); + $w[$i] = $w[$i]->add($w[$i - 7]); + $w[$i] = $w[$i]->add($s1); + } + + // Initialize hash value for this chunk + $a = $hash[0]->copy(); + $b = $hash[1]->copy(); + $c = $hash[2]->copy(); + $d = $hash[3]->copy(); + $e = $hash[4]->copy(); + $f = $hash[5]->copy(); + $g = $hash[6]->copy(); + $h = $hash[7]->copy(); + + // Main loop + for ($i = 0; $i < 80; $i++) { + $temp = array( + $a->bitwise_rightRotate(28), + $a->bitwise_rightRotate(34), + $a->bitwise_rightRotate(39) + ); + $s0 = $temp[0]->bitwise_xor($temp[1]); + $s0 = $s0->bitwise_xor($temp[2]); + $temp = array( + $a->bitwise_and($b), + $a->bitwise_and($c), + $b->bitwise_and($c) + ); + $maj = $temp[0]->bitwise_xor($temp[1]); + $maj = $maj->bitwise_xor($temp[2]); + $t2 = $s0->add($maj); + + $temp = array( + $e->bitwise_rightRotate(14), + $e->bitwise_rightRotate(18), + $e->bitwise_rightRotate(41) + ); + $s1 = $temp[0]->bitwise_xor($temp[1]); + $s1 = $s1->bitwise_xor($temp[2]); + $temp = array( + $e->bitwise_and($f), + $g->bitwise_and($e->bitwise_not()) + ); + $ch = $temp[0]->bitwise_xor($temp[1]); + $t1 = $h->add($s1); + $t1 = $t1->add($ch); + $t1 = $t1->add($k[$i]); + $t1 = $t1->add($w[$i]); + + $h = $g->copy(); + $g = $f->copy(); + $f = $e->copy(); + $e = $d->add($t1); + $d = $c->copy(); + $c = $b->copy(); + $b = $a->copy(); + $a = $t1->add($t2); + } + + // Add this chunk's hash to result so far + $hash = array( + $hash[0]->add($a), + $hash[1]->add($b), + $hash[2]->add($c), + $hash[3]->add($d), + $hash[4]->add($e), + $hash[5]->add($f), + $hash[6]->add($g), + $hash[7]->add($h) + ); + } + + // Produce the final hash value (big-endian) + // (Crypt_Hash::hash() trims the output for hashes but not for HMACs. as such, we trim the output here) + $temp = $hash[0]->toBytes() . $hash[1]->toBytes() . $hash[2]->toBytes() . $hash[3]->toBytes() . + $hash[4]->toBytes() . $hash[5]->toBytes(); + if ($this->l != 48) { + $temp.= $hash[6]->toBytes() . $hash[7]->toBytes(); + } + + return $temp; + } + + /** + * Right Rotate + * + * @access private + * @param Integer $int + * @param Integer $amt + * @see _sha256() + * @return Integer + */ + function _rightRotate($int, $amt) + { + $invamt = 32 - $amt; + $mask = (1 << $invamt) - 1; + return (($int << $invamt) & 0xFFFFFFFF) | (($int >> $amt) & $mask); + } + + /** + * Right Shift + * + * @access private + * @param Integer $int + * @param Integer $amt + * @see _sha256() + * @return Integer + */ + function _rightShift($int, $amt) + { + $mask = (1 << (32 - $amt)) - 1; + return ($int >> $amt) & $mask; + } + + /** + * Not + * + * @access private + * @param Integer $int + * @see _sha256() + * @return Integer + */ + function _not($int) + { + return ~$int & 0xFFFFFFFF; + } + + /** + * Add + * + * _sha256() adds multiple unsigned 32-bit integers. Since PHP doesn't support unsigned integers and since the + * possibility of overflow exists, care has to be taken. Math_BigInteger() could be used but this should be faster. + * + * @param String $string + * @param optional Integer $index + * @return String + * @see _sha256() + * @access private + */ + function _add() + { + static $mod; + if (!isset($mod)) { + $mod = pow(2, 32); + } + + $result = 0; + $arguments = func_get_args(); + foreach ($arguments as $argument) { + $result+= $argument < 0 ? ($argument & 0x7FFFFFFF) + 0x80000000 : $argument; + } + + return fmod($result, $mod); + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param String $string + * @param optional Integer $index + * @return String + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } +} diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RC4.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RC4.php new file mode 100644 index 0000000000..94cb691734 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RC4.php @@ -0,0 +1,531 @@ + + * setKey('abcdefgh'); + * + * $size = 10 * 1024; + * $plaintext = ''; + * for ($i = 0; $i < $size; $i++) { + * $plaintext.= 'a'; + * } + * + * echo $rc4->decrypt($rc4->encrypt($plaintext)); + * ?> + * + * + * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @category Crypt + * @package Crypt_RC4 + * @author Jim Wigginton + * @copyright MMVII Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @version $Id: RC4.php,v 1.8 2009/06/09 04:00:38 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/**#@+ + * @access private + * @see Crypt_RC4::Crypt_RC4() + */ +/** + * Toggles the internal implementation + */ +define('CRYPT_RC4_MODE_INTERNAL', 1); +/** + * Toggles the mcrypt implementation + */ +define('CRYPT_RC4_MODE_MCRYPT', 2); +/**#@-*/ + +/**#@+ + * @access private + * @see Crypt_RC4::_crypt() + */ +define('CRYPT_RC4_ENCRYPT', 0); +define('CRYPT_RC4_DECRYPT', 1); +/**#@-*/ + +/** + * Pure-PHP implementation of RC4. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Crypt_RC4 + */ +class Crypt_RC4 { + /** + * The Key + * + * @see Crypt_RC4::setKey() + * @var String + * @access private + */ + var $key = "\0"; + + /** + * The Key Stream for encryption + * + * If CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT, this will be equal to the mcrypt object + * + * @see Crypt_RC4::setKey() + * @var Array + * @access private + */ + var $encryptStream = false; + + /** + * The Key Stream for decryption + * + * If CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT, this will be equal to the mcrypt object + * + * @see Crypt_RC4::setKey() + * @var Array + * @access private + */ + var $decryptStream = false; + + /** + * The $i and $j indexes for encryption + * + * @see Crypt_RC4::_crypt() + * @var Integer + * @access private + */ + var $encryptIndex = 0; + + /** + * The $i and $j indexes for decryption + * + * @see Crypt_RC4::_crypt() + * @var Integer + * @access private + */ + var $decryptIndex = 0; + + /** + * The Encryption Algorithm + * + * Only used if CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT. Only possible values are MCRYPT_RC4 or MCRYPT_ARCFOUR. + * + * @see Crypt_RC4::Crypt_RC4() + * @var Integer + * @access private + */ + var $mode; + + /** + * Continuous Buffer status + * + * @see Crypt_RC4::enableContinuousBuffer() + * @var Boolean + * @access private + */ + var $continuousBuffer = false; + + /** + * Default Constructor. + * + * Determines whether or not the mcrypt extension should be used. + * + * @param optional Integer $mode + * @return Crypt_RC4 + * @access public + */ + function Crypt_RC4() + { + if ( !defined('CRYPT_RC4_MODE') ) { + switch (true) { + case extension_loaded('mcrypt') && (defined('MCRYPT_ARCFOUR') || defined('MCRYPT_RC4')) && in_array('arcfour', mcrypt_list_algorithms()): + define('CRYPT_RC4_MODE', CRYPT_RC4_MODE_MCRYPT); + break; + default: + define('CRYPT_RC4_MODE', CRYPT_RC4_MODE_INTERNAL); + } + } + + switch ( CRYPT_RC4_MODE ) { + case CRYPT_RC4_MODE_MCRYPT: + switch (true) { + case defined('MCRYPT_ARCFOUR'): + $this->mode = MCRYPT_ARCFOUR; + break; + case defined('MCRYPT_RC4'); + $this->mode = MCRYPT_RC4; + } + } + } + + /** + * Sets the key. + * + * Keys can be between 1 and 256 bytes long. If they are longer then 256 bytes, the first 256 bytes will + * be used. If no key is explicitly set, it'll be assumed to be a single null byte. + * + * @access public + * @param String $key + */ + function setKey($key) + { + $this->key = $key; + + if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) { + return; + } + + $keyLength = strlen($key); + $keyStream = array(); + for ($i = 0; $i < 256; $i++) { + $keyStream[$i] = $i; + } + $j = 0; + for ($i = 0; $i < 256; $i++) { + $j = ($j + $keyStream[$i] + ord($key[$i % $keyLength])) & 255; + $temp = $keyStream[$i]; + $keyStream[$i] = $keyStream[$j]; + $keyStream[$j] = $temp; + } + + $this->encryptIndex = $this->decryptIndex = array(0, 0); + $this->encryptStream = $this->decryptStream = $keyStream; + } + + /** + * Sets the password. + * + * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows: + * {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2}: + * $hash, $salt, $count, $dkLen + * + * @param String $password + * @param optional String $method + * @access public + */ + function setPassword($password, $method = 'pbkdf2') + { + $key = ''; + + switch ($method) { + default: // 'pbkdf2' + list(, , $hash, $salt, $count) = func_get_args(); + if (!isset($hash)) { + $hash = 'sha1'; + } + // WPA and WPA use the SSID as the salt + if (!isset($salt)) { + $salt = 'phpseclib/salt'; + } + // RFC2898#section-4.2 uses 1,000 iterations by default + // WPA and WPA2 use 4,096. + if (!isset($count)) { + $count = 1000; + } + if (!isset($dkLen)) { + $dkLen = 128; + } + + if (!class_exists('Crypt_Hash')) { + require_once('Crypt/Hash.php'); + } + + $i = 1; + while (strlen($key) < $dkLen) { + //$dk.= $this->_pbkdf($password, $salt, $count, $i++); + $hmac = new Crypt_Hash(); + $hmac->setHash($hash); + $hmac->setKey($password); + $f = $u = $hmac->hash($salt . pack('N', $i++)); + for ($j = 2; $j <= $count; $j++) { + $u = $hmac->hash($u); + $f^= $u; + } + $key.= $f; + } + } + + $this->setKey(substr($key, 0, $dkLen)); + } + + /** + * Dummy function. + * + * Some protocols, such as WEP, prepend an "initialization vector" to the key, effectively creating a new key [1]. + * If you need to use an initialization vector in this manner, feel free to prepend it to the key, yourself, before + * calling setKey(). + * + * [1] WEP's initialization vectors (IV's) are used in a somewhat insecure way. Since, in that protocol, + * the IV's are relatively easy to predict, an attack described by + * {@link http://www.drizzle.com/~aboba/IEEE/rc4_ksaproc.pdf Scott Fluhrer, Itsik Mantin, and Adi Shamir} + * can be used to quickly guess at the rest of the key. The following links elaborate: + * + * {@link http://www.rsa.com/rsalabs/node.asp?id=2009 http://www.rsa.com/rsalabs/node.asp?id=2009} + * {@link http://en.wikipedia.org/wiki/Related_key_attack http://en.wikipedia.org/wiki/Related_key_attack} + * + * @param String $iv + * @see Crypt_RC4::setKey() + * @access public + */ + function setIV($iv) + { + } + + /** + * Encrypts a message. + * + * @see Crypt_RC4::_crypt() + * @access public + * @param String $plaintext + */ + function encrypt($plaintext) + { + return $this->_crypt($plaintext, CRYPT_RC4_ENCRYPT); + } + + /** + * Decrypts a message. + * + * $this->decrypt($this->encrypt($plaintext)) == $this->encrypt($this->encrypt($plaintext)). + * Atleast if the continuous buffer is disabled. + * + * @see Crypt_RC4::_crypt() + * @access public + * @param String $ciphertext + */ + function decrypt($ciphertext) + { + return $this->_crypt($ciphertext, CRYPT_RC4_DECRYPT); + } + + /** + * Encrypts or decrypts a message. + * + * @see Crypt_RC4::encrypt() + * @see Crypt_RC4::decrypt() + * @access private + * @param String $text + * @param Integer $mode + */ + function _crypt($text, $mode) + { + if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) { + $keyStream = $mode == CRYPT_RC4_ENCRYPT ? 'encryptStream' : 'decryptStream'; + + if ($this->$keyStream === false) { + $this->$keyStream = mcrypt_module_open($this->mode, '', MCRYPT_MODE_STREAM, ''); + mcrypt_generic_init($this->$keyStream, $this->key, ''); + } else if (!$this->continuousBuffer) { + mcrypt_generic_init($this->$keyStream, $this->key, ''); + } + $newText = mcrypt_generic($this->$keyStream, $text); + if (!$this->continuousBuffer) { + mcrypt_generic_deinit($this->$keyStream); + } + + return $newText; + } + + if ($this->encryptStream === false) { + $this->setKey($this->key); + } + + switch ($mode) { + case CRYPT_RC4_ENCRYPT: + $keyStream = $this->encryptStream; + list($i, $j) = $this->encryptIndex; + break; + case CRYPT_RC4_DECRYPT: + $keyStream = $this->decryptStream; + list($i, $j) = $this->decryptIndex; + } + + $newText = ''; + for ($k = 0; $k < strlen($text); $k++) { + $i = ($i + 1) & 255; + $j = ($j + $keyStream[$i]) & 255; + $temp = $keyStream[$i]; + $keyStream[$i] = $keyStream[$j]; + $keyStream[$j] = $temp; + $temp = $keyStream[($keyStream[$i] + $keyStream[$j]) & 255]; + $newText.= chr(ord($text[$k]) ^ $temp); + } + + if ($this->continuousBuffer) { + switch ($mode) { + case CRYPT_RC4_ENCRYPT: + $this->encryptStream = $keyStream; + $this->encryptIndex = array($i, $j); + break; + case CRYPT_RC4_DECRYPT: + $this->decryptStream = $keyStream; + $this->decryptIndex = array($i, $j); + } + } + + return $newText; + } + + /** + * Treat consecutive "packets" as if they are a continuous buffer. + * + * Say you have a 16-byte plaintext $plaintext. Using the default behavior, the two following code snippets + * will yield different outputs: + * + * + * echo $rc4->encrypt(substr($plaintext, 0, 8)); + * echo $rc4->encrypt(substr($plaintext, 8, 8)); + * + * + * echo $rc4->encrypt($plaintext); + * + * + * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates + * another, as demonstrated with the following: + * + * + * $rc4->encrypt(substr($plaintext, 0, 8)); + * echo $rc4->decrypt($des->encrypt(substr($plaintext, 8, 8))); + * + * + * echo $rc4->decrypt($des->encrypt(substr($plaintext, 8, 8))); + * + * + * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different + * outputs. The reason is due to the fact that the initialization vector's change after every encryption / + * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant. + * + * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each + * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that + * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them), + * however, they are also less intuitive and more likely to cause you problems. + * + * @see Crypt_RC4::disableContinuousBuffer() + * @access public + */ + function enableContinuousBuffer() + { + $this->continuousBuffer = true; + } + + /** + * Treat consecutive packets as if they are a discontinuous buffer. + * + * The default behavior. + * + * @see Crypt_RC4::enableContinuousBuffer() + * @access public + */ + function disableContinuousBuffer() + { + if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_INTERNAL ) { + $this->encryptIndex = $this->decryptIndex = array(0, 0); + $this->setKey($this->key); + } + + $this->continuousBuffer = false; + } + + /** + * Dummy function. + * + * Since RC4 is a stream cipher and not a block cipher, no padding is necessary. The only reason this function is + * included is so that you can switch between a block cipher and a stream cipher transparently. + * + * @see Crypt_RC4::disablePadding() + * @access public + */ + function enablePadding() + { + } + + /** + * Dummy function. + * + * @see Crypt_RC4::enablePadding() + * @access public + */ + function disablePadding() + { + } + + /** + * Class destructor. + * + * Will be called, automatically, if you're using PHP5. If you're using PHP4, call it yourself. Only really + * needs to be called if mcrypt is being used. + * + * @access public + */ + function __destruct() + { + if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) { + $this->_closeMCrypt(); + } + } + + /** + * Properly close the MCrypt objects. + * + * @access prviate + */ + function _closeMCrypt() + { + if ( $this->encryptStream !== false ) { + if ( $this->continuousBuffer ) { + mcrypt_generic_deinit($this->encryptStream); + } + + mcrypt_module_close($this->encryptStream); + + $this->encryptStream = false; + } + + if ( $this->decryptStream !== false ) { + if ( $this->continuousBuffer ) { + mcrypt_generic_deinit($this->decryptStream); + } + + mcrypt_module_close($this->decryptStream); + + $this->decryptStream = false; + } + } +} diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RSA.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RSA.php new file mode 100644 index 0000000000..3373efa6f6 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RSA.php @@ -0,0 +1,2664 @@ + + * createKey()); + * + * $plaintext = 'terrafrost'; + * + * $rsa->loadKey($privatekey); + * $ciphertext = $rsa->encrypt($plaintext); + * + * $rsa->loadKey($publickey); + * echo $rsa->decrypt($ciphertext); + * ?> + * + * + * Here's an example of how to create signatures and verify signatures with this library: + * + * createKey()); + * + * $plaintext = 'terrafrost'; + * + * $rsa->loadKey($privatekey); + * $signature = $rsa->sign($plaintext); + * + * $rsa->loadKey($publickey); + * echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified'; + * ?> + * + * + * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @category Crypt + * @package Crypt_RSA + * @author Jim Wigginton + * @copyright MMIX Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @version $Id: RSA.php,v 1.19 2010/09/12 21:58:54 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/** + * Include Math_BigInteger + */ +if (!class_exists('Math_BigInteger')) { + require_once('Math/BigInteger.php'); +} + +/** + * Include Crypt_Random + */ +// the class_exists() will only be called if the crypt_random_string function hasn't been defined and +// will trigger a call to __autoload() if you're wanting to auto-load classes +// call function_exists() a second time to stop the require_once from being called outside +// of the auto loader +if (!function_exists('crypt_random_string') && !class_exists('Crypt_Random') && !function_exists('crypt_random_string')) { + require_once('Crypt/Random.php'); +} + +/** + * Include Crypt_Hash + */ +if (!class_exists('Crypt_Hash')) { + require_once('Crypt/Hash.php'); +} + +/**#@+ + * @access public + * @see Crypt_RSA::encrypt() + * @see Crypt_RSA::decrypt() + */ +/** + * Use {@link http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding Optimal Asymmetric Encryption Padding} + * (OAEP) for encryption / decryption. + * + * Uses sha1 by default. + * + * @see Crypt_RSA::setHash() + * @see Crypt_RSA::setMGFHash() + */ +define('CRYPT_RSA_ENCRYPTION_OAEP', 1); +/** + * Use PKCS#1 padding. + * + * Although CRYPT_RSA_ENCRYPTION_OAEP offers more security, including PKCS#1 padding is necessary for purposes of backwards + * compatability with protocols (like SSH-1) written before OAEP's introduction. + */ +define('CRYPT_RSA_ENCRYPTION_PKCS1', 2); +/**#@-*/ + +/**#@+ + * @access public + * @see Crypt_RSA::sign() + * @see Crypt_RSA::verify() + * @see Crypt_RSA::setHash() + */ +/** + * Use the Probabilistic Signature Scheme for signing + * + * Uses sha1 by default. + * + * @see Crypt_RSA::setSaltLength() + * @see Crypt_RSA::setMGFHash() + */ +define('CRYPT_RSA_SIGNATURE_PSS', 1); +/** + * Use the PKCS#1 scheme by default. + * + * Although CRYPT_RSA_SIGNATURE_PSS offers more security, including PKCS#1 signing is necessary for purposes of backwards + * compatability with protocols (like SSH-2) written before PSS's introduction. + */ +define('CRYPT_RSA_SIGNATURE_PKCS1', 2); +/**#@-*/ + +/**#@+ + * @access private + * @see Crypt_RSA::createKey() + */ +/** + * ASN1 Integer + */ +define('CRYPT_RSA_ASN1_INTEGER', 2); +/** + * ASN1 Bit String + */ +define('CRYPT_RSA_ASN1_BITSTRING', 3); +/** + * ASN1 Sequence (with the constucted bit set) + */ +define('CRYPT_RSA_ASN1_SEQUENCE', 48); +/**#@-*/ + +/**#@+ + * @access private + * @see Crypt_RSA::Crypt_RSA() + */ +/** + * To use the pure-PHP implementation + */ +define('CRYPT_RSA_MODE_INTERNAL', 1); +/** + * To use the OpenSSL library + * + * (if enabled; otherwise, the internal implementation will be used) + */ +define('CRYPT_RSA_MODE_OPENSSL', 2); +/**#@-*/ + +/** + * Default openSSL configuration file. + */ +define('CRYPT_RSA_OPENSSL_CONFIG', dirname(__FILE__) . '/../openssl.cnf'); + + +/**#@+ + * @access public + * @see Crypt_RSA::createKey() + * @see Crypt_RSA::setPrivateKeyFormat() + */ +/** + * PKCS#1 formatted private key + * + * Used by OpenSSH + */ +define('CRYPT_RSA_PRIVATE_FORMAT_PKCS1', 0); +/** + * PuTTY formatted private key + */ +define('CRYPT_RSA_PRIVATE_FORMAT_PUTTY', 1); +/** + * XML formatted private key + */ +define('CRYPT_RSA_PRIVATE_FORMAT_XML', 2); +/**#@-*/ + +/**#@+ + * @access public + * @see Crypt_RSA::createKey() + * @see Crypt_RSA::setPublicKeyFormat() + */ +/** + * Raw public key + * + * An array containing two Math_BigInteger objects. + * + * The exponent can be indexed with any of the following: + * + * 0, e, exponent, publicExponent + * + * The modulus can be indexed with any of the following: + * + * 1, n, modulo, modulus + */ +define('CRYPT_RSA_PUBLIC_FORMAT_RAW', 3); +/** + * PKCS#1 formatted public key (raw) + * + * Used by File/X509.php + */ +define('CRYPT_RSA_PUBLIC_FORMAT_PKCS1_RAW', 4); +/** + * XML formatted public key + */ +define('CRYPT_RSA_PUBLIC_FORMAT_XML', 5); +/** + * OpenSSH formatted public key + * + * Place in $HOME/.ssh/authorized_keys + */ +define('CRYPT_RSA_PUBLIC_FORMAT_OPENSSH', 6); +/** + * PKCS#1 formatted public key (encapsulated) + * + * Used by PHP's openssl_public_encrypt() and openssl's rsautl (when -pubin is set) + */ +define('CRYPT_RSA_PUBLIC_FORMAT_PKCS1', 7); +/**#@-*/ + +/** + * Pure-PHP PKCS#1 compliant implementation of RSA. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Crypt_RSA + */ +class Crypt_RSA { + /** + * Precomputed Zero + * + * @var Array + * @access private + */ + var $zero; + + /** + * Precomputed One + * + * @var Array + * @access private + */ + var $one; + + /** + * Private Key Format + * + * @var Integer + * @access private + */ + var $privateKeyFormat = CRYPT_RSA_PRIVATE_FORMAT_PKCS1; + + /** + * Public Key Format + * + * @var Integer + * @access public + */ + var $publicKeyFormat = CRYPT_RSA_PUBLIC_FORMAT_PKCS1; + + /** + * Modulus (ie. n) + * + * @var Math_BigInteger + * @access private + */ + var $modulus; + + /** + * Modulus length + * + * @var Math_BigInteger + * @access private + */ + var $k; + + /** + * Exponent (ie. e or d) + * + * @var Math_BigInteger + * @access private + */ + var $exponent; + + /** + * Primes for Chinese Remainder Theorem (ie. p and q) + * + * @var Array + * @access private + */ + var $primes; + + /** + * Exponents for Chinese Remainder Theorem (ie. dP and dQ) + * + * @var Array + * @access private + */ + var $exponents; + + /** + * Coefficients for Chinese Remainder Theorem (ie. qInv) + * + * @var Array + * @access private + */ + var $coefficients; + + /** + * Hash name + * + * @var String + * @access private + */ + var $hashName; + + /** + * Hash function + * + * @var Crypt_Hash + * @access private + */ + var $hash; + + /** + * Length of hash function output + * + * @var Integer + * @access private + */ + var $hLen; + + /** + * Length of salt + * + * @var Integer + * @access private + */ + var $sLen; + + /** + * Hash function for the Mask Generation Function + * + * @var Crypt_Hash + * @access private + */ + var $mgfHash; + + /** + * Length of MGF hash function output + * + * @var Integer + * @access private + */ + var $mgfHLen; + + /** + * Encryption mode + * + * @var Integer + * @access private + */ + var $encryptionMode = CRYPT_RSA_ENCRYPTION_OAEP; + + /** + * Signature mode + * + * @var Integer + * @access private + */ + var $signatureMode = CRYPT_RSA_SIGNATURE_PSS; + + /** + * Public Exponent + * + * @var Mixed + * @access private + */ + var $publicExponent = false; + + /** + * Password + * + * @var String + * @access private + */ + var $password = false; + + /** + * Components + * + * For use with parsing XML formatted keys. PHP's XML Parser functions use utilized - instead of PHP's DOM functions - + * because PHP's XML Parser functions work on PHP4 whereas PHP's DOM functions - although surperior - don't. + * + * @see Crypt_RSA::_start_element_handler() + * @var Array + * @access private + */ + var $components = array(); + + /** + * Current String + * + * For use with parsing XML formatted keys. + * + * @see Crypt_RSA::_character_handler() + * @see Crypt_RSA::_stop_element_handler() + * @var Mixed + * @access private + */ + var $current; + + /** + * OpenSSL configuration file name. + * + * Set to NULL to use system configuration file. + * @see Crypt_RSA::createKey() + * @var Mixed + * @Access public + */ + var $configFile; + + /** + * The constructor + * + * If you want to make use of the openssl extension, you'll need to set the mode manually, yourself. The reason + * Crypt_RSA doesn't do it is because OpenSSL doesn't fail gracefully. openssl_pkey_new(), in particular, requires + * openssl.cnf be present somewhere and, unfortunately, the only real way to find out is too late. + * + * @return Crypt_RSA + * @access public + */ + function Crypt_RSA() + { + $this->configFile = CRYPT_RSA_OPENSSL_CONFIG; + + if ( !defined('CRYPT_RSA_MODE') ) { + switch (true) { + case extension_loaded('openssl') && version_compare(PHP_VERSION, '4.2.0', '>='): + define('CRYPT_RSA_MODE', CRYPT_RSA_MODE_OPENSSL); + break; + default: + define('CRYPT_RSA_MODE', CRYPT_RSA_MODE_INTERNAL); + } + } + + if (!defined('CRYPT_RSA_COMMENT')) { + define('CRYPT_RSA_COMMENT', 'phpseclib-generated-key'); + } + + $this->zero = new Math_BigInteger(); + $this->one = new Math_BigInteger(1); + + $this->hash = new Crypt_Hash('sha1'); + $this->hLen = $this->hash->getLength(); + $this->hashName = 'sha1'; + $this->mgfHash = new Crypt_Hash('sha1'); + $this->mgfHLen = $this->mgfHash->getLength(); + } + + /** + * Create public / private key pair + * + * Returns an array with the following three elements: + * - 'privatekey': The private key. + * - 'publickey': The public key. + * - 'partialkey': A partially computed key (if the execution time exceeded $timeout). + * Will need to be passed back to Crypt_RSA::createKey() as the third parameter for further processing. + * + * @access public + * @param optional Integer $bits + * @param optional Integer $timeout + * @param optional Math_BigInteger $p + */ + function createKey($bits = 1024, $timeout = false, $partial = array()) + { + if (!defined('CRYPT_RSA_EXPONENT')) { + // http://en.wikipedia.org/wiki/65537_%28number%29 + define('CRYPT_RSA_EXPONENT', '65537'); + } + // per , this number ought not result in primes smaller + // than 256 bits. as a consequence if the key you're trying to create is 1024 bits and you've set CRYPT_RSA_SMALLEST_PRIME + // to 384 bits then you're going to get a 384 bit prime and a 640 bit prime (384 + 1024 % 384). at least if + // CRYPT_RSA_MODE is set to CRYPT_RSA_MODE_INTERNAL. if CRYPT_RSA_MODE is set to CRYPT_RSA_MODE_OPENSSL then + // CRYPT_RSA_SMALLEST_PRIME is ignored (ie. multi-prime RSA support is more intended as a way to speed up RSA key + // generation when there's a chance neither gmp nor OpenSSL are installed) + if (!defined('CRYPT_RSA_SMALLEST_PRIME')) { + define('CRYPT_RSA_SMALLEST_PRIME', 4096); + } + + // OpenSSL uses 65537 as the exponent and requires RSA keys be 384 bits minimum + if ( CRYPT_RSA_MODE == CRYPT_RSA_MODE_OPENSSL && $bits >= 384 && CRYPT_RSA_EXPONENT == 65537) { + $config = array(); + if (isset($this->configFile)) { + $config['config'] = $this->configFile; + } + $rsa = openssl_pkey_new(array('private_key_bits' => $bits) + $config); + openssl_pkey_export($rsa, $privatekey, NULL, $config); + $publickey = openssl_pkey_get_details($rsa); + $publickey = $publickey['key']; + + $privatekey = call_user_func_array(array($this, '_convertPrivateKey'), array_values($this->_parseKey($privatekey, CRYPT_RSA_PRIVATE_FORMAT_PKCS1))); + $publickey = call_user_func_array(array($this, '_convertPublicKey'), array_values($this->_parseKey($publickey, CRYPT_RSA_PUBLIC_FORMAT_PKCS1))); + + // clear the buffer of error strings stemming from a minimalistic openssl.cnf + while (openssl_error_string() !== false); + + return array( + 'privatekey' => $privatekey, + 'publickey' => $publickey, + 'partialkey' => false + ); + } + + static $e; + if (!isset($e)) { + $e = new Math_BigInteger(CRYPT_RSA_EXPONENT); + } + + extract($this->_generateMinMax($bits)); + $absoluteMin = $min; + $temp = $bits >> 1; // divide by two to see how many bits P and Q would be + if ($temp > CRYPT_RSA_SMALLEST_PRIME) { + $num_primes = floor($bits / CRYPT_RSA_SMALLEST_PRIME); + $temp = CRYPT_RSA_SMALLEST_PRIME; + } else { + $num_primes = 2; + } + extract($this->_generateMinMax($temp + $bits % $temp)); + $finalMax = $max; + extract($this->_generateMinMax($temp)); + + $generator = new Math_BigInteger(); + + $n = $this->one->copy(); + if (!empty($partial)) { + extract(unserialize($partial)); + } else { + $exponents = $coefficients = $primes = array(); + $lcm = array( + 'top' => $this->one->copy(), + 'bottom' => false + ); + } + + $start = time(); + $i0 = count($primes) + 1; + + do { + for ($i = $i0; $i <= $num_primes; $i++) { + if ($timeout !== false) { + $timeout-= time() - $start; + $start = time(); + if ($timeout <= 0) { + return array( + 'privatekey' => '', + 'publickey' => '', + 'partialkey' => serialize(array( + 'primes' => $primes, + 'coefficients' => $coefficients, + 'lcm' => $lcm, + 'exponents' => $exponents + )) + ); + } + } + + if ($i == $num_primes) { + list($min, $temp) = $absoluteMin->divide($n); + if (!$temp->equals($this->zero)) { + $min = $min->add($this->one); // ie. ceil() + } + $primes[$i] = $generator->randomPrime($min, $finalMax, $timeout); + } else { + $primes[$i] = $generator->randomPrime($min, $max, $timeout); + } + + if ($primes[$i] === false) { // if we've reached the timeout + if (count($primes) > 1) { + $partialkey = ''; + } else { + array_pop($primes); + $partialkey = serialize(array( + 'primes' => $primes, + 'coefficients' => $coefficients, + 'lcm' => $lcm, + 'exponents' => $exponents + )); + } + + return array( + 'privatekey' => '', + 'publickey' => '', + 'partialkey' => $partialkey + ); + } + + // the first coefficient is calculated differently from the rest + // ie. instead of being $primes[1]->modInverse($primes[2]), it's $primes[2]->modInverse($primes[1]) + if ($i > 2) { + $coefficients[$i] = $n->modInverse($primes[$i]); + } + + $n = $n->multiply($primes[$i]); + + $temp = $primes[$i]->subtract($this->one); + + // textbook RSA implementations use Euler's totient function instead of the least common multiple. + // see http://en.wikipedia.org/wiki/Euler%27s_totient_function + $lcm['top'] = $lcm['top']->multiply($temp); + $lcm['bottom'] = $lcm['bottom'] === false ? $temp : $lcm['bottom']->gcd($temp); + + $exponents[$i] = $e->modInverse($temp); + } + + list($lcm) = $lcm['top']->divide($lcm['bottom']); + $gcd = $lcm->gcd($e); + $i0 = 1; + } while (!$gcd->equals($this->one)); + + $d = $e->modInverse($lcm); + + $coefficients[2] = $primes[2]->modInverse($primes[1]); + + // from : + // RSAPrivateKey ::= SEQUENCE { + // version Version, + // modulus INTEGER, -- n + // publicExponent INTEGER, -- e + // privateExponent INTEGER, -- d + // prime1 INTEGER, -- p + // prime2 INTEGER, -- q + // exponent1 INTEGER, -- d mod (p-1) + // exponent2 INTEGER, -- d mod (q-1) + // coefficient INTEGER, -- (inverse of q) mod p + // otherPrimeInfos OtherPrimeInfos OPTIONAL + // } + + return array( + 'privatekey' => $this->_convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients), + 'publickey' => $this->_convertPublicKey($n, $e), + 'partialkey' => false + ); + } + + /** + * Convert a private key to the appropriate format. + * + * @access private + * @see setPrivateKeyFormat() + * @param String $RSAPrivateKey + * @return String + */ + function _convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients) + { + $num_primes = count($primes); + $raw = array( + 'version' => $num_primes == 2 ? chr(0) : chr(1), // two-prime vs. multi + 'modulus' => $n->toBytes(true), + 'publicExponent' => $e->toBytes(true), + 'privateExponent' => $d->toBytes(true), + 'prime1' => $primes[1]->toBytes(true), + 'prime2' => $primes[2]->toBytes(true), + 'exponent1' => $exponents[1]->toBytes(true), + 'exponent2' => $exponents[2]->toBytes(true), + 'coefficient' => $coefficients[2]->toBytes(true) + ); + + // if the format in question does not support multi-prime rsa and multi-prime rsa was used, + // call _convertPublicKey() instead. + switch ($this->privateKeyFormat) { + case CRYPT_RSA_PRIVATE_FORMAT_XML: + if ($num_primes != 2) { + return false; + } + return "\r\n" . + ' ' . base64_encode($raw['modulus']) . "\r\n" . + ' ' . base64_encode($raw['publicExponent']) . "\r\n" . + '

' . base64_encode($raw['prime1']) . "

\r\n" . + ' ' . base64_encode($raw['prime2']) . "\r\n" . + ' ' . base64_encode($raw['exponent1']) . "\r\n" . + ' ' . base64_encode($raw['exponent2']) . "\r\n" . + ' ' . base64_encode($raw['coefficient']) . "\r\n" . + ' ' . base64_encode($raw['privateExponent']) . "\r\n" . + '
'; + break; + case CRYPT_RSA_PRIVATE_FORMAT_PUTTY: + if ($num_primes != 2) { + return false; + } + $key = "PuTTY-User-Key-File-2: ssh-rsa\r\nEncryption: "; + $encryption = (!empty($this->password) || is_string($this->password)) ? 'aes256-cbc' : 'none'; + $key.= $encryption; + $key.= "\r\nComment: " . CRYPT_RSA_COMMENT . "\r\n"; + $public = pack('Na*Na*Na*', + strlen('ssh-rsa'), 'ssh-rsa', strlen($raw['publicExponent']), $raw['publicExponent'], strlen($raw['modulus']), $raw['modulus'] + ); + $source = pack('Na*Na*Na*Na*', + strlen('ssh-rsa'), 'ssh-rsa', strlen($encryption), $encryption, + strlen(CRYPT_RSA_COMMENT), CRYPT_RSA_COMMENT, strlen($public), $public + ); + $public = base64_encode($public); + $key.= "Public-Lines: " . ((strlen($public) + 32) >> 6) . "\r\n"; + $key.= chunk_split($public, 64); + $private = pack('Na*Na*Na*Na*', + strlen($raw['privateExponent']), $raw['privateExponent'], strlen($raw['prime1']), $raw['prime1'], + strlen($raw['prime2']), $raw['prime2'], strlen($raw['coefficient']), $raw['coefficient'] + ); + if (empty($this->password) && !is_string($this->password)) { + $source.= pack('Na*', strlen($private), $private); + $hashkey = 'putty-private-key-file-mac-key'; + } else { + $private.= crypt_random_string(16 - (strlen($private) & 15)); + $source.= pack('Na*', strlen($private), $private); + if (!class_exists('Crypt_AES')) { + require_once('Crypt/AES.php'); + } + $sequence = 0; + $symkey = ''; + while (strlen($symkey) < 32) { + $temp = pack('Na*', $sequence++, $this->password); + $symkey.= pack('H*', sha1($temp)); + } + $symkey = substr($symkey, 0, 32); + $crypto = new Crypt_AES(); + + $crypto->setKey($symkey); + $crypto->disablePadding(); + $private = $crypto->encrypt($private); + $hashkey = 'putty-private-key-file-mac-key' . $this->password; + } + + $private = base64_encode($private); + $key.= 'Private-Lines: ' . ((strlen($private) + 32) >> 6) . "\r\n"; + $key.= chunk_split($private, 64); + if (!class_exists('Crypt_Hash')) { + require_once('Crypt/Hash.php'); + } + $hash = new Crypt_Hash('sha1'); + $hash->setKey(pack('H*', sha1($hashkey))); + $key.= 'Private-MAC: ' . bin2hex($hash->hash($source)) . "\r\n"; + + return $key; + default: // eg. CRYPT_RSA_PRIVATE_FORMAT_PKCS1 + $components = array(); + foreach ($raw as $name => $value) { + $components[$name] = pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($value)), $value); + } + + $RSAPrivateKey = implode('', $components); + + if ($num_primes > 2) { + $OtherPrimeInfos = ''; + for ($i = 3; $i <= $num_primes; $i++) { + // OtherPrimeInfos ::= SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo + // + // OtherPrimeInfo ::= SEQUENCE { + // prime INTEGER, -- ri + // exponent INTEGER, -- di + // coefficient INTEGER -- ti + // } + $OtherPrimeInfo = pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($primes[$i]->toBytes(true))), $primes[$i]->toBytes(true)); + $OtherPrimeInfo.= pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($exponents[$i]->toBytes(true))), $exponents[$i]->toBytes(true)); + $OtherPrimeInfo.= pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($coefficients[$i]->toBytes(true))), $coefficients[$i]->toBytes(true)); + $OtherPrimeInfos.= pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfo)), $OtherPrimeInfo); + } + $RSAPrivateKey.= pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfos)), $OtherPrimeInfos); + } + + $RSAPrivateKey = pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($RSAPrivateKey)), $RSAPrivateKey); + + if (!empty($this->password) || is_string($this->password)) { + $iv = crypt_random_string(8); + $symkey = pack('H*', md5($this->password . $iv)); // symkey is short for symmetric key + $symkey.= substr(pack('H*', md5($symkey . $this->password . $iv)), 0, 8); + if (!class_exists('Crypt_TripleDES')) { + require_once('Crypt/TripleDES.php'); + } + $des = new Crypt_TripleDES(); + $des->setKey($symkey); + $des->setIV($iv); + $iv = strtoupper(bin2hex($iv)); + $RSAPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n" . + "Proc-Type: 4,ENCRYPTED\r\n" . + "DEK-Info: DES-EDE3-CBC,$iv\r\n" . + "\r\n" . + chunk_split(base64_encode($des->encrypt($RSAPrivateKey)), 64) . + '-----END RSA PRIVATE KEY-----'; + } else { + $RSAPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n" . + chunk_split(base64_encode($RSAPrivateKey), 64) . + '-----END RSA PRIVATE KEY-----'; + } + + return $RSAPrivateKey; + } + } + + /** + * Convert a public key to the appropriate format + * + * @access private + * @see setPublicKeyFormat() + * @param String $RSAPrivateKey + * @return String + */ + function _convertPublicKey($n, $e) + { + $modulus = $n->toBytes(true); + $publicExponent = $e->toBytes(true); + + switch ($this->publicKeyFormat) { + case CRYPT_RSA_PUBLIC_FORMAT_RAW: + return array('e' => $e->copy(), 'n' => $n->copy()); + case CRYPT_RSA_PUBLIC_FORMAT_XML: + return "\r\n" . + ' ' . base64_encode($modulus) . "\r\n" . + ' ' . base64_encode($publicExponent) . "\r\n" . + ''; + break; + case CRYPT_RSA_PUBLIC_FORMAT_OPENSSH: + // from : + // string "ssh-rsa" + // mpint e + // mpint n + $RSAPublicKey = pack('Na*Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($publicExponent), $publicExponent, strlen($modulus), $modulus); + $RSAPublicKey = 'ssh-rsa ' . base64_encode($RSAPublicKey) . ' ' . CRYPT_RSA_COMMENT; + + return $RSAPublicKey; + default: // eg. CRYPT_RSA_PUBLIC_FORMAT_PKCS1_RAW or CRYPT_RSA_PUBLIC_FORMAT_PKCS1 + // from : + // RSAPublicKey ::= SEQUENCE { + // modulus INTEGER, -- n + // publicExponent INTEGER -- e + // } + $components = array( + 'modulus' => pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($modulus)), $modulus), + 'publicExponent' => pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($publicExponent)), $publicExponent) + ); + + $RSAPublicKey = pack('Ca*a*a*', + CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($components['modulus']) + strlen($components['publicExponent'])), + $components['modulus'], $components['publicExponent'] + ); + + if ($this->publicKeyFormat == CRYPT_RSA_PUBLIC_FORMAT_PKCS1) { + // sequence(oid(1.2.840.113549.1.1.1), null)) = rsaEncryption. + $rsaOID = pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA + $RSAPublicKey = chr(0) . $RSAPublicKey; + $RSAPublicKey = chr(3) . $this->_encodeLength(strlen($RSAPublicKey)) . $RSAPublicKey; + + $RSAPublicKey = pack('Ca*a*', + CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($rsaOID . $RSAPublicKey)), $rsaOID . $RSAPublicKey + ); + } + + $RSAPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" . + chunk_split(base64_encode($RSAPublicKey), 64) . + '-----END PUBLIC KEY-----'; + + return $RSAPublicKey; + } + } + + /** + * Break a public or private key down into its constituant components + * + * @access private + * @see _convertPublicKey() + * @see _convertPrivateKey() + * @param String $key + * @param Integer $type + * @return Array + */ + function _parseKey($key, $type) + { + if ($type != CRYPT_RSA_PUBLIC_FORMAT_RAW && !is_string($key)) { + return false; + } + + switch ($type) { + case CRYPT_RSA_PUBLIC_FORMAT_RAW: + if (!is_array($key)) { + return false; + } + $components = array(); + switch (true) { + case isset($key['e']): + $components['publicExponent'] = $key['e']->copy(); + break; + case isset($key['exponent']): + $components['publicExponent'] = $key['exponent']->copy(); + break; + case isset($key['publicExponent']): + $components['publicExponent'] = $key['publicExponent']->copy(); + break; + case isset($key[0]): + $components['publicExponent'] = $key[0]->copy(); + } + switch (true) { + case isset($key['n']): + $components['modulus'] = $key['n']->copy(); + break; + case isset($key['modulo']): + $components['modulus'] = $key['modulo']->copy(); + break; + case isset($key['modulus']): + $components['modulus'] = $key['modulus']->copy(); + break; + case isset($key[1]): + $components['modulus'] = $key[1]->copy(); + } + return isset($components['modulus']) && isset($components['publicExponent']) ? $components : false; + case CRYPT_RSA_PRIVATE_FORMAT_PKCS1: + case CRYPT_RSA_PUBLIC_FORMAT_PKCS1: + /* Although PKCS#1 proposes a format that public and private keys can use, encrypting them is + "outside the scope" of PKCS#1. PKCS#1 then refers you to PKCS#12 and PKCS#15 if you're wanting to + protect private keys, however, that's not what OpenSSL* does. OpenSSL protects private keys by adding + two new "fields" to the key - DEK-Info and Proc-Type. These fields are discussed here: + + http://tools.ietf.org/html/rfc1421#section-4.6.1.1 + http://tools.ietf.org/html/rfc1421#section-4.6.1.3 + + DES-EDE3-CBC as an algorithm, however, is not discussed anywhere, near as I can tell. + DES-CBC and DES-EDE are discussed in RFC1423, however, DES-EDE3-CBC isn't, nor is its key derivation + function. As is, the definitive authority on this encoding scheme isn't the IETF but rather OpenSSL's + own implementation. ie. the implementation *is* the standard and any bugs that may exist in that + implementation are part of the standard, as well. + + * OpenSSL is the de facto standard. It's utilized by OpenSSH and other projects */ + if (preg_match('#DEK-Info: (.+),(.+)#', $key, $matches)) { + $iv = pack('H*', trim($matches[2])); + $symkey = pack('H*', md5($this->password . substr($iv, 0, 8))); // symkey is short for symmetric key + $symkey.= substr(pack('H*', md5($symkey . $this->password . $iv)), 0, 8); + $ciphertext = preg_replace('#.+(\r|\n|\r\n)\1|[\r\n]|-.+-| #s', '', $key); + $ciphertext = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $ciphertext) ? base64_decode($ciphertext) : false; + if ($ciphertext === false) { + $ciphertext = $key; + } + switch ($matches[1]) { + case 'AES-128-CBC': + if (!class_exists('Crypt_AES')) { + require_once('Crypt/AES.php'); + } + $symkey = substr($symkey, 0, 16); + $crypto = new Crypt_AES(); + break; + case 'DES-EDE3-CFB': + if (!class_exists('Crypt_TripleDES')) { + require_once('Crypt/TripleDES.php'); + } + $crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CFB); + break; + case 'DES-EDE3-CBC': + if (!class_exists('Crypt_TripleDES')) { + require_once('Crypt/TripleDES.php'); + } + $crypto = new Crypt_TripleDES(); + break; + case 'DES-CBC': + if (!class_exists('Crypt_DES')) { + require_once('Crypt/DES.php'); + } + $crypto = new Crypt_DES(); + break; + default: + return false; + } + $crypto->setKey($symkey); + $crypto->setIV($iv); + $decoded = $crypto->decrypt($ciphertext); + } else { + $decoded = preg_replace('#-.+-|[\r\n]| #', '', $key); + $decoded = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $decoded) ? base64_decode($decoded) : false; + } + + if ($decoded !== false) { + $key = $decoded; + } + + $components = array(); + + if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) { + return false; + } + if ($this->_decodeLength($key) != strlen($key)) { + return false; + } + + $tag = ord($this->_string_shift($key)); + /* intended for keys for which OpenSSL's asn1parse returns the following: + + 0:d=0 hl=4 l= 631 cons: SEQUENCE + 4:d=1 hl=2 l= 1 prim: INTEGER :00 + 7:d=1 hl=2 l= 13 cons: SEQUENCE + 9:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 20:d=2 hl=2 l= 0 prim: NULL + 22:d=1 hl=4 l= 609 prim: OCTET STRING */ + + if ($tag == CRYPT_RSA_ASN1_INTEGER && substr($key, 0, 3) == "\x01\x00\x30") { + $this->_string_shift($key, 3); + $tag = CRYPT_RSA_ASN1_SEQUENCE; + } + + if ($tag == CRYPT_RSA_ASN1_SEQUENCE) { + /* intended for keys for which OpenSSL's asn1parse returns the following: + + 0:d=0 hl=4 l= 290 cons: SEQUENCE + 4:d=1 hl=2 l= 13 cons: SEQUENCE + 6:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 17:d=2 hl=2 l= 0 prim: NULL + 19:d=1 hl=4 l= 271 prim: BIT STRING */ + $this->_string_shift($key, $this->_decodeLength($key)); + $tag = ord($this->_string_shift($key)); // skip over the BIT STRING / OCTET STRING tag + $this->_decodeLength($key); // skip over the BIT STRING / OCTET STRING length + // "The initial octet shall encode, as an unsigned binary integer wtih bit 1 as the least significant bit, the number of + // unused bits in the final subsequent octet. The number shall be in the range zero to seven." + // -- http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf (section 8.6.2.2) + if ($tag == CRYPT_RSA_ASN1_BITSTRING) { + $this->_string_shift($key); + } + if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) { + return false; + } + if ($this->_decodeLength($key) != strlen($key)) { + return false; + } + $tag = ord($this->_string_shift($key)); + } + if ($tag != CRYPT_RSA_ASN1_INTEGER) { + return false; + } + + $length = $this->_decodeLength($key); + $temp = $this->_string_shift($key, $length); + if (strlen($temp) != 1 || ord($temp) > 2) { + $components['modulus'] = new Math_BigInteger($temp, 256); + $this->_string_shift($key); // skip over CRYPT_RSA_ASN1_INTEGER + $length = $this->_decodeLength($key); + $components[$type == CRYPT_RSA_PUBLIC_FORMAT_PKCS1 ? 'publicExponent' : 'privateExponent'] = new Math_BigInteger($this->_string_shift($key, $length), 256); + + return $components; + } + if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_INTEGER) { + return false; + } + $length = $this->_decodeLength($key); + $components['modulus'] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['publicExponent'] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['privateExponent'] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['primes'] = array(1 => new Math_BigInteger($this->_string_shift($key, $length), 256)); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['primes'][] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['exponents'] = array(1 => new Math_BigInteger($this->_string_shift($key, $length), 256)); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['exponents'][] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['coefficients'] = array(2 => new Math_BigInteger($this->_string_shift($key, $length), 256)); + + if (!empty($key)) { + if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) { + return false; + } + $this->_decodeLength($key); + while (!empty($key)) { + if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) { + return false; + } + $this->_decodeLength($key); + $key = substr($key, 1); + $length = $this->_decodeLength($key); + $components['primes'][] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['exponents'][] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['coefficients'][] = new Math_BigInteger($this->_string_shift($key, $length), 256); + } + } + + return $components; + case CRYPT_RSA_PUBLIC_FORMAT_OPENSSH: + $key = base64_decode(preg_replace('#^ssh-rsa | .+$#', '', $key)); + if ($key === false) { + return false; + } + + $cleanup = substr($key, 0, 11) == "\0\0\0\7ssh-rsa"; + + if (strlen($key) <= 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($key, 4))); + $publicExponent = new Math_BigInteger($this->_string_shift($key, $length), -256); + if (strlen($key) <= 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($key, 4))); + $modulus = new Math_BigInteger($this->_string_shift($key, $length), -256); + + if ($cleanup && strlen($key)) { + if (strlen($key) <= 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($key, 4))); + $realModulus = new Math_BigInteger($this->_string_shift($key, $length), -256); + return strlen($key) ? false : array( + 'modulus' => $realModulus, + 'publicExponent' => $modulus + ); + } else { + return strlen($key) ? false : array( + 'modulus' => $modulus, + 'publicExponent' => $publicExponent + ); + } + // http://www.w3.org/TR/xmldsig-core/#sec-RSAKeyValue + // http://en.wikipedia.org/wiki/XML_Signature + case CRYPT_RSA_PRIVATE_FORMAT_XML: + case CRYPT_RSA_PUBLIC_FORMAT_XML: + $this->components = array(); + + $xml = xml_parser_create('UTF-8'); + xml_set_object($xml, $this); + xml_set_element_handler($xml, '_start_element_handler', '_stop_element_handler'); + xml_set_character_data_handler($xml, '_data_handler'); + // add to account for "dangling" tags like ... that are sometimes added + if (!xml_parse($xml, '' . $key . '')) { + return false; + } + + return isset($this->components['modulus']) && isset($this->components['publicExponent']) ? $this->components : false; + // from PuTTY's SSHPUBK.C + case CRYPT_RSA_PRIVATE_FORMAT_PUTTY: + $components = array(); + $key = preg_split('#\r\n|\r|\n#', $key); + $type = trim(preg_replace('#PuTTY-User-Key-File-2: (.+)#', '$1', $key[0])); + if ($type != 'ssh-rsa') { + return false; + } + $encryption = trim(preg_replace('#Encryption: (.+)#', '$1', $key[1])); + + $publicLength = trim(preg_replace('#Public-Lines: (\d+)#', '$1', $key[3])); + $public = base64_decode(implode('', array_map('trim', array_slice($key, 4, $publicLength)))); + $public = substr($public, 11); + extract(unpack('Nlength', $this->_string_shift($public, 4))); + $components['publicExponent'] = new Math_BigInteger($this->_string_shift($public, $length), -256); + extract(unpack('Nlength', $this->_string_shift($public, 4))); + $components['modulus'] = new Math_BigInteger($this->_string_shift($public, $length), -256); + + $privateLength = trim(preg_replace('#Private-Lines: (\d+)#', '$1', $key[$publicLength + 4])); + $private = base64_decode(implode('', array_map('trim', array_slice($key, $publicLength + 5, $privateLength)))); + + switch ($encryption) { + case 'aes256-cbc': + if (!class_exists('Crypt_AES')) { + require_once('Crypt/AES.php'); + } + $symkey = ''; + $sequence = 0; + while (strlen($symkey) < 32) { + $temp = pack('Na*', $sequence++, $this->password); + $symkey.= pack('H*', sha1($temp)); + } + $symkey = substr($symkey, 0, 32); + $crypto = new Crypt_AES(); + } + + if ($encryption != 'none') { + $crypto->setKey($symkey); + $crypto->disablePadding(); + $private = $crypto->decrypt($private); + if ($private === false) { + return false; + } + } + + extract(unpack('Nlength', $this->_string_shift($private, 4))); + if (strlen($private) < $length) { + return false; + } + $components['privateExponent'] = new Math_BigInteger($this->_string_shift($private, $length), -256); + extract(unpack('Nlength', $this->_string_shift($private, 4))); + if (strlen($private) < $length) { + return false; + } + $components['primes'] = array(1 => new Math_BigInteger($this->_string_shift($private, $length), -256)); + extract(unpack('Nlength', $this->_string_shift($private, 4))); + if (strlen($private) < $length) { + return false; + } + $components['primes'][] = new Math_BigInteger($this->_string_shift($private, $length), -256); + + $temp = $components['primes'][1]->subtract($this->one); + $components['exponents'] = array(1 => $components['publicExponent']->modInverse($temp)); + $temp = $components['primes'][2]->subtract($this->one); + $components['exponents'][] = $components['publicExponent']->modInverse($temp); + + extract(unpack('Nlength', $this->_string_shift($private, 4))); + if (strlen($private) < $length) { + return false; + } + $components['coefficients'] = array(2 => new Math_BigInteger($this->_string_shift($private, $length), -256)); + + return $components; + } + } + + /** + * Returns the key size + * + * More specifically, this returns the size of the modulo in bits. + * + * @access public + * @return Integer + */ + function getSize() + { + return !isset($this->modulus) ? 0 : strlen($this->modulus->toBits()); + } + + /** + * Start Element Handler + * + * Called by xml_set_element_handler() + * + * @access private + * @param Resource $parser + * @param String $name + * @param Array $attribs + */ + function _start_element_handler($parser, $name, $attribs) + { + //$name = strtoupper($name); + switch ($name) { + case 'MODULUS': + $this->current = &$this->components['modulus']; + break; + case 'EXPONENT': + $this->current = &$this->components['publicExponent']; + break; + case 'P': + $this->current = &$this->components['primes'][1]; + break; + case 'Q': + $this->current = &$this->components['primes'][2]; + break; + case 'DP': + $this->current = &$this->components['exponents'][1]; + break; + case 'DQ': + $this->current = &$this->components['exponents'][2]; + break; + case 'INVERSEQ': + $this->current = &$this->components['coefficients'][2]; + break; + case 'D': + $this->current = &$this->components['privateExponent']; + break; + default: + unset($this->current); + } + $this->current = ''; + } + + /** + * Stop Element Handler + * + * Called by xml_set_element_handler() + * + * @access private + * @param Resource $parser + * @param String $name + */ + function _stop_element_handler($parser, $name) + { + //$name = strtoupper($name); + if ($name == 'RSAKEYVALUE') { + return; + } + $this->current = new Math_BigInteger(base64_decode($this->current), 256); + } + + /** + * Data Handler + * + * Called by xml_set_character_data_handler() + * + * @access private + * @param Resource $parser + * @param String $data + */ + function _data_handler($parser, $data) + { + if (!isset($this->current) || is_object($this->current)) { + return; + } + $this->current.= trim($data); + } + + /** + * Loads a public or private key + * + * Returns true on success and false on failure (ie. an incorrect password was provided or the key was malformed) + * + * @access public + * @param String $key + * @param Integer $type optional + */ + function loadKey($key, $type = false) + { + if ($type === false) { + $types = array( + CRYPT_RSA_PUBLIC_FORMAT_RAW, + CRYPT_RSA_PRIVATE_FORMAT_PKCS1, + CRYPT_RSA_PRIVATE_FORMAT_XML, + CRYPT_RSA_PRIVATE_FORMAT_PUTTY, + CRYPT_RSA_PUBLIC_FORMAT_OPENSSH + ); + foreach ($types as $type) { + $components = $this->_parseKey($key, $type); + if ($components !== false) { + break; + } + } + + } else { + $components = $this->_parseKey($key, $type); + } + + if ($components === false) { + return false; + } + + $this->modulus = $components['modulus']; + $this->k = strlen($this->modulus->toBytes()); + $this->exponent = isset($components['privateExponent']) ? $components['privateExponent'] : $components['publicExponent']; + if (isset($components['primes'])) { + $this->primes = $components['primes']; + $this->exponents = $components['exponents']; + $this->coefficients = $components['coefficients']; + $this->publicExponent = $components['publicExponent']; + } else { + $this->primes = array(); + $this->exponents = array(); + $this->coefficients = array(); + $this->publicExponent = false; + } + + return true; + } + + /** + * Sets the password + * + * Private keys can be encrypted with a password. To unset the password, pass in the empty string or false. + * Or rather, pass in $password such that empty($password) && !is_string($password) is true. + * + * @see createKey() + * @see loadKey() + * @access public + * @param String $password + */ + function setPassword($password = false) + { + $this->password = $password; + } + + /** + * Defines the public key + * + * Some private key formats define the public exponent and some don't. Those that don't define it are problematic when + * used in certain contexts. For example, in SSH-2, RSA authentication works by sending the public key along with a + * message signed by the private key to the server. The SSH-2 server looks the public key up in an index of public keys + * and if it's present then proceeds to verify the signature. Problem is, if your private key doesn't include the public + * exponent this won't work unless you manually add the public exponent. + * + * Do note that when a new key is loaded the index will be cleared. + * + * Returns true on success, false on failure + * + * @see getPublicKey() + * @access public + * @param String $key optional + * @param Integer $type optional + * @return Boolean + */ + function setPublicKey($key = false, $type = false) + { + if ($key === false && !empty($this->modulus)) { + $this->publicExponent = $this->exponent; + return true; + } + + if ($type === false) { + $types = array( + CRYPT_RSA_PUBLIC_FORMAT_RAW, + CRYPT_RSA_PUBLIC_FORMAT_PKCS1, + CRYPT_RSA_PUBLIC_FORMAT_XML, + CRYPT_RSA_PUBLIC_FORMAT_OPENSSH + ); + foreach ($types as $type) { + $components = $this->_parseKey($key, $type); + if ($components !== false) { + break; + } + } + } else { + $components = $this->_parseKey($key, $type); + } + + if ($components === false) { + return false; + } + + if (empty($this->modulus) || !$this->modulus->equals($components['modulus'])) { + $this->modulus = $components['modulus']; + $this->exponent = $this->publicExponent = $components['publicExponent']; + return true; + } + + $this->publicExponent = $components['publicExponent']; + + return true; + } + + /** + * Returns the public key + * + * The public key is only returned under two circumstances - if the private key had the public key embedded within it + * or if the public key was set via setPublicKey(). If the currently loaded key is supposed to be the public key this + * function won't return it since this library, for the most part, doesn't distinguish between public and private keys. + * + * @see getPublicKey() + * @access public + * @param String $key + * @param Integer $type optional + */ + function getPublicKey($type = CRYPT_RSA_PUBLIC_FORMAT_PKCS1) + { + if (empty($this->modulus) || empty($this->publicExponent)) { + return false; + } + + $oldFormat = $this->publicKeyFormat; + $this->publicKeyFormat = $type; + $temp = $this->_convertPublicKey($this->modulus, $this->publicExponent); + $this->publicKeyFormat = $oldFormat; + return $temp; + } + + /** + * Returns the private key + * + * The private key is only returned if the currently loaded key contains the constituent prime numbers. + * + * @see getPublicKey() + * @access public + * @param String $key + * @param Integer $type optional + */ + function getPrivateKey($type = CRYPT_RSA_PUBLIC_FORMAT_PKCS1) + { + if (empty($this->primes)) { + return false; + } + + $oldFormat = $this->privateKeyFormat; + $this->privateKeyFormat = $type; + $temp = $this->_convertPrivateKey($this->modulus, $this->publicExponent, $this->exponent, $this->primes, $this->exponents, $this->coefficients); + $this->privateKeyFormat = $oldFormat; + return $temp; + } + + /** + * Returns a minimalistic private key + * + * Returns the private key without the prime number constituants. Structurally identical to a public key that + * hasn't been set as the public key + * + * @see getPrivateKey() + * @access private + * @param String $key + * @param Integer $type optional + */ + function _getPrivatePublicKey($mode = CRYPT_RSA_PUBLIC_FORMAT_PKCS1) + { + if (empty($this->modulus) || empty($this->exponent)) { + return false; + } + + $oldFormat = $this->publicKeyFormat; + $this->publicKeyFormat = $mode; + $temp = $this->_convertPublicKey($this->modulus, $this->exponent); + $this->publicKeyFormat = $oldFormat; + return $temp; + } + + /** + * __toString() magic method + * + * @access public + */ + function __toString() + { + $key = $this->getPrivateKey($this->privateKeyFormat); + if ($key !== false) { + return $key; + } + $key = $this->_getPrivatePublicKey($this->publicKeyFormat); + return $key !== false ? $key : ''; + } + + /** + * Generates the smallest and largest numbers requiring $bits bits + * + * @access private + * @param Integer $bits + * @return Array + */ + function _generateMinMax($bits) + { + $bytes = $bits >> 3; + $min = str_repeat(chr(0), $bytes); + $max = str_repeat(chr(0xFF), $bytes); + $msb = $bits & 7; + if ($msb) { + $min = chr(1 << ($msb - 1)) . $min; + $max = chr((1 << $msb) - 1) . $max; + } else { + $min[0] = chr(0x80); + } + + return array( + 'min' => new Math_BigInteger($min, 256), + 'max' => new Math_BigInteger($max, 256) + ); + } + + /** + * DER-decode the length + * + * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See + * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 8.1.3} for more information. + * + * @access private + * @param String $string + * @return Integer + */ + function _decodeLength(&$string) + { + $length = ord($this->_string_shift($string)); + if ( $length & 0x80 ) { // definite length, long form + $length&= 0x7F; + $temp = $this->_string_shift($string, $length); + list(, $length) = unpack('N', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4)); + } + return $length; + } + + /** + * DER-encode the length + * + * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See + * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 8.1.3} for more information. + * + * @access private + * @param Integer $length + * @return String + */ + function _encodeLength($length) + { + if ($length <= 0x7F) { + return chr($length); + } + + $temp = ltrim(pack('N', $length), chr(0)); + return pack('Ca*', 0x80 | strlen($temp), $temp); + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param String $string + * @param optional Integer $index + * @return String + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } + + /** + * Determines the private key format + * + * @see createKey() + * @access public + * @param Integer $format + */ + function setPrivateKeyFormat($format) + { + $this->privateKeyFormat = $format; + } + + /** + * Determines the public key format + * + * @see createKey() + * @access public + * @param Integer $format + */ + function setPublicKeyFormat($format) + { + $this->publicKeyFormat = $format; + } + + /** + * Determines which hashing function should be used + * + * Used with signature production / verification and (if the encryption mode is CRYPT_RSA_ENCRYPTION_OAEP) encryption and + * decryption. If $hash isn't supported, sha1 is used. + * + * @access public + * @param String $hash + */ + function setHash($hash) + { + // Crypt_Hash supports algorithms that PKCS#1 doesn't support. md5-96 and sha1-96, for example. + switch ($hash) { + case 'md2': + case 'md5': + case 'sha1': + case 'sha256': + case 'sha384': + case 'sha512': + $this->hash = new Crypt_Hash($hash); + $this->hashName = $hash; + break; + default: + $this->hash = new Crypt_Hash('sha1'); + $this->hashName = 'sha1'; + } + $this->hLen = $this->hash->getLength(); + } + + /** + * Determines which hashing function should be used for the mask generation function + * + * The mask generation function is used by CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_SIGNATURE_PSS and although it's + * best if Hash and MGFHash are set to the same thing this is not a requirement. + * + * @access public + * @param String $hash + */ + function setMGFHash($hash) + { + // Crypt_Hash supports algorithms that PKCS#1 doesn't support. md5-96 and sha1-96, for example. + switch ($hash) { + case 'md2': + case 'md5': + case 'sha1': + case 'sha256': + case 'sha384': + case 'sha512': + $this->mgfHash = new Crypt_Hash($hash); + break; + default: + $this->mgfHash = new Crypt_Hash('sha1'); + } + $this->mgfHLen = $this->mgfHash->getLength(); + } + + /** + * Determines the salt length + * + * To quote from {@link http://tools.ietf.org/html/rfc3447#page-38 RFC3447#page-38}: + * + * Typical salt lengths in octets are hLen (the length of the output + * of the hash function Hash) and 0. + * + * @access public + * @param Integer $format + */ + function setSaltLength($sLen) + { + $this->sLen = $sLen; + } + + /** + * Integer-to-Octet-String primitive + * + * See {@link http://tools.ietf.org/html/rfc3447#section-4.1 RFC3447#section-4.1}. + * + * @access private + * @param Math_BigInteger $x + * @param Integer $xLen + * @return String + */ + function _i2osp($x, $xLen) + { + $x = $x->toBytes(); + if (strlen($x) > $xLen) { + $this->_handle_error('Integer too large'); + return false; + } + return str_pad($x, $xLen, chr(0), STR_PAD_LEFT); + } + + /** + * Octet-String-to-Integer primitive + * + * See {@link http://tools.ietf.org/html/rfc3447#section-4.2 RFC3447#section-4.2}. + * + * @access private + * @param String $x + * @return Math_BigInteger + */ + function _os2ip($x) + { + return new Math_BigInteger($x, 256); + } + + /** + * Exponentiate with or without Chinese Remainder Theorem + * + * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.2}. + * + * @access private + * @param Math_BigInteger $x + * @return Math_BigInteger + */ + function _exponentiate($x) + { + if (empty($this->primes) || empty($this->coefficients) || empty($this->exponents)) { + return $x->modPow($this->exponent, $this->modulus); + } + + $num_primes = count($this->primes); + + if (defined('CRYPT_RSA_DISABLE_BLINDING')) { + $m_i = array( + 1 => $x->modPow($this->exponents[1], $this->primes[1]), + 2 => $x->modPow($this->exponents[2], $this->primes[2]) + ); + $h = $m_i[1]->subtract($m_i[2]); + $h = $h->multiply($this->coefficients[2]); + list(, $h) = $h->divide($this->primes[1]); + $m = $m_i[2]->add($h->multiply($this->primes[2])); + + $r = $this->primes[1]; + for ($i = 3; $i <= $num_primes; $i++) { + $m_i = $x->modPow($this->exponents[$i], $this->primes[$i]); + + $r = $r->multiply($this->primes[$i - 1]); + + $h = $m_i->subtract($m); + $h = $h->multiply($this->coefficients[$i]); + list(, $h) = $h->divide($this->primes[$i]); + + $m = $m->add($r->multiply($h)); + } + } else { + $smallest = $this->primes[1]; + for ($i = 2; $i <= $num_primes; $i++) { + if ($smallest->compare($this->primes[$i]) > 0) { + $smallest = $this->primes[$i]; + } + } + + $one = new Math_BigInteger(1); + + $r = $one->random($one, $smallest->subtract($one)); + + $m_i = array( + 1 => $this->_blind($x, $r, 1), + 2 => $this->_blind($x, $r, 2) + ); + $h = $m_i[1]->subtract($m_i[2]); + $h = $h->multiply($this->coefficients[2]); + list(, $h) = $h->divide($this->primes[1]); + $m = $m_i[2]->add($h->multiply($this->primes[2])); + + $r = $this->primes[1]; + for ($i = 3; $i <= $num_primes; $i++) { + $m_i = $this->_blind($x, $r, $i); + + $r = $r->multiply($this->primes[$i - 1]); + + $h = $m_i->subtract($m); + $h = $h->multiply($this->coefficients[$i]); + list(, $h) = $h->divide($this->primes[$i]); + + $m = $m->add($r->multiply($h)); + } + } + + return $m; + } + + /** + * Performs RSA Blinding + * + * Protects against timing attacks by employing RSA Blinding. + * Returns $x->modPow($this->exponents[$i], $this->primes[$i]) + * + * @access private + * @param Math_BigInteger $x + * @param Math_BigInteger $r + * @param Integer $i + * @return Math_BigInteger + */ + function _blind($x, $r, $i) + { + $x = $x->multiply($r->modPow($this->publicExponent, $this->primes[$i])); + $x = $x->modPow($this->exponents[$i], $this->primes[$i]); + + $r = $r->modInverse($this->primes[$i]); + $x = $x->multiply($r); + list(, $x) = $x->divide($this->primes[$i]); + + return $x; + } + + /** + * Performs blinded RSA equality testing + * + * Protects against a particular type of timing attack described. + * + * See {@link http://codahale.com/a-lesson-in-timing-attacks/ A Lesson In Timing Attacks (or, Dont use MessageDigest.isEquals)} + * + * Thanks for the heads up singpolyma! + * + * @access private + * @param String $x + * @param String $y + * @return Boolean + */ + function _equals($x, $y) + { + if (strlen($x) != strlen($y)) { + return false; + } + + $result = 0; + for ($i = 0; $i < strlen($x); $i++) { + $result |= ord($x[$i]) ^ ord($y[$i]); + } + + return $result == 0; + } + + /** + * RSAEP + * + * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.1}. + * + * @access private + * @param Math_BigInteger $m + * @return Math_BigInteger + */ + function _rsaep($m) + { + if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) { + $this->_handle_error('Message representative out of range'); + return false; + } + return $this->_exponentiate($m); + } + + /** + * RSADP + * + * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.2 RFC3447#section-5.1.2}. + * + * @access private + * @param Math_BigInteger $c + * @return Math_BigInteger + */ + function _rsadp($c) + { + if ($c->compare($this->zero) < 0 || $c->compare($this->modulus) > 0) { + $this->_handle_error('Ciphertext representative out of range'); + return false; + } + return $this->_exponentiate($c); + } + + /** + * RSASP1 + * + * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.1 RFC3447#section-5.2.1}. + * + * @access private + * @param Math_BigInteger $m + * @return Math_BigInteger + */ + function _rsasp1($m) + { + if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) { + $this->_handle_error('Message representative out of range'); + return false; + } + return $this->_exponentiate($m); + } + + /** + * RSAVP1 + * + * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.2 RFC3447#section-5.2.2}. + * + * @access private + * @param Math_BigInteger $s + * @return Math_BigInteger + */ + function _rsavp1($s) + { + if ($s->compare($this->zero) < 0 || $s->compare($this->modulus) > 0) { + $this->_handle_error('Signature representative out of range'); + return false; + } + return $this->_exponentiate($s); + } + + /** + * MGF1 + * + * See {@link http://tools.ietf.org/html/rfc3447#appendix-B.2.1 RFC3447#appendix-B.2.1}. + * + * @access private + * @param String $mgfSeed + * @param Integer $mgfLen + * @return String + */ + function _mgf1($mgfSeed, $maskLen) + { + // if $maskLen would yield strings larger than 4GB, PKCS#1 suggests a "Mask too long" error be output. + + $t = ''; + $count = ceil($maskLen / $this->mgfHLen); + for ($i = 0; $i < $count; $i++) { + $c = pack('N', $i); + $t.= $this->mgfHash->hash($mgfSeed . $c); + } + + return substr($t, 0, $maskLen); + } + + /** + * RSAES-OAEP-ENCRYPT + * + * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.1 RFC3447#section-7.1.1} and + * {http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding OAES}. + * + * @access private + * @param String $m + * @param String $l + * @return String + */ + function _rsaes_oaep_encrypt($m, $l = '') + { + $mLen = strlen($m); + + // Length checking + + // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error + // be output. + + if ($mLen > $this->k - 2 * $this->hLen - 2) { + $this->_handle_error('Message too long'); + return false; + } + + // EME-OAEP encoding + + $lHash = $this->hash->hash($l); + $ps = str_repeat(chr(0), $this->k - $mLen - 2 * $this->hLen - 2); + $db = $lHash . $ps . chr(1) . $m; + $seed = crypt_random_string($this->hLen); + $dbMask = $this->_mgf1($seed, $this->k - $this->hLen - 1); + $maskedDB = $db ^ $dbMask; + $seedMask = $this->_mgf1($maskedDB, $this->hLen); + $maskedSeed = $seed ^ $seedMask; + $em = chr(0) . $maskedSeed . $maskedDB; + + // RSA encryption + + $m = $this->_os2ip($em); + $c = $this->_rsaep($m); + $c = $this->_i2osp($c, $this->k); + + // Output the ciphertext C + + return $c; + } + + /** + * RSAES-OAEP-DECRYPT + * + * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.2 RFC3447#section-7.1.2}. The fact that the error + * messages aren't distinguishable from one another hinders debugging, but, to quote from RFC3447#section-7.1.2: + * + * Note. Care must be taken to ensure that an opponent cannot + * distinguish the different error conditions in Step 3.g, whether by + * error message or timing, or, more generally, learn partial + * information about the encoded message EM. Otherwise an opponent may + * be able to obtain useful information about the decryption of the + * ciphertext C, leading to a chosen-ciphertext attack such as the one + * observed by Manger [36]. + * + * As for $l... to quote from {@link http://tools.ietf.org/html/rfc3447#page-17 RFC3447#page-17}: + * + * Both the encryption and the decryption operations of RSAES-OAEP take + * the value of a label L as input. In this version of PKCS #1, L is + * the empty string; other uses of the label are outside the scope of + * this document. + * + * @access private + * @param String $c + * @param String $l + * @return String + */ + function _rsaes_oaep_decrypt($c, $l = '') + { + // Length checking + + // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error + // be output. + + if (strlen($c) != $this->k || $this->k < 2 * $this->hLen + 2) { + $this->_handle_error('Decryption error'); + return false; + } + + // RSA decryption + + $c = $this->_os2ip($c); + $m = $this->_rsadp($c); + if ($m === false) { + $this->_handle_error('Decryption error'); + return false; + } + $em = $this->_i2osp($m, $this->k); + + // EME-OAEP decoding + + $lHash = $this->hash->hash($l); + $y = ord($em[0]); + $maskedSeed = substr($em, 1, $this->hLen); + $maskedDB = substr($em, $this->hLen + 1); + $seedMask = $this->_mgf1($maskedDB, $this->hLen); + $seed = $maskedSeed ^ $seedMask; + $dbMask = $this->_mgf1($seed, $this->k - $this->hLen - 1); + $db = $maskedDB ^ $dbMask; + $lHash2 = substr($db, 0, $this->hLen); + $m = substr($db, $this->hLen); + if ($lHash != $lHash2) { + $this->_handle_error('Decryption error'); + return false; + } + $m = ltrim($m, chr(0)); + if (ord($m[0]) != 1) { + $this->_handle_error('Decryption error'); + return false; + } + + // Output the message M + + return substr($m, 1); + } + + /** + * RSAES-PKCS1-V1_5-ENCRYPT + * + * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.1 RFC3447#section-7.2.1}. + * + * @access private + * @param String $m + * @return String + */ + function _rsaes_pkcs1_v1_5_encrypt($m) + { + $mLen = strlen($m); + + // Length checking + + if ($mLen > $this->k - 11) { + $this->_handle_error('Message too long'); + return false; + } + + // EME-PKCS1-v1_5 encoding + $psLen = $this->k - $mLen - 3; + $ps = ''; + while (strlen($ps) != $psLen) { + $temp = crypt_random_string($psLen - strlen($ps)); + $temp = str_replace("\x00", '', $temp); + $ps.= $temp; + } + $em = chr(0) . chr(2) . $ps . chr(0) . $m; + + // RSA encryption + $m = $this->_os2ip($em); + $c = $this->_rsaep($m); + $c = $this->_i2osp($c, $this->k); + + // Output the ciphertext C + + return $c; + } + + /** + * RSAES-PKCS1-V1_5-DECRYPT + * + * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.2 RFC3447#section-7.2.2}. + * + * For compatability purposes, this function departs slightly from the description given in RFC3447. + * The reason being that RFC2313#section-8.1 (PKCS#1 v1.5) states that ciphertext's encrypted by the + * private key should have the second byte set to either 0 or 1 and that ciphertext's encrypted by the + * public key should have the second byte set to 2. In RFC3447 (PKCS#1 v2.1), the second byte is supposed + * to be 2 regardless of which key is used. For compatability purposes, we'll just check to make sure the + * second byte is 2 or less. If it is, we'll accept the decrypted string as valid. + * + * As a consequence of this, a private key encrypted ciphertext produced with Crypt_RSA may not decrypt + * with a strictly PKCS#1 v1.5 compliant RSA implementation. Public key encrypted ciphertext's should but + * not private key encrypted ciphertext's. + * + * @access private + * @param String $c + * @return String + */ + function _rsaes_pkcs1_v1_5_decrypt($c) + { + // Length checking + + if (strlen($c) != $this->k) { // or if k < 11 + $this->_handle_error('Decryption error'); + return false; + } + + // RSA decryption + + $c = $this->_os2ip($c); + $m = $this->_rsadp($c); + + if ($m === false) { + $this->_handle_error('Decryption error'); + return false; + } + $em = $this->_i2osp($m, $this->k); + + // EME-PKCS1-v1_5 decoding + + if (ord($em[0]) != 0 || ord($em[1]) > 2) { + $this->_handle_error('Decryption error'); + return false; + } + + $ps = substr($em, 2, strpos($em, chr(0), 2) - 2); + $m = substr($em, strlen($ps) + 3); + + if (strlen($ps) < 8) { + $this->_handle_error('Decryption error'); + return false; + } + + // Output M + + return $m; + } + + /** + * EMSA-PSS-ENCODE + * + * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.1 RFC3447#section-9.1.1}. + * + * @access private + * @param String $m + * @param Integer $emBits + */ + function _emsa_pss_encode($m, $emBits) + { + // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error + // be output. + + $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8) + $sLen = $this->sLen == false ? $this->hLen : $this->sLen; + + $mHash = $this->hash->hash($m); + if ($emLen < $this->hLen + $sLen + 2) { + $this->_handle_error('Encoding error'); + return false; + } + + $salt = crypt_random_string($sLen); + $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt; + $h = $this->hash->hash($m2); + $ps = str_repeat(chr(0), $emLen - $sLen - $this->hLen - 2); + $db = $ps . chr(1) . $salt; + $dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1); + $maskedDB = $db ^ $dbMask; + $maskedDB[0] = ~chr(0xFF << ($emBits & 7)) & $maskedDB[0]; + $em = $maskedDB . $h . chr(0xBC); + + return $em; + } + + /** + * EMSA-PSS-VERIFY + * + * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.2 RFC3447#section-9.1.2}. + * + * @access private + * @param String $m + * @param String $em + * @param Integer $emBits + * @return String + */ + function _emsa_pss_verify($m, $em, $emBits) + { + // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error + // be output. + + $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8); + $sLen = $this->sLen == false ? $this->hLen : $this->sLen; + + $mHash = $this->hash->hash($m); + if ($emLen < $this->hLen + $sLen + 2) { + return false; + } + + if ($em[strlen($em) - 1] != chr(0xBC)) { + return false; + } + + $maskedDB = substr($em, 0, -$this->hLen - 1); + $h = substr($em, -$this->hLen - 1, $this->hLen); + $temp = chr(0xFF << ($emBits & 7)); + if ((~$maskedDB[0] & $temp) != $temp) { + return false; + } + $dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1); + $db = $maskedDB ^ $dbMask; + $db[0] = ~chr(0xFF << ($emBits & 7)) & $db[0]; + $temp = $emLen - $this->hLen - $sLen - 2; + if (substr($db, 0, $temp) != str_repeat(chr(0), $temp) || ord($db[$temp]) != 1) { + return false; + } + $salt = substr($db, $temp + 1); // should be $sLen long + $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt; + $h2 = $this->hash->hash($m2); + return $this->_equals($h, $h2); + } + + /** + * RSASSA-PSS-SIGN + * + * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.1 RFC3447#section-8.1.1}. + * + * @access private + * @param String $m + * @return String + */ + function _rsassa_pss_sign($m) + { + // EMSA-PSS encoding + + $em = $this->_emsa_pss_encode($m, 8 * $this->k - 1); + + // RSA signature + + $m = $this->_os2ip($em); + $s = $this->_rsasp1($m); + $s = $this->_i2osp($s, $this->k); + + // Output the signature S + + return $s; + } + + /** + * RSASSA-PSS-VERIFY + * + * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.2 RFC3447#section-8.1.2}. + * + * @access private + * @param String $m + * @param String $s + * @return String + */ + function _rsassa_pss_verify($m, $s) + { + // Length checking + + if (strlen($s) != $this->k) { + $this->_handle_error('Invalid signature'); + return false; + } + + // RSA verification + + $modBits = 8 * $this->k; + + $s2 = $this->_os2ip($s); + $m2 = $this->_rsavp1($s2); + if ($m2 === false) { + $this->_handle_error('Invalid signature'); + return false; + } + $em = $this->_i2osp($m2, $modBits >> 3); + if ($em === false) { + $this->_handle_error('Invalid signature'); + return false; + } + + // EMSA-PSS verification + + return $this->_emsa_pss_verify($m, $em, $modBits - 1); + } + + /** + * EMSA-PKCS1-V1_5-ENCODE + * + * See {@link http://tools.ietf.org/html/rfc3447#section-9.2 RFC3447#section-9.2}. + * + * @access private + * @param String $m + * @param Integer $emLen + * @return String + */ + function _emsa_pkcs1_v1_5_encode($m, $emLen) + { + $h = $this->hash->hash($m); + if ($h === false) { + return false; + } + + // see http://tools.ietf.org/html/rfc3447#page-43 + switch ($this->hashName) { + case 'md2': + $t = pack('H*', '3020300c06082a864886f70d020205000410'); + break; + case 'md5': + $t = pack('H*', '3020300c06082a864886f70d020505000410'); + break; + case 'sha1': + $t = pack('H*', '3021300906052b0e03021a05000414'); + break; + case 'sha256': + $t = pack('H*', '3031300d060960864801650304020105000420'); + break; + case 'sha384': + $t = pack('H*', '3041300d060960864801650304020205000430'); + break; + case 'sha512': + $t = pack('H*', '3051300d060960864801650304020305000440'); + } + $t.= $h; + $tLen = strlen($t); + + if ($emLen < $tLen + 11) { + $this->_handle_error('Intended encoded message length too short'); + return false; + } + + $ps = str_repeat(chr(0xFF), $emLen - $tLen - 3); + + $em = "\0\1$ps\0$t"; + + return $em; + } + + /** + * RSASSA-PKCS1-V1_5-SIGN + * + * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.1 RFC3447#section-8.2.1}. + * + * @access private + * @param String $m + * @return String + */ + function _rsassa_pkcs1_v1_5_sign($m) + { + // EMSA-PKCS1-v1_5 encoding + + $em = $this->_emsa_pkcs1_v1_5_encode($m, $this->k); + if ($em === false) { + $this->_handle_error('RSA modulus too short'); + return false; + } + + // RSA signature + + $m = $this->_os2ip($em); + $s = $this->_rsasp1($m); + $s = $this->_i2osp($s, $this->k); + + // Output the signature S + + return $s; + } + + /** + * RSASSA-PKCS1-V1_5-VERIFY + * + * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.2 RFC3447#section-8.2.2}. + * + * @access private + * @param String $m + * @return String + */ + function _rsassa_pkcs1_v1_5_verify($m, $s) + { + // Length checking + + if (strlen($s) != $this->k) { + $this->_handle_error('Invalid signature'); + return false; + } + + // RSA verification + + $s = $this->_os2ip($s); + $m2 = $this->_rsavp1($s); + if ($m2 === false) { + $this->_handle_error('Invalid signature'); + return false; + } + $em = $this->_i2osp($m2, $this->k); + if ($em === false) { + $this->_handle_error('Invalid signature'); + return false; + } + + // EMSA-PKCS1-v1_5 encoding + + $em2 = $this->_emsa_pkcs1_v1_5_encode($m, $this->k); + if ($em2 === false) { + $this->_handle_error('RSA modulus too short'); + return false; + } + + // Compare + return $this->_equals($em, $em2); + } + + /** + * Set Encryption Mode + * + * Valid values include CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_ENCRYPTION_PKCS1. + * + * @access public + * @param Integer $mode + */ + function setEncryptionMode($mode) + { + $this->encryptionMode = $mode; + } + + /** + * Set Signature Mode + * + * Valid values include CRYPT_RSA_SIGNATURE_PSS and CRYPT_RSA_SIGNATURE_PKCS1 + * + * @access public + * @param Integer $mode + */ + function setSignatureMode($mode) + { + $this->signatureMode = $mode; + } + + /** + * Encryption + * + * Both CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_ENCRYPTION_PKCS1 both place limits on how long $plaintext can be. + * If $plaintext exceeds those limits it will be broken up so that it does and the resultant ciphertext's will + * be concatenated together. + * + * @see decrypt() + * @access public + * @param String $plaintext + * @return String + */ + function encrypt($plaintext) + { + switch ($this->encryptionMode) { + case CRYPT_RSA_ENCRYPTION_PKCS1: + $length = $this->k - 11; + if ($length <= 0) { + return false; + } + + $plaintext = str_split($plaintext, $length); + $ciphertext = ''; + foreach ($plaintext as $m) { + $ciphertext.= $this->_rsaes_pkcs1_v1_5_encrypt($m); + } + return $ciphertext; + //case CRYPT_RSA_ENCRYPTION_OAEP: + default: + $length = $this->k - 2 * $this->hLen - 2; + if ($length <= 0) { + return false; + } + + $plaintext = str_split($plaintext, $length); + $ciphertext = ''; + foreach ($plaintext as $m) { + $ciphertext.= $this->_rsaes_oaep_encrypt($m); + } + return $ciphertext; + } + } + + /** + * Decryption + * + * @see encrypt() + * @access public + * @param String $plaintext + * @return String + */ + function decrypt($ciphertext) + { + if ($this->k <= 0) { + return false; + } + + $ciphertext = str_split($ciphertext, $this->k); + $ciphertext[count($ciphertext) - 1] = str_pad($ciphertext[count($ciphertext) - 1], $this->k, chr(0), STR_PAD_LEFT); + + $plaintext = ''; + + switch ($this->encryptionMode) { + case CRYPT_RSA_ENCRYPTION_PKCS1: + $decrypt = '_rsaes_pkcs1_v1_5_decrypt'; + break; + //case CRYPT_RSA_ENCRYPTION_OAEP: + default: + $decrypt = '_rsaes_oaep_decrypt'; + } + + foreach ($ciphertext as $c) { + $temp = $this->$decrypt($c); + if ($temp === false) { + return false; + } + $plaintext.= $temp; + } + + return $plaintext; + } + + /** + * Create a signature + * + * @see verify() + * @access public + * @param String $message + * @return String + */ + function sign($message) + { + if (empty($this->modulus) || empty($this->exponent)) { + return false; + } + + switch ($this->signatureMode) { + case CRYPT_RSA_SIGNATURE_PKCS1: + return $this->_rsassa_pkcs1_v1_5_sign($message); + //case CRYPT_RSA_SIGNATURE_PSS: + default: + return $this->_rsassa_pss_sign($message); + } + } + + /** + * Verifies a signature + * + * @see sign() + * @access public + * @param String $message + * @param String $signature + * @return Boolean + */ + function verify($message, $signature) + { + if (empty($this->modulus) || empty($this->exponent)) { + return false; + } + + switch ($this->signatureMode) { + case CRYPT_RSA_SIGNATURE_PKCS1: + return $this->_rsassa_pkcs1_v1_5_verify($message, $signature); + //case CRYPT_RSA_SIGNATURE_PSS: + default: + return $this->_rsassa_pss_verify($message, $signature); + } + } + + /** + * Error Handler + * + * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. + * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. + * + * @param String $string + * @access private + */ + function _handle_error($err_msg) { + if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { + $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; + throw(new $class($err_msg)); + } else { + user_error($err_msg); + } + } +} diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Random.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Random.php new file mode 100644 index 0000000000..55df0bde5f --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Random.php @@ -0,0 +1,243 @@ + + * + * + * + * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @category Crypt + * @package Crypt_Random + * @author Jim Wigginton + * @copyright MMVII Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @version $Id: Random.php,v 1.9 2010/04/24 06:40:48 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/** + * Generate a random string. + * + * Although microoptimizations are generally discouraged as they impair readability this function is ripe with + * microoptimizations because this function has the potential of being called a huge number of times. + * eg. for RSA key generation. + * + * @param Integer $length + * @return String + * @access public + */ +function crypt_random_string($length) { + // PHP_OS & "\xDF\xDF\xDF" == strtoupper(substr(PHP_OS, 0, 3)), but a lot faster + if ((PHP_OS & "\xDF\xDF\xDF") === 'WIN') { + // method 1. prior to PHP 5.3 this would call rand() on windows hence the function_exists('class_alias') call. + // ie. class_alias is a function that was introduced in PHP 5.3 + if (function_exists('mcrypt_create_iv') && function_exists('class_alias')) { + return mcrypt_create_iv($length); + } + // method 2. openssl_random_pseudo_bytes was introduced in PHP 5.3.0 but prior to PHP 5.3.4 there was, + // to quote , "possible blocking behavior". as of 5.3.4 + // openssl_random_pseudo_bytes and mcrypt_create_iv do the exact same thing on Windows. ie. they both + // call php_win32_get_random_bytes(): + // + // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/openssl/openssl.c#L5008 + // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1392 + // + // php_win32_get_random_bytes() is defined thusly: + // + // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/win32/winutil.c#L80 + // + // we're calling it, all the same, in the off chance that the mcrypt extension is not available + if (function_exists('openssl_random_pseudo_bytes') && version_compare(PHP_VERSION, '5.3.4', '>=')) { + return openssl_random_pseudo_bytes($length); + } + } else { + // method 1. the fastest + if (function_exists('openssl_random_pseudo_bytes')) { + return openssl_random_pseudo_bytes($length); + } + // method 2 + static $fp = true; + if ($fp === true) { + // warning's will be output unles the error suppression operator is used. errors such as + // "open_basedir restriction in effect", "Permission denied", "No such file or directory", etc. + $fp = @fopen('/dev/urandom', 'rb'); + } + if ($fp !== true && $fp !== false) { // surprisingly faster than !is_bool() or is_resource() + return fread($urandom, $length); + } + // method 3. pretty much does the same thing as method 2 per the following url: + // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1391 + // surprisingly slower than method 2. maybe that's because mcrypt_create_iv does a bunch of error checking that we're + // not doing. regardless, this'll only be called if this PHP script couldn't open /dev/urandom due to open_basedir + // restrictions or some such + if (function_exists('mcrypt_create_iv')) { + return mcrypt_create_iv($length, MCRYPT_DEV_URANDOM); + } + } + // at this point we have no choice but to use a pure-PHP CSPRNG + + // cascade entropy across multiple PHP instances by fixing the session and collecting all + // environmental variables, including the previous session data and the current session + // data. + // + // mt_rand seeds itself by looking at the PID and the time, both of which are (relatively) + // easy to guess at. linux uses mouse clicks, keyboard timings, etc, as entropy sources, but + // PHP isn't low level to be able to use those as sources and on a web server there's not likely + // going to be a ton of keyboard or mouse action. web servers do have one thing that we can use + // however. a ton of people visiting the website. obviously you don't want to base your seeding + // soley on parameters a potential attacker sends but (1) not everything in $_SERVER is controlled + // by the user and (2) this isn't just looking at the data sent by the current user - it's based + // on the data sent by all users. one user requests the page and a hash of their info is saved. + // another user visits the page and the serialization of their data is utilized along with the + // server envirnment stuff and a hash of the previous http request data (which itself utilizes + // a hash of the session data before that). certainly an attacker should be assumed to have + // full control over his own http requests. he, however, is not going to have control over + // everyone's http requests. + static $crypto = false, $v; + if ($crypto === false) { + // save old session data + $old_session_id = session_id(); + $old_use_cookies = ini_get('session.use_cookies'); + $old_session_cache_limiter = session_cache_limiter(); + if (isset($_SESSION)) { + $_OLD_SESSION = $_SESSION; + } + if ($old_session_id != '') { + session_write_close(); + } + + session_id(1); + ini_set('session.use_cookies', 0); + session_cache_limiter(''); + session_start(); + + $v = $seed = $_SESSION['seed'] = pack('H*', sha1( + serialize($_SERVER) . + serialize($_POST) . + serialize($_GET) . + serialize($_COOKIE) . + serialize($_GLOBAL) . + serialize($_SESSION) . + serialize($_OLD_SESSION) + )); + if (!isset($_SESSION['count'])) { + $_SESSION['count'] = 0; + } + $_SESSION['count']++; + + session_write_close(); + + // restore old session data + if ($old_session_id != '') { + session_id($old_session_id); + session_start(); + ini_set('session.use_cookies', $old_use_cookies); + session_cache_limiter($old_session_cache_limiter); + } else { + if (isset($_OLD_SESSION)) { + $_SESSION = $_OLD_SESSION; + unset($_OLD_SESSION); + } else { + unset($_SESSION); + } + } + + // in SSH2 a shared secret and an exchange hash are generated through the key exchange process. + // the IV client to server is the hash of that "nonce" with the letter A and for the encryption key it's the letter C. + // if the hash doesn't produce enough a key or an IV that's long enough concat successive hashes of the + // original hash and the current hash. we'll be emulating that. for more info see the following URL: + // + // http://tools.ietf.org/html/rfc4253#section-7.2 + // + // see the is_string($crypto) part for an example of how to expand the keys + $key = pack('H*', sha1($seed . 'A')); + $iv = pack('H*', sha1($seed . 'C')); + + // ciphers are used as per the nist.gov link below. also, see this link: + // + // http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator#Designs_based_on_cryptographic_primitives + switch (true) { + case class_exists('Crypt_AES'): + $crypto = new Crypt_AES(CRYPT_AES_MODE_CTR); + break; + case class_exists('Crypt_TripleDES'): + $crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CTR); + break; + case class_exists('Crypt_DES'): + $crypto = new Crypt_DES(CRYPT_DES_MODE_CTR); + break; + case class_exists('Crypt_RC4'): + $crypto = new Crypt_RC4(); + break; + default: + $crypto = $seed; + return crypt_random_string($length); + } + + $crypto->setKey($key); + $crypto->setIV($iv); + $crypto->enableContinuousBuffer(); + } + + if (is_string($crypto)) { + // the following is based off of ANSI X9.31: + // + // http://csrc.nist.gov/groups/STM/cavp/documents/rng/931rngext.pdf + // + // OpenSSL uses that same standard for it's random numbers: + // + // http://www.opensource.apple.com/source/OpenSSL/OpenSSL-38/openssl/fips-1.0/rand/fips_rand.c + // (do a search for "ANS X9.31 A.2.4") + // + // ANSI X9.31 recommends ciphers be used and phpseclib does use them if they're available (see + // later on in the code) but if they're not we'll use sha1 + $result = ''; + while (strlen($result) < $length) { // each loop adds 20 bytes + // microtime() isn't packed as "densely" as it could be but then neither is that the idea. + // the idea is simply to ensure that each "block" has a unique element to it. + $i = pack('H*', sha1(microtime())); + $r = pack('H*', sha1($i ^ $v)); + $v = pack('H*', sha1($r ^ $i)); + $result.= $r; + } + return substr($result, 0, $length); + } + + //return $crypto->encrypt(str_repeat("\0", $length)); + + $result = ''; + while (strlen($result) < $length) { + $i = $crypto->encrypt(microtime()); + $r = $crypto->encrypt($i ^ $v); + $v = $crypto->encrypt($r ^ $i); + $result.= $r; + } + return substr($result, 0, $length); +} \ No newline at end of file diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Rijndael.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Rijndael.php new file mode 100644 index 0000000000..71155c8976 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Rijndael.php @@ -0,0 +1,1496 @@ + + * setKey('abcdefghijklmnop'); + * + * $size = 10 * 1024; + * $plaintext = ''; + * for ($i = 0; $i < $size; $i++) { + * $plaintext.= 'a'; + * } + * + * echo $rijndael->decrypt($rijndael->encrypt($plaintext)); + * ?> + * + * + * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @category Crypt + * @package Crypt_Rijndael + * @author Jim Wigginton + * @copyright MMVIII Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @version $Id: Rijndael.php,v 1.12 2010/02/09 06:10:26 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/**#@+ + * @access public + * @see Crypt_Rijndael::encrypt() + * @see Crypt_Rijndael::decrypt() + */ +/** + * Encrypt / decrypt using the Counter mode. + * + * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29 + */ +define('CRYPT_RIJNDAEL_MODE_CTR', -1); +/** + * Encrypt / decrypt using the Electronic Code Book mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29 + */ +define('CRYPT_RIJNDAEL_MODE_ECB', 1); +/** + * Encrypt / decrypt using the Code Book Chaining mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29 + */ +define('CRYPT_RIJNDAEL_MODE_CBC', 2); +/** + * Encrypt / decrypt using the Cipher Feedback mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29 + */ +define('CRYPT_RIJNDAEL_MODE_CFB', 3); +/** + * Encrypt / decrypt using the Cipher Feedback mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29 + */ +define('CRYPT_RIJNDAEL_MODE_OFB', 4); +/**#@-*/ + +/**#@+ + * @access private + * @see Crypt_Rijndael::Crypt_Rijndael() + */ +/** + * Toggles the internal implementation + */ +define('CRYPT_RIJNDAEL_MODE_INTERNAL', 1); +/** + * Toggles the mcrypt implementation + */ +define('CRYPT_RIJNDAEL_MODE_MCRYPT', 2); +/**#@-*/ + +/** + * Pure-PHP implementation of Rijndael. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Crypt_Rijndael + */ +class Crypt_Rijndael { + /** + * The Encryption Mode + * + * @see Crypt_Rijndael::Crypt_Rijndael() + * @var Integer + * @access private + */ + var $mode; + + /** + * The Key + * + * @see Crypt_Rijndael::setKey() + * @var String + * @access private + */ + var $key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; + + /** + * The Initialization Vector + * + * @see Crypt_Rijndael::setIV() + * @var String + * @access private + */ + var $iv = ''; + + /** + * A "sliding" Initialization Vector + * + * @see Crypt_Rijndael::enableContinuousBuffer() + * @var String + * @access private + */ + var $encryptIV = ''; + + /** + * A "sliding" Initialization Vector + * + * @see Crypt_Rijndael::enableContinuousBuffer() + * @var String + * @access private + */ + var $decryptIV = ''; + + /** + * Continuous Buffer status + * + * @see Crypt_Rijndael::enableContinuousBuffer() + * @var Boolean + * @access private + */ + var $continuousBuffer = false; + + /** + * Padding status + * + * @see Crypt_Rijndael::enablePadding() + * @var Boolean + * @access private + */ + var $padding = true; + + /** + * Does the key schedule need to be (re)calculated? + * + * @see setKey() + * @see setBlockLength() + * @see setKeyLength() + * @var Boolean + * @access private + */ + var $changed = true; + + /** + * Has the key length explicitly been set or should it be derived from the key, itself? + * + * @see setKeyLength() + * @var Boolean + * @access private + */ + var $explicit_key_length = false; + + /** + * The Key Schedule + * + * @see _setup() + * @var Array + * @access private + */ + var $w; + + /** + * The Inverse Key Schedule + * + * @see _setup() + * @var Array + * @access private + */ + var $dw; + + /** + * The Block Length + * + * @see setBlockLength() + * @var Integer + * @access private + * @internal The max value is 32, the min value is 16. All valid values are multiples of 4. Exists in conjunction with + * $Nb because we need this value and not $Nb to pad strings appropriately. + */ + var $block_size = 16; + + /** + * The Block Length divided by 32 + * + * @see setBlockLength() + * @var Integer + * @access private + * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4. Exists in conjunction with $block_size + * because the encryption / decryption / key schedule creation requires this number and not $block_size. We could + * derive this from $block_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu + * of that, we'll just precompute it once. + * + */ + var $Nb = 4; + + /** + * The Key Length + * + * @see setKeyLength() + * @var Integer + * @access private + * @internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16. Exists in conjunction with $key_size + * because the encryption / decryption / key schedule creation requires this number and not $key_size. We could + * derive this from $key_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu + * of that, we'll just precompute it once. + */ + var $key_size = 16; + + /** + * The Key Length divided by 32 + * + * @see setKeyLength() + * @var Integer + * @access private + * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4 + */ + var $Nk = 4; + + /** + * The Number of Rounds + * + * @var Integer + * @access private + * @internal The max value is 14, the min value is 10. + */ + var $Nr; + + /** + * Shift offsets + * + * @var Array + * @access private + */ + var $c; + + /** + * Precomputed mixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $t0; + + /** + * Precomputed mixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $t1; + + /** + * Precomputed mixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $t2; + + /** + * Precomputed mixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $t3; + + /** + * Precomputed invMixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $dt0; + + /** + * Precomputed invMixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $dt1; + + /** + * Precomputed invMixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $dt2; + + /** + * Precomputed invMixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $dt3; + + /** + * Is the mode one that is paddable? + * + * @see Crypt_Rijndael::Crypt_Rijndael() + * @var Boolean + * @access private + */ + var $paddable = false; + + /** + * Encryption buffer for CTR, OFB and CFB modes + * + * @see Crypt_Rijndael::encrypt() + * @var String + * @access private + */ + var $enbuffer = array('encrypted' => '', 'xor' => ''); + + /** + * Decryption buffer for CTR, OFB and CFB modes + * + * @see Crypt_Rijndael::decrypt() + * @var String + * @access private + */ + var $debuffer = array('ciphertext' => ''); + + /** + * Default Constructor. + * + * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be + * CRYPT_RIJNDAEL_MODE_ECB or CRYPT_RIJNDAEL_MODE_CBC. If not explictly set, CRYPT_RIJNDAEL_MODE_CBC will be used. + * + * @param optional Integer $mode + * @return Crypt_Rijndael + * @access public + */ + function Crypt_Rijndael($mode = CRYPT_RIJNDAEL_MODE_CBC) + { + switch ($mode) { + case CRYPT_RIJNDAEL_MODE_ECB: + case CRYPT_RIJNDAEL_MODE_CBC: + $this->paddable = true; + $this->mode = $mode; + break; + case CRYPT_RIJNDAEL_MODE_CTR: + case CRYPT_RIJNDAEL_MODE_CFB: + case CRYPT_RIJNDAEL_MODE_OFB: + $this->mode = $mode; + break; + default: + $this->paddable = true; + $this->mode = CRYPT_RIJNDAEL_MODE_CBC; + } + + $t3 = &$this->t3; + $t2 = &$this->t2; + $t1 = &$this->t1; + $t0 = &$this->t0; + + $dt3 = &$this->dt3; + $dt2 = &$this->dt2; + $dt1 = &$this->dt1; + $dt0 = &$this->dt0; + + // according to (section 5.2.1), + // precomputed tables can be used in the mixColumns phase. in that example, they're assigned t0...t3, so + // those are the names we'll use. + $t3 = array( + 0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491, + 0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC, + 0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB, + 0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B, + 0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83, + 0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A, + 0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F, + 0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA, + 0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B, + 0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713, + 0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6, + 0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85, + 0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411, + 0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B, + 0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1, + 0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF, + 0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E, + 0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6, + 0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B, + 0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD, + 0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8, + 0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2, + 0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049, + 0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810, + 0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197, + 0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F, + 0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C, + 0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927, + 0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733, + 0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5, + 0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0, + 0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C + ); + + $dt3 = array( + 0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B, + 0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026, 0x62A38FB5, + 0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B, + 0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E, + 0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D, + 0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9, + 0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66, + 0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED, + 0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, 0x34621FD1, 0xA6FE8AC4, + 0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD, + 0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60, + 0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79, + 0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C, + 0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24, + 0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C, + 0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814, + 0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B, + 0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, 0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084, + 0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077, + 0xB3166C2B, 0x70B999A9, 0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22, + 0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F, + 0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582, + 0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB, + 0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF, + 0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035, + 0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17, + 0x4DD68D76, 0xEFB04D43, 0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46, + 0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D, + 0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A, + 0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678, + 0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF, + 0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0 + ); + + for ($i = 0; $i < 256; $i++) { + $t2[$i << 8] = (($t3[$i] << 8) & 0xFFFFFF00) | (($t3[$i] >> 24) & 0x000000FF); + $t1[$i << 16] = (($t3[$i] << 16) & 0xFFFF0000) | (($t3[$i] >> 16) & 0x0000FFFF); + $t0[$i << 24] = (($t3[$i] << 24) & 0xFF000000) | (($t3[$i] >> 8) & 0x00FFFFFF); + + $dt2[$i << 8] = (($this->dt3[$i] << 8) & 0xFFFFFF00) | (($dt3[$i] >> 24) & 0x000000FF); + $dt1[$i << 16] = (($this->dt3[$i] << 16) & 0xFFFF0000) | (($dt3[$i] >> 16) & 0x0000FFFF); + $dt0[$i << 24] = (($this->dt3[$i] << 24) & 0xFF000000) | (($dt3[$i] >> 8) & 0x00FFFFFF); + } + } + + /** + * Sets the key. + * + * Keys can be of any length. Rijndael, itself, requires the use of a key that's between 128-bits and 256-bits long and + * whose length is a multiple of 32. If the key is less than 256-bits and the key length isn't set, we round the length + * up to the closest valid key length, padding $key with null bytes. If the key is more than 256-bits, we trim the + * excess bits. + * + * If the key is not explicitly set, it'll be assumed to be all null bytes. + * + * @access public + * @param String $key + */ + function setKey($key) + { + $this->key = $key; + $this->changed = true; + } + + /** + * Sets the initialization vector. (optional) + * + * SetIV is not required when CRYPT_RIJNDAEL_MODE_ECB is being used. If not explictly set, it'll be assumed + * to be all zero's. + * + * @access public + * @param String $iv + */ + function setIV($iv) + { + $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, $this->block_size), $this->block_size, chr(0)); + } + + /** + * Sets the key length + * + * Valid key lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to + * 128. If the length is greater then 128 and invalid, it will be rounded down to the closest valid amount. + * + * @access public + * @param Integer $length + */ + function setKeyLength($length) + { + $length >>= 5; + if ($length > 8) { + $length = 8; + } else if ($length < 4) { + $length = 4; + } + $this->Nk = $length; + $this->key_size = $length << 2; + + $this->explicit_key_length = true; + $this->changed = true; + } + + /** + * Sets the password. + * + * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows: + * {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2}: + * $hash, $salt, $method + * Set $dkLen by calling setKeyLength() + * + * @param String $password + * @param optional String $method + * @access public + */ + function setPassword($password, $method = 'pbkdf2') + { + $key = ''; + + switch ($method) { + default: // 'pbkdf2' + list(, , $hash, $salt, $count) = func_get_args(); + if (!isset($hash)) { + $hash = 'sha1'; + } + // WPA and WPA use the SSID as the salt + if (!isset($salt)) { + $salt = 'phpseclib'; + } + // RFC2898#section-4.2 uses 1,000 iterations by default + // WPA and WPA2 use 4,096. + if (!isset($count)) { + $count = 1000; + } + + if (!class_exists('Crypt_Hash')) { + require_once('Crypt/Hash.php'); + } + + $i = 1; + while (strlen($key) < $this->key_size) { // $dkLen == $this->key_size + //$dk.= $this->_pbkdf($password, $salt, $count, $i++); + $hmac = new Crypt_Hash(); + $hmac->setHash($hash); + $hmac->setKey($password); + $f = $u = $hmac->hash($salt . pack('N', $i++)); + for ($j = 2; $j <= $count; $j++) { + $u = $hmac->hash($u); + $f^= $u; + } + $key.= $f; + } + } + + $this->setKey(substr($key, 0, $this->key_size)); + } + + /** + * Sets the block length + * + * Valid block lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to + * 128. If the length is greater then 128 and invalid, it will be rounded down to the closest valid amount. + * + * @access public + * @param Integer $length + */ + function setBlockLength($length) + { + $length >>= 5; + if ($length > 8) { + $length = 8; + } else if ($length < 4) { + $length = 4; + } + $this->Nb = $length; + $this->block_size = $length << 2; + $this->changed = true; + } + + /** + * Generate CTR XOR encryption key + * + * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the + * plaintext / ciphertext in CTR mode. + * + * @see Crypt_Rijndael::decrypt() + * @see Crypt_Rijndael::encrypt() + * @access public + * @param Integer $length + * @param String $iv + */ + function _generate_xor($length, &$iv) + { + $xor = ''; + $block_size = $this->block_size; + $num_blocks = floor(($length + ($block_size - 1)) / $block_size); + for ($i = 0; $i < $num_blocks; $i++) { + $xor.= $iv; + for ($j = 4; $j <= $block_size; $j+=4) { + $temp = substr($iv, -$j, 4); + switch ($temp) { + case "\xFF\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4); + break; + case "\x7F\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4); + break 2; + default: + extract(unpack('Ncount', $temp)); + $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4); + break 2; + } + } + } + + return $xor; + } + + /** + * Encrypts a message. + * + * $plaintext will be padded with additional bytes such that it's length is a multiple of the block size. Other Rjindael + * implementations may or may not pad in the same manner. Other common approaches to padding and the reasons why it's + * necessary are discussed in the following + * URL: + * + * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html} + * + * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does. + * strlen($plaintext) will still need to be a multiple of 8, however, arbitrary values can be added to make it that + * length. + * + * @see Crypt_Rijndael::decrypt() + * @access public + * @param String $plaintext + */ + function encrypt($plaintext) + { + $this->_setup(); + if ($this->paddable) { + $plaintext = $this->_pad($plaintext); + } + + $block_size = $this->block_size; + $buffer = &$this->enbuffer; + $continuousBuffer = $this->continuousBuffer; + $ciphertext = ''; + switch ($this->mode) { + case CRYPT_RIJNDAEL_MODE_ECB: + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $ciphertext.= $this->_encryptBlock(substr($plaintext, $i, $block_size)); + } + break; + case CRYPT_RIJNDAEL_MODE_CBC: + $xor = $this->encryptIV; + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $block = substr($plaintext, $i, $block_size); + $block = $this->_encryptBlock($block ^ $xor); + $xor = $block; + $ciphertext.= $block; + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + } + break; + case CRYPT_RIJNDAEL_MODE_CTR: + $xor = $this->encryptIV; + if (!empty($buffer['encrypted'])) { + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $block = substr($plaintext, $i, $block_size); + $buffer['encrypted'].= $this->_encryptBlock($this->_generate_xor($block_size, $xor)); + $key = $this->_string_shift($buffer['encrypted'], $block_size); + $ciphertext.= $block ^ $key; + } + } else { + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $block = substr($plaintext, $i, $block_size); + $key = $this->_encryptBlock($this->_generate_xor($block_size, $xor)); + $ciphertext.= $block ^ $key; + } + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + if ($start = strlen($plaintext) % $block_size) { + $buffer['encrypted'] = substr($key, $start) . $buffer['encrypted']; + } + } + break; + case CRYPT_RIJNDAEL_MODE_CFB: + if (!empty($buffer['xor'])) { + $ciphertext = $plaintext ^ $buffer['xor']; + $iv = $buffer['encrypted'] . $ciphertext; + $start = strlen($ciphertext); + $buffer['encrypted'].= $ciphertext; + $buffer['xor'] = substr($buffer['xor'], strlen($ciphertext)); + } else { + $ciphertext = ''; + $iv = $this->encryptIV; + $start = 0; + } + + for ($i = $start; $i < strlen($plaintext); $i+=$block_size) { + $block = substr($plaintext, $i, $block_size); + $xor = $this->_encryptBlock($iv); + $iv = $block ^ $xor; + if ($continuousBuffer && strlen($iv) != $block_size) { + $buffer = array( + 'encrypted' => $iv, + 'xor' => substr($xor, strlen($iv)) + ); + } + $ciphertext.= $iv; + } + + if ($this->continuousBuffer) { + $this->encryptIV = $iv; + } + break; + case CRYPT_RIJNDAEL_MODE_OFB: + $xor = $this->encryptIV; + if (strlen($buffer)) { + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $xor = $this->_encryptBlock($xor); + $buffer.= $xor; + $key = $this->_string_shift($buffer, $block_size); + $ciphertext.= substr($plaintext, $i, $block_size) ^ $key; + } + } else { + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $xor = $this->_encryptBlock($xor); + $ciphertext.= substr($plaintext, $i, $block_size) ^ $xor; + } + $key = $xor; + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + if ($start = strlen($plaintext) % $block_size) { + $buffer = substr($key, $start) . $buffer; + } + } + } + + return $ciphertext; + } + + /** + * Decrypts a message. + * + * If strlen($ciphertext) is not a multiple of the block size, null bytes will be added to the end of the string until + * it is. + * + * @see Crypt_Rijndael::encrypt() + * @access public + * @param String $ciphertext + */ + function decrypt($ciphertext) + { + $this->_setup(); + + if ($this->paddable) { + // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic : + // "The data is padded with "\0" to make sure the length of the data is n * blocksize." + $ciphertext = str_pad($ciphertext, strlen($ciphertext) + ($this->block_size - strlen($ciphertext) % $this->block_size) % $this->block_size, chr(0)); + } + + $block_size = $this->block_size; + $buffer = &$this->debuffer; + $continuousBuffer = $this->continuousBuffer; + $plaintext = ''; + switch ($this->mode) { + case CRYPT_RIJNDAEL_MODE_ECB: + for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { + $plaintext.= $this->_decryptBlock(substr($ciphertext, $i, $block_size)); + } + break; + case CRYPT_RIJNDAEL_MODE_CBC: + $xor = $this->decryptIV; + for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { + $block = substr($ciphertext, $i, $block_size); + $plaintext.= $this->_decryptBlock($block) ^ $xor; + $xor = $block; + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + } + break; + case CRYPT_RIJNDAEL_MODE_CTR: + $xor = $this->decryptIV; + if (!empty($buffer['ciphertext'])) { + for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { + $block = substr($ciphertext, $i, $block_size); + $buffer['ciphertext'].= $this->_encryptBlock($this->_generate_xor($block_size, $xor)); + $key = $this->_string_shift($buffer['ciphertext'], $block_size); + $plaintext.= $block ^ $key; + } + } else { + for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { + $block = substr($ciphertext, $i, $block_size); + $key = $this->_encryptBlock($this->_generate_xor($block_size, $xor)); + $plaintext.= $block ^ $key; + } + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + if ($start = strlen($ciphertext) % $block_size) { + $buffer['ciphertext'] = substr($key, $start) . $buffer['encrypted']; + } + } + break; + case CRYPT_RIJNDAEL_MODE_CFB: + if (!empty($buffer['ciphertext'])) { + $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($buffer['ciphertext'])); + $buffer['ciphertext'].= substr($ciphertext, 0, strlen($plaintext)); + if (strlen($buffer['ciphertext']) == $block_size) { + $xor = $this->_encryptBlock($buffer['ciphertext']); + $buffer['ciphertext'] = ''; + } + $start = strlen($plaintext); + $block = $this->decryptIV; + } else { + $plaintext = ''; + $xor = $this->_encryptBlock($this->decryptIV); + $start = 0; + } + + for ($i = $start; $i < strlen($ciphertext); $i+=$block_size) { + $block = substr($ciphertext, $i, $block_size); + $plaintext.= $block ^ $xor; + if ($continuousBuffer && strlen($block) != $block_size) { + $buffer['ciphertext'].= $block; + $block = $xor; + } else if (strlen($block) == $block_size) { + $xor = $this->_encryptBlock($block); + } + } + if ($this->continuousBuffer) { + $this->decryptIV = $block; + } + break; + case CRYPT_RIJNDAEL_MODE_OFB: + $xor = $this->decryptIV; + if (strlen($buffer)) { + for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { + $xor = $this->_encryptBlock($xor); + $buffer.= $xor; + $key = $this->_string_shift($buffer, $block_size); + $plaintext.= substr($ciphertext, $i, $block_size) ^ $key; + } + } else { + for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { + $xor = $this->_encryptBlock($xor); + $plaintext.= substr($ciphertext, $i, $block_size) ^ $xor; + } + $key = $xor; + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + if ($start = strlen($ciphertext) % $block_size) { + $buffer = substr($key, $start) . $buffer; + } + } + } + + return $this->paddable ? $this->_unpad($plaintext) : $plaintext; + } + + /** + * Encrypts a block + * + * @access private + * @param String $in + * @return String + */ + function _encryptBlock($in) + { + $state = array(); + $words = unpack('N*word', $in); + + $w = $this->w; + $t0 = $this->t0; + $t1 = $this->t1; + $t2 = $this->t2; + $t3 = $this->t3; + $Nb = $this->Nb; + $Nr = $this->Nr; + $c = $this->c; + + // addRoundKey + $i = 0; + foreach ($words as $word) { + $state[] = $word ^ $w[0][$i++]; + } + + // fips-197.pdf#page=19, "Figure 5. Pseudo Code for the Cipher", states that this loop has four components - + // subBytes, shiftRows, mixColumns, and addRoundKey. fips-197.pdf#page=30, "Implementation Suggestions Regarding + // Various Platforms" suggests that performs enhanced implementations are described in Rijndael-ammended.pdf. + // Rijndael-ammended.pdf#page=20, "Implementation aspects / 32-bit processor", discusses such an optimization. + // Unfortunately, the description given there is not quite correct. Per aes.spec.v316.pdf#page=19 [1], + // equation (7.4.7) is supposed to use addition instead of subtraction, so we'll do that here, as well. + + // [1] http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.v316.pdf + $temp = array(); + for ($round = 1; $round < $Nr; $round++) { + $i = 0; // $c[0] == 0 + $j = $c[1]; + $k = $c[2]; + $l = $c[3]; + + while ($i < $this->Nb) { + $temp[$i] = $t0[$state[$i] & 0xFF000000] ^ + $t1[$state[$j] & 0x00FF0000] ^ + $t2[$state[$k] & 0x0000FF00] ^ + $t3[$state[$l] & 0x000000FF] ^ + $w[$round][$i]; + $i++; + $j = ($j + 1) % $Nb; + $k = ($k + 1) % $Nb; + $l = ($l + 1) % $Nb; + } + + for ($i = 0; $i < $Nb; $i++) { + $state[$i] = $temp[$i]; + } + } + + // subWord + for ($i = 0; $i < $Nb; $i++) { + $state[$i] = $this->_subWord($state[$i]); + } + + // shiftRows + addRoundKey + $i = 0; // $c[0] == 0 + $j = $c[1]; + $k = $c[2]; + $l = $c[3]; + while ($i < $this->Nb) { + $temp[$i] = ($state[$i] & 0xFF000000) ^ + ($state[$j] & 0x00FF0000) ^ + ($state[$k] & 0x0000FF00) ^ + ($state[$l] & 0x000000FF) ^ + $w[$Nr][$i]; + $i++; + $j = ($j + 1) % $Nb; + $k = ($k + 1) % $Nb; + $l = ($l + 1) % $Nb; + } + $state = $temp; + + array_unshift($state, 'N*'); + + return call_user_func_array('pack', $state); + } + + /** + * Decrypts a block + * + * @access private + * @param String $in + * @return String + */ + function _decryptBlock($in) + { + $state = array(); + $words = unpack('N*word', $in); + + $num_states = count($state); + $dw = $this->dw; + $dt0 = $this->dt0; + $dt1 = $this->dt1; + $dt2 = $this->dt2; + $dt3 = $this->dt3; + $Nb = $this->Nb; + $Nr = $this->Nr; + $c = $this->c; + + // addRoundKey + $i = 0; + foreach ($words as $word) { + $state[] = $word ^ $dw[$Nr][$i++]; + } + + $temp = array(); + for ($round = $Nr - 1; $round > 0; $round--) { + $i = 0; // $c[0] == 0 + $j = $Nb - $c[1]; + $k = $Nb - $c[2]; + $l = $Nb - $c[3]; + + while ($i < $Nb) { + $temp[$i] = $dt0[$state[$i] & 0xFF000000] ^ + $dt1[$state[$j] & 0x00FF0000] ^ + $dt2[$state[$k] & 0x0000FF00] ^ + $dt3[$state[$l] & 0x000000FF] ^ + $dw[$round][$i]; + $i++; + $j = ($j + 1) % $Nb; + $k = ($k + 1) % $Nb; + $l = ($l + 1) % $Nb; + } + + for ($i = 0; $i < $Nb; $i++) { + $state[$i] = $temp[$i]; + } + } + + // invShiftRows + invSubWord + addRoundKey + $i = 0; // $c[0] == 0 + $j = $Nb - $c[1]; + $k = $Nb - $c[2]; + $l = $Nb - $c[3]; + + while ($i < $Nb) { + $temp[$i] = $dw[0][$i] ^ + $this->_invSubWord(($state[$i] & 0xFF000000) | + ($state[$j] & 0x00FF0000) | + ($state[$k] & 0x0000FF00) | + ($state[$l] & 0x000000FF)); + $i++; + $j = ($j + 1) % $Nb; + $k = ($k + 1) % $Nb; + $l = ($l + 1) % $Nb; + } + + $state = $temp; + + array_unshift($state, 'N*'); + + return call_user_func_array('pack', $state); + } + + /** + * Setup Rijndael + * + * Validates all the variables and calculates $Nr - the number of rounds that need to be performed - and $w - the key + * key schedule. + * + * @access private + */ + function _setup() + { + // Each number in $rcon is equal to the previous number multiplied by two in Rijndael's finite field. + // See http://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplicative_inverse + static $rcon = array(0, + 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, + 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000, + 0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000, + 0x2F000000, 0x5E000000, 0xBC000000, 0x63000000, 0xC6000000, + 0x97000000, 0x35000000, 0x6A000000, 0xD4000000, 0xB3000000, + 0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000 + ); + + if (!$this->changed) { + return; + } + + if (!$this->explicit_key_length) { + // we do >> 2, here, and not >> 5, as we do above, since strlen($this->key) tells us the number of bytes - not bits + $length = strlen($this->key) >> 2; + if ($length > 8) { + $length = 8; + } else if ($length < 4) { + $length = 4; + } + $this->Nk = $length; + $this->key_size = $length << 2; + } + + $this->key = str_pad(substr($this->key, 0, $this->key_size), $this->key_size, chr(0)); + $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($this->iv, 0, $this->block_size), $this->block_size, chr(0)); + + // see Rijndael-ammended.pdf#page=44 + $this->Nr = max($this->Nk, $this->Nb) + 6; + + // shift offsets for Nb = 5, 7 are defined in Rijndael-ammended.pdf#page=44, + // "Table 8: Shift offsets in Shiftrow for the alternative block lengths" + // shift offsets for Nb = 4, 6, 8 are defined in Rijndael-ammended.pdf#page=14, + // "Table 2: Shift offsets for different block lengths" + switch ($this->Nb) { + case 4: + case 5: + case 6: + $this->c = array(0, 1, 2, 3); + break; + case 7: + $this->c = array(0, 1, 2, 4); + break; + case 8: + $this->c = array(0, 1, 3, 4); + } + + $key = $this->key; + + $w = array_values(unpack('N*words', $key)); + + $length = $this->Nb * ($this->Nr + 1); + for ($i = $this->Nk; $i < $length; $i++) { + $temp = $w[$i - 1]; + if ($i % $this->Nk == 0) { + // according to , "the size of an integer is platform-dependent". + // on a 32-bit machine, it's 32-bits, and on a 64-bit machine, it's 64-bits. on a 32-bit machine, + // 0xFFFFFFFF << 8 == 0xFFFFFF00, but on a 64-bit machine, it equals 0xFFFFFFFF00. as such, doing 'and' + // with 0xFFFFFFFF (or 0xFFFFFF00) on a 32-bit machine is unnecessary, but on a 64-bit machine, it is. + $temp = (($temp << 8) & 0xFFFFFF00) | (($temp >> 24) & 0x000000FF); // rotWord + $temp = $this->_subWord($temp) ^ $rcon[$i / $this->Nk]; + } else if ($this->Nk > 6 && $i % $this->Nk == 4) { + $temp = $this->_subWord($temp); + } + $w[$i] = $w[$i - $this->Nk] ^ $temp; + } + + // convert the key schedule from a vector of $Nb * ($Nr + 1) length to a matrix with $Nr + 1 rows and $Nb columns + // and generate the inverse key schedule. more specifically, + // according to (section 5.3.3), + // "The key expansion for the Inverse Cipher is defined as follows: + // 1. Apply the Key Expansion. + // 2. Apply InvMixColumn to all Round Keys except the first and the last one." + // also, see fips-197.pdf#page=27, "5.3.5 Equivalent Inverse Cipher" + $temp = array(); + for ($i = $row = $col = 0; $i < $length; $i++, $col++) { + if ($col == $this->Nb) { + if ($row == 0) { + $this->dw[0] = $this->w[0]; + } else { + // subWord + invMixColumn + invSubWord = invMixColumn + $j = 0; + while ($j < $this->Nb) { + $dw = $this->_subWord($this->w[$row][$j]); + $temp[$j] = $this->dt0[$dw & 0xFF000000] ^ + $this->dt1[$dw & 0x00FF0000] ^ + $this->dt2[$dw & 0x0000FF00] ^ + $this->dt3[$dw & 0x000000FF]; + $j++; + } + $this->dw[$row] = $temp; + } + + $col = 0; + $row++; + } + $this->w[$row][$col] = $w[$i]; + } + + $this->dw[$row] = $this->w[$row]; + + $this->changed = false; + } + + /** + * Performs S-Box substitutions + * + * @access private + */ + function _subWord($word) + { + static $sbox0, $sbox1, $sbox2, $sbox3; + + if (empty($sbox0)) { + $sbox0 = array( + 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, + 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, + 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, + 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, + 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, + 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, + 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, + 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, + 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, + 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, + 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, + 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, + 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, + 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, + 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, + 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 + ); + + $sbox1 = array(); + $sbox2 = array(); + $sbox3 = array(); + + for ($i = 0; $i < 256; $i++) { + $sbox1[$i << 8] = $sbox0[$i] << 8; + $sbox2[$i << 16] = $sbox0[$i] << 16; + $sbox3[$i << 24] = $sbox0[$i] << 24; + } + } + + return $sbox0[$word & 0x000000FF] | + $sbox1[$word & 0x0000FF00] | + $sbox2[$word & 0x00FF0000] | + $sbox3[$word & 0xFF000000]; + } + + /** + * Performs inverse S-Box substitutions + * + * @access private + */ + function _invSubWord($word) + { + static $sbox0, $sbox1, $sbox2, $sbox3; + + if (empty($sbox0)) { + $sbox0 = array( + 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, + 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, + 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, + 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, + 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, + 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, + 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, + 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, + 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, + 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, + 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, + 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, + 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, + 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, + 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D + ); + + $sbox1 = array(); + $sbox2 = array(); + $sbox3 = array(); + + for ($i = 0; $i < 256; $i++) { + $sbox1[$i << 8] = $sbox0[$i] << 8; + $sbox2[$i << 16] = $sbox0[$i] << 16; + $sbox3[$i << 24] = $sbox0[$i] << 24; + } + } + + return $sbox0[$word & 0x000000FF] | + $sbox1[$word & 0x0000FF00] | + $sbox2[$word & 0x00FF0000] | + $sbox3[$word & 0xFF000000]; + } + + /** + * Pad "packets". + * + * Rijndael works by encrypting between sixteen and thirty-two bytes at a time, provided that number is also a multiple + * of four. If you ever need to encrypt or decrypt something that isn't of the proper length, it becomes necessary to + * pad the input so that it is of the proper length. + * + * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH, + * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping + * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is + * transmitted separately) + * + * @see Crypt_Rijndael::disablePadding() + * @access public + */ + function enablePadding() + { + $this->padding = true; + } + + /** + * Do not pad packets. + * + * @see Crypt_Rijndael::enablePadding() + * @access public + */ + function disablePadding() + { + $this->padding = false; + } + + /** + * Pads a string + * + * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize. + * $block_size - (strlen($text) % $block_size) bytes are added, each of which is equal to + * chr($block_size - (strlen($text) % $block_size) + * + * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless + * and padding will, hence forth, be enabled. + * + * @see Crypt_Rijndael::_unpad() + * @access private + */ + function _pad($text) + { + $length = strlen($text); + + if (!$this->padding) { + if ($length % $this->block_size == 0) { + return $text; + } else { + $this->_handle_error("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size})"); + $this->padding = true; + } + } + + $pad = $this->block_size - ($length % $this->block_size); + + return str_pad($text, $length + $pad, chr($pad)); + } + + /** + * Unpads a string. + * + * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong + * and false will be returned. + * + * @see Crypt_Rijndael::_pad() + * @access private + */ + function _unpad($text) + { + if (!$this->padding) { + return $text; + } + + $length = ord($text[strlen($text) - 1]); + + if (!$length || $length > $this->block_size) { + return false; + } + + return substr($text, 0, -$length); + } + + /** + * Treat consecutive "packets" as if they are a continuous buffer. + * + * Say you have a 32-byte plaintext $plaintext. Using the default behavior, the two following code snippets + * will yield different outputs: + * + * + * echo $rijndael->encrypt(substr($plaintext, 0, 16)); + * echo $rijndael->encrypt(substr($plaintext, 16, 16)); + * + * + * echo $rijndael->encrypt($plaintext); + * + * + * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates + * another, as demonstrated with the following: + * + * + * $rijndael->encrypt(substr($plaintext, 0, 16)); + * echo $rijndael->decrypt($des->encrypt(substr($plaintext, 16, 16))); + * + * + * echo $rijndael->decrypt($des->encrypt(substr($plaintext, 16, 16))); + * + * + * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different + * outputs. The reason is due to the fact that the initialization vector's change after every encryption / + * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant. + * + * Put another way, when the continuous buffer is enabled, the state of the Crypt_Rijndael() object changes after each + * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that + * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them), + * however, they are also less intuitive and more likely to cause you problems. + * + * @see Crypt_Rijndael::disableContinuousBuffer() + * @access public + */ + function enableContinuousBuffer() + { + $this->continuousBuffer = true; + } + + /** + * Treat consecutive packets as if they are a discontinuous buffer. + * + * The default behavior. + * + * @see Crypt_Rijndael::enableContinuousBuffer() + * @access public + */ + function disableContinuousBuffer() + { + $this->continuousBuffer = false; + $this->encryptIV = $this->iv; + $this->decryptIV = $this->iv; + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param String $string + * @param optional Integer $index + * @return String + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } + + /** + * Error Handler + * + * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. + * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. + * + * @param String $string + * @access private + */ + function _handle_error($err_msg) { + if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { + $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; + throw(new $class($err_msg)); + } else { + user_error($err_msg); + } + } +} + +// vim: ts=4:sw=4:et: +// vim6: fdl=1: \ No newline at end of file diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/TripleDES.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/TripleDES.php new file mode 100644 index 0000000000..faf8c18ade --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/TripleDES.php @@ -0,0 +1,1061 @@ + + * setKey('abcdefghijklmnopqrstuvwx'); + * + * $size = 10 * 1024; + * $plaintext = ''; + * for ($i = 0; $i < $size; $i++) { + * $plaintext.= 'a'; + * } + * + * echo $des->decrypt($des->encrypt($plaintext)); + * ?> + * + * + * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @category Crypt + * @package Crypt_TripleDES + * @author Jim Wigginton + * @copyright MMVII Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @version $Id: TripleDES.php,v 1.13 2010/02/26 03:40:25 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/** + * Include Crypt_DES + */ +if (!class_exists('Crypt_DES')) { + require_once('DES.php'); +} + +/** + * Encrypt / decrypt using inner chaining + * + * Inner chaining is used by SSH-1 and is generally considered to be less secure then outer chaining (CRYPT_DES_MODE_CBC3). + */ +define('CRYPT_DES_MODE_3CBC', -2); + +/** + * Encrypt / decrypt using outer chaining + * + * Outer chaining is used by SSH-2 and when the mode is set to CRYPT_DES_MODE_CBC. + */ +define('CRYPT_DES_MODE_CBC3', CRYPT_DES_MODE_CBC); + +/** + * Pure-PHP implementation of Triple DES. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Crypt_TerraDES + */ +class Crypt_TripleDES { + /** + * The Three Keys + * + * @see Crypt_TripleDES::setKey() + * @var String + * @access private + */ + var $key = "\0\0\0\0\0\0\0\0"; + + /** + * The Encryption Mode + * + * @see Crypt_TripleDES::Crypt_TripleDES() + * @var Integer + * @access private + */ + var $mode = CRYPT_DES_MODE_CBC; + + /** + * Continuous Buffer status + * + * @see Crypt_TripleDES::enableContinuousBuffer() + * @var Boolean + * @access private + */ + var $continuousBuffer = false; + + /** + * Padding status + * + * @see Crypt_TripleDES::enablePadding() + * @var Boolean + * @access private + */ + var $padding = true; + + /** + * The Initialization Vector + * + * @see Crypt_TripleDES::setIV() + * @var String + * @access private + */ + var $iv = "\0\0\0\0\0\0\0\0"; + + /** + * A "sliding" Initialization Vector + * + * @see Crypt_TripleDES::enableContinuousBuffer() + * @var String + * @access private + */ + var $encryptIV = "\0\0\0\0\0\0\0\0"; + + /** + * A "sliding" Initialization Vector + * + * @see Crypt_TripleDES::enableContinuousBuffer() + * @var String + * @access private + */ + var $decryptIV = "\0\0\0\0\0\0\0\0"; + + /** + * The Crypt_DES objects + * + * @var Array + * @access private + */ + var $des; + + /** + * mcrypt resource for encryption + * + * The mcrypt resource can be recreated every time something needs to be created or it can be created just once. + * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode. + * + * @see Crypt_TripleDES::encrypt() + * @var String + * @access private + */ + var $enmcrypt; + + /** + * mcrypt resource for decryption + * + * The mcrypt resource can be recreated every time something needs to be created or it can be created just once. + * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode. + * + * @see Crypt_TripleDES::decrypt() + * @var String + * @access private + */ + var $demcrypt; + + /** + * Does the enmcrypt resource need to be (re)initialized? + * + * @see Crypt_TripleDES::setKey() + * @see Crypt_TripleDES::setIV() + * @var Boolean + * @access private + */ + var $enchanged = true; + + /** + * Does the demcrypt resource need to be (re)initialized? + * + * @see Crypt_TripleDES::setKey() + * @see Crypt_TripleDES::setIV() + * @var Boolean + * @access private + */ + var $dechanged = true; + + /** + * Is the mode one that is paddable? + * + * @see Crypt_TripleDES::Crypt_TripleDES() + * @var Boolean + * @access private + */ + var $paddable = false; + + /** + * Encryption buffer for CTR, OFB and CFB modes + * + * @see Crypt_TripleDES::encrypt() + * @var String + * @access private + */ + var $enbuffer = ''; + + /** + * Decryption buffer for CTR, OFB and CFB modes + * + * @see Crypt_TripleDES::decrypt() + * @var String + * @access private + */ + var $debuffer = ''; + + /** + * mcrypt resource for CFB mode + * + * @see Crypt_TripleDES::encrypt() + * @see Crypt_TripleDES::decrypt() + * @var String + * @access private + */ + var $ecb; + + /** + * Default Constructor. + * + * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be + * CRYPT_DES_MODE_ECB or CRYPT_DES_MODE_CBC. If not explictly set, CRYPT_DES_MODE_CBC will be used. + * + * @param optional Integer $mode + * @return Crypt_TripleDES + * @access public + */ + function Crypt_TripleDES($mode = CRYPT_DES_MODE_CBC) + { + if ( !defined('CRYPT_DES_MODE') ) { + switch (true) { + case extension_loaded('mcrypt') && in_array('tripledes', mcrypt_list_algorithms()): + define('CRYPT_DES_MODE', CRYPT_DES_MODE_MCRYPT); + break; + default: + define('CRYPT_DES_MODE', CRYPT_DES_MODE_INTERNAL); + } + } + + if ( $mode == CRYPT_DES_MODE_3CBC ) { + $this->mode = CRYPT_DES_MODE_3CBC; + $this->des = array( + new Crypt_DES(CRYPT_DES_MODE_CBC), + new Crypt_DES(CRYPT_DES_MODE_CBC), + new Crypt_DES(CRYPT_DES_MODE_CBC) + ); + $this->paddable = true; + + // we're going to be doing the padding, ourselves, so disable it in the Crypt_DES objects + $this->des[0]->disablePadding(); + $this->des[1]->disablePadding(); + $this->des[2]->disablePadding(); + + return; + } + + switch ( CRYPT_DES_MODE ) { + case CRYPT_DES_MODE_MCRYPT: + switch ($mode) { + case CRYPT_DES_MODE_ECB: + $this->paddable = true; + $this->mode = MCRYPT_MODE_ECB; + break; + case CRYPT_DES_MODE_CTR: + $this->mode = 'ctr'; + break; + case CRYPT_DES_MODE_CFB: + $this->mode = 'ncfb'; + break; + case CRYPT_DES_MODE_OFB: + $this->mode = MCRYPT_MODE_NOFB; + break; + case CRYPT_DES_MODE_CBC: + default: + $this->paddable = true; + $this->mode = MCRYPT_MODE_CBC; + } + + break; + default: + $this->des = array( + new Crypt_DES(CRYPT_DES_MODE_ECB), + new Crypt_DES(CRYPT_DES_MODE_ECB), + new Crypt_DES(CRYPT_DES_MODE_ECB) + ); + + // we're going to be doing the padding, ourselves, so disable it in the Crypt_DES objects + $this->des[0]->disablePadding(); + $this->des[1]->disablePadding(); + $this->des[2]->disablePadding(); + + switch ($mode) { + case CRYPT_DES_MODE_ECB: + case CRYPT_DES_MODE_CBC: + $this->paddable = true; + $this->mode = $mode; + break; + case CRYPT_DES_MODE_CTR: + case CRYPT_DES_MODE_CFB: + case CRYPT_DES_MODE_OFB: + $this->mode = $mode; + break; + default: + $this->paddable = true; + $this->mode = CRYPT_DES_MODE_CBC; + } + } + } + + /** + * Sets the key. + * + * Keys can be of any length. Triple DES, itself, can use 128-bit (eg. strlen($key) == 16) or + * 192-bit (eg. strlen($key) == 24) keys. This function pads and truncates $key as appropriate. + * + * DES also requires that every eighth bit be a parity bit, however, we'll ignore that. + * + * If the key is not explicitly set, it'll be assumed to be all zero's. + * + * @access public + * @param String $key + */ + function setKey($key) + { + $length = strlen($key); + if ($length > 8) { + $key = str_pad($key, 24, chr(0)); + // if $key is between 64 and 128-bits, use the first 64-bits as the last, per this: + // http://php.net/function.mcrypt-encrypt#47973 + //$key = $length <= 16 ? substr_replace($key, substr($key, 0, 8), 16) : substr($key, 0, 24); + } else { + $key = str_pad($key, 8, chr(0)); + } + $this->key = $key; + switch (true) { + case CRYPT_DES_MODE == CRYPT_DES_MODE_INTERNAL: + case $this->mode == CRYPT_DES_MODE_3CBC: + $this->des[0]->setKey(substr($key, 0, 8)); + $this->des[1]->setKey(substr($key, 8, 8)); + $this->des[2]->setKey(substr($key, 16, 8)); + } + $this->enchanged = $this->dechanged = true; + } + + /** + * Sets the password. + * + * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows: + * {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2}: + * $hash, $salt, $method + * + * @param String $password + * @param optional String $method + * @access public + */ + function setPassword($password, $method = 'pbkdf2') + { + $key = ''; + + switch ($method) { + default: // 'pbkdf2' + list(, , $hash, $salt, $count) = func_get_args(); + if (!isset($hash)) { + $hash = 'sha1'; + } + // WPA and WPA use the SSID as the salt + if (!isset($salt)) { + $salt = 'phpseclib'; + } + // RFC2898#section-4.2 uses 1,000 iterations by default + // WPA and WPA2 use 4,096. + if (!isset($count)) { + $count = 1000; + } + + if (!class_exists('Crypt_Hash')) { + require_once('Crypt/Hash.php'); + } + + $i = 1; + while (strlen($key) < 24) { // $dkLen == 24 + $hmac = new Crypt_Hash(); + $hmac->setHash($hash); + $hmac->setKey($password); + $f = $u = $hmac->hash($salt . pack('N', $i++)); + for ($j = 2; $j <= $count; $j++) { + $u = $hmac->hash($u); + $f^= $u; + } + $key.= $f; + } + } + + $this->setKey($key); + } + + /** + * Sets the initialization vector. (optional) + * + * SetIV is not required when CRYPT_DES_MODE_ECB is being used. If not explictly set, it'll be assumed + * to be all zero's. + * + * @access public + * @param String $iv + */ + function setIV($iv) + { + $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, 8), 8, chr(0)); + if ($this->mode == CRYPT_DES_MODE_3CBC) { + $this->des[0]->setIV($iv); + $this->des[1]->setIV($iv); + $this->des[2]->setIV($iv); + } + $this->enchanged = $this->dechanged = true; + } + + /** + * Generate CTR XOR encryption key + * + * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the + * plaintext / ciphertext in CTR mode. + * + * @see Crypt_TripleDES::decrypt() + * @see Crypt_TripleDES::encrypt() + * @access private + * @param Integer $length + * @param String $iv + */ + function _generate_xor($length, &$iv) + { + $xor = ''; + $num_blocks = ($length + 7) >> 3; + for ($i = 0; $i < $num_blocks; $i++) { + $xor.= $iv; + for ($j = 4; $j <= 8; $j+=4) { + $temp = substr($iv, -$j, 4); + switch ($temp) { + case "\xFF\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4); + break; + case "\x7F\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4); + break 2; + default: + extract(unpack('Ncount', $temp)); + $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4); + break 2; + } + } + } + + return $xor; + } + + /** + * Encrypts a message. + * + * @access public + * @param String $plaintext + */ + function encrypt($plaintext) + { + if ($this->paddable) { + $plaintext = $this->_pad($plaintext); + } + + // if the key is smaller then 8, do what we'd normally do + if ($this->mode == CRYPT_DES_MODE_3CBC && strlen($this->key) > 8) { + $ciphertext = $this->des[2]->encrypt($this->des[1]->decrypt($this->des[0]->encrypt($plaintext))); + + return $ciphertext; + } + + if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) { + if ($this->enchanged) { + if (!isset($this->enmcrypt)) { + $this->enmcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, ''); + } + mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV); + if ($this->mode != 'ncfb') { + $this->enchanged = false; + } + } + + if ($this->mode != 'ncfb') { + $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext); + } else { + if ($this->enchanged) { + $this->ecb = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, ''); + mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0"); + $this->enchanged = false; + } + + if (strlen($this->enbuffer)) { + $ciphertext = $plaintext ^ substr($this->encryptIV, strlen($this->enbuffer)); + $this->enbuffer.= $ciphertext; + if (strlen($this->enbuffer) == 8) { + $this->encryptIV = $this->enbuffer; + $this->enbuffer = ''; + mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV); + } + $plaintext = substr($plaintext, strlen($ciphertext)); + } else { + $ciphertext = ''; + } + + $last_pos = strlen($plaintext) & 0xFFFFFFF8; + $ciphertext.= $last_pos ? mcrypt_generic($this->enmcrypt, substr($plaintext, 0, $last_pos)) : ''; + + if (strlen($plaintext) & 0x7) { + if (strlen($ciphertext)) { + $this->encryptIV = substr($ciphertext, -8); + } + $this->encryptIV = mcrypt_generic($this->ecb, $this->encryptIV); + $this->enbuffer = substr($plaintext, $last_pos) ^ $this->encryptIV; + $ciphertext.= $this->enbuffer; + } + } + + if (!$this->continuousBuffer) { + mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV); + } + + return $ciphertext; + } + + if (strlen($this->key) <= 8) { + $this->des[0]->mode = $this->mode; + + return $this->des[0]->encrypt($plaintext); + } + + $des = $this->des; + + $buffer = &$this->enbuffer; + $continuousBuffer = $this->continuousBuffer; + $ciphertext = ''; + switch ($this->mode) { + case CRYPT_DES_MODE_ECB: + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $block = substr($plaintext, $i, 8); + // all of these _processBlock calls could, in theory, be put in a function - say Crypt_TripleDES::_ede_encrypt() or something. + // only problem with that: it would slow encryption and decryption down. $this->des would have to be called every time that + // function is called, instead of once for the whole string of text that's being encrypted, which would, in turn, make + // encryption and decryption take more time, per this: + // + // http://blog.libssh2.org/index.php?/archives/21-Compiled-Variables.html + $block = $des[0]->_processBlock($block, CRYPT_DES_ENCRYPT); + $block = $des[1]->_processBlock($block, CRYPT_DES_DECRYPT); + $block = $des[2]->_processBlock($block, CRYPT_DES_ENCRYPT); + $ciphertext.= $block; + } + break; + case CRYPT_DES_MODE_CBC: + $xor = $this->encryptIV; + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $block = substr($plaintext, $i, 8) ^ $xor; + $block = $des[0]->_processBlock($block, CRYPT_DES_ENCRYPT); + $block = $des[1]->_processBlock($block, CRYPT_DES_DECRYPT); + $block = $des[2]->_processBlock($block, CRYPT_DES_ENCRYPT); + $xor = $block; + $ciphertext.= $block; + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + } + break; + case CRYPT_DES_MODE_CTR: + $xor = $this->encryptIV; + if (strlen($buffer['encrypted'])) { + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $block = substr($plaintext, $i, 8); + $key = $this->_generate_xor(8, $xor); + $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT); + $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT); + $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT); + $buffer['encrypted'].= $key; + $key = $this->_string_shift($buffer['encrypted'], 8); + $ciphertext.= $block ^ $key; + } + } else { + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $block = substr($plaintext, $i, 8); + $key = $this->_generate_xor(8, $xor); + $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT); + $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT); + $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT); + $ciphertext.= $block ^ $key; + } + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + if ($start = strlen($plaintext) & 7) { + $buffer['encrypted'] = substr($key, $start) . $buffer; + } + } + break; + case CRYPT_DES_MODE_CFB: + if (!empty($buffer['xor'])) { + $ciphertext = $plaintext ^ $buffer['xor']; + $iv = $buffer['encrypted'] . $ciphertext; + $start = strlen($ciphertext); + $buffer['encrypted'].= $ciphertext; + $buffer['xor'] = substr($buffer['xor'], strlen($ciphertext)); + } else { + $ciphertext = ''; + $iv = $this->encryptIV; + $start = 0; + } + + for ($i = $start; $i < strlen($plaintext); $i+=8) { + $block = substr($plaintext, $i, 8); + $iv = $des[0]->_processBlock($iv, CRYPT_DES_ENCRYPT); + $iv = $des[1]->_processBlock($iv, CRYPT_DES_DECRYPT); + $xor= $des[2]->_processBlock($iv, CRYPT_DES_ENCRYPT); + + $iv = $block ^ $xor; + if ($continuousBuffer && strlen($iv) != 8) { + $buffer = array( + 'encrypted' => $iv, + 'xor' => substr($xor, strlen($iv)) + ); + } + $ciphertext.= $iv; + } + + if ($this->continuousBuffer) { + $this->encryptIV = $iv; + } + break; + case CRYPT_DES_MODE_OFB: + $xor = $this->encryptIV; + if (strlen($buffer)) { + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $xor = $des[0]->_processBlock($xor, CRYPT_DES_ENCRYPT); + $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT); + $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT); + $buffer.= $xor; + $key = $this->_string_shift($buffer, 8); + $ciphertext.= substr($plaintext, $i, 8) ^ $key; + } + } else { + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $xor = $des[0]->_processBlock($xor, CRYPT_DES_ENCRYPT); + $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT); + $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT); + $ciphertext.= substr($plaintext, $i, 8) ^ $xor; + } + $key = $xor; + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + if ($start = strlen($plaintext) & 7) { + $buffer = substr($key, $start) . $buffer; + } + } + } + + return $ciphertext; + } + + /** + * Decrypts a message. + * + * @access public + * @param String $ciphertext + */ + function decrypt($ciphertext) + { + if ($this->mode == CRYPT_DES_MODE_3CBC && strlen($this->key) > 8) { + $plaintext = $this->des[0]->decrypt($this->des[1]->encrypt($this->des[2]->decrypt($ciphertext))); + + return $this->_unpad($plaintext); + } + + if ($this->paddable) { + // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic : + // "The data is padded with "\0" to make sure the length of the data is n * blocksize." + $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, chr(0)); + } + + if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) { + if ($this->dechanged) { + if (!isset($this->demcrypt)) { + $this->demcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, ''); + } + mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV); + if ($this->mode != 'ncfb') { + $this->dechanged = false; + } + } + + if ($this->mode != 'ncfb') { + $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext); + } else { + if ($this->dechanged) { + $this->ecb = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, ''); + mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0"); + $this->dechanged = false; + } + + if (strlen($this->debuffer)) { + $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($this->debuffer)); + + $this->debuffer.= substr($ciphertext, 0, strlen($plaintext)); + if (strlen($this->debuffer) == 8) { + $this->decryptIV = $this->debuffer; + $this->debuffer = ''; + mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV); + } + $ciphertext = substr($ciphertext, strlen($plaintext)); + } else { + $plaintext = ''; + } + + $last_pos = strlen($ciphertext) & 0xFFFFFFF8; + $plaintext.= $last_pos ? mdecrypt_generic($this->demcrypt, substr($ciphertext, 0, $last_pos)) : ''; + + if (strlen($ciphertext) & 0x7) { + if (strlen($plaintext)) { + $this->decryptIV = substr($ciphertext, $last_pos - 8, 8); + } + $this->decryptIV = mcrypt_generic($this->ecb, $this->decryptIV); + $this->debuffer = substr($ciphertext, $last_pos); + $plaintext.= $this->debuffer ^ $this->decryptIV; + } + + return $plaintext; + } + + if (!$this->continuousBuffer) { + mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV); + } + + return $this->paddable ? $this->_unpad($plaintext) : $plaintext; + } + + if (strlen($this->key) <= 8) { + $this->des[0]->mode = $this->mode; + $plaintext = $this->des[0]->decrypt($ciphertext); + return $this->paddable ? $this->_unpad($plaintext) : $plaintext; + } + + $des = $this->des; + + $buffer = &$this->enbuffer; + $continuousBuffer = $this->continuousBuffer; + $plaintext = ''; + switch ($this->mode) { + case CRYPT_DES_MODE_ECB: + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $block = substr($ciphertext, $i, 8); + $block = $des[2]->_processBlock($block, CRYPT_DES_DECRYPT); + $block = $des[1]->_processBlock($block, CRYPT_DES_ENCRYPT); + $block = $des[0]->_processBlock($block, CRYPT_DES_DECRYPT); + $plaintext.= $block; + } + break; + case CRYPT_DES_MODE_CBC: + $xor = $this->decryptIV; + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $orig = $block = substr($ciphertext, $i, 8); + $block = $des[2]->_processBlock($block, CRYPT_DES_DECRYPT); + $block = $des[1]->_processBlock($block, CRYPT_DES_ENCRYPT); + $block = $des[0]->_processBlock($block, CRYPT_DES_DECRYPT); + $plaintext.= $block ^ $xor; + $xor = $orig; + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + } + break; + case CRYPT_DES_MODE_CTR: + $xor = $this->decryptIV; + if (strlen($buffer['ciphertext'])) { + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $block = substr($ciphertext, $i, 8); + $key = $this->_generate_xor(8, $xor); + $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT); + $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT); + $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT); + $buffer['ciphertext'].= $key; + $key = $this->_string_shift($buffer['ciphertext'], 8); + $plaintext.= $block ^ $key; + } + } else { + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $block = substr($ciphertext, $i, 8); + $key = $this->_generate_xor(8, $xor); + $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT); + $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT); + $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT); + $plaintext.= $block ^ $key; + } + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + if ($start = strlen($plaintext) & 7) { + $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext']; + } + } + break; + case CRYPT_DES_MODE_CFB: + if (!empty($buffer['ciphertext'])) { + $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($buffer['ciphertext'])); + $buffer['ciphertext'].= substr($ciphertext, 0, strlen($plaintext)); + if (strlen($buffer['ciphertext']) == 8) { + $xor = $des[0]->_processBlock($buffer['ciphertext'], CRYPT_DES_ENCRYPT); + $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT); + $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT); + $buffer['ciphertext'] = ''; + } + $start = strlen($plaintext); + $block = $this->decryptIV; + } else { + $plaintext = ''; + $xor = $des[0]->_processBlock($this->decryptIV, CRYPT_DES_ENCRYPT); + $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT); + $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT); + $start = 0; + } + + for ($i = $start; $i < strlen($ciphertext); $i+=8) { + $block = substr($ciphertext, $i, 8); + $plaintext.= $block ^ $xor; + if ($continuousBuffer && strlen($block) != 8) { + $buffer['ciphertext'].= $block; + $block = $xor; + } else if (strlen($block) == 8) { + $xor = $des[0]->_processBlock($block, CRYPT_DES_ENCRYPT); + $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT); + $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT); + } + } + if ($this->continuousBuffer) { + $this->decryptIV = $block; + } + break; + case CRYPT_DES_MODE_OFB: + $xor = $this->decryptIV; + if (strlen($buffer)) { + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $xor = $des[0]->_processBlock($xor, CRYPT_DES_ENCRYPT); + $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT); + $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT); + $buffer.= $xor; + $key = $this->_string_shift($buffer, 8); + $plaintext.= substr($ciphertext, $i, 8) ^ $key; + } + } else { + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $xor = $des[0]->_processBlock($xor, CRYPT_DES_ENCRYPT); + $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT); + $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT); + $plaintext.= substr($ciphertext, $i, 8) ^ $xor; + } + $key = $xor; + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + if ($start = strlen($ciphertext) & 7) { + $buffer = substr($key, $start) . $buffer; + } + } + } + + return $this->paddable ? $this->_unpad($plaintext) : $plaintext; + } + + /** + * Treat consecutive "packets" as if they are a continuous buffer. + * + * Say you have a 16-byte plaintext $plaintext. Using the default behavior, the two following code snippets + * will yield different outputs: + * + * + * echo $des->encrypt(substr($plaintext, 0, 8)); + * echo $des->encrypt(substr($plaintext, 8, 8)); + * + * + * echo $des->encrypt($plaintext); + * + * + * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates + * another, as demonstrated with the following: + * + * + * $des->encrypt(substr($plaintext, 0, 8)); + * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8))); + * + * + * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8))); + * + * + * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different + * outputs. The reason is due to the fact that the initialization vector's change after every encryption / + * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant. + * + * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each + * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that + * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them), + * however, they are also less intuitive and more likely to cause you problems. + * + * @see Crypt_TripleDES::disableContinuousBuffer() + * @access public + */ + function enableContinuousBuffer() + { + $this->continuousBuffer = true; + if ($this->mode == CRYPT_DES_MODE_3CBC) { + $this->des[0]->enableContinuousBuffer(); + $this->des[1]->enableContinuousBuffer(); + $this->des[2]->enableContinuousBuffer(); + } + } + + /** + * Treat consecutive packets as if they are a discontinuous buffer. + * + * The default behavior. + * + * @see Crypt_TripleDES::enableContinuousBuffer() + * @access public + */ + function disableContinuousBuffer() + { + $this->continuousBuffer = false; + $this->encryptIV = $this->iv; + $this->decryptIV = $this->iv; + + if ($this->mode == CRYPT_DES_MODE_3CBC) { + $this->des[0]->disableContinuousBuffer(); + $this->des[1]->disableContinuousBuffer(); + $this->des[2]->disableContinuousBuffer(); + } + } + + /** + * Pad "packets". + * + * DES works by encrypting eight bytes at a time. If you ever need to encrypt or decrypt something that's not + * a multiple of eight, it becomes necessary to pad the input so that it's length is a multiple of eight. + * + * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH1, + * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping + * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is + * transmitted separately) + * + * @see Crypt_TripleDES::disablePadding() + * @access public + */ + function enablePadding() + { + $this->padding = true; + } + + /** + * Do not pad packets. + * + * @see Crypt_TripleDES::enablePadding() + * @access public + */ + function disablePadding() + { + $this->padding = false; + } + + /** + * Pads a string + * + * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize (8). + * 8 - (strlen($text) & 7) bytes are added, each of which is equal to chr(8 - (strlen($text) & 7) + * + * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless + * and padding will, hence forth, be enabled. + * + * @see Crypt_TripleDES::_unpad() + * @access private + */ + function _pad($text) + { + $length = strlen($text); + + if (!$this->padding) { + if (($length & 7) == 0) { + return $text; + } else { + user_error("The plaintext's length ($length) is not a multiple of the block size (8)", E_USER_NOTICE); + $this->padding = true; + } + } + + $pad = 8 - ($length & 7); + return str_pad($text, $length + $pad, chr($pad)); + } + + /** + * Unpads a string + * + * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong + * and false will be returned. + * + * @see Crypt_TripleDES::_pad() + * @access private + */ + function _unpad($text) + { + if (!$this->padding) { + return $text; + } + + $length = ord($text[strlen($text) - 1]); + + if (!$length || $length > 8) { + return false; + } + + return substr($text, 0, -$length); + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param String $string + * @param optional Integer $index + * @return String + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } +} + +// vim: ts=4:sw=4:et: +// vim6: fdl=1: diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/File/ANSI.php b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ANSI.php new file mode 100644 index 0000000000..4f500f9b81 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ANSI.php @@ -0,0 +1,558 @@ + + * @copyright MMXII Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @version $Id$ + * @link htp://phpseclib.sourceforge.net + */ + +/** + * Pure-PHP ANSI Decoder + * + * @author Jim Wigginton + * @version 0.3.0 + * @access public + * @package File_ANSI + */ +class File_ANSI { + /** + * Max Width + * + * @var Integer + * @access private + */ + var $max_x; + + /** + * Max Height + * + * @var Integer + * @access private + */ + var $max_y; + + /** + * Max History + * + * @var Integer + * @access private + */ + var $max_history; + + /** + * History + * + * @var Array + * @access private + */ + var $history; + + /** + * History Attributes + * + * @var Array + * @access private + */ + var $history_attrs; + + /** + * Current Column + * + * @var Integer + * @access private + */ + var $x; + + /** + * Current Row + * + * @var Integer + * @access private + */ + var $y; + + /** + * Old Column + * + * @var Integer + * @access private + */ + var $old_x; + + /** + * Old Row + * + * @var Integer + * @access private + */ + var $old_y; + + /** + * An empty attribute row + * + * @var Array + * @access private + */ + var $attr_row; + + /** + * The current screen text + * + * @var Array + * @access private + */ + var $screen; + + /** + * The current screen attributes + * + * @var Array + * @access private + */ + var $attrs; + + /** + * The current foreground color + * + * @var String + * @access private + */ + var $foreground; + + /** + * The current background color + * + * @var String + * @access private + */ + var $background; + + /** + * Bold flag + * + * @var Boolean + * @access private + */ + var $bold; + + /** + * Underline flag + * + * @var Boolean + * @access private + */ + var $underline; + + /** + * Blink flag + * + * @var Boolean + * @access private + */ + var $blink; + + /** + * Reverse flag + * + * @var Boolean + * @access private + */ + var $reverse; + + /** + * Color flag + * + * @var Boolean + * @access private + */ + var $color; + + /** + * Current ANSI code + * + * @var String + * @access private + */ + var $ansi; + + /** + * Default Constructor. + * + * @return File_ANSI + * @access public + */ + function File_ANSI() + { + $this->setHistory(200); + $this->setDimensions(80, 24); + } + + /** + * Set terminal width and height + * + * Resets the screen as well + * + * @param Integer $x + * @param Integer $y + * @access public + */ + function setDimensions($x, $y) + { + $this->max_x = $x - 1; + $this->max_y = $y - 1; + $this->x = $this->y = 0; + $this->history = $this->history_attrs = array(); + $this->attr_row = array_fill(0, $this->max_x + 1, ''); + $this->screen = array_fill(0, $this->max_y + 1, ''); + $this->attrs = array_fill(0, $this->max_y + 1, $this->attr_row); + $this->foreground = 'white'; + $this->background = 'black'; + $this->bold = false; + $this->underline = false; + $this->blink = false; + $this->reverse = false; + $this->color = false; + + $this->ansi = ''; + } + + /** + * Set the number of lines that should be logged past the terminal height + * + * @param Integer $x + * @param Integer $y + * @access public + */ + function setHistory($history) + { + $this->max_history = $history; + } + + /** + * Load a string + * + * @param String $source + * @access public + */ + function loadString($source) + { + $this->setDimensions($this->max_x + 1, $this->max_y + 1); + $this->appendString($source); + } + + /** + * Appdend a string + * + * @param String $source + * @access public + */ + function appendString($source) + { + for ($i = 0; $i < strlen($source); $i++) { + if (strlen($this->ansi)) { + $this->ansi.= $source[$i]; + $chr = ord($source[$i]); + // http://en.wikipedia.org/wiki/ANSI_escape_code#Sequence_elements + // single character CSI's not currently supported + switch (true) { + case $this->ansi == "\x1B=": + $this->ansi = ''; + continue 2; + case strlen($this->ansi) == 2 && $chr >= 64 && $chr <= 95 && $chr != ord('['): + case strlen($this->ansi) > 2 && $chr >= 64 && $chr <= 126: + break; + default: + continue 2; + } + // http://ascii-table.com/ansi-escape-sequences-vt-100.php + switch ($this->ansi) { + case "\x1B[H": + $this->old_x = $this->x; + $this->old_y = $this->y; + $this->x = $this->y = 0; + break; + case "\x1B[J": + $this->history = array_merge($this->history, array_slice(array_splice($this->screen, $this->y + 1), 0, $this->old_y)); + $this->screen = array_merge($this->screen, array_fill($this->y, $this->max_y, '')); + + $this->history_attrs = array_merge($this->history_attrs, array_slice(array_splice($this->attrs, $this->y + 1), 0, $this->old_y)); + $this->attrs = array_merge($this->attrs, array_fill($this->y, $this->max_y, $this->attr_row)); + + if (count($this->history) == $this->max_history) { + array_shift($this->history); + array_shift($this->history_attrs); + } + case "\x1B[K": + $this->screen[$this->y] = substr($this->screen[$this->y], 0, $this->x); + + array_splice($this->attrs[$this->y], $this->x + 1); + break; + case "\x1B[?1h": // set cursor key to application + break; + default: + switch (true) { + case preg_match('#\x1B\[(\d+);(\d+)H#', $this->ansi, $match): + $this->old_x = $this->x; + $this->old_y = $this->y; + $this->x = $match[2] - 1; + $this->y = $match[1] - 1; + break; + case preg_match('#\x1B\[(\d+)C#', $this->ansi, $match): + $this->old_x = $this->x; + $x = $match[1] - 1; + break; + case preg_match('#\x1B\[(\d+);(\d+)r#', $this->ansi, $match): // Set top and bottom lines of a window + break; + case preg_match('#\x1B\[(\d*(?:;\d*)*)m#', $this->ansi, $match): + $mods = explode(';', $match[1]); + foreach ($mods as $mod) { + switch ($mod) { + case 0: + $this->attrs[$this->y][$this->x] = ''; + + if ($this->bold) $this->attrs[$this->y][$this->x].= ''; + if ($this->underline) $this->attrs[$this->y][$this->x].= ''; + if ($this->blink) $this->attrs[$this->y][$this->x].= ''; + if ($this->color) $this->attrs[$this->y][$this->x].= ''; + + if ($this->reverse) { + $temp = $this->background; + $this->background = $this->foreground; + $this->foreground = $temp; + } + + $this->bold = $this->underline = $this->blink = $this->color = $this->reverse = false; + break; + case 1: + if (!$this->bold) { + $this->attrs[$this->y][$this->x] = ''; + $this->bold = true; + } + break; + case 4: + if (!$this->underline) { + $this->attrs[$this->y][$this->x] = ''; + $this->underline = true; + } + break; + case 5: + if (!$this->blink) { + $this->attrs[$this->y][$this->x] = ''; + $this->blink = true; + } + break; + case 7: + $this->reverse = !$this->reverse; + $temp = $this->background; + $this->background = $this->foreground; + $this->foreground = $temp; + $this->attrs[$this->y][$this->x] = ''; + if ($this->color) { + $this->attrs[$this->y][$this->x] = '' . $this->attrs[$this->y][$this->x]; + } + $this->color = true; + break; + default: + //$front = $this->reverse ? &$this->background : &$this->foreground; + $front = &$this->{ $this->reverse ? 'background' : 'foreground' }; + //$back = $this->reverse ? &$this->foreground : &$this->background; + $back = &$this->{ $this->reverse ? 'foreground' : 'background' }; + switch ($mod) { + case 30: $front = 'black'; break; + case 31: $front = 'red'; break; + case 32: $front = 'green'; break; + case 33: $front = 'yellow'; break; + case 34: $front = 'blue'; break; + case 35: $front = 'magenta'; break; + case 36: $front = 'cyan'; break; + case 37: $front = 'white'; break; + + case 40: $back = 'black'; break; + case 41: $back = 'red'; break; + case 42: $back = 'green'; break; + case 43: $back = 'yellow'; break; + case 44: $back = 'blue'; break; + case 45: $back = 'magenta'; break; + case 46: $back = 'cyan'; break; + case 47: $back = 'white'; break; + + default: + $this->_handle_error('Unsupported attribute: ' . $mod); + $this->ansi = ''; + break 2; + } + + unset($temp); + $this->attrs[$this->y][$this->x] = ''; + if ($this->color) { + $this->attrs[$this->y][$this->x] = '' . $this->attrs[$this->y][$this->x]; + } + $this->color = true; + } + } + break; + default: + echo "{$this->ansi} unsupported\r\n"; + } + } + $this->ansi = ''; + continue; + } + + switch ($source[$i]) { + case "\r": + $this->x = 0; + break; + case "\n": + //if ($this->y < $this->max_y) { + // $this->y++; + //} + + while ($this->y >= $this->max_y) { + $this->history = array_merge($this->history, array(array_shift($this->screen))); + $this->screen[] = ''; + + $this->history_attrs = array_merge($this->history_attrs, array(array_shift($this->attrs))); + $this->attrs[] = $this->attr_row; + + if (count($this->history) >= $this->max_history) { + array_shift($this->history); + array_shift($this->history_attrs); + } + + $this->y--; + } + $this->y++; + break; + case "\x0F": // shift + break; + case "\x1B": // start ANSI escape code + $this->ansi.= "\x1B"; + break; + default: + $this->screen[$this->y] = substr_replace( + $this->screen[$this->y], + $source[$i], + $this->x, + 1 + ); + + if ($this->x > $this->max_x) { + $this->x = 0; + $this->y++; + } else { + $this->x++; + } + } + } + } + + /** + * Returns the current screen without preformating + * + * @access private + * @return String + */ + function _getScreen() + { + $output = ''; + for ($i = 0; $i <= $this->max_y; $i++) { + for ($j = 0; $j <= $this->max_x + 1; $j++) { + if (isset($this->attrs[$i][$j])) { + $output.= $this->attrs[$i][$j]; + } + if (isset($this->screen[$i][$j])) { + $output.= htmlspecialchars($this->screen[$i][$j]); + } + } + $output.= "\r\n"; + } + return rtrim($output); + } + + /** + * Returns the current screen + * + * @access public + * @return String + */ + function getScreen() + { + return '
' . $this->_getScreen() . '
'; + } + + /** + * Returns the current screen and the x previous lines + * + * @access public + * @return String + */ + function getHistory() + { + $scrollback = ''; + for ($i = 0; $i < count($this->history); $i++) { + for ($j = 0; $j <= $this->max_x + 1; $j++) { + if (isset($this->history_attrs[$i][$j])) { + $scrollback.= $this->history_attrs[$i][$j]; + } + if (isset($this->history[$i][$j])) { + $scrollback.= htmlspecialchars($this->history[$i][$j]); + } + } + $scrollback.= "\r\n"; + } + $scrollback.= $this->_getScreen(); + + return '
' . $scrollback . '
'; + } + + /** + * Error Handler + * + * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. + * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. + * + * @param String $string + * @access private + */ + function _handle_error($err_msg) { + if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { + $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; + throw(new $class($err_msg)); + } else { + user_error($err_msg); + } + } +} diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/File/ASN1.php b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ASN1.php new file mode 100644 index 0000000000..201af9082d --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ASN1.php @@ -0,0 +1,1295 @@ + + * @copyright MMXII Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @version $Id$ + * @link http://phpseclib.sourceforge.net + */ + +/** + * Include Math_BigInteger + */ +if (!class_exists('Math_BigInteger')) { + require_once('Math/BigInteger.php'); +} + +/**#@+ + * Tag Classes + * + * @access private + * @link http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=12 + */ +define('FILE_ASN1_CLASS_UNIVERSAL', 0); +define('FILE_ASN1_CLASS_APPLICATION', 1); +define('FILE_ASN1_CLASS_CONTEXT_SPECIFIC', 2); +define('FILE_ASN1_CLASS_PRIVATE', 3); +/**#@-*/ + +/**#@+ + * Tag Classes + * + * @access private + * @link http://www.obj-sys.com/asn1tutorial/node124.html + */ +define('FILE_ASN1_TYPE_BOOLEAN', 1); +define('FILE_ASN1_TYPE_INTEGER', 2); +define('FILE_ASN1_TYPE_BIT_STRING', 3); +define('FILE_ASN1_TYPE_OCTET_STRING', 4); +define('FILE_ASN1_TYPE_NULL', 5); +define('FILE_ASN1_TYPE_OBJECT_IDENTIFIER',6); +//define('FILE_ASN1_TYPE_OBJECT_DESCRIPTOR',7); +//define('FILE_ASN1_TYPE_INSTANCE_OF', 8); // EXTERNAL +define('FILE_ASN1_TYPE_REAL', 9); +define('FILE_ASN1_TYPE_ENUMERATED', 10); +//define('FILE_ASN1_TYPE_EMBEDDED', 11); +define('FILE_ASN1_TYPE_UTF8_STRING', 12); +//define('FILE_ASN1_TYPE_RELATIVE_OID', 13); +define('FILE_ASN1_TYPE_SEQUENCE', 16); // SEQUENCE OF +define('FILE_ASN1_TYPE_SET', 17); // SET OF +/**#@-*/ +/**#@+ + * More Tag Classes + * + * @access private + * @link http://www.obj-sys.com/asn1tutorial/node10.html + */ +define('FILE_ASN1_TYPE_NUMERIC_STRING', 18); +define('FILE_ASN1_TYPE_PRINTABLE_STRING',19); +define('FILE_ASN1_TYPE_TELETEX_STRING', 20); // T61String +define('FILE_ASN1_TYPE_VIDEOTEX_STRING', 21); +define('FILE_ASN1_TYPE_IA5_STRING', 22); +define('FILE_ASN1_TYPE_UTC_TIME', 23); +define('FILE_ASN1_TYPE_GENERALIZED_TIME',24); +define('FILE_ASN1_TYPE_GRAPHIC_STRING', 25); +define('FILE_ASN1_TYPE_VISIBLE_STRING', 26); // ISO646String +define('FILE_ASN1_TYPE_GENERAL_STRING', 27); +define('FILE_ASN1_TYPE_UNIVERSAL_STRING',28); +//define('FILE_ASN1_TYPE_CHARACTER_STRING',29); +define('FILE_ASN1_TYPE_BMP_STRING', 30); +/**#@-*/ + +/**#@+ + * Tag Aliases + * + * These tags are kinda place holders for other tags. + * + * @access private + */ +define('FILE_ASN1_TYPE_CHOICE', -1); +define('FILE_ASN1_TYPE_ANY', -2); +/**#@-*/ + +/** + * ASN.1 Element + * + * Bypass normal encoding rules in File_ASN1::encodeDER() + * + * @author Jim Wigginton + * @version 0.3.0 + * @access public + * @package File_ASN1 + */ +class File_ASN1_Element { + /** + * Raw element value + * + * @var String + * @access private + */ + var $element; + + /** + * Constructor + * + * @param String $encoded + * @return File_ASN1_Element + * @access public + */ + function File_ASN1_Element($encoded) + { + $this->element = $encoded; + } +} + +/** + * Pure-PHP ASN.1 Parser + * + * @author Jim Wigginton + * @version 0.3.0 + * @access public + * @package File_ASN1 + */ +class File_ASN1 { + /** + * ASN.1 object identifier + * + * @var Array + * @access private + * @link http://en.wikipedia.org/wiki/Object_identifier + */ + var $oids = array(); + + /** + * Default date format + * + * @var String + * @access private + * @link http://php.net/class.datetime + */ + var $format = 'D, d M y H:i:s O'; + + /** + * Default date format + * + * @var Array + * @access private + * @see File_ASN1::setTimeFormat() + * @see File_ASN1::asn1map() + * @link http://php.net/class.datetime + */ + var $encoded; + + /** + * Filters + * + * If the mapping type is FILE_ASN1_TYPE_ANY what do we actually encode it as? + * + * @var Array + * @access private + * @see File_ASN1::_encode_der() + */ + var $filters; + + /** + * Type mapping table for the ANY type. + * + * Structured or unknown types are mapped to a FILE_ASN1_Element. + * Unambiguous types get the direct mapping (int/real/bool). + * Others are mapped as a choice, with an extra indexing level. + * + * @var Array + * @access public + */ + var $ANYmap = array( + FILE_ASN1_TYPE_BOOLEAN => true, + FILE_ASN1_TYPE_INTEGER => true, + FILE_ASN1_TYPE_BIT_STRING => 'bitString', + FILE_ASN1_TYPE_OCTET_STRING => 'octetString', + FILE_ASN1_TYPE_NULL => 'null', + FILE_ASN1_TYPE_OBJECT_IDENTIFIER => 'objectIdentifier', + FILE_ASN1_TYPE_REAL => true, + FILE_ASN1_TYPE_ENUMERATED => 'enumerated', + FILE_ASN1_TYPE_UTF8_STRING => 'utf8String', + FILE_ASN1_TYPE_NUMERIC_STRING => 'numericString', + FILE_ASN1_TYPE_PRINTABLE_STRING => 'printableString', + FILE_ASN1_TYPE_TELETEX_STRING => 'teletexString', + FILE_ASN1_TYPE_VIDEOTEX_STRING => 'videotexString', + FILE_ASN1_TYPE_IA5_STRING => 'ia5String', + FILE_ASN1_TYPE_UTC_TIME => 'utcTime', + FILE_ASN1_TYPE_GENERALIZED_TIME => 'generalTime', + FILE_ASN1_TYPE_GRAPHIC_STRING => 'graphicString', + FILE_ASN1_TYPE_VISIBLE_STRING => 'visibleString', + FILE_ASN1_TYPE_GENERAL_STRING => 'generalString', + FILE_ASN1_TYPE_UNIVERSAL_STRING => 'universalString', + //FILE_ASN1_TYPE_CHARACTER_STRING => 'characterString', + FILE_ASN1_TYPE_BMP_STRING => 'bmpString' + ); + + /** + * String type to character size mapping table. + * + * Non-convertable types are absent from this table. + * size == 0 indicates variable length encoding. + * + * @var Array + * @access public + */ + var $stringTypeSize = array( + FILE_ASN1_TYPE_UTF8_STRING => 0, + FILE_ASN1_TYPE_BMP_STRING => 2, + FILE_ASN1_TYPE_UNIVERSAL_STRING => 4, + FILE_ASN1_TYPE_PRINTABLE_STRING => 1, + FILE_ASN1_TYPE_TELETEX_STRING => 1, + FILE_ASN1_TYPE_IA5_STRING => 1, + FILE_ASN1_TYPE_VISIBLE_STRING => 1, + ); + + /** + * Parse BER-encoding + * + * Serves a similar purpose to openssl's asn1parse + * + * @param String $encoded + * @return Array + * @access public + */ + function decodeBER($encoded) + { + if (is_object($encoded) && strtolower(get_class($encoded)) == 'file_asn1_element') { + $encoded = $encoded->element; + } + + $this->encoded = $encoded; + return $this->_decode_ber($encoded); + } + + /** + * Parse BER-encoding (Helper function) + * + * Sometimes we want to get the BER encoding of a particular tag. $start lets us do that without having to reencode. + * $encoded is passed by reference for the recursive calls done for FILE_ASN1_TYPE_BIT_STRING and + * FILE_ASN1_TYPE_OCTET_STRING. In those cases, the indefinite length is used. + * + * @param String $encoded + * @param Integer $start + * @return Array + * @access private + */ + function _decode_ber(&$encoded, $start = 0) + { + $decoded = array(); + + while ( strlen($encoded) ) { + $current = array('start' => $start); + + $type = ord($this->_string_shift($encoded)); + $start++; + + $constructed = ($type >> 5) & 1; + + $tag = $type & 0x1F; + if ($tag == 0x1F) { + $tag = 0; + // process septets (since the eighth bit is ignored, it's not an octet) + do { + $loop = ord($encoded[0]) >> 7; + $tag <<= 7; + $tag |= ord($this->_string_shift($encoded)) & 0x7F; + $start++; + } while ( $loop ); + } + + // Length, as discussed in 8.1.3 of X.690-0207.pdf#page=13 + $length = ord($this->_string_shift($encoded)); + $start++; + if ( $length == 0x80 ) { // indefinite length + // "[A sender shall] use the indefinite form (see 8.1.3.6) if the encoding is constructed and is not all + // immediately available." -- 8.1.3.2.c + //if ( !$constructed ) { + // return false; + //} + $length = strlen($encoded); + } elseif ( $length & 0x80 ) { // definite length, long form + // technically, the long form of the length can be represented by up to 126 octets (bytes), but we'll only + // support it up to four. + $length&= 0x7F; + $temp = $this->_string_shift($encoded, $length); + $start+= $length; + extract(unpack('Nlength', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4))); + } + + // End-of-content, see 8.1.1.3, 8.1.3.2, 8.1.3.6, 8.1.5, and (for an example) 8.6.4.2 + if (!$type && !$length) { + return $decoded; + } + $content = $this->_string_shift($encoded, $length); + + /* Class is UNIVERSAL, APPLICATION, PRIVATE, or CONTEXT-SPECIFIC. The UNIVERSAL class is restricted to the ASN.1 + built-in types. It defines an application-independent data type that must be distinguishable from all other + data types. The other three classes are user defined. The APPLICATION class distinguishes data types that + have a wide, scattered use within a particular presentation context. PRIVATE distinguishes data types within + a particular organization or country. CONTEXT-SPECIFIC distinguishes members of a sequence or set, the + alternatives of a CHOICE, or universally tagged set members. Only the class number appears in braces for this + data type; the term CONTEXT-SPECIFIC does not appear. + + -- http://www.obj-sys.com/asn1tutorial/node12.html */ + $class = ($type >> 6) & 3; + switch ($class) { + case FILE_ASN1_CLASS_APPLICATION: + case FILE_ASN1_CLASS_PRIVATE: + case FILE_ASN1_CLASS_CONTEXT_SPECIFIC: + $decoded[] = array( + 'type' => $class, + 'constant' => $tag, + 'content' => $constructed ? $this->_decode_ber($content, $start) : $content, + 'length' => $length + $start - $current['start'] + ) + $current; + continue 2; + } + + $current+= array('type' => $tag); + + // decode UNIVERSAL tags + switch ($tag) { + case FILE_ASN1_TYPE_BOOLEAN: + // "The contents octets shall consist of a single octet." -- 8.2.1 + //if (strlen($content) != 1) { + // return false; + //} + $current['content'] = (bool) ord($content[0]); + break; + case FILE_ASN1_TYPE_INTEGER: + case FILE_ASN1_TYPE_ENUMERATED: + $current['content'] = new Math_BigInteger($content, -256); + break; + case FILE_ASN1_TYPE_REAL: // not currently supported + return false; + case FILE_ASN1_TYPE_BIT_STRING: + // The initial octet shall encode, as an unsigned binary integer with bit 1 as the least significant bit, + // the number of unused bits in the final subsequent octet. The number shall be in the range zero to + // seven. + if (!$constructed) { + $current['content'] = $content; + } else { + $temp = $this->_decode_ber($content, $start); + $length-= strlen($content); + $last = count($temp) - 1; + for ($i = 0; $i < $last; $i++) { + // all subtags should be bit strings + //if ($temp[$i]['type'] != FILE_ASN1_TYPE_BIT_STRING) { + // return false; + //} + $current['content'].= substr($temp[$i]['content'], 1); + } + // all subtags should be bit strings + //if ($temp[$last]['type'] != FILE_ASN1_TYPE_BIT_STRING) { + // return false; + //} + $current['content'] = $temp[$last]['content'][0] . $current['content'] . substr($temp[$i]['content'], 1); + } + break; + case FILE_ASN1_TYPE_OCTET_STRING: + if (!$constructed) { + $current['content'] = $content; + } else { + $temp = $this->_decode_ber($content, $start); + $length-= strlen($content); + for ($i = 0, $size = count($temp); $i < $size; $i++) { + // all subtags should be octet strings + //if ($temp[$i]['type'] != FILE_ASN1_TYPE_OCTET_STRING) { + // return false; + //} + $current['content'].= $temp[$i]['content']; + } + // $length = + } + break; + case FILE_ASN1_TYPE_NULL: + // "The contents octets shall not contain any octets." -- 8.8.2 + //if (strlen($content)) { + // return false; + //} + break; + case FILE_ASN1_TYPE_SEQUENCE: + case FILE_ASN1_TYPE_SET: + $current['content'] = $this->_decode_ber($content, $start); + break; + case FILE_ASN1_TYPE_OBJECT_IDENTIFIER: + $temp = ord($this->_string_shift($content)); + $current['content'] = sprintf('%d.%d', floor($temp / 40), $temp % 40); + $valuen = 0; + // process septets + while (strlen($content)) { + $temp = ord($this->_string_shift($content)); + $valuen <<= 7; + $valuen |= $temp & 0x7F; + if (~$temp & 0x80) { + $current['content'].= ".$valuen"; + $valuen = 0; + } + } + // the eighth bit of the last byte should not be 1 + //if ($temp >> 7) { + // return false; + //} + break; + /* Each character string type shall be encoded as if it had been declared: + [UNIVERSAL x] IMPLICIT OCTET STRING + + -- X.690-0207.pdf#page=23 ( 8.21.3) + + Per that, we're not going to do any validation. If there are any illegal characters in the string, + we don't really care */ + case FILE_ASN1_TYPE_NUMERIC_STRING: + // 0,1,2,3,4,5,6,7,8,9, and space + case FILE_ASN1_TYPE_PRINTABLE_STRING: + // Upper and lower case letters, digits, space, apostrophe, left/right parenthesis, plus sign, comma, + // hyphen, full stop, solidus, colon, equal sign, question mark + case FILE_ASN1_TYPE_TELETEX_STRING: + // The Teletex character set in CCITT's T61, space, and delete + // see http://en.wikipedia.org/wiki/Teletex#Character_sets + case FILE_ASN1_TYPE_VIDEOTEX_STRING: + // The Videotex character set in CCITT's T.100 and T.101, space, and delete + case FILE_ASN1_TYPE_VISIBLE_STRING: + // Printing character sets of international ASCII, and space + case FILE_ASN1_TYPE_IA5_STRING: + // International Alphabet 5 (International ASCII) + case FILE_ASN1_TYPE_GRAPHIC_STRING: + // All registered G sets, and space + case FILE_ASN1_TYPE_GENERAL_STRING: + // All registered C and G sets, space and delete + case FILE_ASN1_TYPE_UTF8_STRING: + // ???? + case FILE_ASN1_TYPE_BMP_STRING: + $current['content'] = $content; + break; + case FILE_ASN1_TYPE_UTC_TIME: + case FILE_ASN1_TYPE_GENERALIZED_TIME: + $current['content'] = $this->_decodeTime($content, $tag); + default: + + } + + $start+= $length; + $decoded[] = $current + array('length' => $start - $current['start']); + } + + return $decoded; + } + + /** + * ASN.1 Decode + * + * Provides an ASN.1 semantic mapping ($mapping) from a parsed BER-encoding to a human readable format. + * + * @param Array $decoded + * @param Array $mapping + * @return Array + * @access public + */ + function asn1map($decoded, $mapping) + { + if (isset($mapping['explicit'])) { + $decoded = $decoded['content'][0]; + } + + switch (true) { + case $mapping['type'] == FILE_ASN1_TYPE_ANY: + $intype = $decoded['type']; + if (isset($decoded['constant']) || !isset($this->ANYmap[$intype]) || ($this->encoded[$decoded['start']] & 0x20)) { + return new File_ASN1_Element(substr($this->encoded, $decoded['start'], $decoded['length'])); + } + $inmap = $this->ANYmap[$intype]; + if (is_string($inmap)) { + return array($inmap => $this->asn1map($decoded, array('type' => $intype) + $mapping)); + } + break; + case $mapping['type'] == FILE_ASN1_TYPE_CHOICE: + foreach ($mapping['children'] as $key => $option) { + switch (true) { + case isset($option['constant']) && $option['constant'] == $decoded['constant']: + case !isset($option['constant']) && $option['type'] == $decoded['type']: + $value = $this->asn1map($decoded, $option); + break; + case !isset($option['constant']) && $option['type'] == FILE_ASN1_TYPE_CHOICE: + $v = $this->asn1map($decoded, $option); + if (isset($v)) { + $value = $v; + } + } + if (isset($value)) { + return array($key => $value); + } + } + return NULL; + case isset($mapping['implicit']): + case isset($mapping['explicit']): + case $decoded['type'] == $mapping['type']: + break; + default: + return NULL; + } + + if (isset($mapping['implicit'])) { + $decoded['type'] = $mapping['type']; + } + + switch ($decoded['type']) { + case FILE_ASN1_TYPE_SEQUENCE: + $map = array(); + + // ignore the min and max + if (isset($mapping['min']) && isset($mapping['max'])) { + $child = $mapping['children']; + foreach ($decoded['content'] as $content) { + if (($map[] = $this->asn1map($content, $child)) === NULL) { + return NULL; + } + } + + return $map; + } + + $n = count($decoded['content']); + $i = 0; + + foreach ($mapping['children'] as $key => $child) { + $maymatch = $i < $n; // Match only existing input. + if ($maymatch) { + $temp = $decoded['content'][$i]; + + if ($child['type'] != FILE_ASN1_TYPE_CHOICE) { + // Get the mapping and input class & constant. + $childClass = $tempClass = FILE_ASN1_CLASS_UNIVERSAL; + $constant = NULL; + if (isset($temp['constant'])) { + $tempClass = isset($temp['class']) ? $temp['class'] : FILE_ASN1_CLASS_CONTEXT_SPECIFIC; + } + if (isset($child['class'])) { + $childClass = $child['class']; + $constant = $child['cast']; + } + elseif (isset($child['constant'])) { + $childClass = FILE_ASN1_CLASS_CONTEXT_SPECIFIC; + $constant = $child['constant']; + } + + if (isset($constant) && isset($temp['constant'])) { + // Can only match if constants and class match. + $maymatch = $constant == $temp['constant'] && $childClass == $tempClass; + } else { + // Can only match if no constant expected and type matches or is generic. + $maymatch = !isset($child['constant']) && array_search($child['type'], array($temp['type'], FILE_ASN1_TYPE_ANY, FILE_ASN1_TYPE_CHOICE)) !== false; + } + } + } + + if ($maymatch) { + // Attempt submapping. + $candidate = $this->asn1map($temp, $child); + $maymatch = $candidate !== NULL; + } + + if ($maymatch) { + // Got the match: use it. + $map[$key] = $candidate; + $i++; + } elseif (isset($child['default'])) { + $map[$key] = $child['default']; // Use default. + } elseif (!isset($child['optional'])) { + return NULL; // Syntax error. + } + } + + // Fail mapping if all input items have not been consumed. + return $i < $n? NULL: $map; + + // the main diff between sets and sequences is the encapsulation of the foreach in another for loop + case FILE_ASN1_TYPE_SET: + $map = array(); + + // ignore the min and max + if (isset($mapping['min']) && isset($mapping['max'])) { + $child = $mapping['children']; + foreach ($decoded['content'] as $content) { + if (($map[] = $this->asn1map($content, $child)) === NULL) { + return NULL; + } + } + + return $map; + } + + for ($i = 0; $i < count($decoded['content']); $i++) { + $temp = $decoded['content'][$i]; + $tempClass = FILE_ASN1_CLASS_UNIVERSAL; + if (isset($temp['constant'])) { + $tempClass = isset($temp['class']) ? $temp['class'] : FILE_ASN1_CLASS_CONTEXT_SPECIFIC; + } + + foreach ($mapping['children'] as $key => $child) { + if (isset($map[$key])) { + continue; + } + $maymatch = true; + if ($child['type'] != FILE_ASN1_TYPE_CHOICE) { + $childClass = FILE_ASN1_CLASS_UNIVERSAL; + $constant = NULL; + if (isset($child['class'])) { + $childClass = $child['class']; + $constant = $child['cast']; + } + elseif (isset($child['constant'])) { + $childClass = FILE_ASN1_CLASS_CONTEXT_SPECIFIC; + $constant = $child['constant']; + } + + if (isset($constant) && isset($temp['constant'])) { + // Can only match if constants and class match. + $maymatch = $constant == $temp['constant'] && $childClass == $tempClass; + } else { + // Can only match if no constant expected and type matches or is generic. + $maymatch = !isset($child['constant']) && array_search($child['type'], array($temp['type'], FILE_ASN1_TYPE_ANY, FILE_ASN1_TYPE_CHOICE)) !== false; + } + } + + if ($maymatch) { + // Attempt submapping. + $candidate = $this->asn1map($temp, $child); + $maymatch = $candidate !== NULL; + } + + if (!$maymatch) { + break; + } + + // Got the match: use it. + $map[$key] = $candidate; + break; + } + } + + foreach ($mapping['children'] as $key => $child) { + if (!isset($map[$key])) { + if (isset($child['default'])) { + $map[$key] = $child['default']; + } elseif (!isset($child['optional'])) { + return NULL; + } + } + } + return $map; + case FILE_ASN1_TYPE_OBJECT_IDENTIFIER: + return isset($this->oids[$decoded['content']]) ? $this->oids[$decoded['content']] : $decoded['content']; + case FILE_ASN1_TYPE_UTC_TIME: + case FILE_ASN1_TYPE_GENERALIZED_TIME: + if (isset($mapping['implicit'])) { + $decoded['content'] = $this->_decodeTime($decoded['content'], $decoded['type']); + } + return @date($this->format, $decoded['content']); + case FILE_ASN1_TYPE_BIT_STRING: + if (isset($mapping['mapping'])) { + $offset = ord($decoded['content'][0]); + $size = (strlen($decoded['content']) - 1) * 8 - $offset; + /* + From X.680-0207.pdf#page=46 (21.7): + + "When a "NamedBitList" is used in defining a bitstring type ASN.1 encoding rules are free to add (or remove) + arbitrarily any trailing 0 bits to (or from) values that are being encoded or decoded. Application designers should + therefore ensure that different semantics are not associated with such values which differ only in the number of trailing + 0 bits." + */ + $bits = count($mapping['mapping']) == $size ? array() : array_fill(0, count($mapping['mapping']) - $size, false); + for ($i = strlen($decoded['content']) - 1; $i > 0; $i--) { + $current = ord($decoded['content'][$i]); + for ($j = $offset; $j < 8; $j++) { + $bits[] = (bool) ($current & (1 << $j)); + } + $offset = 0; + } + $values = array(); + $map = array_reverse($mapping['mapping']); + foreach ($map as $i => $value) { + if ($bits[$i]) { + $values[] = $value; + } + } + return $values; + } + case FILE_ASN1_TYPE_OCTET_STRING: + return base64_encode($decoded['content']); + case FILE_ASN1_TYPE_NULL: + return ''; + case FILE_ASN1_TYPE_BOOLEAN: + return $decoded['content']; + case FILE_ASN1_TYPE_NUMERIC_STRING: + case FILE_ASN1_TYPE_PRINTABLE_STRING: + case FILE_ASN1_TYPE_TELETEX_STRING: + case FILE_ASN1_TYPE_VIDEOTEX_STRING: + case FILE_ASN1_TYPE_IA5_STRING: + case FILE_ASN1_TYPE_GRAPHIC_STRING: + case FILE_ASN1_TYPE_VISIBLE_STRING: + case FILE_ASN1_TYPE_GENERAL_STRING: + case FILE_ASN1_TYPE_UNIVERSAL_STRING: + case FILE_ASN1_TYPE_UTF8_STRING: + case FILE_ASN1_TYPE_BMP_STRING: + return $decoded['content']; + case FILE_ASN1_TYPE_INTEGER: + case FILE_ASN1_TYPE_ENUMERATED: + $temp = $decoded['content']; + if (isset($mapping['implicit'])) { + $temp = new Math_BigInteger($decoded['content'], -256); + } + if (isset($mapping['mapping'])) { + $temp = (int) $temp->toString(); + return isset($mapping['mapping'][$temp]) ? + $mapping['mapping'][$temp] : + false; + } + return $temp; + } + } + + /** + * ASN.1 Encode + * + * DER-encodes an ASN.1 semantic mapping ($mapping). Some libraries would probably call this function + * an ASN.1 compiler. + * + * @param String $source + * @param String $mapping + * @param Integer $idx + * @return String + * @access public + */ + function encodeDER($source, $mapping) + { + $this->location = array(); + return $this->_encode_der($source, $mapping); + } + + /** + * ASN.1 Encode (Helper function) + * + * @param String $source + * @param String $mapping + * @param Integer $idx + * @return String + * @access private + */ + function _encode_der($source, $mapping, $idx = NULL) + { + if (is_object($source) && strtolower(get_class($source)) == 'file_asn1_element') { + return $source->element; + } + + // do not encode (implicitly optional) fields with value set to default + if (isset($mapping['default']) && $source === $mapping['default']) { + return ''; + } + + if (isset($idx)) { + $this->location[] = $idx; + } + + $tag = $mapping['type']; + + switch ($tag) { + case FILE_ASN1_TYPE_SET: // Children order is not important, thus process in sequence. + case FILE_ASN1_TYPE_SEQUENCE: + $tag|= 0x20; // set the constructed bit + $value = ''; + + // ignore the min and max + if (isset($mapping['min']) && isset($mapping['max'])) { + $child = $mapping['children']; + + foreach ($source as $content) { + $temp = $this->_encode_der($content, $child); + if ($temp === false) { + return false; + } + $value.= $temp; + } + break; + } + + foreach ($mapping['children'] as $key => $child) { + if (!isset($source[$key])) { + if (!isset($child['optional'])) { + return false; + } + continue; + } + + $temp = $this->_encode_der($source[$key], $child, $key); + if ($temp === false) { + return false; + } + + // An empty child encoding means it has been optimized out. + // Else we should have at least one tag byte. + if ($temp === '') { + continue; + } + + // if isset($child['constant']) is true then isset($child['optional']) should be true as well + if (isset($child['constant'])) { + /* + From X.680-0207.pdf#page=58 (30.6): + + "The tagging construction specifies explicit tagging if any of the following holds: + ... + c) the "Tag Type" alternative is used and the value of "TagDefault" for the module is IMPLICIT TAGS or + AUTOMATIC TAGS, but the type defined by "Type" is an untagged choice type, an untagged open type, or + an untagged "DummyReference" (see ITU-T Rec. X.683 | ISO/IEC 8824-4, 8.3)." + */ + if (isset($child['explicit']) || $child['type'] == FILE_ASN1_TYPE_CHOICE) { + $subtag = chr((FILE_ASN1_CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | $child['constant']); + $temp = $subtag . $this->_encodeLength(strlen($temp)) . $temp; + } else { + $subtag = chr((FILE_ASN1_CLASS_CONTEXT_SPECIFIC << 6) | (ord($temp[0]) & 0x20) | $child['constant']); + $temp = $subtag . substr($temp, 1); + } + } + $value.= $temp; + } + break; + case FILE_ASN1_TYPE_CHOICE: + $temp = false; + + foreach ($mapping['children'] as $key => $child) { + if (!isset($source[$key])) { + continue; + } + + $temp = $this->_encode_der($source[$key], $child, $key); + if ($temp === false) { + return false; + } + + // An empty child encoding means it has been optimized out. + // Else we should have at least one tag byte. + if ($temp === '') { + continue; + } + + $tag = ord($temp[0]); + + // if isset($child['constant']) is true then isset($child['optional']) should be true as well + if (isset($child['constant'])) { + if (isset($child['explicit']) || $child['type'] == FILE_ASN1_TYPE_CHOICE) { + $subtag = chr((FILE_ASN1_CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | $child['constant']); + $temp = $subtag . $this->_encodeLength(strlen($temp)) . $temp; + } else { + $subtag = chr((FILE_ASN1_CLASS_CONTEXT_SPECIFIC << 6) | (ord($temp[0]) & 0x20) | $child['constant']); + $temp = $subtag . substr($temp, 1); + } + } + } + + if (isset($idx)) { + array_pop($this->location); + } + + if ($temp && isset($mapping['cast'])) { + $temp[0] = chr(($mapping['class'] << 6) | ($tag & 0x20) | $mapping['cast']); + } + + return $temp; + case FILE_ASN1_TYPE_INTEGER: + case FILE_ASN1_TYPE_ENUMERATED: + if (!isset($mapping['mapping'])) { + $value = $source->toBytes(true); + } else { + $value = array_search($source, $mapping['mapping']); + if ($value === false) { + return false; + } + $value = new Math_BigInteger($value); + $value = $value->toBytes(true); + } + break; + case FILE_ASN1_TYPE_UTC_TIME: + case FILE_ASN1_TYPE_GENERALIZED_TIME: + $format = $mapping['type'] == FILE_ASN1_TYPE_UTC_TIME ? 'y' : 'Y'; + $format.= 'mdHis'; + $value = @gmdate($format, strtotime($source)) . 'Z'; + break; + case FILE_ASN1_TYPE_BIT_STRING: + if (isset($mapping['mapping'])) { + $bits = array_fill(0, count($mapping['mapping']), 0); + $size = 0; + for ($i = 0; $i < count($mapping['mapping']); $i++) { + if (in_array($mapping['mapping'][$i], $source)) { + $bits[$i] = 1; + $size = $i; + } + } + + $offset = 8 - (($size + 1) & 7); + $offset = $offset !== 8 ? $offset : 0; + + $value = chr($offset); + + for ($i = $size + 1; $i < count($mapping['mapping']); $i++) { + unset($bits[$i]); + } + + $bits = implode('', array_pad($bits, $size + $offset + 1, 0)); + $bytes = explode(' ', rtrim(chunk_split($bits, 8, ' '))); + foreach ($bytes as $byte) { + $value.= chr(bindec($byte)); + } + + break; + } + case FILE_ASN1_TYPE_OCTET_STRING: + /* The initial octet shall encode, as an unsigned binary integer with bit 1 as the least significant bit, + the number of unused bits in the final subsequent octet. The number shall be in the range zero to seven. + + -- http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=16 */ + $value = base64_decode($source); + break; + case FILE_ASN1_TYPE_OBJECT_IDENTIFIER: + $oid = preg_match('#(?:\d+\.)+#', $source) ? $source : array_search($source, $this->oids); + if ($oid === false) { + $this->_handle_error('Invalid OID'); + return false; + } + $value = ''; + $parts = explode('.', $oid); + $value = chr(40 * $parts[0] + $parts[1]); + for ($i = 2; $i < count($parts); $i++) { + $temp = ''; + if (!$parts[$i]) { + $temp = "\0"; + } else { + while ($parts[$i]) { + $temp = chr(0x80 | ($parts[$i] & 0x7F)) . $temp; + $parts[$i] >>= 7; + } + $temp[strlen($temp) - 1] = $temp[strlen($temp) - 1] & chr(0x7F); + } + $value.= $temp; + } + break; + case FILE_ASN1_TYPE_ANY: + $loc = $this->location; + if (isset($idx)) { + array_pop($this->location); + } + + switch (true) { + case !isset($source): + return $this->_encode_der(NULL, array('type' => FILE_ASN1_TYPE_NULL) + $mapping); + case is_int($source): + case is_object($source) && strtolower(get_class($source)) == 'math_biginteger': + return $this->_encode_der($source, array('type' => FILE_ASN1_TYPE_INTEGER) + $mapping); + case is_float($source): + return $this->_encode_der($source, array('type' => FILE_ASN1_TYPE_REAL) + $mapping); + case is_bool($source): + return $this->_encode_der($source, array('type' => FILE_ASN1_TYPE_BOOLEAN) + $mapping); + case is_array($source) && count($source) == 1: + $typename = implode('', array_keys($source)); + $outtype = array_search($typename, $this->ANYmap, true); + if ($outtype !== false) { + return $this->_encode_der($source[$typename], array('type' => $outtype) + $mapping); + } + } + + $filters = $this->filters; + foreach ($loc as $part) { + if (!isset($filters[$part])) { + $filters = false; + break; + } + $filters = $filters[$part]; + } + if ($filters === false) { + $this->_handle_error('No filters defined for ' . implode('/', $loc)); + return false; + } + return $this->_encode_der($source, $filters + $mapping); + case FILE_ASN1_TYPE_NULL: + $value = ''; + break; + case FILE_ASN1_TYPE_NUMERIC_STRING: + case FILE_ASN1_TYPE_TELETEX_STRING: + case FILE_ASN1_TYPE_PRINTABLE_STRING: + case FILE_ASN1_TYPE_UNIVERSAL_STRING: + case FILE_ASN1_TYPE_UTF8_STRING: + case FILE_ASN1_TYPE_BMP_STRING: + case FILE_ASN1_TYPE_IA5_STRING: + case FILE_ASN1_TYPE_VISIBLE_STRING: + case FILE_ASN1_TYPE_VIDEOTEX_STRING: + case FILE_ASN1_TYPE_GRAPHIC_STRING: + case FILE_ASN1_TYPE_GENERAL_STRING: + $value = $source; + break; + case FILE_ASN1_TYPE_BOOLEAN: + $value = $source ? "\xFF" : "\x00"; + break; + default: + $this->_handle_error('Mapping provides no type definition for ' . implode('/', $this->location)); + return false; + } + + if (isset($idx)) { + array_pop($this->location); + } + + if (isset($mapping['cast'])) { + $tag = ($mapping['class'] << 6) | ($tag & 0x20) | $mapping['cast']; + } + + return chr($tag) . $this->_encodeLength(strlen($value)) . $value; + } + + /** + * DER-encode the length + * + * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See + * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 8.1.3} for more information. + * + * @access private + * @param Integer $length + * @return String + */ + function _encodeLength($length) + { + if ($length <= 0x7F) { + return chr($length); + } + + $temp = ltrim(pack('N', $length), chr(0)); + return pack('Ca*', 0x80 | strlen($temp), $temp); + } + + /** + * BER-decode the time + * + * Called by _decode_ber() and in the case of implicit tags asn1map(). + * + * @access private + * @param String $content + * @param Integer $tag + * @return String + */ + function _decodeTime($content, $tag) + { + /* UTCTime: + http://tools.ietf.org/html/rfc5280#section-4.1.2.5.1 + http://www.obj-sys.com/asn1tutorial/node15.html + + GeneralizedTime: + http://tools.ietf.org/html/rfc5280#section-4.1.2.5.2 + http://www.obj-sys.com/asn1tutorial/node14.html */ + + $pattern = $tag == FILE_ASN1_TYPE_UTC_TIME ? + '#(..)(..)(..)(..)(..)(..)(.*)#' : + '#(....)(..)(..)(..)(..)(..).*([Z+-].*)$#'; + + preg_match($pattern, $content, $matches); + + list(, $year, $month, $day, $hour, $minute, $second, $timezone) = $matches; + + if ($tag == FILE_ASN1_TYPE_UTC_TIME) { + $year = $year >= 50 ? "19$year" : "20$year"; + } + + if ($timezone == 'Z') { + $mktime = 'gmmktime'; + $timezone = 0; + } elseif (preg_match('#([+-])(\d\d)(\d\d)#', $timezone, $matches)) { + $mktime = 'gmmktime'; + $timezone = 60 * $matches[3] + 3600 * $matches[2]; + if ($matches[1] == '-') { + $timezone = -$timezone; + } + } else { + $mktime = 'mktime'; + $timezone = 0; + } + + return @$mktime($hour, $minute, $second, $month, $day, $year) + $timezone; + } + + /** + * Set the time format + * + * Sets the time / date format for asn1map(). + * + * @access public + * @param String $format + */ + function setTimeFormat($format) + { + $this->format = $format; + } + + /** + * Load OIDs + * + * Load the relevant OIDs for a particular ASN.1 semantic mapping. + * + * @access public + * @param Array $oids + */ + function loadOIDs($oids) + { + $this->oids = $oids; + } + + /** + * Load filters + * + * See File_X509, etc, for an example. + * + * @access public + * @param Array $filters + */ + function loadFilters($filters) + { + $this->filters = $filters; + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param String $string + * @param optional Integer $index + * @return String + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } + + /** + * String type conversion + * + * This is a lazy conversion, dealing only with character size. + * No real conversion table is used. + * + * @param String $in + * @param optional Integer $from + * @param optional Integer $to + * @return String + * @access public + */ + function convert($in, $from = FILE_ASN1_TYPE_UTF8_STRING, $to = FILE_ASN1_TYPE_UTF8_STRING) + { + if (!isset($this->stringTypeSize[$from]) || !isset($this->stringTypeSize[$to])) { + return false; + } + $insize = $this->stringTypeSize[$from]; + $outsize = $this->stringTypeSize[$to]; + $inlength = strlen($in); + $out = ''; + + for ($i = 0; $i < $inlength;) { + if ($inlength - $i < $insize) { + return false; + } + + // Get an input character as a 32-bit value. + $c = ord($in[$i++]); + switch (true) { + case $insize == 4: + $c = ($c << 8) | ord($in[$i++]); + $c = ($c << 8) | ord($in[$i++]); + case $insize == 2: + $c = ($c << 8) | ord($in[$i++]); + case $insize == 1: + break; + case ($c & 0x80) == 0x00: + break; + case ($c & 0x40) == 0x00: + return false; + default: + $bit = 6; + do { + if ($bit > 25 || $i >= $inlength || (ord($in[$i]) & 0xC0) != 0x80) { + return false; + } + $c = ($c << 6) | (ord($in[$i++]) & 0x3F); + $bit += 5; + $mask = 1 << $bit; + } while ($c & $bit); + $c &= $mask - 1; + break; + } + + // Convert and append the character to output string. + $v = ''; + switch (true) { + case $outsize == 4: + $v .= chr($c & 0xFF); + $c >>= 8; + $v .= chr($c & 0xFF); + $c >>= 8; + case $outsize == 2: + $v .= chr($c & 0xFF); + $c >>= 8; + case $outsize == 1: + $v .= chr($c & 0xFF); + $c >>= 8; + if ($c) { + return false; + } + break; + case ($c & 0x80000000) != 0: + return false; + case $c >= 0x04000000: + $v .= chr(0x80 | ($c & 0x3F)); + $c = ($c >> 6) | 0x04000000; + case $c >= 0x00200000: + $v .= chr(0x80 | ($c & 0x3F)); + $c = ($c >> 6) | 0x00200000; + case $c >= 0x00010000: + $v .= chr(0x80 | ($c & 0x3F)); + $c = ($c >> 6) | 0x00010000; + case $c >= 0x00000800: + $v .= chr(0x80 | ($c & 0x3F)); + $c = ($c >> 6) | 0x00000800; + case $c >= 0x00000080: + $v .= chr(0x80 | ($c & 0x3F)); + $c = ($c >> 6) | 0x000000C0; + default: + $v .= chr($c); + break; + } + $out .= strrev($v); + } + return $out; + } + + /** + * Error Handler + * + * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. + * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. + * + * @param String $string + * @access private + */ + function _handle_error($err_msg) { + if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { + $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; + throw(new $class($err_msg)); + } else { + user_error($err_msg); + } + } +} diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/File/X509.php b/apps/files_external/3rdparty/phpseclib/phpseclib/File/X509.php new file mode 100644 index 0000000000..9b19b59514 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/File/X509.php @@ -0,0 +1,4341 @@ + + * @copyright MMXII Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @version $Id$ + * @link htp://phpseclib.sourceforge.net + */ + +/** + * Include File_ASN1 + */ +if (!class_exists('File_ASN1')) { + require_once('File/ASN1.php'); +} + +/** + * Flag to only accept signatures signed by certificate authorities + * + * @access public + * @see File_X509::validateSignature() + */ +define('FILE_X509_VALIDATE_SIGNATURE_BY_CA', 1); + +/**#@+ + * @access public + * @see File_X509::getDN() + */ +/** + * Return internal array representation + */ +define('FILE_X509_DN_ARRAY', 0); +/** + * Return string + */ +define('FILE_X509_DN_STRING', 1); +/** + * Return ASN.1 name string + */ +define('FILE_X509_DN_ASN1', 2); +/** + * Return OpenSSL compatible array + */ +define('FILE_X509_DN_OPENSSL', 3); +/** + * Return canonical ASN.1 RDNs string + */ +define('FILE_X509_DN_CANON', 4); +/** + * Return name hash for file indexing + */ +define('FILE_X509_DN_HASH', 5); +/**#@-*/ + +/**#@+ + * @access public + * @see File_X509::saveX509() + * @see File_X509::saveCSR() + * @see File_X509::saveCRL() + */ +/** + * Save as PEM + * + * ie. a base64-encoded PEM with a header and a footer + */ +define('FILE_X509_FORMAT_PEM', 0); +/** + * Save as DER + */ +define('FILE_X509_FORMAT_DER', 1); +/** + * Save as a SPKAC + * + * Only works on CSRs. Not currently supported. + */ +define('FILE_X509_FORMAT_SPKAC', 2); +/**#@-*/ + +/** + * Attribute value disposition. + * If disposition is >= 0, this is the index of the target value. + */ +define('FILE_X509_ATTR_ALL', -1); // All attribute values (array). +define('FILE_X509_ATTR_APPEND', -2); // Add a value. +define('FILE_X509_ATTR_REPLACE', -3); // Clear first, then add a value. + +/** + * Pure-PHP X.509 Parser + * + * @author Jim Wigginton + * @version 0.3.1 + * @access public + * @package File_X509 + */ +class File_X509 { + /** + * ASN.1 syntax for X.509 certificates + * + * @var Array + * @access private + */ + var $Certificate; + + /**#@+ + * ASN.1 syntax for various extensions + * + * @access private + */ + var $DirectoryString; + var $PKCS9String; + var $AttributeValue; + var $Extensions; + var $KeyUsage; + var $ExtKeyUsageSyntax; + var $BasicConstraints; + var $KeyIdentifier; + var $CRLDistributionPoints; + var $AuthorityKeyIdentifier; + var $CertificatePolicies; + var $AuthorityInfoAccessSyntax; + var $SubjectAltName; + var $PrivateKeyUsagePeriod; + var $IssuerAltName; + var $PolicyMappings; + var $NameConstraints; + + var $CPSuri; + var $UserNotice; + + var $netscape_cert_type; + var $netscape_comment; + var $netscape_ca_policy_url; + + var $Name; + var $RelativeDistinguishedName; + var $CRLNumber; + var $CRLReason; + var $IssuingDistributionPoint; + var $InvalidityDate; + var $CertificateIssuer; + var $HoldInstructionCode; + var $SignedPublicKeyAndChallenge; + /**#@-*/ + + /** + * ASN.1 syntax for Certificate Signing Requests (RFC2986) + * + * @var Array + * @access private + */ + var $CertificationRequest; + + /** + * ASN.1 syntax for Certificate Revocation Lists (RFC5280) + * + * @var Array + * @access private + */ + var $CertificateList; + + /** + * Distinguished Name + * + * @var Array + * @access private + */ + var $dn; + + /** + * Public key + * + * @var String + * @access private + */ + var $publicKey; + + /** + * Private key + * + * @var String + * @access private + */ + var $privateKey; + + /** + * Object identifiers for X.509 certificates + * + * @var Array + * @access private + * @link http://en.wikipedia.org/wiki/Object_identifier + */ + var $oids; + + /** + * The certificate authorities + * + * @var Array + * @access private + */ + var $CAs; + + /** + * The currently loaded certificate + * + * @var Array + * @access private + */ + var $currentCert; + + /** + * The signature subject + * + * There's no guarantee File_X509 is going to reencode an X.509 cert in the same way it was originally + * encoded so we take save the portion of the original cert that the signature would have made for. + * + * @var String + * @access private + */ + var $signatureSubject; + + /** + * Certificate Start Date + * + * @var String + * @access private + */ + var $startDate; + + /** + * Certificate End Date + * + * @var String + * @access private + */ + var $endDate; + + /** + * Serial Number + * + * @var String + * @access private + */ + var $serialNumber; + + /** + * Key Identifier + * + * See {@link http://tools.ietf.org/html/rfc5280#section-4.2.1.1 RFC5280#section-4.2.1.1} and + * {@link http://tools.ietf.org/html/rfc5280#section-4.2.1.2 RFC5280#section-4.2.1.2}. + * + * @var String + * @access private + */ + var $currentKeyIdentifier; + + /** + * CA Flag + * + * @var Boolean + * @access private + */ + var $caFlag = false; + + /** + * Default Constructor. + * + * @return File_X509 + * @access public + */ + function File_X509() + { + // Explicitly Tagged Module, 1988 Syntax + // http://tools.ietf.org/html/rfc5280#appendix-A.1 + + $this->DirectoryString = array( + 'type' => FILE_ASN1_TYPE_CHOICE, + 'children' => array( + 'teletexString' => array('type' => FILE_ASN1_TYPE_TELETEX_STRING), + 'printableString' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING), + 'universalString' => array('type' => FILE_ASN1_TYPE_UNIVERSAL_STRING), + 'utf8String' => array('type' => FILE_ASN1_TYPE_UTF8_STRING), + 'bmpString' => array('type' => FILE_ASN1_TYPE_BMP_STRING) + ) + ); + + $this->PKCS9String = array( + 'type' => FILE_ASN1_TYPE_CHOICE, + 'children' => array( + 'ia5String' => array('type' => FILE_ASN1_TYPE_IA5_STRING), + 'directoryString' => $this->DirectoryString + ) + ); + + $this->AttributeValue = array('type' => FILE_ASN1_TYPE_ANY); + + $AttributeType = array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER); + + $AttributeTypeAndValue = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'type' => $AttributeType, + 'value'=> $this->AttributeValue + ) + ); + + /* + In practice, RDNs containing multiple name-value pairs (called "multivalued RDNs") are rare, + but they can be useful at times when either there is no unique attribute in the entry or you + want to ensure that the entry's DN contains some useful identifying information. + + - https://www.opends.org/wiki/page/DefinitionRelativeDistinguishedName + */ + $this->RelativeDistinguishedName = array( + 'type' => FILE_ASN1_TYPE_SET, + 'min' => 1, + 'max' => -1, + 'children' => $AttributeTypeAndValue + ); + + // http://tools.ietf.org/html/rfc5280#section-4.1.2.4 + $RDNSequence = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + // RDNSequence does not define a min or a max, which means it doesn't have one + 'min' => 0, + 'max' => -1, + 'children' => $this->RelativeDistinguishedName + ); + + $this->Name = array( + 'type' => FILE_ASN1_TYPE_CHOICE, + 'children' => array( + 'rdnSequence' => $RDNSequence + ) + ); + + // http://tools.ietf.org/html/rfc5280#section-4.1.1.2 + $AlgorithmIdentifier = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'algorithm' => array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER), + 'parameters' => array( + 'type' => FILE_ASN1_TYPE_ANY, + 'optional' => true + ) + ) + ); + + /* + A certificate using system MUST reject the certificate if it encounters + a critical extension it does not recognize; however, a non-critical + extension may be ignored if it is not recognized. + + http://tools.ietf.org/html/rfc5280#section-4.2 + */ + $Extension = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'extnId' => array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER), + 'critical' => array( + 'type' => FILE_ASN1_TYPE_BOOLEAN, + 'optional' => true, + 'default' => false + ), + 'extnValue' => array('type' => FILE_ASN1_TYPE_OCTET_STRING) + ) + ); + + $this->Extensions = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'min' => 1, + // technically, it's MAX, but we'll assume anything < 0 is MAX + 'max' => -1, + // if 'children' isn't an array then 'min' and 'max' must be defined + 'children' => $Extension + ); + + $SubjectPublicKeyInfo = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'algorithm' => $AlgorithmIdentifier, + 'subjectPublicKey' => array('type' => FILE_ASN1_TYPE_BIT_STRING) + ) + ); + + $UniqueIdentifier = array('type' => FILE_ASN1_TYPE_BIT_STRING); + + $Time = array( + 'type' => FILE_ASN1_TYPE_CHOICE, + 'children' => array( + 'utcTime' => array('type' => FILE_ASN1_TYPE_UTC_TIME), + 'generalTime' => array('type' => FILE_ASN1_TYPE_GENERALIZED_TIME) + ) + ); + + // http://tools.ietf.org/html/rfc5280#section-4.1.2.5 + $Validity = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'notBefore' => $Time, + 'notAfter' => $Time + ) + ); + + $CertificateSerialNumber = array('type' => FILE_ASN1_TYPE_INTEGER); + + $Version = array( + 'type' => FILE_ASN1_TYPE_INTEGER, + 'mapping' => array('v1', 'v2', 'v3') + ); + + // assert($TBSCertificate['children']['signature'] == $Certificate['children']['signatureAlgorithm']) + $TBSCertificate = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + // technically, default implies optional, but we'll define it as being optional, none-the-less, just to + // reenforce that fact + 'version' => array( + 'constant' => 0, + 'optional' => true, + 'explicit' => true, + 'default' => 'v1' + ) + $Version, + 'serialNumber' => $CertificateSerialNumber, + 'signature' => $AlgorithmIdentifier, + 'issuer' => $this->Name, + 'validity' => $Validity, + 'subject' => $this->Name, + 'subjectPublicKeyInfo' => $SubjectPublicKeyInfo, + // implicit means that the T in the TLV structure is to be rewritten, regardless of the type + 'issuerUniqueID' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ) + $UniqueIdentifier, + 'subjectUniqueID' => array( + 'constant' => 2, + 'optional' => true, + 'implicit' => true + ) + $UniqueIdentifier, + // doesn't use the EXPLICIT keyword but if + // it's not IMPLICIT, it's EXPLICIT + 'extensions' => array( + 'constant' => 3, + 'optional' => true, + 'explicit' => true + ) + $this->Extensions + ) + ); + + $this->Certificate = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'tbsCertificate' => $TBSCertificate, + 'signatureAlgorithm' => $AlgorithmIdentifier, + 'signature' => array('type' => FILE_ASN1_TYPE_BIT_STRING) + ) + ); + + $this->KeyUsage = array( + 'type' => FILE_ASN1_TYPE_BIT_STRING, + 'mapping' => array( + 'digitalSignature', + 'nonRepudiation', + 'keyEncipherment', + 'dataEncipherment', + 'keyAgreement', + 'keyCertSign', + 'cRLSign', + 'encipherOnly', + 'decipherOnly' + ) + ); + + $this->BasicConstraints = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'cA' => array( + 'type' => FILE_ASN1_TYPE_BOOLEAN, + 'optional' => true, + 'default' => false + ), + 'pathLenConstraint' => array( + 'type' => FILE_ASN1_TYPE_INTEGER, + 'optional' => true + ) + ) + ); + + $this->KeyIdentifier = array('type' => FILE_ASN1_TYPE_OCTET_STRING); + + $OrganizationalUnitNames = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'min' => 1, + 'max' => 4, // ub-organizational-units + 'children' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING) + ); + + $PersonalName = array( + 'type' => FILE_ASN1_TYPE_SET, + 'children' => array( + 'surname' => array( + 'type' => FILE_ASN1_TYPE_PRINTABLE_STRING, + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ), + 'given-name' => array( + 'type' => FILE_ASN1_TYPE_PRINTABLE_STRING, + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ), + 'initials' => array( + 'type' => FILE_ASN1_TYPE_PRINTABLE_STRING, + 'constant' => 2, + 'optional' => true, + 'implicit' => true + ), + 'generation-qualifier' => array( + 'type' => FILE_ASN1_TYPE_PRINTABLE_STRING, + 'constant' => 3, + 'optional' => true, + 'implicit' => true + ) + ) + ); + + $NumericUserIdentifier = array('type' => FILE_ASN1_TYPE_NUMERIC_STRING); + + $OrganizationName = array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING); + + $PrivateDomainName = array( + 'type' => FILE_ASN1_TYPE_CHOICE, + 'children' => array( + 'numeric' => array('type' => FILE_ASN1_TYPE_NUMERIC_STRING), + 'printable' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING) + ) + ); + + $TerminalIdentifier = array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING); + + $NetworkAddress = array('type' => FILE_ASN1_TYPE_NUMERIC_STRING); + + $AdministrationDomainName = array( + 'type' => FILE_ASN1_TYPE_CHOICE, + // if class isn't present it's assumed to be FILE_ASN1_CLASS_UNIVERSAL or + // (if constant is present) FILE_ASN1_CLASS_CONTEXT_SPECIFIC + 'class' => FILE_ASN1_CLASS_APPLICATION, + 'cast' => 2, + 'children' => array( + 'numeric' => array('type' => FILE_ASN1_TYPE_NUMERIC_STRING), + 'printable' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING) + ) + ); + + $CountryName = array( + 'type' => FILE_ASN1_TYPE_CHOICE, + // if class isn't present it's assumed to be FILE_ASN1_CLASS_UNIVERSAL or + // (if constant is present) FILE_ASN1_CLASS_CONTEXT_SPECIFIC + 'class' => FILE_ASN1_CLASS_APPLICATION, + 'cast' => 1, + 'children' => array( + 'x121-dcc-code' => array('type' => FILE_ASN1_TYPE_NUMERIC_STRING), + 'iso-3166-alpha2-code' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING) + ) + ); + + $AnotherName = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'type-id' => array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER), + 'value' => array( + 'type' => FILE_ASN1_TYPE_ANY, + 'constant' => 0, + 'optional' => true, + 'explicit' => true + ) + ) + ); + + $ExtensionAttribute = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'extension-attribute-type' => array( + 'type' => FILE_ASN1_TYPE_PRINTABLE_STRING, + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ), + 'extension-attribute-value' => array( + 'type' => FILE_ASN1_TYPE_ANY, + 'constant' => 1, + 'optional' => true, + 'explicit' => true + ) + ) + ); + + $ExtensionAttributes = array( + 'type' => FILE_ASN1_TYPE_SET, + 'min' => 1, + 'max' => 256, // ub-extension-attributes + 'children' => $ExtensionAttribute + ); + + $BuiltInDomainDefinedAttribute = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'type' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING), + 'value' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING) + ) + ); + + $BuiltInDomainDefinedAttributes = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'min' => 1, + 'max' => 4, // ub-domain-defined-attributes + 'children' => $BuiltInDomainDefinedAttribute + ); + + $BuiltInStandardAttributes = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'country-name' => array('optional' => true) + $CountryName, + 'administration-domain-name' => array('optional' => true) + $AdministrationDomainName, + 'network-address' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ) + $NetworkAddress, + 'terminal-identifier' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ) + $TerminalIdentifier, + 'private-domain-name' => array( + 'constant' => 2, + 'optional' => true, + 'explicit' => true + ) + $PrivateDomainName, + 'organization-name' => array( + 'constant' => 3, + 'optional' => true, + 'implicit' => true + ) + $OrganizationName, + 'numeric-user-identifier' => array( + 'constant' => 4, + 'optional' => true, + 'implicit' => true + ) + $NumericUserIdentifier, + 'personal-name' => array( + 'constant' => 5, + 'optional' => true, + 'implicit' => true + ) + $PersonalName, + 'organizational-unit-names' => array( + 'constant' => 6, + 'optional' => true, + 'implicit' => true + ) + $OrganizationalUnitNames + ) + ); + + $ORAddress = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'built-in-standard-attributes' => $BuiltInStandardAttributes, + 'built-in-domain-defined-attributes' => array('optional' => true) + $BuiltInDomainDefinedAttributes, + 'extension-attributes' => array('optional' => true) + $ExtensionAttributes + ) + ); + + $EDIPartyName = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'nameAssigner' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ) + $this->DirectoryString, + // partyName is technically required but File_ASN1 doesn't currently support non-optional constants and + // setting it to optional gets the job done in any event. + 'partyName' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ) + $this->DirectoryString + ) + ); + + $GeneralName = array( + 'type' => FILE_ASN1_TYPE_CHOICE, + 'children' => array( + 'otherName' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ) + $AnotherName, + 'rfc822Name' => array( + 'type' => FILE_ASN1_TYPE_IA5_STRING, + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ), + 'dNSName' => array( + 'type' => FILE_ASN1_TYPE_IA5_STRING, + 'constant' => 2, + 'optional' => true, + 'implicit' => true + ), + 'x400Address' => array( + 'constant' => 3, + 'optional' => true, + 'implicit' => true + ) + $ORAddress, + 'directoryName' => array( + 'constant' => 4, + 'optional' => true, + 'explicit' => true + ) + $this->Name, + 'ediPartyName' => array( + 'constant' => 5, + 'optional' => true, + 'implicit' => true + ) + $EDIPartyName, + 'uniformResourceIdentifier' => array( + 'type' => FILE_ASN1_TYPE_IA5_STRING, + 'constant' => 6, + 'optional' => true, + 'implicit' => true + ), + 'iPAddress' => array( + 'type' => FILE_ASN1_TYPE_OCTET_STRING, + 'constant' => 7, + 'optional' => true, + 'implicit' => true + ), + 'registeredID' => array( + 'type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER, + 'constant' => 8, + 'optional' => true, + 'implicit' => true + ) + ) + ); + + $GeneralNames = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => $GeneralName + ); + + $this->IssuerAltName = $GeneralNames; + + $ReasonFlags = array( + 'type' => FILE_ASN1_TYPE_BIT_STRING, + 'mapping' => array( + 'unused', + 'keyCompromise', + 'cACompromise', + 'affiliationChanged', + 'superseded', + 'cessationOfOperation', + 'certificateHold', + 'privilegeWithdrawn', + 'aACompromise' + ) + ); + + $DistributionPointName = array( + 'type' => FILE_ASN1_TYPE_CHOICE, + 'children' => array( + 'fullName' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ) + $GeneralNames, + 'nameRelativeToCRLIssuer' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ) + $this->RelativeDistinguishedName + ) + ); + + $DistributionPoint = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'distributionPoint' => array( + 'constant' => 0, + 'optional' => true, + 'explicit' => true + ) + $DistributionPointName, + 'reasons' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ) + $ReasonFlags, + 'cRLIssuer' => array( + 'constant' => 2, + 'optional' => true, + 'implicit' => true + ) + $GeneralNames + ) + ); + + $this->CRLDistributionPoints = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => $DistributionPoint + ); + + $this->AuthorityKeyIdentifier = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'keyIdentifier' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ) + $this->KeyIdentifier, + 'authorityCertIssuer' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ) + $GeneralNames, + 'authorityCertSerialNumber' => array( + 'constant' => 2, + 'optional' => true, + 'implicit' => true + ) + $CertificateSerialNumber + ) + ); + + $PolicyQualifierId = array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER); + + $PolicyQualifierInfo = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'policyQualifierId' => $PolicyQualifierId, + 'qualifier' => array('type' => FILE_ASN1_TYPE_ANY) + ) + ); + + $CertPolicyId = array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER); + + $PolicyInformation = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'policyIdentifier' => $CertPolicyId, + 'policyQualifiers' => array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'min' => 0, + 'max' => -1, + 'optional' => true, + 'children' => $PolicyQualifierInfo + ) + ) + ); + + $this->CertificatePolicies = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => $PolicyInformation + ); + + $this->PolicyMappings = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'issuerDomainPolicy' => $CertPolicyId, + 'subjectDomainPolicy' => $CertPolicyId + ) + ) + ); + + $KeyPurposeId = array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER); + + $this->ExtKeyUsageSyntax = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => $KeyPurposeId + ); + + $AccessDescription = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'accessMethod' => array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER), + 'accessLocation' => $GeneralName + ) + ); + + $this->AuthorityInfoAccessSyntax = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => $AccessDescription + ); + + $this->SubjectAltName = $GeneralNames; + + $this->PrivateKeyUsagePeriod = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'notBefore' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true, + 'type' => FILE_ASN1_TYPE_GENERALIZED_TIME), + 'notAfter' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true, + 'type' => FILE_ASN1_TYPE_GENERALIZED_TIME) + ) + ); + + $BaseDistance = array('type' => FILE_ASN1_TYPE_INTEGER); + + $GeneralSubtree = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'base' => $GeneralName, + 'minimum' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true, + 'default' => new Math_BigInteger(0) + ) + $BaseDistance, + 'maximum' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true, + ) + $BaseDistance + ) + ); + + $GeneralSubtrees = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => $GeneralSubtree + ); + + $this->NameConstraints = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'permittedSubtrees' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ) + $GeneralSubtrees, + 'excludedSubtrees' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ) + $GeneralSubtrees + ) + ); + + $this->CPSuri = array('type' => FILE_ASN1_TYPE_IA5_STRING); + + $DisplayText = array( + 'type' => FILE_ASN1_TYPE_CHOICE, + 'children' => array( + 'ia5String' => array('type' => FILE_ASN1_TYPE_IA5_STRING), + 'visibleString' => array('type' => FILE_ASN1_TYPE_VISIBLE_STRING), + 'bmpString' => array('type' => FILE_ASN1_TYPE_BMP_STRING), + 'utf8String' => array('type' => FILE_ASN1_TYPE_UTF8_STRING) + ) + ); + + $NoticeReference = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'organization' => $DisplayText, + 'noticeNumbers' => array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'min' => 1, + 'max' => 200, + 'children' => array('type' => FILE_ASN1_TYPE_INTEGER) + ) + ) + ); + + $this->UserNotice = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'noticeRef' => array( + 'optional' => true, + 'implicit' => true + ) + $NoticeReference, + 'explicitText' => array( + 'optional' => true, + 'implicit' => true + ) + $DisplayText + ) + ); + + // mapping is from + $this->netscape_cert_type = array( + 'type' => FILE_ASN1_TYPE_BIT_STRING, + 'mapping' => array( + 'SSLClient', + 'SSLServer', + 'Email', + 'ObjectSigning', + 'Reserved', + 'SSLCA', + 'EmailCA', + 'ObjectSigningCA' + ) + ); + + $this->netscape_comment = array('type' => FILE_ASN1_TYPE_IA5_STRING); + $this->netscape_ca_policy_url = array('type' => FILE_ASN1_TYPE_IA5_STRING); + + // attribute is used in RFC2986 but we're using the RFC5280 definition + + $Attribute = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'type' => $AttributeType, + 'value'=> array( + 'type' => FILE_ASN1_TYPE_SET, + 'min' => 1, + 'max' => -1, + 'children' => $this->AttributeValue + ) + ) + ); + + // adapted from + + $Attributes = array( + 'type' => FILE_ASN1_TYPE_SET, + 'min' => 1, + 'max' => -1, + 'children' => $Attribute + ); + + $CertificationRequestInfo = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'version' => array( + 'type' => FILE_ASN1_TYPE_INTEGER, + 'mapping' => array('v1') + ), + 'subject' => $this->Name, + 'subjectPKInfo' => $SubjectPublicKeyInfo, + 'attributes' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ) + $Attributes, + ) + ); + + $this->CertificationRequest = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'certificationRequestInfo' => $CertificationRequestInfo, + 'signatureAlgorithm' => $AlgorithmIdentifier, + 'signature' => array('type' => FILE_ASN1_TYPE_BIT_STRING) + ) + ); + + $RevokedCertificate = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'userCertificate' => $CertificateSerialNumber, + 'revocationDate' => $Time, + 'crlEntryExtensions' => array( + 'optional' => true + ) + $this->Extensions + ) + ); + + $TBSCertList = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'version' => array( + 'optional' => true, + 'default' => 'v1' + ) + $Version, + 'signature' => $AlgorithmIdentifier, + 'issuer' => $this->Name, + 'thisUpdate' => $Time, + 'nextUpdate' => array( + 'optional' => true + ) + $Time, + 'revokedCertificates' => array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'optional' => true, + 'min' => 0, + 'max' => -1, + 'children' => $RevokedCertificate + ), + 'crlExtensions' => array( + 'constant' => 0, + 'optional' => true, + 'explicit' => true + ) + $this->Extensions + ) + ); + + $this->CertificateList = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'tbsCertList' => $TBSCertList, + 'signatureAlgorithm' => $AlgorithmIdentifier, + 'signature' => array('type' => FILE_ASN1_TYPE_BIT_STRING) + ) + ); + + $this->CRLNumber = array('type' => FILE_ASN1_TYPE_INTEGER); + + $this->CRLReason = array('type' => FILE_ASN1_TYPE_ENUMERATED, + 'mapping' => array( + 'unspecified', + 'keyCompromise', + 'cACompromise', + 'affiliationChanged', + 'superseded', + 'cessationOfOperation', + 'certificateHold', + // Value 7 is not used. + 8 => 'removeFromCRL', + 'privilegeWithdrawn', + 'aACompromise' + ) + ); + + $this->IssuingDistributionPoint = array('type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'distributionPoint' => array( + 'constant' => 0, + 'optional' => true, + 'explicit' => true + ) + $DistributionPointName, + 'onlyContainsUserCerts' => array( + 'type' => FILE_ASN1_TYPE_BOOLEAN, + 'constant' => 1, + 'optional' => true, + 'default' => false, + 'implicit' => true + ), + 'onlyContainsCACerts' => array( + 'type' => FILE_ASN1_TYPE_BOOLEAN, + 'constant' => 2, + 'optional' => true, + 'default' => false, + 'implicit' => true + ), + 'onlySomeReasons' => array( + 'constant' => 3, + 'optional' => true, + 'implicit' => true + ) + $ReasonFlags, + 'indirectCRL' => array( + 'type' => FILE_ASN1_TYPE_BOOLEAN, + 'constant' => 4, + 'optional' => true, + 'default' => false, + 'implicit' => true + ), + 'onlyContainsAttributeCerts' => array( + 'type' => FILE_ASN1_TYPE_BOOLEAN, + 'constant' => 5, + 'optional' => true, + 'default' => false, + 'implicit' => true + ) + ) + ); + + $this->InvalidityDate = array('type' => FILE_ASN1_TYPE_GENERALIZED_TIME); + + $this->CertificateIssuer = $GeneralNames; + + $this->HoldInstructionCode = array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER); + + $PublicKeyAndChallenge = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'spki' => $SubjectPublicKeyInfo, + 'challenge' => array('type' => FILE_ASN1_TYPE_IA5_STRING) + ) + ); + + $this->SignedPublicKeyAndChallenge = array( + 'type' => FILE_ASN1_TYPE_SEQUENCE, + 'children' => array( + 'publicKeyAndChallenge' => $PublicKeyAndChallenge, + 'signatureAlgorithm' => $AlgorithmIdentifier, + 'signature' => array('type' => FILE_ASN1_TYPE_BIT_STRING) + ) + ); + + // OIDs from RFC5280 and those RFCs mentioned in RFC5280#section-4.1.1.2 + $this->oids = array( + '1.3.6.1.5.5.7' => 'id-pkix', + '1.3.6.1.5.5.7.1' => 'id-pe', + '1.3.6.1.5.5.7.2' => 'id-qt', + '1.3.6.1.5.5.7.3' => 'id-kp', + '1.3.6.1.5.5.7.48' => 'id-ad', + '1.3.6.1.5.5.7.2.1' => 'id-qt-cps', + '1.3.6.1.5.5.7.2.2' => 'id-qt-unotice', + '1.3.6.1.5.5.7.48.1' =>'id-ad-ocsp', + '1.3.6.1.5.5.7.48.2' => 'id-ad-caIssuers', + '1.3.6.1.5.5.7.48.3' => 'id-ad-timeStamping', + '1.3.6.1.5.5.7.48.5' => 'id-ad-caRepository', + '2.5.4' => 'id-at', + '2.5.4.41' => 'id-at-name', + '2.5.4.4' => 'id-at-surname', + '2.5.4.42' => 'id-at-givenName', + '2.5.4.43' => 'id-at-initials', + '2.5.4.44' => 'id-at-generationQualifier', + '2.5.4.3' => 'id-at-commonName', + '2.5.4.7' => 'id-at-localityName', + '2.5.4.8' => 'id-at-stateOrProvinceName', + '2.5.4.10' => 'id-at-organizationName', + '2.5.4.11' => 'id-at-organizationalUnitName', + '2.5.4.12' => 'id-at-title', + '2.5.4.13' => 'id-at-description', + '2.5.4.46' => 'id-at-dnQualifier', + '2.5.4.6' => 'id-at-countryName', + '2.5.4.5' => 'id-at-serialNumber', + '2.5.4.65' => 'id-at-pseudonym', + '2.5.4.17' => 'id-at-postalCode', + '2.5.4.9' => 'id-at-streetAddress', + '2.5.4.45' => 'id-at-uniqueIdentifier', + '2.5.4.72' => 'id-at-role', + + '0.9.2342.19200300.100.1.25' => 'id-domainComponent', + '1.2.840.113549.1.9' => 'pkcs-9', + '1.2.840.113549.1.9.1' => 'pkcs-9-at-emailAddress', + '2.5.29' => 'id-ce', + '2.5.29.35' => 'id-ce-authorityKeyIdentifier', + '2.5.29.14' => 'id-ce-subjectKeyIdentifier', + '2.5.29.15' => 'id-ce-keyUsage', + '2.5.29.16' => 'id-ce-privateKeyUsagePeriod', + '2.5.29.32' => 'id-ce-certificatePolicies', + '2.5.29.32.0' => 'anyPolicy', + + '2.5.29.33' => 'id-ce-policyMappings', + '2.5.29.17' => 'id-ce-subjectAltName', + '2.5.29.18' => 'id-ce-issuerAltName', + '2.5.29.9' => 'id-ce-subjectDirectoryAttributes', + '2.5.29.19' => 'id-ce-basicConstraints', + '2.5.29.30' => 'id-ce-nameConstraints', + '2.5.29.36' => 'id-ce-policyConstraints', + '2.5.29.31' => 'id-ce-cRLDistributionPoints', + '2.5.29.37' => 'id-ce-extKeyUsage', + '2.5.29.37.0' => 'anyExtendedKeyUsage', + '1.3.6.1.5.5.7.3.1' => 'id-kp-serverAuth', + '1.3.6.1.5.5.7.3.2' => 'id-kp-clientAuth', + '1.3.6.1.5.5.7.3.3' => 'id-kp-codeSigning', + '1.3.6.1.5.5.7.3.4' => 'id-kp-emailProtection', + '1.3.6.1.5.5.7.3.8' => 'id-kp-timeStamping', + '1.3.6.1.5.5.7.3.9' => 'id-kp-OCSPSigning', + '2.5.29.54' => 'id-ce-inhibitAnyPolicy', + '2.5.29.46' => 'id-ce-freshestCRL', + '1.3.6.1.5.5.7.1.1' => 'id-pe-authorityInfoAccess', + '1.3.6.1.5.5.7.1.11' => 'id-pe-subjectInfoAccess', + '2.5.29.20' => 'id-ce-cRLNumber', + '2.5.29.28' => 'id-ce-issuingDistributionPoint', + '2.5.29.27' => 'id-ce-deltaCRLIndicator', + '2.5.29.21' => 'id-ce-cRLReasons', + '2.5.29.29' => 'id-ce-certificateIssuer', + '2.5.29.23' => 'id-ce-holdInstructionCode', + '1.2.840.10040.2' => 'holdInstruction', + '1.2.840.10040.2.1' => 'id-holdinstruction-none', + '1.2.840.10040.2.2' => 'id-holdinstruction-callissuer', + '1.2.840.10040.2.3' => 'id-holdinstruction-reject', + '2.5.29.24' => 'id-ce-invalidityDate', + + '1.2.840.113549.2.2' => 'md2', + '1.2.840.113549.2.5' => 'md5', + '1.3.14.3.2.26' => 'id-sha1', + '1.2.840.10040.4.1' => 'id-dsa', + '1.2.840.10040.4.3' => 'id-dsa-with-sha1', + '1.2.840.113549.1.1' => 'pkcs-1', + '1.2.840.113549.1.1.1' => 'rsaEncryption', + '1.2.840.113549.1.1.2' => 'md2WithRSAEncryption', + '1.2.840.113549.1.1.4' => 'md5WithRSAEncryption', + '1.2.840.113549.1.1.5' => 'sha1WithRSAEncryption', + '1.2.840.10046.2.1' => 'dhpublicnumber', + '2.16.840.1.101.2.1.1.22' => 'id-keyExchangeAlgorithm', + '1.2.840.10045' => 'ansi-X9-62', + '1.2.840.10045.4' => 'id-ecSigType', + '1.2.840.10045.4.1' => 'ecdsa-with-SHA1', + '1.2.840.10045.1' => 'id-fieldType', + '1.2.840.10045.1.1' => 'prime-field', + '1.2.840.10045.1.2' => 'characteristic-two-field', + '1.2.840.10045.1.2.3' => 'id-characteristic-two-basis', + '1.2.840.10045.1.2.3.1' => 'gnBasis', + '1.2.840.10045.1.2.3.2' => 'tpBasis', + '1.2.840.10045.1.2.3.3' => 'ppBasis', + '1.2.840.10045.2' => 'id-publicKeyType', + '1.2.840.10045.2.1' => 'id-ecPublicKey', + '1.2.840.10045.3' => 'ellipticCurve', + '1.2.840.10045.3.0' => 'c-TwoCurve', + '1.2.840.10045.3.0.1' => 'c2pnb163v1', + '1.2.840.10045.3.0.2' => 'c2pnb163v2', + '1.2.840.10045.3.0.3' => 'c2pnb163v3', + '1.2.840.10045.3.0.4' => 'c2pnb176w1', + '1.2.840.10045.3.0.5' => 'c2pnb191v1', + '1.2.840.10045.3.0.6' => 'c2pnb191v2', + '1.2.840.10045.3.0.7' => 'c2pnb191v3', + '1.2.840.10045.3.0.8' => 'c2pnb191v4', + '1.2.840.10045.3.0.9' => 'c2pnb191v5', + '1.2.840.10045.3.0.10' => 'c2pnb208w1', + '1.2.840.10045.3.0.11' => 'c2pnb239v1', + '1.2.840.10045.3.0.12' => 'c2pnb239v2', + '1.2.840.10045.3.0.13' => 'c2pnb239v3', + '1.2.840.10045.3.0.14' => 'c2pnb239v4', + '1.2.840.10045.3.0.15' => 'c2pnb239v5', + '1.2.840.10045.3.0.16' => 'c2pnb272w1', + '1.2.840.10045.3.0.17' => 'c2pnb304w1', + '1.2.840.10045.3.0.18' => 'c2pnb359v1', + '1.2.840.10045.3.0.19' => 'c2pnb368w1', + '1.2.840.10045.3.0.20' => 'c2pnb431r1', + '1.2.840.10045.3.1' => 'primeCurve', + '1.2.840.10045.3.1.1' => 'prime192v1', + '1.2.840.10045.3.1.2' => 'prime192v2', + '1.2.840.10045.3.1.3' => 'prime192v3', + '1.2.840.10045.3.1.4' => 'prime239v1', + '1.2.840.10045.3.1.5' => 'prime239v2', + '1.2.840.10045.3.1.6' => 'prime239v3', + '1.2.840.10045.3.1.7' => 'prime256v1', + '1.2.840.113549.1.1.7' => 'id-RSAES-OAEP', + '1.2.840.113549.1.1.9' => 'id-pSpecified', + '1.2.840.113549.1.1.10' => 'id-RSASSA-PSS', + '1.2.840.113549.1.1.8' => 'id-mgf1', + '1.2.840.113549.1.1.14' => 'sha224WithRSAEncryption', + '1.2.840.113549.1.1.11' => 'sha256WithRSAEncryption', + '1.2.840.113549.1.1.12' => 'sha384WithRSAEncryption', + '1.2.840.113549.1.1.13' => 'sha512WithRSAEncryption', + '2.16.840.1.101.3.4.2.4' => 'id-sha224', + '2.16.840.1.101.3.4.2.1' => 'id-sha256', + '2.16.840.1.101.3.4.2.2' => 'id-sha384', + '2.16.840.1.101.3.4.2.3' => 'id-sha512', + '1.2.643.2.2.4' => 'id-GostR3411-94-with-GostR3410-94', + '1.2.643.2.2.3' => 'id-GostR3411-94-with-GostR3410-2001', + '1.2.643.2.2.20' => 'id-GostR3410-2001', + '1.2.643.2.2.19' => 'id-GostR3410-94', + // Netscape Object Identifiers from "Netscape Certificate Extensions" + '2.16.840.1.113730' => 'netscape', + '2.16.840.1.113730.1' => 'netscape-cert-extension', + '2.16.840.1.113730.1.1' => 'netscape-cert-type', + '2.16.840.1.113730.1.13' => 'netscape-comment', + '2.16.840.1.113730.1.8' => 'netscape-ca-policy-url', + // the following are X.509 extensions not supported by phpseclib + '1.3.6.1.5.5.7.1.12' => 'id-pe-logotype', + '1.2.840.113533.7.65.0' => 'entrustVersInfo', + '2.16.840.1.113733.1.6.9' => 'verisignPrivate', + // for Certificate Signing Requests + // see http://tools.ietf.org/html/rfc2985 + '1.2.840.113549.1.9.2' => 'pkcs-9-at-unstructuredName', // PKCS #9 unstructured name + '1.2.840.113549.1.9.7' => 'pkcs-9-at-challengePassword', // Challenge password for certificate revocations + '1.2.840.113549.1.9.14' => 'pkcs-9-at-extensionRequest' // Certificate extension request + ); + } + + /** + * Load X.509 certificate + * + * Returns an associative array describing the X.509 cert or a false if the cert failed to load + * + * @param String $cert + * @access public + * @return Mixed + */ + function loadX509($cert) + { + if (is_array($cert) && isset($cert['tbsCertificate'])) { + unset($this->currentCert); + unset($this->currentKeyIdentifier); + $this->dn = $cert['tbsCertificate']['subject']; + if (!isset($this->dn)) { + return false; + } + $this->currentCert = $cert; + + $currentKeyIdentifier = $this->getExtension('id-ce-subjectKeyIdentifier'); + $this->currentKeyIdentifier = is_string($currentKeyIdentifier) ? $currentKeyIdentifier : NULL; + + unset($this->signatureSubject); + + return $cert; + } + + $asn1 = new File_ASN1(); + + /* + X.509 certs are assumed to be base64 encoded but sometimes they'll have additional things in them above and beyond the ceritificate. ie. + some may have the following preceeding the -----BEGIN CERTIFICATE----- line: + + subject=/O=organization/OU=org unit/CN=common name + issuer=/O=organization/CN=common name + */ + $temp = preg_replace('#^(?:[^-].+[\r\n]+)+|-.+-|[\r\n]| #', '', $cert); + $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false; + if ($temp != false) { + $cert = $temp; + } + + if ($cert === false) { + $this->currentCert = false; + return false; + } + + $asn1->loadOIDs($this->oids); + $decoded = $asn1->decodeBER($cert); + + if (!empty($decoded)) { + $x509 = $asn1->asn1map($decoded[0], $this->Certificate); + } + if (!isset($x509) || $x509 === false) { + $this->currentCert = false; + return false; + } + + $this->signatureSubject = substr($cert, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']); + + $this->_mapInExtensions($x509, 'tbsCertificate/extensions', $asn1); + + $key = &$x509['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']; + $key = $this->_reformatKey($x509['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'], $key); + + $this->currentCert = $x509; + $this->dn = $x509['tbsCertificate']['subject']; + + $currentKeyIdentifier = $this->getExtension('id-ce-subjectKeyIdentifier'); + $this->currentKeyIdentifier = is_string($currentKeyIdentifier) ? $currentKeyIdentifier : NULL; + + return $x509; + } + + /** + * Save X.509 certificate + * + * @param Array $cert + * @param Integer $format optional + * @access public + * @return String + */ + function saveX509($cert, $format = FILE_X509_FORMAT_PEM) + { + if (!is_array($cert) || !isset($cert['tbsCertificate'])) { + return false; + } + + switch (true) { + // "case !$a: case !$b: break; default: whatever();" is the same thing as "if ($a && $b) whatever()" + case !($algorithm = $this->_subArray($cert, 'tbsCertificate/subjectPublicKeyInfo/algorithm/algorithm')): + case is_object($cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']): + break; + default: + switch ($algorithm) { + case 'rsaEncryption': + $cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'] = + base64_encode("\0" . base64_decode(preg_replace('#-.+-|[\r\n]#', '', $cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']))); + } + } + + $asn1 = new File_ASN1(); + + $asn1->loadOIDs($this->oids); + + $filters = array(); + $filters['tbsCertificate']['signature']['parameters'] = + $filters['tbsCertificate']['signature']['issuer']['rdnSequence']['value'] = + $filters['tbsCertificate']['issuer']['rdnSequence']['value'] = + $filters['tbsCertificate']['subject']['rdnSequence']['value'] = + $filters['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['parameters'] = + $filters['signatureAlgorithm']['parameters'] = + $filters['authorityCertIssuer']['directoryName']['rdnSequence']['value'] = + //$filters['policyQualifiers']['qualifier'] = + $filters['distributionPoint']['fullName']['directoryName']['rdnSequence']['value'] = + $filters['directoryName']['rdnSequence']['value'] = + array('type' => FILE_ASN1_TYPE_UTF8_STRING); + /* in the case of policyQualifiers/qualifier, the type has to be FILE_ASN1_TYPE_IA5_STRING. + FILE_ASN1_TYPE_PRINTABLE_STRING will cause OpenSSL's X.509 parser to spit out random + characters. + */ + $filters['policyQualifiers']['qualifier'] = + array('type' => FILE_ASN1_TYPE_IA5_STRING); + + $asn1->loadFilters($filters); + + $this->_mapOutExtensions($cert, 'tbsCertificate/extensions', $asn1); + + $cert = $asn1->encodeDER($cert, $this->Certificate); + + switch ($format) { + case FILE_X509_FORMAT_DER: + return $cert; + // case FILE_X509_FORMAT_PEM: + default: + return "-----BEGIN CERTIFICATE-----\r\n" . chunk_split(base64_encode($cert), 64) . '-----END CERTIFICATE-----'; + } + } + + /** + * Map extension values from octet string to extension-specific internal + * format. + * + * @param Array ref $root + * @param String $path + * @param Object $asn1 + * @access private + */ + function _mapInExtensions(&$root, $path, $asn1) + { + $extensions = &$this->_subArray($root, $path); + + if (is_array($extensions)) { + for ($i = 0; $i < count($extensions); $i++) { + $id = $extensions[$i]['extnId']; + $value = &$extensions[$i]['extnValue']; + $value = base64_decode($value); + $decoded = $asn1->decodeBER($value); + /* [extnValue] contains the DER encoding of an ASN.1 value + corresponding to the extension type identified by extnID */ + $map = $this->_getMapping($id); + if (!is_bool($map)) { + $mapped = $asn1->asn1map($decoded[0], $map); + $value = $mapped === false ? $decoded[0] : $mapped; + + if ($id == 'id-ce-certificatePolicies') { + for ($j = 0; $j < count($value); $j++) { + if (!isset($value[$j]['policyQualifiers'])) { + continue; + } + for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) { + $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId']; + $map = $this->_getMapping($subid); + $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier']; + if ($map !== false) { + $decoded = $asn1->decodeBER($subvalue); + $mapped = $asn1->asn1map($decoded[0], $map); + $subvalue = $mapped === false ? $decoded[0] : $mapped; + } + } + } + } + } elseif ($map) { + $value = base64_encode($value); + } + } + } + } + + /** + * Map extension values from extension-specific internal format to + * octet string. + * + * @param Array ref $root + * @param String $path + * @param Object $asn1 + * @access private + */ + function _mapOutExtensions(&$root, $path, $asn1) + { + $extensions = &$this->_subArray($root, $path); + + if (is_array($extensions)) { + $size = count($extensions); + for ($i = 0; $i < $size; $i++) { + $id = $extensions[$i]['extnId']; + $value = &$extensions[$i]['extnValue']; + + switch ($id) { + case 'id-ce-certificatePolicies': + for ($j = 0; $j < count($value); $j++) { + if (!isset($value[$j]['policyQualifiers'])) { + continue; + } + for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) { + $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId']; + $map = $this->_getMapping($subid); + $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier']; + if ($map !== false) { + // by default File_ASN1 will try to render qualifier as a FILE_ASN1_TYPE_IA5_STRING since it's + // actual type is FILE_ASN1_TYPE_ANY + $subvalue = new File_ASN1_Element($asn1->encodeDER($subvalue, $map)); + } + } + } + break; + case 'id-ce-authorityKeyIdentifier': // use 00 as the serial number instead of an empty string + if (isset($value['authorityCertSerialNumber'])) { + if ($value['authorityCertSerialNumber']->toBytes() == '') { + $temp = chr((FILE_ASN1_CLASS_CONTEXT_SPECIFIC << 6) | 2) . "\1\0"; + $value['authorityCertSerialNumber'] = new File_ASN1_Element($temp); + } + } + } + + /* [extnValue] contains the DER encoding of an ASN.1 value + corresponding to the extension type identified by extnID */ + $map = $this->_getMapping($id); + if (is_bool($map)) { + if (!$map) { + $this->_handle_error($id . ' is not a currently supported extension'); + unset($extensions[$i]); + } + } else { + $temp = $asn1->encodeDER($value, $map); + $value = base64_encode($temp); + } + } + } + } + + /** + * Map attribute values from ANY type to attribute-specific internal + * format. + * + * @param Array ref $root + * @param String $path + * @param Object $asn1 + * @access private + */ + function _mapInAttributes(&$root, $path, $asn1) + { + $attributes = &$this->_subArray($root, $path); + + if (is_array($attributes)) { + for ($i = 0; $i < count($attributes); $i++) { + $id = $attributes[$i]['type']; + /* $value contains the DER encoding of an ASN.1 value + corresponding to the attribute type identified by type */ + $map = $this->_getMapping($id); + if (is_array($attributes[$i]['value'])) { + $values = &$attributes[$i]['value']; + for ($j = 0; $j < count($values); $j++) { + $value = $asn1->encodeDER($values[$j], $this->AttributeValue); + $decoded = $asn1->decodeBER($value); + if (!is_bool($map)) { + $mapped = $asn1->asn1map($decoded[0], $map); + if ($mapped !== false) { + $values[$j] = $mapped; + } + if ($id == 'pkcs-9-at-extensionRequest') { + $this->_mapInExtensions($values, $j, $asn1); + } + } elseif ($map) { + $values[$j] = base64_encode($value); + } + } + } + } + } + } + + /** + * Map attribute values from attribute-specific internal format to + * ANY type. + * + * @param Array ref $root + * @param String $path + * @param Object $asn1 + * @access private + */ + function _mapOutAttributes(&$root, $path, $asn1) + { + $attributes = &$this->_subArray($root, $path); + + if (is_array($attributes)) { + $size = count($attributes); + for ($i = 0; $i < $size; $i++) { + /* [value] contains the DER encoding of an ASN.1 value + corresponding to the attribute type identified by type */ + $id = $attributes[$i]['type']; + $map = $this->_getMapping($id); + if ($map === false) { + user_error($id . ' is not a currently supported attribute', E_USER_NOTICE); + unset($attributes[$i]); + } + elseif (is_array($attributes[$i]['value'])) { + $values = &$attributes[$i]['value']; + for ($j = 0; $j < count($values); $j++) { + switch ($id) { + case 'pkcs-9-at-extensionRequest': + $this->_mapOutExtensions($values, $j, $asn1); + break; + } + + if (!is_bool($map)) { + $temp = $asn1->encodeDER($values[$j], $map); + $decoded = $asn1->decodeBER($temp); + $values[$j] = $asn1->asn1map($decoded[0], $this->AttributeValue); + } + } + } + } + } + } + + /** + * Associate an extension ID to an extension mapping + * + * @param String $extnId + * @access private + * @return Mixed + */ + function _getMapping($extnId) + { + if (!is_string($extnId)) { // eg. if it's a File_ASN1_Element object + return true; + } + + switch ($extnId) { + case 'id-ce-keyUsage': + return $this->KeyUsage; + case 'id-ce-basicConstraints': + return $this->BasicConstraints; + case 'id-ce-subjectKeyIdentifier': + return $this->KeyIdentifier; + case 'id-ce-cRLDistributionPoints': + return $this->CRLDistributionPoints; + case 'id-ce-authorityKeyIdentifier': + return $this->AuthorityKeyIdentifier; + case 'id-ce-certificatePolicies': + return $this->CertificatePolicies; + case 'id-ce-extKeyUsage': + return $this->ExtKeyUsageSyntax; + case 'id-pe-authorityInfoAccess': + return $this->AuthorityInfoAccessSyntax; + case 'id-ce-subjectAltName': + return $this->SubjectAltName; + case 'id-ce-privateKeyUsagePeriod': + return $this->PrivateKeyUsagePeriod; + case 'id-ce-issuerAltName': + return $this->IssuerAltName; + case 'id-ce-policyMappings': + return $this->PolicyMappings; + case 'id-ce-nameConstraints': + return $this->NameConstraints; + + case 'netscape-cert-type': + return $this->netscape_cert_type; + case 'netscape-comment': + return $this->netscape_comment; + case 'netscape-ca-policy-url': + return $this->netscape_ca_policy_url; + + // since id-qt-cps isn't a constructed type it will have already been decoded as a string by the time it gets + // back around to asn1map() and we don't want it decoded again. + //case 'id-qt-cps': + // return $this->CPSuri; + case 'id-qt-unotice': + return $this->UserNotice; + + // the following OIDs are unsupported but we don't want them to give notices when calling saveX509(). + case 'id-pe-logotype': // http://www.ietf.org/rfc/rfc3709.txt + case 'entrustVersInfo': + // http://support.microsoft.com/kb/287547 + case '1.3.6.1.4.1.311.20.2': // szOID_ENROLL_CERTTYPE_EXTENSION + case '1.3.6.1.4.1.311.21.1': // szOID_CERTSRV_CA_VERSION + // "SET Secure Electronic Transaction Specification" + // http://www.maithean.com/docs/set_bk3.pdf + case '2.23.42.7.0': // id-set-hashedRootKey + return true; + + // CSR attributes + case 'pkcs-9-at-unstructuredName': + return $this->PKCS9String; + case 'pkcs-9-at-challengePassword': + return $this->DirectoryString; + case 'pkcs-9-at-extensionRequest': + return $this->Extensions; + + // CRL extensions. + case 'id-ce-cRLNumber': + return $this->CRLNumber; + case 'id-ce-deltaCRLIndicator': + return $this->CRLNumber; + case 'id-ce-issuingDistributionPoint': + return $this->IssuingDistributionPoint; + case 'id-ce-freshestCRL': + return $this->CRLDistributionPoints; + case 'id-ce-cRLReasons': + return $this->CRLReason; + case 'id-ce-invalidityDate': + return $this->InvalidityDate; + case 'id-ce-certificateIssuer': + return $this->CertificateIssuer; + case 'id-ce-holdInstructionCode': + return $this->HoldInstructionCode; + } + + return false; + } + + /** + * Load an X.509 certificate as a certificate authority + * + * @param String $cert + * @access public + * @return Boolean + */ + function loadCA($cert) + { + $olddn = $this->dn; + $oldcert = $this->currentCert; + $oldsigsubj = $this->signatureSubject; + $oldkeyid = $this->currentKeyIdentifier; + + $cert = $this->loadX509($cert); + if (!$cert) { + $this->dn = $olddn; + $this->currentCert = $oldcert; + $this->signatureSubject = $oldsigsubj; + $this->currentKeyIdentifier = $oldkeyid; + + return false; + } + + /* From RFC5280 "PKIX Certificate and CRL Profile": + + If the keyUsage extension is present, then the subject public key + MUST NOT be used to verify signatures on certificates or CRLs unless + the corresponding keyCertSign or cRLSign bit is set. */ + //$keyUsage = $this->getExtension('id-ce-keyUsage'); + //if ($keyUsage && !in_array('keyCertSign', $keyUsage)) { + // return false; + //} + + /* From RFC5280 "PKIX Certificate and CRL Profile": + + The cA boolean indicates whether the certified public key may be used + to verify certificate signatures. If the cA boolean is not asserted, + then the keyCertSign bit in the key usage extension MUST NOT be + asserted. If the basic constraints extension is not present in a + version 3 certificate, or the extension is present but the cA boolean + is not asserted, then the certified public key MUST NOT be used to + verify certificate signatures. */ + //$basicConstraints = $this->getExtension('id-ce-basicConstraints'); + //if (!$basicConstraints || !$basicConstraints['cA']) { + // return false; + //} + + $this->CAs[] = $cert; + + $this->dn = $olddn; + $this->currentCert = $oldcert; + $this->signatureSubject = $oldsigsubj; + + return true; + } + + /** + * Validate an X.509 certificate against a URL + * + * From RFC2818 "HTTP over TLS": + * + * Matching is performed using the matching rules specified by + * [RFC2459]. If more than one identity of a given type is present in + * the certificate (e.g., more than one dNSName name, a match in any one + * of the set is considered acceptable.) Names may contain the wildcard + * character * which is considered to match any single domain name + * component or component fragment. E.g., *.a.com matches foo.a.com but + * not bar.foo.a.com. f*.com matches foo.com but not bar.com. + * + * @param String $url + * @access public + * @return Boolean + */ + function validateURL($url) + { + if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) { + return false; + } + + $components = parse_url($url); + if (!isset($components['host'])) { + return false; + } + + if ($names = $this->getExtension('id-ce-subjectAltName')) { + foreach ($names as $key => $value) { + $value = str_replace(array('.', '*'), array('\.', '[^.]*'), $value); + switch ($key) { + case 'dNSName': + /* From RFC2818 "HTTP over TLS": + + If a subjectAltName extension of type dNSName is present, that MUST + be used as the identity. Otherwise, the (most specific) Common Name + field in the Subject field of the certificate MUST be used. Although + the use of the Common Name is existing practice, it is deprecated and + Certification Authorities are encouraged to use the dNSName instead. */ + if (preg_match('#^' . $value . '$#', $components['host'])) { + return true; + } + break; + case 'iPAddress': + /* From RFC2818 "HTTP over TLS": + + In some cases, the URI is specified as an IP address rather than a + hostname. In this case, the iPAddress subjectAltName must be present + in the certificate and must exactly match the IP in the URI. */ + if (preg_match('#(?:\d{1-3}\.){4}#', $components['host'] . '.') && preg_match('#^' . $value . '$#', $components['host'])) { + return true; + } + } + } + return false; + } + + if ($value = $this->getDNProp('id-at-commonName')) { + $value = str_replace(array('.', '*'), array('\.', '[^.]*'), $value[0]); + return preg_match('#^' . $value . '$#', $components['host']); + } + + return false; + } + + /** + * Validate a date + * + * If $date isn't defined it is assumed to be the current date. + * + * @param Integer $date optional + * @access public + */ + function validateDate($date = NULL) + { + if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) { + return false; + } + + if (!isset($date)) { + $date = time(); + } + + $notBefore = $this->currentCert['tbsCertificate']['validity']['notBefore']; + $notBefore = isset($notBefore['generalTime']) ? $notBefore['generalTime'] : $notBefore['utcTime']; + + $notAfter = $this->currentCert['tbsCertificate']['validity']['notAfter']; + $notAfter = isset($notAfter['generalTime']) ? $notAfter['generalTime'] : $notAfter['utcTime']; + + switch (true) { + case $date < @strtotime($notBefore): + case $date > @strtotime($notAfter): + return false; + } + + return true; + } + + /** + * Validate a signature + * + * Works on X.509 certs, CSR's and CRL's. + * Returns true if the signature is verified, false if it is not correct or NULL on error + * + * The behavior of this function is inspired by {@link http://php.net/openssl-verify openssl_verify}. + * + * @param Integer $options optional + * @access public + * @return Mixed + */ + function validateSignature($options = 0) + { + if (!is_array($this->currentCert) || !isset($this->signatureSubject)) { + return 0; + } + + /* TODO: + "emailAddress attribute values are not case-sensitive (e.g., "subscriber@example.com" is the same as "SUBSCRIBER@EXAMPLE.COM")." + -- http://tools.ietf.org/html/rfc5280#section-4.1.2.6 + + implement pathLenConstraint in the id-ce-basicConstraints extension */ + + switch (true) { + case isset($this->currentCert['tbsCertificate']): + // self-signed cert + if ($this->currentCert['tbsCertificate']['issuer'] === $this->currentCert['tbsCertificate']['subject']) { + $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier'); + $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier'); + switch (true) { + case !is_array($authorityKey): + case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID: + $signingCert = $this->currentCert; // working cert + } + } + + if (!empty($this->CAs)) { + for ($i = 0; $i < count($this->CAs); $i++) { + // even if the cert is a self-signed one we still want to see if it's a CA; + // if not, we'll conditionally return an error + $ca = $this->CAs[$i]; + if ($this->currentCert['tbsCertificate']['issuer'] === $ca['tbsCertificate']['subject']) { + $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier'); + $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca); + switch (true) { + case !is_array($authorityKey): + case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID: + $signingCert = $ca; // working cert + break 2; + } + } + } + if (count($this->CAs) == $i && ($options & FILE_X509_VALIDATE_SIGNATURE_BY_CA)) { + return false; + } + } elseif (!isset($signingCert) || ($options & FILE_X509_VALIDATE_SIGNATURE_BY_CA)) { + return false; + } + return $this->_validateSignature( + $signingCert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'], + $signingCert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'], + $this->currentCert['signatureAlgorithm']['algorithm'], + substr(base64_decode($this->currentCert['signature']), 1), + $this->signatureSubject + ); + case isset($this->currentCert['certificationRequestInfo']): + return $this->_validateSignature( + $this->currentCert['certificationRequestInfo']['subjectPKInfo']['algorithm']['algorithm'], + $this->currentCert['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'], + $this->currentCert['signatureAlgorithm']['algorithm'], + substr(base64_decode($this->currentCert['signature']), 1), + $this->signatureSubject + ); + case isset($this->currentCert['publicKeyAndChallenge']): + return $this->_validateSignature( + $this->currentCert['publicKeyAndChallenge']['spki']['algorithm']['algorithm'], + $this->currentCert['publicKeyAndChallenge']['spki']['subjectPublicKey'], + $this->currentCert['signatureAlgorithm']['algorithm'], + substr(base64_decode($this->currentCert['signature']), 1), + $this->signatureSubject + ); + case isset($this->currentCert['tbsCertList']): + if (!empty($this->CAs)) { + for ($i = 0; $i < count($this->CAs); $i++) { + $ca = $this->CAs[$i]; + if ($this->currentCert['tbsCertList']['issuer'] === $ca['tbsCertificate']['subject']) { + $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier'); + $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca); + switch (true) { + case !is_array($authorityKey): + case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID: + $signingCert = $ca; // working cert + break 2; + } + } + } + } + if (!isset($signingCert)) { + return false; + } + return $this->_validateSignature( + $signingCert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'], + $signingCert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'], + $this->currentCert['signatureAlgorithm']['algorithm'], + substr(base64_decode($this->currentCert['signature']), 1), + $this->signatureSubject + ); + default: + return false; + } + } + + /** + * Validates a signature + * + * Returns true if the signature is verified, false if it is not correct or NULL on error + * + * @param String $publicKeyAlgorithm + * @param String $publicKey + * @param String $signatureAlgorithm + * @param String $signature + * @param String $signatureSubject + * @access private + * @return Integer + */ + function _validateSignature($publicKeyAlgorithm, $publicKey, $signatureAlgorithm, $signature, $signatureSubject) + { + switch ($publicKeyAlgorithm) { + case 'rsaEncryption': + if (!class_exists('Crypt_RSA')) { + require_once('Crypt/RSA.php'); + } + $rsa = new Crypt_RSA(); + $rsa->loadKey($publicKey); + + switch ($signatureAlgorithm) { + case 'md2WithRSAEncryption': + case 'md5WithRSAEncryption': + case 'sha1WithRSAEncryption': + case 'sha224WithRSAEncryption': + case 'sha256WithRSAEncryption': + case 'sha384WithRSAEncryption': + case 'sha512WithRSAEncryption': + $rsa->setHash(preg_replace('#WithRSAEncryption$#', '', $signatureAlgorithm)); + $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1); + if (!@$rsa->verify($signatureSubject, $signature)) { + return false; + } + break; + default: + return NULL; + } + break; + default: + return NULL; + } + + return true; + } + + /** + * Reformat public keys + * + * Reformats a public key to a format supported by phpseclib (if applicable) + * + * @param String $algorithm + * @param String $key + * @access private + * @return String + */ + function _reformatKey($algorithm, $key) + { + switch ($algorithm) { + case 'rsaEncryption': + return + "-----BEGIN PUBLIC KEY-----\r\n" . + // subjectPublicKey is stored as a bit string in X.509 certs. the first byte of a bit string represents how many bits + // in the last byte should be ignored. the following only supports non-zero stuff but as none of the X.509 certs Firefox + // uses as a cert authority actually use a non-zero bit I think it's safe to assume that none do. + chunk_split(base64_encode(substr(base64_decode($key), 1)), 64) . + '-----END PUBLIC KEY-----'; + default: + return $key; + } + } + + /** + * "Normalizes" a Distinguished Name property + * + * @param String $propName + * @access private + * @return Mixed + */ + function _translateDNProp($propName) + { + switch (strtolower($propName)) { + case 'id-at-countryname': + case 'countryname': + case 'c': + return 'id-at-countryName'; + case 'id-at-organizationname': + case 'organizationname': + case 'o': + return 'id-at-organizationName'; + case 'id-at-dnqualifier': + case 'dnqualifier': + return 'id-at-dnQualifier'; + case 'id-at-commonname': + case 'commonname': + case 'cn': + return 'id-at-commonName'; + case 'id-at-stateorprovinceName': + case 'stateorprovincename': + case 'state': + case 'province': + case 'provincename': + case 'st': + return 'id-at-stateOrProvinceName'; + case 'id-at-localityname': + case 'localityname': + case 'l': + return 'id-at-localityName'; + case 'id-emailaddress': + case 'emailaddress': + return 'pkcs-9-at-emailAddress'; + case 'id-at-serialnumber': + case 'serialnumber': + return 'id-at-serialNumber'; + case 'id-at-postalcode': + case 'postalcode': + return 'id-at-postalCode'; + case 'id-at-streetaddress': + case 'streetaddress': + return 'id-at-streetAddress'; + case 'id-at-name': + case 'name': + return 'id-at-name'; + case 'id-at-givenname': + case 'givenname': + return 'id-at-givenName'; + case 'id-at-surname': + case 'surname': + case 'sn': + return 'id-at-surname'; + case 'id-at-initials': + case 'initials': + return 'id-at-initials'; + case 'id-at-generationqualifier': + case 'generationqualifier': + return 'id-at-generationQualifier'; + case 'id-at-organizationalunitname': + case 'organizationalunitname': + case 'ou': + return 'id-at-organizationalUnitName'; + case 'id-at-pseudonym': + case 'pseudonym': + return 'id-at-pseudonym'; + case 'id-at-title': + case 'title': + return 'id-at-title'; + case 'id-at-description': + case 'description': + return 'id-at-description'; + case 'id-at-role': + case 'role': + return 'id-at-role'; + case 'id-at-uniqueidentifier': + case 'uniqueidentifier': + case 'x500uniqueidentifier': + return 'id-at-uniqueIdentifier'; + default: + return false; + } + } + + /** + * Set a Distinguished Name property + * + * @param String $propName + * @param Mixed $propValue + * @param String $type optional + * @access public + * @return Boolean + */ + function setDNProp($propName, $propValue, $type = 'utf8String') + { + if (empty($this->dn)) { + $this->dn = array('rdnSequence' => array()); + } + + if (($propName = $this->_translateDNProp($propName)) === false) { + return false; + } + + foreach ((array) $propValue as $v) { + if (!is_array($v) && isset($type)) { + $v = array($type => $v); + } + $this->dn['rdnSequence'][] = array( + array( + 'type' => $propName, + 'value'=> $v + ) + ); + } + + return true; + } + + /** + * Remove Distinguished Name properties + * + * @param String $propName + * @access public + */ + function removeDNProp($propName) + { + if (empty($this->dn)) { + return; + } + + if (($propName = $this->_translateDNProp($propName)) === false) { + return; + } + + $dn = &$this->dn['rdnSequence']; + $size = count($dn); + for ($i = 0; $i < $size; $i++) { + if ($dn[$i][0]['type'] == $propName) { + unset($dn[$i]); + } + } + + $dn = array_values($dn); + } + + /** + * Get Distinguished Name properties + * + * @param String $propName + * @param Array $dn optional + * @param Boolean $withType optional + * @return Mixed + * @access public + */ + function getDNProp($propName, $dn = NULL, $withType = false) + { + if (!isset($dn)) { + $dn = $this->dn; + } + + if (empty($dn)) { + return false; + } + + if (($propName = $this->_translateDNProp($propName)) === false) { + return false; + } + + $dn = $dn['rdnSequence']; + $result = array(); + $asn1 = new File_ASN1(); + for ($i = 0; $i < count($dn); $i++) { + if ($dn[$i][0]['type'] == $propName) { + $v = $dn[$i][0]['value']; + if (!$withType && is_array($v)) { + foreach ($v as $type => $s) { + $type = array_search($type, $asn1->ANYmap, true); + if ($type !== false && isset($asn1->stringTypeSize[$type])) { + $s = $asn1->convert($s, $type); + if ($s !== false) { + $v = $s; + break; + } + } + } + if (is_array($v)) { + $v = array_pop($v); // Always strip data type. + } + } + $result[] = $v; + } + } + + return $result; + } + + /** + * Set a Distinguished Name + * + * @param Mixed $dn + * @param Boolean $merge optional + * @param String $type optional + * @access public + * @return Boolean + */ + function setDN($dn, $merge = false, $type = 'utf8String') + { + if (!$merge) { + $this->dn = NULL; + } + + if (is_array($dn)) { + if (isset($dn['rdnSequence'])) { + $this->dn = $dn; // No merge here. + return true; + } + + // handles stuff generated by openssl_x509_parse() + foreach ($dn as $prop => $value) { + if (!$this->setDNProp($prop, $value, $type)) { + return false; + } + } + return true; + } + + // handles everything else + $results = preg_split('#((?:^|, *|/)(?:C=|O=|OU=|CN=|L=|ST=|SN=|postalCode=|streetAddress=|emailAddress=|serialNumber=|organizationalUnitName=|title=|description=|role=|x500UniqueIdentifier=))#', $dn, -1, PREG_SPLIT_DELIM_CAPTURE); + for ($i = 1; $i < count($results); $i+=2) { + $prop = trim($results[$i], ', =/'); + $value = $results[$i + 1]; + if (!$this->setDNProp($prop, $value, $type)) { + return false; + } + } + + return true; + } + + /** + * Get the Distinguished Name for a certificates subject + * + * @param Mixed $format optional + * @param Array $dn optional + * @access public + * @return Boolean + */ + function getDN($format = FILE_X509_DN_ARRAY, $dn = NULL) + { + if (!isset($dn)) { + $dn = isset($this->currentCert['tbsCertList']) ? $this->currentCert['tbsCertList']['issuer'] : $this->dn; + } + + switch ((int) $format) { + case FILE_X509_DN_ARRAY: + return $dn; + case FILE_X509_DN_ASN1: + $asn1 = new File_ASN1(); + $asn1->loadOIDs($this->oids); + $filters = array(); + $filters['rdnSequence']['value'] = array('type' => FILE_ASN1_TYPE_UTF8_STRING); + $asn1->loadFilters($filters); + return $asn1->encodeDER($dn, $this->Name); + case FILE_X509_DN_OPENSSL: + $dn = $this->getDN(FILE_X509_DN_STRING, $dn); + if ($dn === false) { + return false; + } + $attrs = preg_split('#((?:^|, *|/)[a-z][a-z0-9]*=)#i', $dn, -1, PREG_SPLIT_DELIM_CAPTURE); + $dn = array(); + for ($i = 1; $i < count($attrs); $i += 2) { + $prop = trim($attrs[$i], ', =/'); + $value = $attrs[$i + 1]; + if (!isset($dn[$prop])) { + $dn[$prop] = $value; + } else { + $dn[$prop] = array_merge((array) $dn[$prop], array($value)); + } + } + return $dn; + case FILE_X509_DN_CANON: + // No SEQUENCE around RDNs and all string values normalized as + // trimmed lowercase UTF-8 with all spacing as one blank. + $asn1 = new File_ASN1(); + $asn1->loadOIDs($this->oids); + $filters = array(); + $filters['value'] = array('type' => FILE_ASN1_TYPE_UTF8_STRING); + $asn1->loadFilters($filters); + $result = ''; + foreach ($dn['rdnSequence'] as $rdn) { + foreach ($rdn as &$attr) { + if (is_array($attr['value'])) { + foreach ($attr['value'] as $type => $v) { + $type = array_search($type, $asn1->ANYmap, true); + if ($type !== false && isset($asn1->stringTypeSize[$type])) { + $v = $asn1->convert($v, $type); + if ($v !== false) { + $v = preg_replace('/\s+/', ' ', $v); + $attr['value'] = strtolower(trim($v)); + break; + } + } + } + } + } + $result .= $asn1->encodeDER($rdn, $this->RelativeDistinguishedName); + } + return $result; + case FILE_X509_DN_HASH: + $dn = $this->getDN(FILE_X509_DN_CANON, $dn); + if (!class_exists('Crypt_Hash')) { + require_once('Crypt/Hash.php'); + } + $hash = new Crypt_Hash('sha1'); + $hash = $hash->hash($dn); + extract(unpack('Vhash', $hash)); + return strtolower(bin2hex(pack('N', $hash))); + } + + // Defaut is to return a string. + $start = true; + $output = ''; + $asn1 = new File_ASN1(); + foreach ($dn['rdnSequence'] as $field) { + $prop = $field[0]['type']; + $value = $field[0]['value']; + + $delim = ', '; + switch ($prop) { + case 'id-at-countryName': + $desc = 'C='; + break; + case 'id-at-stateOrProvinceName': + $desc = 'ST='; + break; + case 'id-at-organizationName': + $desc = 'O='; + break; + case 'id-at-organizationalUnitName': + $desc = 'OU='; + break; + case 'id-at-commonName': + $desc = 'CN='; + break; + case 'id-at-localityName': + $desc = 'L='; + break; + case 'id-at-surname': + $desc = 'SN='; + break; + case 'id-at-uniqueIdentifier': + $delim = '/'; + $desc = 'x500UniqueIdentifier='; + break; + default: + $delim = '/'; + $desc = preg_replace('#.+-([^-]+)$#', '$1', $prop) . '='; + } + + if (!$start) { + $output.= $delim; + } + if (is_array($value)) { + foreach ($value as $type => $v) { + $type = array_search($type, $asn1->ANYmap, true); + if ($type !== false && isset($asn1->stringTypeSize[$type])) { + $v = $asn1->convert($v, $type); + if ($v !== false) { + $value = $v; + break; + } + } + } + if (is_array($value)) { + $value = array_pop($value); // Always strip data type. + } + } + $output.= $desc . $value; + $start = false; + } + + return $output; + } + + /** + * Get the Distinguished Name for a certificate/crl issuer + * + * @param Integer $format optional + * @access public + * @return Mixed + */ + function getIssuerDN($format = FILE_X509_DN_ARRAY) + { + switch (true) { + case !isset($this->currentCert) || !is_array($this->currentCert): + break; + case isset($this->currentCert['tbsCertificate']): + return $this->getDN($format, $this->currentCert['tbsCertificate']['issuer']); + case isset($this->currentCert['tbsCertList']): + return $this->getDN($format, $this->currentCert['tbsCertList']['issuer']); + } + + return false; + } + + /** + * Get the Distinguished Name for a certificate/csr subject + * Alias of getDN() + * + * @param Integer $format optional + * @access public + * @return Mixed + */ + function getSubjectDN($format = FILE_X509_DN_ARRAY) + { + switch (true) { + case !empty($this->dn): + return $this->getDN($format); + case !isset($this->currentCert) || !is_array($this->currentCert): + break; + case isset($this->currentCert['tbsCertificate']): + return $this->getDN($format, $this->currentCert['tbsCertificate']['subject']); + case isset($this->currentCert['certificationRequestInfo']): + return $this->getDN($format, $this->currentCert['certificationRequestInfo']['subject']); + } + + return false; + } + + /** + * Get an individual Distinguished Name property for a certificate/crl issuer + * + * @param String $propName + * @param Boolean $withType optional + * @access public + * @return Mixed + */ + function getIssuerDNProp($propName, $withType = false) + { + switch (true) { + case !isset($this->currentCert) || !is_array($this->currentCert): + break; + case isset($this->currentCert['tbsCertificate']): + return $this->getDNProp($propname, $this->currentCert['tbsCertificate']['issuer'], $withType); + case isset($this->currentCert['tbsCertList']): + return $this->getDNProp($propname, $this->currentCert['tbsCertList']['issuer'], $withType); + } + + return false; + } + + /** + * Get an individual Distinguished Name property for a certificate/csr subject + * + * @param String $propName + * @param Boolean $withType optional + * @access public + * @return Mixed + */ + function getSubjectDNProp($propName, $withType = false) + { + switch (true) { + case !empty($this->dn): + return $this->getDNProp($propName, NULL, $withType); + case !isset($this->currentCert) || !is_array($this->currentCert): + break; + case isset($this->currentCert['tbsCertificate']): + return $this->getDNProp($propName, $this->currentCert['tbsCertificate']['subject'], $withType); + case isset($this->currentCert['certificationRequestInfo']): + return $this->getDNProp($propname, $this->currentCert['certificationRequestInfo']['subject'], $withType); + } + + return false; + } + + /** + * Get the certificate chain for the current cert + * + * @access public + * @return Mixed + */ + function getChain() + { + $chain = array($this->currentCert); + + if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) { + return false; + } + if (empty($this->CAs)) { + return $chain; + } + while (true) { + $currentCert = $chain[count($chain) - 1]; + for ($i = 0; $i < count($this->CAs); $i++) { + $ca = $this->CAs[$i]; + if ($currentCert['tbsCertificate']['issuer'] === $ca['tbsCertificate']['subject']) { + $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier', $currentCert); + $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca); + switch (true) { + case !is_array($authorityKey): + case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID: + if ($currentCert === $ca) { + break 3; + } + $chain[] = $ca; + break 2; + } + } + } + if ($i == count($this->CAs)) { + break; + } + } + foreach ($chain as $key=>$value) { + $chain[$key] = new File_X509(); + $chain[$key]->loadX509($value); + } + return $chain; + } + + /** + * Set public key + * + * Key needs to be a Crypt_RSA object + * + * @param Object $key + * @access public + * @return Boolean + */ + function setPublicKey($key) + { + $this->publicKey = $key; + } + + /** + * Set private key + * + * Key needs to be a Crypt_RSA object + * + * @param Object $key + * @access public + */ + function setPrivateKey($key) + { + $this->privateKey = $key; + } + + /** + * Gets the public key + * + * Returns a Crypt_RSA object or a false. + * + * @access public + * @return Mixed + */ + function getPublicKey() + { + if (isset($this->publicKey)) { + return $this->publicKey; + } + + if (isset($this->currentCert) && is_array($this->currentCert)) { + foreach (array('tbsCertificate/subjectPublicKeyInfo', 'certificationRequestInfo/subjectPKInfo') as $path) { + $keyinfo = $this->_subArray($this->currentCert, $path); + if (!empty($keyinfo)) { + break; + } + } + } + if (empty($keyinfo)) { + return false; + } + + $key = $keyinfo['subjectPublicKey']; + + switch ($keyinfo['algorithm']['algorithm']) { + case 'rsaEncryption': + if (!class_exists('Crypt_RSA')) { + require_once('Crypt/RSA.php'); + } + $publicKey = new Crypt_RSA(); + $publicKey->loadKey($key); + $publicKey->setPublicKey(); + break; + default: + return false; + } + + return $publicKey; + } + + /** + * Load a Certificate Signing Request + * + * @param String $csr + * @access public + * @return Mixed + */ + function loadCSR($csr) + { + if (is_array($csr) && isset($csr['certificationRequestInfo'])) { + unset($this->currentCert); + unset($this->currentKeyIdentifier); + unset($this->signatureSubject); + $this->dn = $csr['certificationRequestInfo']['subject']; + if (!isset($this->dn)) { + return false; + } + + $this->currentCert = $csr; + return $csr; + } + + // see http://tools.ietf.org/html/rfc2986 + + $asn1 = new File_ASN1(); + + $temp = preg_replace('#^(?:[^-].+[\r\n]+)+|-.+-|[\r\n]| #', '', $csr); + $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false; + if ($temp != false) { + $csr = $temp; + } + $orig = $csr; + + if ($csr === false) { + $this->currentCert = false; + return false; + } + + $asn1->loadOIDs($this->oids); + $decoded = $asn1->decodeBER($csr); + + if (empty($decoded)) { + $this->currentCert = false; + return false; + } + + $csr = $asn1->asn1map($decoded[0], $this->CertificationRequest); + if (!isset($csr) || $csr === false) { + $this->currentCert = false; + return false; + } + + $this->dn = $csr['certificationRequestInfo']['subject']; + $this->_mapInAttributes($csr, 'certificationRequestInfo/attributes', $asn1); + + $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']); + + $algorithm = &$csr['certificationRequestInfo']['subjectPKInfo']['algorithm']['algorithm']; + $key = &$csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']; + $key = $this->_reformatKey($algorithm, $key); + + switch ($algorithm) { + case 'rsaEncryption': + if (!class_exists('Crypt_RSA')) { + require_once('Crypt/RSA.php'); + } + $this->publicKey = new Crypt_RSA(); + $this->publicKey->loadKey($key); + $this->publicKey->setPublicKey(); + break; + default: + $this->publicKey = NULL; + } + + $this->currentKeyIdentifier = NULL; + $this->currentCert = $csr; + + return $csr; + } + + /** + * Save CSR request + * + * @param Array $csr + * @param Integer $format optional + * @access public + * @return String + */ + function saveCSR($csr, $format = FILE_X509_FORMAT_PEM) + { + if (!is_array($csr) || !isset($csr['certificationRequestInfo'])) { + return false; + } + + switch (true) { + case !($algorithm = $this->_subArray($csr, 'certificationRequestInfo/subjectPKInfo/algorithm/algorithm')): + case is_object($csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']); + break; + default: + switch ($algorithm) { + case 'rsaEncryption': + $csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'] = + base64_encode("\0" . base64_decode(preg_replace('#-.+-|[\r\n]#', '', $csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']))); + } + } + + $asn1 = new File_ASN1(); + + $asn1->loadOIDs($this->oids); + + $filters = array(); + $filters['certificationRequestInfo']['subject']['rdnSequence']['value'] = + array('type' => FILE_ASN1_TYPE_UTF8_STRING); + + $asn1->loadFilters($filters); + + $this->_mapOutAttributes($csr, 'certificationRequestInfo/attributes', $asn1); + $csr = $asn1->encodeDER($csr, $this->CertificationRequest); + + switch ($format) { + case FILE_X509_FORMAT_DER: + return $csr; + // case FILE_X509_FORMAT_PEM: + default: + return "-----BEGIN CERTIFICATE REQUEST-----\r\n" . chunk_split(base64_encode($csr), 64) . '-----END CERTIFICATE REQUEST-----'; + } + } + + /** + * Load a SPKAC CSR + * + * SPKAC's are produced by the HTML5 keygen element: + * + * https://developer.mozilla.org/en-US/docs/HTML/Element/keygen + * + * @param String $csr + * @access public + * @return Mixed + */ + function loadSPKAC($csr) + { + if (is_array($csr) && isset($csr['publicKeyAndChallenge'])) { + unset($this->currentCert); + unset($this->currentKeyIdentifier); + unset($this->signatureSubject); + $this->currentCert = $csr; + return $csr; + } + + // see http://www.w3.org/html/wg/drafts/html/master/forms.html#signedpublickeyandchallenge + + $asn1 = new File_ASN1(); + + $temp = preg_replace('#(?:^[^=]+=)|[\r\n\\\]#', '', $csr); + $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false; + if ($temp != false) { + $csr = $temp; + } + $orig = $csr; + + if ($csr === false) { + $this->currentCert = false; + return false; + } + + $asn1->loadOIDs($this->oids); + $decoded = $asn1->decodeBER($csr); + + if (empty($decoded)) { + $this->currentCert = false; + return false; + } + + $csr = $asn1->asn1map($decoded[0], $this->SignedPublicKeyAndChallenge); + + if (!isset($csr) || $csr === false) { + $this->currentCert = false; + return false; + } + + $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']); + + $algorithm = &$csr['publicKeyAndChallenge']['spki']['algorithm']['algorithm']; + $key = &$csr['publicKeyAndChallenge']['spki']['subjectPublicKey']; + $key = $this->_reformatKey($algorithm, $key); + + switch ($algorithm) { + case 'rsaEncryption': + if (!class_exists('Crypt_RSA')) { + require_once('Crypt/RSA.php'); + } + $this->publicKey = new Crypt_RSA(); + $this->publicKey->loadKey($key); + $this->publicKey->setPublicKey(); + break; + default: + $this->publicKey = NULL; + } + + $this->currentKeyIdentifier = NULL; + $this->currentCert = $csr; + + return $csr; + } + + /** + * Load a Certificate Revocation List + * + * @param String $crl + * @access public + * @return Mixed + */ + function loadCRL($crl) + { + if (is_array($crl) && isset($crl['tbsCertList'])) { + $this->currentCert = $crl; + unset($this->signatureSubject); + return $crl; + } + + $asn1 = new File_ASN1(); + + $temp = preg_replace('#^(?:[^-].+[\r\n]+)+|-.+-|[\r\n]| #', '', $crl); + $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false; + if ($temp != false) { + $crl = $temp; + } + $orig = $crl; + + if ($crl === false) { + $this->currentCert = false; + return false; + } + + $asn1->loadOIDs($this->oids); + $decoded = $asn1->decodeBER($crl); + + if (empty($decoded)) { + $this->currentCert = false; + return false; + } + + $crl = $asn1->asn1map($decoded[0], $this->CertificateList); + if (!isset($crl) || $crl === false) { + $this->currentCert = false; + return false; + } + + $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']); + + $this->_mapInExtensions($crl, 'tbsCertList/crlExtensions', $asn1); + $rclist = &$this->_subArray($crl,'tbsCertList/revokedCertificates'); + if (is_array($rclist)) { + foreach ($rclist as $i => $extension) { + $this->_mapInExtensions($rclist, "$i/crlEntryExtensions", $asn1); + } + } + + $this->currentKeyIdentifier = NULL; + $this->currentCert = $crl; + + return $crl; + } + + /** + * Save Certificate Revocation List. + * + * @param Array $crl + * @param Integer $format optional + * @access public + * @return String + */ + function saveCRL($crl, $format = FILE_X509_FORMAT_PEM) + { + if (!is_array($crl) || !isset($crl['tbsCertList'])) { + return false; + } + + $asn1 = new File_ASN1(); + + $asn1->loadOIDs($this->oids); + + $filters = array(); + $filters['tbsCertList']['issuer']['rdnSequence']['value'] = + $filters['tbsCertList']['signature']['parameters'] = + $filters['signatureAlgorithm']['parameters'] = + array('type' => FILE_ASN1_TYPE_UTF8_STRING); + + if (empty($crl['tbsCertList']['signature']['parameters'])) { + $filters['tbsCertList']['signature']['parameters'] = + array('type' => FILE_ASN1_TYPE_NULL); + } + + if (empty($crl['signatureAlgorithm']['parameters'])) { + $filters['signatureAlgorithm']['parameters'] = + array('type' => FILE_ASN1_TYPE_NULL); + } + + $asn1->loadFilters($filters); + + $this->_mapOutExtensions($crl, 'tbsCertList/crlExtensions', $asn1); + $rclist = &$this->_subArray($crl,'tbsCertList/revokedCertificates'); + if (is_array($rclist)) { + foreach ($rclist as $i => $extension) { + $this->_mapOutExtensions($rclist, "$i/crlEntryExtensions", $asn1); + } + } + + $crl = $asn1->encodeDER($crl, $this->CertificateList); + + switch ($format) { + case FILE_X509_FORMAT_DER: + return $crl; + // case FILE_X509_FORMAT_PEM: + default: + return "-----BEGIN X509 CRL-----\r\n" . chunk_split(base64_encode($crl), 64) . '-----END X509 CRL-----'; + } + } + + /** + * Sign an X.509 certificate + * + * $issuer's private key needs to be loaded. + * $subject can be either an existing X.509 cert (if you want to resign it), + * a CSR or something with the DN and public key explicitly set. + * + * @param File_X509 $issuer + * @param File_X509 $subject + * @param String $signatureAlgorithm optional + * @access public + * @return Mixed + */ + function sign($issuer, $subject, $signatureAlgorithm = 'sha1WithRSAEncryption') + { + if (!is_object($issuer->privateKey) || empty($issuer->dn)) { + return false; + } + + if (isset($subject->publicKey) && !($subjectPublicKey = $subject->_formatSubjectPublicKey())) { + return false; + } + + $currentCert = isset($this->currentCert) ? $this->currentCert : NULL; + $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject: NULL; + + if (isset($subject->currentCert) && is_array($subject->currentCert) && isset($subject->currentCert['tbsCertificate'])) { + $this->currentCert = $subject->currentCert; + $this->currentCert['tbsCertificate']['signature']['algorithm'] = + $this->currentCert['signatureAlgorithm']['algorithm'] = + $signatureAlgorithm; + if (!empty($this->startDate)) { + $this->currentCert['tbsCertificate']['validity']['notBefore']['generalTime'] = $this->startDate; + unset($this->currentCert['tbsCertificate']['validity']['notBefore']['utcTime']); + } + if (!empty($this->endDate)) { + $this->currentCert['tbsCertificate']['validity']['notAfter']['generalTime'] = $this->endDate; + unset($this->currentCert['tbsCertificate']['validity']['notAfter']['utcTime']); + } + if (!empty($this->serialNumber)) { + $this->currentCert['tbsCertificate']['serialNumber'] = $this->serialNumber; + } + if (!empty($subject->dn)) { + $this->currentCert['tbsCertificate']['subject'] = $subject->dn; + } + if (!empty($subject->publicKey)) { + $this->currentCert['tbsCertificate']['subjectPublicKeyInfo'] = $subjectPublicKey; + } + $this->removeExtension('id-ce-authorityKeyIdentifier'); + if (isset($subject->domains)) { + $this->removeExtension('id-ce-subjectAltName'); + } + } else if (isset($subject->currentCert) && is_array($subject->currentCert) && isset($subject->currentCert['tbsCertList'])) { + return false; + } else { + if (!isset($subject->publicKey)) { + return false; + } + + $startDate = !empty($this->startDate) ? $this->startDate : @date('M j H:i:s Y T'); + $endDate = !empty($this->endDate) ? $this->endDate : @date('M j H:i:s Y T', strtotime('+1 year')); + $serialNumber = !empty($this->serialNumber) ? $this->serialNumber : new Math_BigInteger(); + + $this->currentCert = array( + 'tbsCertificate' => + array( + 'version' => 'v3', + 'serialNumber' => $serialNumber, // $this->setserialNumber() + 'signature' => array('algorithm' => $signatureAlgorithm), + 'issuer' => false, // this is going to be overwritten later + 'validity' => array( + 'notBefore' => array('generalTime' => $startDate), // $this->setStartDate() + 'notAfter' => array('generalTime' => $endDate) // $this->setEndDate() + ), + 'subject' => $subject->dn, + 'subjectPublicKeyInfo' => $subjectPublicKey + ), + 'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm), + 'signature' => false // this is going to be overwritten later + ); + + // Copy extensions from CSR. + $csrexts = $subject->getAttribute('pkcs-9-at-extensionRequest', 0); + + if (!empty($csrexts)) { + $this->currentCert['tbsCertificate']['extensions'] = $csrexts; + } + } + + $this->currentCert['tbsCertificate']['issuer'] = $issuer->dn; + + if (isset($issuer->currentKeyIdentifier)) { + $this->setExtension('id-ce-authorityKeyIdentifier', array( + //'authorityCertIssuer' => array( + // array( + // 'directoryName' => $issuer->dn + // ) + //), + 'keyIdentifier' => $issuer->currentKeyIdentifier + ) + ); + //$extensions = &$this->currentCert['tbsCertificate']['extensions']; + //if (isset($issuer->serialNumber)) { + // $extensions[count($extensions) - 1]['authorityCertSerialNumber'] = $issuer->serialNumber; + //} + //unset($extensions); + } + + if (isset($subject->currentKeyIdentifier)) { + $this->setExtension('id-ce-subjectKeyIdentifier', $subject->currentKeyIdentifier); + } + + if (isset($subject->domains) && count($subject->domains) > 1) { + $this->setExtension('id-ce-subjectAltName', + array_map(array('File_X509', '_dnsName'), $subject->domains)); + } + + if ($this->caFlag) { + $keyUsage = $this->getExtension('id-ce-keyUsage'); + if (!$keyUsage) { + $keyUsage = array(); + } + + $this->setExtension('id-ce-keyUsage', + array_values(array_unique(array_merge($keyUsage, array('cRLSign', 'keyCertSign')))) + ); + + $basicConstraints = $this->getExtension('id-ce-basicConstraints'); + if (!$basicConstraints) { + $basicConstraints = array(); + } + + $this->setExtension('id-ce-basicConstraints', + array_unique(array_merge(array('cA' => true), $basicConstraints)), true); + + if (!isset($subject->currentKeyIdentifier)) { + $this->setExtension('id-ce-subjectKeyIdentifier', base64_encode($this->computeKeyIdentifier($this->currentCert)), false, false); + } + } + + // resync $this->signatureSubject + // save $tbsCertificate in case there are any File_ASN1_Element objects in it + $tbsCertificate = $this->currentCert['tbsCertificate']; + $this->loadX509($this->saveX509($this->currentCert)); + + $result = $this->_sign($issuer->privateKey, $signatureAlgorithm); + $result['tbsCertificate'] = $tbsCertificate; + + $this->currentCert = $currentCert; + $this->signatureSubject = $signatureSubject; + + return $result; + } + + /** + * Sign a CSR + * + * @access public + * @return Mixed + */ + function signCSR($signatureAlgorithm = 'sha1WithRSAEncryption') + { + if (!is_object($this->privateKey) || empty($this->dn)) { + return false; + } + + $origPublicKey = $this->publicKey; + $class = get_class($this->privateKey); + $this->publicKey = new $class(); + $this->publicKey->loadKey($this->privateKey->getPublicKey()); + $this->publicKey->setPublicKey(); + if (!($publicKey = $this->_formatSubjectPublicKey())) { + return false; + } + $this->publicKey = $origPublicKey; + + $currentCert = isset($this->currentCert) ? $this->currentCert : NULL; + $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject: NULL; + + if (isset($this->currentCert) && is_array($this->currentCert) && isset($this->currentCert['certificationRequestInfo'])) { + $this->currentCert['signatureAlgorithm']['algorithm'] = + $signatureAlgorithm; + if (!empty($this->dn)) { + $this->currentCert['certificationRequestInfo']['subject'] = $this->dn; + } + $this->currentCert['certificationRequestInfo']['subjectPKInfo'] = $publicKey; + } else { + $this->currentCert = array( + 'certificationRequestInfo' => + array( + 'version' => 'v1', + 'subject' => $this->dn, + 'subjectPKInfo' => $publicKey + ), + 'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm), + 'signature' => false // this is going to be overwritten later + ); + } + + // resync $this->signatureSubject + // save $certificationRequestInfo in case there are any File_ASN1_Element objects in it + $certificationRequestInfo = $this->currentCert['certificationRequestInfo']; + $this->loadCSR($this->saveCSR($this->currentCert)); + + $result = $this->_sign($this->privateKey, $signatureAlgorithm); + $result['certificationRequestInfo'] = $certificationRequestInfo; + + $this->currentCert = $currentCert; + $this->signatureSubject = $signatureSubject; + + return $result; + } + + /** + * Sign a CRL + * + * $issuer's private key needs to be loaded. + * + * @param File_X509 $issuer + * @param File_X509 $crl + * @param String $signatureAlgorithm optional + * @access public + * @return Mixed + */ + function signCRL($issuer, $crl, $signatureAlgorithm = 'sha1WithRSAEncryption') + { + if (!is_object($issuer->privateKey) || empty($issuer->dn)) { + return false; + } + + $currentCert = isset($this->currentCert) ? $this->currentCert : NULL; + $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject : NULL; + $thisUpdate = !empty($this->startDate) ? $this->startDate : @date('M j H:i:s Y T'); + + if (isset($crl->currentCert) && is_array($crl->currentCert) && isset($crl->currentCert['tbsCertList'])) { + $this->currentCert = $crl->currentCert; + $this->currentCert['tbsCertList']['signature']['algorithm'] = $signatureAlgorithm; + $this->currentCert['signatureAlgorithm']['algorithm'] = $signatureAlgorithm; + } else { + $this->currentCert = array( + 'tbsCertList' => + array( + 'version' => 'v2', + 'signature' => array('algorithm' => $signatureAlgorithm), + 'issuer' => false, // this is going to be overwritten later + 'thisUpdate' => array('generalTime' => $thisUpdate) // $this->setStartDate() + ), + 'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm), + 'signature' => false // this is going to be overwritten later + ); + } + + $tbsCertList = &$this->currentCert['tbsCertList']; + $tbsCertList['issuer'] = $issuer->dn; + $tbsCertList['thisUpdate'] = array('generalTime' => $thisUpdate); + + if (!empty($this->endDate)) { + $tbsCertList['nextUpdate'] = array('generalTime' => $this->endDate); // $this->setEndDate() + } else { + unset($tbsCertList['nextUpdate']); + } + + if (!empty($this->serialNumber)) { + $crlNumber = $this->serialNumber; + } + else { + $crlNumber = $this->getExtension('id-ce-cRLNumber'); + $crlNumber = $crlNumber !== false ? $crlNumber->add(new Math_BigInteger(1)) : NULL; + } + + $this->removeExtension('id-ce-authorityKeyIdentifier'); + $this->removeExtension('id-ce-issuerAltName'); + + // Be sure version >= v2 if some extension found. + $version = isset($tbsCertList['version']) ? $tbsCertList['version'] : 0; + if (!$version) { + if (!empty($tbsCertList['crlExtensions'])) { + $version = 1; // v2. + } + elseif (!empty($tbsCertList['revokedCertificates'])) { + foreach ($tbsCertList['revokedCertificates'] as $cert) { + if (!empty($cert['crlEntryExtensions'])) { + $version = 1; // v2. + } + } + } + + if ($version) { + $tbsCertList['version'] = $version; + } + } + + // Store additional extensions. + if (!empty($tbsCertList['version'])) { // At least v2. + if (!empty($crlNumber)) { + $this->setExtension('id-ce-cRLNumber', $crlNumber); + } + + if (isset($issuer->currentKeyIdentifier)) { + $this->setExtension('id-ce-authorityKeyIdentifier', array( + //'authorityCertIssuer' => array( + // array( + // 'directoryName' => $issuer->dn + // ) + //), + 'keyIdentifier' => $issuer->currentKeyIdentifier + ) + ); + //$extensions = &$tbsCertList['crlExtensions']; + //if (isset($issuer->serialNumber)) { + // $extensions[count($extensions) - 1]['authorityCertSerialNumber'] = $issuer->serialNumber; + //} + //unset($extensions); + } + + $issuerAltName = $this->getExtension('id-ce-subjectAltName', $issuer->currentCert); + + if ($issuerAltName !== false) { + $this->setExtension('id-ce-issuerAltName', $issuerAltName); + } + } + + if (empty($tbsCertList['revokedCertificates'])) { + unset($tbsCertList['revokedCertificates']); + } + + unset($tbsCertList); + + // resync $this->signatureSubject + // save $tbsCertList in case there are any File_ASN1_Element objects in it + $tbsCertList = $this->currentCert['tbsCertList']; + $this->loadCRL($this->saveCRL($this->currentCert)); + + $result = $this->_sign($issuer->privateKey, $signatureAlgorithm); + $result['tbsCertList'] = $tbsCertList; + + $this->currentCert = $currentCert; + $this->signatureSubject = $signatureSubject; + + return $result; + } + + /** + * X.509 certificate signing helper function. + * + * @param Object $key + * @param File_X509 $subject + * @param String $signatureAlgorithm + * @access public + * @return Mixed + */ + function _sign($key, $signatureAlgorithm) + { + switch (strtolower(get_class($key))) { + case 'crypt_rsa': + switch ($signatureAlgorithm) { + case 'md2WithRSAEncryption': + case 'md5WithRSAEncryption': + case 'sha1WithRSAEncryption': + case 'sha224WithRSAEncryption': + case 'sha256WithRSAEncryption': + case 'sha384WithRSAEncryption': + case 'sha512WithRSAEncryption': + $key->setHash(preg_replace('#WithRSAEncryption$#', '', $signatureAlgorithm)); + $key->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1); + + $this->currentCert['signature'] = base64_encode("\0" . $key->sign($this->signatureSubject)); + return $this->currentCert; + } + default: + return false; + } + } + + /** + * Set certificate start date + * + * @param String $date + * @access public + */ + function setStartDate($date) + { + $this->startDate = @date('M j H:i:s Y T', @strtotime($date)); + } + + /** + * Set certificate end date + * + * @param String $date + * @access public + */ + function setEndDate($date) + { + /* + To indicate that a certificate has no well-defined expiration date, + the notAfter SHOULD be assigned the GeneralizedTime value of + 99991231235959Z. + + -- http://tools.ietf.org/html/rfc5280#section-4.1.2.5 + */ + if (strtolower($date) == 'lifetime') { + $temp = '99991231235959Z'; + $asn1 = new File_ASN1(); + $temp = chr(FILE_ASN1_TYPE_GENERALIZED_TIME) . $asn1->_encodeLength(strlen($temp)) . $temp; + $this->endDate = new File_ASN1_Element($temp); + } else { + $this->endDate = @date('M j H:i:s Y T', @strtotime($date)); + } + } + + /** + * Set Serial Number + * + * @param String $serial + * @param $base optional + * @access public + */ + function setSerialNumber($serial, $base = -256) + { + $this->serialNumber = new Math_BigInteger($serial, $base); + } + + /** + * Turns the certificate into a certificate authority + * + * @access public + */ + function makeCA() + { + $this->caFlag = true; + } + + /** + * Get a reference to a subarray + * + * @param array $root + * @param String $path absolute path with / as component separator + * @param Boolean $create optional + * @access private + * @return array item ref or false + */ + function &_subArray(&$root, $path, $create = false) + { + $false = false; + + if (!is_array($root)) { + return $false; + } + + foreach (explode('/', $path) as $i) { + if (!is_array($root)) { + return $false; + } + + if (!isset($root[$i])) { + if (!$create) { + return $false; + } + + $root[$i] = array(); + } + + $root = &$root[$i]; + } + + return $root; + } + + /** + * Get a reference to an extension subarray + * + * @param array $root + * @param String $path optional absolute path with / as component separator + * @param Boolean $create optional + * @access private + * @return array ref or false + */ + function &_extensions(&$root, $path = NULL, $create = false) + { + if (!isset($root)) { + $root = $this->currentCert; + } + + switch (true) { + case !empty($path): + case !is_array($root): + break; + case isset($root['tbsCertificate']): + $path = 'tbsCertificate/extensions'; + break; + case isset($root['tbsCertList']): + $path = 'tbsCertList/crlExtensions'; + break; + case isset($root['certificationRequestInfo']): + $pth = 'certificationRequestInfo/attributes'; + $attributes = &$this->_subArray($root, $pth, $create); + + if (is_array($attributes)) { + foreach ($attributes as $key => $value) { + if ($value['type'] == 'pkcs-9-at-extensionRequest') { + $path = "$pth/$key/value/0"; + break 2; + } + } + if ($create) { + $key = count($attributes); + $attributes[] = array('type' => 'pkcs-9-at-extensionRequest', 'value' => array()); + $path = "$pth/$key/value/0"; + } + } + break; + } + + $extensions = &$this->_subArray($root, $path, $create); + + if (!is_array($extensions)) { + $false = false; + return $false; + } + + return $extensions; + } + + /** + * Remove an Extension + * + * @param String $id + * @param String $path optional + * @access private + * @return Boolean + */ + function _removeExtension($id, $path = NULL) + { + $extensions = &$this->_extensions($this->currentCert, $path); + + if (!is_array($extensions)) { + return false; + } + + $result = false; + foreach ($extensions as $key => $value) { + if ($value['extnId'] == $id) { + unset($extensions[$key]); + $result = true; + } + } + + $extensions = array_values($extensions); + return $result; + } + + /** + * Get an Extension + * + * Returns the extension if it exists and false if not + * + * @param String $id + * @param Array $cert optional + * @param String $path optional + * @access private + * @return Mixed + */ + function _getExtension($id, $cert = NULL, $path = NULL) + { + $extensions = $this->_extensions($cert, $path); + + if (!is_array($extensions)) { + return false; + } + + foreach ($extensions as $key => $value) { + if ($value['extnId'] == $id) { + return $value['extnValue']; + } + } + + return false; + } + + /** + * Returns a list of all extensions in use + * + * @param array $cert optional + * @param String $path optional + * @access private + * @return Array + */ + function _getExtensions($cert = NULL, $path = NULL) + { + $exts = $this->_extensions($cert, $path); + $extensions = array(); + + if (is_array($exts)) { + foreach ($exts as $extension) { + $extensions[] = $extension['extnId']; + } + } + + return $extensions; + } + + /** + * Set an Extension + * + * @param String $id + * @param Mixed $value + * @param Boolean $critical optional + * @param Boolean $replace optional + * @param String $path optional + * @access private + * @return Boolean + */ + function _setExtension($id, $value, $critical = false, $replace = true, $path = NULL) + { + $extensions = &$this->_extensions($this->currentCert, $path, true); + + if (!is_array($extensions)) { + return false; + } + + $newext = array('extnId' => $id, 'critical' => $critical, 'extnValue' => $value); + + foreach ($extensions as $key => $value) { + if ($value['extnId'] == $id) { + if (!$replace) { + return false; + } + + $extensions[$key] = $newext; + return true; + } + } + + $extensions[] = $newext; + return true; + } + + /** + * Remove a certificate, CSR or CRL Extension + * + * @param String $id + * @access public + * @return Boolean + */ + function removeExtension($id) + { + return $this->_removeExtension($id); + } + + /** + * Get a certificate, CSR or CRL Extension + * + * Returns the extension if it exists and false if not + * + * @param String $id + * @param Array $cert optional + * @access public + * @return Mixed + */ + function getExtension($id, $cert = NULL) + { + return $this->_getExtension($id, $cert); + } + + /** + * Returns a list of all extensions in use in certificate, CSR or CRL + * + * @param array $cert optional + * @access public + * @return Array + */ + function getExtensions($cert = NULL) + { + return $this->_getExtensions($cert); + } + + /** + * Set a certificate, CSR or CRL Extension + * + * @param String $id + * @param Mixed $value + * @param Boolean $critical optional + * @param Boolean $replace optional + * @access public + * @return Boolean + */ + function setExtension($id, $value, $critical = false, $replace = true) + { + return $this->_setExtension($id, $value, $critical, $replace); + } + + /** + * Remove a CSR attribute. + * + * @param String $id + * @param Integer $disposition optional + * @access public + * @return Boolean + */ + function removeAttribute($id, $disposition = FILE_X509_ATTR_ALL) + { + $attributes = &$this->_subArray($this->currentCert, 'certificationRequestInfo/attributes'); + + if (!is_array($attributes)) { + return false; + } + + $result = false; + foreach ($attributes as $key => $attribute) { + if ($attribute['type'] == $id) { + $n = count($attribute['value']); + switch (true) { + case $disposition == FILE_X509_ATTR_APPEND: + case $disposition == FILE_X509_ATTR_REPLACE: + return false; + case $disposition >= $n: + $disposition -= $n; + break; + case $disposition == FILE_X509_ATTR_ALL: + case $n == 1: + unset($attributes[$key]); + $result = true; + break; + default: + unset($attributes[$key]['value'][$disposition]); + $attributes[$key]['value'] = array_values($attributes[$key]['value']); + $result = true; + break; + } + if ($result && $disposition != FILE_X509_ATTR_ALL) { + break; + } + } + } + + $attributes = array_values($attributes); + return $result; + } + + /** + * Get a CSR attribute + * + * Returns the attribute if it exists and false if not + * + * @param String $id + * @param Integer $disposition optional + * @param Array $csr optional + * @access public + * @return Mixed + */ + function getAttribute($id, $disposition = FILE_X509_ATTR_ALL, $csr = NULL) + { + if (empty($csr)) { + $csr = $this->currentCert; + } + + $attributes = $this->_subArray($csr, 'certificationRequestInfo/attributes'); + + if (!is_array($attributes)) { + return false; + } + + foreach ($attributes as $key => $attribute) { + if ($attribute['type'] == $id) { + $n = count($attribute['value']); + switch (true) { + case $disposition == FILE_X509_ATTR_APPEND: + case $disposition == FILE_X509_ATTR_REPLACE: + return false; + case $disposition == FILE_X509_ATTR_ALL: + return $attribute['value']; + case $disposition >= $n: + $disposition -= $n; + break; + default: + return $attribute['value'][$disposition]; + } + } + } + + return false; + } + + /** + * Returns a list of all CSR attributes in use + * + * @param array $csr optional + * @access public + * @return Array + */ + function getAttributes($csr = NULL) + { + if (empty($csr)) { + $csr = $this->currentCert; + } + + $attributes = $this->_subArray($csr, 'certificationRequestInfo/attributes'); + $attrs = array(); + + if (is_array($attributes)) { + foreach ($attributes as $attribute) { + $attrs[] = $attribute['type']; + } + } + + return $attrs; + } + + /** + * Set a CSR attribute + * + * @param String $id + * @param Mixed $value + * @param Boolean $disposition optional + * @access public + * @return Boolean + */ + function setAttribute($id, $value, $disposition = FILE_X509_ATTR_ALL) + { + $attributes = &$this->_subArray($this->currentCert, 'certificationRequestInfo/attributes', true); + + if (!is_array($attributes)) { + return false; + } + + switch ($disposition) { + case FILE_X509_ATTR_REPLACE: + $disposition = FILE_X509_ATTR_APPEND; + case FILE_X509_ATTR_ALL: + $this->removeAttribute($id); + break; + } + + foreach ($attributes as $key => $attribute) { + if ($attribute['type'] == $id) { + $n = count($attribute['value']); + switch (true) { + case $disposition == FILE_X509_ATTR_APPEND: + $last = $key; + break; + case $disposition >= $n; + $disposition -= $n; + break; + default: + $attributes[$key]['value'][$disposition] = $value; + return true; + } + } + } + + switch (true) { + case $disposition >= 0: + return false; + case isset($last): + $attributes[$last]['value'][] = $value; + break; + default: + $attributes[] = array('type' => $id, 'value' => $disposition == FILE_X509_ATTR_ALL ? $value: array($value)); + break; + } + + return true; + } + + /** + * Sets the subject key identifier + * + * This is used by the id-ce-authorityKeyIdentifier and the id-ce-subjectKeyIdentifier extensions. + * + * @param String $value + * @access public + */ + function setKeyIdentifier($value) + { + if (empty($value)) { + unset($this->currentKeyIdentifier); + } else { + $this->currentKeyIdentifier = base64_encode($value); + } + } + + /** + * Compute a public key identifier. + * + * Although key identifiers may be set to any unique value, this function + * computes key identifiers from public key according to the two + * recommended methods (4.2.1.2 RFC 3280). + * Highly polymorphic: try to accept all possible forms of key: + * - Key object + * - File_X509 object with public or private key defined + * - Certificate or CSR array + * - File_ASN1_Element object + * - PEM or DER string + * + * @param Mixed $key optional + * @param Integer $method optional + * @access public + * @return String binary key identifier + */ + function computeKeyIdentifier($key = NULL, $method = 1) + { + if (is_null($key)) { + $key = $this; + } + + switch (true) { + case is_string($key): + break; + case is_array($key) && isset($key['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']): + return $this->computeKeyIdentifier($key['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'], $method); + case is_array($key) && isset($key['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']): + return $this->computeKeyIdentifier($key['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'], $method); + case !is_object($key): + return false; + case strtolower(get_class($key)) == 'file_asn1_element': + $asn1 = new File_ASN1(); + $decoded = $asn1->decodeBER($cert); + if (empty($decoded)) { + return false; + } + $key = $asn1->asn1map($decoded[0], array('type' => FILE_ASN1_TYPE_BIT_STRING)); + break; + case strtolower(get_class($key)) == 'file_x509': + if (isset($key->publicKey)) { + return $this->computeKeyIdentifier($key->publicKey, $method); + } + if (isset($key->privateKey)) { + return $this->computeKeyIdentifier($key->privateKey, $method); + } + if (isset($key->currentCert['tbsCertificate']) || isset($key->currentCert['certificationRequestInfo'])) { + return $this->computeKeyIdentifier($key->currentCert, $method); + } + return false; + default: // Should be a key object (i.e.: Crypt_RSA). + $key = $key->getPublicKey(CRYPT_RSA_PUBLIC_FORMAT_PKCS1_RAW); + break; + } + + // If in PEM format, convert to binary. + if (preg_match('#^-----BEGIN #', $key)) { + $key = base64_decode(preg_replace('#-.+-|[\r\n]#', '', $key)); + } + + // Now we have the key string: compute its sha-1 sum. + if (!class_exists('Crypt_Hash')) { + require_once('Crypt/Hash.php'); + } + $hash = new Crypt_Hash('sha1'); + $hash = $hash->hash($key); + + if ($method == 2) { + $hash = substr($hash, -8); + $hash[0] = chr((ord($hash[0]) & 0x0F) | 0x40); + } + + return $hash; + } + + /** + * Format a public key as appropriate + * + * @access private + * @return Array + */ + function _formatSubjectPublicKey() + { + if (!isset($this->publicKey) || !is_object($this->publicKey)) { + return false; + } + + switch (strtolower(get_class($this->publicKey))) { + case 'crypt_rsa': + // the following two return statements do the same thing. i dunno.. i just prefer the later for some reason. + // the former is a good example of how to do fuzzing on the public key + //return new File_ASN1_Element(base64_decode(preg_replace('#-.+-|[\r\n]#', '', $this->publicKey->getPublicKey()))); + return array( + 'algorithm' => array('algorithm' => 'rsaEncryption'), + 'subjectPublicKey' => $this->publicKey->getPublicKey(CRYPT_RSA_PUBLIC_FORMAT_PKCS1_RAW) + ); + default: + return false; + } + } + + /** + * Set the domain name's which the cert is to be valid for + * + * @access public + * @return Array + */ + function setDomain() + { + $this->domains = func_get_args(); + $this->removeDNProp('id-at-commonName'); + $this->setDNProp('id-at-commonName', $this->domains[0]); + } + + /** + * Helper function to build domain array + * + * @access private + * @param String $domain + * @return Array + */ + function _dnsName($domain) + { + return array('dNSName' => $domain); + } + + /** + * Get the index of a revoked certificate. + * + * @param array $rclist + * @param String $serial + * @param Boolean $create optional + * @access private + * @return Integer or false + */ + function _revokedCertificate(&$rclist, $serial, $create = false) + { + $serial = new Math_BigInteger($serial); + + foreach ($rclist as $i => $rc) { + if (!($serial->compare($rc['userCertificate']))) { + return $i; + } + } + + if (!$create) { + return false; + } + + $i = count($rclist); + $rclist[] = array('userCertificate' => $serial, + 'revocationDate' => array('generalTime' => @date('M j H:i:s Y T'))); + return $i; + } + + /** + * Revoke a certificate. + * + * @param String $serial + * @param String $date optional + * @access public + * @return Boolean + */ + function revoke($serial, $date = NULL) + { + if (isset($this->currentCert['tbsCertList'])) { + if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates', true))) { + if ($this->_revokedCertificate($rclist, $serial) === false) { // If not yet revoked + if (($i = $this->_revokedCertificate($rclist, $serial, true)) !== false) { + + if (!empty($date)) { + $rclist[$i]['revocationDate'] = array('generalTime' => $date); + } + + return true; + } + } + } + } + + return false; + } + + /** + * Unrevoke a certificate. + * + * @param String $serial + * @access public + * @return Boolean + */ + function unrevoke($serial) + { + if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) { + if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) { + unset($rclist[$i]); + $rclist = array_values($rclist); + return true; + } + } + + return false; + } + + /** + * Get a revoked certificate. + * + * @param String $serial + * @access public + * @return Mixed + */ + function getRevoked($serial) + { + if (is_array($rclist = $this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) { + if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) { + return $rclist[$i]; + } + } + + return false; + } + + /** + * List revoked certificates + * + * @param array $crl optional + * @access public + * @return array + */ + function listRevoked($crl = NULL) + { + if (!isset($crl)) { + $crl = $this->currentCert; + } + + if (!isset($crl['tbsCertList'])) { + return false; + } + + $result = array(); + + if (is_array($rclist = $this->_subArray($crl, 'tbsCertList/revokedCertificates'))) { + foreach ($rclist as $rc) { + $result[] = $rc['userCertificate']->toString(); + } + } + + return $result; + } + + /** + * Remove a Revoked Certificate Extension + * + * @param String $serial + * @param String $id + * @access public + * @return Boolean + */ + function removeRevokedCertificateExtension($serial, $id) + { + if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) { + if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) { + return $this->_removeExtension($id, "tbsCertList/revokedCertificates/$i/crlEntryExtensions"); + } + } + + return false; + } + + /** + * Get a Revoked Certificate Extension + * + * Returns the extension if it exists and false if not + * + * @param String $serial + * @param String $id + * @param Array $crl optional + * @access public + * @return Mixed + */ + function getRevokedCertificateExtension($serial, $id, $crl = NULL) + { + if (!isset($crl)) { + $crl = $this->currentCert; + } + + if (is_array($rclist = $this->_subArray($crl, 'tbsCertList/revokedCertificates'))) { + if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) { + return $this->_getExtension($id, $crl, "tbsCertList/revokedCertificates/$i/crlEntryExtensions"); + } + } + + return false; + } + + /** + * Returns a list of all extensions in use for a given revoked certificate + * + * @param String $serial + * @param array $crl optional + * @access public + * @return Array + */ + function getRevokedCertificateExtensions($serial, $crl = NULL) + { + if (!isset($crl)) { + $crl = $this->currentCert; + } + + if (is_array($rclist = $this->_subArray($crl, 'tbsCertList/revokedCertificates'))) { + if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) { + return $this->_getExtensions($crl, "tbsCertList/revokedCertificates/$i/crlEntryExtensions"); + } + } + + return false; + } + + /** + * Set a Revoked Certificate Extension + * + * @param String $serial + * @param String $id + * @param Mixed $value + * @param Boolean $critical optional + * @param Boolean $replace optional + * @access public + * @return Boolean + */ + function setRevokedCertificateExtension($serial, $id, $value, $critical = false, $replace = true) + { + if (isset($this->currentCert['tbsCertList'])) { + if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates', true))) { + if (($i = $this->_revokedCertificate($rclist, $serial, true)) !== false) { + return $this->_setExtension($id, $value, $critical, $replace, "tbsCertList/revokedCertificates/$i/crlEntryExtensions"); + } + } + } + + return false; + } + + /** + * Error Handler + * + * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. + * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. + * + * @param String $string + * @access private + */ + function _handle_error($err_msg) { + if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { + $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; + throw(new $class($err_msg)); + } else { + user_error($err_msg); + } + } +} diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Math/BigInteger.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Math/BigInteger.php new file mode 100644 index 0000000000..04bcdf4099 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Math/BigInteger.php @@ -0,0 +1,3633 @@ +> and << cannot be used, nor can the modulo operator %, + * which only supports integers. Although this fact will slow this library down, the fact that such a high + * base is being used should more than compensate. + * + * When PHP version 6 is officially released, we'll be able to use 64-bit integers. This should, once again, + * allow bitwise operators, and will increase the maximum possible base to 2**31 (or 2**62 for addition / + * subtraction). + * + * Numbers are stored in {@link http://en.wikipedia.org/wiki/Endianness little endian} format. ie. + * (new Math_BigInteger(pow(2, 26)))->value = array(0, 1) + * + * Useful resources are as follows: + * + * - {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf Handbook of Applied Cryptography (HAC)} + * - {@link http://math.libtomcrypt.com/files/tommath.pdf Multi-Precision Math (MPM)} + * - Java's BigInteger classes. See /j2se/src/share/classes/java/math in jdk-1_5_0-src-jrl.zip + * + * Here's an example of how to use this library: + * + * add($b); + * + * echo $c->toString(); // outputs 5 + * ?> + * + * + * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @category Math + * @package Math_BigInteger + * @author Jim Wigginton + * @copyright MMVI Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @version $Id: BigInteger.php,v 1.33 2010/03/22 22:32:03 terrafrost Exp $ + * @link http://pear.php.net/package/Math_BigInteger + */ + +/**#@+ + * Reduction constants + * + * @access private + * @see Math_BigInteger::_reduce() + */ +/** + * @see Math_BigInteger::_montgomery() + * @see Math_BigInteger::_prepMontgomery() + */ +define('MATH_BIGINTEGER_MONTGOMERY', 0); +/** + * @see Math_BigInteger::_barrett() + */ +define('MATH_BIGINTEGER_BARRETT', 1); +/** + * @see Math_BigInteger::_mod2() + */ +define('MATH_BIGINTEGER_POWEROF2', 2); +/** + * @see Math_BigInteger::_remainder() + */ +define('MATH_BIGINTEGER_CLASSIC', 3); +/** + * @see Math_BigInteger::__clone() + */ +define('MATH_BIGINTEGER_NONE', 4); +/**#@-*/ + +/**#@+ + * Array constants + * + * Rather than create a thousands and thousands of new Math_BigInteger objects in repeated function calls to add() and + * multiply() or whatever, we'll just work directly on arrays, taking them in as parameters and returning them. + * + * @access private + */ +/** + * $result[MATH_BIGINTEGER_VALUE] contains the value. + */ +define('MATH_BIGINTEGER_VALUE', 0); +/** + * $result[MATH_BIGINTEGER_SIGN] contains the sign. + */ +define('MATH_BIGINTEGER_SIGN', 1); +/**#@-*/ + +/**#@+ + * @access private + * @see Math_BigInteger::_montgomery() + * @see Math_BigInteger::_barrett() + */ +/** + * Cache constants + * + * $cache[MATH_BIGINTEGER_VARIABLE] tells us whether or not the cached data is still valid. + */ +define('MATH_BIGINTEGER_VARIABLE', 0); +/** + * $cache[MATH_BIGINTEGER_DATA] contains the cached data. + */ +define('MATH_BIGINTEGER_DATA', 1); +/**#@-*/ + +/**#@+ + * Mode constants. + * + * @access private + * @see Math_BigInteger::Math_BigInteger() + */ +/** + * To use the pure-PHP implementation + */ +define('MATH_BIGINTEGER_MODE_INTERNAL', 1); +/** + * To use the BCMath library + * + * (if enabled; otherwise, the internal implementation will be used) + */ +define('MATH_BIGINTEGER_MODE_BCMATH', 2); +/** + * To use the GMP library + * + * (if present; otherwise, either the BCMath or the internal implementation will be used) + */ +define('MATH_BIGINTEGER_MODE_GMP', 3); +/**#@-*/ + +/** + * The largest digit that may be used in addition / subtraction + * + * (we do pow(2, 52) instead of using 4503599627370496, directly, because some PHP installations + * will truncate 4503599627370496) + * + * @access private + */ +define('MATH_BIGINTEGER_MAX_DIGIT52', pow(2, 52)); + +/** + * Karatsuba Cutoff + * + * At what point do we switch between Karatsuba multiplication and schoolbook long multiplication? + * + * @access private + */ +define('MATH_BIGINTEGER_KARATSUBA_CUTOFF', 25); + +/** + * Pure-PHP arbitrary precision integer arithmetic library. Supports base-2, base-10, base-16, and base-256 + * numbers. + * + * @author Jim Wigginton + * @version 1.0.0RC4 + * @access public + * @package Math_BigInteger + */ +class Math_BigInteger { + /** + * Holds the BigInteger's value. + * + * @var Array + * @access private + */ + var $value; + + /** + * Holds the BigInteger's magnitude. + * + * @var Boolean + * @access private + */ + var $is_negative = false; + + /** + * Random number generator function + * + * @see setRandomGenerator() + * @access private + */ + var $generator = 'mt_rand'; + + /** + * Precision + * + * @see setPrecision() + * @access private + */ + var $precision = -1; + + /** + * Precision Bitmask + * + * @see setPrecision() + * @access private + */ + var $bitmask = false; + + /** + * Mode independant value used for serialization. + * + * If the bcmath or gmp extensions are installed $this->value will be a non-serializable resource, hence the need for + * a variable that'll be serializable regardless of whether or not extensions are being used. Unlike $this->value, + * however, $this->hex is only calculated when $this->__sleep() is called. + * + * @see __sleep() + * @see __wakeup() + * @var String + * @access private + */ + var $hex; + + /** + * Converts base-2, base-10, base-16, and binary strings (eg. base-256) to BigIntegers. + * + * If the second parameter - $base - is negative, then it will be assumed that the number's are encoded using + * two's compliment. The sole exception to this is -10, which is treated the same as 10 is. + * + * Here's an example: + * + * toString(); // outputs 50 + * ?> + * + * + * @param optional $x base-10 number or base-$base number if $base set. + * @param optional integer $base + * @return Math_BigInteger + * @access public + */ + function Math_BigInteger($x = 0, $base = 10) + { + if ( !defined('MATH_BIGINTEGER_MODE') ) { + switch (true) { + case extension_loaded('gmp'): + define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_GMP); + break; + case extension_loaded('bcmath'): + define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_BCMATH); + break; + default: + define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_INTERNAL); + } + } + + if (function_exists('openssl_public_encrypt') && !defined('MATH_BIGINTEGER_OPENSSL_DISABLE') && !defined('MATH_BIGINTEGER_OPENSSL_ENABLED')) { + define('MATH_BIGINTEGER_OPENSSL_ENABLED', true); + } + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + if (is_resource($x) && get_resource_type($x) == 'GMP integer') { + $this->value = $x; + return; + } + $this->value = gmp_init(0); + break; + case MATH_BIGINTEGER_MODE_BCMATH: + $this->value = '0'; + break; + default: + $this->value = array(); + } + + // '0' counts as empty() but when the base is 256 '0' is equal to ord('0') or 48 + // '0' is the only value like this per http://php.net/empty + if (empty($x) && (abs($base) != 256 || $x !== '0')) { + return; + } + + switch ($base) { + case -256: + if (ord($x[0]) & 0x80) { + $x = ~$x; + $this->is_negative = true; + } + case 256: + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $sign = $this->is_negative ? '-' : ''; + $this->value = gmp_init($sign . '0x' . bin2hex($x)); + break; + case MATH_BIGINTEGER_MODE_BCMATH: + // round $len to the nearest 4 (thanks, DavidMJ!) + $len = (strlen($x) + 3) & 0xFFFFFFFC; + + $x = str_pad($x, $len, chr(0), STR_PAD_LEFT); + + for ($i = 0; $i < $len; $i+= 4) { + $this->value = bcmul($this->value, '4294967296', 0); // 4294967296 == 2**32 + $this->value = bcadd($this->value, 0x1000000 * ord($x[$i]) + ((ord($x[$i + 1]) << 16) | (ord($x[$i + 2]) << 8) | ord($x[$i + 3])), 0); + } + + if ($this->is_negative) { + $this->value = '-' . $this->value; + } + + break; + // converts a base-2**8 (big endian / msb) number to base-2**26 (little endian / lsb) + default: + while (strlen($x)) { + $this->value[] = $this->_bytes2int($this->_base256_rshift($x, 26)); + } + } + + if ($this->is_negative) { + if (MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL) { + $this->is_negative = false; + } + $temp = $this->add(new Math_BigInteger('-1')); + $this->value = $temp->value; + } + break; + case 16: + case -16: + if ($base > 0 && $x[0] == '-') { + $this->is_negative = true; + $x = substr($x, 1); + } + + $x = preg_replace('#^(?:0x)?([A-Fa-f0-9]*).*#', '$1', $x); + + $is_negative = false; + if ($base < 0 && hexdec($x[0]) >= 8) { + $this->is_negative = $is_negative = true; + $x = bin2hex(~pack('H*', $x)); + } + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = $this->is_negative ? '-0x' . $x : '0x' . $x; + $this->value = gmp_init($temp); + $this->is_negative = false; + break; + case MATH_BIGINTEGER_MODE_BCMATH: + $x = ( strlen($x) & 1 ) ? '0' . $x : $x; + $temp = new Math_BigInteger(pack('H*', $x), 256); + $this->value = $this->is_negative ? '-' . $temp->value : $temp->value; + $this->is_negative = false; + break; + default: + $x = ( strlen($x) & 1 ) ? '0' . $x : $x; + $temp = new Math_BigInteger(pack('H*', $x), 256); + $this->value = $temp->value; + } + + if ($is_negative) { + $temp = $this->add(new Math_BigInteger('-1')); + $this->value = $temp->value; + } + break; + case 10: + case -10: + $x = preg_replace('#^(-?[0-9]*).*#', '$1', $x); + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $this->value = gmp_init($x); + break; + case MATH_BIGINTEGER_MODE_BCMATH: + // explicitly casting $x to a string is necessary, here, since doing $x[0] on -1 yields different + // results then doing it on '-1' does (modInverse does $x[0]) + $this->value = (string) $x; + break; + default: + $temp = new Math_BigInteger(); + + // array(10000000) is 10**7 in base-2**26. 10**7 is the closest to 2**26 we can get without passing it. + $multiplier = new Math_BigInteger(); + $multiplier->value = array(10000000); + + if ($x[0] == '-') { + $this->is_negative = true; + $x = substr($x, 1); + } + + $x = str_pad($x, strlen($x) + (6 * strlen($x)) % 7, 0, STR_PAD_LEFT); + + while (strlen($x)) { + $temp = $temp->multiply($multiplier); + $temp = $temp->add(new Math_BigInteger($this->_int2bytes(substr($x, 0, 7)), 256)); + $x = substr($x, 7); + } + + $this->value = $temp->value; + } + break; + case 2: // base-2 support originally implemented by Lluis Pamies - thanks! + case -2: + if ($base > 0 && $x[0] == '-') { + $this->is_negative = true; + $x = substr($x, 1); + } + + $x = preg_replace('#^([01]*).*#', '$1', $x); + $x = str_pad($x, strlen($x) + (3 * strlen($x)) % 4, 0, STR_PAD_LEFT); + + $str = '0x'; + while (strlen($x)) { + $part = substr($x, 0, 4); + $str.= dechex(bindec($part)); + $x = substr($x, 4); + } + + if ($this->is_negative) { + $str = '-' . $str; + } + + $temp = new Math_BigInteger($str, 8 * $base); // ie. either -16 or +16 + $this->value = $temp->value; + $this->is_negative = $temp->is_negative; + + break; + default: + // base not supported, so we'll let $this == 0 + } + } + + /** + * Converts a BigInteger to a byte string (eg. base-256). + * + * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're + * saved as two's compliment. + * + * Here's an example: + * + * toBytes(); // outputs chr(65) + * ?> + * + * + * @param Boolean $twos_compliment + * @return String + * @access public + * @internal Converts a base-2**26 number to base-2**8 + */ + function toBytes($twos_compliment = false) + { + if ($twos_compliment) { + $comparison = $this->compare(new Math_BigInteger()); + if ($comparison == 0) { + return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : ''; + } + + $temp = $comparison < 0 ? $this->add(new Math_BigInteger(1)) : $this->copy(); + $bytes = $temp->toBytes(); + + if (empty($bytes)) { // eg. if the number we're trying to convert is -1 + $bytes = chr(0); + } + + if (ord($bytes[0]) & 0x80) { + $bytes = chr(0) . $bytes; + } + + return $comparison < 0 ? ~$bytes : $bytes; + } + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + if (gmp_cmp($this->value, gmp_init(0)) == 0) { + return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : ''; + } + + $temp = gmp_strval(gmp_abs($this->value), 16); + $temp = ( strlen($temp) & 1 ) ? '0' . $temp : $temp; + $temp = pack('H*', $temp); + + return $this->precision > 0 ? + substr(str_pad($temp, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) : + ltrim($temp, chr(0)); + case MATH_BIGINTEGER_MODE_BCMATH: + if ($this->value === '0') { + return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : ''; + } + + $value = ''; + $current = $this->value; + + if ($current[0] == '-') { + $current = substr($current, 1); + } + + while (bccomp($current, '0', 0) > 0) { + $temp = bcmod($current, '16777216'); + $value = chr($temp >> 16) . chr($temp >> 8) . chr($temp) . $value; + $current = bcdiv($current, '16777216', 0); + } + + return $this->precision > 0 ? + substr(str_pad($value, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) : + ltrim($value, chr(0)); + } + + if (!count($this->value)) { + return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : ''; + } + $result = $this->_int2bytes($this->value[count($this->value) - 1]); + + $temp = $this->copy(); + + for ($i = count($temp->value) - 2; $i >= 0; --$i) { + $temp->_base256_lshift($result, 26); + $result = $result | str_pad($temp->_int2bytes($temp->value[$i]), strlen($result), chr(0), STR_PAD_LEFT); + } + + return $this->precision > 0 ? + str_pad(substr($result, -(($this->precision + 7) >> 3)), ($this->precision + 7) >> 3, chr(0), STR_PAD_LEFT) : + $result; + } + + /** + * Converts a BigInteger to a hex string (eg. base-16)). + * + * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're + * saved as two's compliment. + * + * Here's an example: + * + * toHex(); // outputs '41' + * ?> + * + * + * @param Boolean $twos_compliment + * @return String + * @access public + * @internal Converts a base-2**26 number to base-2**8 + */ + function toHex($twos_compliment = false) + { + return bin2hex($this->toBytes($twos_compliment)); + } + + /** + * Converts a BigInteger to a bit string (eg. base-2). + * + * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're + * saved as two's compliment. + * + * Here's an example: + * + * toBits(); // outputs '1000001' + * ?> + * + * + * @param Boolean $twos_compliment + * @return String + * @access public + * @internal Converts a base-2**26 number to base-2**2 + */ + function toBits($twos_compliment = false) + { + $hex = $this->toHex($twos_compliment); + $bits = ''; + for ($i = strlen($hex) - 8, $start = strlen($hex) & 7; $i >= $start; $i-=8) { + $bits = str_pad(decbin(hexdec(substr($hex, $i, 8))), 32, '0', STR_PAD_LEFT) . $bits; + } + if ($start) { // hexdec('') == 0 + $bits = str_pad(decbin(hexdec(substr($hex, 0, $start))), 8, '0', STR_PAD_LEFT) . $bits; + } + $result = $this->precision > 0 ? substr($bits, -$this->precision) : ltrim($bits, '0'); + + if ($twos_compliment && $this->compare(new Math_BigInteger()) > 0 && $this->precision <= 0) { + return '0' . $result; + } + + return $result; + } + + /** + * Converts a BigInteger to a base-10 number. + * + * Here's an example: + * + * toString(); // outputs 50 + * ?> + * + * + * @return String + * @access public + * @internal Converts a base-2**26 number to base-10**7 (which is pretty much base-10) + */ + function toString() + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + return gmp_strval($this->value); + case MATH_BIGINTEGER_MODE_BCMATH: + if ($this->value === '0') { + return '0'; + } + + return ltrim($this->value, '0'); + } + + if (!count($this->value)) { + return '0'; + } + + $temp = $this->copy(); + $temp->is_negative = false; + + $divisor = new Math_BigInteger(); + $divisor->value = array(10000000); // eg. 10**7 + $result = ''; + while (count($temp->value)) { + list($temp, $mod) = $temp->divide($divisor); + $result = str_pad(isset($mod->value[0]) ? $mod->value[0] : '', 7, '0', STR_PAD_LEFT) . $result; + } + $result = ltrim($result, '0'); + if (empty($result)) { + $result = '0'; + } + + if ($this->is_negative) { + $result = '-' . $result; + } + + return $result; + } + + /** + * Copy an object + * + * PHP5 passes objects by reference while PHP4 passes by value. As such, we need a function to guarantee + * that all objects are passed by value, when appropriate. More information can be found here: + * + * {@link http://php.net/language.oop5.basic#51624} + * + * @access public + * @see __clone() + * @return Math_BigInteger + */ + function copy() + { + $temp = new Math_BigInteger(); + $temp->value = $this->value; + $temp->is_negative = $this->is_negative; + $temp->generator = $this->generator; + $temp->precision = $this->precision; + $temp->bitmask = $this->bitmask; + return $temp; + } + + /** + * __toString() magic method + * + * Will be called, automatically, if you're supporting just PHP5. If you're supporting PHP4, you'll need to call + * toString(). + * + * @access public + * @internal Implemented per a suggestion by Techie-Michael - thanks! + */ + function __toString() + { + return $this->toString(); + } + + /** + * __clone() magic method + * + * Although you can call Math_BigInteger::__toString() directly in PHP5, you cannot call Math_BigInteger::__clone() + * directly in PHP5. You can in PHP4 since it's not a magic method, but in PHP5, you have to call it by using the PHP5 + * only syntax of $y = clone $x. As such, if you're trying to write an application that works on both PHP4 and PHP5, + * call Math_BigInteger::copy(), instead. + * + * @access public + * @see copy() + * @return Math_BigInteger + */ + function __clone() + { + return $this->copy(); + } + + /** + * __sleep() magic method + * + * Will be called, automatically, when serialize() is called on a Math_BigInteger object. + * + * @see __wakeup() + * @access public + */ + function __sleep() + { + $this->hex = $this->toHex(true); + $vars = array('hex'); + if ($this->generator != 'mt_rand') { + $vars[] = 'generator'; + } + if ($this->precision > 0) { + $vars[] = 'precision'; + } + return $vars; + + } + + /** + * __wakeup() magic method + * + * Will be called, automatically, when unserialize() is called on a Math_BigInteger object. + * + * @see __sleep() + * @access public + */ + function __wakeup() + { + $temp = new Math_BigInteger($this->hex, -16); + $this->value = $temp->value; + $this->is_negative = $temp->is_negative; + $this->setRandomGenerator($this->generator); + if ($this->precision > 0) { + // recalculate $this->bitmask + $this->setPrecision($this->precision); + } + } + + /** + * Adds two BigIntegers. + * + * Here's an example: + * + * add($b); + * + * echo $c->toString(); // outputs 30 + * ?> + * + * + * @param Math_BigInteger $y + * @return Math_BigInteger + * @access public + * @internal Performs base-2**52 addition + */ + function add($y) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = new Math_BigInteger(); + $temp->value = gmp_add($this->value, $y->value); + + return $this->_normalize($temp); + case MATH_BIGINTEGER_MODE_BCMATH: + $temp = new Math_BigInteger(); + $temp->value = bcadd($this->value, $y->value, 0); + + return $this->_normalize($temp); + } + + $temp = $this->_add($this->value, $this->is_negative, $y->value, $y->is_negative); + + $result = new Math_BigInteger(); + $result->value = $temp[MATH_BIGINTEGER_VALUE]; + $result->is_negative = $temp[MATH_BIGINTEGER_SIGN]; + + return $this->_normalize($result); + } + + /** + * Performs addition. + * + * @param Array $x_value + * @param Boolean $x_negative + * @param Array $y_value + * @param Boolean $y_negative + * @return Array + * @access private + */ + function _add($x_value, $x_negative, $y_value, $y_negative) + { + $x_size = count($x_value); + $y_size = count($y_value); + + if ($x_size == 0) { + return array( + MATH_BIGINTEGER_VALUE => $y_value, + MATH_BIGINTEGER_SIGN => $y_negative + ); + } else if ($y_size == 0) { + return array( + MATH_BIGINTEGER_VALUE => $x_value, + MATH_BIGINTEGER_SIGN => $x_negative + ); + } + + // subtract, if appropriate + if ( $x_negative != $y_negative ) { + if ( $x_value == $y_value ) { + return array( + MATH_BIGINTEGER_VALUE => array(), + MATH_BIGINTEGER_SIGN => false + ); + } + + $temp = $this->_subtract($x_value, false, $y_value, false); + $temp[MATH_BIGINTEGER_SIGN] = $this->_compare($x_value, false, $y_value, false) > 0 ? + $x_negative : $y_negative; + + return $temp; + } + + if ($x_size < $y_size) { + $size = $x_size; + $value = $y_value; + } else { + $size = $y_size; + $value = $x_value; + } + + $value[] = 0; // just in case the carry adds an extra digit + + $carry = 0; + for ($i = 0, $j = 1; $j < $size; $i+=2, $j+=2) { + $sum = $x_value[$j] * 0x4000000 + $x_value[$i] + $y_value[$j] * 0x4000000 + $y_value[$i] + $carry; + $carry = $sum >= MATH_BIGINTEGER_MAX_DIGIT52; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1 + $sum = $carry ? $sum - MATH_BIGINTEGER_MAX_DIGIT52 : $sum; + + $temp = (int) ($sum / 0x4000000); + + $value[$i] = (int) ($sum - 0x4000000 * $temp); // eg. a faster alternative to fmod($sum, 0x4000000) + $value[$j] = $temp; + } + + if ($j == $size) { // ie. if $y_size is odd + $sum = $x_value[$i] + $y_value[$i] + $carry; + $carry = $sum >= 0x4000000; + $value[$i] = $carry ? $sum - 0x4000000 : $sum; + ++$i; // ie. let $i = $j since we've just done $value[$i] + } + + if ($carry) { + for (; $value[$i] == 0x3FFFFFF; ++$i) { + $value[$i] = 0; + } + ++$value[$i]; + } + + return array( + MATH_BIGINTEGER_VALUE => $this->_trim($value), + MATH_BIGINTEGER_SIGN => $x_negative + ); + } + + /** + * Subtracts two BigIntegers. + * + * Here's an example: + * + * subtract($b); + * + * echo $c->toString(); // outputs -10 + * ?> + * + * + * @param Math_BigInteger $y + * @return Math_BigInteger + * @access public + * @internal Performs base-2**52 subtraction + */ + function subtract($y) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = new Math_BigInteger(); + $temp->value = gmp_sub($this->value, $y->value); + + return $this->_normalize($temp); + case MATH_BIGINTEGER_MODE_BCMATH: + $temp = new Math_BigInteger(); + $temp->value = bcsub($this->value, $y->value, 0); + + return $this->_normalize($temp); + } + + $temp = $this->_subtract($this->value, $this->is_negative, $y->value, $y->is_negative); + + $result = new Math_BigInteger(); + $result->value = $temp[MATH_BIGINTEGER_VALUE]; + $result->is_negative = $temp[MATH_BIGINTEGER_SIGN]; + + return $this->_normalize($result); + } + + /** + * Performs subtraction. + * + * @param Array $x_value + * @param Boolean $x_negative + * @param Array $y_value + * @param Boolean $y_negative + * @return Array + * @access private + */ + function _subtract($x_value, $x_negative, $y_value, $y_negative) + { + $x_size = count($x_value); + $y_size = count($y_value); + + if ($x_size == 0) { + return array( + MATH_BIGINTEGER_VALUE => $y_value, + MATH_BIGINTEGER_SIGN => !$y_negative + ); + } else if ($y_size == 0) { + return array( + MATH_BIGINTEGER_VALUE => $x_value, + MATH_BIGINTEGER_SIGN => $x_negative + ); + } + + // add, if appropriate (ie. -$x - +$y or +$x - -$y) + if ( $x_negative != $y_negative ) { + $temp = $this->_add($x_value, false, $y_value, false); + $temp[MATH_BIGINTEGER_SIGN] = $x_negative; + + return $temp; + } + + $diff = $this->_compare($x_value, $x_negative, $y_value, $y_negative); + + if ( !$diff ) { + return array( + MATH_BIGINTEGER_VALUE => array(), + MATH_BIGINTEGER_SIGN => false + ); + } + + // switch $x and $y around, if appropriate. + if ( (!$x_negative && $diff < 0) || ($x_negative && $diff > 0) ) { + $temp = $x_value; + $x_value = $y_value; + $y_value = $temp; + + $x_negative = !$x_negative; + + $x_size = count($x_value); + $y_size = count($y_value); + } + + // at this point, $x_value should be at least as big as - if not bigger than - $y_value + + $carry = 0; + for ($i = 0, $j = 1; $j < $y_size; $i+=2, $j+=2) { + $sum = $x_value[$j] * 0x4000000 + $x_value[$i] - $y_value[$j] * 0x4000000 - $y_value[$i] - $carry; + $carry = $sum < 0; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1 + $sum = $carry ? $sum + MATH_BIGINTEGER_MAX_DIGIT52 : $sum; + + $temp = (int) ($sum / 0x4000000); + + $x_value[$i] = (int) ($sum - 0x4000000 * $temp); + $x_value[$j] = $temp; + } + + if ($j == $y_size) { // ie. if $y_size is odd + $sum = $x_value[$i] - $y_value[$i] - $carry; + $carry = $sum < 0; + $x_value[$i] = $carry ? $sum + 0x4000000 : $sum; + ++$i; + } + + if ($carry) { + for (; !$x_value[$i]; ++$i) { + $x_value[$i] = 0x3FFFFFF; + } + --$x_value[$i]; + } + + return array( + MATH_BIGINTEGER_VALUE => $this->_trim($x_value), + MATH_BIGINTEGER_SIGN => $x_negative + ); + } + + /** + * Multiplies two BigIntegers + * + * Here's an example: + * + * multiply($b); + * + * echo $c->toString(); // outputs 200 + * ?> + * + * + * @param Math_BigInteger $x + * @return Math_BigInteger + * @access public + */ + function multiply($x) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = new Math_BigInteger(); + $temp->value = gmp_mul($this->value, $x->value); + + return $this->_normalize($temp); + case MATH_BIGINTEGER_MODE_BCMATH: + $temp = new Math_BigInteger(); + $temp->value = bcmul($this->value, $x->value, 0); + + return $this->_normalize($temp); + } + + $temp = $this->_multiply($this->value, $this->is_negative, $x->value, $x->is_negative); + + $product = new Math_BigInteger(); + $product->value = $temp[MATH_BIGINTEGER_VALUE]; + $product->is_negative = $temp[MATH_BIGINTEGER_SIGN]; + + return $this->_normalize($product); + } + + /** + * Performs multiplication. + * + * @param Array $x_value + * @param Boolean $x_negative + * @param Array $y_value + * @param Boolean $y_negative + * @return Array + * @access private + */ + function _multiply($x_value, $x_negative, $y_value, $y_negative) + { + //if ( $x_value == $y_value ) { + // return array( + // MATH_BIGINTEGER_VALUE => $this->_square($x_value), + // MATH_BIGINTEGER_SIGN => $x_sign != $y_value + // ); + //} + + $x_length = count($x_value); + $y_length = count($y_value); + + if ( !$x_length || !$y_length ) { // a 0 is being multiplied + return array( + MATH_BIGINTEGER_VALUE => array(), + MATH_BIGINTEGER_SIGN => false + ); + } + + return array( + MATH_BIGINTEGER_VALUE => min($x_length, $y_length) < 2 * MATH_BIGINTEGER_KARATSUBA_CUTOFF ? + $this->_trim($this->_regularMultiply($x_value, $y_value)) : + $this->_trim($this->_karatsuba($x_value, $y_value)), + MATH_BIGINTEGER_SIGN => $x_negative != $y_negative + ); + } + + /** + * Performs long multiplication on two BigIntegers + * + * Modeled after 'multiply' in MutableBigInteger.java. + * + * @param Array $x_value + * @param Array $y_value + * @return Array + * @access private + */ + function _regularMultiply($x_value, $y_value) + { + $x_length = count($x_value); + $y_length = count($y_value); + + if ( !$x_length || !$y_length ) { // a 0 is being multiplied + return array(); + } + + if ( $x_length < $y_length ) { + $temp = $x_value; + $x_value = $y_value; + $y_value = $temp; + + $x_length = count($x_value); + $y_length = count($y_value); + } + + $product_value = $this->_array_repeat(0, $x_length + $y_length); + + // the following for loop could be removed if the for loop following it + // (the one with nested for loops) initially set $i to 0, but + // doing so would also make the result in one set of unnecessary adds, + // since on the outermost loops first pass, $product->value[$k] is going + // to always be 0 + + $carry = 0; + + for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0 + $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0 + $carry = (int) ($temp / 0x4000000); + $product_value[$j] = (int) ($temp - 0x4000000 * $carry); + } + + $product_value[$j] = $carry; + + // the above for loop is what the previous comment was talking about. the + // following for loop is the "one with nested for loops" + for ($i = 1; $i < $y_length; ++$i) { + $carry = 0; + + for ($j = 0, $k = $i; $j < $x_length; ++$j, ++$k) { + $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry; + $carry = (int) ($temp / 0x4000000); + $product_value[$k] = (int) ($temp - 0x4000000 * $carry); + } + + $product_value[$k] = $carry; + } + + return $product_value; + } + + /** + * Performs Karatsuba multiplication on two BigIntegers + * + * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=120 MPM 5.2.3}. + * + * @param Array $x_value + * @param Array $y_value + * @return Array + * @access private + */ + function _karatsuba($x_value, $y_value) + { + $m = min(count($x_value) >> 1, count($y_value) >> 1); + + if ($m < MATH_BIGINTEGER_KARATSUBA_CUTOFF) { + return $this->_regularMultiply($x_value, $y_value); + } + + $x1 = array_slice($x_value, $m); + $x0 = array_slice($x_value, 0, $m); + $y1 = array_slice($y_value, $m); + $y0 = array_slice($y_value, 0, $m); + + $z2 = $this->_karatsuba($x1, $y1); + $z0 = $this->_karatsuba($x0, $y0); + + $z1 = $this->_add($x1, false, $x0, false); + $temp = $this->_add($y1, false, $y0, false); + $z1 = $this->_karatsuba($z1[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_VALUE]); + $temp = $this->_add($z2, false, $z0, false); + $z1 = $this->_subtract($z1, false, $temp[MATH_BIGINTEGER_VALUE], false); + + $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2); + $z1[MATH_BIGINTEGER_VALUE] = array_merge(array_fill(0, $m, 0), $z1[MATH_BIGINTEGER_VALUE]); + + $xy = $this->_add($z2, false, $z1[MATH_BIGINTEGER_VALUE], $z1[MATH_BIGINTEGER_SIGN]); + $xy = $this->_add($xy[MATH_BIGINTEGER_VALUE], $xy[MATH_BIGINTEGER_SIGN], $z0, false); + + return $xy[MATH_BIGINTEGER_VALUE]; + } + + /** + * Performs squaring + * + * @param Array $x + * @return Array + * @access private + */ + function _square($x = false) + { + return count($x) < 2 * MATH_BIGINTEGER_KARATSUBA_CUTOFF ? + $this->_trim($this->_baseSquare($x)) : + $this->_trim($this->_karatsubaSquare($x)); + } + + /** + * Performs traditional squaring on two BigIntegers + * + * Squaring can be done faster than multiplying a number by itself can be. See + * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=7 HAC 14.2.4} / + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=141 MPM 5.3} for more information. + * + * @param Array $value + * @return Array + * @access private + */ + function _baseSquare($value) + { + if ( empty($value) ) { + return array(); + } + $square_value = $this->_array_repeat(0, 2 * count($value)); + + for ($i = 0, $max_index = count($value) - 1; $i <= $max_index; ++$i) { + $i2 = $i << 1; + + $temp = $square_value[$i2] + $value[$i] * $value[$i]; + $carry = (int) ($temp / 0x4000000); + $square_value[$i2] = (int) ($temp - 0x4000000 * $carry); + + // note how we start from $i+1 instead of 0 as we do in multiplication. + for ($j = $i + 1, $k = $i2 + 1; $j <= $max_index; ++$j, ++$k) { + $temp = $square_value[$k] + 2 * $value[$j] * $value[$i] + $carry; + $carry = (int) ($temp / 0x4000000); + $square_value[$k] = (int) ($temp - 0x4000000 * $carry); + } + + // the following line can yield values larger 2**15. at this point, PHP should switch + // over to floats. + $square_value[$i + $max_index + 1] = $carry; + } + + return $square_value; + } + + /** + * Performs Karatsuba "squaring" on two BigIntegers + * + * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=151 MPM 5.3.4}. + * + * @param Array $value + * @return Array + * @access private + */ + function _karatsubaSquare($value) + { + $m = count($value) >> 1; + + if ($m < MATH_BIGINTEGER_KARATSUBA_CUTOFF) { + return $this->_baseSquare($value); + } + + $x1 = array_slice($value, $m); + $x0 = array_slice($value, 0, $m); + + $z2 = $this->_karatsubaSquare($x1); + $z0 = $this->_karatsubaSquare($x0); + + $z1 = $this->_add($x1, false, $x0, false); + $z1 = $this->_karatsubaSquare($z1[MATH_BIGINTEGER_VALUE]); + $temp = $this->_add($z2, false, $z0, false); + $z1 = $this->_subtract($z1, false, $temp[MATH_BIGINTEGER_VALUE], false); + + $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2); + $z1[MATH_BIGINTEGER_VALUE] = array_merge(array_fill(0, $m, 0), $z1[MATH_BIGINTEGER_VALUE]); + + $xx = $this->_add($z2, false, $z1[MATH_BIGINTEGER_VALUE], $z1[MATH_BIGINTEGER_SIGN]); + $xx = $this->_add($xx[MATH_BIGINTEGER_VALUE], $xx[MATH_BIGINTEGER_SIGN], $z0, false); + + return $xx[MATH_BIGINTEGER_VALUE]; + } + + /** + * Divides two BigIntegers. + * + * Returns an array whose first element contains the quotient and whose second element contains the + * "common residue". If the remainder would be positive, the "common residue" and the remainder are the + * same. If the remainder would be negative, the "common residue" is equal to the sum of the remainder + * and the divisor (basically, the "common residue" is the first positive modulo). + * + * Here's an example: + * + * divide($b); + * + * echo $quotient->toString(); // outputs 0 + * echo "\r\n"; + * echo $remainder->toString(); // outputs 10 + * ?> + * + * + * @param Math_BigInteger $y + * @return Array + * @access public + * @internal This function is based off of {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=9 HAC 14.20}. + */ + function divide($y) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $quotient = new Math_BigInteger(); + $remainder = new Math_BigInteger(); + + list($quotient->value, $remainder->value) = gmp_div_qr($this->value, $y->value); + + if (gmp_sign($remainder->value) < 0) { + $remainder->value = gmp_add($remainder->value, gmp_abs($y->value)); + } + + return array($this->_normalize($quotient), $this->_normalize($remainder)); + case MATH_BIGINTEGER_MODE_BCMATH: + $quotient = new Math_BigInteger(); + $remainder = new Math_BigInteger(); + + $quotient->value = bcdiv($this->value, $y->value, 0); + $remainder->value = bcmod($this->value, $y->value); + + if ($remainder->value[0] == '-') { + $remainder->value = bcadd($remainder->value, $y->value[0] == '-' ? substr($y->value, 1) : $y->value, 0); + } + + return array($this->_normalize($quotient), $this->_normalize($remainder)); + } + + if (count($y->value) == 1) { + list($q, $r) = $this->_divide_digit($this->value, $y->value[0]); + $quotient = new Math_BigInteger(); + $remainder = new Math_BigInteger(); + $quotient->value = $q; + $remainder->value = array($r); + $quotient->is_negative = $this->is_negative != $y->is_negative; + return array($this->_normalize($quotient), $this->_normalize($remainder)); + } + + static $zero; + if ( !isset($zero) ) { + $zero = new Math_BigInteger(); + } + + $x = $this->copy(); + $y = $y->copy(); + + $x_sign = $x->is_negative; + $y_sign = $y->is_negative; + + $x->is_negative = $y->is_negative = false; + + $diff = $x->compare($y); + + if ( !$diff ) { + $temp = new Math_BigInteger(); + $temp->value = array(1); + $temp->is_negative = $x_sign != $y_sign; + return array($this->_normalize($temp), $this->_normalize(new Math_BigInteger())); + } + + if ( $diff < 0 ) { + // if $x is negative, "add" $y. + if ( $x_sign ) { + $x = $y->subtract($x); + } + return array($this->_normalize(new Math_BigInteger()), $this->_normalize($x)); + } + + // normalize $x and $y as described in HAC 14.23 / 14.24 + $msb = $y->value[count($y->value) - 1]; + for ($shift = 0; !($msb & 0x2000000); ++$shift) { + $msb <<= 1; + } + $x->_lshift($shift); + $y->_lshift($shift); + $y_value = &$y->value; + + $x_max = count($x->value) - 1; + $y_max = count($y->value) - 1; + + $quotient = new Math_BigInteger(); + $quotient_value = &$quotient->value; + $quotient_value = $this->_array_repeat(0, $x_max - $y_max + 1); + + static $temp, $lhs, $rhs; + if (!isset($temp)) { + $temp = new Math_BigInteger(); + $lhs = new Math_BigInteger(); + $rhs = new Math_BigInteger(); + } + $temp_value = &$temp->value; + $rhs_value = &$rhs->value; + + // $temp = $y << ($x_max - $y_max-1) in base 2**26 + $temp_value = array_merge($this->_array_repeat(0, $x_max - $y_max), $y_value); + + while ( $x->compare($temp) >= 0 ) { + // calculate the "common residue" + ++$quotient_value[$x_max - $y_max]; + $x = $x->subtract($temp); + $x_max = count($x->value) - 1; + } + + for ($i = $x_max; $i >= $y_max + 1; --$i) { + $x_value = &$x->value; + $x_window = array( + isset($x_value[$i]) ? $x_value[$i] : 0, + isset($x_value[$i - 1]) ? $x_value[$i - 1] : 0, + isset($x_value[$i - 2]) ? $x_value[$i - 2] : 0 + ); + $y_window = array( + $y_value[$y_max], + ( $y_max > 0 ) ? $y_value[$y_max - 1] : 0 + ); + + $q_index = $i - $y_max - 1; + if ($x_window[0] == $y_window[0]) { + $quotient_value[$q_index] = 0x3FFFFFF; + } else { + $quotient_value[$q_index] = (int) ( + ($x_window[0] * 0x4000000 + $x_window[1]) + / + $y_window[0] + ); + } + + $temp_value = array($y_window[1], $y_window[0]); + + $lhs->value = array($quotient_value[$q_index]); + $lhs = $lhs->multiply($temp); + + $rhs_value = array($x_window[2], $x_window[1], $x_window[0]); + + while ( $lhs->compare($rhs) > 0 ) { + --$quotient_value[$q_index]; + + $lhs->value = array($quotient_value[$q_index]); + $lhs = $lhs->multiply($temp); + } + + $adjust = $this->_array_repeat(0, $q_index); + $temp_value = array($quotient_value[$q_index]); + $temp = $temp->multiply($y); + $temp_value = &$temp->value; + $temp_value = array_merge($adjust, $temp_value); + + $x = $x->subtract($temp); + + if ($x->compare($zero) < 0) { + $temp_value = array_merge($adjust, $y_value); + $x = $x->add($temp); + + --$quotient_value[$q_index]; + } + + $x_max = count($x_value) - 1; + } + + // unnormalize the remainder + $x->_rshift($shift); + + $quotient->is_negative = $x_sign != $y_sign; + + // calculate the "common residue", if appropriate + if ( $x_sign ) { + $y->_rshift($shift); + $x = $y->subtract($x); + } + + return array($this->_normalize($quotient), $this->_normalize($x)); + } + + /** + * Divides a BigInteger by a regular integer + * + * abc / x = a00 / x + b0 / x + c / x + * + * @param Array $dividend + * @param Array $divisor + * @return Array + * @access private + */ + function _divide_digit($dividend, $divisor) + { + $carry = 0; + $result = array(); + + for ($i = count($dividend) - 1; $i >= 0; --$i) { + $temp = 0x4000000 * $carry + $dividend[$i]; + $result[$i] = (int) ($temp / $divisor); + $carry = (int) ($temp - $divisor * $result[$i]); + } + + return array($result, $carry); + } + + /** + * Performs modular exponentiation. + * + * Here's an example: + * + * modPow($b, $c); + * + * echo $c->toString(); // outputs 10 + * ?> + * + * + * @param Math_BigInteger $e + * @param Math_BigInteger $n + * @return Math_BigInteger + * @access public + * @internal The most naive approach to modular exponentiation has very unreasonable requirements, and + * and although the approach involving repeated squaring does vastly better, it, too, is impractical + * for our purposes. The reason being that division - by far the most complicated and time-consuming + * of the basic operations (eg. +,-,*,/) - occurs multiple times within it. + * + * Modular reductions resolve this issue. Although an individual modular reduction takes more time + * then an individual division, when performed in succession (with the same modulo), they're a lot faster. + * + * The two most commonly used modular reductions are Barrett and Montgomery reduction. Montgomery reduction, + * although faster, only works when the gcd of the modulo and of the base being used is 1. In RSA, when the + * base is a power of two, the modulo - a product of two primes - is always going to have a gcd of 1 (because + * the product of two odd numbers is odd), but what about when RSA isn't used? + * + * In contrast, Barrett reduction has no such constraint. As such, some bigint implementations perform a + * Barrett reduction after every operation in the modpow function. Others perform Barrett reductions when the + * modulo is even and Montgomery reductions when the modulo is odd. BigInteger.java's modPow method, however, + * uses a trick involving the Chinese Remainder Theorem to factor the even modulo into two numbers - one odd and + * the other, a power of two - and recombine them, later. This is the method that this modPow function uses. + * {@link http://islab.oregonstate.edu/papers/j34monex.pdf Montgomery Reduction with Even Modulus} elaborates. + */ + function modPow($e, $n) + { + $n = $this->bitmask !== false && $this->bitmask->compare($n) < 0 ? $this->bitmask : $n->abs(); + + if ($e->compare(new Math_BigInteger()) < 0) { + $e = $e->abs(); + + $temp = $this->modInverse($n); + if ($temp === false) { + return false; + } + + return $this->_normalize($temp->modPow($e, $n)); + } + + if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_GMP ) { + $temp = new Math_BigInteger(); + $temp->value = gmp_powm($this->value, $e->value, $n->value); + + return $this->_normalize($temp); + } + + if ($this->compare(new Math_BigInteger()) < 0 || $this->compare($n) > 0) { + list(, $temp) = $this->divide($n); + return $temp->modPow($e, $n); + } + + if (defined('MATH_BIGINTEGER_OPENSSL_ENABLED')) { + $components = array( + 'modulus' => $n->toBytes(true), + 'publicExponent' => $e->toBytes(true) + ); + + $components = array( + 'modulus' => pack('Ca*a*', 2, $this->_encodeASN1Length(strlen($components['modulus'])), $components['modulus']), + 'publicExponent' => pack('Ca*a*', 2, $this->_encodeASN1Length(strlen($components['publicExponent'])), $components['publicExponent']) + ); + + $RSAPublicKey = pack('Ca*a*a*', + 48, $this->_encodeASN1Length(strlen($components['modulus']) + strlen($components['publicExponent'])), + $components['modulus'], $components['publicExponent'] + ); + + $rsaOID = pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA + $RSAPublicKey = chr(0) . $RSAPublicKey; + $RSAPublicKey = chr(3) . $this->_encodeASN1Length(strlen($RSAPublicKey)) . $RSAPublicKey; + + $encapsulated = pack('Ca*a*', + 48, $this->_encodeASN1Length(strlen($rsaOID . $RSAPublicKey)), $rsaOID . $RSAPublicKey + ); + + $RSAPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" . + chunk_split(base64_encode($encapsulated)) . + '-----END PUBLIC KEY-----'; + + $plaintext = str_pad($this->toBytes(), strlen($n->toBytes(true)) - 1, "\0", STR_PAD_LEFT); + + if (openssl_public_encrypt($plaintext, $result, $RSAPublicKey, OPENSSL_NO_PADDING)) { + return new Math_BigInteger($result, 256); + } + } + + if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_BCMATH ) { + $temp = new Math_BigInteger(); + $temp->value = bcpowmod($this->value, $e->value, $n->value, 0); + + return $this->_normalize($temp); + } + + if ( empty($e->value) ) { + $temp = new Math_BigInteger(); + $temp->value = array(1); + return $this->_normalize($temp); + } + + if ( $e->value == array(1) ) { + list(, $temp) = $this->divide($n); + return $this->_normalize($temp); + } + + if ( $e->value == array(2) ) { + $temp = new Math_BigInteger(); + $temp->value = $this->_square($this->value); + list(, $temp) = $temp->divide($n); + return $this->_normalize($temp); + } + + return $this->_normalize($this->_slidingWindow($e, $n, MATH_BIGINTEGER_BARRETT)); + + // is the modulo odd? + if ( $n->value[0] & 1 ) { + return $this->_normalize($this->_slidingWindow($e, $n, MATH_BIGINTEGER_MONTGOMERY)); + } + // if it's not, it's even + + // find the lowest set bit (eg. the max pow of 2 that divides $n) + for ($i = 0; $i < count($n->value); ++$i) { + if ( $n->value[$i] ) { + $temp = decbin($n->value[$i]); + $j = strlen($temp) - strrpos($temp, '1') - 1; + $j+= 26 * $i; + break; + } + } + // at this point, 2^$j * $n/(2^$j) == $n + + $mod1 = $n->copy(); + $mod1->_rshift($j); + $mod2 = new Math_BigInteger(); + $mod2->value = array(1); + $mod2->_lshift($j); + + $part1 = ( $mod1->value != array(1) ) ? $this->_slidingWindow($e, $mod1, MATH_BIGINTEGER_MONTGOMERY) : new Math_BigInteger(); + $part2 = $this->_slidingWindow($e, $mod2, MATH_BIGINTEGER_POWEROF2); + + $y1 = $mod2->modInverse($mod1); + $y2 = $mod1->modInverse($mod2); + + $result = $part1->multiply($mod2); + $result = $result->multiply($y1); + + $temp = $part2->multiply($mod1); + $temp = $temp->multiply($y2); + + $result = $result->add($temp); + list(, $result) = $result->divide($n); + + return $this->_normalize($result); + } + + /** + * Performs modular exponentiation. + * + * Alias for Math_BigInteger::modPow() + * + * @param Math_BigInteger $e + * @param Math_BigInteger $n + * @return Math_BigInteger + * @access public + */ + function powMod($e, $n) + { + return $this->modPow($e, $n); + } + + /** + * Sliding Window k-ary Modular Exponentiation + * + * Based on {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=27 HAC 14.85} / + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=210 MPM 7.7}. In a departure from those algorithims, + * however, this function performs a modular reduction after every multiplication and squaring operation. + * As such, this function has the same preconditions that the reductions being used do. + * + * @param Math_BigInteger $e + * @param Math_BigInteger $n + * @param Integer $mode + * @return Math_BigInteger + * @access private + */ + function _slidingWindow($e, $n, $mode) + { + static $window_ranges = array(7, 25, 81, 241, 673, 1793); // from BigInteger.java's oddModPow function + //static $window_ranges = array(0, 7, 36, 140, 450, 1303, 3529); // from MPM 7.3.1 + + $e_value = $e->value; + $e_length = count($e_value) - 1; + $e_bits = decbin($e_value[$e_length]); + for ($i = $e_length - 1; $i >= 0; --$i) { + $e_bits.= str_pad(decbin($e_value[$i]), 26, '0', STR_PAD_LEFT); + } + + $e_length = strlen($e_bits); + + // calculate the appropriate window size. + // $window_size == 3 if $window_ranges is between 25 and 81, for example. + for ($i = 0, $window_size = 1; $e_length > $window_ranges[$i] && $i < count($window_ranges); ++$window_size, ++$i); + + $n_value = $n->value; + + // precompute $this^0 through $this^$window_size + $powers = array(); + $powers[1] = $this->_prepareReduce($this->value, $n_value, $mode); + $powers[2] = $this->_squareReduce($powers[1], $n_value, $mode); + + // we do every other number since substr($e_bits, $i, $j+1) (see below) is supposed to end + // in a 1. ie. it's supposed to be odd. + $temp = 1 << ($window_size - 1); + for ($i = 1; $i < $temp; ++$i) { + $i2 = $i << 1; + $powers[$i2 + 1] = $this->_multiplyReduce($powers[$i2 - 1], $powers[2], $n_value, $mode); + } + + $result = array(1); + $result = $this->_prepareReduce($result, $n_value, $mode); + + for ($i = 0; $i < $e_length; ) { + if ( !$e_bits[$i] ) { + $result = $this->_squareReduce($result, $n_value, $mode); + ++$i; + } else { + for ($j = $window_size - 1; $j > 0; --$j) { + if ( !empty($e_bits[$i + $j]) ) { + break; + } + } + + for ($k = 0; $k <= $j; ++$k) {// eg. the length of substr($e_bits, $i, $j+1) + $result = $this->_squareReduce($result, $n_value, $mode); + } + + $result = $this->_multiplyReduce($result, $powers[bindec(substr($e_bits, $i, $j + 1))], $n_value, $mode); + + $i+=$j + 1; + } + } + + $temp = new Math_BigInteger(); + $temp->value = $this->_reduce($result, $n_value, $mode); + + return $temp; + } + + /** + * Modular reduction + * + * For most $modes this will return the remainder. + * + * @see _slidingWindow() + * @access private + * @param Array $x + * @param Array $n + * @param Integer $mode + * @return Array + */ + function _reduce($x, $n, $mode) + { + switch ($mode) { + case MATH_BIGINTEGER_MONTGOMERY: + return $this->_montgomery($x, $n); + case MATH_BIGINTEGER_BARRETT: + return $this->_barrett($x, $n); + case MATH_BIGINTEGER_POWEROF2: + $lhs = new Math_BigInteger(); + $lhs->value = $x; + $rhs = new Math_BigInteger(); + $rhs->value = $n; + return $x->_mod2($n); + case MATH_BIGINTEGER_CLASSIC: + $lhs = new Math_BigInteger(); + $lhs->value = $x; + $rhs = new Math_BigInteger(); + $rhs->value = $n; + list(, $temp) = $lhs->divide($rhs); + return $temp->value; + case MATH_BIGINTEGER_NONE: + return $x; + default: + // an invalid $mode was provided + } + } + + /** + * Modular reduction preperation + * + * @see _slidingWindow() + * @access private + * @param Array $x + * @param Array $n + * @param Integer $mode + * @return Array + */ + function _prepareReduce($x, $n, $mode) + { + if ($mode == MATH_BIGINTEGER_MONTGOMERY) { + return $this->_prepMontgomery($x, $n); + } + return $this->_reduce($x, $n, $mode); + } + + /** + * Modular multiply + * + * @see _slidingWindow() + * @access private + * @param Array $x + * @param Array $y + * @param Array $n + * @param Integer $mode + * @return Array + */ + function _multiplyReduce($x, $y, $n, $mode) + { + if ($mode == MATH_BIGINTEGER_MONTGOMERY) { + return $this->_montgomeryMultiply($x, $y, $n); + } + $temp = $this->_multiply($x, false, $y, false); + return $this->_reduce($temp[MATH_BIGINTEGER_VALUE], $n, $mode); + } + + /** + * Modular square + * + * @see _slidingWindow() + * @access private + * @param Array $x + * @param Array $n + * @param Integer $mode + * @return Array + */ + function _squareReduce($x, $n, $mode) + { + if ($mode == MATH_BIGINTEGER_MONTGOMERY) { + return $this->_montgomeryMultiply($x, $x, $n); + } + return $this->_reduce($this->_square($x), $n, $mode); + } + + /** + * Modulos for Powers of Two + * + * Calculates $x%$n, where $n = 2**$e, for some $e. Since this is basically the same as doing $x & ($n-1), + * we'll just use this function as a wrapper for doing that. + * + * @see _slidingWindow() + * @access private + * @param Math_BigInteger + * @return Math_BigInteger + */ + function _mod2($n) + { + $temp = new Math_BigInteger(); + $temp->value = array(1); + return $this->bitwise_and($n->subtract($temp)); + } + + /** + * Barrett Modular Reduction + * + * See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=14 HAC 14.3.3} / + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=165 MPM 6.2.5} for more information. Modified slightly, + * so as not to require negative numbers (initially, this script didn't support negative numbers). + * + * Employs "folding", as described at + * {@link http://www.cosic.esat.kuleuven.be/publications/thesis-149.pdf#page=66 thesis-149.pdf#page=66}. To quote from + * it, "the idea [behind folding] is to find a value x' such that x (mod m) = x' (mod m), with x' being smaller than x." + * + * Unfortunately, the "Barrett Reduction with Folding" algorithm described in thesis-149.pdf is not, as written, all that + * usable on account of (1) its not using reasonable radix points as discussed in + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=162 MPM 6.2.2} and (2) the fact that, even with reasonable + * radix points, it only works when there are an even number of digits in the denominator. The reason for (2) is that + * (x >> 1) + (x >> 1) != x / 2 + x / 2. If x is even, they're the same, but if x is odd, they're not. See the in-line + * comments for details. + * + * @see _slidingWindow() + * @access private + * @param Array $n + * @param Array $m + * @return Array + */ + function _barrett($n, $m) + { + static $cache = array( + MATH_BIGINTEGER_VARIABLE => array(), + MATH_BIGINTEGER_DATA => array() + ); + + $m_length = count($m); + + // if ($this->_compare($n, $this->_square($m)) >= 0) { + if (count($n) > 2 * $m_length) { + $lhs = new Math_BigInteger(); + $rhs = new Math_BigInteger(); + $lhs->value = $n; + $rhs->value = $m; + list(, $temp) = $lhs->divide($rhs); + return $temp->value; + } + + // if (m.length >> 1) + 2 <= m.length then m is too small and n can't be reduced + if ($m_length < 5) { + return $this->_regularBarrett($n, $m); + } + + // n = 2 * m.length + + if ( ($key = array_search($m, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) { + $key = count($cache[MATH_BIGINTEGER_VARIABLE]); + $cache[MATH_BIGINTEGER_VARIABLE][] = $m; + + $lhs = new Math_BigInteger(); + $lhs_value = &$lhs->value; + $lhs_value = $this->_array_repeat(0, $m_length + ($m_length >> 1)); + $lhs_value[] = 1; + $rhs = new Math_BigInteger(); + $rhs->value = $m; + + list($u, $m1) = $lhs->divide($rhs); + $u = $u->value; + $m1 = $m1->value; + + $cache[MATH_BIGINTEGER_DATA][] = array( + 'u' => $u, // m.length >> 1 (technically (m.length >> 1) + 1) + 'm1'=> $m1 // m.length + ); + } else { + extract($cache[MATH_BIGINTEGER_DATA][$key]); + } + + $cutoff = $m_length + ($m_length >> 1); + $lsd = array_slice($n, 0, $cutoff); // m.length + (m.length >> 1) + $msd = array_slice($n, $cutoff); // m.length >> 1 + $lsd = $this->_trim($lsd); + $temp = $this->_multiply($msd, false, $m1, false); + $n = $this->_add($lsd, false, $temp[MATH_BIGINTEGER_VALUE], false); // m.length + (m.length >> 1) + 1 + + if ($m_length & 1) { + return $this->_regularBarrett($n[MATH_BIGINTEGER_VALUE], $m); + } + + // (m.length + (m.length >> 1) + 1) - (m.length - 1) == (m.length >> 1) + 2 + $temp = array_slice($n[MATH_BIGINTEGER_VALUE], $m_length - 1); + // if even: ((m.length >> 1) + 2) + (m.length >> 1) == m.length + 2 + // if odd: ((m.length >> 1) + 2) + (m.length >> 1) == (m.length - 1) + 2 == m.length + 1 + $temp = $this->_multiply($temp, false, $u, false); + // if even: (m.length + 2) - ((m.length >> 1) + 1) = m.length - (m.length >> 1) + 1 + // if odd: (m.length + 1) - ((m.length >> 1) + 1) = m.length - (m.length >> 1) + $temp = array_slice($temp[MATH_BIGINTEGER_VALUE], ($m_length >> 1) + 1); + // if even: (m.length - (m.length >> 1) + 1) + m.length = 2 * m.length - (m.length >> 1) + 1 + // if odd: (m.length - (m.length >> 1)) + m.length = 2 * m.length - (m.length >> 1) + $temp = $this->_multiply($temp, false, $m, false); + + // at this point, if m had an odd number of digits, we'd be subtracting a 2 * m.length - (m.length >> 1) digit + // number from a m.length + (m.length >> 1) + 1 digit number. ie. there'd be an extra digit and the while loop + // following this comment would loop a lot (hence our calling _regularBarrett() in that situation). + + $result = $this->_subtract($n[MATH_BIGINTEGER_VALUE], false, $temp[MATH_BIGINTEGER_VALUE], false); + + while ($this->_compare($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $m, false) >= 0) { + $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $m, false); + } + + return $result[MATH_BIGINTEGER_VALUE]; + } + + /** + * (Regular) Barrett Modular Reduction + * + * For numbers with more than four digits Math_BigInteger::_barrett() is faster. The difference between that and this + * is that this function does not fold the denominator into a smaller form. + * + * @see _slidingWindow() + * @access private + * @param Array $x + * @param Array $n + * @return Array + */ + function _regularBarrett($x, $n) + { + static $cache = array( + MATH_BIGINTEGER_VARIABLE => array(), + MATH_BIGINTEGER_DATA => array() + ); + + $n_length = count($n); + + if (count($x) > 2 * $n_length) { + $lhs = new Math_BigInteger(); + $rhs = new Math_BigInteger(); + $lhs->value = $x; + $rhs->value = $n; + list(, $temp) = $lhs->divide($rhs); + return $temp->value; + } + + if ( ($key = array_search($n, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) { + $key = count($cache[MATH_BIGINTEGER_VARIABLE]); + $cache[MATH_BIGINTEGER_VARIABLE][] = $n; + $lhs = new Math_BigInteger(); + $lhs_value = &$lhs->value; + $lhs_value = $this->_array_repeat(0, 2 * $n_length); + $lhs_value[] = 1; + $rhs = new Math_BigInteger(); + $rhs->value = $n; + list($temp, ) = $lhs->divide($rhs); // m.length + $cache[MATH_BIGINTEGER_DATA][] = $temp->value; + } + + // 2 * m.length - (m.length - 1) = m.length + 1 + $temp = array_slice($x, $n_length - 1); + // (m.length + 1) + m.length = 2 * m.length + 1 + $temp = $this->_multiply($temp, false, $cache[MATH_BIGINTEGER_DATA][$key], false); + // (2 * m.length + 1) - (m.length - 1) = m.length + 2 + $temp = array_slice($temp[MATH_BIGINTEGER_VALUE], $n_length + 1); + + // m.length + 1 + $result = array_slice($x, 0, $n_length + 1); + // m.length + 1 + $temp = $this->_multiplyLower($temp, false, $n, false, $n_length + 1); + // $temp == array_slice($temp->_multiply($temp, false, $n, false)->value, 0, $n_length + 1) + + if ($this->_compare($result, false, $temp[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_SIGN]) < 0) { + $corrector_value = $this->_array_repeat(0, $n_length + 1); + $corrector_value[] = 1; + $result = $this->_add($result, false, $corrector, false); + $result = $result[MATH_BIGINTEGER_VALUE]; + } + + // at this point, we're subtracting a number with m.length + 1 digits from another number with m.length + 1 digits + $result = $this->_subtract($result, false, $temp[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_SIGN]); + while ($this->_compare($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $n, false) > 0) { + $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $n, false); + } + + return $result[MATH_BIGINTEGER_VALUE]; + } + + /** + * Performs long multiplication up to $stop digits + * + * If you're going to be doing array_slice($product->value, 0, $stop), some cycles can be saved. + * + * @see _regularBarrett() + * @param Array $x_value + * @param Boolean $x_negative + * @param Array $y_value + * @param Boolean $y_negative + * @return Array + * @access private + */ + function _multiplyLower($x_value, $x_negative, $y_value, $y_negative, $stop) + { + $x_length = count($x_value); + $y_length = count($y_value); + + if ( !$x_length || !$y_length ) { // a 0 is being multiplied + return array( + MATH_BIGINTEGER_VALUE => array(), + MATH_BIGINTEGER_SIGN => false + ); + } + + if ( $x_length < $y_length ) { + $temp = $x_value; + $x_value = $y_value; + $y_value = $temp; + + $x_length = count($x_value); + $y_length = count($y_value); + } + + $product_value = $this->_array_repeat(0, $x_length + $y_length); + + // the following for loop could be removed if the for loop following it + // (the one with nested for loops) initially set $i to 0, but + // doing so would also make the result in one set of unnecessary adds, + // since on the outermost loops first pass, $product->value[$k] is going + // to always be 0 + + $carry = 0; + + for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0, $k = $i + $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0 + $carry = (int) ($temp / 0x4000000); + $product_value[$j] = (int) ($temp - 0x4000000 * $carry); + } + + if ($j < $stop) { + $product_value[$j] = $carry; + } + + // the above for loop is what the previous comment was talking about. the + // following for loop is the "one with nested for loops" + + for ($i = 1; $i < $y_length; ++$i) { + $carry = 0; + + for ($j = 0, $k = $i; $j < $x_length && $k < $stop; ++$j, ++$k) { + $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry; + $carry = (int) ($temp / 0x4000000); + $product_value[$k] = (int) ($temp - 0x4000000 * $carry); + } + + if ($k < $stop) { + $product_value[$k] = $carry; + } + } + + return array( + MATH_BIGINTEGER_VALUE => $this->_trim($product_value), + MATH_BIGINTEGER_SIGN => $x_negative != $y_negative + ); + } + + /** + * Montgomery Modular Reduction + * + * ($x->_prepMontgomery($n))->_montgomery($n) yields $x % $n. + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=170 MPM 6.3} provides insights on how this can be + * improved upon (basically, by using the comba method). gcd($n, 2) must be equal to one for this function + * to work correctly. + * + * @see _prepMontgomery() + * @see _slidingWindow() + * @access private + * @param Array $x + * @param Array $n + * @return Array + */ + function _montgomery($x, $n) + { + static $cache = array( + MATH_BIGINTEGER_VARIABLE => array(), + MATH_BIGINTEGER_DATA => array() + ); + + if ( ($key = array_search($n, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) { + $key = count($cache[MATH_BIGINTEGER_VARIABLE]); + $cache[MATH_BIGINTEGER_VARIABLE][] = $x; + $cache[MATH_BIGINTEGER_DATA][] = $this->_modInverse67108864($n); + } + + $k = count($n); + + $result = array(MATH_BIGINTEGER_VALUE => $x); + + for ($i = 0; $i < $k; ++$i) { + $temp = $result[MATH_BIGINTEGER_VALUE][$i] * $cache[MATH_BIGINTEGER_DATA][$key]; + $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000))); + $temp = $this->_regularMultiply(array($temp), $n); + $temp = array_merge($this->_array_repeat(0, $i), $temp); + $result = $this->_add($result[MATH_BIGINTEGER_VALUE], false, $temp, false); + } + + $result[MATH_BIGINTEGER_VALUE] = array_slice($result[MATH_BIGINTEGER_VALUE], $k); + + if ($this->_compare($result, false, $n, false) >= 0) { + $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], false, $n, false); + } + + return $result[MATH_BIGINTEGER_VALUE]; + } + + /** + * Montgomery Multiply + * + * Interleaves the montgomery reduction and long multiplication algorithms together as described in + * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=13 HAC 14.36} + * + * @see _prepMontgomery() + * @see _montgomery() + * @access private + * @param Array $x + * @param Array $y + * @param Array $m + * @return Array + */ + function _montgomeryMultiply($x, $y, $m) + { + $temp = $this->_multiply($x, false, $y, false); + return $this->_montgomery($temp[MATH_BIGINTEGER_VALUE], $m); + + static $cache = array( + MATH_BIGINTEGER_VARIABLE => array(), + MATH_BIGINTEGER_DATA => array() + ); + + if ( ($key = array_search($m, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) { + $key = count($cache[MATH_BIGINTEGER_VARIABLE]); + $cache[MATH_BIGINTEGER_VARIABLE][] = $m; + $cache[MATH_BIGINTEGER_DATA][] = $this->_modInverse67108864($m); + } + + $n = max(count($x), count($y), count($m)); + $x = array_pad($x, $n, 0); + $y = array_pad($y, $n, 0); + $m = array_pad($m, $n, 0); + $a = array(MATH_BIGINTEGER_VALUE => $this->_array_repeat(0, $n + 1)); + for ($i = 0; $i < $n; ++$i) { + $temp = $a[MATH_BIGINTEGER_VALUE][0] + $x[$i] * $y[0]; + $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000))); + $temp = $temp * $cache[MATH_BIGINTEGER_DATA][$key]; + $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000))); + $temp = $this->_add($this->_regularMultiply(array($x[$i]), $y), false, $this->_regularMultiply(array($temp), $m), false); + $a = $this->_add($a[MATH_BIGINTEGER_VALUE], false, $temp[MATH_BIGINTEGER_VALUE], false); + $a[MATH_BIGINTEGER_VALUE] = array_slice($a[MATH_BIGINTEGER_VALUE], 1); + } + if ($this->_compare($a[MATH_BIGINTEGER_VALUE], false, $m, false) >= 0) { + $a = $this->_subtract($a[MATH_BIGINTEGER_VALUE], false, $m, false); + } + return $a[MATH_BIGINTEGER_VALUE]; + } + + /** + * Prepare a number for use in Montgomery Modular Reductions + * + * @see _montgomery() + * @see _slidingWindow() + * @access private + * @param Array $x + * @param Array $n + * @return Array + */ + function _prepMontgomery($x, $n) + { + $lhs = new Math_BigInteger(); + $lhs->value = array_merge($this->_array_repeat(0, count($n)), $x); + $rhs = new Math_BigInteger(); + $rhs->value = $n; + + list(, $temp) = $lhs->divide($rhs); + return $temp->value; + } + + /** + * Modular Inverse of a number mod 2**26 (eg. 67108864) + * + * Based off of the bnpInvDigit function implemented and justified in the following URL: + * + * {@link http://www-cs-students.stanford.edu/~tjw/jsbn/jsbn.js} + * + * The following URL provides more info: + * + * {@link http://groups.google.com/group/sci.crypt/msg/7a137205c1be7d85} + * + * As for why we do all the bitmasking... strange things can happen when converting from floats to ints. For + * instance, on some computers, var_dump((int) -4294967297) yields int(-1) and on others, it yields + * int(-2147483648). To avoid problems stemming from this, we use bitmasks to guarantee that ints aren't + * auto-converted to floats. The outermost bitmask is present because without it, there's no guarantee that + * the "residue" returned would be the so-called "common residue". We use fmod, in the last step, because the + * maximum possible $x is 26 bits and the maximum $result is 16 bits. Thus, we have to be able to handle up to + * 40 bits, which only 64-bit floating points will support. + * + * Thanks to Pedro Gimeno Fortea for input! + * + * @see _montgomery() + * @access private + * @param Array $x + * @return Integer + */ + function _modInverse67108864($x) // 2**26 == 67108864 + { + $x = -$x[0]; + $result = $x & 0x3; // x**-1 mod 2**2 + $result = ($result * (2 - $x * $result)) & 0xF; // x**-1 mod 2**4 + $result = ($result * (2 - ($x & 0xFF) * $result)) & 0xFF; // x**-1 mod 2**8 + $result = ($result * ((2 - ($x & 0xFFFF) * $result) & 0xFFFF)) & 0xFFFF; // x**-1 mod 2**16 + $result = fmod($result * (2 - fmod($x * $result, 0x4000000)), 0x4000000); // x**-1 mod 2**26 + return $result & 0x3FFFFFF; + } + + /** + * Calculates modular inverses. + * + * Say you have (30 mod 17 * x mod 17) mod 17 == 1. x can be found using modular inverses. + * + * Here's an example: + * + * modInverse($b); + * echo $c->toString(); // outputs 4 + * + * echo "\r\n"; + * + * $d = $a->multiply($c); + * list(, $d) = $d->divide($b); + * echo $d; // outputs 1 (as per the definition of modular inverse) + * ?> + * + * + * @param Math_BigInteger $n + * @return mixed false, if no modular inverse exists, Math_BigInteger, otherwise. + * @access public + * @internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=21 HAC 14.64} for more information. + */ + function modInverse($n) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = new Math_BigInteger(); + $temp->value = gmp_invert($this->value, $n->value); + + return ( $temp->value === false ) ? false : $this->_normalize($temp); + } + + static $zero, $one; + if (!isset($zero)) { + $zero = new Math_BigInteger(); + $one = new Math_BigInteger(1); + } + + // $x mod -$n == $x mod $n. + $n = $n->abs(); + + if ($this->compare($zero) < 0) { + $temp = $this->abs(); + $temp = $temp->modInverse($n); + return $this->_normalize($n->subtract($temp)); + } + + extract($this->extendedGCD($n)); + + if (!$gcd->equals($one)) { + return false; + } + + $x = $x->compare($zero) < 0 ? $x->add($n) : $x; + + return $this->compare($zero) < 0 ? $this->_normalize($n->subtract($x)) : $this->_normalize($x); + } + + /** + * Calculates the greatest common divisor and Bzout's identity. + * + * Say you have 693 and 609. The GCD is 21. Bzout's identity states that there exist integers x and y such that + * 693*x + 609*y == 21. In point of fact, there are actually an infinite number of x and y combinations and which + * combination is returned is dependant upon which mode is in use. See + * {@link http://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity Bzout's identity - Wikipedia} for more information. + * + * Here's an example: + * + * extendedGCD($b)); + * + * echo $gcd->toString() . "\r\n"; // outputs 21 + * echo $a->toString() * $x->toString() + $b->toString() * $y->toString(); // outputs 21 + * ?> + * + * + * @param Math_BigInteger $n + * @return Math_BigInteger + * @access public + * @internal Calculates the GCD using the binary xGCD algorithim described in + * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=19 HAC 14.61}. As the text above 14.61 notes, + * the more traditional algorithim requires "relatively costly multiple-precision divisions". + */ + function extendedGCD($n) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + extract(gmp_gcdext($this->value, $n->value)); + + return array( + 'gcd' => $this->_normalize(new Math_BigInteger($g)), + 'x' => $this->_normalize(new Math_BigInteger($s)), + 'y' => $this->_normalize(new Math_BigInteger($t)) + ); + case MATH_BIGINTEGER_MODE_BCMATH: + // it might be faster to use the binary xGCD algorithim here, as well, but (1) that algorithim works + // best when the base is a power of 2 and (2) i don't think it'd make much difference, anyway. as is, + // the basic extended euclidean algorithim is what we're using. + + $u = $this->value; + $v = $n->value; + + $a = '1'; + $b = '0'; + $c = '0'; + $d = '1'; + + while (bccomp($v, '0', 0) != 0) { + $q = bcdiv($u, $v, 0); + + $temp = $u; + $u = $v; + $v = bcsub($temp, bcmul($v, $q, 0), 0); + + $temp = $a; + $a = $c; + $c = bcsub($temp, bcmul($a, $q, 0), 0); + + $temp = $b; + $b = $d; + $d = bcsub($temp, bcmul($b, $q, 0), 0); + } + + return array( + 'gcd' => $this->_normalize(new Math_BigInteger($u)), + 'x' => $this->_normalize(new Math_BigInteger($a)), + 'y' => $this->_normalize(new Math_BigInteger($b)) + ); + } + + $y = $n->copy(); + $x = $this->copy(); + $g = new Math_BigInteger(); + $g->value = array(1); + + while ( !(($x->value[0] & 1)|| ($y->value[0] & 1)) ) { + $x->_rshift(1); + $y->_rshift(1); + $g->_lshift(1); + } + + $u = $x->copy(); + $v = $y->copy(); + + $a = new Math_BigInteger(); + $b = new Math_BigInteger(); + $c = new Math_BigInteger(); + $d = new Math_BigInteger(); + + $a->value = $d->value = $g->value = array(1); + $b->value = $c->value = array(); + + while ( !empty($u->value) ) { + while ( !($u->value[0] & 1) ) { + $u->_rshift(1); + if ( (!empty($a->value) && ($a->value[0] & 1)) || (!empty($b->value) && ($b->value[0] & 1)) ) { + $a = $a->add($y); + $b = $b->subtract($x); + } + $a->_rshift(1); + $b->_rshift(1); + } + + while ( !($v->value[0] & 1) ) { + $v->_rshift(1); + if ( (!empty($d->value) && ($d->value[0] & 1)) || (!empty($c->value) && ($c->value[0] & 1)) ) { + $c = $c->add($y); + $d = $d->subtract($x); + } + $c->_rshift(1); + $d->_rshift(1); + } + + if ($u->compare($v) >= 0) { + $u = $u->subtract($v); + $a = $a->subtract($c); + $b = $b->subtract($d); + } else { + $v = $v->subtract($u); + $c = $c->subtract($a); + $d = $d->subtract($b); + } + } + + return array( + 'gcd' => $this->_normalize($g->multiply($v)), + 'x' => $this->_normalize($c), + 'y' => $this->_normalize($d) + ); + } + + /** + * Calculates the greatest common divisor + * + * Say you have 693 and 609. The GCD is 21. + * + * Here's an example: + * + * extendedGCD($b); + * + * echo $gcd->toString() . "\r\n"; // outputs 21 + * ?> + * + * + * @param Math_BigInteger $n + * @return Math_BigInteger + * @access public + */ + function gcd($n) + { + extract($this->extendedGCD($n)); + return $gcd; + } + + /** + * Absolute value. + * + * @return Math_BigInteger + * @access public + */ + function abs() + { + $temp = new Math_BigInteger(); + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp->value = gmp_abs($this->value); + break; + case MATH_BIGINTEGER_MODE_BCMATH: + $temp->value = (bccomp($this->value, '0', 0) < 0) ? substr($this->value, 1) : $this->value; + break; + default: + $temp->value = $this->value; + } + + return $temp; + } + + /** + * Compares two numbers. + * + * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite. The reason for this is + * demonstrated thusly: + * + * $x > $y: $x->compare($y) > 0 + * $x < $y: $x->compare($y) < 0 + * $x == $y: $x->compare($y) == 0 + * + * Note how the same comparison operator is used. If you want to test for equality, use $x->equals($y). + * + * @param Math_BigInteger $x + * @return Integer < 0 if $this is less than $x; > 0 if $this is greater than $x, and 0 if they are equal. + * @access public + * @see equals() + * @internal Could return $this->subtract($x), but that's not as fast as what we do do. + */ + function compare($y) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + return gmp_cmp($this->value, $y->value); + case MATH_BIGINTEGER_MODE_BCMATH: + return bccomp($this->value, $y->value, 0); + } + + return $this->_compare($this->value, $this->is_negative, $y->value, $y->is_negative); + } + + /** + * Compares two numbers. + * + * @param Array $x_value + * @param Boolean $x_negative + * @param Array $y_value + * @param Boolean $y_negative + * @return Integer + * @see compare() + * @access private + */ + function _compare($x_value, $x_negative, $y_value, $y_negative) + { + if ( $x_negative != $y_negative ) { + return ( !$x_negative && $y_negative ) ? 1 : -1; + } + + $result = $x_negative ? -1 : 1; + + if ( count($x_value) != count($y_value) ) { + return ( count($x_value) > count($y_value) ) ? $result : -$result; + } + $size = max(count($x_value), count($y_value)); + + $x_value = array_pad($x_value, $size, 0); + $y_value = array_pad($y_value, $size, 0); + + for ($i = count($x_value) - 1; $i >= 0; --$i) { + if ($x_value[$i] != $y_value[$i]) { + return ( $x_value[$i] > $y_value[$i] ) ? $result : -$result; + } + } + + return 0; + } + + /** + * Tests the equality of two numbers. + * + * If you need to see if one number is greater than or less than another number, use Math_BigInteger::compare() + * + * @param Math_BigInteger $x + * @return Boolean + * @access public + * @see compare() + */ + function equals($x) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + return gmp_cmp($this->value, $x->value) == 0; + default: + return $this->value === $x->value && $this->is_negative == $x->is_negative; + } + } + + /** + * Set Precision + * + * Some bitwise operations give different results depending on the precision being used. Examples include left + * shift, not, and rotates. + * + * @param Math_BigInteger $x + * @access public + * @return Math_BigInteger + */ + function setPrecision($bits) + { + $this->precision = $bits; + if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_BCMATH ) { + $this->bitmask = new Math_BigInteger(chr((1 << ($bits & 0x7)) - 1) . str_repeat(chr(0xFF), $bits >> 3), 256); + } else { + $this->bitmask = new Math_BigInteger(bcpow('2', $bits, 0)); + } + + $temp = $this->_normalize($this); + $this->value = $temp->value; + } + + /** + * Logical And + * + * @param Math_BigInteger $x + * @access public + * @internal Implemented per a request by Lluis Pamies i Juarez + * @return Math_BigInteger + */ + function bitwise_and($x) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = new Math_BigInteger(); + $temp->value = gmp_and($this->value, $x->value); + + return $this->_normalize($temp); + case MATH_BIGINTEGER_MODE_BCMATH: + $left = $this->toBytes(); + $right = $x->toBytes(); + + $length = max(strlen($left), strlen($right)); + + $left = str_pad($left, $length, chr(0), STR_PAD_LEFT); + $right = str_pad($right, $length, chr(0), STR_PAD_LEFT); + + return $this->_normalize(new Math_BigInteger($left & $right, 256)); + } + + $result = $this->copy(); + + $length = min(count($x->value), count($this->value)); + + $result->value = array_slice($result->value, 0, $length); + + for ($i = 0; $i < $length; ++$i) { + $result->value[$i] = $result->value[$i] & $x->value[$i]; + } + + return $this->_normalize($result); + } + + /** + * Logical Or + * + * @param Math_BigInteger $x + * @access public + * @internal Implemented per a request by Lluis Pamies i Juarez + * @return Math_BigInteger + */ + function bitwise_or($x) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = new Math_BigInteger(); + $temp->value = gmp_or($this->value, $x->value); + + return $this->_normalize($temp); + case MATH_BIGINTEGER_MODE_BCMATH: + $left = $this->toBytes(); + $right = $x->toBytes(); + + $length = max(strlen($left), strlen($right)); + + $left = str_pad($left, $length, chr(0), STR_PAD_LEFT); + $right = str_pad($right, $length, chr(0), STR_PAD_LEFT); + + return $this->_normalize(new Math_BigInteger($left | $right, 256)); + } + + $length = max(count($this->value), count($x->value)); + $result = $this->copy(); + $result->value = array_pad($result->value, 0, $length); + $x->value = array_pad($x->value, 0, $length); + + for ($i = 0; $i < $length; ++$i) { + $result->value[$i] = $this->value[$i] | $x->value[$i]; + } + + return $this->_normalize($result); + } + + /** + * Logical Exclusive-Or + * + * @param Math_BigInteger $x + * @access public + * @internal Implemented per a request by Lluis Pamies i Juarez + * @return Math_BigInteger + */ + function bitwise_xor($x) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = new Math_BigInteger(); + $temp->value = gmp_xor($this->value, $x->value); + + return $this->_normalize($temp); + case MATH_BIGINTEGER_MODE_BCMATH: + $left = $this->toBytes(); + $right = $x->toBytes(); + + $length = max(strlen($left), strlen($right)); + + $left = str_pad($left, $length, chr(0), STR_PAD_LEFT); + $right = str_pad($right, $length, chr(0), STR_PAD_LEFT); + + return $this->_normalize(new Math_BigInteger($left ^ $right, 256)); + } + + $length = max(count($this->value), count($x->value)); + $result = $this->copy(); + $result->value = array_pad($result->value, 0, $length); + $x->value = array_pad($x->value, 0, $length); + + for ($i = 0; $i < $length; ++$i) { + $result->value[$i] = $this->value[$i] ^ $x->value[$i]; + } + + return $this->_normalize($result); + } + + /** + * Logical Not + * + * @access public + * @internal Implemented per a request by Lluis Pamies i Juarez + * @return Math_BigInteger + */ + function bitwise_not() + { + // calculuate "not" without regard to $this->precision + // (will always result in a smaller number. ie. ~1 isn't 1111 1110 - it's 0) + $temp = $this->toBytes(); + $pre_msb = decbin(ord($temp[0])); + $temp = ~$temp; + $msb = decbin(ord($temp[0])); + if (strlen($msb) == 8) { + $msb = substr($msb, strpos($msb, '0')); + } + $temp[0] = chr(bindec($msb)); + + // see if we need to add extra leading 1's + $current_bits = strlen($pre_msb) + 8 * strlen($temp) - 8; + $new_bits = $this->precision - $current_bits; + if ($new_bits <= 0) { + return $this->_normalize(new Math_BigInteger($temp, 256)); + } + + // generate as many leading 1's as we need to. + $leading_ones = chr((1 << ($new_bits & 0x7)) - 1) . str_repeat(chr(0xFF), $new_bits >> 3); + $this->_base256_lshift($leading_ones, $current_bits); + + $temp = str_pad($temp, ceil($this->bits / 8), chr(0), STR_PAD_LEFT); + + return $this->_normalize(new Math_BigInteger($leading_ones | $temp, 256)); + } + + /** + * Logical Right Shift + * + * Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift. + * + * @param Integer $shift + * @return Math_BigInteger + * @access public + * @internal The only version that yields any speed increases is the internal version. + */ + function bitwise_rightShift($shift) + { + $temp = new Math_BigInteger(); + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + static $two; + + if (!isset($two)) { + $two = gmp_init('2'); + } + + $temp->value = gmp_div_q($this->value, gmp_pow($two, $shift)); + + break; + case MATH_BIGINTEGER_MODE_BCMATH: + $temp->value = bcdiv($this->value, bcpow('2', $shift, 0), 0); + + break; + default: // could just replace _lshift with this, but then all _lshift() calls would need to be rewritten + // and I don't want to do that... + $temp->value = $this->value; + $temp->_rshift($shift); + } + + return $this->_normalize($temp); + } + + /** + * Logical Left Shift + * + * Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift. + * + * @param Integer $shift + * @return Math_BigInteger + * @access public + * @internal The only version that yields any speed increases is the internal version. + */ + function bitwise_leftShift($shift) + { + $temp = new Math_BigInteger(); + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + static $two; + + if (!isset($two)) { + $two = gmp_init('2'); + } + + $temp->value = gmp_mul($this->value, gmp_pow($two, $shift)); + + break; + case MATH_BIGINTEGER_MODE_BCMATH: + $temp->value = bcmul($this->value, bcpow('2', $shift, 0), 0); + + break; + default: // could just replace _rshift with this, but then all _lshift() calls would need to be rewritten + // and I don't want to do that... + $temp->value = $this->value; + $temp->_lshift($shift); + } + + return $this->_normalize($temp); + } + + /** + * Logical Left Rotate + * + * Instead of the top x bits being dropped they're appended to the shifted bit string. + * + * @param Integer $shift + * @return Math_BigInteger + * @access public + */ + function bitwise_leftRotate($shift) + { + $bits = $this->toBytes(); + + if ($this->precision > 0) { + $precision = $this->precision; + if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_BCMATH ) { + $mask = $this->bitmask->subtract(new Math_BigInteger(1)); + $mask = $mask->toBytes(); + } else { + $mask = $this->bitmask->toBytes(); + } + } else { + $temp = ord($bits[0]); + for ($i = 0; $temp >> $i; ++$i); + $precision = 8 * strlen($bits) - 8 + $i; + $mask = chr((1 << ($precision & 0x7)) - 1) . str_repeat(chr(0xFF), $precision >> 3); + } + + if ($shift < 0) { + $shift+= $precision; + } + $shift%= $precision; + + if (!$shift) { + return $this->copy(); + } + + $left = $this->bitwise_leftShift($shift); + $left = $left->bitwise_and(new Math_BigInteger($mask, 256)); + $right = $this->bitwise_rightShift($precision - $shift); + $result = MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_BCMATH ? $left->bitwise_or($right) : $left->add($right); + return $this->_normalize($result); + } + + /** + * Logical Right Rotate + * + * Instead of the bottom x bits being dropped they're prepended to the shifted bit string. + * + * @param Integer $shift + * @return Math_BigInteger + * @access public + */ + function bitwise_rightRotate($shift) + { + return $this->bitwise_leftRotate(-$shift); + } + + /** + * Set random number generator function + * + * This function is deprecated. + * + * @param String $generator + * @access public + */ + function setRandomGenerator($generator) + { + } + + /** + * Generate a random number + * + * @param optional Integer $min + * @param optional Integer $max + * @return Math_BigInteger + * @access public + */ + function random($min = false, $max = false) + { + if ($min === false) { + $min = new Math_BigInteger(0); + } + + if ($max === false) { + $max = new Math_BigInteger(0x7FFFFFFF); + } + + $compare = $max->compare($min); + + if (!$compare) { + return $this->_normalize($min); + } else if ($compare < 0) { + // if $min is bigger then $max, swap $min and $max + $temp = $max; + $max = $min; + $min = $temp; + } + + $generator = $this->generator; + + $max = $max->subtract($min); + $max = ltrim($max->toBytes(), chr(0)); + $size = strlen($max) - 1; + + $crypt_random = function_exists('crypt_random_string') || (!class_exists('Crypt_Random') && function_exists('crypt_random_string')); + if ($crypt_random) { + $random = crypt_random_string($size); + } else { + $random = ''; + + if ($size & 1) { + $random.= chr(mt_rand(0, 255)); + } + + $blocks = $size >> 1; + for ($i = 0; $i < $blocks; ++$i) { + // mt_rand(-2147483648, 0x7FFFFFFF) always produces -2147483648 on some systems + $random.= pack('n', mt_rand(0, 0xFFFF)); + } + } + + $fragment = new Math_BigInteger($random, 256); + $leading = $fragment->compare(new Math_BigInteger(substr($max, 1), 256)) > 0 ? + ord($max[0]) - 1 : ord($max[0]); + + if (!$crypt_random) { + $msb = chr(mt_rand(0, $leading)); + } else { + $cutoff = floor(0xFF / $leading) * $leading; + while (true) { + $msb = ord(crypt_random_string(1)); + if ($msb <= $cutoff) { + $msb%= $leading; + break; + } + } + $msb = chr($msb); + } + + $random = new Math_BigInteger($msb . $random, 256); + + return $this->_normalize($random->add($min)); + } + + /** + * Generate a random prime number. + * + * If there's not a prime within the given range, false will be returned. If more than $timeout seconds have elapsed, + * give up and return false. + * + * @param optional Integer $min + * @param optional Integer $max + * @param optional Integer $timeout + * @return Math_BigInteger + * @access public + * @internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=15 HAC 4.44}. + */ + function randomPrime($min = false, $max = false, $timeout = false) + { + $compare = $max->compare($min); + + if (!$compare) { + return $min; + } else if ($compare < 0) { + // if $min is bigger then $max, swap $min and $max + $temp = $max; + $max = $min; + $min = $temp; + } + + // gmp_nextprime() requires PHP 5 >= 5.2.0 per . + if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_GMP && function_exists('gmp_nextprime') ) { + // we don't rely on Math_BigInteger::random()'s min / max when gmp_nextprime() is being used since this function + // does its own checks on $max / $min when gmp_nextprime() is used. When gmp_nextprime() is not used, however, + // the same $max / $min checks are not performed. + if ($min === false) { + $min = new Math_BigInteger(0); + } + + if ($max === false) { + $max = new Math_BigInteger(0x7FFFFFFF); + } + + $x = $this->random($min, $max); + + $x->value = gmp_nextprime($x->value); + + if ($x->compare($max) <= 0) { + return $x; + } + + $x->value = gmp_nextprime($min->value); + + if ($x->compare($max) <= 0) { + return $x; + } + + return false; + } + + static $one, $two; + if (!isset($one)) { + $one = new Math_BigInteger(1); + $two = new Math_BigInteger(2); + } + + $start = time(); + + $x = $this->random($min, $max); + if ($x->equals($two)) { + return $x; + } + + $x->_make_odd(); + if ($x->compare($max) > 0) { + // if $x > $max then $max is even and if $min == $max then no prime number exists between the specified range + if ($min->equals($max)) { + return false; + } + $x = $min->copy(); + $x->_make_odd(); + } + + $initial_x = $x->copy(); + + while (true) { + if ($timeout !== false && time() - $start > $timeout) { + return false; + } + + if ($x->isPrime()) { + return $x; + } + + $x = $x->add($two); + + if ($x->compare($max) > 0) { + $x = $min->copy(); + if ($x->equals($two)) { + return $x; + } + $x->_make_odd(); + } + + if ($x->equals($initial_x)) { + return false; + } + } + } + + /** + * Make the current number odd + * + * If the current number is odd it'll be unchanged. If it's even, one will be added to it. + * + * @see randomPrime() + * @access private + */ + function _make_odd() + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + gmp_setbit($this->value, 0); + break; + case MATH_BIGINTEGER_MODE_BCMATH: + if ($this->value[strlen($this->value) - 1] % 2 == 0) { + $this->value = bcadd($this->value, '1'); + } + break; + default: + $this->value[0] |= 1; + } + } + + /** + * Checks a numer to see if it's prime + * + * Assuming the $t parameter is not set, this function has an error rate of 2**-80. The main motivation for the + * $t parameter is distributability. Math_BigInteger::randomPrime() can be distributed accross multiple pageloads + * on a website instead of just one. + * + * @param optional Integer $t + * @return Boolean + * @access public + * @internal Uses the + * {@link http://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test Miller-Rabin primality test}. See + * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=8 HAC 4.24}. + */ + function isPrime($t = false) + { + $length = strlen($this->toBytes()); + + if (!$t) { + // see HAC 4.49 "Note (controlling the error probability)" + if ($length >= 163) { $t = 2; } // floor(1300 / 8) + else if ($length >= 106) { $t = 3; } // floor( 850 / 8) + else if ($length >= 81 ) { $t = 4; } // floor( 650 / 8) + else if ($length >= 68 ) { $t = 5; } // floor( 550 / 8) + else if ($length >= 56 ) { $t = 6; } // floor( 450 / 8) + else if ($length >= 50 ) { $t = 7; } // floor( 400 / 8) + else if ($length >= 43 ) { $t = 8; } // floor( 350 / 8) + else if ($length >= 37 ) { $t = 9; } // floor( 300 / 8) + else if ($length >= 31 ) { $t = 12; } // floor( 250 / 8) + else if ($length >= 25 ) { $t = 15; } // floor( 200 / 8) + else if ($length >= 18 ) { $t = 18; } // floor( 150 / 8) + else { $t = 27; } + } + + // ie. gmp_testbit($this, 0) + // ie. isEven() or !isOdd() + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + return gmp_prob_prime($this->value, $t) != 0; + case MATH_BIGINTEGER_MODE_BCMATH: + if ($this->value === '2') { + return true; + } + if ($this->value[strlen($this->value) - 1] % 2 == 0) { + return false; + } + break; + default: + if ($this->value == array(2)) { + return true; + } + if (~$this->value[0] & 1) { + return false; + } + } + + static $primes, $zero, $one, $two; + + if (!isset($primes)) { + $primes = array( + 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, + 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, + 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, + 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, + 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, + 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, + 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, + 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, + 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, + 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, + 953, 967, 971, 977, 983, 991, 997 + ); + + if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL ) { + for ($i = 0; $i < count($primes); ++$i) { + $primes[$i] = new Math_BigInteger($primes[$i]); + } + } + + $zero = new Math_BigInteger(); + $one = new Math_BigInteger(1); + $two = new Math_BigInteger(2); + } + + if ($this->equals($one)) { + return false; + } + + // see HAC 4.4.1 "Random search for probable primes" + if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL ) { + foreach ($primes as $prime) { + list(, $r) = $this->divide($prime); + if ($r->equals($zero)) { + return $this->equals($prime); + } + } + } else { + $value = $this->value; + foreach ($primes as $prime) { + list(, $r) = $this->_divide_digit($value, $prime); + if (!$r) { + return count($value) == 1 && $value[0] == $prime; + } + } + } + + $n = $this->copy(); + $n_1 = $n->subtract($one); + $n_2 = $n->subtract($two); + + $r = $n_1->copy(); + $r_value = $r->value; + // ie. $s = gmp_scan1($n, 0) and $r = gmp_div_q($n, gmp_pow(gmp_init('2'), $s)); + if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_BCMATH ) { + $s = 0; + // if $n was 1, $r would be 0 and this would be an infinite loop, hence our $this->equals($one) check earlier + while ($r->value[strlen($r->value) - 1] % 2 == 0) { + $r->value = bcdiv($r->value, '2', 0); + ++$s; + } + } else { + for ($i = 0, $r_length = count($r_value); $i < $r_length; ++$i) { + $temp = ~$r_value[$i] & 0xFFFFFF; + for ($j = 1; ($temp >> $j) & 1; ++$j); + if ($j != 25) { + break; + } + } + $s = 26 * $i + $j - 1; + $r->_rshift($s); + } + + for ($i = 0; $i < $t; ++$i) { + $a = $this->random($two, $n_2); + $y = $a->modPow($r, $n); + + if (!$y->equals($one) && !$y->equals($n_1)) { + for ($j = 1; $j < $s && !$y->equals($n_1); ++$j) { + $y = $y->modPow($two, $n); + if ($y->equals($one)) { + return false; + } + } + + if (!$y->equals($n_1)) { + return false; + } + } + } + return true; + } + + /** + * Logical Left Shift + * + * Shifts BigInteger's by $shift bits. + * + * @param Integer $shift + * @access private + */ + function _lshift($shift) + { + if ( $shift == 0 ) { + return; + } + + $num_digits = (int) ($shift / 26); + $shift %= 26; + $shift = 1 << $shift; + + $carry = 0; + + for ($i = 0; $i < count($this->value); ++$i) { + $temp = $this->value[$i] * $shift + $carry; + $carry = (int) ($temp / 0x4000000); + $this->value[$i] = (int) ($temp - $carry * 0x4000000); + } + + if ( $carry ) { + $this->value[] = $carry; + } + + while ($num_digits--) { + array_unshift($this->value, 0); + } + } + + /** + * Logical Right Shift + * + * Shifts BigInteger's by $shift bits. + * + * @param Integer $shift + * @access private + */ + function _rshift($shift) + { + if ($shift == 0) { + return; + } + + $num_digits = (int) ($shift / 26); + $shift %= 26; + $carry_shift = 26 - $shift; + $carry_mask = (1 << $shift) - 1; + + if ( $num_digits ) { + $this->value = array_slice($this->value, $num_digits); + } + + $carry = 0; + + for ($i = count($this->value) - 1; $i >= 0; --$i) { + $temp = $this->value[$i] >> $shift | $carry; + $carry = ($this->value[$i] & $carry_mask) << $carry_shift; + $this->value[$i] = $temp; + } + + $this->value = $this->_trim($this->value); + } + + /** + * Normalize + * + * Removes leading zeros and truncates (if necessary) to maintain the appropriate precision + * + * @param Math_BigInteger + * @return Math_BigInteger + * @see _trim() + * @access private + */ + function _normalize($result) + { + $result->precision = $this->precision; + $result->bitmask = $this->bitmask; + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + if (!empty($result->bitmask->value)) { + $result->value = gmp_and($result->value, $result->bitmask->value); + } + + return $result; + case MATH_BIGINTEGER_MODE_BCMATH: + if (!empty($result->bitmask->value)) { + $result->value = bcmod($result->value, $result->bitmask->value); + } + + return $result; + } + + $value = &$result->value; + + if ( !count($value) ) { + return $result; + } + + $value = $this->_trim($value); + + if (!empty($result->bitmask->value)) { + $length = min(count($value), count($this->bitmask->value)); + $value = array_slice($value, 0, $length); + + for ($i = 0; $i < $length; ++$i) { + $value[$i] = $value[$i] & $this->bitmask->value[$i]; + } + } + + return $result; + } + + /** + * Trim + * + * Removes leading zeros + * + * @return Math_BigInteger + * @access private + */ + function _trim($value) + { + for ($i = count($value) - 1; $i >= 0; --$i) { + if ( $value[$i] ) { + break; + } + unset($value[$i]); + } + + return $value; + } + + /** + * Array Repeat + * + * @param $input Array + * @param $multiplier mixed + * @return Array + * @access private + */ + function _array_repeat($input, $multiplier) + { + return ($multiplier) ? array_fill(0, $multiplier, $input) : array(); + } + + /** + * Logical Left Shift + * + * Shifts binary strings $shift bits, essentially multiplying by 2**$shift. + * + * @param $x String + * @param $shift Integer + * @return String + * @access private + */ + function _base256_lshift(&$x, $shift) + { + if ($shift == 0) { + return; + } + + $num_bytes = $shift >> 3; // eg. floor($shift/8) + $shift &= 7; // eg. $shift % 8 + + $carry = 0; + for ($i = strlen($x) - 1; $i >= 0; --$i) { + $temp = ord($x[$i]) << $shift | $carry; + $x[$i] = chr($temp); + $carry = $temp >> 8; + } + $carry = ($carry != 0) ? chr($carry) : ''; + $x = $carry . $x . str_repeat(chr(0), $num_bytes); + } + + /** + * Logical Right Shift + * + * Shifts binary strings $shift bits, essentially dividing by 2**$shift and returning the remainder. + * + * @param $x String + * @param $shift Integer + * @return String + * @access private + */ + function _base256_rshift(&$x, $shift) + { + if ($shift == 0) { + $x = ltrim($x, chr(0)); + return ''; + } + + $num_bytes = $shift >> 3; // eg. floor($shift/8) + $shift &= 7; // eg. $shift % 8 + + $remainder = ''; + if ($num_bytes) { + $start = $num_bytes > strlen($x) ? -strlen($x) : -$num_bytes; + $remainder = substr($x, $start); + $x = substr($x, 0, -$num_bytes); + } + + $carry = 0; + $carry_shift = 8 - $shift; + for ($i = 0; $i < strlen($x); ++$i) { + $temp = (ord($x[$i]) >> $shift) | $carry; + $carry = (ord($x[$i]) << $carry_shift) & 0xFF; + $x[$i] = chr($temp); + } + $x = ltrim($x, chr(0)); + + $remainder = chr($carry >> $carry_shift) . $remainder; + + return ltrim($remainder, chr(0)); + } + + // one quirk about how the following functions are implemented is that PHP defines N to be an unsigned long + // at 32-bits, while java's longs are 64-bits. + + /** + * Converts 32-bit integers to bytes. + * + * @param Integer $x + * @return String + * @access private + */ + function _int2bytes($x) + { + return ltrim(pack('N', $x), chr(0)); + } + + /** + * Converts bytes to 32-bit integers + * + * @param String $x + * @return Integer + * @access private + */ + function _bytes2int($x) + { + $temp = unpack('Nint', str_pad($x, 4, chr(0), STR_PAD_LEFT)); + return $temp['int']; + } + + /** + * DER-encode an integer + * + * The ability to DER-encode integers is needed to create RSA public keys for use with OpenSSL + * + * @see modPow() + * @access private + * @param Integer $length + * @return String + */ + function _encodeASN1Length($length) + { + if ($length <= 0x7F) { + return chr($length); + } + + $temp = ltrim(pack('N', $length), chr(0)); + return pack('Ca*', 0x80 | strlen($temp), $temp); + } +} \ No newline at end of file diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP.php new file mode 100644 index 0000000000..bcef06d1d7 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP.php @@ -0,0 +1,2029 @@ + + * login('username', 'password')) { + * exit('Login Failed'); + * } + * + * echo $sftp->pwd() . "\r\n"; + * $sftp->put('filename.ext', 'hello, world!'); + * print_r($sftp->nlist()); + * ?> + * + * + * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @category Net + * @package Net_SFTP + * @author Jim Wigginton + * @copyright MMIX Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +/** + * Include Net_SSH2 + */ +if (!class_exists('Net_SSH2')) { + require_once('Net/SSH2.php'); +} + +/**#@+ + * @access public + * @see Net_SFTP::getLog() + */ +/** + * Returns the message numbers + */ +define('NET_SFTP_LOG_SIMPLE', NET_SSH2_LOG_SIMPLE); +/** + * Returns the message content + */ +define('NET_SFTP_LOG_COMPLEX', NET_SSH2_LOG_COMPLEX); +/** + * Outputs the message content in real-time. + */ +define('NET_SFTP_LOG_REALTIME', 3); +/**#@-*/ + +/** + * SFTP channel constant + * + * Net_SSH2::exec() uses 0 and Net_SSH2::read() / Net_SSH2::write() use 1. + * + * @see Net_SSH2::_send_channel_packet() + * @see Net_SSH2::_get_channel_packet() + * @access private + */ +define('NET_SFTP_CHANNEL', 2); + +/**#@+ + * @access public + * @see Net_SFTP::put() + */ +/** + * Reads data from a local file. + */ +define('NET_SFTP_LOCAL_FILE', 1); +/** + * Reads data from a string. + */ +// this value isn't really used anymore but i'm keeping it reserved for historical reasons +define('NET_SFTP_STRING', 2); +/** + * Resumes an upload + */ +define('NET_SFTP_RESUME', 4); +/**#@-*/ + +/** + * Pure-PHP implementations of SFTP. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Net_SFTP + */ +class Net_SFTP extends Net_SSH2 { + /** + * Packet Types + * + * @see Net_SFTP::Net_SFTP() + * @var Array + * @access private + */ + var $packet_types = array(); + + /** + * Status Codes + * + * @see Net_SFTP::Net_SFTP() + * @var Array + * @access private + */ + var $status_codes = array(); + + /** + * The Request ID + * + * The request ID exists in the off chance that a packet is sent out-of-order. Of course, this library doesn't support + * concurrent actions, so it's somewhat academic, here. + * + * @var Integer + * @see Net_SFTP::_send_sftp_packet() + * @access private + */ + var $request_id = false; + + /** + * The Packet Type + * + * The request ID exists in the off chance that a packet is sent out-of-order. Of course, this library doesn't support + * concurrent actions, so it's somewhat academic, here. + * + * @var Integer + * @see Net_SFTP::_get_sftp_packet() + * @access private + */ + var $packet_type = -1; + + /** + * Packet Buffer + * + * @var String + * @see Net_SFTP::_get_sftp_packet() + * @access private + */ + var $packet_buffer = ''; + + /** + * Extensions supported by the server + * + * @var Array + * @see Net_SFTP::_initChannel() + * @access private + */ + var $extensions = array(); + + /** + * Server SFTP version + * + * @var Integer + * @see Net_SFTP::_initChannel() + * @access private + */ + var $version; + + /** + * Current working directory + * + * @var String + * @see Net_SFTP::_realpath() + * @see Net_SFTP::chdir() + * @access private + */ + var $pwd = false; + + /** + * Packet Type Log + * + * @see Net_SFTP::getLog() + * @var Array + * @access private + */ + var $packet_type_log = array(); + + /** + * Packet Log + * + * @see Net_SFTP::getLog() + * @var Array + * @access private + */ + var $packet_log = array(); + + /** + * Error information + * + * @see Net_SFTP::getSFTPErrors() + * @see Net_SFTP::getLastSFTPError() + * @var String + * @access private + */ + var $sftp_errors = array(); + + /** + * File Type + * + * @see Net_SFTP::_parseLongname() + * @var Integer + * @access private + */ + var $fileType = 0; + + /** + * Directory Cache + * + * Rather than always having to open a directory and close it immediately there after to see if a file is a directory or + * rather than always + * + * @see Net_SFTP::_save_dir() + * @see Net_SFTP::_remove_dir() + * @see Net_SFTP::_is_dir() + * @var Array + * @access private + */ + var $dirs = array(); + + /** + * Default Constructor. + * + * Connects to an SFTP server + * + * @param String $host + * @param optional Integer $port + * @param optional Integer $timeout + * @return Net_SFTP + * @access public + */ + function Net_SFTP($host, $port = 22, $timeout = 10) + { + parent::Net_SSH2($host, $port, $timeout); + $this->packet_types = array( + 1 => 'NET_SFTP_INIT', + 2 => 'NET_SFTP_VERSION', + /* the format of SSH_FXP_OPEN changed between SFTPv4 and SFTPv5+: + SFTPv5+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.1 + pre-SFTPv5 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3 */ + 3 => 'NET_SFTP_OPEN', + 4 => 'NET_SFTP_CLOSE', + 5 => 'NET_SFTP_READ', + 6 => 'NET_SFTP_WRITE', + 7 => 'NET_SFTP_LSTAT', + 9 => 'NET_SFTP_SETSTAT', + 11 => 'NET_SFTP_OPENDIR', + 12 => 'NET_SFTP_READDIR', + 13 => 'NET_SFTP_REMOVE', + 14 => 'NET_SFTP_MKDIR', + 15 => 'NET_SFTP_RMDIR', + 16 => 'NET_SFTP_REALPATH', + 17 => 'NET_SFTP_STAT', + /* the format of SSH_FXP_RENAME changed between SFTPv4 and SFTPv5+: + SFTPv5+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3 + pre-SFTPv5 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.5 */ + 18 => 'NET_SFTP_RENAME', + + 101=> 'NET_SFTP_STATUS', + 102=> 'NET_SFTP_HANDLE', + /* the format of SSH_FXP_NAME changed between SFTPv3 and SFTPv4+: + SFTPv4+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.4 + pre-SFTPv4 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-02#section-7 */ + 103=> 'NET_SFTP_DATA', + 104=> 'NET_SFTP_NAME', + 105=> 'NET_SFTP_ATTRS', + + 200=> 'NET_SFTP_EXTENDED' + ); + $this->status_codes = array( + 0 => 'NET_SFTP_STATUS_OK', + 1 => 'NET_SFTP_STATUS_EOF', + 2 => 'NET_SFTP_STATUS_NO_SUCH_FILE', + 3 => 'NET_SFTP_STATUS_PERMISSION_DENIED', + 4 => 'NET_SFTP_STATUS_FAILURE', + 5 => 'NET_SFTP_STATUS_BAD_MESSAGE', + 6 => 'NET_SFTP_STATUS_NO_CONNECTION', + 7 => 'NET_SFTP_STATUS_CONNECTION_LOST', + 8 => 'NET_SFTP_STATUS_OP_UNSUPPORTED' + ); + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-7.1 + // the order, in this case, matters quite a lot - see Net_SFTP::_parseAttributes() to understand why + $this->attributes = array( + 0x00000001 => 'NET_SFTP_ATTR_SIZE', + 0x00000002 => 'NET_SFTP_ATTR_UIDGID', // defined in SFTPv3, removed in SFTPv4+ + 0x00000004 => 'NET_SFTP_ATTR_PERMISSIONS', + 0x00000008 => 'NET_SFTP_ATTR_ACCESSTIME', + // 0x80000000 will yield a floating point on 32-bit systems and converting floating points to integers + // yields inconsistent behavior depending on how php is compiled. so we left shift -1 (which, in + // two's compliment, consists of all 1 bits) by 31. on 64-bit systems this'll yield 0xFFFFFFFF80000000. + // that's not a problem, however, and 'anded' and a 32-bit number, as all the leading 1 bits are ignored. + -1 << 31 => 'NET_SFTP_ATTR_EXTENDED' + ); + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3 + // the flag definitions change somewhat in SFTPv5+. if SFTPv5+ support is added to this library, maybe name + // the array for that $this->open5_flags and similarily alter the constant names. + $this->open_flags = array( + 0x00000001 => 'NET_SFTP_OPEN_READ', + 0x00000002 => 'NET_SFTP_OPEN_WRITE', + 0x00000004 => 'NET_SFTP_OPEN_APPEND', + 0x00000008 => 'NET_SFTP_OPEN_CREATE', + 0x00000010 => 'NET_SFTP_OPEN_TRUNCATE' + ); + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2 + // see Net_SFTP::_parseLongname() for an explanation + $this->file_types = array( + 1 => 'NET_SFTP_TYPE_REGULAR', + 2 => 'NET_SFTP_TYPE_DIRECTORY', + 3 => 'NET_SFTP_TYPE_SYMLINK', + 4 => 'NET_SFTP_TYPE_SPECIAL' + ); + $this->_define_array( + $this->packet_types, + $this->status_codes, + $this->attributes, + $this->open_flags, + $this->file_types + ); + } + + /** + * Login + * + * @param String $username + * @param optional String $password + * @return Boolean + * @access public + */ + function login($username, $password = '') + { + if (!parent::login($username, $password)) { + return false; + } + + $this->window_size_client_to_server[NET_SFTP_CHANNEL] = $this->window_size; + + $packet = pack('CNa*N3', + NET_SSH2_MSG_CHANNEL_OPEN, strlen('session'), 'session', NET_SFTP_CHANNEL, $this->window_size, 0x4000); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $this->channel_status[NET_SFTP_CHANNEL] = NET_SSH2_MSG_CHANNEL_OPEN; + + $response = $this->_get_channel_packet(NET_SFTP_CHANNEL); + if ($response === false) { + return false; + } + + $packet = pack('CNNa*CNa*', + NET_SSH2_MSG_CHANNEL_REQUEST, $this->server_channels[NET_SFTP_CHANNEL], strlen('subsystem'), 'subsystem', 1, strlen('sftp'), 'sftp'); + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $this->channel_status[NET_SFTP_CHANNEL] = NET_SSH2_MSG_CHANNEL_REQUEST; + + $response = $this->_get_channel_packet(NET_SFTP_CHANNEL); + if ($response === false) { + return false; + } + + $this->channel_status[NET_SFTP_CHANNEL] = NET_SSH2_MSG_CHANNEL_DATA; + + if (!$this->_send_sftp_packet(NET_SFTP_INIT, "\0\0\0\3")) { + return false; + } + + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_VERSION) { + $this->_handle_error('Expected SSH_FXP_VERSION'); + return false; + } + + extract(unpack('Nversion', $this->_string_shift($response, 4))); + $this->version = $version; + while (!empty($response)) { + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $key = $this->_string_shift($response, $length); + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $value = $this->_string_shift($response, $length); + $this->extensions[$key] = $value; + } + + /* + SFTPv4+ defines a 'newline' extension. SFTPv3 seems to have unofficial support for it via 'newline@vandyke.com', + however, I'm not sure what 'newline@vandyke.com' is supposed to do (the fact that it's unofficial means that it's + not in the official SFTPv3 specs) and 'newline@vandyke.com' / 'newline' are likely not drop-in substitutes for + one another due to the fact that 'newline' comes with a SSH_FXF_TEXT bitmask whereas it seems unlikely that + 'newline@vandyke.com' would. + */ + /* + if (isset($this->extensions['newline@vandyke.com'])) { + $this->extensions['newline'] = $this->extensions['newline@vandyke.com']; + unset($this->extensions['newline@vandyke.com']); + } + */ + + $this->request_id = 1; + + /* + A Note on SFTPv4/5/6 support: + states the following: + + "If the client wishes to interoperate with servers that support noncontiguous version + numbers it SHOULD send '3'" + + Given that the server only sends its version number after the client has already done so, the above + seems to be suggesting that v3 should be the default version. This makes sense given that v3 is the + most popular. + + states the following; + + "If the server did not send the "versions" extension, or the version-from-list was not included, the + server MAY send a status response describing the failure, but MUST then close the channel without + processing any further requests." + + So what do you do if you have a client whose initial SSH_FXP_INIT packet says it implements v3 and + a server whose initial SSH_FXP_VERSION reply says it implements v4 and only v4? If it only implements + v4, the "versions" extension is likely not going to have been sent so version re-negotiation as discussed + in draft-ietf-secsh-filexfer-13 would be quite impossible. As such, what Net_SFTP would do is close the + channel and reopen it with a new and updated SSH_FXP_INIT packet. + */ + switch ($this->version) { + case 2: + case 3: + break; + default: + return false; + } + + $this->pwd = $this->_realpath('.', false); + + $this->_save_dir($this->pwd); + + return true; + } + + /** + * Returns the current directory name + * + * @return Mixed + * @access public + */ + function pwd() + { + return $this->pwd; + } + + /** + * Logs errors + * + * @param String $response + * @param optional Integer $status + * @access public + */ + function _logError($response, $status = -1) { + if ($status == -1) { + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + } + + $error = $this->status_codes[$status]; + + if ($this->version > 2) { + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->sftp_errors[] = $error . ': ' . $this->_string_shift($response, $length); + } else { + $this->sftp_errors[] = $error; + } + } + + /** + * Canonicalize the Server-Side Path Name + * + * SFTP doesn't provide a mechanism by which the current working directory can be changed, so we'll emulate it. Returns + * the absolute (canonicalized) path. + * + * @see Net_SFTP::chdir() + * @param String $dir + * @return Mixed + * @access private + */ + function _realpath($dir, $check_dir = true) + { + if ($check_dir && $this->_is_dir($dir)) { + return true; + } + + /* + "This protocol represents file names as strings. File names are + assumed to use the slash ('/') character as a directory separator. + + File names starting with a slash are "absolute", and are relative to + the root of the file system. Names starting with any other character + are relative to the user's default directory (home directory). Note + that identifying the user is assumed to take place outside of this + protocol." + + -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-6 + */ + $file = ''; + if ($this->pwd !== false) { + // if the SFTP server returned the canonicalized path even for non-existant files this wouldn't be necessary + // on OpenSSH it isn't necessary but on other SFTP servers it is. that and since the specs say nothing on + // the subject, we'll go ahead and work around it with the following. + if (empty($dir) || $dir[strlen($dir) - 1] != '/') { + $file = basename($dir); + $dir = dirname($dir); + } + + $dir = $dir[0] == '/' ? '/' . rtrim(substr($dir, 1), '/') : rtrim($dir, '/'); + + if ($dir == '.' || $dir == $this->pwd) { + $temp = $this->pwd; + if (!empty($file)) { + $temp.= '/' . $file; + } + return $temp; + } + + if ($dir[0] != '/') { + $dir = $this->pwd . '/' . $dir; + } + // on the surface it seems like maybe resolving a path beginning with / is unnecessary, but such paths + // can contain .'s and ..'s just like any other. we could parse those out as appropriate or we can let + // the server do it. we'll do the latter. + } + + /* + that SSH_FXP_REALPATH returns SSH_FXP_NAME does not necessarily mean that anything actually exists at the + specified path. generally speaking, no attributes are returned with this particular SSH_FXP_NAME packet + regardless of whether or not a file actually exists. and in SFTPv3, the longname field and the filename + field match for this particular SSH_FXP_NAME packet. for other SSH_FXP_NAME packets, this will likely + not be the case, but for this one, it is. + */ + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.9 + if (!$this->_send_sftp_packet(NET_SFTP_REALPATH, pack('Na*', strlen($dir), $dir))) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_NAME: + // although SSH_FXP_NAME is implemented differently in SFTPv3 than it is in SFTPv4+, the following + // should work on all SFTP versions since the only part of the SSH_FXP_NAME packet the following looks + // at is the first part and that part is defined the same in SFTP versions 3 through 6. + $this->_string_shift($response, 4); // skip over the count - it should be 1, anyway + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $realpath = $this->_string_shift($response, $length); + // the following is SFTPv3 only code. see Net_SFTP::_parseLongname() for more information. + // per the above comment, this is a shot in the dark that, on most servers, won't help us in determining + // the file type for Net_SFTP::stat() and Net_SFTP::lstat() but it's worth a shot. + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->fileType = $this->_parseLongname($this->_string_shift($response, $length)); + break; + case NET_SFTP_STATUS: + $this->_logError($response); + return false; + default: + $this->_handle_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS'); + return false; + } + + // if $this->pwd isn't set than the only thing $realpath could be is for '.', which is pretty much guaranteed to + // be a bonafide directory + if (!empty($file)) { + $realpath.= '/' . $file; + } + + return $realpath; + } + + /** + * Changes the current directory + * + * @param String $dir + * @return Boolean + * @access public + */ + function chdir($dir) + { + if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { + return false; + } + + if ($dir[strlen($dir) - 1] != '/') { + $dir.= '/'; + } + + // confirm that $dir is, in fact, a valid directory + if ($this->_is_dir($dir)) { + $this->pwd = $dir; + return true; + } + + $dir = $this->_realpath($dir, false); + + if ($this->_is_dir($dir)) { + $this->pwd = $dir; + return true; + } + + if (!$this->_send_sftp_packet(NET_SFTP_OPENDIR, pack('Na*', strlen($dir), $dir))) { + return false; + } + + // see Net_SFTP::nlist() for a more thorough explanation of the following + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_HANDLE: + $handle = substr($response, 4); + break; + case NET_SFTP_STATUS: + $this->_logError($response); + return false; + default: + $this->_handle_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); + return false; + } + + if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) { + return false; + } + + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + $this->_handle_error('Expected SSH_FXP_STATUS'); + return false; + } + + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + return false; + } + + $this->_save_dir($dir); + + $this->pwd = $dir; + return true; + } + + /** + * Returns a list of files in the given directory + * + * @param optional String $dir + * @return Mixed + * @access public + */ + function nlist($dir = '.') + { + return $this->_list($dir, false); + } + + /** + * Returns a detailed list of files in the given directory + * + * @param optional String $dir + * @return Mixed + * @access public + */ + function rawlist($dir = '.') + { + return $this->_list($dir, true); + } + + /** + * Reads a list, be it detailed or not, of files in the given directory + * + * $realpath exists because, in the case of the recursive deletes and recursive chmod's $realpath has already + * been calculated. + * + * @param String $dir + * @param optional Boolean $raw + * @param optional Boolean $realpath + * @return Mixed + * @access private + */ + function _list($dir, $raw = true, $realpath = true) + { + if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { + return false; + } + + $dir = $this->_realpath($dir . '/'); + if ($dir === false) { + return false; + } + + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.2 + if (!$this->_send_sftp_packet(NET_SFTP_OPENDIR, pack('Na*', strlen($dir), $dir))) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_HANDLE: + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.2 + // since 'handle' is the last field in the SSH_FXP_HANDLE packet, we'll just remove the first four bytes that + // represent the length of the string and leave it at that + $handle = substr($response, 4); + break; + case NET_SFTP_STATUS: + // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED + $this->_logError($response); + return false; + default: + $this->_handle_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); + return false; + } + + $this->_save_dir($dir); + + $contents = array(); + while (true) { + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.2.2 + // why multiple SSH_FXP_READDIR packets would be sent when the response to a single one can span arbitrarily many + // SSH_MSG_CHANNEL_DATA messages is not known to me. + if (!$this->_send_sftp_packet(NET_SFTP_READDIR, pack('Na*', strlen($handle), $handle))) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_NAME: + extract(unpack('Ncount', $this->_string_shift($response, 4))); + for ($i = 0; $i < $count; $i++) { + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $shortname = $this->_string_shift($response, $length); + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $longname = $this->_string_shift($response, $length); + $attributes = $this->_parseAttributes($response); // we also don't care about the attributes + if (!$raw) { + $contents[] = $shortname; + } else { + $contents[$shortname] = $attributes; + $fileType = $this->_parseLongname($longname); + if ($fileType) { + if ($fileType == NET_SFTP_TYPE_DIRECTORY && ($shortname != '.' && $shortname != '..')) { + $this->_save_dir($dir . '/' . $shortname); + } + $contents[$shortname]['type'] = $fileType; + } + } + // SFTPv6 has an optional boolean end-of-list field, but we'll ignore that, since the + // final SSH_FXP_STATUS packet should tell us that, already. + } + break; + case NET_SFTP_STATUS: + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_EOF) { + $this->_logError($response, $status); + return false; + } + break 2; + default: + $this->_handle_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS'); + return false; + } + } + + if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) { + return false; + } + + // "The client MUST release all resources associated with the handle regardless of the status." + // -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.3 + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + $this->_handle_error('Expected SSH_FXP_STATUS'); + return false; + } + + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + return false; + } + + return $contents; + } + + /** + * Returns the file size, in bytes, or false, on failure + * + * Files larger than 4GB will show up as being exactly 4GB. + * + * @param String $filename + * @return Mixed + * @access public + */ + function size($filename) + { + if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { + return false; + } + + $filename = $this->_realpath($filename); + if ($filename === false) { + return false; + } + + return $this->_size($filename); + } + + /** + * Save directories to cache + * + * @param String $dir + * @access private + */ + function _save_dir($dir) + { + // preg_replace('#^/|/(?=/)|/$#', '', $dir) == str_replace('//', '/', trim($dir, '/')) + $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $dir)); + + $temp = &$this->dirs; + foreach ($dirs as $dir) { + if (!isset($temp[$dir])) { + $temp[$dir] = array(); + } + $temp = &$temp[$dir]; + } + } + + /** + * Remove directories from cache + * + * @param String $dir + * @access private + */ + function _remove_dir($dir) + { + $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $dir)); + + $temp = &$this->dirs; + foreach ($dirs as $dir) { + if ($dir == end($dirs)) { + unset($temp[$dir]); + return true; + } + if (!isset($temp[$dir])) { + return false; + } + $temp = &$temp[$dir]; + } + } + + /** + * Checks cache for directory + * + * @param String $dir + * @access private + */ + function _is_dir($dir) + { + $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $dir)); + + $temp = &$this->dirs; + foreach ($dirs as $dir) { + if (!isset($temp[$dir])) { + return false; + } + $temp = &$temp[$dir]; + } + } + + /** + * Returns general information about a file. + * + * Returns an array on success and false otherwise. + * + * @param String $filename + * @return Mixed + * @access public + */ + function stat($filename) + { + if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { + return false; + } + + $filename = $this->_realpath($filename); + if ($filename === false) { + return false; + } + + $stat = $this->_stat($filename, NET_SFTP_STAT); + if ($stat === false) { + return false; + } + + $pwd = $this->pwd; + $stat['type'] = $this->chdir($filename) ? + NET_SFTP_TYPE_DIRECTORY : + NET_SFTP_TYPE_REGULAR; + $this->pwd = $pwd; + + return $stat; + } + + /** + * Returns general information about a file or symbolic link. + * + * Returns an array on success and false otherwise. + * + * @param String $filename + * @return Mixed + * @access public + */ + function lstat($filename) + { + if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { + return false; + } + + $filename = $this->_realpath($filename); + if ($filename === false) { + return false; + } + + $lstat = $this->_stat($filename, NET_SFTP_LSTAT); + $stat = $this->_stat($filename, NET_SFTP_STAT); + if ($stat === false) { + return false; + } + + if ($lstat != $stat) { + return array_merge($lstat, array('type' => NET_SFTP_TYPE_SYMLINK)); + } + + $pwd = $this->pwd; + $lstat['type'] = $this->chdir($filename) ? + NET_SFTP_TYPE_DIRECTORY : + NET_SFTP_TYPE_REGULAR; + $this->pwd = $pwd; + + return $lstat; + } + + /** + * Returns general information about a file or symbolic link + * + * Determines information without calling Net_SFTP::_realpath(). + * The second parameter can be either NET_SFTP_STAT or NET_SFTP_LSTAT. + * + * @param String $filename + * @param Integer $type + * @return Mixed + * @access private + */ + function _stat($filename, $type) + { + // SFTPv4+ adds an additional 32-bit integer field - flags - to the following: + $packet = pack('Na*', strlen($filename), $filename); + if (!$this->_send_sftp_packet($type, $packet)) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_ATTRS: + $attributes = $this->_parseAttributes($response); + if ($this->fileType) { + $attributes['type'] = $this->fileType; + } + return $attributes; + case NET_SFTP_STATUS: + $this->_logError($response); + return false; + } + + $this->_handle_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS'); + return false; + } + + /** + * Attempt to identify the file type + * + * @param String $path + * @param Array $stat + * @param Array $lstat + * @return Integer + * @access private + */ + function _identify_type($path, $stat1, $stat2) + { + $stat1 = $this->_stat($path, $stat1); + $stat2 = $this->_stat($path, $stat2); + + if ($stat1 != $stat2) { + return array_merge($stat1, array('type' => NET_SFTP_TYPE_SYMLINK)); + } + + $pwd = $this->pwd; + $stat1['type'] = $this->chdir($path) ? + NET_SFTP_TYPE_DIRECTORY : + NET_SFTP_TYPE_REGULAR; + $this->pwd = $pwd; + + return $stat1; + } + + /** + * Returns the file size, in bytes, or false, on failure + * + * Determines the size without calling Net_SFTP::_realpath() + * + * @param String $filename + * @return Mixed + * @access private + */ + function _size($filename) + { + $result = $this->_stat($filename, NET_SFTP_LSTAT); + if ($result === false) { + return false; + } + return isset($result['size']) ? $result['size'] : -1; + } + + /** + * Set permissions on a file. + * + * Returns the new file permissions on success or FALSE on error. + * + * @param Integer $mode + * @param String $filename + * @return Mixed + * @access public + */ + function chmod($mode, $filename, $recursive = false) + { + if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { + return false; + } + + $filename = $this->_realpath($filename); + if ($filename === false) { + return false; + } + + if ($recursive) { + $i = 0; + $result = $this->_chmod_recursive($mode, $filename, $i); + $this->_read_put_responses($i); + return $result; + } + + // SFTPv4+ has an additional byte field - type - that would need to be sent, as well. setting it to + // SSH_FILEXFER_TYPE_UNKNOWN might work. if not, we'd have to do an SSH_FXP_STAT before doing an SSH_FXP_SETSTAT. + $attr = pack('N2', NET_SFTP_ATTR_PERMISSIONS, $mode & 07777); + if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($filename), $filename, $attr))) { + return false; + } + + /* + "Because some systems must use separate system calls to set various attributes, it is possible that a failure + response will be returned, but yet some of the attributes may be have been successfully modified. If possible, + servers SHOULD avoid this situation; however, clients MUST be aware that this is possible." + + -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.6 + */ + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + $this->_handle_error('Expected SSH_FXP_STATUS'); + return false; + } + + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + } + + // rather than return what the permissions *should* be, we'll return what they actually are. this will also + // tell us if the file actually exists. + // incidentally, SFTPv4+ adds an additional 32-bit integer field - flags - to the following: + $packet = pack('Na*', strlen($filename), $filename); + if (!$this->_send_sftp_packet(NET_SFTP_STAT, $packet)) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_ATTRS: + $attrs = $this->_parseAttributes($response); + return $attrs['permissions']; + case NET_SFTP_STATUS: + $this->_logError($response); + return false; + } + + $this->_handle_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS'); + return false; + } + + /** + * Recursively chmods directories on the SFTP server + * + * Minimizes directory lookups and SSH_FXP_STATUS requests for speed. + * + * @param Integer $mode + * @param String $filename + * @return Boolean + * @access private + */ + function _chmod_recursive($mode, $path, &$i) + { + if (!$this->_read_put_responses($i)) { + return false; + } + $i = 0; + $entries = $this->_list($path, true, false); + + if ($entries === false) { + return $this->chmod($mode, $path); + } + + // normally $entries would have at least . and .. but it might not if the directories + // permissions didn't allow reading + if (empty($entries)) { + return false; + } + + foreach ($entries as $filename=>$props) { + if ($filename == '.' || $filename == '..') { + continue; + } + + if (!isset($props['type'])) { + return false; + } + + $temp = $path . '/' . $filename; + if ($props['type'] == NET_SFTP_TYPE_DIRECTORY) { + if (!$this->_chmod_recursive($mode, $temp, $i)) { + return false; + } + } else { + $attr = pack('N2', NET_SFTP_ATTR_PERMISSIONS, $mode & 07777); + if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($temp), $temp, $attr))) { + return false; + } + + $i++; + + if ($i >= 50) { + if (!$this->_read_put_responses($i)) { + return false; + } + $i = 0; + } + } + } + + $attr = pack('N2', NET_SFTP_ATTR_PERMISSIONS, $mode & 07777); + if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($path), $path, $attr))) { + return false; + } + + $i++; + + if ($i >= 50) { + if (!$this->_read_put_responses($i)) { + return false; + } + $i = 0; + } + + return true; + } + + /** + * Creates a directory. + * + * @param String $dir + * @return Boolean + * @access public + */ + function mkdir($dir) + { + if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { + return false; + } + + if ($dir[0] != '/') { + $dir = $this->_realpath(rtrim($dir, '/')); + if ($dir === false) { + return false; + } + if (!$this->_mkdir_helper($dir)) { + return false; + } + } else { + $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $dir)); + $temp = ''; + foreach ($dirs as $dir) { + $temp.= '/' . $dir; + $result = $this->_mkdir_helper($temp); + } + if (!$result) { + return false; + } + } + + return true; + } + + /** + * Helper function for directory creation + * + * @param String $dir + * @return Boolean + * @access private + */ + function _mkdir_helper($dir) + { + // by not providing any permissions, hopefully the server will use the logged in users umask - their + // default permissions. + if (!$this->_send_sftp_packet(NET_SFTP_MKDIR, pack('Na*N', strlen($dir), $dir, 0))) { + return false; + } + + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + $this->_handle_error('Expected SSH_FXP_STATUS'); + return false; + } + + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + return false; + } + + $this->_save_dir($dir); + + return true; + } + + /** + * Removes a directory. + * + * @param String $dir + * @return Boolean + * @access public + */ + function rmdir($dir) + { + if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { + return false; + } + + $dir = $this->_realpath($dir); + if ($dir === false) { + return false; + } + + if (!$this->_send_sftp_packet(NET_SFTP_RMDIR, pack('Na*', strlen($dir), $dir))) { + return false; + } + + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + $this->_handle_error('Expected SSH_FXP_STATUS'); + return false; + } + + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED? + $this->_logError($response, $status); + return false; + } + + $this->_remove_dir($dir); + + return true; + } + + /** + * Uploads a file to the SFTP server. + * + * By default, Net_SFTP::put() does not read from the local filesystem. $data is dumped directly into $remote_file. + * So, for example, if you set $data to 'filename.ext' and then do Net_SFTP::get(), you will get a file, twelve bytes + * long, containing 'filename.ext' as its contents. + * + * Setting $mode to NET_SFTP_LOCAL_FILE will change the above behavior. With NET_SFTP_LOCAL_FILE, $remote_file will + * contain as many bytes as filename.ext does on your local filesystem. If your filename.ext is 1MB then that is how + * large $remote_file will be, as well. + * + * Currently, only binary mode is supported. As such, if the line endings need to be adjusted, you will need to take + * care of that, yourself. + * + * @param String $remote_file + * @param String $data + * @param optional Integer $mode + * @return Boolean + * @access public + * @internal ASCII mode for SFTPv4/5/6 can be supported by adding a new function - Net_SFTP::setMode(). + */ + function put($remote_file, $data, $mode = NET_SFTP_STRING) + { + if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { + return false; + } + + $remote_file = $this->_realpath($remote_file); + if ($remote_file === false) { + return false; + } + + $flags = NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE; + // according to the SFTP specs, NET_SFTP_OPEN_APPEND should "force all writes to append data at the end of the file." + // in practice, it doesn't seem to do that. + //$flags|= ($mode & NET_SFTP_RESUME) ? NET_SFTP_OPEN_APPEND : NET_SFTP_OPEN_TRUNCATE; + + // if NET_SFTP_OPEN_APPEND worked as it should the following (up until the -----------) wouldn't be necessary + $offset = 0; + if ($mode & NET_SFTP_RESUME) { + $size = $this->_size($remote_file); + $offset = $size !== false ? $size : 0; + } else { + $flags|= NET_SFTP_OPEN_TRUNCATE; + } + // -------------- + + $packet = pack('Na*N2', strlen($remote_file), $remote_file, $flags, 0); + if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_HANDLE: + $handle = substr($response, 4); + break; + case NET_SFTP_STATUS: + $this->_logError($response); + return false; + default: + $this->_handle_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); + return false; + } + + $initialize = true; + + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.2.3 + if ($mode & NET_SFTP_LOCAL_FILE) { + if (!is_file($data)) { + $this->_handle_error("$data is not a valid file"); + return false; + } + $fp = @fopen($data, 'rb'); + if (!$fp) { + return false; + } + $size = filesize($data); + } else { + $size = strlen($data); + } + + $sent = 0; + $size = $size < 0 ? ($size & 0x7FFFFFFF) + 0x80000000 : $size; + + $sftp_packet_size = 4096; // PuTTY uses 4096 + $i = 0; + while ($sent < $size) { + $temp = $mode & NET_SFTP_LOCAL_FILE ? fread($fp, $sftp_packet_size) : $this->_string_shift($data, $sftp_packet_size); + $packet = pack('Na*N3a*', strlen($handle), $handle, 0, $offset + $sent, strlen($temp), $temp); + if (!$this->_send_sftp_packet(NET_SFTP_WRITE, $packet)) { + fclose($fp); + return false; + } + $sent+= strlen($temp); + + $i++; + + if ($i == 50) { + if (!$this->_read_put_responses($i)) { + $i = 0; + break; + } + $i = 0; + } + } + + if (!$this->_read_put_responses($i)) { + return false; + } + + if ($mode & NET_SFTP_LOCAL_FILE) { + fclose($fp); + } + + if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) { + return false; + } + + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + $this->_handle_error('Expected SSH_FXP_STATUS'); + return false; + } + + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + return false; + } + + return true; + } + + /** + * Reads multiple successive SSH_FXP_WRITE responses + * + * Sending an SSH_FXP_WRITE packet and immediately reading its response isn't as efficient as blindly sending out $i + * SSH_FXP_WRITEs, in succession, and then reading $i responses. + * + * @param Integer $i + * @return Boolean + * @access private + */ + function _read_put_responses($i) + { + while ($i--) { + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + $this->_handle_error('Expected SSH_FXP_STATUS'); + return false; + } + + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + break; + } + } + + return $i < 0; + } + + /** + * Downloads a file from the SFTP server. + * + * Returns a string containing the contents of $remote_file if $local_file is left undefined or a boolean false if + * the operation was unsuccessful. If $local_file is defined, returns true or false depending on the success of the + * operation + * + * @param String $remote_file + * @param optional String $local_file + * @return Mixed + * @access public + */ + function get($remote_file, $local_file = false, $offset = 0, $length = -1) + { + if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { + return false; + } + + $remote_file = $this->_realpath($remote_file); + if ($remote_file === false) { + return false; + } + + $packet = pack('Na*N2', strlen($remote_file), $remote_file, NET_SFTP_OPEN_READ, 0); + if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_HANDLE: + $handle = substr($response, 4); + break; + case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED + $this->_logError($response); + return false; + default: + $this->_handle_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); + return false; + } + + if ($local_file !== false) { + $fp = fopen($local_file, 'wb'); + if (!$fp) { + return false; + } + } else { + $content = ''; + } + + $size = (1 << 20) < $length || $length < 0 ? 1 << 20 : $length; + $start = $offset; + while (true) { + $packet = pack('Na*N3', strlen($handle), $handle, 0, $offset, $size); + if (!$this->_send_sftp_packet(NET_SFTP_READ, $packet)) { + if ($local_file !== false) { + fclose($fp); + } + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_DATA: + $temp = substr($response, 4); + $offset+= strlen($temp); + if ($local_file === false) { + $content.= $temp; + } else { + fputs($fp, $temp); + } + break; + case NET_SFTP_STATUS: + $this->_logError($response); + break 2; + default: + $this->_handle_error('Expected SSH_FXP_DATA or SSH_FXP_STATUS'); + if ($local_file !== false) { + fclose($fp); + } + return false; + } + + if ($length > 0 && $length <= $offset - $size) { + if ($local_file === false) { + $content = substr($content, 0, $length); + } else { + ftruncate($fp, $length); + } + break; + } + } + + if ($local_file !== false) { + fclose($fp); + } + + if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) { + return false; + } + + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + $this->_handle_error('Expected SSH_FXP_STATUS'); + return false; + } + + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + return false; + } + + if (isset($content)) { + return $content; + } + + return true; + } + + /** + * Deletes a file on the SFTP server. + * + * @param String $path + * @param Boolean $recursive + * @return Boolean + * @access public + */ + function delete($path, $recursive = true) + { + if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { + return false; + } + + $path = $this->_realpath($path); + if ($path === false) { + return false; + } + + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3 + if (!$this->_send_sftp_packet(NET_SFTP_REMOVE, pack('Na*', strlen($path), $path))) { + return false; + } + + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + $this->_handle_error('Expected SSH_FXP_STATUS'); + return false; + } + + // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + if (!$recursive) { + return false; + } + $i = 0; + $result = $this->_delete_recursive($path, $i); + $this->_read_put_responses($i); + return $result; + } + + return true; + } + + /** + * Recursively deletes directories on the SFTP server + * + * Minimizes directory lookups and SSH_FXP_STATUS requests for speed. + * + * @param String $path + * @param Integer $i + * @return Boolean + * @access private + */ + function _delete_recursive($path, &$i) + { + if (!$this->_read_put_responses($i)) { + return false; + } + $i = 0; + $entries = $this->_list($path, true, false); + + // normally $entries would have at least . and .. but it might not if the directories + // permissions didn't allow reading + if (empty($entries)) { + return false; + } + + foreach ($entries as $filename=>$props) { + if ($filename == '.' || $filename == '..') { + continue; + } + + if (!isset($props['type'])) { + return false; + } + + $temp = $path . '/' . $filename; + if ($props['type'] == NET_SFTP_TYPE_DIRECTORY) { + if (!$this->_delete_recursive($temp, $i)) { + return false; + } + } else { + if (!$this->_send_sftp_packet(NET_SFTP_REMOVE, pack('Na*', strlen($temp), $temp))) { + return false; + } + + $i++; + + if ($i >= 50) { + if (!$this->_read_put_responses($i)) { + return false; + } + $i = 0; + } + } + } + + if (!$this->_send_sftp_packet(NET_SFTP_RMDIR, pack('Na*', strlen($path), $path))) { + return false; + } + $this->_remove_dir($path); + + $i++; + + if ($i >= 50) { + if (!$this->_read_put_responses($i)) { + return false; + } + $i = 0; + } + + return true; + } + + /** + * Renames a file or a directory on the SFTP server + * + * @param String $oldname + * @param String $newname + * @return Boolean + * @access public + */ + function rename($oldname, $newname) + { + if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { + return false; + } + + $oldname = $this->_realpath($oldname); + $newname = $this->_realpath($newname); + if ($oldname === false || $newname === false) { + return false; + } + + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3 + $packet = pack('Na*Na*', strlen($oldname), $oldname, strlen($newname), $newname); + if (!$this->_send_sftp_packet(NET_SFTP_RENAME, $packet)) { + return false; + } + + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + $this->_handle_error('Expected SSH_FXP_STATUS'); + return false; + } + + // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + return false; + } + + return true; + } + + /** + * Parse Attributes + * + * See '7. File Attributes' of draft-ietf-secsh-filexfer-13 for more info. + * + * @param String $response + * @return Array + * @access private + */ + function _parseAttributes(&$response) + { + $attr = array(); + extract(unpack('Nflags', $this->_string_shift($response, 4))); + // SFTPv4+ have a type field (a byte) that follows the above flag field + foreach ($this->attributes as $key => $value) { + switch ($flags & $key) { + case NET_SFTP_ATTR_SIZE: // 0x00000001 + // size is represented by a 64-bit integer, so we perhaps ought to be doing the following: + // $attr['size'] = new Math_BigInteger($this->_string_shift($response, 8), 256); + // of course, you shouldn't be using Net_SFTP to transfer files that are in excess of 4GB + // (0xFFFFFFFF bytes), anyway. as such, we'll just represent all file sizes that are bigger than + // 4GB as being 4GB. + extract(unpack('Nupper/Nsize', $this->_string_shift($response, 8))); + if ($upper) { + $attr['size'] = 0xFFFFFFFF; + } else { + $attr['size'] = $size < 0 ? ($size & 0x7FFFFFFF) + 0x80000000 : $size; + } + break; + case NET_SFTP_ATTR_UIDGID: // 0x00000002 (SFTPv3 only) + $attr+= unpack('Nuid/Ngid', $this->_string_shift($response, 8)); + break; + case NET_SFTP_ATTR_PERMISSIONS: // 0x00000004 + $attr+= unpack('Npermissions', $this->_string_shift($response, 4)); + break; + case NET_SFTP_ATTR_ACCESSTIME: // 0x00000008 + $attr+= unpack('Natime/Nmtime', $this->_string_shift($response, 8)); + break; + case NET_SFTP_ATTR_EXTENDED: // 0x80000000 + extract(unpack('Ncount', $this->_string_shift($response, 4))); + for ($i = 0; $i < $count; $i++) { + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $key = $this->_string_shift($response, $length); + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $attr[$key] = $this->_string_shift($response, $length); + } + } + } + return $attr; + } + + /** + * Parse Longname + * + * SFTPv3 doesn't provide any easy way of identifying a file type. You could try to open + * a file as a directory and see if an error is returned or you could try to parse the + * SFTPv3-specific longname field of the SSH_FXP_NAME packet. That's what this function does. + * The result is returned using the + * {@link http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2 SFTPv4 type constants}. + * + * If the longname is in an unrecognized format bool(false) is returned. + * + * @param String $longname + * @return Mixed + * @access private + */ + function _parseLongname($longname) + { + // http://en.wikipedia.org/wiki/Unix_file_types + // http://en.wikipedia.org/wiki/Filesystem_permissions#Notation_of_traditional_Unix_permissions + if (preg_match('#^[^/]([r-][w-][xstST-]){3}#', $longname)) { + switch ($longname[0]) { + case '-': + return NET_SFTP_TYPE_REGULAR; + case 'd': + return NET_SFTP_TYPE_DIRECTORY; + case 'l': + return NET_SFTP_TYPE_SYMLINK; + default: + return NET_SFTP_TYPE_SPECIAL; + } + } + + return false; + } + + /** + * Sends SFTP Packets + * + * See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info. + * + * @param Integer $type + * @param String $data + * @see Net_SFTP::_get_sftp_packet() + * @see Net_SSH2::_send_channel_packet() + * @return Boolean + * @access private + */ + function _send_sftp_packet($type, $data) + { + $packet = $this->request_id !== false ? + pack('NCNa*', strlen($data) + 5, $type, $this->request_id, $data) : + pack('NCa*', strlen($data) + 1, $type, $data); + + $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 + $result = $this->_send_channel_packet(NET_SFTP_CHANNEL, $packet); + $stop = strtok(microtime(), ' ') + strtok(''); + + if (defined('NET_SFTP_LOGGING')) { + $packet_type = '-> ' . $this->packet_types[$type] . + ' (' . round($stop - $start, 4) . 's)'; + if (NET_SFTP_LOGGING == NET_SFTP_LOG_REALTIME) { + echo "
\r\n" . $this->_format_log(array($data), array($packet_type)) . "\r\n
\r\n"; + flush(); + ob_flush(); + } else { + $this->packet_type_log[] = $packet_type; + if (NET_SFTP_LOGGING == NET_SFTP_LOG_COMPLEX) { + $this->packet_log[] = $data; + } + } + } + + return $result; + } + + /** + * Receives SFTP Packets + * + * See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info. + * + * Incidentally, the number of SSH_MSG_CHANNEL_DATA messages has no bearing on the number of SFTP packets present. + * There can be one SSH_MSG_CHANNEL_DATA messages containing two SFTP packets or there can be two SSH_MSG_CHANNEL_DATA + * messages containing one SFTP packet. + * + * @see Net_SFTP::_send_sftp_packet() + * @return String + * @access private + */ + function _get_sftp_packet() + { + $this->curTimeout = false; + + $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 + + // SFTP packet length + while (strlen($this->packet_buffer) < 4) { + $temp = $this->_get_channel_packet(NET_SFTP_CHANNEL); + if (is_bool($temp)) { + $this->packet_type = false; + $this->packet_buffer = ''; + return false; + } + $this->packet_buffer.= $temp; + } + extract(unpack('Nlength', $this->_string_shift($this->packet_buffer, 4))); + $tempLength = $length; + $tempLength-= strlen($this->packet_buffer); + + // SFTP packet type and data payload + while ($tempLength > 0) { + $temp = $this->_get_channel_packet(NET_SFTP_CHANNEL); + if (is_bool($temp)) { + $this->packet_type = false; + $this->packet_buffer = ''; + return false; + } + $this->packet_buffer.= $temp; + $tempLength-= strlen($temp); + } + + $stop = strtok(microtime(), ' ') + strtok(''); + + $this->packet_type = ord($this->_string_shift($this->packet_buffer)); + + if ($this->request_id !== false) { + $this->_string_shift($this->packet_buffer, 4); // remove the request id + $length-= 5; // account for the request id and the packet type + } else { + $length-= 1; // account for the packet type + } + + $packet = $this->_string_shift($this->packet_buffer, $length); + + if (defined('NET_SFTP_LOGGING')) { + $packet_type = '<- ' . $this->packet_types[$this->packet_type] . + ' (' . round($stop - $start, 4) . 's)'; + if (NET_SFTP_LOGGING == NET_SFTP_LOG_REALTIME) { + echo "
\r\n" . $this->_format_log(array($packet), array($packet_type)) . "\r\n
\r\n"; + flush(); + ob_flush(); + } else { + $this->packet_type_log[] = $packet_type; + if (NET_SFTP_LOGGING == NET_SFTP_LOG_COMPLEX) { + $this->packet_log[] = $packet; + } + } + } + + return $packet; + } + + /** + * Returns a log of the packets that have been sent and received. + * + * Returns a string if NET_SFTP_LOGGING == NET_SFTP_LOG_COMPLEX, an array if NET_SFTP_LOGGING == NET_SFTP_LOG_SIMPLE and false if !defined('NET_SFTP_LOGGING') + * + * @access public + * @return String or Array + */ + function getSFTPLog() + { + if (!defined('NET_SFTP_LOGGING')) { + return false; + } + + switch (NET_SFTP_LOGGING) { + case NET_SFTP_LOG_COMPLEX: + return $this->_format_log($this->packet_log, $this->packet_type_log); + break; + //case NET_SFTP_LOG_SIMPLE: + default: + return $this->packet_type_log; + } + } + + /** + * Returns all errors + * + * @return String + * @access public + */ + function getSFTPErrors() + { + return $this->sftp_errors; + } + + /** + * Returns the last error + * + * @return String + * @access public + */ + function getLastSFTPError() + { + return count($this->sftp_errors) ? $this->sftp_errors[count($this->sftp_errors) - 1] : ''; + } + + /** + * Get supported SFTP versions + * + * @return Array + * @access public + */ + function getSupportedVersions() + { + $temp = array('version' => $this->version); + if (isset($this->extensions['versions'])) { + $temp['extensions'] = $this->extensions['versions']; + } + return $temp; + } + + /** + * Disconnect + * + * @param Integer $reason + * @return Boolean + * @access private + */ + function _disconnect($reason) + { + $this->pwd = false; + parent::_disconnect($reason); + } +} \ No newline at end of file diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php new file mode 100644 index 0000000000..50add201b2 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php @@ -0,0 +1,1435 @@ + + * login('username', 'password')) { + * exit('Login Failed'); + * } + * + * echo $ssh->exec('ls -la'); + * ?> + * + * + * Here's another short example: + * + * login('username', 'password')) { + * exit('Login Failed'); + * } + * + * echo $ssh->read('username@username:~$'); + * $ssh->write("ls -la\n"); + * echo $ssh->read('username@username:~$'); + * ?> + * + * + * More information on the SSHv1 specification can be found by reading + * {@link http://www.snailbook.com/docs/protocol-1.5.txt protocol-1.5.txt}. + * + * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @category Net + * @package Net_SSH1 + * @author Jim Wigginton + * @copyright MMVII Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @version $Id: SSH1.php,v 1.15 2010/03/22 22:01:38 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/** + * Include Math_BigInteger + * + * Used to do RSA encryption. + */ +if (!class_exists('Math_BigInteger')) { + require_once('Math/BigInteger.php'); +} + +/** + * Include Crypt_Null + */ +//require_once('Crypt/Null.php'); + +/** + * Include Crypt_DES + */ +if (!class_exists('Crypt_DES')) { + require_once('Crypt/DES.php'); +} + +/** + * Include Crypt_TripleDES + */ +if (!class_exists('Crypt_TripleDES')) { + require_once('Crypt/TripleDES.php'); +} + +/** + * Include Crypt_RC4 + */ +if (!class_exists('Crypt_RC4')) { + require_once('Crypt/RC4.php'); +} + +/** + * Include Crypt_Random + */ +// the class_exists() will only be called if the crypt_random_string function hasn't been defined and +// will trigger a call to __autoload() if you're wanting to auto-load classes +// call function_exists() a second time to stop the require_once from being called outside +// of the auto loader +if (!function_exists('crypt_random_string') && !class_exists('Crypt_Random') && !function_exists('crypt_random_string')) { + require_once('Crypt/Random.php'); +} + +/**#@+ + * Encryption Methods + * + * @see Net_SSH1::getSupportedCiphers() + * @access public + */ +/** + * No encryption + * + * Not supported. + */ +define('NET_SSH1_CIPHER_NONE', 0); +/** + * IDEA in CFB mode + * + * Not supported. + */ +define('NET_SSH1_CIPHER_IDEA', 1); +/** + * DES in CBC mode + */ +define('NET_SSH1_CIPHER_DES', 2); +/** + * Triple-DES in CBC mode + * + * All implementations are required to support this + */ +define('NET_SSH1_CIPHER_3DES', 3); +/** + * TRI's Simple Stream encryption CBC + * + * Not supported nor is it defined in the official SSH1 specs. OpenSSH, however, does define it (see cipher.h), + * although it doesn't use it (see cipher.c) + */ +define('NET_SSH1_CIPHER_BROKEN_TSS', 4); +/** + * RC4 + * + * Not supported. + * + * @internal According to the SSH1 specs: + * + * "The first 16 bytes of the session key are used as the key for + * the server to client direction. The remaining 16 bytes are used + * as the key for the client to server direction. This gives + * independent 128-bit keys for each direction." + * + * This library currently only supports encryption when the same key is being used for both directions. This is + * because there's only one $crypto object. Two could be added ($encrypt and $decrypt, perhaps). + */ +define('NET_SSH1_CIPHER_RC4', 5); +/** + * Blowfish + * + * Not supported nor is it defined in the official SSH1 specs. OpenSSH, however, defines it (see cipher.h) and + * uses it (see cipher.c) + */ +define('NET_SSH1_CIPHER_BLOWFISH', 6); +/**#@-*/ + +/**#@+ + * Authentication Methods + * + * @see Net_SSH1::getSupportedAuthentications() + * @access public + */ +/** + * .rhosts or /etc/hosts.equiv + */ +define('NET_SSH1_AUTH_RHOSTS', 1); +/** + * pure RSA authentication + */ +define('NET_SSH1_AUTH_RSA', 2); +/** + * password authentication + * + * This is the only method that is supported by this library. + */ +define('NET_SSH1_AUTH_PASSWORD', 3); +/** + * .rhosts with RSA host authentication + */ +define('NET_SSH1_AUTH_RHOSTS_RSA', 4); +/**#@-*/ + +/**#@+ + * Terminal Modes + * + * @link http://3sp.com/content/developer/maverick-net/docs/Maverick.SSH.PseudoTerminalModesMembers.html + * @access private + */ +define('NET_SSH1_TTY_OP_END', 0); +/**#@-*/ + +/** + * The Response Type + * + * @see Net_SSH1::_get_binary_packet() + * @access private + */ +define('NET_SSH1_RESPONSE_TYPE', 1); + +/** + * The Response Data + * + * @see Net_SSH1::_get_binary_packet() + * @access private + */ +define('NET_SSH1_RESPONSE_DATA', 2); + +/**#@+ + * Execution Bitmap Masks + * + * @see Net_SSH1::bitmap + * @access private + */ +define('NET_SSH1_MASK_CONSTRUCTOR', 0x00000001); +define('NET_SSH1_MASK_LOGIN', 0x00000002); +define('NET_SSH1_MASK_SHELL', 0x00000004); +/**#@-*/ + +/**#@+ + * @access public + * @see Net_SSH1::getLog() + */ +/** + * Returns the message numbers + */ +define('NET_SSH1_LOG_SIMPLE', 1); +/** + * Returns the message content + */ +define('NET_SSH1_LOG_COMPLEX', 2); +/**#@-*/ + +/**#@+ + * @access public + * @see Net_SSH1::read() + */ +/** + * Returns when a string matching $expect exactly is found + */ +define('NET_SSH1_READ_SIMPLE', 1); +/** + * Returns when a string matching the regular expression $expect is found + */ +define('NET_SSH1_READ_REGEX', 2); +/**#@-*/ + +/** + * Pure-PHP implementation of SSHv1. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Net_SSH1 + */ +class Net_SSH1 { + /** + * The SSH identifier + * + * @var String + * @access private + */ + var $identifier = 'SSH-1.5-phpseclib'; + + /** + * The Socket Object + * + * @var Object + * @access private + */ + var $fsock; + + /** + * The cryptography object + * + * @var Object + * @access private + */ + var $crypto = false; + + /** + * Execution Bitmap + * + * The bits that are set represent functions that have been called already. This is used to determine + * if a requisite function has been successfully executed. If not, an error should be thrown. + * + * @var Integer + * @access private + */ + var $bitmap = 0; + + /** + * The Server Key Public Exponent + * + * Logged for debug purposes + * + * @see Net_SSH1::getServerKeyPublicExponent() + * @var String + * @access private + */ + var $server_key_public_exponent; + + /** + * The Server Key Public Modulus + * + * Logged for debug purposes + * + * @see Net_SSH1::getServerKeyPublicModulus() + * @var String + * @access private + */ + var $server_key_public_modulus; + + /** + * The Host Key Public Exponent + * + * Logged for debug purposes + * + * @see Net_SSH1::getHostKeyPublicExponent() + * @var String + * @access private + */ + var $host_key_public_exponent; + + /** + * The Host Key Public Modulus + * + * Logged for debug purposes + * + * @see Net_SSH1::getHostKeyPublicModulus() + * @var String + * @access private + */ + var $host_key_public_modulus; + + /** + * Supported Ciphers + * + * Logged for debug purposes + * + * @see Net_SSH1::getSupportedCiphers() + * @var Array + * @access private + */ + var $supported_ciphers = array( + NET_SSH1_CIPHER_NONE => 'No encryption', + NET_SSH1_CIPHER_IDEA => 'IDEA in CFB mode', + NET_SSH1_CIPHER_DES => 'DES in CBC mode', + NET_SSH1_CIPHER_3DES => 'Triple-DES in CBC mode', + NET_SSH1_CIPHER_BROKEN_TSS => 'TRI\'s Simple Stream encryption CBC', + NET_SSH1_CIPHER_RC4 => 'RC4', + NET_SSH1_CIPHER_BLOWFISH => 'Blowfish' + ); + + /** + * Supported Authentications + * + * Logged for debug purposes + * + * @see Net_SSH1::getSupportedAuthentications() + * @var Array + * @access private + */ + var $supported_authentications = array( + NET_SSH1_AUTH_RHOSTS => '.rhosts or /etc/hosts.equiv', + NET_SSH1_AUTH_RSA => 'pure RSA authentication', + NET_SSH1_AUTH_PASSWORD => 'password authentication', + NET_SSH1_AUTH_RHOSTS_RSA => '.rhosts with RSA host authentication' + ); + + /** + * Server Identification + * + * @see Net_SSH1::getServerIdentification() + * @var String + * @access private + */ + var $server_identification = ''; + + /** + * Protocol Flags + * + * @see Net_SSH1::Net_SSH1() + * @var Array + * @access private + */ + var $protocol_flags = array(); + + /** + * Protocol Flag Log + * + * @see Net_SSH1::getLog() + * @var Array + * @access private + */ + var $protocol_flag_log = array(); + + /** + * Message Log + * + * @see Net_SSH1::getLog() + * @var Array + * @access private + */ + var $message_log = array(); + + /** + * Interactive Buffer + * + * @see Net_SSH1::read() + * @var Array + * @access private + */ + var $interactiveBuffer = ''; + + /** + * Default Constructor. + * + * Connects to an SSHv1 server + * + * @param String $host + * @param optional Integer $port + * @param optional Integer $timeout + * @param optional Integer $cipher + * @return Net_SSH1 + * @access public + */ + function Net_SSH1($host, $port = 22, $timeout = 10, $cipher = NET_SSH1_CIPHER_3DES) + { + $this->protocol_flags = array( + 1 => 'NET_SSH1_MSG_DISCONNECT', + 2 => 'NET_SSH1_SMSG_PUBLIC_KEY', + 3 => 'NET_SSH1_CMSG_SESSION_KEY', + 4 => 'NET_SSH1_CMSG_USER', + 9 => 'NET_SSH1_CMSG_AUTH_PASSWORD', + 10 => 'NET_SSH1_CMSG_REQUEST_PTY', + 12 => 'NET_SSH1_CMSG_EXEC_SHELL', + 13 => 'NET_SSH1_CMSG_EXEC_CMD', + 14 => 'NET_SSH1_SMSG_SUCCESS', + 15 => 'NET_SSH1_SMSG_FAILURE', + 16 => 'NET_SSH1_CMSG_STDIN_DATA', + 17 => 'NET_SSH1_SMSG_STDOUT_DATA', + 18 => 'NET_SSH1_SMSG_STDERR_DATA', + 19 => 'NET_SSH1_CMSG_EOF', + 20 => 'NET_SSH1_SMSG_EXITSTATUS', + 33 => 'NET_SSH1_CMSG_EXIT_CONFIRMATION' + ); + + $this->_define_array($this->protocol_flags); + + $this->fsock = @fsockopen($host, $port, $errno, $errstr, $timeout); + if (!$this->fsock) { + $this->_handle_error(rtrim("Cannot connect to $host. Error $errno. $errstr")); + return; + } + + $this->server_identification = $init_line = fgets($this->fsock, 255); + + if (defined('NET_SSH1_LOGGING')) { + $this->protocol_flags_log[] = '<-'; + $this->protocol_flags_log[] = '->'; + + if (NET_SSH1_LOGGING == NET_SSH1_LOG_COMPLEX) { + $this->message_log[] = $this->server_identification; + $this->message_log[] = $this->identifier . "\r\n"; + } + } + + if (!preg_match('#SSH-([0-9\.]+)-(.+)#', $init_line, $parts)) { + $this->_handle_error('Can only connect to SSH servers'); + return; + } + if ($parts[1][0] != 1) { + $this->_handle_error("Cannot connect to SSH $parts[1] servers"); + return; + } + + fputs($this->fsock, $this->identifier."\r\n"); + + $response = $this->_get_binary_packet(); + if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_PUBLIC_KEY) { + $this->_handle_error('Expected SSH_SMSG_PUBLIC_KEY'); + return; + } + + $anti_spoofing_cookie = $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 8); + + $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4); + + $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2)); + $server_key_public_exponent = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256); + $this->server_key_public_exponent = $server_key_public_exponent; + + $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2)); + $server_key_public_modulus = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256); + $this->server_key_public_modulus = $server_key_public_modulus; + + $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4); + + $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2)); + $host_key_public_exponent = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256); + $this->host_key_public_exponent = $host_key_public_exponent; + + $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2)); + $host_key_public_modulus = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256); + $this->host_key_public_modulus = $host_key_public_modulus; + + $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4); + + // get a list of the supported ciphers + extract(unpack('Nsupported_ciphers_mask', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4))); + foreach ($this->supported_ciphers as $mask=>$name) { + if (($supported_ciphers_mask & (1 << $mask)) == 0) { + unset($this->supported_ciphers[$mask]); + } + } + + // get a list of the supported authentications + extract(unpack('Nsupported_authentications_mask', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4))); + foreach ($this->supported_authentications as $mask=>$name) { + if (($supported_authentications_mask & (1 << $mask)) == 0) { + unset($this->supported_authentications[$mask]); + } + } + + $session_id = pack('H*', md5($host_key_public_modulus->toBytes() . $server_key_public_modulus->toBytes() . $anti_spoofing_cookie)); + + $session_key = crypt_random_string(32); + $double_encrypted_session_key = $session_key ^ str_pad($session_id, 32, chr(0)); + + if ($server_key_public_modulus->compare($host_key_public_modulus) < 0) { + $double_encrypted_session_key = $this->_rsa_crypt( + $double_encrypted_session_key, + array( + $server_key_public_exponent, + $server_key_public_modulus + ) + ); + $double_encrypted_session_key = $this->_rsa_crypt( + $double_encrypted_session_key, + array( + $host_key_public_exponent, + $host_key_public_modulus + ) + ); + } else { + $double_encrypted_session_key = $this->_rsa_crypt( + $double_encrypted_session_key, + array( + $host_key_public_exponent, + $host_key_public_modulus + ) + ); + $double_encrypted_session_key = $this->_rsa_crypt( + $double_encrypted_session_key, + array( + $server_key_public_exponent, + $server_key_public_modulus + ) + ); + } + + $cipher = isset($this->supported_ciphers[$cipher]) ? $cipher : NET_SSH1_CIPHER_3DES; + $data = pack('C2a*na*N', NET_SSH1_CMSG_SESSION_KEY, $cipher, $anti_spoofing_cookie, 8 * strlen($double_encrypted_session_key), $double_encrypted_session_key, 0); + + if (!$this->_send_binary_packet($data)) { + $this->_handle_error('Error sending SSH_CMSG_SESSION_KEY'); + return; + } + + switch ($cipher) { + //case NET_SSH1_CIPHER_NONE: + // $this->crypto = new Crypt_Null(); + // break; + case NET_SSH1_CIPHER_DES: + $this->crypto = new Crypt_DES(); + $this->crypto->disablePadding(); + $this->crypto->enableContinuousBuffer(); + $this->crypto->setKey(substr($session_key, 0, 8)); + break; + case NET_SSH1_CIPHER_3DES: + $this->crypto = new Crypt_TripleDES(CRYPT_DES_MODE_3CBC); + $this->crypto->disablePadding(); + $this->crypto->enableContinuousBuffer(); + $this->crypto->setKey(substr($session_key, 0, 24)); + break; + //case NET_SSH1_CIPHER_RC4: + // $this->crypto = new Crypt_RC4(); + // $this->crypto->enableContinuousBuffer(); + // $this->crypto->setKey(substr($session_key, 0, 16)); + // break; + } + + $response = $this->_get_binary_packet(); + + if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_SUCCESS) { + $this->_handle_error('Expected SSH_SMSG_SUCCESS'); + return; + } + + $this->bitmap = NET_SSH1_MASK_CONSTRUCTOR; + } + + /** + * Login + * + * @param String $username + * @param optional String $password + * @return Boolean + * @access public + */ + function login($username, $password = '') + { + if (!($this->bitmap & NET_SSH1_MASK_CONSTRUCTOR)) { + return false; + } + + $data = pack('CNa*', NET_SSH1_CMSG_USER, strlen($username), $username); + + if (!$this->_send_binary_packet($data)) { + $this->_handle_error('Error sending SSH_CMSG_USER'); + return false; + } + + $response = $this->_get_binary_packet(); + + if ($response[NET_SSH1_RESPONSE_TYPE] == NET_SSH1_SMSG_SUCCESS) { + $this->bitmap |= NET_SSH1_MASK_LOGIN; + return true; + } else if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_FAILURE) { + $this->_handle_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE'); + return false; + } + + $data = pack('CNa*', NET_SSH1_CMSG_AUTH_PASSWORD, strlen($password), $password); + + if (!$this->_send_binary_packet($data)) { + $this->_handle_error('Error sending SSH_CMSG_AUTH_PASSWORD'); + return false; + } + + // remove the username and password from the last logged packet + if (defined('NET_SSH1_LOGGING') && NET_SSH1_LOGGING == NET_SSH1_LOG_COMPLEX) { + $data = pack('CNa*', NET_SSH1_CMSG_AUTH_PASSWORD, strlen('password'), 'password'); + $this->message_log[count($this->message_log) - 1] = $data; // zzzzz + } + + $response = $this->_get_binary_packet(); + + if ($response[NET_SSH1_RESPONSE_TYPE] == NET_SSH1_SMSG_SUCCESS) { + $this->bitmap |= NET_SSH1_MASK_LOGIN; + return true; + } else if ($response[NET_SSH1_RESPONSE_TYPE] == NET_SSH1_SMSG_FAILURE) { + return false; + } else { + $this->_handle_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE'); + return false; + } + } + + /** + * Executes a command on a non-interactive shell, returns the output, and quits. + * + * An SSH1 server will close the connection after a command has been executed on a non-interactive shell. SSH2 + * servers don't, however, this isn't an SSH2 client. The way this works, on the server, is by initiating a + * shell with the -s option, as discussed in the following links: + * + * {@link http://www.faqs.org/docs/bashman/bashref_65.html http://www.faqs.org/docs/bashman/bashref_65.html} + * {@link http://www.faqs.org/docs/bashman/bashref_62.html http://www.faqs.org/docs/bashman/bashref_62.html} + * + * To execute further commands, a new Net_SSH1 object will need to be created. + * + * Returns false on failure and the output, otherwise. + * + * @see Net_SSH1::interactiveRead() + * @see Net_SSH1::interactiveWrite() + * @param String $cmd + * @return mixed + * @access public + */ + function exec($cmd, $block = true) + { + if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) { + $this->_handle_error('Operation disallowed prior to login()'); + return false; + } + + $data = pack('CNa*', NET_SSH1_CMSG_EXEC_CMD, strlen($cmd), $cmd); + + if (!$this->_send_binary_packet($data)) { + $this->_handle_error('Error sending SSH_CMSG_EXEC_CMD'); + return false; + } + + if (!$block) { + return true; + } + + $output = ''; + $response = $this->_get_binary_packet(); + + do { + $output.= substr($response[NET_SSH1_RESPONSE_DATA], 4); + $response = $this->_get_binary_packet(); + } while ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_EXITSTATUS); + + $data = pack('C', NET_SSH1_CMSG_EXIT_CONFIRMATION); + + // i don't think it's really all that important if this packet gets sent or not. + $this->_send_binary_packet($data); + + fclose($this->fsock); + + // reset the execution bitmap - a new Net_SSH1 object needs to be created. + $this->bitmap = 0; + + return $output; + } + + /** + * Creates an interactive shell + * + * @see Net_SSH1::interactiveRead() + * @see Net_SSH1::interactiveWrite() + * @return Boolean + * @access private + */ + function _initShell() + { + // connect using the sample parameters in protocol-1.5.txt. + // according to wikipedia.org's entry on text terminals, "the fundamental type of application running on a text + // terminal is a command line interpreter or shell". thus, opening a terminal session to run the shell. + $data = pack('CNa*N4C', NET_SSH1_CMSG_REQUEST_PTY, strlen('vt100'), 'vt100', 24, 80, 0, 0, NET_SSH1_TTY_OP_END); + + if (!$this->_send_binary_packet($data)) { + $this->_handle_error('Error sending SSH_CMSG_REQUEST_PTY'); + return false; + } + + $response = $this->_get_binary_packet(); + + if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_SUCCESS) { + $this->_handle_error('Expected SSH_SMSG_SUCCESS'); + return false; + } + + $data = pack('C', NET_SSH1_CMSG_EXEC_SHELL); + + if (!$this->_send_binary_packet($data)) { + $this->_handle_error('Error sending SSH_CMSG_EXEC_SHELL'); + return false; + } + + $this->bitmap |= NET_SSH1_MASK_SHELL; + + //stream_set_blocking($this->fsock, 0); + + return true; + } + + /** + * Inputs a command into an interactive shell. + * + * @see Net_SSH1::interactiveWrite() + * @param String $cmd + * @return Boolean + * @access public + */ + function write($cmd) + { + return $this->interactiveWrite($cmd); + } + + /** + * Returns the output of an interactive shell when there's a match for $expect + * + * $expect can take the form of a string literal or, if $mode == NET_SSH1_READ_REGEX, + * a regular expression. + * + * @see Net_SSH1::write() + * @param String $expect + * @param Integer $mode + * @return Boolean + * @access public + */ + function read($expect, $mode = NET_SSH1_READ_SIMPLE) + { + if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) { + $this->_handle_error('Operation disallowed prior to login()'); + return false; + } + + if (!($this->bitmap & NET_SSH1_MASK_SHELL) && !$this->_initShell()) { + $this->_handle_error('Unable to initiate an interactive shell session'); + return false; + } + + $match = $expect; + while (true) { + if ($mode == NET_SSH1_READ_REGEX) { + preg_match($expect, $this->interactiveBuffer, $matches); + $match = $matches[0]; + } + $pos = strpos($this->interactiveBuffer, $match); + if ($pos !== false) { + return $this->_string_shift($this->interactiveBuffer, $pos + strlen($match)); + } + $response = $this->_get_binary_packet(); + $this->interactiveBuffer.= substr($response[NET_SSH1_RESPONSE_DATA], 4); + } + } + + /** + * Inputs a command into an interactive shell. + * + * @see Net_SSH1::interactiveRead() + * @param String $cmd + * @return Boolean + * @access public + */ + function interactiveWrite($cmd) + { + if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) { + $this->_handle_error('Operation disallowed prior to login()'); + return false; + } + + if (!($this->bitmap & NET_SSH1_MASK_SHELL) && !$this->_initShell()) { + $this->_handle_error('Unable to initiate an interactive shell session'); + return false; + } + + $data = pack('CNa*', NET_SSH1_CMSG_STDIN_DATA, strlen($cmd), $cmd); + + if (!$this->_send_binary_packet($data)) { + $this->_handle_error('Error sending SSH_CMSG_STDIN'); + return false; + } + + return true; + } + + /** + * Returns the output of an interactive shell when no more output is available. + * + * Requires PHP 4.3.0 or later due to the use of the stream_select() function. If you see stuff like + * "", you're seeing ANSI escape codes. According to + * {@link http://support.microsoft.com/kb/101875 How to Enable ANSI.SYS in a Command Window}, "Windows NT + * does not support ANSI escape sequences in Win32 Console applications", so if you're a Windows user, + * there's not going to be much recourse. + * + * @see Net_SSH1::interactiveRead() + * @return String + * @access public + */ + function interactiveRead() + { + if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) { + $this->_handle_error('Operation disallowed prior to login()'); + return false; + } + + if (!($this->bitmap & NET_SSH1_MASK_SHELL) && !$this->_initShell()) { + $this->_handle_error('Unable to initiate an interactive shell session'); + return false; + } + + $read = array($this->fsock); + $write = $except = null; + if (stream_select($read, $write, $except, 0)) { + $response = $this->_get_binary_packet(); + return substr($response[NET_SSH1_RESPONSE_DATA], 4); + } else { + return ''; + } + } + + /** + * Disconnect + * + * @access public + */ + function disconnect() + { + $this->_disconnect(); + } + + /** + * Destructor. + * + * Will be called, automatically, if you're supporting just PHP5. If you're supporting PHP4, you'll need to call + * disconnect(). + * + * @access public + */ + function __destruct() + { + $this->_disconnect(); + } + + /** + * Disconnect + * + * @param String $msg + * @access private + */ + function _disconnect($msg = 'Client Quit') + { + if ($this->bitmap) { + $data = pack('C', NET_SSH1_CMSG_EOF); + $this->_send_binary_packet($data); + + $response = $this->_get_binary_packet(); + switch ($response[NET_SSH1_RESPONSE_TYPE]) { + case NET_SSH1_SMSG_EXITSTATUS: + $data = pack('C', NET_SSH1_CMSG_EXIT_CONFIRMATION); + break; + default: + $data = pack('CNa*', NET_SSH1_MSG_DISCONNECT, strlen($msg), $msg); + } + + $this->_send_binary_packet($data); + fclose($this->fsock); + $this->bitmap = 0; + } + } + + /** + * Gets Binary Packets + * + * See 'The Binary Packet Protocol' of protocol-1.5.txt for more info. + * + * Also, this function could be improved upon by adding detection for the following exploit: + * http://www.securiteam.com/securitynews/5LP042K3FY.html + * + * @see Net_SSH1::_send_binary_packet() + * @return Array + * @access private + */ + function _get_binary_packet() + { + if (feof($this->fsock)) { + //$this->_handle_error('connection closed prematurely'); + return false; + } + + $temp = unpack('Nlength', fread($this->fsock, 4)); + + $padding_length = 8 - ($temp['length'] & 7); + $length = $temp['length'] + $padding_length; + + $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 + $raw = fread($this->fsock, $length); + $stop = strtok(microtime(), ' ') + strtok(''); + + if ($this->crypto !== false) { + $raw = $this->crypto->decrypt($raw); + } + + $padding = substr($raw, 0, $padding_length); + $type = $raw[$padding_length]; + $data = substr($raw, $padding_length + 1, -4); + + $temp = unpack('Ncrc', substr($raw, -4)); + + //if ( $temp['crc'] != $this->_crc($padding . $type . $data) ) { + // $this->_handle_error('Bad CRC in packet from server'); + // return false; + //} + + $type = ord($type); + + if (defined('NET_SSH1_LOGGING')) { + $temp = isset($this->protocol_flags[$type]) ? $this->protocol_flags[$type] : 'UNKNOWN'; + $this->protocol_flags_log[] = '<- ' . $temp . + ' (' . round($stop - $start, 4) . 's)'; + if (NET_SSH1_LOGGING == NET_SSH1_LOG_COMPLEX) { + $this->message_log[] = $data; + } + } + + return array( + NET_SSH1_RESPONSE_TYPE => $type, + NET_SSH1_RESPONSE_DATA => $data + ); + } + + /** + * Sends Binary Packets + * + * Returns true on success, false on failure. + * + * @see Net_SSH1::_get_binary_packet() + * @param String $data + * @return Boolean + * @access private + */ + function _send_binary_packet($data) { + if (feof($this->fsock)) { + //$this->_handle_error('connection closed prematurely'); + return false; + } + + if (defined('NET_SSH1_LOGGING')) { + $temp = isset($this->protocol_flags[ord($data[0])]) ? $this->protocol_flags[ord($data[0])] : 'UNKNOWN'; + $this->protocol_flags_log[] = '-> ' . $temp . + ' (' . round($stop - $start, 4) . 's)'; + if (NET_SSH1_LOGGING == NET_SSH1_LOG_COMPLEX) { + $this->message_log[] = substr($data, 1); + } + } + + $length = strlen($data) + 4; + + $padding = crypt_random_string(8 - ($length & 7)); + + $data = $padding . $data; + $data.= pack('N', $this->_crc($data)); + + if ($this->crypto !== false) { + $data = $this->crypto->encrypt($data); + } + + $packet = pack('Na*', $length, $data); + + $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 + $result = strlen($packet) == fputs($this->fsock, $packet); + $stop = strtok(microtime(), ' ') + strtok(''); + + return $result; + } + + /** + * Cyclic Redundancy Check (CRC) + * + * PHP's crc32 function is implemented slightly differently than the one that SSH v1 uses, so + * we've reimplemented it. A more detailed discussion of the differences can be found after + * $crc_lookup_table's initialization. + * + * @see Net_SSH1::_get_binary_packet() + * @see Net_SSH1::_send_binary_packet() + * @param String $data + * @return Integer + * @access private + */ + function _crc($data) + { + static $crc_lookup_table = array( + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, + 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, + 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, + 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, + 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, + 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, + 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, + 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, + 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, + 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, + 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, + 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, + 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, + 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, + 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, + 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, + 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, + 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, + 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, + 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, + 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, + 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, + 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, + 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, + 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, + 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, + 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, + 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, + 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, + 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, + 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, + 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, + 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, + 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, + 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, + 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, + 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, + 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, + 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, + 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, + 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, + 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, + 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, + 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, + 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, + 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, + 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, + 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D + ); + + // For this function to yield the same output as PHP's crc32 function, $crc would have to be + // set to 0xFFFFFFFF, initially - not 0x00000000 as it currently is. + $crc = 0x00000000; + $length = strlen($data); + + for ($i=0;$i<$length;$i++) { + // We AND $crc >> 8 with 0x00FFFFFF because we want the eight newly added bits to all + // be zero. PHP, unfortunately, doesn't always do this. 0x80000000 >> 8, as an example, + // yields 0xFF800000 - not 0x00800000. The following link elaborates: + // http://www.php.net/manual/en/language.operators.bitwise.php#57281 + $crc = (($crc >> 8) & 0x00FFFFFF) ^ $crc_lookup_table[($crc & 0xFF) ^ ord($data[$i])]; + } + + // In addition to having to set $crc to 0xFFFFFFFF, initially, the return value must be XOR'd with + // 0xFFFFFFFF for this function to return the same thing that PHP's crc32 function would. + return $crc; + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param String $string + * @param optional Integer $index + * @return String + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } + + /** + * RSA Encrypt + * + * Returns mod(pow($m, $e), $n), where $n should be the product of two (large) primes $p and $q and where $e + * should be a number with the property that gcd($e, ($p - 1) * ($q - 1)) == 1. Could just make anything that + * calls this call modexp, instead, but I think this makes things clearer, maybe... + * + * @see Net_SSH1::Net_SSH1() + * @param Math_BigInteger $m + * @param Array $key + * @return Math_BigInteger + * @access private + */ + function _rsa_crypt($m, $key) + { + /* + if (!class_exists('Crypt_RSA')) { + require_once('Crypt/RSA.php'); + } + + $rsa = new Crypt_RSA(); + $rsa->loadKey($key, CRYPT_RSA_PUBLIC_FORMAT_RAW); + $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1); + return $rsa->encrypt($m); + */ + + // To quote from protocol-1.5.txt: + // The most significant byte (which is only partial as the value must be + // less than the public modulus, which is never a power of two) is zero. + // + // The next byte contains the value 2 (which stands for public-key + // encrypted data in the PKCS standard [PKCS#1]). Then, there are non- + // zero random bytes to fill any unused space, a zero byte, and the data + // to be encrypted in the least significant bytes, the last byte of the + // data in the least significant byte. + + // Presumably the part of PKCS#1 they're refering to is "Section 7.2.1 Encryption Operation", + // under "7.2 RSAES-PKCS1-v1.5" and "7 Encryption schemes" of the following URL: + // ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf + $temp = chr(0) . chr(2); + $modulus = $key[1]->toBytes(); + $length = strlen($modulus) - strlen($m) - 3; + $temp = ''; + while (strlen($temp) != $length) { + $block = crypt_random_string($length - strlen($temp)); + $block = str_replace("\x00", '', $block); + $temp.= $block; + } + $temp.= chr(0) . $m; + + $m = new Math_BigInteger($temp, 256); + $m = $m->modPow($key[0], $key[1]); + + return $m->toBytes(); + } + + /** + * Define Array + * + * Takes any number of arrays whose indices are integers and whose values are strings and defines a bunch of + * named constants from it, using the value as the name of the constant and the index as the value of the constant. + * If any of the constants that would be defined already exists, none of the constants will be defined. + * + * @param Array $array + * @access private + */ + function _define_array() + { + $args = func_get_args(); + foreach ($args as $arg) { + foreach ($arg as $key=>$value) { + if (!defined($value)) { + define($value, $key); + } else { + break 2; + } + } + } + } + + /** + * Returns a log of the packets that have been sent and received. + * + * Returns a string if NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX, an array if NET_SSH2_LOGGING == NET_SSH2_LOG_SIMPLE and false if !defined('NET_SSH2_LOGGING') + * + * @access public + * @return String or Array + */ + function getLog() + { + if (!defined('NET_SSH1_LOGGING')) { + return false; + } + + switch (NET_SSH1_LOGGING) { + case NET_SSH1_LOG_SIMPLE: + return $this->message_number_log; + break; + case NET_SSH1_LOG_COMPLEX: + return $this->_format_log($this->message_log, $this->protocol_flags_log); + break; + default: + return false; + } + } + + /** + * Formats a log for printing + * + * @param Array $message_log + * @param Array $message_number_log + * @access private + * @return String + */ + function _format_log($message_log, $message_number_log) + { + static $boundary = ':', $long_width = 65, $short_width = 16; + + $output = ''; + for ($i = 0; $i < count($message_log); $i++) { + $output.= $message_number_log[$i] . "\r\n"; + $current_log = $message_log[$i]; + $j = 0; + do { + if (!empty($current_log)) { + $output.= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0 '; + } + $fragment = $this->_string_shift($current_log, $short_width); + $hex = substr( + preg_replace( + '#(.)#es', + '"' . $boundary . '" . str_pad(dechex(ord(substr("\\1", -1))), 2, "0", STR_PAD_LEFT)', + $fragment), + strlen($boundary) + ); + // replace non ASCII printable characters with dots + // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters + // also replace < with a . since < messes up the output on web browsers + $raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment); + $output.= str_pad($hex, $long_width - $short_width, ' ') . $raw . "\r\n"; + $j++; + } while (!empty($current_log)); + $output.= "\r\n"; + } + + return $output; + } + + /** + * Return the server key public exponent + * + * Returns, by default, the base-10 representation. If $raw_output is set to true, returns, instead, + * the raw bytes. This behavior is similar to PHP's md5() function. + * + * @param optional Boolean $raw_output + * @return String + * @access public + */ + function getServerKeyPublicExponent($raw_output = false) + { + return $raw_output ? $this->server_key_public_exponent->toBytes() : $this->server_key_public_exponent->toString(); + } + + /** + * Return the server key public modulus + * + * Returns, by default, the base-10 representation. If $raw_output is set to true, returns, instead, + * the raw bytes. This behavior is similar to PHP's md5() function. + * + * @param optional Boolean $raw_output + * @return String + * @access public + */ + function getServerKeyPublicModulus($raw_output = false) + { + return $raw_output ? $this->server_key_public_modulus->toBytes() : $this->server_key_public_modulus->toString(); + } + + /** + * Return the host key public exponent + * + * Returns, by default, the base-10 representation. If $raw_output is set to true, returns, instead, + * the raw bytes. This behavior is similar to PHP's md5() function. + * + * @param optional Boolean $raw_output + * @return String + * @access public + */ + function getHostKeyPublicExponent($raw_output = false) + { + return $raw_output ? $this->host_key_public_exponent->toBytes() : $this->host_key_public_exponent->toString(); + } + + /** + * Return the host key public modulus + * + * Returns, by default, the base-10 representation. If $raw_output is set to true, returns, instead, + * the raw bytes. This behavior is similar to PHP's md5() function. + * + * @param optional Boolean $raw_output + * @return String + * @access public + */ + function getHostKeyPublicModulus($raw_output = false) + { + return $raw_output ? $this->host_key_public_modulus->toBytes() : $this->host_key_public_modulus->toString(); + } + + /** + * Return a list of ciphers supported by SSH1 server. + * + * Just because a cipher is supported by an SSH1 server doesn't mean it's supported by this library. If $raw_output + * is set to true, returns, instead, an array of constants. ie. instead of array('Triple-DES in CBC mode'), you'll + * get array(NET_SSH1_CIPHER_3DES). + * + * @param optional Boolean $raw_output + * @return Array + * @access public + */ + function getSupportedCiphers($raw_output = false) + { + return $raw_output ? array_keys($this->supported_ciphers) : array_values($this->supported_ciphers); + } + + /** + * Return a list of authentications supported by SSH1 server. + * + * Just because a cipher is supported by an SSH1 server doesn't mean it's supported by this library. If $raw_output + * is set to true, returns, instead, an array of constants. ie. instead of array('password authentication'), you'll + * get array(NET_SSH1_AUTH_PASSWORD). + * + * @param optional Boolean $raw_output + * @return Array + * @access public + */ + function getSupportedAuthentications($raw_output = false) + { + return $raw_output ? array_keys($this->supported_authentications) : array_values($this->supported_authentications); + } + + /** + * Return the server identification. + * + * @return String + * @access public + */ + function getServerIdentification() + { + return rtrim($this->server_identification); + } + + /** + * Error Handler + * + * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. + * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. + * + * @param String $string + * @access private + */ + function _handle_error($err_msg) { + if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { + $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; + throw(new $class($err_msg)); + } else { + user_error($err_msg); + } + } +} diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php new file mode 100644 index 0000000000..32ece7a566 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php @@ -0,0 +1,2997 @@ + + * login('username', 'password')) { + * exit('Login Failed'); + * } + * + * echo $ssh->exec('pwd'); + * echo $ssh->exec('ls -la'); + * ?> + * + * + * + * setPassword('whatever'); + * $key->loadKey(file_get_contents('privatekey')); + * + * $ssh = new Net_SSH2('www.domain.tld'); + * if (!$ssh->login('username', $key)) { + * exit('Login Failed'); + * } + * + * echo $ssh->read('username@username:~$'); + * $ssh->write("ls -la\n"); + * echo $ssh->read('username@username:~$'); + * ?> + * + * + * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @category Net + * @package Net_SSH2 + * @author Jim Wigginton + * @copyright MMVII Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @version $Id: SSH2.php,v 1.53 2010-10-24 01:24:30 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/** + * Include Math_BigInteger + * + * Used to do Diffie-Hellman key exchange and DSA/RSA signature verification. + */ +if (!class_exists('Math_BigInteger')) { + require_once('Math/BigInteger.php'); +} + +/** + * Include Crypt_Random + */ +// the class_exists() will only be called if the crypt_random_string function hasn't been defined and +// will trigger a call to __autoload() if you're wanting to auto-load classes +// call function_exists() a second time to stop the require_once from being called outside +// of the auto loader +if (!function_exists('crypt_random_string') && !class_exists('Crypt_Random') && !function_exists('crypt_random_string')) { + require_once('Crypt/Random.php'); +} + +/** + * Include Crypt_Hash + */ +if (!class_exists('Crypt_Hash')) { + require_once('Crypt/Hash.php'); +} + +/** + * Include Crypt_TripleDES + */ +if (!class_exists('Crypt_TripleDES')) { + require_once('Crypt/TripleDES.php'); +} + +/** + * Include Crypt_RC4 + */ +if (!class_exists('Crypt_RC4')) { + require_once('Crypt/RC4.php'); +} + +/** + * Include Crypt_AES + */ +if (!class_exists('Crypt_AES')) { + require_once('Crypt/AES.php'); +} + +/**#@+ + * Execution Bitmap Masks + * + * @see Net_SSH2::bitmap + * @access private + */ +define('NET_SSH2_MASK_CONSTRUCTOR', 0x00000001); +define('NET_SSH2_MASK_LOGIN', 0x00000002); +define('NET_SSH2_MASK_SHELL', 0x00000004); +/**#@-*/ + +/**#@+ + * Channel constants + * + * RFC4254 refers not to client and server channels but rather to sender and recipient channels. we don't refer + * to them in that way because RFC4254 toggles the meaning. the client sends a SSH_MSG_CHANNEL_OPEN message with + * a sender channel and the server sends a SSH_MSG_CHANNEL_OPEN_CONFIRMATION in response, with a sender and a + * recepient channel. at first glance, you might conclude that SSH_MSG_CHANNEL_OPEN_CONFIRMATION's sender channel + * would be the same thing as SSH_MSG_CHANNEL_OPEN's sender channel, but it's not, per this snipet: + * The 'recipient channel' is the channel number given in the original + * open request, and 'sender channel' is the channel number allocated by + * the other side. + * + * @see Net_SSH2::_send_channel_packet() + * @see Net_SSH2::_get_channel_packet() + * @access private + */ +define('NET_SSH2_CHANNEL_EXEC', 0); // PuTTy uses 0x100 +define('NET_SSH2_CHANNEL_SHELL',1); +/**#@-*/ + +/**#@+ + * @access public + * @see Net_SSH2::getLog() + */ +/** + * Returns the message numbers + */ +define('NET_SSH2_LOG_SIMPLE', 1); +/** + * Returns the message content + */ +define('NET_SSH2_LOG_COMPLEX', 2); +/** + * Outputs the content real-time + */ +define('NET_SSH2_LOG_REALTIME', 3); +/** + * Dumps the content real-time to a file + */ +define('NET_SSH2_LOG_REALTIME_FILE', 4); +/**#@-*/ + +/**#@+ + * @access public + * @see Net_SSH2::read() + */ +/** + * Returns when a string matching $expect exactly is found + */ +define('NET_SSH2_READ_SIMPLE', 1); +/** + * Returns when a string matching the regular expression $expect is found + */ +define('NET_SSH2_READ_REGEX', 2); +/** + * Make sure that the log never gets larger than this + */ +define('NET_SSH2_LOG_MAX_SIZE', 1024 * 1024); +/**#@-*/ + +/** + * Pure-PHP implementation of SSHv2. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Net_SSH2 + */ +class Net_SSH2 { + /** + * The SSH identifier + * + * @var String + * @access private + */ + var $identifier = 'SSH-2.0-phpseclib_0.3'; + + /** + * The Socket Object + * + * @var Object + * @access private + */ + var $fsock; + + /** + * Execution Bitmap + * + * The bits that are set represent functions that have been called already. This is used to determine + * if a requisite function has been successfully executed. If not, an error should be thrown. + * + * @var Integer + * @access private + */ + var $bitmap = 0; + + /** + * Error information + * + * @see Net_SSH2::getErrors() + * @see Net_SSH2::getLastError() + * @var String + * @access private + */ + var $errors = array(); + + /** + * Server Identifier + * + * @see Net_SSH2::getServerIdentification() + * @var String + * @access private + */ + var $server_identifier = ''; + + /** + * Key Exchange Algorithms + * + * @see Net_SSH2::getKexAlgorithims() + * @var Array + * @access private + */ + var $kex_algorithms; + + /** + * Server Host Key Algorithms + * + * @see Net_SSH2::getServerHostKeyAlgorithms() + * @var Array + * @access private + */ + var $server_host_key_algorithms; + + /** + * Encryption Algorithms: Client to Server + * + * @see Net_SSH2::getEncryptionAlgorithmsClient2Server() + * @var Array + * @access private + */ + var $encryption_algorithms_client_to_server; + + /** + * Encryption Algorithms: Server to Client + * + * @see Net_SSH2::getEncryptionAlgorithmsServer2Client() + * @var Array + * @access private + */ + var $encryption_algorithms_server_to_client; + + /** + * MAC Algorithms: Client to Server + * + * @see Net_SSH2::getMACAlgorithmsClient2Server() + * @var Array + * @access private + */ + var $mac_algorithms_client_to_server; + + /** + * MAC Algorithms: Server to Client + * + * @see Net_SSH2::getMACAlgorithmsServer2Client() + * @var Array + * @access private + */ + var $mac_algorithms_server_to_client; + + /** + * Compression Algorithms: Client to Server + * + * @see Net_SSH2::getCompressionAlgorithmsClient2Server() + * @var Array + * @access private + */ + var $compression_algorithms_client_to_server; + + /** + * Compression Algorithms: Server to Client + * + * @see Net_SSH2::getCompressionAlgorithmsServer2Client() + * @var Array + * @access private + */ + var $compression_algorithms_server_to_client; + + /** + * Languages: Server to Client + * + * @see Net_SSH2::getLanguagesServer2Client() + * @var Array + * @access private + */ + var $languages_server_to_client; + + /** + * Languages: Client to Server + * + * @see Net_SSH2::getLanguagesClient2Server() + * @var Array + * @access private + */ + var $languages_client_to_server; + + /** + * Block Size for Server to Client Encryption + * + * "Note that the length of the concatenation of 'packet_length', + * 'padding_length', 'payload', and 'random padding' MUST be a multiple + * of the cipher block size or 8, whichever is larger. This constraint + * MUST be enforced, even when using stream ciphers." + * + * -- http://tools.ietf.org/html/rfc4253#section-6 + * + * @see Net_SSH2::Net_SSH2() + * @see Net_SSH2::_send_binary_packet() + * @var Integer + * @access private + */ + var $encrypt_block_size = 8; + + /** + * Block Size for Client to Server Encryption + * + * @see Net_SSH2::Net_SSH2() + * @see Net_SSH2::_get_binary_packet() + * @var Integer + * @access private + */ + var $decrypt_block_size = 8; + + /** + * Server to Client Encryption Object + * + * @see Net_SSH2::_get_binary_packet() + * @var Object + * @access private + */ + var $decrypt = false; + + /** + * Client to Server Encryption Object + * + * @see Net_SSH2::_send_binary_packet() + * @var Object + * @access private + */ + var $encrypt = false; + + /** + * Client to Server HMAC Object + * + * @see Net_SSH2::_send_binary_packet() + * @var Object + * @access private + */ + var $hmac_create = false; + + /** + * Server to Client HMAC Object + * + * @see Net_SSH2::_get_binary_packet() + * @var Object + * @access private + */ + var $hmac_check = false; + + /** + * Size of server to client HMAC + * + * We need to know how big the HMAC will be for the server to client direction so that we know how many bytes to read. + * For the client to server side, the HMAC object will make the HMAC as long as it needs to be. All we need to do is + * append it. + * + * @see Net_SSH2::_get_binary_packet() + * @var Integer + * @access private + */ + var $hmac_size = false; + + /** + * Server Public Host Key + * + * @see Net_SSH2::getServerPublicHostKey() + * @var String + * @access private + */ + var $server_public_host_key; + + /** + * Session identifer + * + * "The exchange hash H from the first key exchange is additionally + * used as the session identifier, which is a unique identifier for + * this connection." + * + * -- http://tools.ietf.org/html/rfc4253#section-7.2 + * + * @see Net_SSH2::_key_exchange() + * @var String + * @access private + */ + var $session_id = false; + + /** + * Exchange hash + * + * The current exchange hash + * + * @see Net_SSH2::_key_exchange() + * @var String + * @access private + */ + var $exchange_hash = false; + + /** + * Message Numbers + * + * @see Net_SSH2::Net_SSH2() + * @var Array + * @access private + */ + var $message_numbers = array(); + + /** + * Disconnection Message 'reason codes' defined in RFC4253 + * + * @see Net_SSH2::Net_SSH2() + * @var Array + * @access private + */ + var $disconnect_reasons = array(); + + /** + * SSH_MSG_CHANNEL_OPEN_FAILURE 'reason codes', defined in RFC4254 + * + * @see Net_SSH2::Net_SSH2() + * @var Array + * @access private + */ + var $channel_open_failure_reasons = array(); + + /** + * Terminal Modes + * + * @link http://tools.ietf.org/html/rfc4254#section-8 + * @see Net_SSH2::Net_SSH2() + * @var Array + * @access private + */ + var $terminal_modes = array(); + + /** + * SSH_MSG_CHANNEL_EXTENDED_DATA's data_type_codes + * + * @link http://tools.ietf.org/html/rfc4254#section-5.2 + * @see Net_SSH2::Net_SSH2() + * @var Array + * @access private + */ + var $channel_extended_data_type_codes = array(); + + /** + * Send Sequence Number + * + * See 'Section 6.4. Data Integrity' of rfc4253 for more info. + * + * @see Net_SSH2::_send_binary_packet() + * @var Integer + * @access private + */ + var $send_seq_no = 0; + + /** + * Get Sequence Number + * + * See 'Section 6.4. Data Integrity' of rfc4253 for more info. + * + * @see Net_SSH2::_get_binary_packet() + * @var Integer + * @access private + */ + var $get_seq_no = 0; + + /** + * Server Channels + * + * Maps client channels to server channels + * + * @see Net_SSH2::_get_channel_packet() + * @see Net_SSH2::exec() + * @var Array + * @access private + */ + var $server_channels = array(); + + /** + * Channel Buffers + * + * If a client requests a packet from one channel but receives two packets from another those packets should + * be placed in a buffer + * + * @see Net_SSH2::_get_channel_packet() + * @see Net_SSH2::exec() + * @var Array + * @access private + */ + var $channel_buffers = array(); + + /** + * Channel Status + * + * Contains the type of the last sent message + * + * @see Net_SSH2::_get_channel_packet() + * @var Array + * @access private + */ + var $channel_status = array(); + + /** + * Packet Size + * + * Maximum packet size indexed by channel + * + * @see Net_SSH2::_send_channel_packet() + * @var Array + * @access private + */ + var $packet_size_client_to_server = array(); + + /** + * Message Number Log + * + * @see Net_SSH2::getLog() + * @var Array + * @access private + */ + var $message_number_log = array(); + + /** + * Message Log + * + * @see Net_SSH2::getLog() + * @var Array + * @access private + */ + var $message_log = array(); + + /** + * The Window Size + * + * Bytes the other party can send before it must wait for the window to be adjusted (0x7FFFFFFF = 4GB) + * + * @var Integer + * @see Net_SSH2::_send_channel_packet() + * @see Net_SSH2::exec() + * @access private + */ + var $window_size = 0x7FFFFFFF; + + /** + * Window size + * + * Window size indexed by channel + * + * @see Net_SSH2::_send_channel_packet() + * @var Array + * @access private + */ + var $window_size_client_to_server = array(); + + /** + * Server signature + * + * Verified against $this->session_id + * + * @see Net_SSH2::getServerPublicHostKey() + * @var String + * @access private + */ + var $signature = ''; + + /** + * Server signature format + * + * ssh-rsa or ssh-dss. + * + * @see Net_SSH2::getServerPublicHostKey() + * @var String + * @access private + */ + var $signature_format = ''; + + /** + * Interactive Buffer + * + * @see Net_SSH2::read() + * @var Array + * @access private + */ + var $interactiveBuffer = ''; + + /** + * Current log size + * + * Should never exceed NET_SSH2_LOG_MAX_SIZE + * + * @see Net_SSH2::_send_binary_packet() + * @see Net_SSH2::_get_binary_packet() + * @var Integer + * @access private + */ + var $log_size; + + /** + * Timeout + * + * @see Net_SSH2::setTimeout() + * @access private + */ + var $timeout; + + /** + * Current Timeout + * + * @see Net_SSH2::_get_channel_packet() + * @access private + */ + var $curTimeout; + + /** + * Real-time log file pointer + * + * @see Net_SSH2::_append_log() + * @access private + */ + var $realtime_log_file; + + /** + * Real-time log file size + * + * @see Net_SSH2::_append_log() + * @access private + */ + var $realtime_log_size; + + /** + * Has the signature been validated? + * + * @see Net_SSH2::getServerPublicHostKey() + * @access private + */ + var $signature_validated = false; + + /** + * Real-time log file wrap boolean + * + * @see Net_SSH2::_append_log() + * @access private + */ + var $realtime_log_wrap; + + /** + * Flag to suppress stderr from output + * + * @see Net_SSH2::enableQuietMode() + * @access private + */ + var $quiet_mode = false; + + /** + * Time of first network activity + * + * @access private + */ + var $last_packet; + + /** + * Default Constructor. + * + * Connects to an SSHv2 server + * + * @param String $host + * @param optional Integer $port + * @param optional Integer $timeout + * @return Net_SSH2 + * @access public + */ + function Net_SSH2($host, $port = 22, $timeout = 10) + { + $this->last_packet = strtok(microtime(), ' ') + strtok(''); // == microtime(true) in PHP5 + $this->message_numbers = array( + 1 => 'NET_SSH2_MSG_DISCONNECT', + 2 => 'NET_SSH2_MSG_IGNORE', + 3 => 'NET_SSH2_MSG_UNIMPLEMENTED', + 4 => 'NET_SSH2_MSG_DEBUG', + 5 => 'NET_SSH2_MSG_SERVICE_REQUEST', + 6 => 'NET_SSH2_MSG_SERVICE_ACCEPT', + 20 => 'NET_SSH2_MSG_KEXINIT', + 21 => 'NET_SSH2_MSG_NEWKEYS', + 30 => 'NET_SSH2_MSG_KEXDH_INIT', + 31 => 'NET_SSH2_MSG_KEXDH_REPLY', + 50 => 'NET_SSH2_MSG_USERAUTH_REQUEST', + 51 => 'NET_SSH2_MSG_USERAUTH_FAILURE', + 52 => 'NET_SSH2_MSG_USERAUTH_SUCCESS', + 53 => 'NET_SSH2_MSG_USERAUTH_BANNER', + + 80 => 'NET_SSH2_MSG_GLOBAL_REQUEST', + 81 => 'NET_SSH2_MSG_REQUEST_SUCCESS', + 82 => 'NET_SSH2_MSG_REQUEST_FAILURE', + 90 => 'NET_SSH2_MSG_CHANNEL_OPEN', + 91 => 'NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION', + 92 => 'NET_SSH2_MSG_CHANNEL_OPEN_FAILURE', + 93 => 'NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST', + 94 => 'NET_SSH2_MSG_CHANNEL_DATA', + 95 => 'NET_SSH2_MSG_CHANNEL_EXTENDED_DATA', + 96 => 'NET_SSH2_MSG_CHANNEL_EOF', + 97 => 'NET_SSH2_MSG_CHANNEL_CLOSE', + 98 => 'NET_SSH2_MSG_CHANNEL_REQUEST', + 99 => 'NET_SSH2_MSG_CHANNEL_SUCCESS', + 100 => 'NET_SSH2_MSG_CHANNEL_FAILURE' + ); + $this->disconnect_reasons = array( + 1 => 'NET_SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT', + 2 => 'NET_SSH2_DISCONNECT_PROTOCOL_ERROR', + 3 => 'NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED', + 4 => 'NET_SSH2_DISCONNECT_RESERVED', + 5 => 'NET_SSH2_DISCONNECT_MAC_ERROR', + 6 => 'NET_SSH2_DISCONNECT_COMPRESSION_ERROR', + 7 => 'NET_SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE', + 8 => 'NET_SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED', + 9 => 'NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE', + 10 => 'NET_SSH2_DISCONNECT_CONNECTION_LOST', + 11 => 'NET_SSH2_DISCONNECT_BY_APPLICATION', + 12 => 'NET_SSH2_DISCONNECT_TOO_MANY_CONNECTIONS', + 13 => 'NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER', + 14 => 'NET_SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE', + 15 => 'NET_SSH2_DISCONNECT_ILLEGAL_USER_NAME' + ); + $this->channel_open_failure_reasons = array( + 1 => 'NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED' + ); + $this->terminal_modes = array( + 0 => 'NET_SSH2_TTY_OP_END' + ); + $this->channel_extended_data_type_codes = array( + 1 => 'NET_SSH2_EXTENDED_DATA_STDERR' + ); + + $this->_define_array( + $this->message_numbers, + $this->disconnect_reasons, + $this->channel_open_failure_reasons, + $this->terminal_modes, + $this->channel_extended_data_type_codes, + array(60 => 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ'), + array(60 => 'NET_SSH2_MSG_USERAUTH_PK_OK'), + array(60 => 'NET_SSH2_MSG_USERAUTH_INFO_REQUEST', + 61 => 'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE') + ); + + $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 + $this->fsock = @fsockopen($host, $port, $errno, $errstr, $timeout); + if (!$this->fsock) { + $this->_handle_error(rtrim("Cannot connect to $host. Error $errno. $errstr")); + return; + } + $elapsed = strtok(microtime(), ' ') + strtok('') - $start; + + $timeout-= $elapsed; + + if ($timeout <= 0) { + $this->_handle_error(rtrim("Cannot connect to $host. Timeout error")); + return; + } + + $read = array($this->fsock); + $write = $except = NULL; + + $sec = floor($timeout); + $usec = 1000000 * ($timeout - $sec); + + // on windows this returns a "Warning: Invalid CRT parameters detected" error + // the !count() is done as a workaround for + if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) { + $this->_handle_error(rtrim("Cannot connect to $host. Banner timeout")); + return; + } + + /* According to the SSH2 specs, + + "The server MAY send other lines of data before sending the version + string. Each line SHOULD be terminated by a Carriage Return and Line + Feed. Such lines MUST NOT begin with "SSH-", and SHOULD be encoded + in ISO-10646 UTF-8 [RFC3629] (language is not specified). Clients + MUST be able to process such lines." */ + $temp = ''; + $extra = ''; + while (!feof($this->fsock) && !preg_match('#^SSH-(\d\.\d+)#', $temp, $matches)) { + if (substr($temp, -2) == "\r\n") { + $extra.= $temp; + $temp = ''; + } + $temp.= fgets($this->fsock, 255); + } + + if (feof($this->fsock)) { + $this->_handle_error('Connection closed by server'); + return false; + } + + $ext = array(); + if (extension_loaded('mcrypt')) { + $ext[] = 'mcrypt'; + } + if (extension_loaded('gmp')) { + $ext[] = 'gmp'; + } else if (extension_loaded('bcmath')) { + $ext[] = 'bcmath'; + } + + if (!empty($ext)) { + $this->identifier.= ' (' . implode(', ', $ext) . ')'; + } + + if (defined('NET_SSH2_LOGGING')) { + $this->message_number_log[] = '<-'; + $this->message_number_log[] = '->'; + + if (NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX) { + $this->message_log[] = $extra . $temp; + $this->message_log[] = $this->identifier . "\r\n"; + } + } + + $this->server_identifier = trim($temp, "\r\n"); + if (!empty($extra)) { + $this->errors[] = utf8_decode($extra); + } + + if ($matches[1] != '1.99' && $matches[1] != '2.0') { + $this->_handle_error("Cannot connect to SSH $matches[1] servers"); + return; + } + + fputs($this->fsock, $this->identifier . "\r\n"); + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->_handle_error('Connection closed by server'); + return; + } + + if (ord($response[0]) != NET_SSH2_MSG_KEXINIT) { + $this->_handle_error('Expected SSH_MSG_KEXINIT'); + return; + } + + if (!$this->_key_exchange($response)) { + return; + } + + $this->bitmap = NET_SSH2_MASK_CONSTRUCTOR; + } + + /** + * Key Exchange + * + * @param String $kexinit_payload_server + * @access private + */ + function _key_exchange($kexinit_payload_server) + { + static $kex_algorithms = array( + 'diffie-hellman-group1-sha1', // REQUIRED + 'diffie-hellman-group14-sha1' // REQUIRED + ); + + static $server_host_key_algorithms = array( + 'ssh-rsa', // RECOMMENDED sign Raw RSA Key + 'ssh-dss' // REQUIRED sign Raw DSS Key + ); + + static $encryption_algorithms = array( + // from : + 'arcfour256', + 'arcfour128', + + 'arcfour', // OPTIONAL the ARCFOUR stream cipher with a 128-bit key + + 'aes128-cbc', // RECOMMENDED AES with a 128-bit key + 'aes192-cbc', // OPTIONAL AES with a 192-bit key + 'aes256-cbc', // OPTIONAL AES in CBC mode, with a 256-bit key + + // from : + 'aes128-ctr', // RECOMMENDED AES (Rijndael) in SDCTR mode, with 128-bit key + 'aes192-ctr', // RECOMMENDED AES with 192-bit key + 'aes256-ctr', // RECOMMENDED AES with 256-bit key + '3des-ctr', // RECOMMENDED Three-key 3DES in SDCTR mode + + '3des-cbc', // REQUIRED three-key 3DES in CBC mode + 'none' // OPTIONAL no encryption; NOT RECOMMENDED + ); + + static $mac_algorithms = array( + 'hmac-sha1-96', // RECOMMENDED first 96 bits of HMAC-SHA1 (digest length = 12, key length = 20) + 'hmac-sha1', // REQUIRED HMAC-SHA1 (digest length = key length = 20) + 'hmac-md5-96', // OPTIONAL first 96 bits of HMAC-MD5 (digest length = 12, key length = 16) + 'hmac-md5', // OPTIONAL HMAC-MD5 (digest length = key length = 16) + 'none' // OPTIONAL no MAC; NOT RECOMMENDED + ); + + static $compression_algorithms = array( + 'none' // REQUIRED no compression + //'zlib' // OPTIONAL ZLIB (LZ77) compression + ); + + // some SSH servers have buggy implementations of some of the above algorithms + switch ($this->server_identifier) { + case 'SSH-2.0-SSHD': + $mac_algorithms = array_values(array_diff( + $mac_algorithms, + array('hmac-sha1-96', 'hmac-md5-96') + )); + } + + static $str_kex_algorithms, $str_server_host_key_algorithms, + $encryption_algorithms_server_to_client, $mac_algorithms_server_to_client, $compression_algorithms_server_to_client, + $encryption_algorithms_client_to_server, $mac_algorithms_client_to_server, $compression_algorithms_client_to_server; + + if (empty($str_kex_algorithms)) { + $str_kex_algorithms = implode(',', $kex_algorithms); + $str_server_host_key_algorithms = implode(',', $server_host_key_algorithms); + $encryption_algorithms_server_to_client = $encryption_algorithms_client_to_server = implode(',', $encryption_algorithms); + $mac_algorithms_server_to_client = $mac_algorithms_client_to_server = implode(',', $mac_algorithms); + $compression_algorithms_server_to_client = $compression_algorithms_client_to_server = implode(',', $compression_algorithms); + } + + $client_cookie = crypt_random_string(16); + + $response = $kexinit_payload_server; + $this->_string_shift($response, 1); // skip past the message number (it should be SSH_MSG_KEXINIT) + $server_cookie = $this->_string_shift($response, 16); + + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->kex_algorithms = explode(',', $this->_string_shift($response, $temp['length'])); + + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->server_host_key_algorithms = explode(',', $this->_string_shift($response, $temp['length'])); + + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->encryption_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length'])); + + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->encryption_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length'])); + + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->mac_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length'])); + + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->mac_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length'])); + + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->compression_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length'])); + + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->compression_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length'])); + + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->languages_client_to_server = explode(',', $this->_string_shift($response, $temp['length'])); + + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->languages_server_to_client = explode(',', $this->_string_shift($response, $temp['length'])); + + extract(unpack('Cfirst_kex_packet_follows', $this->_string_shift($response, 1))); + $first_kex_packet_follows = $first_kex_packet_follows != 0; + + // the sending of SSH2_MSG_KEXINIT could go in one of two places. this is the second place. + $kexinit_payload_client = pack('Ca*Na*Na*Na*Na*Na*Na*Na*Na*Na*Na*CN', + NET_SSH2_MSG_KEXINIT, $client_cookie, strlen($str_kex_algorithms), $str_kex_algorithms, + strlen($str_server_host_key_algorithms), $str_server_host_key_algorithms, strlen($encryption_algorithms_client_to_server), + $encryption_algorithms_client_to_server, strlen($encryption_algorithms_server_to_client), $encryption_algorithms_server_to_client, + strlen($mac_algorithms_client_to_server), $mac_algorithms_client_to_server, strlen($mac_algorithms_server_to_client), + $mac_algorithms_server_to_client, strlen($compression_algorithms_client_to_server), $compression_algorithms_client_to_server, + strlen($compression_algorithms_server_to_client), $compression_algorithms_server_to_client, 0, '', 0, '', + 0, 0 + ); + + if (!$this->_send_binary_packet($kexinit_payload_client)) { + return false; + } + // here ends the second place. + + // we need to decide upon the symmetric encryption algorithms before we do the diffie-hellman key exchange + for ($i = 0; $i < count($encryption_algorithms) && !in_array($encryption_algorithms[$i], $this->encryption_algorithms_server_to_client); $i++); + if ($i == count($encryption_algorithms)) { + $this->_handle_error('No compatible server to client encryption algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + // we don't initialize any crypto-objects, yet - we do that, later. for now, we need the lengths to make the + // diffie-hellman key exchange as fast as possible + $decrypt = $encryption_algorithms[$i]; + switch ($decrypt) { + case '3des-cbc': + case '3des-ctr': + $decryptKeyLength = 24; // eg. 192 / 8 + break; + case 'aes256-cbc': + case 'aes256-ctr': + $decryptKeyLength = 32; // eg. 256 / 8 + break; + case 'aes192-cbc': + case 'aes192-ctr': + $decryptKeyLength = 24; // eg. 192 / 8 + break; + case 'aes128-cbc': + case 'aes128-ctr': + $decryptKeyLength = 16; // eg. 128 / 8 + break; + case 'arcfour': + case 'arcfour128': + $decryptKeyLength = 16; // eg. 128 / 8 + break; + case 'arcfour256': + $decryptKeyLength = 32; // eg. 128 / 8 + break; + case 'none'; + $decryptKeyLength = 0; + } + + for ($i = 0; $i < count($encryption_algorithms) && !in_array($encryption_algorithms[$i], $this->encryption_algorithms_client_to_server); $i++); + if ($i == count($encryption_algorithms)) { + $this->_handle_error('No compatible client to server encryption algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $encrypt = $encryption_algorithms[$i]; + switch ($encrypt) { + case '3des-cbc': + case '3des-ctr': + $encryptKeyLength = 24; + break; + case 'aes256-cbc': + case 'aes256-ctr': + $encryptKeyLength = 32; + break; + case 'aes192-cbc': + case 'aes192-ctr': + $encryptKeyLength = 24; + break; + case 'aes128-cbc': + case 'aes128-ctr': + $encryptKeyLength = 16; + break; + case 'arcfour': + case 'arcfour128': + $encryptKeyLength = 16; + break; + case 'arcfour256': + $encryptKeyLength = 32; + break; + case 'none'; + $encryptKeyLength = 0; + } + + $keyLength = $decryptKeyLength > $encryptKeyLength ? $decryptKeyLength : $encryptKeyLength; + + // through diffie-hellman key exchange a symmetric key is obtained + for ($i = 0; $i < count($kex_algorithms) && !in_array($kex_algorithms[$i], $this->kex_algorithms); $i++); + if ($i == count($kex_algorithms)) { + $this->_handle_error('No compatible key exchange algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + switch ($kex_algorithms[$i]) { + // see http://tools.ietf.org/html/rfc2409#section-6.2 and + // http://tools.ietf.org/html/rfc2412, appendex E + case 'diffie-hellman-group1-sha1': + $p = pack('H256', 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' . + '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' . + '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' . + 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF'); + $keyLength = $keyLength < 160 ? $keyLength : 160; + $hash = 'sha1'; + break; + // see http://tools.ietf.org/html/rfc3526#section-3 + case 'diffie-hellman-group14-sha1': + $p = pack('H512', 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' . + '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' . + '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' . + 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' . + '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' . + '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' . + 'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' . + '3995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF'); + $keyLength = $keyLength < 160 ? $keyLength : 160; + $hash = 'sha1'; + } + + $p = new Math_BigInteger($p, 256); + //$q = $p->bitwise_rightShift(1); + + /* To increase the speed of the key exchange, both client and server may + reduce the size of their private exponents. It should be at least + twice as long as the key material that is generated from the shared + secret. For more details, see the paper by van Oorschot and Wiener + [VAN-OORSCHOT]. + + -- http://tools.ietf.org/html/rfc4419#section-6.2 */ + $q = new Math_BigInteger(1); + $q = $q->bitwise_leftShift(2 * $keyLength); + $q = $q->subtract(new Math_BigInteger(1)); + + $g = new Math_BigInteger(2); + $x = new Math_BigInteger(); + $x = $x->random(new Math_BigInteger(1), $q); + $e = $g->modPow($x, $p); + + $eBytes = $e->toBytes(true); + $data = pack('CNa*', NET_SSH2_MSG_KEXDH_INIT, strlen($eBytes), $eBytes); + + if (!$this->_send_binary_packet($data)) { + $this->_handle_error('Connection closed by server'); + return false; + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->_handle_error('Connection closed by server'); + return false; + } + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + if ($type != NET_SSH2_MSG_KEXDH_REPLY) { + $this->_handle_error('Expected SSH_MSG_KEXDH_REPLY'); + return false; + } + + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->server_public_host_key = $server_public_host_key = $this->_string_shift($response, $temp['length']); + + $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); + $public_key_format = $this->_string_shift($server_public_host_key, $temp['length']); + + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $fBytes = $this->_string_shift($response, $temp['length']); + $f = new Math_BigInteger($fBytes, -256); + + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->signature = $this->_string_shift($response, $temp['length']); + + $temp = unpack('Nlength', $this->_string_shift($this->signature, 4)); + $this->signature_format = $this->_string_shift($this->signature, $temp['length']); + + $key = $f->modPow($x, $p); + $keyBytes = $key->toBytes(true); + + $this->exchange_hash = pack('Na*Na*Na*Na*Na*Na*Na*Na*', + strlen($this->identifier), $this->identifier, strlen($this->server_identifier), $this->server_identifier, + strlen($kexinit_payload_client), $kexinit_payload_client, strlen($kexinit_payload_server), + $kexinit_payload_server, strlen($this->server_public_host_key), $this->server_public_host_key, strlen($eBytes), + $eBytes, strlen($fBytes), $fBytes, strlen($keyBytes), $keyBytes + ); + + $this->exchange_hash = pack('H*', $hash($this->exchange_hash)); + + if ($this->session_id === false) { + $this->session_id = $this->exchange_hash; + } + + for ($i = 0; $i < count($server_host_key_algorithms) && !in_array($server_host_key_algorithms[$i], $this->server_host_key_algorithms); $i++); + if ($i == count($server_host_key_algorithms)) { + $this->_handle_error('No compatible server host key algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + if ($public_key_format != $server_host_key_algorithms[$i] || $this->signature_format != $server_host_key_algorithms[$i]) { + $this->_handle_error('Sever Host Key Algorithm Mismatch'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $packet = pack('C', + NET_SSH2_MSG_NEWKEYS + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $response = $this->_get_binary_packet(); + + if ($response === false) { + $this->_handle_error('Connection closed by server'); + return false; + } + + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + if ($type != NET_SSH2_MSG_NEWKEYS) { + $this->_handle_error('Expected SSH_MSG_NEWKEYS'); + return false; + } + + switch ($encrypt) { + case '3des-cbc': + $this->encrypt = new Crypt_TripleDES(); + // $this->encrypt_block_size = 64 / 8 == the default + break; + case '3des-ctr': + $this->encrypt = new Crypt_TripleDES(CRYPT_DES_MODE_CTR); + // $this->encrypt_block_size = 64 / 8 == the default + break; + case 'aes256-cbc': + case 'aes192-cbc': + case 'aes128-cbc': + $this->encrypt = new Crypt_AES(); + $this->encrypt_block_size = 16; // eg. 128 / 8 + break; + case 'aes256-ctr': + case 'aes192-ctr': + case 'aes128-ctr': + $this->encrypt = new Crypt_AES(CRYPT_AES_MODE_CTR); + $this->encrypt_block_size = 16; // eg. 128 / 8 + break; + case 'arcfour': + case 'arcfour128': + case 'arcfour256': + $this->encrypt = new Crypt_RC4(); + break; + case 'none'; + //$this->encrypt = new Crypt_Null(); + } + + switch ($decrypt) { + case '3des-cbc': + $this->decrypt = new Crypt_TripleDES(); + break; + case '3des-ctr': + $this->decrypt = new Crypt_TripleDES(CRYPT_DES_MODE_CTR); + break; + case 'aes256-cbc': + case 'aes192-cbc': + case 'aes128-cbc': + $this->decrypt = new Crypt_AES(); + $this->decrypt_block_size = 16; + break; + case 'aes256-ctr': + case 'aes192-ctr': + case 'aes128-ctr': + $this->decrypt = new Crypt_AES(CRYPT_AES_MODE_CTR); + $this->decrypt_block_size = 16; + break; + case 'arcfour': + case 'arcfour128': + case 'arcfour256': + $this->decrypt = new Crypt_RC4(); + break; + case 'none'; + //$this->decrypt = new Crypt_Null(); + } + + $keyBytes = pack('Na*', strlen($keyBytes), $keyBytes); + + if ($this->encrypt) { + $this->encrypt->enableContinuousBuffer(); + $this->encrypt->disablePadding(); + + $iv = pack('H*', $hash($keyBytes . $this->exchange_hash . 'A' . $this->session_id)); + while ($this->encrypt_block_size > strlen($iv)) { + $iv.= pack('H*', $hash($keyBytes . $this->exchange_hash . $iv)); + } + $this->encrypt->setIV(substr($iv, 0, $this->encrypt_block_size)); + + $key = pack('H*', $hash($keyBytes . $this->exchange_hash . 'C' . $this->session_id)); + while ($encryptKeyLength > strlen($key)) { + $key.= pack('H*', $hash($keyBytes . $this->exchange_hash . $key)); + } + $this->encrypt->setKey(substr($key, 0, $encryptKeyLength)); + } + + if ($this->decrypt) { + $this->decrypt->enableContinuousBuffer(); + $this->decrypt->disablePadding(); + + $iv = pack('H*', $hash($keyBytes . $this->exchange_hash . 'B' . $this->session_id)); + while ($this->decrypt_block_size > strlen($iv)) { + $iv.= pack('H*', $hash($keyBytes . $this->exchange_hash . $iv)); + } + $this->decrypt->setIV(substr($iv, 0, $this->decrypt_block_size)); + + $key = pack('H*', $hash($keyBytes . $this->exchange_hash . 'D' . $this->session_id)); + while ($decryptKeyLength > strlen($key)) { + $key.= pack('H*', $hash($keyBytes . $this->exchange_hash . $key)); + } + $this->decrypt->setKey(substr($key, 0, $decryptKeyLength)); + } + + /* The "arcfour128" algorithm is the RC4 cipher, as described in + [SCHNEIER], using a 128-bit key. The first 1536 bytes of keystream + generated by the cipher MUST be discarded, and the first byte of the + first encrypted packet MUST be encrypted using the 1537th byte of + keystream. + + -- http://tools.ietf.org/html/rfc4345#section-4 */ + if ($encrypt == 'arcfour128' || $encrypt == 'arcfour256') { + $this->encrypt->encrypt(str_repeat("\0", 1536)); + } + if ($decrypt == 'arcfour128' || $decrypt == 'arcfour256') { + $this->decrypt->decrypt(str_repeat("\0", 1536)); + } + + for ($i = 0; $i < count($mac_algorithms) && !in_array($mac_algorithms[$i], $this->mac_algorithms_client_to_server); $i++); + if ($i == count($mac_algorithms)) { + $this->_handle_error('No compatible client to server message authentication algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $createKeyLength = 0; // ie. $mac_algorithms[$i] == 'none' + switch ($mac_algorithms[$i]) { + case 'hmac-sha1': + $this->hmac_create = new Crypt_Hash('sha1'); + $createKeyLength = 20; + break; + case 'hmac-sha1-96': + $this->hmac_create = new Crypt_Hash('sha1-96'); + $createKeyLength = 20; + break; + case 'hmac-md5': + $this->hmac_create = new Crypt_Hash('md5'); + $createKeyLength = 16; + break; + case 'hmac-md5-96': + $this->hmac_create = new Crypt_Hash('md5-96'); + $createKeyLength = 16; + } + + for ($i = 0; $i < count($mac_algorithms) && !in_array($mac_algorithms[$i], $this->mac_algorithms_server_to_client); $i++); + if ($i == count($mac_algorithms)) { + $this->_handle_error('No compatible server to client message authentication algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $checkKeyLength = 0; + $this->hmac_size = 0; + switch ($mac_algorithms[$i]) { + case 'hmac-sha1': + $this->hmac_check = new Crypt_Hash('sha1'); + $checkKeyLength = 20; + $this->hmac_size = 20; + break; + case 'hmac-sha1-96': + $this->hmac_check = new Crypt_Hash('sha1-96'); + $checkKeyLength = 20; + $this->hmac_size = 12; + break; + case 'hmac-md5': + $this->hmac_check = new Crypt_Hash('md5'); + $checkKeyLength = 16; + $this->hmac_size = 16; + break; + case 'hmac-md5-96': + $this->hmac_check = new Crypt_Hash('md5-96'); + $checkKeyLength = 16; + $this->hmac_size = 12; + } + + $key = pack('H*', $hash($keyBytes . $this->exchange_hash . 'E' . $this->session_id)); + while ($createKeyLength > strlen($key)) { + $key.= pack('H*', $hash($keyBytes . $this->exchange_hash . $key)); + } + $this->hmac_create->setKey(substr($key, 0, $createKeyLength)); + + $key = pack('H*', $hash($keyBytes . $this->exchange_hash . 'F' . $this->session_id)); + while ($checkKeyLength > strlen($key)) { + $key.= pack('H*', $hash($keyBytes . $this->exchange_hash . $key)); + } + $this->hmac_check->setKey(substr($key, 0, $checkKeyLength)); + + for ($i = 0; $i < count($compression_algorithms) && !in_array($compression_algorithms[$i], $this->compression_algorithms_server_to_client); $i++); + if ($i == count($compression_algorithms)) { + $this->_handle_error('No compatible server to client compression algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + $this->decompress = $compression_algorithms[$i] == 'zlib'; + + for ($i = 0; $i < count($compression_algorithms) && !in_array($compression_algorithms[$i], $this->compression_algorithms_client_to_server); $i++); + if ($i == count($compression_algorithms)) { + $this->_handle_error('No compatible client to server compression algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + $this->compress = $compression_algorithms[$i] == 'zlib'; + + return true; + } + + /** + * Login + * + * The $password parameter can be a plaintext password or a Crypt_RSA object. + * + * @param String $username + * @param optional String $password + * @return Boolean + * @access public + * @internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis} + * by sending dummy SSH_MSG_IGNORE messages. + */ + function login($username, $password = null) + { + if (!($this->bitmap & NET_SSH2_MASK_CONSTRUCTOR)) { + return false; + } + + $packet = pack('CNa*', + NET_SSH2_MSG_SERVICE_REQUEST, strlen('ssh-userauth'), 'ssh-userauth' + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->_handle_error('Connection closed by server'); + return false; + } + + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + if ($type != NET_SSH2_MSG_SERVICE_ACCEPT) { + $this->_handle_error('Expected SSH_MSG_SERVICE_ACCEPT'); + return false; + } + + // although PHP5's get_class() preserves the case, PHP4's does not + if (is_object($password) && strtolower(get_class($password)) == 'crypt_rsa') { + return $this->_privatekey_login($username, $password); + } + + if (!isset($password)) { + $packet = pack('CNa*Na*Na*', + NET_SSH2_MSG_USERAUTH_REQUEST, strlen($username), $username, strlen('ssh-connection'), 'ssh-connection', + strlen('none'), 'none' + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->_handle_error('Connection closed by server'); + return false; + } + + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + switch ($type) { + case NET_SSH2_MSG_USERAUTH_SUCCESS: + $this->bitmap |= NET_SSH2_MASK_LOGIN; + return true; + //case NET_SSH2_MSG_USERAUTH_FAILURE: + default: + return false; + } + } + + $packet = pack('CNa*Na*Na*CNa*', + NET_SSH2_MSG_USERAUTH_REQUEST, strlen($username), $username, strlen('ssh-connection'), 'ssh-connection', + strlen('password'), 'password', 0, strlen($password), $password + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + // remove the username and password from the last logged packet + if (defined('NET_SSH2_LOGGING') && NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX) { + $packet = pack('CNa*Na*Na*CNa*', + NET_SSH2_MSG_USERAUTH_REQUEST, strlen('username'), 'username', strlen('ssh-connection'), 'ssh-connection', + strlen('password'), 'password', 0, strlen('password'), 'password' + ); + $this->message_log[count($this->message_log) - 1] = $packet; + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->_handle_error('Connection closed by server'); + return false; + } + + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + switch ($type) { + case NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ: // in theory, the password can be changed + if (defined('NET_SSH2_LOGGING')) { + $this->message_number_log[count($this->message_number_log) - 1] = 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ'; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->errors[] = 'SSH_MSG_USERAUTH_PASSWD_CHANGEREQ: ' . utf8_decode($this->_string_shift($response, $length)); + return $this->_disconnect(NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER); + case NET_SSH2_MSG_USERAUTH_FAILURE: + // can we use keyboard-interactive authentication? if not then either the login is bad or the server employees + // multi-factor authentication + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $auth_methods = explode(',', $this->_string_shift($response, $length)); + if (in_array('keyboard-interactive', $auth_methods)) { + if ($this->_keyboard_interactive_login($username, $password)) { + $this->bitmap |= NET_SSH2_MASK_LOGIN; + return true; + } + return false; + } + return false; + case NET_SSH2_MSG_USERAUTH_SUCCESS: + $this->bitmap |= NET_SSH2_MASK_LOGIN; + return true; + } + + return false; + } + + /** + * Login via keyboard-interactive authentication + * + * See {@link http://tools.ietf.org/html/rfc4256 RFC4256} for details. This is not a full-featured keyboard-interactive authenticator. + * + * @param String $username + * @param String $password + * @return Boolean + * @access private + */ + function _keyboard_interactive_login($username, $password) + { + $packet = pack('CNa*Na*Na*Na*Na*', + NET_SSH2_MSG_USERAUTH_REQUEST, strlen($username), $username, strlen('ssh-connection'), 'ssh-connection', + strlen('keyboard-interactive'), 'keyboard-interactive', 0, '', 0, '' + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + return $this->_keyboard_interactive_process($password); + } + + /** + * Handle the keyboard-interactive requests / responses. + * + * @param String $responses... + * @return Boolean + * @access private + */ + function _keyboard_interactive_process() + { + $responses = func_get_args(); + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->_handle_error('Connection closed by server'); + return false; + } + + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + switch ($type) { + case NET_SSH2_MSG_USERAUTH_INFO_REQUEST: + // see http://tools.ietf.org/html/rfc4256#section-3.2 + if (defined('NET_SSH2_LOGGING')) { + $this->message_number_log[count($this->message_number_log) - 1] = str_replace( + 'UNKNOWN', + 'NET_SSH2_MSG_USERAUTH_INFO_REQUEST', + $this->message_number_log[count($this->message_number_log) - 1] + ); + } + + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->_string_shift($response, $length); // name; may be empty + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->_string_shift($response, $length); // instruction; may be empty + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->_string_shift($response, $length); // language tag; may be empty + extract(unpack('Nnum_prompts', $this->_string_shift($response, 4))); + /* + for ($i = 0; $i < $num_prompts; $i++) { + extract(unpack('Nlength', $this->_string_shift($response, 4))); + // prompt - ie. "Password: "; must not be empty + $this->_string_shift($response, $length); + $echo = $this->_string_shift($response) != chr(0); + } + */ + + /* + After obtaining the requested information from the user, the client + MUST respond with an SSH_MSG_USERAUTH_INFO_RESPONSE message. + */ + // see http://tools.ietf.org/html/rfc4256#section-3.4 + $packet = $logged = pack('CN', NET_SSH2_MSG_USERAUTH_INFO_RESPONSE, count($responses)); + for ($i = 0; $i < count($responses); $i++) { + $packet.= pack('Na*', strlen($responses[$i]), $responses[$i]); + $logged.= pack('Na*', strlen('dummy-answer'), 'dummy-answer'); + } + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + if (defined('NET_SSH2_LOGGING')) { + $this->message_number_log[count($this->message_number_log) - 1] = str_replace( + 'UNKNOWN', + 'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE', + $this->message_number_log[count($this->message_number_log) - 1] + ); + $this->message_log[count($this->message_log) - 1] = $logged; + } + + /* + After receiving the response, the server MUST send either an + SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, or another + SSH_MSG_USERAUTH_INFO_REQUEST message. + */ + // maybe phpseclib should force close the connection after x request / responses? unless something like that is done + // there could be an infinite loop of request / responses. + return $this->_keyboard_interactive_process(); + case NET_SSH2_MSG_USERAUTH_SUCCESS: + return true; + case NET_SSH2_MSG_USERAUTH_FAILURE: + return false; + } + + return false; + } + + /** + * Login with an RSA private key + * + * @param String $username + * @param Crypt_RSA $password + * @return Boolean + * @access private + * @internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis} + * by sending dummy SSH_MSG_IGNORE messages. + */ + function _privatekey_login($username, $privatekey) + { + // see http://tools.ietf.org/html/rfc4253#page-15 + $publickey = $privatekey->getPublicKey(CRYPT_RSA_PUBLIC_FORMAT_RAW); + if ($publickey === false) { + return false; + } + + $publickey = array( + 'e' => $publickey['e']->toBytes(true), + 'n' => $publickey['n']->toBytes(true) + ); + $publickey = pack('Na*Na*Na*', + strlen('ssh-rsa'), 'ssh-rsa', strlen($publickey['e']), $publickey['e'], strlen($publickey['n']), $publickey['n'] + ); + + $part1 = pack('CNa*Na*Na*', + NET_SSH2_MSG_USERAUTH_REQUEST, strlen($username), $username, strlen('ssh-connection'), 'ssh-connection', + strlen('publickey'), 'publickey' + ); + $part2 = pack('Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($publickey), $publickey); + + $packet = $part1 . chr(0) . $part2; + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->_handle_error('Connection closed by server'); + return false; + } + + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + switch ($type) { + case NET_SSH2_MSG_USERAUTH_FAILURE: + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->errors[] = 'SSH_MSG_USERAUTH_FAILURE: ' . $this->_string_shift($response, $length); + return $this->_disconnect(NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER); + case NET_SSH2_MSG_USERAUTH_PK_OK: + // we'll just take it on faith that the public key blob and the public key algorithm name are as + // they should be + if (defined('NET_SSH2_LOGGING')) { + $this->message_number_log[count($this->message_number_log) - 1] = str_replace( + 'UNKNOWN', + 'NET_SSH2_MSG_USERAUTH_PK_OK', + $this->message_number_log[count($this->message_number_log) - 1] + ); + } + } + + $packet = $part1 . chr(1) . $part2; + $privatekey->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1); + $signature = $privatekey->sign(pack('Na*a*', strlen($this->session_id), $this->session_id, $packet)); + $signature = pack('Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($signature), $signature); + $packet.= pack('Na*', strlen($signature), $signature); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->_handle_error('Connection closed by server'); + return false; + } + + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + switch ($type) { + case NET_SSH2_MSG_USERAUTH_FAILURE: + // either the login is bad or the server employs multi-factor authentication + return false; + case NET_SSH2_MSG_USERAUTH_SUCCESS: + $this->bitmap |= NET_SSH2_MASK_LOGIN; + return true; + } + + return false; + } + + /** + * Set Timeout + * + * $ssh->exec('ping 127.0.0.1'); on a Linux host will never return and will run indefinitely. setTimeout() makes it so it'll timeout. + * Setting $timeout to false or 0 will mean there is no timeout. + * + * @param Mixed $timeout + */ + function setTimeout($timeout) + { + $this->timeout = $this->curTimeout = $timeout; + } + + /** + * Execute Command + * + * If $block is set to false then Net_SSH2::_get_channel_packet(NET_SSH2_CHANNEL_EXEC) will need to be called manually. + * In all likelihood, this is not a feature you want to be taking advantage of. + * + * @param String $command + * @param optional Boolean $block + * @return String + * @access public + */ + function exec($command, $block = true) + { + $this->curTimeout = $this->timeout; + + if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { + return false; + } + + // RFC4254 defines the (client) window size as "bytes the other party can send before it must wait for the window to + // be adjusted". 0x7FFFFFFF is, at 4GB, the max size. technically, it should probably be decremented, but, + // honestly, if you're transfering more than 4GB, you probably shouldn't be using phpseclib, anyway. + // see http://tools.ietf.org/html/rfc4254#section-5.2 for more info + $this->window_size_client_to_server[NET_SSH2_CHANNEL_EXEC] = 0x7FFFFFFF; + // 0x8000 is the maximum max packet size, per http://tools.ietf.org/html/rfc4253#section-6.1, although since PuTTy + // uses 0x4000, that's what will be used here, as well. + $packet_size = 0x4000; + + $packet = pack('CNa*N3', + NET_SSH2_MSG_CHANNEL_OPEN, strlen('session'), 'session', NET_SSH2_CHANNEL_EXEC, $this->window_size_client_to_server[NET_SSH2_CHANNEL_EXEC], $packet_size); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $this->channel_status[NET_SSH2_CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_OPEN; + + $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_EXEC); + if ($response === false) { + return false; + } + + // sending a pty-req SSH_MSG_CHANNEL_REQUEST message is unnecessary and, in fact, in most cases, slows things + // down. the one place where it might be desirable is if you're doing something like Net_SSH2::exec('ping localhost &'). + // with a pty-req SSH_MSG_CHANNEL_REQUEST, exec() will return immediately and the ping process will then + // then immediately terminate. without such a request exec() will loop indefinitely. the ping process won't end but + // neither will your script. + + // although, in theory, the size of SSH_MSG_CHANNEL_REQUEST could exceed the maximum packet size established by + // SSH_MSG_CHANNEL_OPEN_CONFIRMATION, RFC4254#section-5.1 states that the "maximum packet size" refers to the + // "maximum size of an individual data packet". ie. SSH_MSG_CHANNEL_DATA. RFC4254#section-5.2 corroborates. + $packet = pack('CNNa*CNa*', + NET_SSH2_MSG_CHANNEL_REQUEST, $this->server_channels[NET_SSH2_CHANNEL_EXEC], strlen('exec'), 'exec', 1, strlen($command), $command); + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $this->channel_status[NET_SSH2_CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_REQUEST; + + $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_EXEC); + if ($response === false) { + return false; + } + + $this->channel_status[NET_SSH2_CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_DATA; + + if (!$block) { + return true; + } + + $output = ''; + while (true) { + $temp = $this->_get_channel_packet(NET_SSH2_CHANNEL_EXEC); + switch (true) { + case $temp === true: + return $output; + case $temp === false: + return false; + default: + $output.= $temp; + } + } + } + + /** + * Creates an interactive shell + * + * @see Net_SSH2::read() + * @see Net_SSH2::write() + * @return Boolean + * @access private + */ + function _initShell() + { + $this->window_size_client_to_server[NET_SSH2_CHANNEL_SHELL] = 0x7FFFFFFF; + $packet_size = 0x4000; + + $packet = pack('CNa*N3', + NET_SSH2_MSG_CHANNEL_OPEN, strlen('session'), 'session', NET_SSH2_CHANNEL_SHELL, $this->window_size_client_to_server[NET_SSH2_CHANNEL_SHELL], $packet_size); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $this->channel_status[NET_SSH2_CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_OPEN; + + $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_SHELL); + if ($response === false) { + return false; + } + + $terminal_modes = pack('C', NET_SSH2_TTY_OP_END); + $packet = pack('CNNa*CNa*N5a*', + NET_SSH2_MSG_CHANNEL_REQUEST, $this->server_channels[NET_SSH2_CHANNEL_SHELL], strlen('pty-req'), 'pty-req', 1, strlen('vt100'), 'vt100', + 80, 24, 0, 0, strlen($terminal_modes), $terminal_modes); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->_handle_error('Connection closed by server'); + return false; + } + + list(, $type) = unpack('C', $this->_string_shift($response, 1)); + + switch ($type) { + case NET_SSH2_MSG_CHANNEL_SUCCESS: + break; + case NET_SSH2_MSG_CHANNEL_FAILURE: + default: + $this->_handle_error('Unable to request pseudo-terminal'); + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + + $packet = pack('CNNa*C', + NET_SSH2_MSG_CHANNEL_REQUEST, $this->server_channels[NET_SSH2_CHANNEL_SHELL], strlen('shell'), 'shell', 1); + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $this->channel_status[NET_SSH2_CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_REQUEST; + + $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_SHELL); + if ($response === false) { + return false; + } + + $this->channel_status[NET_SSH2_CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_DATA; + + $this->bitmap |= NET_SSH2_MASK_SHELL; + + return true; + } + + /** + * Returns the output of an interactive shell + * + * Returns when there's a match for $expect, which can take the form of a string literal or, + * if $mode == NET_SSH2_READ_REGEX, a regular expression. + * + * @see Net_SSH2::read() + * @param String $expect + * @param Integer $mode + * @return String + * @access public + */ + function read($expect = '', $mode = NET_SSH2_READ_SIMPLE) + { + $this->curTimeout = $this->timeout; + + if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { + $this->_handle_error('Operation disallowed prior to login()'); + return false; + } + + if (!($this->bitmap & NET_SSH2_MASK_SHELL) && !$this->_initShell()) { + $this->_handle_error('Unable to initiate an interactive shell session'); + return false; + } + + $match = $expect; + while (true) { + if ($mode == NET_SSH2_READ_REGEX) { + preg_match($expect, $this->interactiveBuffer, $matches); + $match = isset($matches[0]) ? $matches[0] : array(); + } + $pos = !empty($match) ? strpos($this->interactiveBuffer, $match) : false; + if ($pos !== false) { + return $this->_string_shift($this->interactiveBuffer, $pos + strlen($match)); + } + $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_SHELL); + if (is_bool($response)) { + return $response ? $this->_string_shift($this->interactiveBuffer, strlen($this->interactiveBuffer)) : false; + } + + $this->interactiveBuffer.= $response; + } + } + + /** + * Inputs a command into an interactive shell. + * + * @see Net_SSH1::interactiveWrite() + * @param String $cmd + * @return Boolean + * @access public + */ + function write($cmd) + { + if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { + $this->_handle_error('Operation disallowed prior to login()'); + return false; + } + + if (!($this->bitmap & NET_SSH2_MASK_SHELL) && !$this->_initShell()) { + $this->_handle_error('Unable to initiate an interactive shell session'); + return false; + } + + return $this->_send_channel_packet(NET_SSH2_CHANNEL_SHELL, $cmd); + } + + /** + * Disconnect + * + * @access public + */ + function disconnect() + { + $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + if (isset($this->realtime_log_file) && is_resource($this->realtime_log_file)) { + fclose($this->realtime_log_file); + } + } + + /** + * Destructor. + * + * Will be called, automatically, if you're supporting just PHP5. If you're supporting PHP4, you'll need to call + * disconnect(). + * + * @access public + */ + function __destruct() + { + $this->disconnect(); + } + + /** + * Gets Binary Packets + * + * See '6. Binary Packet Protocol' of rfc4253 for more info. + * + * @see Net_SSH2::_send_binary_packet() + * @return String + * @access private + */ + function _get_binary_packet() + { + if (!is_resource($this->fsock) || feof($this->fsock)) { + $this->_handle_error('Connection closed prematurely'); + $this->bitmask = 0; + return false; + } + + $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 + $raw = fread($this->fsock, $this->decrypt_block_size); + $stop = strtok(microtime(), ' ') + strtok(''); + + if (empty($raw)) { + return ''; + } + + if ($this->decrypt !== false) { + $raw = $this->decrypt->decrypt($raw); + } + if ($raw === false) { + $this->_handle_error('Unable to decrypt content'); + return false; + } + + extract(unpack('Npacket_length/Cpadding_length', $this->_string_shift($raw, 5))); + + $remaining_length = $packet_length + 4 - $this->decrypt_block_size; + $buffer = ''; + while ($remaining_length > 0) { + $temp = fread($this->fsock, $remaining_length); + $buffer.= $temp; + $remaining_length-= strlen($temp); + } + if (!empty($buffer)) { + $raw.= $this->decrypt !== false ? $this->decrypt->decrypt($buffer) : $buffer; + $buffer = $temp = ''; + } + + $payload = $this->_string_shift($raw, $packet_length - $padding_length - 1); + $padding = $this->_string_shift($raw, $padding_length); // should leave $raw empty + + if ($this->hmac_check !== false) { + $hmac = fread($this->fsock, $this->hmac_size); + if ($hmac != $this->hmac_check->hash(pack('NNCa*', $this->get_seq_no, $packet_length, $padding_length, $payload . $padding))) { + $this->_handle_error('Invalid HMAC'); + return false; + } + } + + //if ($this->decompress) { + // $payload = gzinflate(substr($payload, 2)); + //} + + $this->get_seq_no++; + + if (defined('NET_SSH2_LOGGING')) { + $current = strtok(microtime(), ' ') + strtok(''); + $message_number = isset($this->message_numbers[ord($payload[0])]) ? $this->message_numbers[ord($payload[0])] : 'UNKNOWN (' . ord($payload[0]) . ')'; + $message_number = '<- ' . $message_number . + ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($stop - $start, 4) . 's)'; + $this->_append_log($message_number, $payload); + $this->last_packet = $current; + } + + return $this->_filter($payload); + } + + /** + * Filter Binary Packets + * + * Because some binary packets need to be ignored... + * + * @see Net_SSH2::_get_binary_packet() + * @return String + * @access private + */ + function _filter($payload) + { + switch (ord($payload[0])) { + case NET_SSH2_MSG_DISCONNECT: + $this->_string_shift($payload, 1); + extract(unpack('Nreason_code/Nlength', $this->_string_shift($payload, 8))); + $this->errors[] = 'SSH_MSG_DISCONNECT: ' . $this->disconnect_reasons[$reason_code] . "\r\n" . utf8_decode($this->_string_shift($payload, $length)); + $this->bitmask = 0; + return false; + case NET_SSH2_MSG_IGNORE: + $payload = $this->_get_binary_packet(); + break; + case NET_SSH2_MSG_DEBUG: + $this->_string_shift($payload, 2); + extract(unpack('Nlength', $this->_string_shift($payload, 4))); + $this->errors[] = 'SSH_MSG_DEBUG: ' . utf8_decode($this->_string_shift($payload, $length)); + $payload = $this->_get_binary_packet(); + break; + case NET_SSH2_MSG_UNIMPLEMENTED: + return false; + case NET_SSH2_MSG_KEXINIT: + if ($this->session_id !== false) { + if (!$this->_key_exchange($payload)) { + $this->bitmask = 0; + return false; + } + $payload = $this->_get_binary_packet(); + } + } + + // see http://tools.ietf.org/html/rfc4252#section-5.4; only called when the encryption has been activated and when we haven't already logged in + if (($this->bitmap & NET_SSH2_MASK_CONSTRUCTOR) && !($this->bitmap & NET_SSH2_MASK_LOGIN) && ord($payload[0]) == NET_SSH2_MSG_USERAUTH_BANNER) { + $this->_string_shift($payload, 1); + extract(unpack('Nlength', $this->_string_shift($payload, 4))); + $this->errors[] = 'SSH_MSG_USERAUTH_BANNER: ' . utf8_decode($this->_string_shift($payload, $length)); + $payload = $this->_get_binary_packet(); + } + + // only called when we've already logged in + if (($this->bitmap & NET_SSH2_MASK_CONSTRUCTOR) && ($this->bitmap & NET_SSH2_MASK_LOGIN)) { + switch (ord($payload[0])) { + case NET_SSH2_MSG_GLOBAL_REQUEST: // see http://tools.ietf.org/html/rfc4254#section-4 + $this->_string_shift($payload, 1); + extract(unpack('Nlength', $this->_string_shift($payload))); + $this->errors[] = 'SSH_MSG_GLOBAL_REQUEST: ' . utf8_decode($this->_string_shift($payload, $length)); + + if (!$this->_send_binary_packet(pack('C', NET_SSH2_MSG_REQUEST_FAILURE))) { + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + + $payload = $this->_get_binary_packet(); + break; + case NET_SSH2_MSG_CHANNEL_OPEN: // see http://tools.ietf.org/html/rfc4254#section-5.1 + $this->_string_shift($payload, 1); + extract(unpack('N', $this->_string_shift($payload, 4))); + $this->errors[] = 'SSH_MSG_CHANNEL_OPEN: ' . utf8_decode($this->_string_shift($payload, $length)); + + $this->_string_shift($payload, 4); // skip over client channel + extract(unpack('Nserver_channel', $this->_string_shift($payload, 4))); + + $packet = pack('CN3a*Na*', + NET_SSH2_MSG_REQUEST_FAILURE, $server_channel, NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED, 0, '', 0, ''); + + if (!$this->_send_binary_packet($packet)) { + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + + $payload = $this->_get_binary_packet(); + break; + case NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST: + $payload = $this->_get_binary_packet(); + } + } + + return $payload; + } + + /** + * Enable Quiet Mode + * + * Suppress stderr from output + * + * @access public + */ + function enableQuietMode() + { + $this->quiet_mode = true; + } + + /** + * Disable Quiet Mode + * + * Show stderr in output + * + * @access public + */ + function disableQuietMode() + { + $this->quiet_mode = false; + } + + /** + * Gets channel data + * + * Returns the data as a string if it's available and false if not. + * + * @param $client_channel + * @return Mixed + * @access private + */ + function _get_channel_packet($client_channel, $skip_extended = false) + { + if (!empty($this->channel_buffers[$client_channel])) { + return array_shift($this->channel_buffers[$client_channel]); + } + + while (true) { + if ($this->curTimeout) { + $read = array($this->fsock); + $write = $except = NULL; + + $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 + $sec = floor($this->curTimeout); + $usec = 1000000 * ($this->curTimeout - $sec); + // on windows this returns a "Warning: Invalid CRT parameters detected" error + if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) { + $this->_close_channel($client_channel); + return true; + } + $elapsed = strtok(microtime(), ' ') + strtok('') - $start; + $this->curTimeout-= $elapsed; + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->_handle_error('Connection closed by server'); + return false; + } + + if (empty($response)) { + return ''; + } + + extract(unpack('Ctype/Nchannel', $this->_string_shift($response, 5))); + + switch ($this->channel_status[$channel]) { + case NET_SSH2_MSG_CHANNEL_OPEN: + switch ($type) { + case NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION: + extract(unpack('Nserver_channel', $this->_string_shift($response, 4))); + $this->server_channels[$channel] = $server_channel; + $this->_string_shift($response, 4); // skip over (server) window size + $temp = unpack('Npacket_size_client_to_server', $this->_string_shift($response, 4)); + $this->packet_size_client_to_server[$channel] = $temp['packet_size_client_to_server']; + return $client_channel == $channel ? true : $this->_get_channel_packet($client_channel, $skip_extended); + //case NET_SSH2_MSG_CHANNEL_OPEN_FAILURE: + default: + $this->_handle_error('Unable to open channel'); + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + break; + case NET_SSH2_MSG_CHANNEL_REQUEST: + switch ($type) { + case NET_SSH2_MSG_CHANNEL_SUCCESS: + return true; + //case NET_SSH2_MSG_CHANNEL_FAILURE: + default: + $this->_handle_error('Unable to request pseudo-terminal'); + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + case NET_SSH2_MSG_CHANNEL_CLOSE: + return $type == NET_SSH2_MSG_CHANNEL_CLOSE ? true : $this->_get_channel_packet($client_channel, $skip_extended); + } + + switch ($type) { + case NET_SSH2_MSG_CHANNEL_DATA: + /* + if ($client_channel == NET_SSH2_CHANNEL_EXEC) { + // SCP requires null packets, such as this, be sent. further, in the case of the ssh.com SSH server + // this actually seems to make things twice as fast. more to the point, the message right after + // SSH_MSG_CHANNEL_DATA (usually SSH_MSG_IGNORE) won't block for as long as it would have otherwise. + // in OpenSSH it slows things down but only by a couple thousandths of a second. + $this->_send_channel_packet($client_channel, chr(0)); + } + */ + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $data = $this->_string_shift($response, $length); + if ($client_channel == $channel) { + return $data; + } + if (!isset($this->channel_buffers[$client_channel])) { + $this->channel_buffers[$client_channel] = array(); + } + $this->channel_buffers[$client_channel][] = $data; + break; + case NET_SSH2_MSG_CHANNEL_EXTENDED_DATA: + if ($skip_extended || $this->quiet_mode) { + break; + } + /* + if ($client_channel == NET_SSH2_CHANNEL_EXEC) { + $this->_send_channel_packet($client_channel, chr(0)); + } + */ + // currently, there's only one possible value for $data_type_code: NET_SSH2_EXTENDED_DATA_STDERR + extract(unpack('Ndata_type_code/Nlength', $this->_string_shift($response, 8))); + $data = $this->_string_shift($response, $length); + if ($client_channel == $channel) { + return $data; + } + if (!isset($this->channel_buffers[$client_channel])) { + $this->channel_buffers[$client_channel] = array(); + } + $this->channel_buffers[$client_channel][] = $data; + break; + case NET_SSH2_MSG_CHANNEL_REQUEST: + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $value = $this->_string_shift($response, $length); + switch ($value) { + case 'exit-signal': + $this->_string_shift($response, 1); + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->errors[] = 'SSH_MSG_CHANNEL_REQUEST (exit-signal): ' . $this->_string_shift($response, $length); + $this->_string_shift($response, 1); + extract(unpack('Nlength', $this->_string_shift($response, 4))); + if ($length) { + $this->errors[count($this->errors)].= "\r\n" . $this->_string_shift($response, $length); + } + case 'exit-status': + // "The channel needs to be closed with SSH_MSG_CHANNEL_CLOSE after this message." + // -- http://tools.ietf.org/html/rfc4254#section-6.10 + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel])); + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel])); + + $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_EOF; + default: + // "Some systems may not implement signals, in which case they SHOULD ignore this message." + // -- http://tools.ietf.org/html/rfc4254#section-6.9 + break; + } + break; + case NET_SSH2_MSG_CHANNEL_CLOSE: + $this->curTimeout = 0; + + if ($this->bitmap & NET_SSH2_MASK_SHELL) { + $this->bitmap&= ~NET_SSH2_MASK_SHELL; + } + if ($this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_EOF) { + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel])); + } + + $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_CLOSE; + return true; + case NET_SSH2_MSG_CHANNEL_EOF: + break; + default: + $this->_handle_error('Error reading channel data'); + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + } + } + + /** + * Sends Binary Packets + * + * See '6. Binary Packet Protocol' of rfc4253 for more info. + * + * @param String $data + * @see Net_SSH2::_get_binary_packet() + * @return Boolean + * @access private + */ + function _send_binary_packet($data) + { + if (!is_resource($this->fsock) || feof($this->fsock)) { + $this->_handle_error('Connection closed prematurely'); + $this->bitmask = 0; + return false; + } + + //if ($this->compress) { + // // the -4 removes the checksum: + // // http://php.net/function.gzcompress#57710 + // $data = substr(gzcompress($data), 0, -4); + //} + + // 4 (packet length) + 1 (padding length) + 4 (minimal padding amount) == 9 + $packet_length = strlen($data) + 9; + // round up to the nearest $this->encrypt_block_size + $packet_length+= (($this->encrypt_block_size - 1) * $packet_length) % $this->encrypt_block_size; + // subtracting strlen($data) is obvious - subtracting 5 is necessary because of packet_length and padding_length + $padding_length = $packet_length - strlen($data) - 5; + $padding = crypt_random_string($padding_length); + + // we subtract 4 from packet_length because the packet_length field isn't supposed to include itself + $packet = pack('NCa*', $packet_length - 4, $padding_length, $data . $padding); + + $hmac = $this->hmac_create !== false ? $this->hmac_create->hash(pack('Na*', $this->send_seq_no, $packet)) : ''; + $this->send_seq_no++; + + if ($this->encrypt !== false) { + $packet = $this->encrypt->encrypt($packet); + } + + $packet.= $hmac; + + $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 + $result = strlen($packet) == fputs($this->fsock, $packet); + $stop = strtok(microtime(), ' ') + strtok(''); + + if (defined('NET_SSH2_LOGGING')) { + $current = strtok(microtime(), ' ') + strtok(''); + $message_number = isset($this->message_numbers[ord($data[0])]) ? $this->message_numbers[ord($data[0])] : 'UNKNOWN (' . ord($data[0]) . ')'; + $message_number = '-> ' . $message_number . + ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($stop - $start, 4) . 's)'; + $this->_append_log($message_number, $data); + $this->last_packet = $current; + } + + return $result; + } + + /** + * Logs data packets + * + * Makes sure that only the last 1MB worth of packets will be logged + * + * @param String $data + * @access private + */ + function _append_log($message_number, $message) + { + switch (NET_SSH2_LOGGING) { + // useful for benchmarks + case NET_SSH2_LOG_SIMPLE: + $this->message_number_log[] = $message_number; + break; + // the most useful log for SSH2 + case NET_SSH2_LOG_COMPLEX: + $this->message_number_log[] = $message_number; + $this->_string_shift($message); + $this->log_size+= strlen($message); + $this->message_log[] = $message; + while ($this->log_size > NET_SSH2_LOG_MAX_SIZE) { + $this->log_size-= strlen(array_shift($this->message_log)); + array_shift($this->message_number_log); + } + break; + // dump the output out realtime; packets may be interspersed with non packets, + // passwords won't be filtered out and select other packets may not be correctly + // identified + case NET_SSH2_LOG_REALTIME: + echo "
\r\n" . $this->_format_log(array($message), array($message_number)) . "\r\n
\r\n"; + @flush(); + @ob_flush(); + break; + // basically the same thing as NET_SSH2_LOG_REALTIME with the caveat that NET_SSH2_LOG_REALTIME_FILE + // needs to be defined and that the resultant log file will be capped out at NET_SSH2_LOG_MAX_SIZE. + // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily + // at the beginning of the file + case NET_SSH2_LOG_REALTIME_FILE: + if (!isset($this->realtime_log_file)) { + // PHP doesn't seem to like using constants in fopen() + $filename = NET_SSH2_LOG_REALTIME_FILE; + $fp = fopen($filename, 'w'); + $this->realtime_log_file = $fp; + } + if (!is_resource($this->realtime_log_file)) { + break; + } + $entry = $this->_format_log(array($message), array($message_number)); + if ($this->realtime_log_wrap) { + $temp = "<<< START >>>\r\n"; + $entry.= $temp; + fseek($this->realtime_log_file, ftell($this->realtime_log_file) - strlen($temp)); + } + $this->realtime_log_size+= strlen($entry); + if ($this->realtime_log_size > NET_SSH2_LOG_MAX_SIZE) { + fseek($this->realtime_log_file, 0); + $this->realtime_log_size = strlen($entry); + $this->realtime_log_wrap = true; + } + fputs($this->realtime_log_file, $entry); + } + } + + /** + * Sends channel data + * + * Spans multiple SSH_MSG_CHANNEL_DATAs if appropriate + * + * @param Integer $client_channel + * @param String $data + * @return Boolean + * @access private + */ + function _send_channel_packet($client_channel, $data) + { + while (strlen($data) > $this->packet_size_client_to_server[$client_channel]) { + // resize the window, if appropriate + $this->window_size_client_to_server[$client_channel]-= $this->packet_size_client_to_server[$client_channel]; + if ($this->window_size_client_to_server[$client_channel] < 0) { + $packet = pack('CNN', NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST, $this->server_channels[$client_channel], $this->window_size); + if (!$this->_send_binary_packet($packet)) { + return false; + } + $this->window_size_client_to_server[$client_channel]+= $this->window_size; + } + + $packet = pack('CN2a*', + NET_SSH2_MSG_CHANNEL_DATA, + $this->server_channels[$client_channel], + $this->packet_size_client_to_server[$client_channel], + $this->_string_shift($data, $this->packet_size_client_to_server[$client_channel]) + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + } + + // resize the window, if appropriate + $this->window_size_client_to_server[$client_channel]-= strlen($data); + if ($this->window_size_client_to_server[$client_channel] < 0) { + $packet = pack('CNN', NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST, $this->server_channels[$client_channel], $this->window_size); + if (!$this->_send_binary_packet($packet)) { + return false; + } + $this->window_size_client_to_server[$client_channel]+= $this->window_size; + } + + return $this->_send_binary_packet(pack('CN2a*', + NET_SSH2_MSG_CHANNEL_DATA, + $this->server_channels[$client_channel], + strlen($data), + $data)); + } + + /** + * Closes and flushes a channel + * + * Net_SSH2 doesn't properly close most channels. For exec() channels are normally closed by the server + * and for SFTP channels are presumably closed when the client disconnects. This functions is intended + * for SCP more than anything. + * + * @param Integer $client_channel + * @return Boolean + * @access private + */ + function _close_channel($client_channel) + { + // see http://tools.ietf.org/html/rfc4254#section-5.3 + + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel])); + + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$client_channel])); + + $this->channel_status[$client_channel] = NET_SSH2_MSG_CHANNEL_CLOSE; + + $this->curTimeout = 0; + + while (!is_bool($this->_get_channel_packet($client_channel))); + + if ($this->bitmap & NET_SSH2_MASK_SHELL) { + $this->bitmap&= ~NET_SSH2_MASK_SHELL; + } + } + + /** + * Disconnect + * + * @param Integer $reason + * @return Boolean + * @access private + */ + function _disconnect($reason) + { + if ($this->bitmap) { + $data = pack('CNNa*Na*', NET_SSH2_MSG_DISCONNECT, $reason, 0, '', 0, ''); + $this->_send_binary_packet($data); + $this->bitmap = 0; + fclose($this->fsock); + return false; + } + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param String $string + * @param optional Integer $index + * @return String + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } + + /** + * Define Array + * + * Takes any number of arrays whose indices are integers and whose values are strings and defines a bunch of + * named constants from it, using the value as the name of the constant and the index as the value of the constant. + * If any of the constants that would be defined already exists, none of the constants will be defined. + * + * @param Array $array + * @access private + */ + function _define_array() + { + $args = func_get_args(); + foreach ($args as $arg) { + foreach ($arg as $key=>$value) { + if (!defined($value)) { + define($value, $key); + } else { + break 2; + } + } + } + } + + /** + * Returns a log of the packets that have been sent and received. + * + * Returns a string if NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX, an array if NET_SSH2_LOGGING == NET_SSH2_LOG_SIMPLE and false if !defined('NET_SSH2_LOGGING') + * + * @access public + * @return String or Array + */ + function getLog() + { + if (!defined('NET_SSH2_LOGGING')) { + return false; + } + + switch (NET_SSH2_LOGGING) { + case NET_SSH2_LOG_SIMPLE: + return $this->message_number_log; + break; + case NET_SSH2_LOG_COMPLEX: + return $this->_format_log($this->message_log, $this->message_number_log); + break; + default: + return false; + } + } + + /** + * Formats a log for printing + * + * @param Array $message_log + * @param Array $message_number_log + * @access private + * @return String + */ + function _format_log($message_log, $message_number_log) + { + static $boundary = ':', $long_width = 65, $short_width = 16; + + $output = ''; + for ($i = 0; $i < count($message_log); $i++) { + $output.= $message_number_log[$i] . "\r\n"; + $current_log = $message_log[$i]; + $j = 0; + do { + if (!empty($current_log)) { + $output.= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0 '; + } + $fragment = $this->_string_shift($current_log, $short_width); + $hex = substr( + preg_replace( + '#(.)#es', + '"' . $boundary . '" . str_pad(dechex(ord(substr("\\1", -1))), 2, "0", STR_PAD_LEFT)', + $fragment), + strlen($boundary) + ); + // replace non ASCII printable characters with dots + // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters + // also replace < with a . since < messes up the output on web browsers + $raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment); + $output.= str_pad($hex, $long_width - $short_width, ' ') . $raw . "\r\n"; + $j++; + } while (!empty($current_log)); + $output.= "\r\n"; + } + + return $output; + } + + /** + * Returns all errors + * + * @return String + * @access public + */ + function getErrors() + { + return $this->errors; + } + + /** + * Returns the last error + * + * @return String + * @access public + */ + function getLastError() + { + return $this->errors[count($this->errors) - 1]; + } + + /** + * Return the server identification. + * + * @return String + * @access public + */ + function getServerIdentification() + { + return $this->server_identifier; + } + + /** + * Return a list of the key exchange algorithms the server supports. + * + * @return Array + * @access public + */ + function getKexAlgorithms() + { + return $this->kex_algorithms; + } + + /** + * Return a list of the host key (public key) algorithms the server supports. + * + * @return Array + * @access public + */ + function getServerHostKeyAlgorithms() + { + return $this->server_host_key_algorithms; + } + + /** + * Return a list of the (symmetric key) encryption algorithms the server supports, when receiving stuff from the client. + * + * @return Array + * @access public + */ + function getEncryptionAlgorithmsClient2Server() + { + return $this->encryption_algorithms_client_to_server; + } + + /** + * Return a list of the (symmetric key) encryption algorithms the server supports, when sending stuff to the client. + * + * @return Array + * @access public + */ + function getEncryptionAlgorithmsServer2Client() + { + return $this->encryption_algorithms_server_to_client; + } + + /** + * Return a list of the MAC algorithms the server supports, when receiving stuff from the client. + * + * @return Array + * @access public + */ + function getMACAlgorithmsClient2Server() + { + return $this->mac_algorithms_client_to_server; + } + + /** + * Return a list of the MAC algorithms the server supports, when sending stuff to the client. + * + * @return Array + * @access public + */ + function getMACAlgorithmsServer2Client() + { + return $this->mac_algorithms_server_to_client; + } + + /** + * Return a list of the compression algorithms the server supports, when receiving stuff from the client. + * + * @return Array + * @access public + */ + function getCompressionAlgorithmsClient2Server() + { + return $this->compression_algorithms_client_to_server; + } + + /** + * Return a list of the compression algorithms the server supports, when sending stuff to the client. + * + * @return Array + * @access public + */ + function getCompressionAlgorithmsServer2Client() + { + return $this->compression_algorithms_server_to_client; + } + + /** + * Return a list of the languages the server supports, when sending stuff to the client. + * + * @return Array + * @access public + */ + function getLanguagesServer2Client() + { + return $this->languages_server_to_client; + } + + /** + * Return a list of the languages the server supports, when receiving stuff from the client. + * + * @return Array + * @access public + */ + function getLanguagesClient2Server() + { + return $this->languages_client_to_server; + } + + /** + * Returns the server public host key. + * + * Caching this the first time you connect to a server and checking the result on subsequent connections + * is recommended. Returns false if the server signature is not signed correctly with the public host key. + * + * @return Mixed + * @access public + */ + function getServerPublicHostKey() + { + $signature = $this->signature; + $server_public_host_key = $this->server_public_host_key; + + extract(unpack('Nlength', $this->_string_shift($server_public_host_key, 4))); + $this->_string_shift($server_public_host_key, $length); + + if ($this->signature_validated) { + return $this->bitmap ? + $this->signature_format . ' ' . base64_encode($this->server_public_host_key) : + false; + } + + $this->signature_validated = true; + + switch ($this->signature_format) { + case 'ssh-dss': + $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); + $p = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + + $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); + $q = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + + $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); + $g = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + + $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); + $y = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + + /* The value for 'dss_signature_blob' is encoded as a string containing + r, followed by s (which are 160-bit integers, without lengths or + padding, unsigned, and in network byte order). */ + $temp = unpack('Nlength', $this->_string_shift($signature, 4)); + if ($temp['length'] != 40) { + $this->_handle_error('Invalid signature'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $r = new Math_BigInteger($this->_string_shift($signature, 20), 256); + $s = new Math_BigInteger($this->_string_shift($signature, 20), 256); + + if ($r->compare($q) >= 0 || $s->compare($q) >= 0) { + $this->_handle_error('Invalid signature'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $w = $s->modInverse($q); + + $u1 = $w->multiply(new Math_BigInteger(sha1($this->exchange_hash), 16)); + list(, $u1) = $u1->divide($q); + + $u2 = $w->multiply($r); + list(, $u2) = $u2->divide($q); + + $g = $g->modPow($u1, $p); + $y = $y->modPow($u2, $p); + + $v = $g->multiply($y); + list(, $v) = $v->divide($p); + list(, $v) = $v->divide($q); + + if (!$v->equals($r)) { + $this->_handle_error('Bad server signature'); + return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE); + } + + break; + case 'ssh-rsa': + $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); + $e = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + + $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); + $n = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + $nLength = $temp['length']; + + /* + $temp = unpack('Nlength', $this->_string_shift($signature, 4)); + $signature = $this->_string_shift($signature, $temp['length']); + + if (!class_exists('Crypt_RSA')) { + require_once('Crypt/RSA.php'); + } + + $rsa = new Crypt_RSA(); + $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1); + $rsa->loadKey(array('e' => $e, 'n' => $n), CRYPT_RSA_PUBLIC_FORMAT_RAW); + if (!$rsa->verify($this->exchange_hash, $signature)) { + $this->_handle_error('Bad server signature'); + return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE); + } + */ + + $temp = unpack('Nlength', $this->_string_shift($signature, 4)); + $s = new Math_BigInteger($this->_string_shift($signature, $temp['length']), 256); + + // validate an RSA signature per "8.2 RSASSA-PKCS1-v1_5", "5.2.2 RSAVP1", and "9.1 EMSA-PSS" in the + // following URL: + // ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf + + // also, see SSHRSA.c (rsa2_verifysig) in PuTTy's source. + + if ($s->compare(new Math_BigInteger()) < 0 || $s->compare($n->subtract(new Math_BigInteger(1))) > 0) { + $this->_handle_error('Invalid signature'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $s = $s->modPow($e, $n); + $s = $s->toBytes(); + + $h = pack('N4H*', 0x00302130, 0x0906052B, 0x0E03021A, 0x05000414, sha1($this->exchange_hash)); + $h = chr(0x01) . str_repeat(chr(0xFF), $nLength - 3 - strlen($h)) . $h; + + if ($s != $h) { + $this->_handle_error('Bad server signature'); + return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE); + } + break; + default: + $this->_handle_error('Unsupported signature format'); + return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE); + } + + return $this->signature_format . ' ' . base64_encode($this->server_public_host_key); + } + + /** + * Error Handler + * + * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. + * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. + * + * @param String $string + * @access private + */ + function _handle_error($err_msg) { + if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { + $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; + throw(new $class($err_msg)); + } else { + user_error($err_msg); + } + } +} \ No newline at end of file diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/openssl.cnf b/apps/files_external/3rdparty/phpseclib/phpseclib/openssl.cnf new file mode 100644 index 0000000000..6baa566102 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/openssl.cnf @@ -0,0 +1,6 @@ +# minimalist openssl.cnf file for use with phpseclib + +HOME = . +RANDFILE = $ENV::HOME/.rnd + +[ v3_ca ] \ No newline at end of file diff --git a/apps/files_external/3rdparty/phpseclib/phpunit.xml.dist b/apps/files_external/3rdparty/phpseclib/phpunit.xml.dist new file mode 100644 index 0000000000..f579ab4fd2 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/phpunit.xml.dist @@ -0,0 +1,18 @@ + + + + + + ./tests/ + + + + + + + ./phpseclib/ + + + diff --git a/apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/MD5Test.php b/apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/MD5Test.php new file mode 100644 index 0000000000..41fc20a9a2 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/MD5Test.php @@ -0,0 +1,47 @@ + + * @copyright MMXII Andreas Fischer + * @license http://www.opensource.org/licenses/mit-license.html MIT License + */ + +class Crypt_Hash_MD5Test extends Crypt_Hash_TestCase +{ + public function getInstance() + { + return new Crypt_Hash('md5'); + } + + /** + * @dataProvider hashData() + */ + public function testHash($message, $result) + { + $this->assertHashesTo($this->getInstance(), $message, $result); + } + + static public function hashData() + { + return array( + array('', 'd41d8cd98f00b204e9800998ecf8427e'), + array('The quick brown fox jumps over the lazy dog', '9e107d9d372bb6826bd81d3542a419d6'), + array('The quick brown fox jumps over the lazy dog.', 'e4d909c290d0fb1ca068ffaddf22cbd0'), + ); + } + + /** + * @dataProvider hmacData() + */ + public function testHMAC($key, $message, $result) + { + $this->assertHMACsTo($this->getInstance(), $key, $message, $result); + } + + static public function hmacData() + { + return array( + array('', '', '74e6f7298a9c2d168935f58c001bad88'), + array('key', 'The quick brown fox jumps over the lazy dog', '80070713463e7749b90c2dc24911e275'), + ); + } +} diff --git a/apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/TestCase.php b/apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/TestCase.php new file mode 100644 index 0000000000..1489acd7b4 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/TestCase.php @@ -0,0 +1,47 @@ + + * @copyright MMXII Andreas Fischer + * @license http://www.opensource.org/licenses/mit-license.html MIT License + */ + +abstract class Crypt_Hash_TestCase extends PHPUnit_Framework_TestCase +{ + static public function setUpBeforeClass() + { + require_once('Crypt/Hash.php'); + + if (!defined('CRYPT_HASH_MODE')) + { + define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_INTERNAL); + } + } + + public function setUp() + { + if (defined('CRYPT_HASH_MODE') && CRYPT_HASH_MODE !== CRYPT_HASH_MODE_INTERNAL) + { + $this->markTestSkipped('Skipping test because CRYPT_HASH_MODE is not defined as CRYPT_HASH_MODE_INTERNAL.'); + } + } + + protected function assertHashesTo(Crypt_Hash $hash, $message, $expected) + { + $this->assertEquals( + strtolower($expected), + bin2hex($hash->hash($message)), + sprintf("Failed asserting that '%s' hashes to '%s'.", $message, $expected) + ); + } + + protected function assertHMACsTo(Crypt_Hash $hash, $key, $message, $expected) + { + $hash->setKey($key); + + $this->assertEquals( + strtolower($expected), + bin2hex($hash->hash($message)), + sprintf("Failed asserting that '%s' HMACs to '%s' with key '%s'.", $message, $expected, $key) + ); + } +} diff --git a/apps/files_external/3rdparty/phpseclib/tests/Math/BigIntegerTest.php b/apps/files_external/3rdparty/phpseclib/tests/Math/BigIntegerTest.php new file mode 100644 index 0000000000..1317609f46 --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/tests/Math/BigIntegerTest.php @@ -0,0 +1,259 @@ + + * @copyright MMXII Andreas Fischer + * @license http://www.opensource.org/licenses/mit-license.html MIT License + */ + +class Math_BigIntegerTest extends PHPUnit_Framework_TestCase +{ + public function getInstance($x = 0, $base = 10) + { + return new Math_BigInteger($x, $base); + } + + public function testConstructorBase2() + { + // 2**65 = 36893488147419103232 + $this->assertSame('36893488147419103232', (string) $this->getInstance('1' . str_repeat('0', 65), 2)); + } + + public function testConstructorBase10() + { + $this->assertSame('18446744073709551616', (string) $this->getInstance('18446744073709551616')); + } + + public function testConstructorBase16() + { + $this->assertSame('50', (string) $this->getInstance('0x32', 16)); + $this->assertSame('12345678910', (string) $this->getInstance('0x2DFDC1C3E', 16)); + $this->assertSame('18446744073709551615', (string) $this->getInstance('0xFFFFFFFFFFFFFFFF', 16)); + $this->assertSame('18446744073709551616', (string) $this->getInstance('0x10000000000000000', 16)); + } + + public function testToBytes() + { + $this->assertSame(chr(65), $this->getInstance('65')->toBytes()); + } + + public function testToBytesTwosCompliment() + { + $this->assertSame(chr(126), $this->getInstance('01111110', 2)->toBytes(true)); + } + + public function testToHex() + { + $this->assertSame('41', $this->getInstance('65')->toHex()); + } + + public function testToBits() + { + $this->assertSame('1000001', $this->getInstance('65')->toBits()); + } + + public function testAdd() + { + $x = $this->getInstance('18446744073709551615'); + $y = $this->getInstance( '100000000000'); + + $a = $x->add($y); + $b = $y->add($x); + + $this->assertTrue($a->equals($b)); + $this->assertTrue($b->equals($a)); + + $this->assertSame('18446744173709551615', (string) $a); + $this->assertSame('18446744173709551615', (string) $b); + } + + public function testSubtract() + { + $x = $this->getInstance('18446744073709551618'); + $y = $this->getInstance( '4000000000000'); + $this->assertSame('18446740073709551618', (string) $x->subtract($y)); + } + + public function testMultiply() + { + $x = $this->getInstance('8589934592'); // 2**33 + $y = $this->getInstance('36893488147419103232'); // 2**65 + + $a = $x->multiply($y); // 2**98 + $b = $y->multiply($x); // 2**98 + + $this->assertTrue($a->equals($b)); + $this->assertTrue($b->equals($a)); + + $this->assertSame('316912650057057350374175801344', (string) $a); + $this->assertSame('316912650057057350374175801344', (string) $b); + } + + public function testDivide() + { + $x = $this->getInstance('1180591620717411303425'); // 2**70 + 1 + $y = $this->getInstance('12345678910'); + + list($q, $r) = $x->divide($y); + + $this->assertSame('95627922070', (string) $q); + $this->assertSame('10688759725', (string) $r); + } + + public function testModPow() + { + $a = $this->getInstance('10'); + $b = $this->getInstance('20'); + $c = $this->getInstance('30'); + $d = $a->modPow($b, $c); + + $this->assertSame('10', (string) $d); + } + + public function testModInverse() + { + $a = $this->getInstance(30); + $b = $this->getInstance(17); + + $c = $a->modInverse($b); + $this->assertSame('4', (string) $c); + + $d = $a->multiply($c); + list($q, $r) = $d->divide($b); + $this->assertSame('1', (string) $r); + } + + public function testExtendedGCD() + { + $a = $this->getInstance(693); + $b = $this->getInstance(609); + + $arr = $a->extendedGCD($b); + + $this->assertSame('21', (string) $arr['gcd']); + $this->assertSame(21, $a->toString() * $arr['x']->toString() + $b->toString() * $arr['y']->toString()); + } + + public function testGCD() + { + $x = $this->getInstance(693); + $y = $this->getInstance(609); + $this->assertSame('21', (string) $x->gcd($y)); + } + + public function testAbs() + { + $x = $this->getInstance('-18446744073709551617'); + $y = $x->abs(); + + $this->assertSame('-18446744073709551617', (string) $x); + $this->assertSame('18446744073709551617', (string) $y); + } + + public function testEquals() + { + $x = $this->getInstance('18446744073709551616'); + $y = $this->getInstance('18446744073709551616'); + + $this->assertTrue($x->equals($y)); + $this->assertTrue($y->equals($x)); + } + + public function testCompare() + { + $a = $this->getInstance('-18446744073709551616'); + $b = $this->getInstance('36893488147419103232'); + $c = $this->getInstance('36893488147419103232'); + $d = $this->getInstance('316912650057057350374175801344'); + + // a < b + $this->assertLessThan(0, $a->compare($b)); + $this->assertGreaterThan(0, $b->compare($a)); + + // b = c + $this->assertSame(0, $b->compare($c)); + $this->assertSame(0, $c->compare($b)); + + // c < d + $this->assertLessThan(0, $c->compare($d)); + $this->assertGreaterThan(0, $d->compare($c)); + } + + public function testBitwiseAND() + { + $x = $this->getInstance('66666666666666666666666', 16); + $y = $this->getInstance('33333333333333333333333', 16); + $z = $this->getInstance('22222222222222222222222', 16); + + $this->assertSame($z->toHex(), $x->bitwise_AND($y)->toHex()); + } + + public function testBitwiseOR() + { + $x = $this->getInstance('11111111111111111111111', 16); + $y = $this->getInstance('EEEEEEEEEEEEEEEEEEEEEEE', 16); + $z = $this->getInstance('FFFFFFFFFFFFFFFFFFFFFFF', 16); + + $this->assertSame($z->toHex(), $x->bitwise_OR($y)->toHex()); + } + + public function testBitwiseXOR() + { + $x = $this->getInstance('AFAFAFAFAFAFAFAFAFAFAFAF', 16); + $y = $this->getInstance('133713371337133713371337', 16); + $z = $this->getInstance('BC98BC98BC98BC98BC98BC98', 16); + + $this->assertSame($z->toHex(), $x->bitwise_XOR($y)->toHex()); + } + + public function testBitwiseNOT() + { + $x = $this->getInstance('EEEEEEEEEEEEEEEEEEEEEEE', 16); + $z = $this->getInstance('11111111111111111111111', 16); + + $this->assertSame($z->toHex(), $x->bitwise_NOT()->toHex()); + } + + public function testBitwiseLeftShift() + { + $x = $this->getInstance('0x0000000FF0000000', 16); + $y = $this->getInstance('0x000FF00000000000', 16); + + $this->assertSame($y->toHex(), $x->bitwise_LeftShift(16)->toHex()); + } + + public function testBitwiseRightShift() + { + $x = $this->getInstance('0x0000000FF0000000', 16); + $y = $this->getInstance('0x00000000000FF000', 16); + $z = $this->getInstance('0x000000000000000F', 16); + $n = $this->getInstance(0); + + $this->assertSame($y->toHex(), $x->bitwise_RightShift(16)->toHex()); + $this->assertSame($z->toHex(), $x->bitwise_RightShift(32)->toHex()); + $this->assertSame($n->toHex(), $x->bitwise_RightShift(36)->toHex()); + } + + public function testSerializable() + { + $x = $this->getInstance('18446744073709551616'); + $y = unserialize(serialize($x)); + + $this->assertTrue($x->equals($y)); + $this->assertTrue($y->equals($x)); + + $this->assertSame('18446744073709551616', (string) $x); + $this->assertSame('18446744073709551616', (string) $y); + } + + public function testClone() + { + $x = $this->getInstance('18446744073709551616'); + $y = clone $x; + + $this->assertTrue($x->equals($y)); + $this->assertTrue($y->equals($x)); + + $this->assertSame('18446744073709551616', (string) $x); + $this->assertSame('18446744073709551616', (string) $y); + } +} diff --git a/apps/files_external/3rdparty/phpseclib/tests/bootstrap.php b/apps/files_external/3rdparty/phpseclib/tests/bootstrap.php new file mode 100644 index 0000000000..eb7136b8bb --- /dev/null +++ b/apps/files_external/3rdparty/phpseclib/tests/bootstrap.php @@ -0,0 +1,22 @@ + Date: Thu, 27 Dec 2012 21:00:20 +0100 Subject: [PATCH 015/719] Update apps/files_external/lib/sftp.php Updated to using local 3rdparty + added a few missed braces. --- apps/files_external/lib/sftp.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index 67a11fc3a4..7113eadfa2 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -6,7 +6,7 @@ * See the COPYING-README file. */ -set_include_path(get_include_path() . PATH_SEPARATOR . OC::$THIRDPARTYROOT . '/3rdparty/phpseclib/phpseclib'); +set_include_path(get_include_path() . PATH_SEPARATOR . OC_App::getAppPath('files_external') . '/3rdparty/phpseclib/phpseclib'); require('Net/SFTP.php'); class OC_Filestorage_SFTP extends OC_Filestorage_Common { @@ -122,6 +122,7 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { } catch (Exception $e) { return false; } + } public function opendir($path) { try { @@ -256,6 +257,7 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { } catch (Exception $e) { return false; } + } public function stat($path) { try { From ad902a9848a66135ae85a04b1c66b663219a53ea Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Fri, 28 Dec 2012 12:00:48 -0500 Subject: [PATCH 016/719] Move storage backend tests from constructor to test function --- apps/files_external/lib/amazons3.php | 12 ++++++++---- apps/files_external/lib/config.php | 4 ++-- apps/files_external/lib/dropbox.php | 4 ---- apps/files_external/lib/ftp.php | 4 ---- apps/files_external/lib/google.php | 11 +++++++---- apps/files_external/lib/smb.php | 4 ---- apps/files_external/lib/webdav.php | 4 ---- lib/filestorage.php | 1 + lib/filestorage/common.php | 8 ++++++++ 9 files changed, 26 insertions(+), 26 deletions(-) diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php index c1b2e889bb..5ab89df732 100644 --- a/apps/files_external/lib/amazons3.php +++ b/apps/files_external/lib/amazons3.php @@ -36,10 +36,6 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common { if (isset($params['key']) && isset($params['secret']) && isset($params['bucket'])) { $this->s3 = new AmazonS3(array('key' => $params['key'], 'secret' => $params['secret'])); $this->bucket = $params['bucket']; - $test = $this->s3->get_canonical_user_id(); - if (!isset($test['id']) || $test['id'] == '') { - throw new Exception(); - } } else { throw new Exception(); } @@ -250,4 +246,12 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common { return $response->isOK(); } + public function test() { + $test = $this->s3->get_canonical_user_id(); + if (isset($test['id']) && $test['id'] != '') { + return true; + } + return false; + } + } diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 99d31c5aa2..fd654f04e9 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -192,8 +192,8 @@ class OC_Mount_Config { } if (class_exists($class)) { try { - new $class($options); - return true; + $storage = new $class($options); + return $storage->test(); } catch (Exception $exception) { return false; } diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php index a4f3f67834..66dfd3e595 100755 --- a/apps/files_external/lib/dropbox.php +++ b/apps/files_external/lib/dropbox.php @@ -41,10 +41,6 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { $oauth = new Dropbox_OAuth_Curl($params['app_key'], $params['app_secret']); $oauth->setToken($params['token'], $params['token_secret']); $this->dropbox = new Dropbox_API($oauth, 'dropbox'); - $test = $this->stat(''); - if (!$test) { - throw new Exception('Creating OC_Filestorage_Dropbox storage failed'); - } } else { throw new Exception('Creating OC_Filestorage_Dropbox storage failed'); } diff --git a/apps/files_external/lib/ftp.php b/apps/files_external/lib/ftp.php index ac487156c1..ca408d5d22 100644 --- a/apps/files_external/lib/ftp.php +++ b/apps/files_external/lib/ftp.php @@ -33,10 +33,6 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{ if ( ! $this->root || $this->root[0]!='/') { $this->root='/'.$this->root; } - $test = $this->stat(''); - if (!$test) { - throw new Exception(); - } //create the root folder if necesary if ( ! $this->is_dir('')) { $this->mkdir(''); diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php index 19772d4d37..8710c97911 100644 --- a/apps/files_external/lib/google.php +++ b/apps/files_external/lib/google.php @@ -42,10 +42,6 @@ class OC_Filestorage_Google extends OC_Filestorage_Common { $this->oauth_token = new OAuthToken($params['token'], $params['token_secret']); $this->sig_method = new OAuthSignatureMethod_HMAC_SHA1(); $this->entries = array(); - $test = $this->free_space(''); - if (!$test) { - throw new Exception(); - } } else { throw new Exception('Creating OC_Filestorage_Google storage failed'); } @@ -594,4 +590,11 @@ class OC_Filestorage_Google extends OC_Filestorage_Common { } + public function test() { + if ($this->free_space('')) { + return true; + } + return false; + } + } \ No newline at end of file diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php index 97454b4601..5b73e993e4 100644 --- a/apps/files_external/lib/smb.php +++ b/apps/files_external/lib/smb.php @@ -34,10 +34,6 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{ if (substr($this->share, -1, 1)=='/') { $this->share=substr($this->share, 0, -1); } - $test = $this->stat(''); - if (!$test) { - throw new Exception(); - } //create the root folder if necesary if ( ! $this->is_dir('')) { $this->mkdir(''); diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php index cfe073a1f1..31d36f1e78 100644 --- a/apps/files_external/lib/webdav.php +++ b/apps/files_external/lib/webdav.php @@ -60,10 +60,6 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ $this->client->addTrustedCertificates($certPath); } } - $test = $this->stat(''); - if (!$test) { - throw new Exception(); - } //create the root folder if necesary $this->mkdir(''); } else { diff --git a/lib/filestorage.php b/lib/filestorage.php index dd65f4421b..9d42c0bcb6 100644 --- a/lib/filestorage.php +++ b/lib/filestorage.php @@ -64,4 +64,5 @@ abstract class OC_Filestorage{ */ abstract public function hasUpdated($path, $time); abstract public function getOwner($path); + abstract public function test(); } diff --git a/lib/filestorage/common.php b/lib/filestorage/common.php index b97eb79d8d..e2af0c6d7f 100644 --- a/lib/filestorage/common.php +++ b/lib/filestorage/common.php @@ -288,4 +288,12 @@ abstract class OC_Filestorage_Common extends OC_Filestorage { public function getOwner($path) { return OC_User::getUser(); } + + public function test() { + if ($this->stat('')) { + return true; + } + return false; + } + } From 595e72ade8906346c9de8500685f5968d67afd2f Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Fri, 28 Dec 2012 15:56:48 -0500 Subject: [PATCH 017/719] Fix some of the default mount points creating sub folders i.e. SMB / CIFS, ownCloud / WebDAV --- apps/files_external/js/settings.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index f2a08ed6df..182c427e18 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -100,7 +100,7 @@ $(document).ready(function() { var backendClass = $(this).val(); $(this).parent().text(selected); if ($(tr).find('.mountPoint input').val() == '') { - $(tr).find('.mountPoint input').val(suggestMountPoint(selected.replace(/\s+/g, ''))); + $(tr).find('.mountPoint input').val(suggestMountPoint(selected)); } $(tr).addClass(backendClass); $(tr).find('.status').append(''); @@ -136,6 +136,11 @@ $(document).ready(function() { }); function suggestMountPoint(defaultMountPoint) { + var pos = defaultMountPoint.indexOf('/'); + if (pos !== -1) { + defaultMountPoint = defaultMountPoint.substring(0, pos); + } + defaultMountPoint = defaultMountPoint.replace(/\s+/g, ''); var i = 1; var append = ''; var match = true; From ab4d52e9802a9710a04c32574f1521880c0d74e4 Mon Sep 17 00:00:00 2001 From: hkjolhede Date: Fri, 28 Dec 2012 22:22:04 +0100 Subject: [PATCH 018/719] Update apps/files_external/lib/sftp.php Created test() function as per @pull/1031 --- apps/files_external/lib/sftp.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index 7113eadfa2..22cb8d1651 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -20,10 +20,6 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { private static $tempFiles = array(); public function __construct($params) { - if (!isset($params['host']) || !isset($params['user']) || !isset($params['password'])) { - throw new Exception("Required parameters not set"); - } - $this->host = $params['host']; $proto = strpos($this->host, '://'); if ($proto != false) { @@ -53,6 +49,12 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { $this->write_host_keys($host_keys); } } + + public function test() { + if (!isset($params['host']) || !isset($params['user']) || !isset($params['password'])) { + throw new Exception("Required parameters not set"); + } + } private function abs_path($path) { return $this->root . $path; From 442a045ef605f63c1fed3868ef9ddad28c33409b Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Fri, 28 Dec 2012 17:38:24 -0500 Subject: [PATCH 019/719] Fix problems with chosen multiselect --- apps/files_external/js/settings.js | 46 ++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index 182c427e18..25f6ed5798 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -39,6 +39,8 @@ OC.MountConfig={ var isPersonal = false; var oldGroups = $(tr).find('.applicable').data('applicable-groups'); var oldUsers = $(tr).find('.applicable').data('applicable-users'); + var groups = []; + var users = []; $.each(multiselect, function(index, value) { var pos = value.indexOf('(group)'); if (pos != -1) { @@ -47,12 +49,14 @@ OC.MountConfig={ if ($.inArray(applicable, oldGroups) != -1) { oldGroups.splice($.inArray(applicable, oldGroups), 1); } + groups.push(applicable); } else { var mountType = 'user'; var applicable = value; if ($.inArray(applicable, oldUsers) != -1) { oldUsers.splice($.inArray(applicable, oldUsers), 1); } + users.push(applicable); } $.post(OC.filePath('files_external', 'ajax', 'addMountPoint.php'), { mountPoint: mountPoint, class: backendClass, classOptions: classOptions, mountType: mountType, applicable: applicable, isPersonal: isPersonal }, function(result) { statusSpan.removeClass(); @@ -63,6 +67,8 @@ OC.MountConfig={ } }); }); + $(tr).find('.applicable').data('applicable-groups', groups); + $(tr).find('.applicable').data('applicable-users', users); var mountType = 'group'; $.each(oldGroups, function(index, applicable) { $.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal }); @@ -128,7 +134,11 @@ $(document).ready(function() { return false; } }); - $('.chz-select').chosen(); + // Reset chosen + var chosen = $(tr).find('.applicable select'); + chosen.parent().find('div').remove(); + chosen.removeAttr('id').removeClass('chzn-done').css({display:'inline-block'}); + chosen.chosen(); $(tr).find('td').last().attr('class', 'remove'); $(tr).find('td').last().removeAttr('style'); $(tr).removeAttr('id'); @@ -171,9 +181,9 @@ $(document).ready(function() { var timer; - $('#externalStorage td').live('keyup', function() { + $('#externalStorage td input').live('keyup', function() { clearTimeout(timer); - var tr = $(this).parent(); + var tr = $(this).parent().parent(); if ($(this).val) { timer = setTimeout(function() { OC.MountConfig.saveStorage(tr); @@ -181,6 +191,10 @@ $(document).ready(function() { } }); + $('.applicable .chzn-select').live('change', function() { + OC.MountConfig.saveStorage($(this).parent().parent()); + }); + $('td.remove>img').live('click', function() { var tr = $(this).parent().parent(); var mountPoint = $(tr).find('.mountPoint input').val(); @@ -193,23 +207,25 @@ $(document).ready(function() { if ($('#externalStorage').data('admin') === true) { var isPersonal = false; var multiselect = $(tr).find('.chzn-select').val(); - $.each(multiselect, function(index, value) { - var pos = value.indexOf('(group)'); - if (pos != -1) { - var mountType = 'group'; - var applicable = value.substr(0, pos); - } else { - var mountType = 'user'; - var applicable = value; - } - $.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal }); - }); + if (multiselect != null) { + $.each(multiselect, function(index, value) { + var pos = value.indexOf('(group)'); + if (pos != -1) { + var mountType = 'group'; + var applicable = value.substr(0, pos); + } else { + var mountType = 'user'; + var applicable = value; + } + $.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal }); + }); + } } else { var mountType = 'user'; var applicable = OC.currentUser; var isPersonal = true; + $.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal }); } - $.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal }); $(tr).remove(); }); From a69de3a8f1dd3ef9a17b0f65b7058681eebb6145 Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Tue, 1 Jan 2013 16:19:40 -0500 Subject: [PATCH 020/719] Turn off async for saving mount points, improve input detection for Google and Dropbox 'Grant Access' buttons --- apps/files_external/js/dropbox.js | 49 ++++++++++--------- apps/files_external/js/google.js | 77 ++++++++++++++--------------- apps/files_external/js/settings.js | 78 ++++++++++++++++++++++++------ 3 files changed, 128 insertions(+), 76 deletions(-) diff --git a/apps/files_external/js/dropbox.js b/apps/files_external/js/dropbox.js index 247d6bb8bb..92a92467c7 100644 --- a/apps/files_external/js/dropbox.js +++ b/apps/files_external/js/dropbox.js @@ -24,14 +24,12 @@ $(document).ready(function() { $(tr).find('.configuration input').attr('disabled', 'disabled'); $(tr).find('.configuration').append(''+t('files_external', 'Access granted')+''); } else { - OC.dialogs.alert(result.data.message, - t('files_external', 'Error configuring Dropbox storage') - ); + OC.dialogs.alert(result.data.message, t('files_external', 'Error configuring Dropbox storage')); } }); } - } else if ($(this).find('.mountPoint input').val() != '' && $(config).find('[data-parameter="app_key"]').val() != '' && $(config).find('[data-parameter="app_secret"]').val() != '' && $(this).find('.dropbox').length == 0) { - $(this).find('.configuration').append(''+t('files_external', 'Grant access')+''); + } else { + onDropboxInputsChange($(this)); } } }); @@ -39,18 +37,27 @@ $(document).ready(function() { $('#externalStorage tbody tr.OC_Filestorage_Dropbox td').live('paste', function() { var tr = $(this).parent(); setTimeout(function() { - showButton(tr); + onDropboxInputsChange(tr); }, 20); }); $('#externalStorage tbody tr.OC_Filestorage_Dropbox td').live('keyup', function() { - showButton($(this).parent()); + onDropboxInputsChange($(this).parent()); }); - function showButton(tr) { + $('#externalStorage tbody tr.OC_Filestorage_Dropbox .chzn-select').live('change', function() { + onDropboxInputsChange($(this).parent().parent()); + }); + + function onDropboxInputsChange(tr) { if ($(tr).find('[data-parameter="configured"]').val() != 'true') { var config = $(tr).find('.configuration'); - if ($(tr).find('.mountPoint input').val() != '' && $(config).find('[data-parameter="app_key"]').val() != '' && $(config).find('[data-parameter="app_secret"]').val() != '') { + if ($(tr).find('.mountPoint input').val() != '' + && $(config).find('[data-parameter="app_key"]').val() != '' + && $(config).find('[data-parameter="app_secret"]').val() != '' + && ($(tr).find('.chzn-select').length == 0 + || $(tr).find('.chzn-select').val() != null)) + { if ($(tr).find('.dropbox').length == 0) { $(config).append(''+t('files_external', 'Grant access')+''); } else { @@ -64,8 +71,10 @@ $(document).ready(function() { $('.dropbox').live('click', function(event) { event.preventDefault(); + var tr = $(this).parent().parent(); var app_key = $(this).parent().find('[data-parameter="app_key"]').val(); var app_secret = $(this).parent().find('[data-parameter="app_secret"]').val(); + var statusSpan = $(tr).find('.status span'); if (app_key != '' && app_secret != '') { var tr = $(this).parent().parent(); var configured = $(this).parent().find('[data-parameter="configured"]'); @@ -76,25 +85,19 @@ $(document).ready(function() { $(configured).val('false'); $(token).val(result.data.request_token); $(token_secret).val(result.data.request_token_secret); - if (OC.MountConfig.saveStorage(tr)) { - window.location = result.data.url; - } else { - OC.dialogs.alert( - t('files_external', 'Fill out all required fields'), - t('files_external', 'Error configuring Dropbox storage') - ); - } + OC.MountConfig.saveStorage(tr); + statusSpan.removeClass(); + statusSpan.addClass('waiting'); + window.location = result.data.url; } else { - OC.dialogs.alert(result.data.message, - t('files_external', 'Error configuring Dropbox storage') - ); + OC.dialogs.alert(result.data.message, t('files_external', 'Error configuring Dropbox storage')); } }); } else { OC.dialogs.alert( - t('files_external', 'Please provide a valid Dropbox app key and secret.'), - t('files_external', 'Error configuring Dropbox storage') - ); + t('files_external', 'Please provide a valid Dropbox app key and secret.'), + t('files_external', 'Error configuring Dropbox storage') + ); } }); diff --git a/apps/files_external/js/google.js b/apps/files_external/js/google.js index f9fb807861..a3b3e9cb3d 100644 --- a/apps/files_external/js/google.js +++ b/apps/files_external/js/google.js @@ -3,8 +3,7 @@ $(document).ready(function() { $('#externalStorage tbody tr.OC_Filestorage_Google').each(function() { var configured = $(this).find('[data-parameter="configured"]'); if ($(configured).val() == 'true') { - $(this).find('.configuration') - .append(''+t('files_external', 'Access granted')+''); + $(this).find('.configuration').append(''+t('files_external', 'Access granted')+''); } else { var token = $(this).find('[data-parameter="token"]'); var token_secret = $(this).find('[data-parameter="token_secret"]'); @@ -22,37 +21,44 @@ $(document).ready(function() { OC.MountConfig.saveStorage(tr); $(tr).find('.configuration').append(''+t('files_external', 'Access granted')+''); } else { - OC.dialogs.alert(result.data.message, - t('files_external', 'Error configuring Google Drive storage') - ); + OC.dialogs.alert(result.data.message, t('files_external', 'Error configuring Google Drive storage')); } }); - } else if ($(this).find('.google').length == 0) { - $(this).find('.configuration').append(''+t('files_external', 'Grant access')+''); - } - } - }); - - $('#externalStorage tbody tr').live('change', function() { - if ($(this).hasClass('OC_Filestorage_Google') && $(this).find('[data-parameter="configured"]').val() != 'true') { - if ($(this).find('.mountPoint input').val() != '') { - if ($(this).find('.google').length == 0) { - $(this).find('.configuration').append(''+t('files_external', 'Grant access')+''); - } - } - } - }); - - $('#externalStorage tbody tr .mountPoint input').live('keyup', function() { - var tr = $(this).parent().parent(); - if ($(tr).hasClass('OC_Filestorage_Google') && $(tr).find('[data-parameter="configured"]').val() != 'true' && $(tr).find('.google').length > 0) { - if ($(this).val() != '') { - $(tr).find('.google').show(); } else { + onGoogleInputsChange(this); + } + } + }); + + $('#externalStorage tbody tr.OC_Filestorage_Google td').live('paste', function() { + var tr = $(this).parent(); + setTimeout(function() { + onGoogleInputsChange(tr); + }, 20); + }); + + $('#externalStorage tbody tr.OC_Filestorage_Google td').live('keyup', function() { + onGoogleInputsChange($(this).parent()); + }); + + $('#externalStorage tbody tr.OC_Filestorage_Google .chzn-select').live('change', function() { + onGoogleInputsChange($(this).parent().parent()); + }); + + function onGoogleInputsChange(tr) { + if ($(tr).find('[data-parameter="configured"]').val() != 'true') { + var config = $(tr).find('.configuration'); + if ($(tr).find('.mountPoint input').val() != '' && ($(tr).find('.chzn-select').length == 0 || $(tr).find('.chzn-select').val() != null)) { + if ($(tr).find('.google').length == 0) { + $(config).append(''+t('files_external', 'Grant access')+''); + } else { + $(tr).find('.google').show(); + } + } else if ($(tr).find('.google').length > 0) { $(tr).find('.google').hide(); } } - }); + } $('.google').live('click', function(event) { event.preventDefault(); @@ -60,23 +66,18 @@ $(document).ready(function() { var configured = $(this).parent().find('[data-parameter="configured"]'); var token = $(this).parent().find('[data-parameter="token"]'); var token_secret = $(this).parent().find('[data-parameter="token_secret"]'); + var statusSpan = $(tr).find('.status span'); $.post(OC.filePath('files_external', 'ajax', 'google.php'), { step: 1, callback: location.protocol + '//' + location.host + location.pathname }, function(result) { if (result && result.status == 'success') { $(configured).val('false'); $(token).val(result.data.request_token); $(token_secret).val(result.data.request_token_secret); - if (OC.MountConfig.saveStorage(tr)) { - window.location = result.data.url; - } else { - OC.dialogs.alert( - t('files_external', 'Fill out all required fields'), - t('files_external', 'Error configuring Google Drive storage') - ); - } + OC.MountConfig.saveStorage(tr); + statusSpan.removeClass(); + statusSpan.addClass('waiting'); + window.location = result.data.url; } else { - OC.dialogs.alert(result.data.message, - t('files_external', 'Error configuring Google Drive storage') - ); + OC.dialogs.alert(result.data.message, t('files_external', 'Error configuring Google Drive storage')); } }); }); diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index 25f6ed5798..b98fcf1b0a 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -58,12 +58,25 @@ OC.MountConfig={ } users.push(applicable); } - $.post(OC.filePath('files_external', 'ajax', 'addMountPoint.php'), { mountPoint: mountPoint, class: backendClass, classOptions: classOptions, mountType: mountType, applicable: applicable, isPersonal: isPersonal }, function(result) { - statusSpan.removeClass(); - if (result && result.status == 'success' && result.data.message) { - statusSpan.addClass('success'); - } else { - statusSpan.addClass('error'); + $.ajax({type: 'POST', + url: OC.filePath('files_external', 'ajax', 'addMountPoint.php'), + data: { + mountPoint: mountPoint, + class: backendClass, + classOptions: classOptions, + mountType: mountType, + applicable: applicable, + isPersonal: isPersonal + }, + async: false, + success: function(result) { + statusSpan.removeClass(); + if (result && result.status == 'success' && result.data.message) { + status = true; + statusSpan.addClass('success'); + } else { + statusSpan.addClass('error'); + } } }); }); @@ -71,26 +84,61 @@ OC.MountConfig={ $(tr).find('.applicable').data('applicable-users', users); var mountType = 'group'; $.each(oldGroups, function(index, applicable) { - $.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal }); + $.ajax({type: 'POST', + url: OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), + data: { + mountPoint: mountPoint, + class: backendClass, + classOptions: classOptions, + mountType: mountType, + applicable: applicable, + isPersonal: isPersonal + }, + async: false + }); }); var mountType = 'user'; $.each(oldUsers, function(index, applicable) { - $.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal }); + $.ajax({type: 'POST', + url: OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), + data: { + mountPoint: mountPoint, + class: backendClass, + classOptions: classOptions, + mountType: mountType, + applicable: applicable, + isPersonal: isPersonal + }, + async: false + }); }); } else { var isPersonal = true; var mountType = 'user'; var applicable = OC.currentUser; - $.post(OC.filePath('files_external', 'ajax', 'addMountPoint.php'), { mountPoint: mountPoint, class: backendClass, classOptions: classOptions, mountType: mountType, applicable: applicable, isPersonal: isPersonal }, function(result) { - statusSpan.removeClass(); - if (result && result.status == 'success' && result.data.message) { - statusSpan.addClass('success'); - } else { - statusSpan.addClass('error'); + $.ajax({type: 'POST', + url: OC.filePath('files_external', 'ajax', 'addMountPoint.php'), + data: { + mountPoint: mountPoint, + class: backendClass, + classOptions: classOptions, + mountType: mountType, + applicable: applicable, + isPersonal: isPersonal + }, + async: false, + success: function(result) { + statusSpan.removeClass(); + if (result && result.status == 'success' && result.data.message) { + status = true; + statusSpan.addClass('success'); + } else { + statusSpan.addClass('error'); + } } }); } - return true; + return status; } } }; From d65cb7ae0954e89de0a1b56170ffab683c39e3cc Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Wed, 2 Jan 2013 11:54:21 -0500 Subject: [PATCH 021/719] Fix 'Grant Access' button for multiple Google Drive mount points and prevent multiple scripts being added --- apps/files_external/appinfo/update.php | 5 +++++ apps/files_external/js/google.js | 26 +++++++++++++++------- apps/files_external/templates/settings.php | 5 ++--- 3 files changed, 25 insertions(+), 11 deletions(-) create mode 100644 apps/files_external/appinfo/update.php diff --git a/apps/files_external/appinfo/update.php b/apps/files_external/appinfo/update.php new file mode 100644 index 0000000000..15d7e4168e --- /dev/null +++ b/apps/files_external/appinfo/update.php @@ -0,0 +1,5 @@ +tr:last').prev('tr')); + } + }); + + function setupGoogleRow(tr) { + var configured = $(tr).find('[data-parameter="configured"]'); if ($(configured).val() == 'true') { - $(this).find('.configuration').append(''+t('files_external', 'Access granted')+''); + $(tr).find('.configuration').append(''+t('files_external', 'Access granted')+''); } else { - var token = $(this).find('[data-parameter="token"]'); - var token_secret = $(this).find('[data-parameter="token_secret"]'); + var token = $(tr).find('[data-parameter="token"]'); + var token_secret = $(tr).find('[data-parameter="token_secret"]'); var params = {}; window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m, key, value) { params[key] = value; }); if (params['oauth_token'] !== undefined && params['oauth_verifier'] !== undefined && decodeURIComponent(params['oauth_token']) == $(token).val()) { - var tr = $(this); $.post(OC.filePath('files_external', 'ajax', 'google.php'), { step: 2, oauth_verifier: params['oauth_verifier'], request_token: $(token).val(), request_token_secret: $(token_secret).val() }, function(result) { if (result && result.status == 'success') { $(token).val(result.access_token); @@ -22,13 +31,14 @@ $(document).ready(function() { $(tr).find('.configuration').append(''+t('files_external', 'Access granted')+''); } else { OC.dialogs.alert(result.data.message, t('files_external', 'Error configuring Google Drive storage')); + onGoogleInputsChange(tr); } }); } else { - onGoogleInputsChange(this); + onGoogleInputsChange(tr); } } - }); + } $('#externalStorage tbody tr.OC_Filestorage_Google td').live('paste', function() { var tr = $(this).parent(); diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index 9702ebfb4c..6f22de392f 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -73,9 +73,8 @@ - - + + From db90f2c296c4a74933c2d258d8b335a3093db0f9 Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Wed, 2 Jan 2013 12:13:59 -0500 Subject: [PATCH 022/719] Listen to checkbox changes as well --- apps/files_external/js/settings.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index b98fcf1b0a..2a8d8d2c28 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -239,6 +239,10 @@ $(document).ready(function() { } }); + $('#externalStorage td input:checkbox').live('change', function() { + OC.MountConfig.saveStorage($(this).parent().parent().parent()); + }); + $('.applicable .chzn-select').live('change', function() { OC.MountConfig.saveStorage($(this).parent().parent()); }); From 7f218c4dc07edd2393ffa132745dcc0df16508e3 Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Wed, 2 Jan 2013 13:20:44 -0500 Subject: [PATCH 023/719] Remove accidentally included file --- apps/files_external/appinfo/update.php | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 apps/files_external/appinfo/update.php diff --git a/apps/files_external/appinfo/update.php b/apps/files_external/appinfo/update.php deleted file mode 100644 index 15d7e4168e..0000000000 --- a/apps/files_external/appinfo/update.php +++ /dev/null @@ -1,5 +0,0 @@ - Date: Wed, 9 Jan 2013 21:47:24 -0500 Subject: [PATCH 024/719] Set status to waiting for Dropbox and Google Drive while authenticating --- apps/files_external/js/dropbox.js | 3 +++ apps/files_external/js/google.js | 3 +++ 2 files changed, 6 insertions(+) diff --git a/apps/files_external/js/dropbox.js b/apps/files_external/js/dropbox.js index 92a92467c7..9314a4c792 100644 --- a/apps/files_external/js/dropbox.js +++ b/apps/files_external/js/dropbox.js @@ -15,6 +15,9 @@ $(document).ready(function() { if (pos != -1 && window.location.search.substr(pos, $(token).val().length) == $(token).val()) { var token_secret = $(this).find('.configuration [data-parameter="token_secret"]'); var tr = $(this); + var statusSpan = $(tr).find('.status span'); + statusSpan.removeClass(); + statusSpan.addClass('waiting'); $.post(OC.filePath('files_external', 'ajax', 'dropbox.php'), { step: 2, app_key: app_key, app_secret: app_secret, request_token: $(token).val(), request_token_secret: $(token_secret).val() }, function(result) { if (result && result.status == 'success') { $(token).val(result.access_token); diff --git a/apps/files_external/js/google.js b/apps/files_external/js/google.js index 89daa0078e..ad6fc6a0f9 100644 --- a/apps/files_external/js/google.js +++ b/apps/files_external/js/google.js @@ -22,6 +22,9 @@ $(document).ready(function() { params[key] = value; }); if (params['oauth_token'] !== undefined && params['oauth_verifier'] !== undefined && decodeURIComponent(params['oauth_token']) == $(token).val()) { + var statusSpan = $(tr).find('.status span'); + statusSpan.removeClass(); + statusSpan.addClass('waiting'); $.post(OC.filePath('files_external', 'ajax', 'google.php'), { step: 2, oauth_verifier: params['oauth_verifier'], request_token: $(token).val(), request_token_secret: $(token_secret).val() }, function(result) { if (result && result.status == 'success') { $(token).val(result.access_token); From 0956cae39ea8380d42d03857a18fdab0a07ebe8c Mon Sep 17 00:00:00 2001 From: Tom Needham Date: Wed, 16 Jan 2013 20:43:46 +0000 Subject: [PATCH 025/719] Add new /cloud/capabilities route and remove unused methods --- lib/ocs/cloud.php | 54 ++++++++++------------------------------------- ocs/routes.php | 3 ++- 2 files changed, 13 insertions(+), 44 deletions(-) diff --git a/lib/ocs/cloud.php b/lib/ocs/cloud.php index 2d18b1db3f..29db1e6361 100644 --- a/lib/ocs/cloud.php +++ b/lib/ocs/cloud.php @@ -24,49 +24,17 @@ class OC_OCS_Cloud { - public static function getSystemWebApps() { - OC_Util::checkLoggedIn(); - $apps = OC_App::getEnabledApps(); - $values = array(); - foreach($apps as $app) { - $info = OC_App::getAppInfo($app); - if(isset($info['standalone'])) { - $newValue = array('name'=>$info['name'],'url'=>OC_Helper::linkToAbsolute($app,''),'icon'=>''); - $values[] = $newValue; - } - } - return new OC_OCS_Result($values); - } - - public static function getUserQuota($parameters) { - $user = OC_User::getUser(); - if(OC_User::isAdminUser($user) or ($user==$parameters['user'])) { - - if(OC_User::userExists($parameters['user'])) { - // calculate the disc space - $userDir = '/'.$parameters['user'].'/files'; - OC_Filesystem::init($userDir); - $rootInfo = OC_FileCache::get(''); - $sharedInfo = OC_FileCache::get('/Shared'); - $used = $rootInfo['size'] - $sharedInfo['size']; - $free = OC_Filesystem::free_space(); - $total = $free + $used; - if($total===0) $total = 1; // prevent division by zero - $relative = round(($used/$total)*10000)/100; - - $xml = array(); - $xml['quota'] = $total; - $xml['free'] = $free; - $xml['used'] = $used; - $xml['relative'] = $relative; - - return new OC_OCS_Result($xml); - } else { - return new OC_OCS_Result(null, 300); - } - } else { - return new OC_OCS_Result(null, 300); - } + public static function getCapabilities($parameters){ + $result = array(); + $result['version'] = implode('.', OC_Util::getVersion()); + $result['versionstring'] = OC_Util::getVersionString(); + $result['edition'] = OC_Util::getEditionString(); + $result['bugfilechunking'] = 'true'; + $result['encryption'] = 'false'; + $result['versioning'] = OCP\App::isEnabled('files_versioning') ? 'true' : 'false'; + $result['undelete'] = 'true'; + $result['installedapps'] = OC_App::getEnabledApps(); + return new OC_OCS_Result($result); } public static function getUserPublickey($parameters) { diff --git a/ocs/routes.php b/ocs/routes.php index d6ee589df6..5e4758fb70 100644 --- a/ocs/routes.php +++ b/ocs/routes.php @@ -17,4 +17,5 @@ OC_API::register('get', '/privatedata/getattribute/{app}', array('OC_OCS_Private OC_API::register('get', '/privatedata/getattribute/{app}/{key}', array('OC_OCS_Privatedata', 'get'), 'ocs', OC_API::USER_AUTH); OC_API::register('post', '/privatedata/setattribute/{app}/{key}', array('OC_OCS_Privatedata', 'set'), 'ocs', OC_API::USER_AUTH); OC_API::register('post', '/privatedata/deleteattribute/{app}/{key}', array('OC_OCS_Privatedata', 'delete'), 'ocs', OC_API::USER_AUTH); - +// cloud +OC_API::register('get', '/cloud/capabilities', array('OC_OCS_Cloud', 'getCapabilities'), 'ocs', OC_API::USER_AUTH); \ No newline at end of file From a08e8632bb2fb0d3ec4c078af51aa2fdc76de888 Mon Sep 17 00:00:00 2001 From: Tom Needham Date: Wed, 16 Jan 2013 21:57:06 +0000 Subject: [PATCH 026/719] Add and order the result for /cloud/capabilities --- lib/ocs/cloud.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/ocs/cloud.php b/lib/ocs/cloud.php index 29db1e6361..7b94009b11 100644 --- a/lib/ocs/cloud.php +++ b/lib/ocs/cloud.php @@ -26,14 +26,15 @@ class OC_OCS_Cloud { public static function getCapabilities($parameters){ $result = array(); - $result['version'] = implode('.', OC_Util::getVersion()); - $result['versionstring'] = OC_Util::getVersionString(); + $result['bigfilechunking'] = 'true'; $result['edition'] = OC_Util::getEditionString(); - $result['bugfilechunking'] = 'true'; $result['encryption'] = 'false'; - $result['versioning'] = OCP\App::isEnabled('files_versioning') ? 'true' : 'false'; - $result['undelete'] = 'true'; $result['installedapps'] = OC_App::getEnabledApps(); + $result['syncpollinterval'] = 30; + $result['undelete'] = 'true'; + $result['version'] = implode('.', OC_Util::getVersion()); + $result['versioning'] = OCP\App::isEnabled('files_versioning') ? 'true' : 'false'; + $result['versionstring'] = OC_Util::getVersionString(); return new OC_OCS_Result($result); } From 934735043bd130db1dc854f444a076e6e8ef89d3 Mon Sep 17 00:00:00 2001 From: Tom Needham Date: Fri, 25 Jan 2013 12:48:59 +0000 Subject: [PATCH 027/719] API: Remove api response structure from OC_OCS_Result, handle multiple registered methods for api calls --- lib/api.php | 155 +++++++++++++++++++++++++++++++++++---------- lib/ocs/result.php | 48 ++++++++++---- 2 files changed, 158 insertions(+), 45 deletions(-) diff --git a/lib/api.php b/lib/api.php index 545b55757f..3e998bd9e4 100644 --- a/lib/api.php +++ b/lib/api.php @@ -33,6 +33,13 @@ class OC_API { const USER_AUTH = 1; const SUBADMIN_AUTH = 2; const ADMIN_AUTH = 3; + /** + * API Response Codes + */ + const RESPOND_UNAUTHORISED = 997; + const RESPOND_SERVER_ERROR = 996; + const RESPOND_NOT_FOUND = 998; + const RESPOND_UNKNOWN_ERROR = 999; private static $server; @@ -42,12 +49,12 @@ class OC_API { private static function init() { self::$server = new OC_OAuth_Server(new OC_OAuth_Store()); } - + /** * api actions */ protected static $actions = array(); - + /** * registers an api call * @param string $method the http method @@ -58,7 +65,7 @@ class OC_API { * @param array $defaults * @param array $requirements */ - public static function register($method, $url, $action, $app, + public static function register($method, $url, $action, $app, $authLevel = OC_API::USER_AUTH, $defaults = array(), $requirements = array()) { @@ -71,9 +78,9 @@ class OC_API { ->action('OC_API', 'call'); self::$actions[$name] = array(); } - self::$actions[$name] = array('app' => $app, 'action' => $action, 'authlevel' => $authLevel); + self::$actions[$name][] = array('app' => $app, 'action' => $action, 'authlevel' => $authLevel); } - + /** * handles an api call * @param array $parameters @@ -86,29 +93,99 @@ class OC_API { parse_str(file_get_contents("php://input"), $parameters['_delete']); } $name = $parameters['_route']; - // Check authentication and availability - if(self::isAuthorised(self::$actions[$name])) { - if(is_callable(self::$actions[$name]['action'])) { - $response = call_user_func(self::$actions[$name]['action'], $parameters); - if(!($response instanceof OC_OCS_Result)) { - $response = new OC_OCS_Result(null, 996, 'Internal Server Error'); - } - } else { - $response = new OC_OCS_Result(null, 998, 'Api method not found'); + // Foreach registered action + $responses = array(); + foreach(self::$actions[$name] as $action) { + // Check authentication and availability + if(!self::isAuthorised(self::$actions[$name])) { + $responses[] = array( + 'app' => $action['app'], + 'response' => new OC_OCS_Result(null, OC_API::RESPOND_UNAUTHORISED, 'Unauthorised'), + ); + continue; } - } else { - header('WWW-Authenticate: Basic realm="Authorization Required"'); - header('HTTP/1.0 401 Unauthorized'); - $response = new OC_OCS_Result(null, 997, 'Unauthorised'); + if(!is_callable($action['action'])) { + $responses[] = array( + 'app' => $action['app'], + 'response' => new OC_OCS_Result(null, OC_API::RESPOND_NOT_FOUND, 'Api method not found'), + ); + continue; + } + // Run the action + $responses[] = array( + 'app' => $action['app'], + 'response' => call_user_func($action['action'], $parameters), + ); } - // Send the response + + + $response = self::mergeResponses($responses); $formats = array('json', 'xml'); $format = !empty($_GET['format']) && in_array($_GET['format'], $formats) ? $_GET['format'] : 'xml'; - self::respond($response, $format); - // logout the user to be stateless + self::respond($response); OC_User::logout(); } + + /** + * merge the returned result objects into one response + * @param array $responses + */ + private static function mergeResponses($responses) { + $response = array(); + // Sort into shipped and thirdparty + $shipped = array( + 'succeded' => array(), + 'failed' => array(), + ); + $thirdparty = array( + 'succeeded' => array(), + 'failed' => array(), + ); + foreach($responses as $response) { + if(OC_App::isShipped($response['app'])) { + if($response['response']->succeeded()) { + $shipped['succeeded'][$response['app']] = $response['response']; + } else { + $shipped['failed'][$response['app']] = $response['response']; + } + } else { + if($response['response']->succeeded()) { + $thirdparty['succeeded'][$response['app']] = $response['response']; + } else { + $thirdparty['failed'][$response['app']] = $response['response']; + } + } + } + // Remove any error responses if there is one shipped response that succeeded + if(!empty($shipped['succeeded'])){ + $responses = array_merge($shipped['succeeded'], $thirdparty['succeeded']); + } else if(!empty($shipped['failed'])){ + // Which shipped response do we use if they all failed? + // They may have failed for different reasons (different status codes) + // Which reponse code should we return? + // Maybe any that are not OC_API::RESPOND_SERVER_ERROR + $response = $shipped['failed'][0]; + return $response; + } else { + // Return the third party failure result + $response = $thirdparty['failed'][0]; + return $response; + } + // Merge the successful responses + $meta = array(); + $data = array(); + foreach($responses as $app => $response) { + if(OC_App::isShipped($app)) { + $data = array_merge_recursive($response->getData(), $data); + } else { + $data = array_merge_recursive($data, $response->getData()); + } + } + $result = new OC_OCS_Result($data, 100); + return $result; + } + /** * authenticate the api call * @param array $action the action details as supplied to OC_API::register() @@ -132,7 +209,8 @@ class OC_API { return false; } else { $subAdmin = OC_SubAdmin::isSubAdmin($user); - if($subAdmin) { + $admin = OC_Group::inGroup($user, 'admin'); + if($subAdmin || $admin) { return true; } else { return false; @@ -145,7 +223,7 @@ class OC_API { if(!$user) { return false; } else { - return OC_User::isAdminUser($user); + return OC_Group::inGroup($user, 'admin'); } break; default: @@ -153,25 +231,35 @@ class OC_API { return false; break; } - } - + } + /** * http basic auth * @return string|false (username, or false on failure) */ - private static function loginUser(){ + private static function loginUser(){ $authUser = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : ''; $authPw = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : ''; return OC_User::login($authUser, $authPw) ? $authUser : false; } - + /** * respond to a call - * @param int|array $result the result from the api method + * @param OC_OCS_Result $result * @param string $format the format xml|json */ private static function respond($result, $format='xml') { - $response = array('ocs' => $result->getResult()); + // Send 401 headers if unauthorised + if($result->getStatusCode() === self::RESPOND_UNAUTHORISED) { + header('WWW-Authenticate: Basic realm="Authorisation Required"'); + header('HTTP/1.0 401 Unauthorized'); + } + $response = array( + 'ocs' => array( + 'meta' => $result->getMeta(), + 'data' => $result->getData(), + ), + ); if ($format == 'json') { OC_JSON::encodedPrint($response); } else if ($format == 'xml') { @@ -188,10 +276,13 @@ class OC_API { private static function toXML($array, $writer) { foreach($array as $k => $v) { - if (is_numeric($k)) { + if ($k[0] === '@') { + $writer->writeAttribute(substr($k, 1), $v); + continue; + } else if (is_numeric($k)) { $k = 'element'; } - if (is_array($v)) { + if(is_array($v)) { $writer->startElement($k); self::toXML($v, $writer); $writer->endElement(); @@ -200,5 +291,5 @@ class OC_API { } } } - + } diff --git a/lib/ocs/result.php b/lib/ocs/result.php index 65b2067fc3..8ab378d79c 100644 --- a/lib/ocs/result.php +++ b/lib/ocs/result.php @@ -49,26 +49,48 @@ class OC_OCS_Result{ public function setItemsPerPage(int $items) { $this->perPage = $items; } - + /** - * returns the data associated with the api result + * get the status code + * @return int + */ + public function getStatusCode() { + return $this->statusCode; + } + + /** + * get the meta data for the result * @return array */ - public function getResult() { - $return = array(); - $return['meta'] = array(); - $return['meta']['status'] = ($this->statusCode === 100) ? 'ok' : 'failure'; - $return['meta']['statuscode'] = $this->statusCode; - $return['meta']['message'] = $this->message; + public function getMeta() { + $meta = array(); + $meta['status'] = ($this->statusCode === 100) ? 'ok' : 'failure'; + $meta['statuscode'] = $this->statusCode; + $meta['message'] = $this->message; if(isset($this->items)) { - $return['meta']['totalitems'] = $this->items; + $meta['totalitems'] = $this->items; } if(isset($this->perPage)) { - $return['meta']['itemsperpage'] = $this->perPage; + $meta['itemsperpage'] = $this->perPage; } - $return['data'] = $this->data; - // Return the result data. - return $return; + return $meta; + + } + + /** + * get the result data + * @return array|string|int + */ + public function getData() { + return $this->data; + } + + /** + * return bool if the method succedded + * @return bool + */ + public function succeeded() { + return (substr($this->statusCode, 0, 1) === '1'); } From 2fa3efd697833664cfa91d61dbd83cbd49a46417 Mon Sep 17 00:00:00 2001 From: hkjolhede Date: Sat, 26 Jan 2013 19:44:09 +0100 Subject: [PATCH 028/719] Update lib/filestorage/common.php Added function to clean a path --- lib/filestorage/common.php | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lib/filestorage/common.php b/lib/filestorage/common.php index b97eb79d8d..7a9e8b8944 100644 --- a/lib/filestorage/common.php +++ b/lib/filestorage/common.php @@ -288,4 +288,28 @@ abstract class OC_Filestorage_Common extends OC_Filestorage { public function getOwner($path) { return OC_User::getUser(); } + + /** + * clean a path, i.e. remove all redundant '.' and '..' + * making sure that it can't point to higher than '/' + * @param $path The path to clean + * @return string cleaned path + */ + public function cleanPath($path) { + if (strlen($path) == 0 or $path[0] != '/') { + $path = '/' . $path; + } + + $chunks = explode('/', $path); + $output = array(); + foreach ($chunks as $chunk) { + if ($chunk == '..') { + array_pop($output); + } else if ($chunk == '.') { + } else { + $output[] = $chunk; + } + } + return implode('/', $output); + } } From a26d50640fc4a2524255c85b10fb010676b3e22d Mon Sep 17 00:00:00 2001 From: hkjolhede Date: Sat, 26 Jan 2013 19:46:23 +0100 Subject: [PATCH 029/719] Update apps/files_external/lib/sftp.php Added cleaning the root path --- apps/files_external/lib/sftp.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index 22cb8d1651..5395618297 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -27,7 +27,7 @@ class OC_Filestorage_SFTP extends OC_Filestorage_Common { } $this->user = $params['user']; $this->password = $params['password']; - $this->root = isset($params['root']) ? $params['root'] : '/'; + $this->root = isset($params['root']) ? $this->cleanPath($params['root']) : '/'; if ($this->root[0] != '/') $this->root = '/' . $this->root; if (substr($this->root, -1, 1) != '/') $this->root .= '/'; From 77763fb856720d7cc2a64f1a6955c10efa0f6e3f Mon Sep 17 00:00:00 2001 From: hkjolhede Date: Sun, 27 Jan 2013 16:07:21 +0100 Subject: [PATCH 030/719] Update lib/filestorage/common.php Small cleanup --- lib/filestorage/common.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/filestorage/common.php b/lib/filestorage/common.php index 7a9e8b8944..d88e5221ce 100644 --- a/lib/filestorage/common.php +++ b/lib/filestorage/common.php @@ -300,9 +300,8 @@ abstract class OC_Filestorage_Common extends OC_Filestorage { $path = '/' . $path; } - $chunks = explode('/', $path); $output = array(); - foreach ($chunks as $chunk) { + foreach (explode('/', $path) as $chunk) { if ($chunk == '..') { array_pop($output); } else if ($chunk == '.') { From 4d3d8ed296a148b5dfdd7970ba2779e39ebe91db Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 31 Jan 2013 17:59:01 +0100 Subject: [PATCH 031/719] Trash: highlight Files navigation entry while in trash --- apps/files_trashbin/index.php | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php index 46a601cfdd..a07ef8a68a 100644 --- a/apps/files_trashbin/index.php +++ b/apps/files_trashbin/index.php @@ -1,8 +1,10 @@ getAbsolutePath($dir); $dirContent = opendir($fullpath); $i = 0; @@ -35,7 +37,7 @@ if ($dir) { 'type' => $view->is_dir($dir.'/'.$entryName) ? 'dir' : 'file', 'location' => $dir, ); - } + } } closedir($fullpath); @@ -66,28 +68,28 @@ foreach ($result as $r) { $files[] = $i; } -// Make breadcrumb -$breadcrumb = array(array('dir' => '', 'name' => 'Trash')); -$pathtohere = ''; -foreach (explode('/', $dir) as $i) { +// Make breadcrumb +$breadcrumb = array(array('dir' => '', 'name' => 'Trash')); +$pathtohere = ''; +foreach (explode('/', $dir) as $i) { if ($i != '') { if ( preg_match('/^(.+)\.d[0-9]+$/', $i, $match) ) { $name = $match[1]; } else { $name = $i; - } - $pathtohere .= '/' . $i; - $breadcrumb[] = array('dir' => $pathtohere, 'name' => $name); - } + } + $pathtohere .= '/' . $i; + $breadcrumb[] = array('dir' => $pathtohere, 'name' => $name); + } } -$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', ''); -$breadcrumbNav->assign('breadcrumb', $breadcrumb, false); +$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', ''); +$breadcrumbNav->assign('breadcrumb', $breadcrumb, false); $breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php') . '?dir=', false); $list = new OCP\Template('files_trashbin', 'part.list', ''); $list->assign('files', $files, false); -$list->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php'). '?dir='.$dir, false); +$list->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php'). '?dir='.$dir, false); $list->assign('downloadURL', OCP\Util::linkTo('files_trashbin', 'download.php') . '?file='.$dir, false); $list->assign('disableSharing', true); $list->assign('dirlisting', $dirlisting); From 73cd1169684fe52fb63f1d7695c2bdaab1fc7f46 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 31 Jan 2013 18:04:00 +0100 Subject: [PATCH 032/719] Trash: don't use depricated filesystem api classes --- apps/files_trashbin/index.php | 2 +- apps/files_trashbin/lib/trash.php | 212 +++++++++++++++--------------- 2 files changed, 107 insertions(+), 107 deletions(-) diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php index a07ef8a68a..4f0a697939 100644 --- a/apps/files_trashbin/index.php +++ b/apps/files_trashbin/index.php @@ -97,6 +97,6 @@ $list->assign('disableDownloadActions', true); $tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage(), false); $tmpl->assign('fileList', $list->fetchPage(), false); $tmpl->assign('files', $files); -$tmpl->assign('dir', OC_Filesystem::normalizePath($view->getAbsolutePath())); +$tmpl->assign('dir', \OC\Files\Filesystem::normalizePath($view->getAbsolutePath())); $tmpl->printPage(); diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index a7eff3d44e..1c66fac890 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -1,109 +1,109 @@ . - * - */ +/** + * ownCloud - trash bin + * + * @author Bjoern Schiessle + * @copyright 2013 Bjoern Schiessle schiessle@owncloud.com + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see . + * + */ + +namespace OCA_Trash; -namespace OCA_Trash; - class Trashbin { const DEFAULT_RETENTION_OBLIGATION=180; // how long do we keep files in the trash bin if no other value is defined in the config file (unit: days) /** * move file to the trash bin * - * @param $file_path path to the deleted file/directory relative to the files root directory + * @param string $file_path path to the deleted file/directory relative to the files root directory */ public static function move2trash($file_path) { $user = \OCP\User::getUser(); - $view = new \OC_FilesystemView('/'. $user); - if (!$view->is_dir('files_trashbin')) { - $view->mkdir('files_trashbin'); - $view->mkdir("versions_trashbin"); - } - - $path_parts = pathinfo($file_path); - - $deleted = $path_parts['basename']; - $location = $path_parts['dirname']; - $timestamp = time(); - $mime = $view->getMimeType('files'.$file_path); - - if ( $view->is_dir('files'.$file_path) ) { - $type = 'dir'; - } else { - $type = 'file'; - } + $view = new \OC\Files\View('/'. $user); + if (!$view->is_dir('files_trashbin')) { + $view->mkdir('files_trashbin'); + $view->mkdir("versions_trashbin"); + } + + $path_parts = pathinfo($file_path); + + $deleted = $path_parts['basename']; + $location = $path_parts['dirname']; + $timestamp = time(); + $mime = $view->getMimeType('files'.$file_path); + + if ( $view->is_dir('files'.$file_path) ) { + $type = 'dir'; + } else { + $type = 'file'; + } self::copy_recursive($file_path, 'files_trashbin/'.$deleted.'.d'.$timestamp, $view); - if ( $view->file_exists('files_trashbin/'.$deleted.'.d'.$timestamp) ) { - $query = \OC_DB::prepare("INSERT INTO *PREFIX*files_trash (id,timestamp,location,type,mime,user) VALUES (?,?,?,?,?,?)"); + if ( $view->file_exists('files_trashbin/'.$deleted.'.d'.$timestamp) ) { + $query = \OC_DB::prepare("INSERT INTO *PREFIX*files_trash (id,timestamp,location,type,mime,user) VALUES (?,?,?,?,?,?)"); $result = $query->execute(array($deleted, $timestamp, $location, $type, $mime, $user)); if ( !$result ) { // if file couldn't be added to the database than also don't store it in the trash bin. $view->deleteAll('files_trashbin/'.$deleted.'.d'.$timestamp); \OC_Log::write('files_trashbin', 'trash bin database couldn\'t be updated', \OC_log::ERROR); return; - } - - if ( \OCP\App::isEnabled('files_versions') ) { - if ( $view->is_dir('files_versions'.$file_path) ) { - $view->rename('files_versions'.$file_path, 'versions_trashbin/'. $deleted.'.d'.$timestamp); - } else if ( $versions = \OCA_Versions\Storage::getVersions($file_path) ) { - foreach ($versions as $v) { - $view->rename('files_versions'.$v['path'].'.v'.$v['version'], 'versions_trashbin/'. $deleted.'.v'.$v['version'].'.d'.$timestamp); - } - } + } + + if ( \OCP\App::isEnabled('files_versions') ) { + if ( $view->is_dir('files_versions'.$file_path) ) { + $view->rename('files_versions'.$file_path, 'versions_trashbin/'. $deleted.'.d'.$timestamp); + } else if ( $versions = \OCA_Versions\Storage::getVersions($file_path) ) { + foreach ($versions as $v) { + $view->rename('files_versions'.$v['path'].'.v'.$v['version'], 'versions_trashbin/'. $deleted.'.v'.$v['version'].'.d'.$timestamp); + } + } } } else { \OC_Log::write('files_trashbin', 'Couldn\'t move '.$file_path.' to the trash bin' , \OC_log::ERROR); } - self::expire(); + self::expire(); } /** * restore files from trash bin - * @param $file path to the deleted file - * @param $filename name of the file - * @param $timestamp time when the file was deleted + * @param string $file path to the deleted file + * @param string $filename name of the file + * @param int $timestamp time when the file was deleted */ public static function restore($file, $filename, $timestamp) { $user = \OCP\User::getUser(); - $view = new \OC_FilesystemView('/'.$user); + $view = new \OC\Files\View('/'.$user); if ( $timestamp ) { - $query = \OC_DB::prepare('SELECT location,type FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?'); + $query = \OC_DB::prepare('SELECT location,type FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?'); $result = $query->execute(array($user,$filename,$timestamp))->fetchAll(); if ( count($result) != 1 ) { \OC_Log::write('files_trashbin', 'trash bin database inconsistent!', \OC_Log::ERROR); return false; } - // if location no longer exists, restore file in the root directory - $location = $result[0]['location']; + // if location no longer exists, restore file in the root directory + $location = $result[0]['location']; if ( $result[0]['location'] != '/' && (!$view->is_dir('files'.$result[0]['location']) || - !$view->isUpdatable('files'.$result[0]['location'])) ) { - $location = ''; + !$view->isUpdatable('files'.$result[0]['location'])) ) { + $location = ''; } } else { $path_parts = pathinfo($filename); @@ -114,8 +114,8 @@ class Trashbin { $location = ''; } - $source = \OC_Filesystem::normalizePath('files_trashbin/'.$file); - $target = \OC_Filesystem::normalizePath('files/'.$location.'/'.$filename); + $source = \OC\Files\Filesystem::normalizePath('files_trashbin/'.$file); + $target = \OC\Files\Filesystem::normalizePath('files/'.$location.'/'.$filename); // we need a extension in case a file/dir with the same name already exists $ext = self::getUniqueExtension($location, $filename, $view); @@ -123,22 +123,22 @@ class Trashbin { if( $view->rename($source, $target.$ext) ) { $view->touch($target.$ext, $mtime); // if versioning app is enabled, copy versions from the trash bin back to the original location - if ( \OCP\App::isEnabled('files_versions') ) { - if ( $result[0]['type'] == 'dir' ) { - $view->rename(\OC_Filesystem::normalizePath('versions_trashbin/'. $file), \OC_Filesystem::normalizePath('files_versions/'.$location.'/'.$filename.$ext)); - } else if ( $versions = self::getVersionsFromTrash($file, $timestamp) ) { + if ( \OCP\App::isEnabled('files_versions') ) { + if ( $result[0]['type'] == 'dir' ) { + $view->rename(\OC\Files\Filesystem::normalizePath('versions_trashbin/'. $file), \OC\Files\Filesystem::normalizePath('files_versions/'.$location.'/'.$filename.$ext)); + } else if ( $versions = self::getVersionsFromTrash($file, $timestamp) ) { foreach ($versions as $v) { if ($timestamp ) { $view->rename('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); } else { $view->rename('versions_trashbin/'.$file.'.v'.$v, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); - } - } - } + } + } + } } if ( $timestamp ) { - $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?'); + $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?'); $query->execute(array($user,$filename,$timestamp)); } @@ -150,15 +150,15 @@ class Trashbin { return false; } - /** - * clean up the trash bin - */ + /** + * clean up the trash bin + */ private static function expire() { - $view = new \OC_FilesystemView('/'.\OCP\User::getUser()); + $view = new \OC\Files\View('/'.\OCP\User::getUser()); $user = \OCP\User::getUser(); - $query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash WHERE user=?'); + $query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash WHERE user=?'); $result = $query->execute(array($user))->fetchAll(); $retention_obligation = \OC_Config::getValue('trashbin_retention_obligation', self::DEFAULT_RETENTION_OBLIGATION); @@ -180,16 +180,16 @@ class Trashbin { } } - $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND timestampexecute(array($user,$limit)); + $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND timestampexecute(array($user,$limit)); } /** * recursive copy to copy a whole directory * - * @param $source source path, relative to the users files directory - * @param $destination destination path relative to the users root directoy - * @param $view file view for the users root directory + * @param string $source source path, relative to the users files directory + * @param string $destination destination path relative to the users root directoy + * @param \OC\Files\View $view file view for the users root directory */ private static function copy_recursive( $source, $destination, $view ) { if ( $view->is_dir( 'files'.$source ) ) { @@ -212,28 +212,28 @@ class Trashbin { /** * find all versions which belong to the file we want to restore - * @param $filename name of the file which should be restored - * @param $timestamp timestamp when the file was deleted + * @param string $filename name of the file which should be restored + * @param int $timestamp timestamp when the file was deleted */ private static function getVersionsFromTrash($filename, $timestamp) { - $view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/versions_trashbin'); - $versionsName = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath($filename); - $versions = array(); + $view = new \OC\Files\View('/'.\OCP\User::getUser().'/versions_trashbin'); + $versionsName = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath($filename); + $versions = array(); if ($timestamp ) { - // fetch for old versions + // fetch for old versions $matches = glob( $versionsName.'.v*.d'.$timestamp ); $offset = -strlen($timestamp)-2; } else { $matches = glob( $versionsName.'.v*' ); - } - + } + foreach( $matches as $ma ) { if ( $timestamp ) { - $parts = explode( '.v', substr($ma, 0, $offset) ); + $parts = explode( '.v', substr($ma, 0, $offset) ); $versions[] = ( end( $parts ) ); } else { - $parts = explode( '.v', $ma ); + $parts = explode( '.v', $ma ); $versions[] = ( end( $parts ) ); } } @@ -242,23 +242,23 @@ class Trashbin { /** * find unique extension for restored file if a file with the same name already exists - * @param $location where the file should be restored - * @param $filename name of the file - * @param $view filesystem view relative to users root directory + * @param string $location where the file should be restored + * @param string $filename name of the file + * @param \OC\Files\View $view filesystem view relative to users root directory * @return string with unique extension */ private static function getUniqueExtension($location, $filename, $view) { - $ext = ''; - if ( $view->file_exists('files'.$location.'/'.$filename) ) { - $tmpext = '.restored'; - $ext = $tmpext; - $i = 1; - while ( $view->file_exists('files'.$location.'/'.$filename.$ext) ) { - $ext = $tmpext.$i; - $i++; - } + $ext = ''; + if ( $view->file_exists('files'.$location.'/'.$filename) ) { + $tmpext = '.restored'; + $ext = $tmpext; + $i = 1; + while ( $view->file_exists('files'.$location.'/'.$filename.$ext) ) { + $ext = $tmpext.$i; + $i++; + } } return $ext; } -} +} From 3756f235ce2739c6384d3a075348b9d92dd827fe Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 31 Jan 2013 18:14:22 +0100 Subject: [PATCH 033/719] Trash: enable fileactions while viewing trash --- apps/files_trashbin/js/trash.js | 36 ++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js index 3ad0ab04fb..d45430dcbd 100644 --- a/apps/files_trashbin/js/trash.js +++ b/apps/files_trashbin/js/trash.js @@ -18,10 +18,10 @@ $(document).ready(function() { OC.dialogs.alert(result.data.message, 'Error'); } }); - + }); }; - + // Sets the select_all checkbox behaviour : $('#select_all').click(function() { if($(this).attr('checked')){ @@ -63,19 +63,19 @@ $(document).ready(function() { } } processSelection(); - }); - + }); + $('.undelete').click('click',function(event) { var spinner = ''; var files=getSelectedFiles('file'); var fileslist=files.join(';'); var dirlisting=getSelectedFiles('dirlisting')[0]; - + for (var i in files) { var undeleteAction = $('tr').filterAttr('data-file',files[i]).children("td.date"); undeleteAction[0].innerHTML = undeleteAction[0].innerHTML+spinner; } - + $.post(OC.filePath('files_trashbin','ajax','undelete.php'), {files:fileslist, dirlisting:dirlisting}, function(result){ @@ -86,10 +86,24 @@ $(document).ready(function() { if (result.status != 'success') { OC.dialogs.alert(result.data.message, 'Error'); } - }); + }); }); - + $('#fileList').on('click', 'td.filename a', function(event) { + var filename = $(this).parent().parent().attr('data-file'); + var tr = $('tr').filterAttr('data-file',filename); + var renaming = tr.data('renaming'); + if(!renaming && !FileList.isLoading(filename)){ + var mime = $(this).parent().parent().data('mime'); + var type = $(this).parent().parent().data('type'); + var permissions = $(this).parent().parent().data('permissions'); + var action = FileActions.getDefault(mime, type, permissions); + if(action){ + event.preventDefault(); + action(filename); + } + } + }); }); function processSelection(){ @@ -155,4 +169,8 @@ function getSelectedFiles(property){ } }); return files; -} \ No newline at end of file +} + +function fileDownloadPath(dir, file) { + return OC.filePath('files_trashbin', '', 'download.php') + '?file='+encodeURIComponent(file); +} From 9d74ce45955ce9969b6d356a114b02780b5645f8 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 31 Jan 2013 19:19:58 +0100 Subject: [PATCH 034/719] Trash: fix opening folders --- apps/files_trashbin/js/trash.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js index d45430dcbd..f2797347b8 100644 --- a/apps/files_trashbin/js/trash.js +++ b/apps/files_trashbin/js/trash.js @@ -104,6 +104,8 @@ $(document).ready(function() { } } }); + + FileActions.actions.dir = {}; }); function processSelection(){ From 697536cf6ad1c9a862c32605b807172dfa680d22 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 31 Jan 2013 19:36:59 +0100 Subject: [PATCH 035/719] Trash: use the same sorting algoritm as files --- apps/files_trashbin/index.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php index 4f0a697939..a4eb5cd216 100644 --- a/apps/files_trashbin/index.php +++ b/apps/files_trashbin/index.php @@ -68,6 +68,18 @@ foreach ($result as $r) { $files[] = $i; } +function fileCmp($a, $b) { + if ($a['type'] == 'dir' and $b['type'] != 'dir') { + return -1; + } elseif ($a['type'] != 'dir' and $b['type'] == 'dir') { + return 1; + } else { + return strnatcasecmp($a['name'], $b['name']); + } +} + +usort($files, "fileCmp"); + // Make breadcrumb $breadcrumb = array(array('dir' => '', 'name' => 'Trash')); $pathtohere = ''; From 8b9cabf51440b75fab21f4e788d7fc582eeb6337 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 31 Jan 2013 23:45:37 +0100 Subject: [PATCH 036/719] fixing variable name type --- lib/ocs/cloud.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ocs/cloud.php b/lib/ocs/cloud.php index 2b53f00770..d617f68526 100644 --- a/lib/ocs/cloud.php +++ b/lib/ocs/cloud.php @@ -59,7 +59,7 @@ class OC_OCS_Cloud { if(OC_User::userExists($parameters['user'])) { // calculate the disc space $userDir = '/'.$parameters['user'].'/files'; - \OC\Files\Filesystem::init($useDir); + \OC\Files\Filesystem::init($userDir); $rootInfo = \OC\Files\Filesystem::getFileInfo(''); $sharedInfo = \OC\Files\Filesystem::getFileInfo('/Shared'); $used = $rootInfo['size'] - $sharedInfo['size']; From aec5ab3ad2adc33a32158156a59f4c00606f8be9 Mon Sep 17 00:00:00 2001 From: Tom Needham Date: Mon, 4 Feb 2013 18:34:28 +0000 Subject: [PATCH 037/719] Remove app related values and change structure of /cloud/capabilties call --- lib/ocs/cloud.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/ocs/cloud.php b/lib/ocs/cloud.php index 7b94009b11..567defa663 100644 --- a/lib/ocs/cloud.php +++ b/lib/ocs/cloud.php @@ -26,15 +26,15 @@ class OC_OCS_Cloud { public static function getCapabilities($parameters){ $result = array(); - $result['bigfilechunking'] = 'true'; - $result['edition'] = OC_Util::getEditionString(); - $result['encryption'] = 'false'; - $result['installedapps'] = OC_App::getEnabledApps(); - $result['syncpollinterval'] = 30; - $result['undelete'] = 'true'; - $result['version'] = implode('.', OC_Util::getVersion()); - $result['versioning'] = OCP\App::isEnabled('files_versioning') ? 'true' : 'false'; - $result['versionstring'] = OC_Util::getVersionString(); + list($major, $minor, $micro) = OC_Util::getVersion(); + $result['version'] = array( + 'major' => $major, + 'minor' => $minor, + 'micro' => $micro, + 'string' => OC_Util::getVersionString(), + 'edition' => OC_Util::getEditionString(), + ); + $result['apps'] = array(); return new OC_OCS_Result($result); } From 1adcc5fd23004cd7253c87134c30d853e1b3b8b8 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Tue, 5 Feb 2013 23:33:44 +0100 Subject: [PATCH 038/719] basic WebDAV test in place now --- lib/base.php | 23 +++++++++++++++++++++++ lib/util.php | 30 ++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/lib/base.php b/lib/base.php index 90e64f13af..6dab980dd0 100644 --- a/lib/base.php +++ b/lib/base.php @@ -546,6 +546,29 @@ class OC { require_once 'core/setup.php'; exit(); } + + // post installation checks + if (!OC_Config::getValue("post-installation-checked", false)) { + // setup was successful -> webdav testing now + $request = OC_Request::getPathInfo(); + if(substr($request, -4) !== '.css' and substr($request, -3) !== '.js' and substr($request, -5) !== '.json') { + if (OC_Util::isWebDAVWorking()) { + OC_Config::setValue("post-installation-checked", true); + } else { + $l=OC_L10N::get('lib'); + + $error = $l->t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.'); + $hint = $l->t('Please double check the installation guides.', 'http://doc.owncloud.org/server/5.0/admin_manual/installation.html'); + + $tmpl = new OC_Template('', 'error', 'guest'); + $tmpl->assign('errors', array(1 => array('error' => $error, 'hint' => $hint)), false); + $tmpl->printPage(); + exit(); + } + } + } + + $request = OC_Request::getPathInfo(); if(substr($request, -3) !== '.js'){// we need these files during the upgrade self::checkMaintenanceMode(); diff --git a/lib/util.php b/lib/util.php index 4932be2d6c..ae0900d7e8 100755 --- a/lib/util.php +++ b/lib/util.php @@ -514,6 +514,36 @@ class OC_Util { } } + /** + * we test if webDAV is working properly + * + * The basic assumption is that if the server returns 401/Not Authenticated for an unauthenticated PROPFIND + * the web server it self is setup properly. + * + * Why not an authenticated PROFIND and other verbs? + * - We don't have the password available + * - We have no idea about other auth methods implemented (e.g. OAuth with Bearer header) + * + */ + public static function isWebDAVWorking() { + $settings = array( + 'baseUri' => OC_Helper::linkToRemote('webdav'), + ); + + $client = new \Sabre_DAV_Client($settings); + + $return = true; + try { + // test PROPFIND + $client->propfind('', array('{DAV:}resourcetype')); + } catch(\Sabre_DAV_Exception_NotAuthenticated $e) { + $return = true; + } catch(\Exception $e) { + $return = false; + } + + return $return; + } /** * Check if the setlocal call doesn't work. This can happen if the right local packages are not available on the server. From a721f7d59f4851bf13b6387e1f6d19fa3175d61b Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Wed, 6 Feb 2013 02:26:35 +0100 Subject: [PATCH 039/719] check whether user belongs to the backend before calling getHome() --- lib/user.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/user.php b/lib/user.php index f953d22154..f530163e5b 100644 --- a/lib/user.php +++ b/lib/user.php @@ -467,7 +467,7 @@ class OC_User { */ public static function getHome($uid) { foreach(self::$_usedBackends as $backend) { - if($backend->implementsActions(OC_USER_BACKEND_GET_HOME)) { + if($backend->implementsActions(OC_USER_BACKEND_GET_HOME) && $backend->userExists($uid)) { $result=$backend->getHome($uid); if($result) { return $result; From 3cef8f1216a776c1537105cc24facc44e2843a9a Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Wed, 6 Feb 2013 02:28:09 +0100 Subject: [PATCH 040/719] LDAP: do not store user home as it destroys configurability. always fetch it. use of cache is save however, it is cleared when settings are saved --- apps/user_ldap/user_ldap.php | 53 +++++++++++++++++------------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index 6aa8cd9b83..540b22c7dc 100644 --- a/apps/user_ldap/user_ldap.php +++ b/apps/user_ldap/user_ldap.php @@ -170,41 +170,38 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { return false; } - /** - * @brief determine the user's home directory - * @param string $uid the owncloud username - * @return boolean - */ - private function determineHomeDir($uid) { - if(strpos($this->connection->homeFolderNamingRule, 'attr:') === 0) { - $attr = substr($this->connection->homeFolderNamingRule, strlen('attr:')); - $homedir = $this->readAttribute($this->username2dn($uid), $attr); - if($homedir) { - $homedir = \OCP\Config::getSystemValue( "datadirectory", \OC::$SERVERROOT."/data" ) . '/' . $homedir[0]; - \OCP\Config::setUserValue($uid, 'user_ldap', 'homedir', $homedir); - return $homedir; - } - } - - //fallback and default: username - $homedir = \OCP\Config::getSystemValue( "datadirectory", \OC::$SERVERROOT."/data" ) . '/' . $uid; - \OCP\Config::setUserValue($uid, 'user_ldap', 'homedir', $homedir); - return $homedir; - } - /** * @brief get the user's home directory * @param string $uid the username * @return boolean */ public function getHome($uid) { - if($this->userExists($uid)) { - $homedir = \OCP\Config::getUserValue($uid, 'user_ldap', 'homedir', false); - if(!$homedir) { - $homedir = $this->determineHomeDir($uid); - } - return $homedir; + $cacheKey = 'getHome'.$uid; + if($this->connection->isCached($cacheKey)) { + return $this->connection->getFromCache($cacheKey); } + if(strpos($this->connection->homeFolderNamingRule, 'attr:') === 0) { + $attr = substr($this->connection->homeFolderNamingRule, strlen('attr:')); + $homedir = $this->readAttribute($this->username2dn($uid), $attr); + if($homedir && isset($homedir[0])) { + $path = $homedir[0]; + //if attribute's value is an absolute path take this, otherwise append it to data dir + //check for / at the beginning or pattern c:\ resp. c:/ + if( + '/' == $path[0] + || (3 < strlen($path) && ctype_alpha($path[0]) && $path[1] == ':' && ('\\' == $path[2] || '/' == $path[2])) + ) { + $homedir = $path; + } else { + $homedir = \OCP\Config::getSystemValue( "datadirectory", \OC::$SERVERROOT."/data" ) . '/' . $homedir[0]; + } + $this->connection->writeToCache($cacheKey, $homedir); + return $homedir; + } + } + + //false will apply default behaviour as defined and done by OC_User + $this->connection->writeToCache($cacheKey, false); return false; } From c6aa370604d5a5898719ef9378f3444171016768 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Wed, 6 Feb 2013 02:29:03 +0100 Subject: [PATCH 041/719] code style --- apps/user_ldap/user_ldap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index 540b22c7dc..0962756228 100644 --- a/apps/user_ldap/user_ldap.php +++ b/apps/user_ldap/user_ldap.php @@ -193,7 +193,7 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { ) { $homedir = $path; } else { - $homedir = \OCP\Config::getSystemValue( "datadirectory", \OC::$SERVERROOT."/data" ) . '/' . $homedir[0]; + $homedir = \OCP\Config::getSystemValue('datadirectory', \OC::$SERVERROOT.'/data' ) . '/' . $homedir[0]; } $this->connection->writeToCache($cacheKey, $homedir); return $homedir; From 993831b6df5e7df1a6fcc7344f1fecd93006674c Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Wed, 6 Feb 2013 02:29:55 +0100 Subject: [PATCH 042/719] LDAP: version bump -> clean up database --- apps/user_ldap/appinfo/update.php | 5 ++++- apps/user_ldap/appinfo/version | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php index f9681e38e6..5b8364884f 100644 --- a/apps/user_ldap/appinfo/update.php +++ b/apps/user_ldap/appinfo/update.php @@ -87,4 +87,7 @@ if(!isset($connector)) { } //it is required, that connections do have ldap_configuration_active setting stored in the database $connector->getConfiguration(); -$connector->saveConfiguration(); \ No newline at end of file +$connector->saveConfiguration(); + +// we don't save it anymore, was a well-meant bad idea +\OC_Preferences::deleteKey('%', 'user_ldap' , 'homedir'); \ No newline at end of file diff --git a/apps/user_ldap/appinfo/version b/apps/user_ldap/appinfo/version index 705e30728e..44938339fa 100644 --- a/apps/user_ldap/appinfo/version +++ b/apps/user_ldap/appinfo/version @@ -1 +1 @@ -0.3.9.0 \ No newline at end of file +0.3.9.1 \ No newline at end of file From af2acadc6602b2ebd33a8b7d74d82e1590870c0a Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Wed, 6 Feb 2013 13:04:35 +0100 Subject: [PATCH 043/719] LDAP: fix settings handling of homeFolderNamingRule option --- apps/user_ldap/lib/connection.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/user_ldap/lib/connection.php b/apps/user_ldap/lib/connection.php index acc33e047c..63d0f2ac20 100644 --- a/apps/user_ldap/lib/connection.php +++ b/apps/user_ldap/lib/connection.php @@ -294,6 +294,11 @@ class Connection { $params = $this->getConfigTranslationArray(); foreach($config as $parameter => $value) { + if(($parameter == 'homeFolderNamingRule' + || $params[$parameter] == 'homeFolderNamingRule') + && !empty($value)) { + $value = 'attr:'.$value; + } if(isset($this->config[$parameter])) { $this->config[$parameter] = $value; if(is_array($setParameters)) { @@ -324,7 +329,7 @@ class Connection { $value = base64_encode($value); break; case 'homeFolderNamingRule': - $value = empty($value) ? 'opt:username' : 'attr:'.$value; + $value = empty($value) ? 'opt:username' : $value; break; case 'ldapBase': case 'ldapBaseUsers': From 3582f7bd09f81e1aadb583ab0d36fb0cbc695514 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Wed, 6 Feb 2013 17:54:20 +0100 Subject: [PATCH 044/719] Execute the post setup check after finishing the setup --- core/routes.php | 4 ++++ core/setup.php | 2 +- lib/base.php | 22 ---------------------- lib/setup.php | 20 ++++++++++++++++++++ 4 files changed, 25 insertions(+), 23 deletions(-) diff --git a/core/routes.php b/core/routes.php index 7408858b10..2527816b66 100644 --- a/core/routes.php +++ b/core/routes.php @@ -6,6 +6,10 @@ * See the COPYING-README file. */ +// Post installation check +$this->create('post_setup_check', '/post-setup-check') + ->action('OC_Setup', 'postSetupCheck'); + // Core ajax actions // Search $this->create('search_ajax_search', '/search/ajax/search.php') diff --git a/core/setup.php b/core/setup.php index 66b8cf378b..f16385466c 100644 --- a/core/setup.php +++ b/core/setup.php @@ -43,7 +43,7 @@ if(isset($_POST['install']) AND $_POST['install']=='true') { OC_Template::printGuestPage("", "installation", $options); } else { - header("Location: ".OC::$WEBROOT.'/'); + header( 'Location: '.OC_Helper::linkToRoute( 'post_setup_check' )); exit(); } } diff --git a/lib/base.php b/lib/base.php index 6dab980dd0..e195d305d5 100644 --- a/lib/base.php +++ b/lib/base.php @@ -547,28 +547,6 @@ class OC { exit(); } - // post installation checks - if (!OC_Config::getValue("post-installation-checked", false)) { - // setup was successful -> webdav testing now - $request = OC_Request::getPathInfo(); - if(substr($request, -4) !== '.css' and substr($request, -3) !== '.js' and substr($request, -5) !== '.json') { - if (OC_Util::isWebDAVWorking()) { - OC_Config::setValue("post-installation-checked", true); - } else { - $l=OC_L10N::get('lib'); - - $error = $l->t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.'); - $hint = $l->t('Please double check the installation guides.', 'http://doc.owncloud.org/server/5.0/admin_manual/installation.html'); - - $tmpl = new OC_Template('', 'error', 'guest'); - $tmpl->assign('errors', array(1 => array('error' => $error, 'hint' => $hint)), false); - $tmpl->printPage(); - exit(); - } - } - } - - $request = OC_Request::getPathInfo(); if(substr($request, -3) !== '.js'){// we need these files during the upgrade self::checkMaintenanceMode(); diff --git a/lib/setup.php b/lib/setup.php index 4dd190b99f..f342142c95 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -610,4 +610,24 @@ class OC_Setup { file_put_contents(OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data').'/.htaccess', $content); file_put_contents(OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data').'/index.html', ''); } + + /** + * @brief Post installation checks + */ + public static function postSetupCheck($params) { + // setup was successful -> webdav testing now + if (OC_Util::isWebDAVWorking()) { + header("Location: ".OC::$WEBROOT.'/'); + } else { + $l=OC_L10N::get('lib'); + + $error = $l->t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.'); + $hint = $l->t('Please double check the installation guides.', 'http://doc.owncloud.org/server/5.0/admin_manual/installation.html'); + + $tmpl = new OC_Template('', 'error', 'guest'); + $tmpl->assign('errors', array(1 => array('error' => $error, 'hint' => $hint)), false); + $tmpl->printPage(); + exit(); + } + } } From cc19df22a1c6e69ebffb23eaf6e07c6361a59aa7 Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Wed, 6 Feb 2013 13:09:04 -0500 Subject: [PATCH 045/719] Remove old OC4 link compatibility --- apps/files_sharing/public.php | 46 ----------------------------------- 1 file changed, 46 deletions(-) diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index a3e0ec192a..7159b21511 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -2,52 +2,6 @@ // Load other apps for file previews OC_App::loadApps(); -// Compatibility with shared-by-link items from ownCloud 4.0 -// requires old Sharing table ! -// support will be removed in OC 5.0,a -if (isset($_GET['token'])) { - unset($_GET['file']); - $qry = \OC_DB::prepare('SELECT `source` FROM `*PREFIX*sharing` WHERE `target` = ?', 1); - $filepath = $qry->execute(array($_GET['token']))->fetchOne(); - if (isset($filepath)) { - $rootView = new \OC\Files\View(''); - $info = $rootView->getFileInfo($filepath, ''); - if (strtolower($info['mimetype']) == 'httpd/unix-directory') { - $_GET['dir'] = $filepath; - } else { - $_GET['file'] = $filepath; - } - \OCP\Util::writeLog('files_sharing', 'You have files that are shared by link originating from ownCloud 4.0.' - .' Redistribute the new links, because backwards compatibility will be removed in ownCloud 5.', - \OCP\Util::WARN); - } -} - -function getID($path) { - // use the share table from the db to find the item source if the file was reshared because shared files - //are not stored in the file cache. - if (substr(\OC\Files\Filesystem::getMountPoint($path), -7, 6) == "Shared") { - $path_parts = explode('/', $path, 5); - $user = $path_parts[1]; - $intPath = '/'.$path_parts[4]; - $query = \OC_DB::prepare('SELECT `item_source`' - .' FROM `*PREFIX*share`' - .' WHERE `uid_owner` = ?' - .' AND `file_target` = ? '); - $result = $query->execute(array($user, $intPath)); - $row = $result->fetchRow(); - $fileSource = $row['item_source']; - } else { - $rootView = new \OC\Files\View(''); - $meta = $rootView->getFileInfo($path); - $fileSource = $meta['fileid']; - } - - return $fileSource; -} - -// Enf of backward compatibility - /** * lookup file path and owner by fetching it from the fscache * needed because OC_FileCache::getPath($id, $user) already requires the user From fd8cb9974be30aaca0d65d1807d6a4f784da5f0b Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Wed, 6 Feb 2013 23:36:38 +0100 Subject: [PATCH 046/719] initial version of a local storage implementation which will use unique slugified filename on the local filesystem. This implementation will only be enabled on windows based system to solve the issues around UTF-8 file names with php on windows. --- db_structure.xml | 44 ++++ lib/files/mapper.php | 216 ++++++++++++++++++ lib/files/storage/local.php | 5 + lib/files/storage/mappedlocal.php | 335 ++++++++++++++++++++++++++++ lib/files/storage/temporary.php | 1 + tests/lib/files/storage/storage.php | 17 +- 6 files changed, 614 insertions(+), 4 deletions(-) create mode 100644 lib/files/mapper.php create mode 100644 lib/files/storage/mappedlocal.php diff --git a/db_structure.xml b/db_structure.xml index f4111bfabd..fc7f1082ff 100644 --- a/db_structure.xml +++ b/db_structure.xml @@ -94,6 +94,50 @@
t('Mount point'); ?> t('Backend'); ?> t('Configuration'); ?>
+ + + +
+ + + *dbprefix*file_map + + + + + logic_path + text + + true + 512 + + + + physic_path + text + + true + 512 + + + + file_map_lp_index + true + + logic_path + ascending + + + + + file_map_pp_index + true + + physic_path + ascending + + + + + +
+ *dbprefix*mimetypes diff --git a/lib/files/mapper.php b/lib/files/mapper.php new file mode 100644 index 0000000000..90e4e1ca66 --- /dev/null +++ b/lib/files/mapper.php @@ -0,0 +1,216 @@ +resolveLogicPath($logicPath); + if ($physicalPath !== null) { + return $physicalPath; + } + + return $this->create($logicPath, $create); + } + + /** + * @param string $physicalPath + * @return string|null + */ + public function physicalToLogic($physicalPath) { + $logicPath = $this->resolvePhysicalPath($physicalPath); + if ($logicPath !== null) { + return $logicPath; + } + + $this->insert($physicalPath, $physicalPath); + return $physicalPath; + } + + /** + * @param string $path + * @param bool $isLogicPath indicates if $path is logical or physical + * @param $recursive + */ + public function removePath($path, $isLogicPath, $recursive) { + if ($recursive) { + $path=$path.'%'; + } + + if ($isLogicPath) { + $query = \OC_DB::prepare('DELETE FROM `*PREFIX*file_map` WHERE `logic_path` LIKE ?'); + $query->execute(array($path)); + } else { + $query = \OC_DB::prepare('DELETE FROM `*PREFIX*file_map` WHERE `physic_path` LIKE ?'); + $query->execute(array($path)); + } + } + + /** + * @param $path1 + * @param $path2 + * @throws \Exception + */ + public function copy($path1, $path2) + { + $path1 = $this->stripLast($path1); + $path2 = $this->stripLast($path2); + $physicPath1 = $this->logicToPhysical($path1, true); + $physicPath2 = $this->logicToPhysical($path2, true); + + $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `logic_path` LIKE ?'); + $result = $query->execute(array($path1.'%')); + $updateQuery = \OC_DB::prepare('UPDATE `*PREFIX*file_map`' + .' SET `logic_path` = ?' + .' AND `physic_path` = ?' + .' WHERE `logic_path` = ?'); + while( $row = $result->fetchRow()) { + $currentLogic = $row['logic_path']; + $currentPhysic = $row['physic_path']; + $newLogic = $path2.$this->stripRootFolder($currentLogic, $path1); + $newPhysic = $physicPath2.$this->stripRootFolder($currentPhysic, $physicPath1); + if ($path1 !== $currentLogic) { + try { + $updateQuery->execute(array($newLogic, $newPhysic, $currentLogic)); + } catch (\Exception $e) { + error_log('Mapper::Copy failed '.$currentLogic.' -> '.$newLogic.'\n'.$e); + throw $e; + } + } + } + } + + /** + * @param $path + * @param $root + * @return bool|string + */ + public function stripRootFolder($path, $root) { + if (strpos($path, $root) !== 0) { + // throw exception ??? + return false; + } + if (strlen($path) > strlen($root)) { + return substr($path, strlen($root)); + } + + return ''; + } + + private function stripLast($path) { + if (substr($path, -1) == '/') { + $path = substr_replace($path ,'',-1); + } + return $path; + } + + private function resolveLogicPath($logicPath) { + $logicPath = $this->stripLast($logicPath); + $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `logic_path` = ?'); + $result = $query->execute(array($logicPath)); + $result = $result->fetchRow(); + + return $result['physic_path']; + } + + private function resolvePhysicalPath($physicalPath) { + $physicalPath = $this->stripLast($physicalPath); + $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `physic_path` = ?'); + $result = $query->execute(array($physicalPath)); + $result = $result->fetchRow(); + + return $result['logic_path']; + } + + private function create($logicPath, $store) { + $logicPath = $this->stripLast($logicPath); + $index = 0; + + // create the slugified path + $physicalPath = $this->slugifyPath($logicPath); + + // detect duplicates + while ($this->resolvePhysicalPath($physicalPath) !== null) { + $physicalPath = $this->slugifyPath($physicalPath, $index++); + } + + // insert the new path mapping if requested + if ($store) { + $this->insert($logicPath, $physicalPath); + } + + return $physicalPath; + } + + private function insert($logicPath, $physicalPath) { + $query = \OC_DB::prepare('INSERT INTO `*PREFIX*file_map`(`logic_path`,`physic_path`) VALUES(?,?)'); + $query->execute(array($logicPath, $physicalPath)); + } + + private function slugifyPath($path, $index=null) { + $pathElements = explode('/', $path); + $sluggedElements = array(); + + // skip slugging the drive letter on windows - TODO: test if local path + if (strpos(strtolower(php_uname('s')), 'win') !== false) { + $sluggedElements[]= $pathElements[0]; + array_shift($pathElements); + } + foreach ($pathElements as $pathElement) { + // TODO: remove file ext before slugify on last element + $sluggedElements[] = self::slugify($pathElement); + } + + // + // TODO: add the index before the file extension + // + if ($index !== null) { + $last= end($sluggedElements); + array_pop($sluggedElements); + array_push($sluggedElements, $last.'-'.$index); + } + return implode(DIRECTORY_SEPARATOR, $sluggedElements); + } + + /** + * Modifies a string to remove all non ASCII characters and spaces. + * + * @param string $text + * @return string + */ + private function slugify($text) + { + // replace non letter or digits by - + $text = preg_replace('~[^\\pL\d]+~u', '-', $text); + + // trim + $text = trim($text, '-'); + + // transliterate + if (function_exists('iconv')) { + $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text); + } + + // lowercase + $text = strtolower($text); + + // remove unwanted characters + $text = preg_replace('~[^-\w]+~', '', $text); + + if (empty($text)) + { + // TODO: we better generate a guid in this case + return 'n-a'; + } + + return $text; + } +} diff --git a/lib/files/storage/local.php b/lib/files/storage/local.php index a5db4ba919..d387a89832 100644 --- a/lib/files/storage/local.php +++ b/lib/files/storage/local.php @@ -8,6 +8,10 @@ namespace OC\Files\Storage; +if (\OC_Util::runningOnWindows()) { + require_once 'mappedlocal.php'; +} else { + /** * for local filestore, we only have to map the paths */ @@ -245,3 +249,4 @@ class Local extends \OC\Files\Storage\Common{ return $this->filemtime($path)>$time; } } +} diff --git a/lib/files/storage/mappedlocal.php b/lib/files/storage/mappedlocal.php new file mode 100644 index 0000000000..80dd79bc41 --- /dev/null +++ b/lib/files/storage/mappedlocal.php @@ -0,0 +1,335 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +namespace OC\Files\Storage; + +/** + * for local filestore, we only have to map the paths + */ +class Local extends \OC\Files\Storage\Common{ + protected $datadir; + private $mapper; + + public function __construct($arguments) { + $this->datadir=$arguments['datadir']; + if(substr($this->datadir, -1)!=='/') { + $this->datadir.='/'; + } + + $this->mapper= new \OC\Files\Mapper(); + } + public function __destruct() { + if (defined('PHPUNIT_RUN')) { + $this->mapper->removePath($this->datadir, true, true); + } + } + public function getId(){ + return 'local::'.$this->datadir; + } + public function mkdir($path) { + return @mkdir($this->buildPath($path)); + } + public function rmdir($path) { + if ($result = @rmdir($this->buildPath($path))) { + $this->cleanMapper($path); + } + return $result; + } + public function opendir($path) { + $files = array('.', '..'); + $physicalPath= $this->buildPath($path); + + $logicalPath = $this->mapper->physicalToLogic($physicalPath); + $dh = opendir($physicalPath); + while ($file = readdir($dh)) { + if ($file === '.' or $file === '..') { + continue; + } + + $logicalFilePath = $this->mapper->physicalToLogic($physicalPath.DIRECTORY_SEPARATOR.$file); + + $file= $this->mapper->stripRootFolder($logicalFilePath, $logicalPath); + $file = $this->stripLeading($file); + $files[]= $file; + } + + \OC\Files\Stream\Dir::register('local-win32'.$path, $files); + return opendir('fakedir://local-win32'.$path); + } + public function is_dir($path) { + if(substr($path,-1)=='/') { + $path=substr($path, 0, -1); + } + return is_dir($this->buildPath($path)); + } + public function is_file($path) { + return is_file($this->buildPath($path)); + } + public function stat($path) { + $fullPath = $this->buildPath($path); + $statResult = stat($fullPath); + + if ($statResult['size'] < 0) { + $size = self::getFileSizeFromOS($fullPath); + $statResult['size'] = $size; + $statResult[7] = $size; + } + return $statResult; + } + public function filetype($path) { + $filetype=filetype($this->buildPath($path)); + if($filetype=='link') { + $filetype=filetype(realpath($this->buildPath($path))); + } + return $filetype; + } + public function filesize($path) { + if($this->is_dir($path)) { + return 0; + }else{ + $fullPath = $this->buildPath($path); + $fileSize = filesize($fullPath); + if ($fileSize < 0) { + return self::getFileSizeFromOS($fullPath); + } + + return $fileSize; + } + } + public function isReadable($path) { + return is_readable($this->buildPath($path)); + } + public function isUpdatable($path) { + return is_writable($this->buildPath($path)); + } + public function file_exists($path) { + return file_exists($this->buildPath($path)); + } + public function filemtime($path) { + return filemtime($this->buildPath($path)); + } + public function touch($path, $mtime=null) { + // sets the modification time of the file to the given value. + // If mtime is nil the current time is set. + // note that the access time of the file always changes to the current time. + if(!is_null($mtime)) { + $result=touch( $this->buildPath($path), $mtime ); + }else{ + $result=touch( $this->buildPath($path)); + } + if( $result ) { + clearstatcache( true, $this->buildPath($path) ); + } + + return $result; + } + public function file_get_contents($path) { + return file_get_contents($this->buildPath($path)); + } + public function file_put_contents($path, $data) {//trigger_error("$path = ".var_export($path, 1)); + return file_put_contents($this->buildPath($path), $data); + } + public function unlink($path) { + return $this->delTree($path); + } + public function rename($path1, $path2) { + if (!$this->isUpdatable($path1)) { + \OC_Log::write('core','unable to rename, file is not writable : '.$path1,\OC_Log::ERROR); + return false; + } + if(! $this->file_exists($path1)) { + \OC_Log::write('core','unable to rename, file does not exists : '.$path1,\OC_Log::ERROR); + return false; + } + + $physicPath1 = $this->buildPath($path1); + $physicPath2 = $this->buildPath($path2); + if($return=rename($physicPath1, $physicPath2)) { + // mapper needs to create copies or all children + $this->copyMapping($path1, $path2); + $this->cleanMapper($physicPath1, false, true); + } + return $return; + } + public function copy($path1, $path2) { + if($this->is_dir($path2)) { + if(!$this->file_exists($path2)) { + $this->mkdir($path2); + } + $source=substr($path1, strrpos($path1, '/')+1); + $path2.=$source; + } + if($return=copy($this->buildPath($path1), $this->buildPath($path2))) { + // mapper needs to create copies or all children + $this->copyMapping($path1, $path2); + } + return $return; + } + public function fopen($path, $mode) { + if($return=fopen($this->buildPath($path), $mode)) { + switch($mode) { + case 'r': + break; + case 'r+': + case 'w+': + case 'x+': + case 'a+': + break; + case 'w': + case 'x': + case 'a': + break; + } + } + return $return; + } + + public function getMimeType($path) { + if($this->isReadable($path)) { + return \OC_Helper::getMimeType($this->buildPath($path)); + }else{ + return false; + } + } + + private function delTree($dir, $isLogicPath=true) { + $dirRelative=$dir; + if ($isLogicPath) { + $dir=$this->buildPath($dir); + } + if (!file_exists($dir)) { + return true; + } + if (!is_dir($dir) || is_link($dir)) { + if($return=unlink($dir)) { + $this->cleanMapper($dir, false); + return $return; + } + } + foreach (scandir($dir) as $item) { + if ($item == '.' || $item == '..') { + continue; + } + if(is_file($dir.'/'.$item)) { + if(unlink($dir.'/'.$item)) { + $this->cleanMapper($dir.'/'.$item, false); + } + }elseif(is_dir($dir.'/'.$item)) { + if (!$this->delTree($dir. "/" . $item, false)) { + return false; + }; + } + } + if($return=rmdir($dir)) { + $this->cleanMapper($dir, false); + } + return $return; + } + + private static function getFileSizeFromOS($fullPath) { + $name = strtolower(php_uname('s')); + // Windows OS: we use COM to access the filesystem + if (strpos($name, 'win') !== false) { + if (class_exists('COM')) { + $fsobj = new \COM("Scripting.FileSystemObject"); + $f = $fsobj->GetFile($fullPath); + return $f->Size; + } + } else if (strpos($name, 'bsd') !== false) { + if (\OC_Helper::is_function_enabled('exec')) { + return (float)exec('stat -f %z ' . escapeshellarg($fullPath)); + } + } else if (strpos($name, 'linux') !== false) { + if (\OC_Helper::is_function_enabled('exec')) { + return (float)exec('stat -c %s ' . escapeshellarg($fullPath)); + } + } else { + \OC_Log::write('core', 'Unable to determine file size of "'.$fullPath.'". Unknown OS: '.$name, \OC_Log::ERROR); + } + + return 0; + } + + public function hash($path, $type, $raw=false) { + return hash_file($type, $this->buildPath($path), $raw); + } + + public function free_space($path) { + return @disk_free_space($this->buildPath($path)); + } + + public function search($query) { + return $this->searchInDir($query); + } + public function getLocalFile($path) { + return $this->buildPath($path); + } + public function getLocalFolder($path) { + return $this->buildPath($path); + } + + protected function searchInDir($query, $dir='', $isLogicPath=true) { + $files=array(); + $physicalDir = $this->buildPath($dir); + foreach (scandir($physicalDir) as $item) { + if ($item == '.' || $item == '..') + continue; + $physicalItem = $this->mapper->physicalToLogic($physicalDir.DIRECTORY_SEPARATOR.$item); + $item = substr($physicalItem, strlen($physicalDir)+1); + + if(strstr(strtolower($item), strtolower($query)) !== false) { + $files[]=$dir.'/'.$item; + } + if(is_dir($physicalItem)) { + $files=array_merge($files, $this->searchInDir($query, $physicalItem, false)); + } + } + return $files; + } + + /** + * check if a file or folder has been updated since $time + * @param string $path + * @param int $time + * @return bool + */ + public function hasUpdated($path, $time) { + return $this->filemtime($path)>$time; + } + + private function buildPath($path, $create=true) { + $path = $this->stripLeading($path); + $fullPath = $this->datadir.$path; + return $this->mapper->logicToPhysical($fullPath, $create); + } + + private function cleanMapper($path, $isLogicPath=true, $recursive=true) { + $fullPath = $path; + if ($isLogicPath) { + $fullPath = $this->datadir.$path; + } + $this->mapper->removePath($fullPath, $isLogicPath, $recursive); + } + + private function copyMapping($path1, $path2) { + $path1 = $this->stripLeading($path1); + $path2 = $this->stripLeading($path2); + + $fullPath1 = $this->datadir.$path1; + $fullPath2 = $this->datadir.$path2; + + $this->mapper->copy($fullPath1, $fullPath2); + } + + private function stripLeading($path) { + if(strpos($path, '/') === 0) { + $path = substr($path, 1); + } + + return $path; + } +} diff --git a/lib/files/storage/temporary.php b/lib/files/storage/temporary.php index 542d2cd9f4..d84dbda2e3 100644 --- a/lib/files/storage/temporary.php +++ b/lib/files/storage/temporary.php @@ -21,6 +21,7 @@ class Temporary extends Local{ } public function __destruct() { + parent::__destruct(); $this->cleanUp(); } } diff --git a/tests/lib/files/storage/storage.php b/tests/lib/files/storage/storage.php index 781c0f92c9..c74a16f509 100644 --- a/tests/lib/files/storage/storage.php +++ b/tests/lib/files/storage/storage.php @@ -146,10 +146,19 @@ abstract class Storage extends \PHPUnit_Framework_TestCase { $localFolder = $this->instance->getLocalFolder('/folder'); $this->assertTrue(is_dir($localFolder)); - $this->assertTrue(file_exists($localFolder . '/lorem.txt')); - $this->assertEquals(file_get_contents($localFolder . '/lorem.txt'), file_get_contents($textFile)); - $this->assertEquals(file_get_contents($localFolder . '/bar.txt'), 'asd'); - $this->assertEquals(file_get_contents($localFolder . '/recursive/file.txt'), 'foo'); + + // test below require to use instance->getLocalFile because the physical storage might be different + $localFile = $this->instance->getLocalFile('/folder/lorem.txt'); + $this->assertTrue(file_exists($localFile)); + $this->assertEquals(file_get_contents($localFile), file_get_contents($textFile)); + + $localFile = $this->instance->getLocalFile('/folder/bar.txt'); + $this->assertTrue(file_exists($localFile)); + $this->assertEquals(file_get_contents($localFile), 'asd'); + + $localFile = $this->instance->getLocalFile('/folder/recursive/file.txt'); + $this->assertTrue(file_exists($localFile)); + $this->assertEquals(file_get_contents($localFile), 'foo'); } public function testStat() { From 84f3c8b6cc1060203d807ee65545478ce34f93c4 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 7 Feb 2013 00:49:39 +0100 Subject: [PATCH 047/719] show webdav test results in admin section as well --- settings/admin.php | 1 + settings/templates/admin.php | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/settings/admin.php b/settings/admin.php index 4d9685ab92..e256c5fe35 100755 --- a/settings/admin.php +++ b/settings/admin.php @@ -31,6 +31,7 @@ $tmpl->assign('entriesremain', $entriesremain); $tmpl->assign('htaccessworking', $htaccessworking); $tmpl->assign('internetconnectionworking', OC_Util::isinternetconnectionworking()); $tmpl->assign('islocaleworking', OC_Util::issetlocaleworking()); +$tmpl->assign('isWebDavWorking', OC_Util::isWebDAVWorking()); $tmpl->assign('backgroundjobs_mode', OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax')); $tmpl->assign('shareAPIEnabled', OC_Appconfig::getValue('core', 'shareapi_enabled', 'yes')); diff --git a/settings/templates/admin.php b/settings/templates/admin.php index 0097489743..8c2b6148a6 100644 --- a/settings/templates/admin.php +++ b/settings/templates/admin.php @@ -22,6 +22,21 @@ if (!$_['htaccessworking']) { +
+ t('Setup Warning');?> + + + t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.'); ?> + t('Please double check the installation guides.', 'http://doc.owncloud.org/server/5.0/admin_manual/installation.html'); ?> + + +
+ From f2b5bc8ab8fadaee3db3a03e6a4748fdb28a01b1 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 7 Feb 2013 14:47:56 +0100 Subject: [PATCH 048/719] adding autotesting for mssql server - windows only --- autotest.cmd | 47 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/autotest.cmd b/autotest.cmd index 053860db54..e5ea0cf4c3 100644 --- a/autotest.cmd +++ b/autotest.cmd @@ -4,14 +4,14 @@ :: @author Thomas Müller :: @author Tobias Ramforth (translated into Windows batch file) :: -:: @copyright 2012 Thomas Müller thomas.mueller@tmit.eu +:: @copyright 2012, 2013 Thomas Müller thomas.mueller@tmit.eu :: @echo off set DATADIR=data-autotest set BASEDIR=%~dp0 -:: create autoconfig for sqlite, mysql and postgresql +:: create autoconfig for sqlite, mysql, postgresql and mssql echo ^ .\tests\autoconfig-sqlite.php echo $AUTOCONFIG ^= array ^( >> .\tests\autoconfig-sqlite.php echo 'installed' ^=^> false^, >> .\tests\autoconfig-sqlite.php @@ -50,16 +50,35 @@ echo 'dbhost' ^=^> 'localhost'^, >> .\tests\autoconfig-pgsql.php echo 'dbpass' ^=^> 'owncloud'^, >> .\tests\autoconfig-pgsql.php echo ^)^; >> .\tests\autoconfig-pgsql.php +echo ^ .\tests\autoconfig-mssql.php +echo $AUTOCONFIG ^= array ^( >> .\tests\autoconfig-mssql.php +echo 'installed' ^=^> false^, >> .\tests\autoconfig-mssql.php +echo 'dbtype' ^=^> 'mssql'^, >> .\tests\autoconfig-mssql.php +echo 'dbtableprefix' ^=^> 'oc_'^, >> .\tests\autoconfig-mssql.php +echo 'adminlogin' ^=^> 'admin'^, >> .\tests\autoconfig-mssql.php +echo 'adminpass' ^=^> 'admin'^, >> .\tests\autoconfig-mssql.php +echo 'directory' ^=^> '%BASEDIR%%DATADIR%'^, >> .\tests\autoconfig-mssql.php +echo 'dbuser' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-mssql.php +echo 'dbname' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-mssql.php +echo 'dbhost' ^=^> 'localhost\sqlexpress'^, >> .\tests\autoconfig-mssql.php +echo 'dbpass' ^=^> 'owncloud'^, >> .\tests\autoconfig-mssql.php +echo ^)^; >> .\tests\autoconfig-mssql.php + echo localhost:5432:*:oc_autotest:owncloud > %APPDATA%\postgresql\pgpass.conf :: :: start test execution :: -::call:execute_tests "sqlite" -call:execute_tests "mysql" -::call:execute_tests "mssql" -::call:execute_tests "ora" -::call:execute_tests "pgsql" +if [%1] == [] ( + echo "Running on all database backends" + call:execute_tests "sqlite" + call:execute_tests "mysql" + call:execute_tests "mssql" + ::call:execute_tests "ora" + call:execute_tests "pgsql" +) else ( + call:execute_tests "%1" +) goto:eof @@ -83,6 +102,9 @@ goto:eof if "%~1" == "mysql" mysql -u oc_autotest -powncloud -e "DROP DATABASE oc_autotest" if "%~1" == "pgsql" dropdb -h localhost -p 5432 -U oc_autotest -w oc_autotest + + :: we assume a sqlexpress installation + if "%~1" == "mssql" sqlcmd -S localhost\sqlexpress -U oc_autotext -P owncloud -Q "IF EXISTS (SELECT name FROM sys.databases WHERE name=N'oc_autotest') DROP DATABASE [oc_autotest]" :: copy autoconfig copy /y %BASEDIR%\tests\autoconfig-%~1.php %BASEDIR%\config\autoconfig.php @@ -96,9 +118,8 @@ goto:eof rmdir /s /q coverage-html-%~1 md coverage-html-%~1 php -f enable_all.php - ::phpunit --log-junit autotest-results-%~1.xml --coverage-clover autotest-clover-%~1.xml --coverage-html coverage-html-%~1 - ::phpunit --bootstrap bootstrap.php --configuration phpunit.xml - php win32-phpunit.php --bootstrap bootstrap.php --configuration phpunit.xml --log-junit autotest-results-%~1.xml --coverage-clover autotest-clover-%~1.xml --coverage-html coverage-html-%~1 + + php win32-phpunit.php --bootstrap bootstrap.php --configuration phpunit-autotest.xml --log-junit autotest-results-%~1.xml --coverage-clover autotest-clover-%~1.xml --coverage-html coverage-html-%~1 echo "Done with testing %~1 ..." cd %BASEDIR% goto:eof @@ -114,4 +135,10 @@ goto:eof :: - to enable dropdb I decided to add following line to pg_hba.conf (this is not the safest way but I don't care for the testing machine): :: local all all trust :: +:: NOTES on mssql: +:: we assume the usage of a local installed sqlexpress +:: create a user 'oc_autotest' with password 'owncloud' and assign the server role 'dbcreator' +:: make sure the sqlserver is configured to allow sql authentication +:: + From ca43e0927676ca8331aac065b6296fb1ad68adbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Thu, 7 Feb 2013 15:16:29 +0100 Subject: [PATCH 049/719] keep track of trash bin size --- apps/files_trashbin/lib/trash.php | 89 +++++++++++++++++++++++++++---- 1 file changed, 78 insertions(+), 11 deletions(-) diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index bc6562b208..0e4389ced1 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -49,10 +49,14 @@ class Trashbin { $type = 'dir'; } else { $type = 'file'; - } + } + + if ( ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) { + $trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin')); + $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin')); + } + $trashbinSize += self::copy_recursive($file_path, 'files_trashbin/'.$deleted.'.d'.$timestamp, $view); - self::copy_recursive($file_path, 'files_trashbin/'.$deleted.'.d'.$timestamp, $view); - if ( $view->file_exists('files_trashbin/'.$deleted.'.d'.$timestamp) ) { $query = \OC_DB::prepare("INSERT INTO *PREFIX*files_trash (id,timestamp,location,type,mime,user) VALUES (?,?,?,?,?,?)"); $result = $query->execute(array($deleted, $timestamp, $location, $type, $mime, $user)); @@ -63,10 +67,12 @@ class Trashbin { } if ( \OCP\App::isEnabled('files_versions') ) { - if ( $view->is_dir('files_versions'.$file_path) ) { + if ( $view->is_dir('files_versions'.$file_path) ) { + $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_versions/'.$file_path)); $view->rename('files_versions'.$file_path, 'versions_trashbin/'. $deleted.'.d'.$timestamp); } else if ( $versions = \OCA\Files_Versions\Storage::getVersions($file_path) ) { - foreach ($versions as $v) { + foreach ($versions as $v) { + $trashbinSize += $view->filesize('files_versions'.$v['path'].'.v'.$v['version']); $view->rename('files_versions'.$v['path'].'.v'.$v['version'], 'versions_trashbin/'. $deleted.'.v'.$v['version'].'.d'.$timestamp); } } @@ -75,7 +81,8 @@ class Trashbin { \OC_Log::write('files_trashbin', 'Couldn\'t move '.$file_path.' to the trash bin' , \OC_log::ERROR); } - self::expire(); + $trashbinSize -= self::expire(); + \OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize); } @@ -90,6 +97,10 @@ class Trashbin { $user = \OCP\User::getUser(); $view = new \OC_FilesystemView('/'.$user); + if ( ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) { + $trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin')); + $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin')); + } if ( $timestamp ) { $query = \OC_DB::prepare('SELECT location,type FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?'); $result = $query->execute(array($user,$filename,$timestamp))->fetchAll(); @@ -122,15 +133,23 @@ class Trashbin { $mtime = $view->filemtime($source); if( $view->rename($source, $target.$ext) ) { $view->touch($target.$ext, $mtime); + if ($view->is_dir($target.$ext)) { + $trashbinSize -= self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.$target.$ext)); + } else { + $trashbinSize -= $view->filesize($target.$ext); + } // if versioning app is enabled, copy versions from the trash bin back to the original location if ( \OCP\App::isEnabled('files_versions') ) { - if ( $result[0]['type'] == 'dir' ) { + if ( $result[0]['type'] == 'dir' ) { + $trashbinSize -= self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.'versions_trashbin/'. $file)); $view->rename(\OC_Filesystem::normalizePath('versions_trashbin/'. $file), \OC_Filesystem::normalizePath('files_versions/'.$location.'/'.$filename.$ext)); } else if ( $versions = self::getVersionsFromTrash($file, $timestamp) ) { foreach ($versions as $v) { if ($timestamp ) { + $trashbinSize -= $view->filesize('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); $view->rename('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); } else { + $trashbinSize -= $view->filesize('versions_trashbin/'.$file.'.v'.$v); $view->rename('versions_trashbin/'.$file.'.v'.$v, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); } } @@ -142,6 +161,7 @@ class Trashbin { $query->execute(array($user,$filename,$timestamp)); } + \OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize); return true; } else { \OC_Log::write('files_trashbin', 'Couldn\'t restore file from trash bin, '.$filename , \OC_log::ERROR); @@ -160,7 +180,12 @@ class Trashbin { $user = \OCP\User::getUser(); $view = new \OC_FilesystemView('/'.$user); - + + if ( ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) { + $trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin')); + $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin')); + } + if ( $timestamp ) { $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?'); $query->execute(array($user,$filename,$timestamp)); @@ -171,19 +196,28 @@ class Trashbin { if ( \OCP\App::isEnabled('files_versions') ) { if ($view->is_dir('versions_trashbin/'.$file)) { + $trashbinSize -= self::calculateSize(new \OC_Filesystemview('/'.$user.'/versions_trashbin/'.$file)); $view->unlink('versions_trashbin/'.$file); } else if ( $versions = self::getVersionsFromTrash($file, $timestamp) ) { foreach ($versions as $v) { if ($timestamp ) { + $trashbinSize -= $view->filesize('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); $view->unlink('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); } else { + $trashbinSize -= $view->filesize('versions_trashbin/'.$file.'.v'.$v); $view->unlink('versions_trashbin/'.$file.'.v'.$v); } } } } + if ($view->is_dir('/files_trashbin/'.$file)) { + $trashbinSize -= self::calculateSize(new \OC_Filesystemview('/'.$user.'/files_trashbin/'.$file)); + } else { + $trashbinSize -= $view->filesize('/files_trashbin/'.$file); + } $view->unlink('/files_trashbin/'.$file); + \OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize); return true; } @@ -194,8 +228,9 @@ class Trashbin { */ private static function expire() { - $view = new \OC_FilesystemView('/'.\OCP\User::getUser()); $user = \OCP\User::getUser(); + $view = new \OC_FilesystemView('/'.$user); + $size = 0; $query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash WHERE user=?'); $result = $query->execute(array($user))->fetchAll(); @@ -208,11 +243,18 @@ class Trashbin { $timestamp = $r['timestamp']; $filename = $r['id']; if ( $r['timestamp'] < $limit ) { + if ($view->is_dir('files_trashbin/'.$filename.'.d'.$timestamp)) { + $size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/files_trashbin/'.$filename.'.d'.$timestamp)); + } else { + $size += $view->filesize('files_trashbin/'.$filename.'.d'.$timestamp); + } $view->unlink('files_trashbin/'.$filename.'.d'.$timestamp); if ($r['type'] == 'dir') { + $size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/versions_trashbin/'.$filename.'.d'.$timestamp)); $view->unlink('versions_trashbin/'.$filename.'.d'.$timestamp); } else if ( $versions = self::getVersionsFromTrash($filename, $timestamp) ) { foreach ($versions as $v) { + $size += $view->filesize('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); $view->unlink('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); } } @@ -220,7 +262,9 @@ class Trashbin { } $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND timestampexecute(array($user,$limit)); + $query->execute(array($user,$limit)); + + return $size; } /** @@ -231,22 +275,26 @@ class Trashbin { * @param $view file view for the users root directory */ private static function copy_recursive( $source, $destination, $view ) { + $size = 0; if ( $view->is_dir( 'files'.$source ) ) { $view->mkdir( $destination ); $view->touch($destination, $view->filemtime('files'.$source)); foreach ( \OC_Files::getDirectoryContent($source) as $i ) { $pathDir = $source.'/'.$i['name']; if ( $view->is_dir('files'.$pathDir) ) { - self::copy_recursive($pathDir, $destination.'/'.$i['name'], $view); + $size += self::copy_recursive($pathDir, $destination.'/'.$i['name'], $view); } else { + $size += $view->filesize('files'.$pathDir); $view->copy( 'files'.$pathDir, $destination . '/' . $i['name'] ); $view->touch($destination . '/' . $i['name'], $view->filemtime('files'.$pathDir)); } } } else { + $size += $view->filesize('files'.$source); $view->copy( 'files'.$source, $destination ); $view->touch($destination, $view->filemtime('files'.$source)); } + return $size; } /** @@ -300,4 +348,23 @@ class Trashbin { return $ext; } + /** + * @brief get the size from a given root folder + * @param $view file view on the root folder + * @return size of the folder + */ + private static function calculateSize($view) { + $root = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath(''); + $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($root), \RecursiveIteratorIterator::CHILD_FIRST); + $size = 0; + + foreach ($iterator as $path) { + $relpath = substr($path, strlen($root)-1); + if ( !$view->is_dir($relpath) ) { + $size += $view->filesize($relpath); + } + } + return $size; + } + } From 808de17aebeedcc0d9b27d3c0152e80226218e39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Thu, 7 Feb 2013 17:37:46 +0100 Subject: [PATCH 050/719] use never more that 50% of available disc space for the trash bin --- apps/files_trashbin/ajax/undelete.php | 1 + apps/files_trashbin/lib/trash.php | 90 ++++++++++++++++++++------- 2 files changed, 67 insertions(+), 24 deletions(-) diff --git a/apps/files_trashbin/ajax/undelete.php b/apps/files_trashbin/ajax/undelete.php index a118d003de..cb679f2608 100644 --- a/apps/files_trashbin/ajax/undelete.php +++ b/apps/files_trashbin/ajax/undelete.php @@ -15,6 +15,7 @@ foreach ($list as $file) { if ( $dirlisting=='0') { $delimiter = strrpos($file, '.d'); $filename = substr($file, 0, $delimiter); + error_log("filename : " . $filename); $timestamp = substr($file, $delimiter+2); } else { $path_parts = pathinfo($file); diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index 0e4389ced1..091fe684c1 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -25,6 +25,8 @@ namespace OCA\Files_Trashbin; class Trashbin { const DEFAULT_RETENTION_OBLIGATION=180; // how long do we keep files in the trash bin if no other value is defined in the config file (unit: days) + const DEFAULTMAXSIZE=50; // unit: percentage; 50% of available disk space/quota + /** * move file to the trash bin * @@ -81,7 +83,25 @@ class Trashbin { \OC_Log::write('files_trashbin', 'Couldn\'t move '.$file_path.' to the trash bin' , \OC_log::ERROR); } - $trashbinSize -= self::expire(); + // get available disk space for user + $quota = \OCP\Util::computerFileSize(\OC_Preferences::getValue($user, 'files', 'quota')); + if ( $quota == null ) { + $quota = \OCP\Util::computerFileSize(\OC_Appconfig::getValue('files', 'default_quota')); + } + if ( $quota == null ) { + $quota = \OC\Files\Filesystem::free_space('/'); + } + + // calculate available space for trash bin + $rootInfo = $view->getFileInfo('/files'); + $free = $quota-$rootInfo['size']; // remaining free space for user + if ( $free > 0 ) { + $availableSpace = ($free * self::DEFAULTMAXSIZE / 100) - $trashbinSize; // how much space can be used for versions + } else { + $availableSpace = $free-$trashbinSize; + } + + $trashbinSize -= self::expire($availableSpace); \OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize); } @@ -93,7 +113,6 @@ class Trashbin { * @param $timestamp time when the file was deleted */ public static function restore($file, $filename, $timestamp) { - $user = \OCP\User::getUser(); $view = new \OC_FilesystemView('/'.$user); @@ -139,18 +158,23 @@ class Trashbin { $trashbinSize -= $view->filesize($target.$ext); } // if versioning app is enabled, copy versions from the trash bin back to the original location - if ( \OCP\App::isEnabled('files_versions') ) { + if ( \OCP\App::isEnabled('files_versions') ) { + if ($timestamp ) { + $versionedFile = $filename; + } else { + $versionedFile = $file; + } if ( $result[0]['type'] == 'dir' ) { $trashbinSize -= self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.'versions_trashbin/'. $file)); $view->rename(\OC_Filesystem::normalizePath('versions_trashbin/'. $file), \OC_Filesystem::normalizePath('files_versions/'.$location.'/'.$filename.$ext)); - } else if ( $versions = self::getVersionsFromTrash($file, $timestamp) ) { + } else if ( $versions = self::getVersionsFromTrash($versionedFile, $timestamp) ) { foreach ($versions as $v) { if ($timestamp ) { - $trashbinSize -= $view->filesize('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); - $view->rename('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); + $trashbinSize -= $view->filesize('versions_trashbin/'.$versionedFile.'.v'.$v.'.d'.$timestamp); + $view->rename('versions_trashbin/'.$versionedFile.'.v'.$v.'.d'.$timestamp, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); } else { - $trashbinSize -= $view->filesize('versions_trashbin/'.$file.'.v'.$v); - $view->rename('versions_trashbin/'.$file.'.v'.$v, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); + $trashbinSize -= $view->filesize('versions_trashbin/'.$versionedFile.'.v'.$v); + $view->rename('versions_trashbin/'.$versionedFile.'.v'.$v, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); } } } @@ -174,12 +198,12 @@ class Trashbin { * delete file from trash bin permanently * @param $filename path to the file * @param $timestamp of deletion time - * @return true/false + * @return size of deleted files */ public static function delete($filename, $timestamp=null) { - $user = \OCP\User::getUser(); - $view = new \OC_FilesystemView('/'.$user); + $view = new \OC_FilesystemView('/'.$user); + $size = 0; if ( ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) { $trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin')); @@ -196,37 +220,39 @@ class Trashbin { if ( \OCP\App::isEnabled('files_versions') ) { if ($view->is_dir('versions_trashbin/'.$file)) { - $trashbinSize -= self::calculateSize(new \OC_Filesystemview('/'.$user.'/versions_trashbin/'.$file)); + $size += self::calculateSize(new \OC_Filesystemview('/'.$user.'/versions_trashbin/'.$file)); $view->unlink('versions_trashbin/'.$file); - } else if ( $versions = self::getVersionsFromTrash($file, $timestamp) ) { + } else if ( $versions = self::getVersionsFromTrash($filename, $timestamp) ) { foreach ($versions as $v) { if ($timestamp ) { - $trashbinSize -= $view->filesize('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); - $view->unlink('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); + $size += $view->filesize('/versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); + $view->unlink('/versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); } else { - $trashbinSize -= $view->filesize('versions_trashbin/'.$file.'.v'.$v); - $view->unlink('versions_trashbin/'.$file.'.v'.$v); + $size += $view->filesize('/versions_trashbin/'.$filename.'.v'.$v); + $view->unlink('/versions_trashbin/'.$filename.'.v'.$v); } } } } if ($view->is_dir('/files_trashbin/'.$file)) { - $trashbinSize -= self::calculateSize(new \OC_Filesystemview('/'.$user.'/files_trashbin/'.$file)); + $size += self::calculateSize(new \OC_Filesystemview('/'.$user.'/files_trashbin/'.$file)); } else { - $trashbinSize -= $view->filesize('/files_trashbin/'.$file); + $size += $view->filesize('/files_trashbin/'.$file); } $view->unlink('/files_trashbin/'.$file); + $trashbinSize -= $size; \OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize); - return true; + return $size; } /** - * clean up the trash bin + * clean up the trash bin + * @param max. available disk space for trashbin */ - private static function expire() { + private static function expire($availableSpace) { $user = \OCP\User::getUser(); $view = new \OC_FilesystemView('/'.$user); @@ -264,6 +290,23 @@ class Trashbin { $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND timestampexecute(array($user,$limit)); + $availableSpace = $availableSpace + $size; + + if ($availableSpace < 0) { + $query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash WHERE user=? ORDER BY timestamp ASC'); + $result = $query->execute(array($user))->fetchAll(); + $length = count($result); + $i = 0; + while ( $i < $length && $availableSpace < 0 ) { + $tmp = self::delete($result[$i]['id'], $result[$i]['timestamp']); + $availableSpace += $tmp; + $size += $tmp; + $i++; + } + + } + + return $size; } @@ -305,8 +348,7 @@ class Trashbin { private static function getVersionsFromTrash($filename, $timestamp) { $view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/versions_trashbin'); $versionsName = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath($filename); - $versions = array(); - + $versions = array(); if ($timestamp ) { // fetch for old versions $matches = glob( $versionsName.'.v*.d'.$timestamp ); From d577f790c8cbcf4f8dce74f9991e4bd62e21f949 Mon Sep 17 00:00:00 2001 From: Tobias Ramforth Date: Fri, 8 Feb 2013 00:00:51 +0100 Subject: [PATCH 051/719] Added MS SQL Server support --- core/js/setup.js | 7 ++ core/setup.php | 2 + core/templates/installation.php | 20 +++- lib/db.php | 180 +++++++++++++++++++++++++++++++- lib/setup.php | 148 +++++++++++++++++++++++++- 5 files changed, 346 insertions(+), 11 deletions(-) diff --git a/core/js/setup.js b/core/js/setup.js index 9aded6591c..fb6e7c5097 100644 --- a/core/js/setup.js +++ b/core/js/setup.js @@ -5,6 +5,7 @@ $(document).ready(function() { mysql:!!$('#hasMySQL').val(), postgresql:!!$('#hasPostgreSQL').val(), oracle:!!$('#hasOracle').val(), + mssql:!!$('#hasMSSQL').val() }; $('#selectDbType').buttonset(); @@ -41,6 +42,12 @@ $(document).ready(function() { $('#dbhost').show(250); $('#dbhostlabel').show(250); }); + + $('#mssql').click(function() { + $('#use_other_db').slideDown(250); + $('#dbhost').show(250); + $('#dbhostlabel').show(250); + }); $('input[checked]').trigger('click'); diff --git a/core/setup.php b/core/setup.php index 66b8cf378b..0da9b35a35 100644 --- a/core/setup.php +++ b/core/setup.php @@ -16,6 +16,7 @@ $hasSQLite = class_exists('SQLite3'); $hasMySQL = is_callable('mysql_connect'); $hasPostgreSQL = is_callable('pg_connect'); $hasOracle = is_callable('oci_connect'); +$hasMSSQL = is_callable('sqlsrv_connect'); $datadir = OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data'); // Protect data directory here, so we can test if the protection is working @@ -26,6 +27,7 @@ $opts = array( 'hasMySQL' => $hasMySQL, 'hasPostgreSQL' => $hasPostgreSQL, 'hasOracle' => $hasOracle, + 'hasMSSQLServer' => $hasMSSQL, 'directory' => $datadir, 'secureRNG' => OC_Util::secureRNG_available(), 'htaccessWorking' => OC_Util::ishtaccessworking(), diff --git a/core/templates/installation.php b/core/templates/installation.php index 03c580c9b0..6a6370785d 100644 --- a/core/templates/installation.php +++ b/core/templates/installation.php @@ -2,6 +2,7 @@ '> '> '> +'>
0): ?> @@ -55,7 +56,7 @@
- + t( 'Configure the database' ); ?>
@@ -71,7 +72,7 @@ - +

MySQL t( 'will be used' ); ?>.

@@ -81,7 +82,7 @@ - +

PostgreSQL t( 'will be used' ); ?>.

@@ -91,7 +92,7 @@ - +

Oracle t( 'will be used' ); ?>.

@@ -99,6 +100,17 @@ /> + + + + +

MS SQL t( 'will be used' ); ?>.

+ + + + /> + +
diff --git a/lib/db.php b/lib/db.php index 51f7c7679d..58f46c1171 100644 --- a/lib/db.php +++ b/lib/db.php @@ -178,6 +178,13 @@ class OC_DB { $dsn = 'oci:dbname=//' . $host . '/' . $name; } break; + case 'mssql': + if ($port) { + $dsn='sqlsrv:Server='.$host.','.$port.';Database='.$name; + } else { + $dsn='sqlsrv:Server='.$host.';Database='.$name; + } + break; default: return false; } @@ -277,6 +284,15 @@ class OC_DB { $dsn['database'] = $user; } break; + case 'mssql': + $dsn = array( + 'phptype' => 'sqlsrv', + 'username' => $user, + 'password' => $pass, + 'hostspec' => $host, + 'database' => $name + ); + break; default: return false; } @@ -540,7 +556,7 @@ class OC_DB { * http://www.sqlite.org/lang_createtable.html * http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm */ - if( $CONFIG_DBTYPE == 'pgsql' ) { //mysql support it too but sqlite doesn't + if( $CONFIG_DBTYPE == 'pgsql' || 'mssql') { //mysql support it too but sqlite doesn't $content = str_replace( '0000-00-00 00:00:00', 'CURRENT_TIMESTAMP', $content ); } file_put_contents( $file2, $content ); @@ -624,7 +640,7 @@ class OC_DB { } else { return true; } - } elseif( $type == 'pgsql' || $type == 'oci' || $type == 'mysql') { + } elseif( $type == 'pgsql' || $type == 'oci' || $type == 'mysql' || $type == 'mssql') { $query = 'INSERT INTO `' .$table . '` (' . implode(',', array_keys($input)) . ') SELECT \'' . implode('\',\'', array_values($input)) . '\' FROM ' . $table . ' WHERE '; @@ -683,7 +699,15 @@ class OC_DB { }elseif( $type == 'oci' ) { $query = str_replace( '`', '"', $query ); $query = str_ireplace( 'NOW()', 'CURRENT_TIMESTAMP', $query ); - } + }elseif( $type == 'mssql' ) { + $query = preg_replace( "/\`(.*?)`/", "[$1]", $query ); + $query = str_replace( 'NOW()', 'CURRENT_TIMESTAMP', $query ); + $query = str_replace( 'now()', 'CURRENT_TIMESTAMP', $query ); + $query = str_replace( 'LENGTH(', 'LEN(', $query ); + $query = str_replace( 'SUBSTR(', 'SUBSTRING(', $query ); + + $query = self::fixLimitClauseForMSSQL($query); + } // replace table name prefix $query = str_replace( '*PREFIX*', $prefix, $query ); @@ -691,6 +715,60 @@ class OC_DB { return $query; } + private static function fixLimitClauseForMSSQL($query) { + $limitLocation = stripos ($query, "LIMIT"); + + if ( $limitLocation === false ) { + return $query; + } + + // total == 0 means all results - not zero results + // + // First number is either total or offset, locate it by first space + // + $offset = substr ($query, $limitLocation + 5); + $offset = substr ($offset, 0, stripos ($offset, ' ')); + $offset = trim ($offset); + + // check for another parameter + if (stripos ($offset, ',') === false) { + // no more parameters + $offset = 0; + $total = intval ($offset); + } else { + // found another parameter + $offset = intval ($offset); + + $total = substr ($query, $limitLocation + 5); + $total = substr ($total, stripos ($total, ',')); + + $total = substr ($total, 0, stripos ($total, ' ')); + $total = intval ($total); + } + + $query = trim (substr ($query, 0, $limitLocation)); + + if ($offset == 0 && $total !== 0) { + if (strpos($query, "SELECT") === false) { + $query = "TOP {$total} " . $query; + } else { + $query = preg_replace('/SELECT(\s*DISTINCT)?/Dsi', 'SELECT$1 TOP '.$total, $query); + } + } else if ($offset > 0) { + $query = preg_replace('/SELECT(\s*DISTINCT)?/Dsi', 'SELECT$1 TOP(10000000) ', $query); + $query = 'SELECT * + FROM (SELECT sub2.*, ROW_NUMBER() OVER(ORDER BY sub2.line2) AS line3 + FROM (SELECT 1 AS line2, sub1.* FROM (' . $query . ') AS sub1) as sub2) AS sub3'; + + if ($total > 0) { + $query .= ' WHERE line3 BETWEEN ' . ($offset + 1) . ' AND ' . ($offset + $total); + } else { + $query .= ' WHERE line3 > ' . $offset; + } + } + return $query; + } + /** * @brief drop a table * @param string $tableName the table to drop @@ -844,6 +922,14 @@ class PDOStatementWrapper{ public function execute($input=array()) { $this->lastArguments=$input; if(count($input)>0) { + if (!isset($type)) { + $type = OC_Config::getValue( "dbtype", "sqlite" ); + } + + if ($type == 'mssql') { + $this->tryFixSubstringLastArgumentDataForMSSQL($input); + } + $result=$this->statement->execute($input); }else{ $result=$this->statement->execute(); @@ -855,6 +941,94 @@ class PDOStatementWrapper{ } } + private function tryFixSubstringLastArgumentDataForMSSQL(&$input) { + $query = $this->statement->queryString; + $pos = stripos ($query, 'SUBSTRING'); + + if ( $pos === false) { + return; + } + + try { + $newQuery = ''; + + $cArg = 0; + + $inSubstring = false; + + // Create new query + for ($i = 0; $i < strlen ($query); $i++) { + if ($inSubstring == false) { + // Defines when we should start inserting values + if (substr ($query, $i, 9) == 'SUBSTRING') { + $inSubstring = true; + } + } else { + // Defines when we should stop inserting values + if (substr ($query, $i, 1) == ')') { + $inSubstring = false; + } + } + + if (substr ($query, $i, 1) == '?') { + // We found a question mark + if ($inSubstring) { + $newQuery .= $input[$cArg]; + + // + // Remove from input array + // + array_splice ($input, $cArg, 1); + } else { + $newQuery .= substr ($query, $i, 1); + $cArg++; + } + } else { + $newQuery .= substr ($query, $i, 1); + } + } + + // The global data we need + $name = OC_Config::getValue( "dbname", "owncloud" ); + $host = OC_Config::getValue( "dbhost", "" ); + $user = OC_Config::getValue( "dbuser", "" ); + $pass = OC_Config::getValue( "dbpassword", "" ); + if (strpos($host,':')) { + list($host, $port) = explode(':', $host, 2); + } else { + $port = false; + } + $opts = array(); + + if ($port) { + $dsn = 'sqlsrv:Server='.$host.','.$port.';Database='.$name; + } else { + $dsn = 'sqlsrv:Server='.$host.';Database='.$name; + } + + $PDO = new PDO($dsn, $user, $pass, $opts); + $PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); + $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + + $this->statement = $PDO->prepare($newQuery); + + $this->lastArguments = $input; + } catch (PDOException $e){ + $entry = 'PDO DB Error: "'.$e->getMessage().'"
'; + $entry .= 'Offending command was: '.$this->statement->queryString .'
'; + $entry .= 'Input parameters: ' .print_r($input, true).'
'; + $entry .= 'Stack trace: ' .$e->getTraceAsString().'
'; + OC_Log::write('core', $entry, OC_Log::FATAL); + OC_User::setUserId(null); + + // send http status 503 + header('HTTP/1.1 503 Service Temporarily Unavailable'); + header('Status: 503 Service Temporarily Unavailable'); + OC_Template::printErrorPage('Failed to connect to database'); + die ($entry); + } + } + /** * provide numRows */ diff --git a/lib/setup.php b/lib/setup.php index 4dd190b99f..d4ea26354e 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -33,12 +33,14 @@ class OC_Setup { $error[] = 'Specify a data folder.'; } - if($dbtype=='mysql' or $dbtype == 'pgsql' or $dbtype == 'oci') { //mysql and postgresql needs more config options - if($dbtype=='mysql') + if($dbtype == 'mysql' or $dbtype == 'pgsql' or $dbtype == 'oci' or $dbtype == 'mssql') { //mysql and postgresql needs more config options + if($dbtype == 'mysql') $dbprettyname = 'MySQL'; - else if($dbtype=='pgsql') + else if($dbtype == 'pgsql') $dbprettyname = 'PostgreSQL'; - else + else if ($dbtype == 'mssql') + $dbprettyname = 'MS SQL Server'; + else $dbprettyname = 'Oracle'; @@ -145,6 +147,29 @@ class OC_Setup { return $error; } } + elseif ($dbtype == 'mssql') { + $dbuser = $options['dbuser']; + $dbpass = $options['dbpass']; + $dbname = $options['dbname']; + $dbhost = $options['dbhost']; + $dbtableprefix = isset($options['dbtableprefix']) ? $options['dbtableprefix'] : 'oc_'; + + OC_Config::setValue('dbname', $dbname); + OC_Config::setValue('dbhost', $dbhost); + OC_Config::setValue('dbuser', $dbuser); + OC_Config::setValue('dbpassword', $dbpass); + OC_Config::setValue('dbtableprefix', $dbtableprefix); + + try { + self::setupMSSQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix); + } catch (Exception $e) { + $error[] = array( + 'error' => 'MS SQL username and/or password not valid', + 'hint' => 'You need to enter either an existing account or the administrator.' + ); + return $error; + } + } else { //delete the old sqlite database first, might cause infinte loops otherwise if(file_exists("$datadir/owncloud.db")) { @@ -563,6 +588,121 @@ class OC_Setup { } } + private static function setupMSSQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix) { + //check if the database user has admin right + $masterConnectionInfo = array( "Database" => "master", "UID" => $dbuser, "PWD" => $dbpass); + + $masterConnection = @sqlsrv_connect($dbhost, $masterConnectionInfo); + if(!$masterConnection) { + $entry = null; + if( ($errors = sqlsrv_errors() ) != null) { + $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
'; + } else { + $entry = ''; + } + throw new Exception('MS SQL username and/or password not valid: '.$entry); + } + + OC_Config::setValue('dbuser', $dbuser); + OC_Config::setValue('dbpassword', $dbpass); + + self::mssql_createDBLogin($dbuser, $dbpass, $masterConnection); + + self::mssql_createDatabase($dbname, $masterConnection); + + self::mssql_createDBUser($dbuser, $dbpass, $masterConnection); + + sqlsrv_close($masterConnection); + + $connectionInfo = array( "Database" => $dbname, "UID" => $dbuser, "PWD" => $dbpass); + + $connection = @sqlsrv_connect($dbhost, $connectionInfo); + + //fill the database if needed + $query="SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{$dbname}' AND TABLE_NAME = '{$dbtableprefix}users'"; + $result = sqlsrv_query($connection, $query); + if($result) { + $row=sqlsrv_fetch_array($result); + } + + if(!$result or $row[0] == 0) { + OC_DB::createDbFromStructure('db_structure.xml'); + } + + sqlsrv_close($connection); + } + + private static function mssql_createDBLogin($name, $password, $connection) { + $query = "SELECT * FROM master.sys.server_principals WHERE name = '".$name."';"; + $result = sqlsrv_query($connection, $query); + if ($result) { + $row = sqlsrv_fetch_array($result); + } + + if (!$result or $row[0] == 0) { + $query = "CREATE LOGIN [".$name."] WITH PASSWORD = '".$password."';"; + $result = sqlsrv_query($connection, $query); + if (!$result or $result === false) { + if ( ($errors = sqlsrv_errors() ) != null) { + $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
'; + } else { + $entry = ''; + } + $entry.='Offending command was: '.$query.'
'; + echo($entry); + } + } + } + + private static function mssql_createDBUser($name, $dbname, $connection) { + $query = "SELECT * FROM [".$dbname."].sys.database_principals WHERE name = '".$name."';"; + $result = sqlsrv_query($connection, $query); + if($result) { + $row=sqlsrv_fetch_array($result); + } + + if (!$result or $row[0] == 0) { + $query = "USE [".$dbname."]; CREATE USER [".$name."] FOR LOGIN [".$name."];"; + $result = sqlsrv_query($connection, $query); + if (!$result or $result === false) { + if ( ($errors = sqlsrv_errors() ) != null) { + $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
'; + } else { + $entry = ''; + } + $entry.='Offending command was: '.$query.'
'; + echo($entry); + } + } + + $query = "USE [".$dbname."]; EXEC sp_addrolemember 'db_owner', '".$name."';"; + $result = sqlsrv_query($connection, $query); + if (!$result or $result === false) { + if ( ($errors = sqlsrv_errors() ) != null) { + $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
'; + } else { + $entry = ''; + } + $entry.='Offending command was: '.$query.'
'; + echo($entry); + } + } + + private static function mssql_createDatabase($dbname, $connection) { + $query = "CREATE DATABASE [".$dbname."];"; + $result = sqlsrv_query($connection, $query); + if (!$result or $result === false) { + if ( ($errors = sqlsrv_errors() ) != null) { + $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
'; + } else { + $entry = ''; + } + $entry.='Offending command was: '.$query.'
'; + echo($entry); + } + } + + /** * create .htaccess files for apache hosts */ From b356b7065f406cd2e18ed7bb9842e292f888c8e4 Mon Sep 17 00:00:00 2001 From: raghunayyar Date: Fri, 8 Feb 2013 16:38:28 +0530 Subject: [PATCH 052/719] Password Toggle Works on Installation as well. --- core/css/styles.css | 1 + core/js/js.js | 3 ++- core/templates/installation.php | 8 ++++---- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/core/css/styles.css b/core/css/styles.css index cefab2d49f..961c7fb7f3 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -155,6 +155,7 @@ input[type="submit"].enabled { background:#66f866; border:1px solid #5e5; -moz-b } #adminpass-icon, #password-icon { top:1.1em; } input[name="password-clone"] { padding-left:1.8em; width:11.7em !important; } +input[name="adminpass-clone"] { padding-left:1.8em; width:11.7em !important; } /* Nicely grouping input field sets */ .grouptop input { diff --git a/core/js/js.js b/core/js/js.js index c137f734d9..4a1f8571cc 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -626,7 +626,8 @@ $(document).ready(function(){ }); // 'show password' checkbox - $('#password').showPassword(); + $('#password').showPassword(); + $('#adminpass').showPassword(); $('#pass2').showPassword(); //use infield labels diff --git a/core/templates/installation.php b/core/templates/installation.php index f3d232b637..19395b80ef 100644 --- a/core/templates/installation.php +++ b/core/templates/installation.php @@ -34,13 +34,13 @@
t( 'Create an admin account' ); ?> -

- +

+ - +

- + From eea4864c70fe5d0cc20e5bdcaed36232741a3520 Mon Sep 17 00:00:00 2001 From: raghunayyar Date: Fri, 8 Feb 2013 17:35:41 +0530 Subject: [PATCH 053/719] Removed whitespace from installation.php --- core/templates/installation.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/templates/installation.php b/core/templates/installation.php index 19395b80ef..b5aea466e4 100644 --- a/core/templates/installation.php +++ b/core/templates/installation.php @@ -34,10 +34,10 @@

t( 'Create an admin account' ); ?> -

- +

+ - +

From ea42014ba4e7ad44a290f968b1a1439f78c1117c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Fri, 8 Feb 2013 15:23:26 +0100 Subject: [PATCH 054/719] in case curl is not present we cannot test --- lib/util.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/util.php b/lib/util.php index 5f796e7565..7e183041d5 100755 --- a/lib/util.php +++ b/lib/util.php @@ -528,6 +528,10 @@ class OC_Util { * */ public static function isWebDAVWorking() { + if (!function_exists('curl_init')) { + return; + } + $settings = array( 'baseUri' => OC_Helper::linkToRemote('webdav'), ); From 05b46f78281e5df49a5c6a0513a37eaf03c3c29d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Fri, 8 Feb 2013 17:16:18 +0100 Subject: [PATCH 055/719] on creation only test for existing users if the backend supports user creation this solves the issue where no users can be created any more if backends are active which always return true on userExists() like WebDAV Auth --- lib/user.php | 15 ++++++++++++++- settings/ajax/createuser.php | 6 ------ settings/js/users.js | 6 ------ 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/lib/user.php b/lib/user.php index 9dc8cca97a..76c4c45ee3 100644 --- a/lib/user.php +++ b/lib/user.php @@ -172,7 +172,7 @@ class OC_User { } // Check if user already exists - if( self::userExists($uid) ) { + if( self::userExistsForCreation($uid) ) { throw new Exception('The username is already being used'); } @@ -551,6 +551,19 @@ class OC_User { return false; } + public static function userExistsForCreation($uid) { + foreach(self::$_usedBackends as $backend) { + if(!$backend->implementsActions(OC_USER_BACKEND_CREATE_USER)) + continue; + + $result=$backend->userExists($uid); + if($result===true) { + return true; + } + } + return false; + } + /** * disables a user * @param string $userid the user to disable diff --git a/settings/ajax/createuser.php b/settings/ajax/createuser.php index 09ef25d92f..56653bed6b 100644 --- a/settings/ajax/createuser.php +++ b/settings/ajax/createuser.php @@ -26,12 +26,6 @@ if(OC_User::isAdminUser(OC_User::getUser())) { $username = $_POST["username"]; $password = $_POST["password"]; -// Does the group exist? -if(OC_User::userExists($username)) { - OC_JSON::error(array("data" => array( "message" => "User already exists" ))); - exit(); -} - // Return Success story try { if (!OC_User::createUser($username, $password)) { diff --git a/settings/js/users.js b/settings/js/users.js index 094cddda29..3ab48675f2 100644 --- a/settings/js/users.js +++ b/settings/js/users.js @@ -400,12 +400,6 @@ $(document).ready(function () { event.preventDefault(); var username = $('#newusername').val(); var password = $('#newuserpassword').val(); - if ($('#content table tbody tr').filterAttr('data-uid', username).length > 0) { - OC.dialogs.alert( - t('settings', 'The username is already being used'), - t('settings', 'Error creating user')); - return; - } if ($.trim(username) == '') { OC.dialogs.alert( t('settings', 'A valid username must be provided'), From 232a98524cdc9c97ad1c5a72ec0021e4b036a69d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Fri, 8 Feb 2013 17:49:54 +0100 Subject: [PATCH 056/719] some systems use en_US.UTF8 instead of en_US.UTF-8 --- lib/base.php | 4 ++-- lib/util.php | 11 +++++------ settings/templates/admin.php | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/base.php b/lib/base.php index 5bfdb0b7c0..38ced09b81 100644 --- a/lib/base.php +++ b/lib/base.php @@ -346,7 +346,7 @@ class OC { public static function init() { // register autoloader spl_autoload_register(array('OC', 'autoload')); - setlocale(LC_ALL, 'en_US.UTF-8'); + OC_Util::issetlocaleworking(); // set some stuff //ob_start(); @@ -498,7 +498,7 @@ class OC { // write error into log if locale can't be set if (OC_Util::issetlocaleworking() == false) { - OC_Log::write('core', 'setting locale to en_US.UTF-8 failed. Support is probably not installed on your system', OC_Log::ERROR); + OC_Log::write('core', 'setting locale to en_US.UTF-8/en_US.UTF8 failed. Support is probably not installed on your system', OC_Log::ERROR); } if (OC_Config::getValue('installed', false)) { if (OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') { diff --git a/lib/util.php b/lib/util.php index 9ce974619b..27aea6996d 100755 --- a/lib/util.php +++ b/lib/util.php @@ -526,12 +526,11 @@ class OC_Util { return true; } - $result=setlocale(LC_ALL, 'en_US.UTF-8'); - if($result==false) { - return(false); - }else{ - return(true); - } + $result = setlocale(LC_ALL, 'en_US.UTF-8', 'en_US.UTF8'); + if($result == false) { + return false; + } + return true; } /** diff --git a/settings/templates/admin.php b/settings/templates/admin.php index 9a9a691dcb..32fc269478 100644 --- a/settings/templates/admin.php +++ b/settings/templates/admin.php @@ -42,7 +42,7 @@ if (!$_['islocaleworking']) { t('Locale not working');?> - t('This ownCloud server can\'t set system locale to "en_US.UTF-8". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8.'); ?> + t('This ownCloud server can\'t set system locale to "en_US.UTF-8"/"en_US.UTF8". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8/en_US.UTF8.'); ?>

From 340d6fce11d6a66e042e060c514084a0a8ec8455 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 8 Feb 2013 18:53:43 +0100 Subject: [PATCH 057/719] Better way of getting the navigation entries for an app --- lib/app.php | 17 +++++++++++++++++ settings/ajax/navigationdetect.php | 5 +---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/app.php b/lib/app.php index 3a4e21e8cd..c7e20a9fa9 100644 --- a/lib/app.php +++ b/lib/app.php @@ -285,6 +285,23 @@ class OC_App{ return true; } + /** + * @brief Get the navigation entries for the $app + * @param string $app app + * @return array of the $data added with addNavigationEntry + */ + public static function getAppNavigationEntries($app) { + if(is_file(self::getAppPath($app).'/appinfo/app.php')) { + $save = self::$navigation; + self::$navigation = array(); + require $app.'/appinfo/app.php'; + $app_entries = self::$navigation; + self::$navigation = $save; + return $app_entries; + } + return array(); + } + /** * @brief gets the active Menu entry * @return string id or empty string diff --git a/settings/ajax/navigationdetect.php b/settings/ajax/navigationdetect.php index 93acb50dc2..d21f774126 100644 --- a/settings/ajax/navigationdetect.php +++ b/settings/ajax/navigationdetect.php @@ -5,10 +5,7 @@ OCP\JSON::callCheck(); $app = $_GET['app']; -//load the one app and see what it adds to the navigation -OC_App::loadApp($app); - -$navigation = OC_App::getNavigation(); +$navigation = OC_App::getAppNavigationEntries($app); $navIds = array(); foreach ($navigation as $nav) { From fba9739448dfca7234c3910f88ce56f0f28e6bad Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 8 Feb 2013 19:06:59 +0100 Subject: [PATCH 058/719] Always load the apps before trying to match a route --- lib/base.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/base.php b/lib/base.php index 5bfdb0b7c0..e71928bfc0 100644 --- a/lib/base.php +++ b/lib/base.php @@ -556,6 +556,7 @@ class OC { if (!self::$CLI) { try { + OC_App::loadApps(); OC::getRouter()->match(OC_Request::getPathInfo()); return; } catch (Symfony\Component\Routing\Exception\ResourceNotFoundException $e) { From 680af2e6caac9a41ac6fe425632055312ea7c8ea Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Fri, 8 Feb 2013 22:30:27 +0100 Subject: [PATCH 059/719] Fix filelist shifting up one row on (multi)select --- apps/files/css/files.css | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/files/css/files.css b/apps/files/css/files.css index 67bd569cee..2c5842cbf6 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -73,8 +73,7 @@ table th#headerSize, table td.filesize { min-width:3em; padding:0 1em; text-alig table th#headerDate, table td.date { min-width:11em; padding:0 .1em 0 1em; text-align:left; } /* Multiselect bar */ -table.multiselect { top:63px; } -table.multiselect thead { position:fixed; top:82px; z-index:1; } +table.multiselect thead { z-index:1; } table.multiselect thead th { background:rgba(230,230,230,.8); color:#000; font-weight:bold; border-bottom:0; } table td.selection, table th.selection, table td.fileaction { width:2em; text-align:center; } From e8d17e4e8ed5b5913bfd4d24acb85e8378bd0d2c Mon Sep 17 00:00:00 2001 From: raghunayyar Date: Sat, 9 Feb 2013 11:40:07 +0530 Subject: [PATCH 060/719] Personal Page Password Toggle Also Loads Well. --- core/css/styles.css | 15 ++++++++------- settings/templates/personal.php | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/core/css/styles.css b/core/css/styles.css index cefab2d49f..dbe8195c08 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -183,15 +183,16 @@ label.infield { cursor:text !important; top:1.05em; left:.85em; } #login form .errors { background:#fed7d7; border:1px solid #f00; list-style-indent:inside; margin:0 0 2em; padding:1em; } /* Show password toggle */ -#show { - position:absolute; right:1em; top:.8em; float:right; - display:none; -} -#show + label { - position:absolute!important; height:14px; width:24px; right:1em; top:1.25em!important; +#show { position:absolute; right:1em; top:.8em; float:right; } +#show, #personal-show { display:none; } +#show + label { right:1em; top:1.25em!important; } +#show:checked + label, #personal-show:checked + label { opacity:.8; } +#show + label, #personal-show + label { + position:absolute!important; height:14px; width:24px; background-image:url("../img/actions/toggle.png"); background-repeat:no-repeat; opacity:.3; } -#show:checked + label { opacity:.8; } +#personal-show + label { margin-top:1em; } +#passwordbutton { margin-left:2.5em; } /* Database selector */ #login form #selectDbType { text-align:center; } diff --git a/settings/templates/personal.php b/settings/templates/personal.php index 398e65c008..6ccb607e63 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -24,8 +24,8 @@ if($_['passwordChangeSupported']) {
t('Your password was changed');?>
t('Unable to change your password');?>
- - + +
From 9bd45b26a5db6d97ee58586aed50c12c8a34d8f9 Mon Sep 17 00:00:00 2001 From: Frank Karlitschek Date: Sat, 9 Feb 2013 09:13:11 +0100 Subject: [PATCH 061/719] add the buttons for the clients to the personal page. Useful and prettier --- core/img/appstore.png | Bin 0 -> 7418 bytes core/img/desktopapp.png | Bin 0 -> 4593 bytes core/img/desktopapp.svg | 100 ++++++++++++++++++++++++++++++++ core/img/googleplay.png | Bin 0 -> 7758 bytes settings/css/settings.css | 5 ++ settings/templates/personal.php | 31 ++++++++-- 6 files changed, 130 insertions(+), 6 deletions(-) create mode 100644 core/img/appstore.png create mode 100644 core/img/desktopapp.png create mode 100644 core/img/desktopapp.svg create mode 100644 core/img/googleplay.png diff --git a/core/img/appstore.png b/core/img/appstore.png new file mode 100644 index 0000000000000000000000000000000000000000..009b2b51b98ae5ccaa835aa56a350142dfb2e827 GIT binary patch literal 7418 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 literal 0 HcmV?d00001 diff --git a/core/img/desktopapp.png b/core/img/desktopapp.png new file mode 100644 index 0000000000000000000000000000000000000000..182ddd2cf18891878210352e9ac0f34d7d89409d GIT binary patch literal 4593 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 Ci_HZ9 literal 0 HcmV?d00001 diff --git a/core/img/desktopapp.svg b/core/img/desktopapp.svg new file mode 100644 index 0000000000..93d91e461a --- /dev/null +++ b/core/img/desktopapp.svg @@ -0,0 +1,100 @@ + +image/svg+xml + + +Desktop app +Windows, OS X, Linux + \ No newline at end of file diff --git a/core/img/googleplay.png b/core/img/googleplay.png new file mode 100644 index 0000000000000000000000000000000000000000..2d9ad6296080509464d3d412c8b3e93254626c3f GIT binary patch literal 7758 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 literal 0 HcmV?d00001 diff --git a/settings/css/settings.css b/settings/css/settings.css index 9dd17daaeb..a767ba4165 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -75,3 +75,8 @@ table.shareAPI td { padding-bottom: 0.8em; } /* HELP */ .pressed {background-color:#DDD;} + +.clientsbox { margin:12px; text-align:center; } +.clientsbox h1 { font-size:40px; font-weight:bold; margin:50px 0 20px; } +.clientsbox h2 { font-size:20px; font-weight:bold; margin:35px 0 10px; } + diff --git a/settings/templates/personal.php b/settings/templates/personal.php index 6ccb607e63..078328442e 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -8,12 +8,31 @@

t('You have used %s of the available %s', array($_['usage'], $_['total_space']));?>

-
- t('Clients');?> - t('Download Desktop Clients');?> - t('Download Android Client');?> - t('Download iOS Client');?> -
+ + +
+

t('Get the apps to sync your files');?>

+ + + + + + + + + +
+ + + + +
t('Show First Run Wizard again');?>
+ + Date: Sat, 9 Feb 2013 09:30:59 +0100 Subject: [PATCH 062/719] add in new window --- settings/templates/personal.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/settings/templates/personal.php b/settings/templates/personal.php index 078328442e..bc9db0f2b8 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -13,13 +13,13 @@

t('Get the apps to sync your files');?>

- + - + - +
From 1c94ec71eff884238e2269407cca5ee3d02f8a63 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Sat, 9 Feb 2013 13:10:53 +0100 Subject: [PATCH 063/719] LDAP: fix database cleanup in update script --- apps/user_ldap/appinfo/update.php | 5 +++-- apps/user_ldap/appinfo/version | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php index 5b8364884f..bc32d4ef4c 100644 --- a/apps/user_ldap/appinfo/update.php +++ b/apps/user_ldap/appinfo/update.php @@ -89,5 +89,6 @@ if(!isset($connector)) { $connector->getConfiguration(); $connector->saveConfiguration(); -// we don't save it anymore, was a well-meant bad idea -\OC_Preferences::deleteKey('%', 'user_ldap' , 'homedir'); \ No newline at end of file +// we don't save it anymore, was a well-meant bad idea. Clean up database. +$query = OC_DB::prepare('DELETE FROM `*PREFIX*preferences` WHERE `appid` = ? AND `configkey` = ?'); +$query->execute(array('user_ldap' , 'homedir')); diff --git a/apps/user_ldap/appinfo/version b/apps/user_ldap/appinfo/version index 44938339fa..e4d93c8d61 100644 --- a/apps/user_ldap/appinfo/version +++ b/apps/user_ldap/appinfo/version @@ -1 +1 @@ -0.3.9.1 \ No newline at end of file +0.3.9.4 \ No newline at end of file From 4a130d106c91246c046b1c924a92e674a47b7767 Mon Sep 17 00:00:00 2001 From: Frank Karlitschek Date: Sat, 9 Feb 2013 10:09:37 +0100 Subject: [PATCH 064/719] I'm an evil bastard and I commit this 3 letter text fix without a pull request. --- lib/app.php | 2 +- settings/ajax/apps/ocs.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/app.php b/lib/app.php index 901a8171ef..bf7eeef018 100644 --- a/lib/app.php +++ b/lib/app.php @@ -671,7 +671,7 @@ class OC_App{ $info['update']=false; } else { $info['internal']=false; - $info['internallabel']='3rd Party App'; + $info['internallabel']='3rd Party'; $info['internalclass']='externalapp'; $info['update']=OC_Installer::isUpdateAvailable($app); } diff --git a/settings/ajax/apps/ocs.php b/settings/ajax/apps/ocs.php index 9bf3ccc34d..9c5adfcfef 100644 --- a/settings/ajax/apps/ocs.php +++ b/settings/ajax/apps/ocs.php @@ -45,7 +45,7 @@ if(is_array($categoryNames)) { $pre=$app['preview']; } if($app['label']=='recommended') { - $label='3rd Party App'; + $label='3rd Party'; } else { $label='Recommended'; } From b24e3f1d32efc3471fd2d5c54a067867635b81c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Sat, 9 Feb 2013 11:07:47 +0100 Subject: [PATCH 065/719] comment added --- apps/files_trashbin/lib/trash.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index 091fe684c1..d88dc1ac25 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -291,7 +291,7 @@ class Trashbin { $query->execute(array($user,$limit)); $availableSpace = $availableSpace + $size; - + // if size limit for trash bin reached, delete oldest files in trash bin if ($availableSpace < 0) { $query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash WHERE user=? ORDER BY timestamp ASC'); $result = $query->execute(array($user))->fetchAll(); @@ -306,7 +306,6 @@ class Trashbin { } - return $size; } From 60cc7d0ba27c035485df1ee62be892a468292fa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Sat, 9 Feb 2013 11:11:07 +0100 Subject: [PATCH 066/719] debug output removed --- apps/files_trashbin/ajax/undelete.php | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/files_trashbin/ajax/undelete.php b/apps/files_trashbin/ajax/undelete.php index cb679f2608..a118d003de 100644 --- a/apps/files_trashbin/ajax/undelete.php +++ b/apps/files_trashbin/ajax/undelete.php @@ -15,7 +15,6 @@ foreach ($list as $file) { if ( $dirlisting=='0') { $delimiter = strrpos($file, '.d'); $filename = substr($file, 0, $delimiter); - error_log("filename : " . $filename); $timestamp = substr($file, $delimiter+2); } else { $path_parts = pathinfo($file); From f8335c481569e2454ee7d9ca51256964885aa3c3 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Sat, 9 Feb 2013 11:34:25 +0100 Subject: [PATCH 067/719] moved iframe height and width fix from js to css --- core/css/styles.css | 2 ++ settings/templates/help.php | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/core/css/styles.css b/core/css/styles.css index 556ca6b82b..e6a4bf6199 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -319,6 +319,8 @@ a.bookmarklet { background-color:#ddd; border:1px solid #ccc; padding:5px;paddin .arrow.left { left:-13px; bottom:1.2em; -webkit-transform:rotate(270deg); -moz-transform:rotate(270deg); -o-transform:rotate(270deg); -ms-transform:rotate(270deg); transform:rotate(270deg); } .arrow.up { top:-8px; right:2em; } .arrow.down { -webkit-transform:rotate(180deg); -moz-transform:rotate(180deg); -o-transform:rotate(180deg); -ms-transform:rotate(180deg); transform:rotate(180deg); } +.help-includes {overflow: hidden; width: 100%; height: 100%; -moz-box-sizing: border-box; box-sizing: border-box; padding-top: 2.8em; } +.help-iframe {width: 100%; height: 100%; margin: 0;padding: 0; border: 0; overflow: auto;} /* ---- BREADCRUMB ---- */ div.crumb { float:left; display:block; background:url('../img/breadcrumb.svg') no-repeat right 0; padding:.75em 1.5em 0 1em; height:2.9em; } diff --git a/settings/templates/help.php b/settings/templates/help.php index 7383fdcf56..315cbfdb9a 100644 --- a/settings/templates/help.php +++ b/settings/templates/help.php @@ -10,5 +10,6 @@ t( 'Commercial Support' ); ?> -

- \ No newline at end of file +
+ +
From 742cafb03a79fca4f3847bbd16912034f40ccfb1 Mon Sep 17 00:00:00 2001 From: Tom Needham Date: Sat, 9 Feb 2013 11:22:29 +0000 Subject: [PATCH 068/719] Change strucutre of cloud/capabilities response --- lib/ocs/cloud.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/ocs/cloud.php b/lib/ocs/cloud.php index 567defa663..9ae4b4c8eb 100644 --- a/lib/ocs/cloud.php +++ b/lib/ocs/cloud.php @@ -34,7 +34,12 @@ class OC_OCS_Cloud { 'string' => OC_Util::getVersionString(), 'edition' => OC_Util::getEditionString(), ); - $result['apps'] = array(); + + $result['capabilities'] = array( + 'core' => array( + 'pollinterval' => OC_Config::getValue('pollinterval', 60), + ), + ); return new OC_OCS_Result($result); } From 675afbc21374b03140f4570c585eace56875819a Mon Sep 17 00:00:00 2001 From: Tom Needham Date: Sat, 9 Feb 2013 11:30:33 +0000 Subject: [PATCH 069/719] Remove accidental inclusion of apps repo. --- apps2 | 1 - 1 file changed, 1 deletion(-) delete mode 160000 apps2 diff --git a/apps2 b/apps2 deleted file mode 160000 index 1ac3c35a40..0000000000 --- a/apps2 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1ac3c35a40c6613aba8274b056ae40aa0ce559c7 From 7507b1ddd388c145b555dcd05a3225babb749724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Sat, 9 Feb 2013 12:32:08 +0100 Subject: [PATCH 070/719] don't add a extra 'Trash' breadcrumb since we have the home-symbol now --- apps/files_trashbin/index.php | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php index 46a601cfdd..b78fd4e256 100644 --- a/apps/files_trashbin/index.php +++ b/apps/files_trashbin/index.php @@ -67,7 +67,6 @@ foreach ($result as $r) { } // Make breadcrumb -$breadcrumb = array(array('dir' => '', 'name' => 'Trash')); $pathtohere = ''; foreach (explode('/', $dir) as $i) { if ($i != '') { From 2137bbe330c52a2bc5152537c4bea3f758b6bd95 Mon Sep 17 00:00:00 2001 From: Georg Ehrke Date: Sat, 9 Feb 2013 12:38:40 +0100 Subject: [PATCH 071/719] remove code properly --- apps/files/js/filelist.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 5ee55256ea..4a66b33694 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -216,9 +216,6 @@ var FileList={ }, replace:function(oldName, newName, isNewFile) { // Finish any existing actions - /*if (FileList.lastAction || !FileList.useUndo) { - FileList.lastAction(); - }*/ $('tr').filterAttr('data-file', oldName).hide(); $('tr').filterAttr('data-file', newName).hide(); var tr = $('tr').filterAttr('data-file', oldName).clone(); From d5dc8ae726f33719328d7be6b73195a707dd52cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Sat, 9 Feb 2013 12:41:47 +0100 Subject: [PATCH 072/719] initialize breadcrumbs array --- apps/files_trashbin/index.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php index b78fd4e256..1aceb8ffef 100644 --- a/apps/files_trashbin/index.php +++ b/apps/files_trashbin/index.php @@ -67,7 +67,8 @@ foreach ($result as $r) { } // Make breadcrumb -$pathtohere = ''; +$pathtohere = ''; +$breadcrumb = array(); foreach (explode('/', $dir) as $i) { if ($i != '') { if ( preg_match('/^(.+)\.d[0-9]+$/', $i, $match) ) { From 5102596e6d461313cd10f64d033107ce1218a854 Mon Sep 17 00:00:00 2001 From: Tom Needham Date: Sat, 9 Feb 2013 11:53:54 +0000 Subject: [PATCH 073/719] Add capabilities exposure to the versioning app --- apps/files_versions/appinfo/app.php | 1 + apps/files_versions/appinfo/routes.php | 9 +++++++++ apps/files_versions/lib/capabilities.php | 22 ++++++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 apps/files_versions/appinfo/routes.php create mode 100644 apps/files_versions/lib/capabilities.php diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php index edd0a2f702..9ac86728cc 100644 --- a/apps/files_versions/appinfo/app.php +++ b/apps/files_versions/appinfo/app.php @@ -3,6 +3,7 @@ //require_once 'files_versions/versions.php'; OC::$CLASSPATH['OCA_Versions\Storage'] = 'apps/files_versions/lib/versions.php'; OC::$CLASSPATH['OCA_Versions\Hooks'] = 'apps/files_versions/lib/hooks.php'; +OC::$CLASSPATH['OC_Files_Versions_Capabiltiies'] = 'apps/files_versions/lib/capabilities.php'; OCP\App::registerAdmin('files_versions', 'settings'); OCP\App::registerPersonal('files_versions', 'settings-personal'); diff --git a/apps/files_versions/appinfo/routes.php b/apps/files_versions/appinfo/routes.php new file mode 100644 index 0000000000..125b96db17 --- /dev/null +++ b/apps/files_versions/appinfo/routes.php @@ -0,0 +1,9 @@ + + * This file is licensed under the Affero General Public License version 3 or later. + * See the COPYING-README file. + */ + +// Register with the capabilities API +OC_API::register('get', '/cloud/capabilities', array('OC_Files_Versions_Capabiltiies', 'getCapabilities'), 'ocs', OC_API::USER_AUTH); \ No newline at end of file diff --git a/apps/files_versions/lib/capabilities.php b/apps/files_versions/lib/capabilities.php new file mode 100644 index 0000000000..ac70773df0 --- /dev/null +++ b/apps/files_versions/lib/capabilities.php @@ -0,0 +1,22 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +class OC_Files_Versions_Capabilities { + + public static function getCapabilities() { + return OC_OCS_Result(array( + 'capabilities' => array( + 'files_versions' => array( + 'versioning' => true, + ), + ), + )); + } + +} +?> \ No newline at end of file From eefaefe87d4ef2271c7a079632744948ca8d2496 Mon Sep 17 00:00:00 2001 From: Tom Needham Date: Sat, 9 Feb 2013 12:00:44 +0000 Subject: [PATCH 074/719] Use OC_User::isAdminUser() in lib/api.php --- lib/api.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/api.php b/lib/api.php index 3e998bd9e4..3d160734fb 100644 --- a/lib/api.php +++ b/lib/api.php @@ -209,7 +209,7 @@ class OC_API { return false; } else { $subAdmin = OC_SubAdmin::isSubAdmin($user); - $admin = OC_Group::inGroup($user, 'admin'); + $admin = OC_User::isAdminUser($user); if($subAdmin || $admin) { return true; } else { @@ -223,7 +223,7 @@ class OC_API { if(!$user) { return false; } else { - return OC_Group::inGroup($user, 'admin'); + return OC_User::isAdminUser($user); } break; default: From 5ad1b63f762ab52f8bf550787588dd1ca728145d Mon Sep 17 00:00:00 2001 From: Tom Needham Date: Sat, 9 Feb 2013 12:50:19 +0000 Subject: [PATCH 075/719] Fix api result merging. --- apps/files_versions/appinfo/app.php | 3 +-- apps/files_versions/appinfo/routes.php | 2 +- apps/files_versions/lib/capabilities.php | 6 ++++-- lib/api.php | 6 +++--- ocs/routes.php | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php index d45c0c99a7..8de5dc27ca 100644 --- a/apps/files_versions/appinfo/app.php +++ b/apps/files_versions/appinfo/app.php @@ -3,8 +3,7 @@ //require_once 'files_versions/versions.php'; OC::$CLASSPATH['OCA\Files_Versions\Storage'] = 'apps/files_versions/lib/versions.php'; OC::$CLASSPATH['OCA\Files_Versions\Hooks'] = 'apps/files_versions/lib/hooks.php'; -OC::$CLASSPATH['OCA\Files_Versions\Capabiltiies'] = 'apps/files_versions/lib/capabilities.php'; - +OC::$CLASSPATH['OCA\Files_Versions\Capabilities'] = 'apps/files_versions/lib/capabilities.php'; OCP\App::registerAdmin('files_versions', 'settings'); OCP\App::registerPersonal('files_versions', 'settings-personal'); diff --git a/apps/files_versions/appinfo/routes.php b/apps/files_versions/appinfo/routes.php index 125b96db17..3793e25173 100644 --- a/apps/files_versions/appinfo/routes.php +++ b/apps/files_versions/appinfo/routes.php @@ -6,4 +6,4 @@ */ // Register with the capabilities API -OC_API::register('get', '/cloud/capabilities', array('OC_Files_Versions_Capabiltiies', 'getCapabilities'), 'ocs', OC_API::USER_AUTH); \ No newline at end of file +OC_API::register('get', '/cloud/capabilities', array('OCA\Files_Versions\Capabilities', 'getCapabilities'), 'ocs', OC_API::USER_AUTH); \ No newline at end of file diff --git a/apps/files_versions/lib/capabilities.php b/apps/files_versions/lib/capabilities.php index ac70773df0..1592c2b06e 100644 --- a/apps/files_versions/lib/capabilities.php +++ b/apps/files_versions/lib/capabilities.php @@ -6,10 +6,12 @@ * See the COPYING-README file. */ -class OC_Files_Versions_Capabilities { +namespace OCA\Files_Versions; + +class Capabilities { public static function getCapabilities() { - return OC_OCS_Result(array( + return new \OC_OCS_Result(array( 'capabilities' => array( 'files_versions' => array( 'versioning' => true, diff --git a/lib/api.php b/lib/api.php index 3d160734fb..d50882b119 100644 --- a/lib/api.php +++ b/lib/api.php @@ -118,7 +118,6 @@ class OC_API { ); } - $response = self::mergeResponses($responses); $formats = array('json', 'xml'); $format = !empty($_GET['format']) && in_array($_GET['format'], $formats) ? $_GET['format'] : 'xml'; @@ -134,7 +133,7 @@ class OC_API { $response = array(); // Sort into shipped and thirdparty $shipped = array( - 'succeded' => array(), + 'succeeded' => array(), 'failed' => array(), ); $thirdparty = array( @@ -143,7 +142,7 @@ class OC_API { ); foreach($responses as $response) { - if(OC_App::isShipped($response['app'])) { + if(OC_App::isShipped($response['app']) || ($response['app'] === 'core')) { if($response['response']->succeeded()) { $shipped['succeeded'][$response['app']] = $response['response']; } else { @@ -250,6 +249,7 @@ class OC_API { */ private static function respond($result, $format='xml') { // Send 401 headers if unauthorised + die(var_dump($result)); if($result->getStatusCode() === self::RESPOND_UNAUTHORISED) { header('WWW-Authenticate: Basic realm="Authorisation Required"'); header('HTTP/1.0 401 Unauthorized'); diff --git a/ocs/routes.php b/ocs/routes.php index 5e4758fb70..81beae2f88 100644 --- a/ocs/routes.php +++ b/ocs/routes.php @@ -18,4 +18,4 @@ OC_API::register('get', '/privatedata/getattribute/{app}/{key}', array('OC_OCS_P OC_API::register('post', '/privatedata/setattribute/{app}/{key}', array('OC_OCS_Privatedata', 'set'), 'ocs', OC_API::USER_AUTH); OC_API::register('post', '/privatedata/deleteattribute/{app}/{key}', array('OC_OCS_Privatedata', 'delete'), 'ocs', OC_API::USER_AUTH); // cloud -OC_API::register('get', '/cloud/capabilities', array('OC_OCS_Cloud', 'getCapabilities'), 'ocs', OC_API::USER_AUTH); \ No newline at end of file +OC_API::register('get', '/cloud/capabilities', array('OC_OCS_Cloud', 'getCapabilities'), 'core', OC_API::USER_AUTH); \ No newline at end of file From ddc7af9a53fb78a363c21043ab0e2e1a80b48750 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Sat, 9 Feb 2013 13:51:44 +0100 Subject: [PATCH 076/719] know your libraries ;-) strrpos fails in cases the file in the path has no dot but the parent folder --- lib/files/view.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/files/view.php b/lib/files/view.php index dfcb770328..1a234228ea 100644 --- a/lib/files/view.php +++ b/lib/files/view.php @@ -509,11 +509,7 @@ class View { if (Filesystem::isValidPath($path)) { $source = $this->fopen($path, 'r'); if ($source) { - $extension = ''; - $extOffset = strpos($path, '.'); - if ($extOffset !== false) { - $extension = substr($path, strrpos($path, '.')); - } + $extension = pathinfo($path, PATHINFO_EXTENSION); $tmpFile = \OC_Helper::tmpFile($extension); file_put_contents($tmpFile, $source); return $tmpFile; From 60344bf1dd48e52baa129c8fc04e81a338c12551 Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Sat, 9 Feb 2013 14:00:26 +0100 Subject: [PATCH 077/719] Another attempt on the filelist heading. --- apps/files/css/files.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/files/css/files.css b/apps/files/css/files.css index 2c5842cbf6..caebb5151d 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -73,9 +73,9 @@ table th#headerSize, table td.filesize { min-width:3em; padding:0 1em; text-alig table th#headerDate, table td.date { min-width:11em; padding:0 .1em 0 1em; text-align:left; } /* Multiselect bar */ -table.multiselect thead { z-index:1; } +table.multiselect thead { position:fixed; z-index:1; } table.multiselect thead th { background:rgba(230,230,230,.8); color:#000; font-weight:bold; border-bottom:0; } - +table.multiselect tbody { position: absolute; margin-top:2em; } table td.selection, table th.selection, table td.fileaction { width:2em; text-align:center; } table td.filename a.name { display:block; height:1.5em; vertical-align:middle; margin-left:3em; } table tr[data-type="dir"] td.filename a.name span.nametext {font-weight:bold; } From 2b4823d62d8b0d3895e4c9f14dfdc1b99d4e5375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Kj=C3=B6lhede?= Date: Sat, 9 Feb 2013 14:07:18 +0100 Subject: [PATCH 078/719] Deleted phpseclib/tests --- .../phpseclib/tests/Crypt/Hash/MD5Test.php | 47 ---- .../phpseclib/tests/Crypt/Hash/TestCase.php | 47 ---- .../phpseclib/tests/Math/BigIntegerTest.php | 259 ------------------ .../3rdparty/phpseclib/tests/bootstrap.php | 22 -- 4 files changed, 375 deletions(-) delete mode 100644 apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/MD5Test.php delete mode 100644 apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/TestCase.php delete mode 100644 apps/files_external/3rdparty/phpseclib/tests/Math/BigIntegerTest.php delete mode 100644 apps/files_external/3rdparty/phpseclib/tests/bootstrap.php diff --git a/apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/MD5Test.php b/apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/MD5Test.php deleted file mode 100644 index 41fc20a9a2..0000000000 --- a/apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/MD5Test.php +++ /dev/null @@ -1,47 +0,0 @@ - - * @copyright MMXII Andreas Fischer - * @license http://www.opensource.org/licenses/mit-license.html MIT License - */ - -class Crypt_Hash_MD5Test extends Crypt_Hash_TestCase -{ - public function getInstance() - { - return new Crypt_Hash('md5'); - } - - /** - * @dataProvider hashData() - */ - public function testHash($message, $result) - { - $this->assertHashesTo($this->getInstance(), $message, $result); - } - - static public function hashData() - { - return array( - array('', 'd41d8cd98f00b204e9800998ecf8427e'), - array('The quick brown fox jumps over the lazy dog', '9e107d9d372bb6826bd81d3542a419d6'), - array('The quick brown fox jumps over the lazy dog.', 'e4d909c290d0fb1ca068ffaddf22cbd0'), - ); - } - - /** - * @dataProvider hmacData() - */ - public function testHMAC($key, $message, $result) - { - $this->assertHMACsTo($this->getInstance(), $key, $message, $result); - } - - static public function hmacData() - { - return array( - array('', '', '74e6f7298a9c2d168935f58c001bad88'), - array('key', 'The quick brown fox jumps over the lazy dog', '80070713463e7749b90c2dc24911e275'), - ); - } -} diff --git a/apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/TestCase.php b/apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/TestCase.php deleted file mode 100644 index 1489acd7b4..0000000000 --- a/apps/files_external/3rdparty/phpseclib/tests/Crypt/Hash/TestCase.php +++ /dev/null @@ -1,47 +0,0 @@ - - * @copyright MMXII Andreas Fischer - * @license http://www.opensource.org/licenses/mit-license.html MIT License - */ - -abstract class Crypt_Hash_TestCase extends PHPUnit_Framework_TestCase -{ - static public function setUpBeforeClass() - { - require_once('Crypt/Hash.php'); - - if (!defined('CRYPT_HASH_MODE')) - { - define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_INTERNAL); - } - } - - public function setUp() - { - if (defined('CRYPT_HASH_MODE') && CRYPT_HASH_MODE !== CRYPT_HASH_MODE_INTERNAL) - { - $this->markTestSkipped('Skipping test because CRYPT_HASH_MODE is not defined as CRYPT_HASH_MODE_INTERNAL.'); - } - } - - protected function assertHashesTo(Crypt_Hash $hash, $message, $expected) - { - $this->assertEquals( - strtolower($expected), - bin2hex($hash->hash($message)), - sprintf("Failed asserting that '%s' hashes to '%s'.", $message, $expected) - ); - } - - protected function assertHMACsTo(Crypt_Hash $hash, $key, $message, $expected) - { - $hash->setKey($key); - - $this->assertEquals( - strtolower($expected), - bin2hex($hash->hash($message)), - sprintf("Failed asserting that '%s' HMACs to '%s' with key '%s'.", $message, $expected, $key) - ); - } -} diff --git a/apps/files_external/3rdparty/phpseclib/tests/Math/BigIntegerTest.php b/apps/files_external/3rdparty/phpseclib/tests/Math/BigIntegerTest.php deleted file mode 100644 index 1317609f46..0000000000 --- a/apps/files_external/3rdparty/phpseclib/tests/Math/BigIntegerTest.php +++ /dev/null @@ -1,259 +0,0 @@ - - * @copyright MMXII Andreas Fischer - * @license http://www.opensource.org/licenses/mit-license.html MIT License - */ - -class Math_BigIntegerTest extends PHPUnit_Framework_TestCase -{ - public function getInstance($x = 0, $base = 10) - { - return new Math_BigInteger($x, $base); - } - - public function testConstructorBase2() - { - // 2**65 = 36893488147419103232 - $this->assertSame('36893488147419103232', (string) $this->getInstance('1' . str_repeat('0', 65), 2)); - } - - public function testConstructorBase10() - { - $this->assertSame('18446744073709551616', (string) $this->getInstance('18446744073709551616')); - } - - public function testConstructorBase16() - { - $this->assertSame('50', (string) $this->getInstance('0x32', 16)); - $this->assertSame('12345678910', (string) $this->getInstance('0x2DFDC1C3E', 16)); - $this->assertSame('18446744073709551615', (string) $this->getInstance('0xFFFFFFFFFFFFFFFF', 16)); - $this->assertSame('18446744073709551616', (string) $this->getInstance('0x10000000000000000', 16)); - } - - public function testToBytes() - { - $this->assertSame(chr(65), $this->getInstance('65')->toBytes()); - } - - public function testToBytesTwosCompliment() - { - $this->assertSame(chr(126), $this->getInstance('01111110', 2)->toBytes(true)); - } - - public function testToHex() - { - $this->assertSame('41', $this->getInstance('65')->toHex()); - } - - public function testToBits() - { - $this->assertSame('1000001', $this->getInstance('65')->toBits()); - } - - public function testAdd() - { - $x = $this->getInstance('18446744073709551615'); - $y = $this->getInstance( '100000000000'); - - $a = $x->add($y); - $b = $y->add($x); - - $this->assertTrue($a->equals($b)); - $this->assertTrue($b->equals($a)); - - $this->assertSame('18446744173709551615', (string) $a); - $this->assertSame('18446744173709551615', (string) $b); - } - - public function testSubtract() - { - $x = $this->getInstance('18446744073709551618'); - $y = $this->getInstance( '4000000000000'); - $this->assertSame('18446740073709551618', (string) $x->subtract($y)); - } - - public function testMultiply() - { - $x = $this->getInstance('8589934592'); // 2**33 - $y = $this->getInstance('36893488147419103232'); // 2**65 - - $a = $x->multiply($y); // 2**98 - $b = $y->multiply($x); // 2**98 - - $this->assertTrue($a->equals($b)); - $this->assertTrue($b->equals($a)); - - $this->assertSame('316912650057057350374175801344', (string) $a); - $this->assertSame('316912650057057350374175801344', (string) $b); - } - - public function testDivide() - { - $x = $this->getInstance('1180591620717411303425'); // 2**70 + 1 - $y = $this->getInstance('12345678910'); - - list($q, $r) = $x->divide($y); - - $this->assertSame('95627922070', (string) $q); - $this->assertSame('10688759725', (string) $r); - } - - public function testModPow() - { - $a = $this->getInstance('10'); - $b = $this->getInstance('20'); - $c = $this->getInstance('30'); - $d = $a->modPow($b, $c); - - $this->assertSame('10', (string) $d); - } - - public function testModInverse() - { - $a = $this->getInstance(30); - $b = $this->getInstance(17); - - $c = $a->modInverse($b); - $this->assertSame('4', (string) $c); - - $d = $a->multiply($c); - list($q, $r) = $d->divide($b); - $this->assertSame('1', (string) $r); - } - - public function testExtendedGCD() - { - $a = $this->getInstance(693); - $b = $this->getInstance(609); - - $arr = $a->extendedGCD($b); - - $this->assertSame('21', (string) $arr['gcd']); - $this->assertSame(21, $a->toString() * $arr['x']->toString() + $b->toString() * $arr['y']->toString()); - } - - public function testGCD() - { - $x = $this->getInstance(693); - $y = $this->getInstance(609); - $this->assertSame('21', (string) $x->gcd($y)); - } - - public function testAbs() - { - $x = $this->getInstance('-18446744073709551617'); - $y = $x->abs(); - - $this->assertSame('-18446744073709551617', (string) $x); - $this->assertSame('18446744073709551617', (string) $y); - } - - public function testEquals() - { - $x = $this->getInstance('18446744073709551616'); - $y = $this->getInstance('18446744073709551616'); - - $this->assertTrue($x->equals($y)); - $this->assertTrue($y->equals($x)); - } - - public function testCompare() - { - $a = $this->getInstance('-18446744073709551616'); - $b = $this->getInstance('36893488147419103232'); - $c = $this->getInstance('36893488147419103232'); - $d = $this->getInstance('316912650057057350374175801344'); - - // a < b - $this->assertLessThan(0, $a->compare($b)); - $this->assertGreaterThan(0, $b->compare($a)); - - // b = c - $this->assertSame(0, $b->compare($c)); - $this->assertSame(0, $c->compare($b)); - - // c < d - $this->assertLessThan(0, $c->compare($d)); - $this->assertGreaterThan(0, $d->compare($c)); - } - - public function testBitwiseAND() - { - $x = $this->getInstance('66666666666666666666666', 16); - $y = $this->getInstance('33333333333333333333333', 16); - $z = $this->getInstance('22222222222222222222222', 16); - - $this->assertSame($z->toHex(), $x->bitwise_AND($y)->toHex()); - } - - public function testBitwiseOR() - { - $x = $this->getInstance('11111111111111111111111', 16); - $y = $this->getInstance('EEEEEEEEEEEEEEEEEEEEEEE', 16); - $z = $this->getInstance('FFFFFFFFFFFFFFFFFFFFFFF', 16); - - $this->assertSame($z->toHex(), $x->bitwise_OR($y)->toHex()); - } - - public function testBitwiseXOR() - { - $x = $this->getInstance('AFAFAFAFAFAFAFAFAFAFAFAF', 16); - $y = $this->getInstance('133713371337133713371337', 16); - $z = $this->getInstance('BC98BC98BC98BC98BC98BC98', 16); - - $this->assertSame($z->toHex(), $x->bitwise_XOR($y)->toHex()); - } - - public function testBitwiseNOT() - { - $x = $this->getInstance('EEEEEEEEEEEEEEEEEEEEEEE', 16); - $z = $this->getInstance('11111111111111111111111', 16); - - $this->assertSame($z->toHex(), $x->bitwise_NOT()->toHex()); - } - - public function testBitwiseLeftShift() - { - $x = $this->getInstance('0x0000000FF0000000', 16); - $y = $this->getInstance('0x000FF00000000000', 16); - - $this->assertSame($y->toHex(), $x->bitwise_LeftShift(16)->toHex()); - } - - public function testBitwiseRightShift() - { - $x = $this->getInstance('0x0000000FF0000000', 16); - $y = $this->getInstance('0x00000000000FF000', 16); - $z = $this->getInstance('0x000000000000000F', 16); - $n = $this->getInstance(0); - - $this->assertSame($y->toHex(), $x->bitwise_RightShift(16)->toHex()); - $this->assertSame($z->toHex(), $x->bitwise_RightShift(32)->toHex()); - $this->assertSame($n->toHex(), $x->bitwise_RightShift(36)->toHex()); - } - - public function testSerializable() - { - $x = $this->getInstance('18446744073709551616'); - $y = unserialize(serialize($x)); - - $this->assertTrue($x->equals($y)); - $this->assertTrue($y->equals($x)); - - $this->assertSame('18446744073709551616', (string) $x); - $this->assertSame('18446744073709551616', (string) $y); - } - - public function testClone() - { - $x = $this->getInstance('18446744073709551616'); - $y = clone $x; - - $this->assertTrue($x->equals($y)); - $this->assertTrue($y->equals($x)); - - $this->assertSame('18446744073709551616', (string) $x); - $this->assertSame('18446744073709551616', (string) $y); - } -} diff --git a/apps/files_external/3rdparty/phpseclib/tests/bootstrap.php b/apps/files_external/3rdparty/phpseclib/tests/bootstrap.php deleted file mode 100644 index eb7136b8bb..0000000000 --- a/apps/files_external/3rdparty/phpseclib/tests/bootstrap.php +++ /dev/null @@ -1,22 +0,0 @@ - Date: Sat, 9 Feb 2013 14:12:17 +0100 Subject: [PATCH 079/719] Modified to new class structure --- apps/files_external/lib/sftp.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index 5395618297..a2d393818f 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -9,7 +9,9 @@ set_include_path(get_include_path() . PATH_SEPARATOR . OC_App::getAppPath('files_external') . '/3rdparty/phpseclib/phpseclib'); require('Net/SFTP.php'); -class OC_Filestorage_SFTP extends OC_Filestorage_Common { +namespace OC\Files\Storage; + +class SFTP extends OC\Files\Storage\Common { private $host; private $user; private $password; From 676f89bbdb5ed1fff65bd54881d590c0ced5b7e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Sat, 9 Feb 2013 14:42:03 +0100 Subject: [PATCH 080/719] extract common code --- apps/files/js/filelist.js | 131 +++++++++++++++++++++++++------------- 1 file changed, 88 insertions(+), 43 deletions(-) diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 4a66b33694..cc107656da 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -3,35 +3,92 @@ var FileList={ update:function(fileListHtml) { $('#fileList').empty().html(fileListHtml); }, - addFile:function(name,size,lastModified,loading,hidden){ - var basename, extension, simpleSize, sizeColor, lastModifiedTime, modifiedColor, - img=(loading)?OC.imagePath('core', 'loading.gif'):OC.imagePath('core', 'filetypes/file.png'), - html='
'; - if(name.indexOf('.')!=-1){ + createRow:function(type, name, iconurl, linktarget, size, lastModified, permissions){ + var td, simpleSize, basename, extension; + //containing tr + var tr = $('').attr({ + "data-type": type, + "data-size": size, + "data-file": name, + "data-permissions": permissions + }); + // filename td + td = $('').attr({ + "class": "filename", + "style": 'background-image:url('+iconurl+')' + }); + td.append(''); + var link_elem = $('').attr({ + "class": "name", + "href": linktarget + }); + //split extension from filename for non dirs + if (type != 'dir' && name.indexOf('.')!=-1) { basename=name.substr(0,name.lastIndexOf('.')); extension=name.substr(name.lastIndexOf('.')); - }else{ + } else { basename=name; extension=false; } - html+=''; - if(size!='Pending'){ + //dirs can show the number of uploaded files + if (type == 'dir') { + link_elem.append($('').attr({ + 'class': 'uploadtext', + 'currentUploads': 0 + })); + } + td.append(link_elem); + tr.append(td); + + //size column + if(size!=t('files', 'Pending')){ simpleSize=simpleFileSize(size); }else{ - simpleSize='Pending'; + simpleSize=t('files', 'Pending'); } - sizeColor = Math.round(200-size/(1024*1024)*2); - lastModifiedTime=Math.round(lastModified.getTime() / 1000); - modifiedColor=Math.round((Math.round((new Date()).getTime() / 1000)-lastModifiedTime)/60/60/24*14); - html+=''; - html+=''; - html+=''; - FileList.insertElement(name,'file',$(html).attr('data-file',name)); + var sizeColor = Math.round(200-Math.pow((size/(1024*1024)),2)); + var lastModifiedTime = Math.round(lastModified.getTime() / 1000); + td = $('').attr({ + "class": "filesize", + "title": humanFileSize(size), + "style": 'color:rgb('+sizeColor+','+sizeColor+','+sizeColor+')' + }).text(simpleSize); + tr.append(td); + + // date column + var modifiedColor = Math.round((Math.round((new Date()).getTime() / 1000)-lastModifiedTime)/60/60/24*5); + td = $('').attr({ "class": "date" }); + td.append($('').attr({ + "class": "modified", + "title": formatDate(lastModified), + "style": 'color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')' + }).text( relative_modified_date(lastModified.getTime() / 1000) )); + tr.append(td); + return tr; + }, + addFile:function(name,size,lastModified,loading,hidden){ + var imgurl; + if (loading) { + imgurl = OC.imagePath('core', 'loading.gif'); + } else { + imgurl = OC.imagePath('core', 'filetypes/file.png'); + } + var tr = this.createRow( + 'file', + name, + imgurl, + OC.Router.generate('download', { file: $('#dir').val()+'/'+name }), + size, + lastModified, + $('#permissions').val() + ); + + FileList.insertElement(name, 'file', tr.attr('data-file',name)); var row = $('tr').filterAttr('data-file',name); if(loading){ row.data('loading',true); @@ -44,30 +101,18 @@ var FileList={ FileActions.display(row.find('td.filename')); }, addDir:function(name,size,lastModified,hidden){ - var html, td, link_elem, sizeColor, lastModifiedTime, modifiedColor; - html = $('').attr({ "data-type": "dir", "data-size": size, "data-file": name, "data-permissions": $('#permissions').val()}); - td = $('').attr({"class": "filename", "style": 'background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')' }); - td.append(''); - link_elem = $('').attr({ "class": "name", "href": OC.linkTo('files', 'index.php')+"?dir="+ encodeURIComponent($('#dir').val()+'/'+name).replace(/%2F/g, '/') }); - link_elem.append($('').addClass('nametext').text(name)); - link_elem.append($('').attr({'class': 'uploadtext', 'currentUploads': 0})); - td.append(link_elem); - html.append(td); - if(size!='Pending'){ - simpleSize=simpleFileSize(size); - }else{ - simpleSize='Pending'; - } - sizeColor = Math.round(200-Math.pow((size/(1024*1024)),2)); - lastModifiedTime=Math.round(lastModified.getTime() / 1000); - modifiedColor=Math.round((Math.round((new Date()).getTime() / 1000)-lastModifiedTime)/60/60/24*5); - td = $('').attr({ "class": "filesize", "title": humanFileSize(size), "style": 'color:rgb('+sizeColor+','+sizeColor+','+sizeColor+')'}).text(simpleSize); - html.append(td); - - td = $('').attr({ "class": "date" }); - td.append($('').attr({ "class": "modified", "title": formatDate(lastModified), "style": 'color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')' }).text( relative_modified_date(lastModified.getTime() / 1000) )); - html.append(td); - FileList.insertElement(name,'dir',html); + + var tr = this.createRow( + 'dir', + name, + OC.imagePath('core', 'filetypes/folder.png'), + OC.linkTo('files', 'index.php')+"?dir="+ encodeURIComponent($('#dir').val()+'/'+name).replace(/%2F/g, '/'), + size, + lastModified, + $('#permissions').val() + ); + + FileList.insertElement(name,'dir',tr); var row = $('tr').filterAttr('data-file',name); row.find('td.filename').draggable(dragOptions); row.find('td.filename').droppable(folderDropOptions); From 18fa8e27537c3aa785d2ea9ca6c2a83dc5882757 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Sat, 9 Feb 2013 15:06:29 +0100 Subject: [PATCH 081/719] json_encode the appid --- settings/js/apps-custom.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/js/apps-custom.php b/settings/js/apps-custom.php index 9ec2a758ee..d827dfc705 100644 --- a/settings/js/apps-custom.php +++ b/settings/js/apps-custom.php @@ -23,4 +23,4 @@ foreach($combinedApps as $app) { echo("\n"); } -echo ("var appid =\"".$_GET['appid']."\";"); \ No newline at end of file +echo ("var appid =".json_encode($_GET['appid']).";"); \ No newline at end of file From 9dddcae9ca3dcf872893e36e2f478ebecafdc6e2 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sat, 9 Feb 2013 15:03:47 +0100 Subject: [PATCH 082/719] Remove invalid characters from app id to prevent loading of invalid resources --- core/ajax/translations.php | 1 + lib/app.php | 9 +++++++++ lib/base.php | 2 +- lib/l10n.php | 2 +- settings/ajax/disableapp.php | 2 +- settings/ajax/enableapp.php | 2 +- settings/ajax/navigationdetect.php | 1 + settings/ajax/updateapp.php | 1 + 8 files changed, 16 insertions(+), 4 deletions(-) diff --git a/core/ajax/translations.php b/core/ajax/translations.php index e22cbad470..e52a2e9b1e 100644 --- a/core/ajax/translations.php +++ b/core/ajax/translations.php @@ -22,6 +22,7 @@ */ $app = $_POST["app"]; +$app = OC_App::cleanAppId($app); $l = OC_L10N::get( $app ); diff --git a/lib/app.php b/lib/app.php index 3a4e21e8cd..54f16d6bdc 100644 --- a/lib/app.php +++ b/lib/app.php @@ -38,6 +38,15 @@ class OC_App{ static private $checkedApps = array(); static private $altLogin = array(); + /** + * @brief clean the appid + * @param $app Appid that needs to be cleaned + * @return string + */ + public static function cleanAppId($app) { + return str_replace(array('\0', '/', '\\', '..'), '', $app); + } + /** * @brief loads all apps * @param array $types diff --git a/lib/base.php b/lib/base.php index 5bfdb0b7c0..b9e59c3431 100644 --- a/lib/base.php +++ b/lib/base.php @@ -468,7 +468,7 @@ class OC { register_shutdown_function(array('OC_Helper', 'cleanTmp')); //parse the given parameters - self::$REQUESTEDAPP = (isset($_GET['app']) && trim($_GET['app']) != '' && !is_null($_GET['app']) ? str_replace(array('\0', '/', '\\', '..'), '', strip_tags($_GET['app'])) : OC_Config::getValue('defaultapp', 'files')); + self::$REQUESTEDAPP = (isset($_GET['app']) && trim($_GET['app']) != '' && !is_null($_GET['app']) ? OC_App::cleanAppId(strip_tags($_GET['app'])) : OC_Config::getValue('defaultapp', 'files')); if (substr_count(self::$REQUESTEDAPP, '?') != 0) { $app = substr(self::$REQUESTEDAPP, 0, strpos(self::$REQUESTEDAPP, '?')); $param = substr($_GET['app'], strpos($_GET['app'], '?') + 1); diff --git a/lib/l10n.php b/lib/l10n.php index ee87900926..e272bcd79f 100644 --- a/lib/l10n.php +++ b/lib/l10n.php @@ -97,7 +97,7 @@ class OC_L10N{ if ($this->app === true) { return; } - $app = $this->app; + $app = OC_App::cleanAppId($this->app); $lang = $this->lang; $this->app = true; // Find the right language diff --git a/settings/ajax/disableapp.php b/settings/ajax/disableapp.php index e89de928ea..466a719157 100644 --- a/settings/ajax/disableapp.php +++ b/settings/ajax/disableapp.php @@ -2,6 +2,6 @@ OC_JSON::checkAdminUser(); OCP\JSON::callCheck(); -OC_App::disable($_POST['appid']); +OC_App::disable(OC_App::cleanAppId($_POST['appid'])); OC_JSON::success(); diff --git a/settings/ajax/enableapp.php b/settings/ajax/enableapp.php index 18202dc39e..ab84aee516 100644 --- a/settings/ajax/enableapp.php +++ b/settings/ajax/enableapp.php @@ -3,7 +3,7 @@ OC_JSON::checkAdminUser(); OCP\JSON::callCheck(); -$appid = OC_App::enable($_POST['appid']); +$appid = OC_App::enable(OC_App::cleanAppId($_POST['appid'])); if($appid !== false) { OC_JSON::success(array('data' => array('appid' => $appid))); } else { diff --git a/settings/ajax/navigationdetect.php b/settings/ajax/navigationdetect.php index 93acb50dc2..607c0e873f 100644 --- a/settings/ajax/navigationdetect.php +++ b/settings/ajax/navigationdetect.php @@ -4,6 +4,7 @@ OC_Util::checkAdminUser(); OCP\JSON::callCheck(); $app = $_GET['app']; +$app = OC_App::cleanAppId($app); //load the one app and see what it adds to the navigation OC_App::loadApp($app); diff --git a/settings/ajax/updateapp.php b/settings/ajax/updateapp.php index 77c0bbc3e3..9367a3b5a3 100644 --- a/settings/ajax/updateapp.php +++ b/settings/ajax/updateapp.php @@ -4,6 +4,7 @@ OC_JSON::checkAdminUser(); OCP\JSON::callCheck(); $appid = $_POST['appid']; +$appid = OC_App::cleanAppId($appid); $result = OC_Installer::updateApp($appid); if($result !== false) { From 3b029d551c3fb3ec1eb4c4ea4e6909ede5d6de2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Kj=C3=B6lhede?= Date: Sat, 9 Feb 2013 15:57:33 +0100 Subject: [PATCH 083/719] corrected namespace --- apps/files_external/lib/sftp.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index a2d393818f..883b3ab643 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -5,12 +5,11 @@ * later. * See the COPYING-README file. */ +namespace OC\Files\Storage; set_include_path(get_include_path() . PATH_SEPARATOR . OC_App::getAppPath('files_external') . '/3rdparty/phpseclib/phpseclib'); require('Net/SFTP.php'); -namespace OC\Files\Storage; - class SFTP extends OC\Files\Storage\Common { private $host; private $user; From 60411f7d3d676e4ed83262b1066e7ce4a7dc904f Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sat, 9 Feb 2013 16:18:30 +0100 Subject: [PATCH 084/719] Remove unneeded __destruct call in OC\Files\Storage\Temporary --- lib/files/storage/temporary.php | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/files/storage/temporary.php b/lib/files/storage/temporary.php index d84dbda2e3..542d2cd9f4 100644 --- a/lib/files/storage/temporary.php +++ b/lib/files/storage/temporary.php @@ -21,7 +21,6 @@ class Temporary extends Local{ } public function __destruct() { - parent::__destruct(); $this->cleanUp(); } } From 420b63cbe48a37204762953332bbc2973217661f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Sat, 9 Feb 2013 16:58:55 +0100 Subject: [PATCH 085/719] fix empty path handling --- lib/files/cache/scanner.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php index 8d504af616..9a5546dce3 100644 --- a/lib/files/cache/scanner.php +++ b/lib/files/cache/scanner.php @@ -138,7 +138,7 @@ class Scanner { * walk over any folders that are not fully scanned yet and scan them */ public function backgroundScan() { - while ($path = $this->cache->getIncomplete()) { + while (($path = $this->cache->getIncomplete()) !== false) { $this->scan($path); $this->cache->correctFolderSize($path); } From 8ff20ac683413af4ea06e9d1b4afa69634d7daff Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Sat, 9 Feb 2013 17:13:02 +0100 Subject: [PATCH 086/719] ellipsize infield labels when too long, specifically fix #871 for database labels on installation --- core/css/styles.css | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/css/styles.css b/core/css/styles.css index 556ca6b82b..6c9704b16c 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -177,7 +177,11 @@ input[name="password-clone"] { padding-left:1.8em; width:11.7em !important; } #login .groupmiddle label, #login .groupbottom label { top:.65em; } p.infield { position:relative; } label.infield { cursor:text !important; top:1.05em; left:.85em; } -#login form label.infield { position:absolute; font-size:19px; color:#aaa; white-space:nowrap; padding-left:1.4em; } +#login form label.infield { /* labels are ellipsized when too long, keep them short */ + position:absolute; width:90%; padding-left:1.4em; + font-size:19px; color:#aaa; + white-space:nowrap; overflow:hidden; text-overflow:ellipsis; +} #login #databaseField .infield { padding-left:0; } #login form input[type="checkbox"]+label { position:relative; margin:0; font-size:1em; text-shadow:#fff 0 1px 0; } #login form .errors { background:#fed7d7; border:1px solid #f00; list-style-indent:inside; margin:0 0 2em; padding:1em; } From 8174e5faf18fcd762efce5ffdfabfa1102580dd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Sat, 9 Feb 2013 19:03:03 +0100 Subject: [PATCH 087/719] make MappedLocal available and testable within Linux as well --- lib/files/storage/local.php | 4 ++- lib/files/storage/mappedlocal.php | 2 +- tests/lib/files/storage/mappedlocal.php | 40 +++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 tests/lib/files/storage/mappedlocal.php diff --git a/lib/files/storage/local.php b/lib/files/storage/local.php index d387a89832..038d68bf46 100644 --- a/lib/files/storage/local.php +++ b/lib/files/storage/local.php @@ -9,7 +9,9 @@ namespace OC\Files\Storage; if (\OC_Util::runningOnWindows()) { - require_once 'mappedlocal.php'; + class Local extends MappedLocal { + + } } else { /** diff --git a/lib/files/storage/mappedlocal.php b/lib/files/storage/mappedlocal.php index 80dd79bc41..411b053737 100644 --- a/lib/files/storage/mappedlocal.php +++ b/lib/files/storage/mappedlocal.php @@ -10,7 +10,7 @@ namespace OC\Files\Storage; /** * for local filestore, we only have to map the paths */ -class Local extends \OC\Files\Storage\Common{ +class MappedLocal extends \OC\Files\Storage\Common{ protected $datadir; private $mapper; diff --git a/tests/lib/files/storage/mappedlocal.php b/tests/lib/files/storage/mappedlocal.php new file mode 100644 index 0000000000..b483f3a195 --- /dev/null +++ b/tests/lib/files/storage/mappedlocal.php @@ -0,0 +1,40 @@ +. +* +*/ + +namespace Test\Files\Storage; + +class MappedLocal extends Storage { + /** + * @var string tmpDir + */ + private $tmpDir; + public function setUp() { + $this->tmpDir=\OC_Helper::tmpFolder(); + $this->instance=new \OC\Files\Storage\MappedLocal(array('datadir'=>$this->tmpDir)); + } + + public function tearDown() { + \OC_Helper::rmdirr($this->tmpDir); + unset($this->instance); + } +} + From 92e6409f4008d21c8507310d7b6ce0f64fc29b71 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Mon, 11 Feb 2013 13:53:10 +0100 Subject: [PATCH 088/719] fixing mappedlocal storage to work on non-windows as well this allows us to run unit tests on linux - necessary to enable easy regression testing --- lib/files/mapper.php | 16 +++++++++++++++- lib/files/storage/mappedlocal.php | 3 +++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/files/mapper.php b/lib/files/mapper.php index 71b665e49b..2d29a8532b 100644 --- a/lib/files/mapper.php +++ b/lib/files/mapper.php @@ -117,6 +117,9 @@ class Mapper $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `logic_path_hash` = ?'); $result = $query->execute(array(md5($logicPath))); $result = $result->fetchRow(); + if ($result === false) { + return null; + } return $result['physic_path']; } @@ -160,11 +163,16 @@ class Mapper $sluggedElements = array(); // skip slugging the drive letter on windows - TODO: test if local path - if (strpos(strtolower(php_uname('s')), 'win') !== false) { + if (\OC_Util::runningOnWindows()) { $sluggedElements[]= $pathElements[0]; array_shift($pathElements); } foreach ($pathElements as $pathElement) { + // remove empty elements + if (empty($pathElement)) { + continue; + } + // TODO: remove file ext before slugify on last element $sluggedElements[] = self::slugify($pathElement); } @@ -177,6 +185,12 @@ class Mapper array_pop($sluggedElements); array_push($sluggedElements, $last.'-'.$index); } + + // on non-windows systems add the leading / if necessary + if (!\OC_Util::runningOnWindows() and $path[0] === '/') { + return DIRECTORY_SEPARATOR.implode(DIRECTORY_SEPARATOR, $sluggedElements); + } + return implode(DIRECTORY_SEPARATOR, $sluggedElements); } diff --git a/lib/files/storage/mappedlocal.php b/lib/files/storage/mappedlocal.php index 411b053737..218465d8ee 100644 --- a/lib/files/storage/mappedlocal.php +++ b/lib/files/storage/mappedlocal.php @@ -329,6 +329,9 @@ class MappedLocal extends \OC\Files\Storage\Common{ if(strpos($path, '/') === 0) { $path = substr($path, 1); } + if ($path === false) { + return ''; + } return $path; } From 5a0a9564ce98938401b276d634caab48f788fff3 Mon Sep 17 00:00:00 2001 From: Frank Karlitschek Date: Sat, 9 Feb 2013 17:13:43 +0100 Subject: [PATCH 089/719] alpha 1 --- lib/util.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/util.php b/lib/util.php index 81ad2df3ac..a4e7271adc 100755 --- a/lib/util.php +++ b/lib/util.php @@ -74,7 +74,7 @@ class OC_Util { */ public static function getVersion() { // hint: We only can count up. So the internal version number of ownCloud 4.5 will be 4.90.0. This is not visible to the user - return array(4, 91, 10); + return array(4, 92, 10); } /** @@ -82,7 +82,7 @@ class OC_Util { * @return string */ public static function getVersionString() { - return '5.0 pre alpha'; + return '5.0 alpha 1'; } /** From 79511f6d932d7fc41b104ef68367746bf117b5b5 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Sat, 9 Feb 2013 17:14:20 +0100 Subject: [PATCH 090/719] fixed database input group having two slightly thicker dividers --- core/css/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/css/styles.css b/core/css/styles.css index 6c9704b16c..072b92ecb0 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -163,7 +163,7 @@ input[name="password-clone"] { padding-left:1.8em; width:11.7em !important; } } .groupmiddle input { margin-top:0; margin-bottom:0; - border-top:0; border-radius:0; + border-top:0; border-bottom:0; border-radius:0; box-shadow:0 1px 1px #fff,0 1px 0 #ddd inset; } .groupbottom input { From e0da721a7dd51cf939f0aed533d5d0fa0fa8f74e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Sat, 9 Feb 2013 17:16:13 +0100 Subject: [PATCH 091/719] adding ctor to Local and revert call to it within Temporary --- lib/files/storage/local.php | 2 ++ lib/files/storage/temporary.php | 1 + 2 files changed, 3 insertions(+) diff --git a/lib/files/storage/local.php b/lib/files/storage/local.php index d387a89832..9fe0113586 100644 --- a/lib/files/storage/local.php +++ b/lib/files/storage/local.php @@ -23,6 +23,8 @@ class Local extends \OC\Files\Storage\Common{ $this->datadir.='/'; } } + public function __destruct() { + } public function getId(){ return 'local::'.$this->datadir; } diff --git a/lib/files/storage/temporary.php b/lib/files/storage/temporary.php index 542d2cd9f4..d84dbda2e3 100644 --- a/lib/files/storage/temporary.php +++ b/lib/files/storage/temporary.php @@ -21,6 +21,7 @@ class Temporary extends Local{ } public function __destruct() { + parent::__destruct(); $this->cleanUp(); } } From 842fc85b9a42aaa0ce31c71e05507ed5eeaa6dc4 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Sat, 9 Feb 2013 11:34:25 +0100 Subject: [PATCH 092/719] moved iframe height and width fix from js to css --- core/css/styles.css | 2 ++ settings/templates/help.php | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/core/css/styles.css b/core/css/styles.css index 556ca6b82b..e6a4bf6199 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -319,6 +319,8 @@ a.bookmarklet { background-color:#ddd; border:1px solid #ccc; padding:5px;paddin .arrow.left { left:-13px; bottom:1.2em; -webkit-transform:rotate(270deg); -moz-transform:rotate(270deg); -o-transform:rotate(270deg); -ms-transform:rotate(270deg); transform:rotate(270deg); } .arrow.up { top:-8px; right:2em; } .arrow.down { -webkit-transform:rotate(180deg); -moz-transform:rotate(180deg); -o-transform:rotate(180deg); -ms-transform:rotate(180deg); transform:rotate(180deg); } +.help-includes {overflow: hidden; width: 100%; height: 100%; -moz-box-sizing: border-box; box-sizing: border-box; padding-top: 2.8em; } +.help-iframe {width: 100%; height: 100%; margin: 0;padding: 0; border: 0; overflow: auto;} /* ---- BREADCRUMB ---- */ div.crumb { float:left; display:block; background:url('../img/breadcrumb.svg') no-repeat right 0; padding:.75em 1.5em 0 1em; height:2.9em; } diff --git a/settings/templates/help.php b/settings/templates/help.php index 7383fdcf56..192bac4ad4 100644 --- a/settings/templates/help.php +++ b/settings/templates/help.php @@ -10,5 +10,6 @@ t( 'Commercial Support' ); ?> -

- \ No newline at end of file +
+ +
From aa1adf42c74569f2591a59855bf370584ed1e5cc Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Sat, 9 Feb 2013 13:32:52 +0100 Subject: [PATCH 093/719] added exe and msi filetypes and icon --- core/img/filetypes/application.png | Bin 0 -> 464 bytes lib/mimetypes.list.php | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 core/img/filetypes/application.png diff --git a/core/img/filetypes/application.png b/core/img/filetypes/application.png new file mode 100644 index 0000000000000000000000000000000000000000..1dee9e366094e87db68c606d0522d72d4b939818 GIT binary patch literal 464 zcmV;>0WbcEP)8e6`gpm!y1M!N^ZV(=IC*t) z{^;nqJv-tM$9J1L2QJ2DN!#51=1_l@G`2=6e0lehL%sic%`_4--LFM}IF!KzJCseW zq1I3__Z40|e?qyK1__gzP(qrBf-G7SQbQ`#Lw94WVe(o`qg+f4hy;Qju)q#I(9{`% zQmAGomzhQ!b|gq>KqL@IkO~$=Koi}a$u6d07kiS}NoYVMJjAeZpaB*;wwcDdEbK@K zNP;B7RzhQ|H9AlUO<`J>m1(5R)Pb-iLBb@7Jp)}LHdAb-VVgYxVoTzGoqu{~a>6uj zeqCRFI9pC#h09bGwy9;oHcp6(RB%jeY^F=Ll!S+9JkVe4nDG7tJMQiP0000 'application/illustrator', 'epub' => 'application/epub+zip', 'mobi' => 'application/x-mobipocket-ebook', + 'msi' => 'application', + 'exe' => 'application' ); From 43981e62e2ede9812988a81a73d2214cd7c670e0 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Sat, 9 Feb 2013 17:46:07 +0100 Subject: [PATCH 094/719] Revert "added exe and msi filetypes and icon" This reverts commit aa1adf42c74569f2591a59855bf370584ed1e5cc. --- core/img/filetypes/application.png | Bin 464 -> 0 bytes lib/mimetypes.list.php | 2 -- 2 files changed, 2 deletions(-) delete mode 100644 core/img/filetypes/application.png diff --git a/core/img/filetypes/application.png b/core/img/filetypes/application.png deleted file mode 100644 index 1dee9e366094e87db68c606d0522d72d4b939818..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 464 zcmV;>0WbcEP)8e6`gpm!y1M!N^ZV(=IC*t) z{^;nqJv-tM$9J1L2QJ2DN!#51=1_l@G`2=6e0lehL%sic%`_4--LFM}IF!KzJCseW zq1I3__Z40|e?qyK1__gzP(qrBf-G7SQbQ`#Lw94WVe(o`qg+f4hy;Qju)q#I(9{`% zQmAGomzhQ!b|gq>KqL@IkO~$=Koi}a$u6d07kiS}NoYVMJjAeZpaB*;wwcDdEbK@K zNP;B7RzhQ|H9AlUO<`J>m1(5R)Pb-iLBb@7Jp)}LHdAb-VVgYxVoTzGoqu{~a>6uj zeqCRFI9pC#h09bGwy9;oHcp6(RB%jeY^F=Ll!S+9JkVe4nDG7tJMQiP0000 'application/illustrator', 'epub' => 'application/epub+zip', 'mobi' => 'application/x-mobipocket-ebook', - 'msi' => 'application', - 'exe' => 'application' ); From 62122148bf480387f78934abe58e85602e6b4960 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Sat, 9 Feb 2013 17:46:23 +0100 Subject: [PATCH 095/719] Revert "moved iframe height and width fix from js to css" This reverts commit 842fc85b9a42aaa0ce31c71e05507ed5eeaa6dc4. --- core/css/styles.css | 2 -- settings/templates/help.php | 5 ++--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/core/css/styles.css b/core/css/styles.css index e6a4bf6199..556ca6b82b 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -319,8 +319,6 @@ a.bookmarklet { background-color:#ddd; border:1px solid #ccc; padding:5px;paddin .arrow.left { left:-13px; bottom:1.2em; -webkit-transform:rotate(270deg); -moz-transform:rotate(270deg); -o-transform:rotate(270deg); -ms-transform:rotate(270deg); transform:rotate(270deg); } .arrow.up { top:-8px; right:2em; } .arrow.down { -webkit-transform:rotate(180deg); -moz-transform:rotate(180deg); -o-transform:rotate(180deg); -ms-transform:rotate(180deg); transform:rotate(180deg); } -.help-includes {overflow: hidden; width: 100%; height: 100%; -moz-box-sizing: border-box; box-sizing: border-box; padding-top: 2.8em; } -.help-iframe {width: 100%; height: 100%; margin: 0;padding: 0; border: 0; overflow: auto;} /* ---- BREADCRUMB ---- */ div.crumb { float:left; display:block; background:url('../img/breadcrumb.svg') no-repeat right 0; padding:.75em 1.5em 0 1em; height:2.9em; } diff --git a/settings/templates/help.php b/settings/templates/help.php index 192bac4ad4..7383fdcf56 100644 --- a/settings/templates/help.php +++ b/settings/templates/help.php @@ -10,6 +10,5 @@ t( 'Commercial Support' ); ?> -
- -
+

+ \ No newline at end of file From 419eced65c0c0d86e6b237af8a5c4a9961aa21f5 Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Sat, 9 Feb 2013 17:54:56 +0100 Subject: [PATCH 096/719] Remove hascontrols - use original positioning. I couldn't get Chromium and FF to agree, so a working hack is better than a non-working one ;) --- apps/files/css/files.css | 6 +++--- apps/files/templates/index.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/files/css/files.css b/apps/files/css/files.css index caebb5151d..620fe8606b 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -55,7 +55,7 @@ font-size:1.5em; font-weight:bold; color:#888; text-shadow:#fff 0 1px 0; } -table { position:relative; width:100%; } +table { position:relative; top:37px; width:100%; } tbody tr { background-color:#fff; height:2.5em; } tbody tr:hover, tbody tr:active, tbody tr.selected { background-color:#f8f8f8; } tbody tr.selected { background-color:#eee; } @@ -73,9 +73,9 @@ table th#headerSize, table td.filesize { min-width:3em; padding:0 1em; text-alig table th#headerDate, table td.date { min-width:11em; padding:0 .1em 0 1em; text-align:left; } /* Multiselect bar */ -table.multiselect thead { position:fixed; z-index:1; } +table.multiselect { top:63px; } +table.multiselect thead { position:fixed; top:82px; z-index:1; } table.multiselect thead th { background:rgba(230,230,230,.8); color:#000; font-weight:bold; border-bottom:0; } -table.multiselect tbody { position: absolute; margin-top:2em; } table td.selection, table th.selection, table td.fileaction { width:2em; text-align:center; } table td.filename a.name { display:block; height:1.5em; vertical-align:middle; margin-left:3em; } table tr[data-type="dir"] td.filename a.name span.nametext {font-weight:bold; } diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php index 0b4aa21eac..2d4ed9ab2d 100644 --- a/apps/files/templates/index.php +++ b/apps/files/templates/index.php @@ -59,7 +59,7 @@
t('Nothing in here. Upload something!')?>
-
'; - html+=''+escapeHTML(basename); + var name_span=$('').addClass('nametext').text(basename); + link_elem.append(name_span); if(extension){ - html+=''+escapeHTML(extension)+''; + name_span.append($('').addClass('extension').text(extension)); } - html+=''+simpleSize+''+relative_modified_date(lastModified.getTime() / 1000)+'
+
> From d82c9fd623e132a619b5314f37df1f6446589840 Mon Sep 17 00:00:00 2001 From: raghunayyar Date: Tue, 19 Feb 2013 15:12:35 +0530 Subject: [PATCH 299/719] Text stays inside the sharing dropdown --- core/css/share.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/css/share.css b/core/css/share.css index e806d25982..aae4294ff2 100644 --- a/core/css/share.css +++ b/core/css/share.css @@ -24,6 +24,10 @@ #shareWithList li { padding-top:.1em; } + + #shareWithList li:first-child { + white-space:normal; + } #dropdown label { font-weight:400; From 815e964362192483989113af5c48d947084b5512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Tue, 19 Feb 2013 11:49:41 +0100 Subject: [PATCH 300/719] use instead of --- apps/files_trashbin/ajax/undelete.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/files_trashbin/ajax/undelete.php b/apps/files_trashbin/ajax/undelete.php index 6320c1d082..57f6281674 100644 --- a/apps/files_trashbin/ajax/undelete.php +++ b/apps/files_trashbin/ajax/undelete.php @@ -3,8 +3,8 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::callCheck(); -$files = $_REQUEST['files']; -$dirlisting = $_REQUEST['dirlisting']; +$files = $_POST['files']; +$dirlisting = $_POST['dirlisting']; $list = explode(';', $files); $error = array(); From ac1b2a74ef33609e5ff99f020bf7d65e6bd56725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Tue, 19 Feb 2013 11:50:29 +0100 Subject: [PATCH 301/719] add missing paramenter to post request --- apps/files_trashbin/js/trash.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js index 1f4be9f15e..1dfe09feca 100644 --- a/apps/files_trashbin/js/trash.js +++ b/apps/files_trashbin/js/trash.js @@ -34,7 +34,7 @@ $(document).ready(function() { deleteAction[0].outerHTML = newHTML; $.post(OC.filePath('files_trashbin','ajax','delete.php'), - {files:tr.attr('data-file') }, + {files:tr.attr('data-file'), dirlisting:tr.attr('data-dirlisting') }, function(result){ if ( result.status == 'success' ) { var row = document.getElementById(result.data.filename); From e6c39fc3e7e11b22c20df361fb891523e8c89a12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Tue, 19 Feb 2013 12:14:44 +0100 Subject: [PATCH 302/719] change $_REQUEST to $_POST; fix check if file was successfully deleted --- apps/files_trashbin/ajax/delete.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/files_trashbin/ajax/delete.php b/apps/files_trashbin/ajax/delete.php index d922fafeb2..7684d0465e 100644 --- a/apps/files_trashbin/ajax/delete.php +++ b/apps/files_trashbin/ajax/delete.php @@ -3,8 +3,8 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::callCheck(); -$files = $_REQUEST['files']; -$dirlisting = $_REQUEST['dirlisting']; +$files = $_POST['files']; +$dirlisting = $_POST['dirlisting']; $list = explode(';', $files); if (!is_array($list)){ @@ -24,8 +24,9 @@ foreach ($list as $file) { $filename = $file; $timestamp = null; } - - if(OCA\Files_Trashbin\Trashbin::delete($filename, $timestamp)) { + + OCA\Files_Trashbin\Trashbin::delete($filename, $timestamp); + if (!OCA\Files_Trashbin\Trashbin::file_exists($filename)) { $success[$i]['filename'] = $file; $success[$i]['timestamp'] = $timestamp; $i++; @@ -40,7 +41,7 @@ if ( $error ) { $filelist .= $e.', '; } $l = OC_L10N::get('files_trashbin'); - $message = $l->t("Couldn't restore %s", array(rtrim($filelist, ', '))); + $message = $l->t("Couldn't delete %s permanently", array(rtrim($filelist, ', '))); OCP\JSON::error(array("data" => array("message" => $message, "success" => $success, "error" => $error))); } else { From 7bfbfe6562a7dbcecdc05b60214a0da83760c4a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Tue, 19 Feb 2013 12:24:51 +0100 Subject: [PATCH 303/719] initialize $result --- apps/files_trashbin/index.php | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php index 5d6b5d94e5..d0b3030dbf 100644 --- a/apps/files_trashbin/index.php +++ b/apps/files_trashbin/index.php @@ -16,6 +16,7 @@ OCP\Util::addScript('files', 'filelist'); $dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : ''; +$result = array(); if ($dir) { $dirlisting = true; $view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/files_trashbin'); From 211e651d7222085b528cc6e9dc8d060d8ea6a60e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Tue, 19 Feb 2013 12:38:00 +0100 Subject: [PATCH 304/719] add timestamp to function call; fix trash.js to handle multiple delete operation at once --- apps/files_trashbin/ajax/delete.php | 2 +- apps/files_trashbin/js/trash.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/files_trashbin/ajax/delete.php b/apps/files_trashbin/ajax/delete.php index 7684d0465e..915ad9379f 100644 --- a/apps/files_trashbin/ajax/delete.php +++ b/apps/files_trashbin/ajax/delete.php @@ -26,7 +26,7 @@ foreach ($list as $file) { } OCA\Files_Trashbin\Trashbin::delete($filename, $timestamp); - if (!OCA\Files_Trashbin\Trashbin::file_exists($filename)) { + if (!OCA\Files_Trashbin\Trashbin::file_exists($filename, $timestamp)) { $success[$i]['filename'] = $file; $success[$i]['timestamp'] = $timestamp; $i++; diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js index 1dfe09feca..fc38889dc3 100644 --- a/apps/files_trashbin/js/trash.js +++ b/apps/files_trashbin/js/trash.js @@ -36,11 +36,11 @@ $(document).ready(function() { $.post(OC.filePath('files_trashbin','ajax','delete.php'), {files:tr.attr('data-file'), dirlisting:tr.attr('data-dirlisting') }, function(result){ - if ( result.status == 'success' ) { - var row = document.getElementById(result.data.filename); + for (var i = 0; i < result.data.success.length; i++) { + var row = document.getElementById(result.data.success[i].filename); row.parentNode.removeChild(row); - } else { - deleteAction[0].outerHTML = oldHTML; + } + if (result.status != 'success') { OC.dialogs.alert(result.data.message, 'Error'); } }); From 686254ac1170dfd76d90b3cc6bd54761ae3d6908 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Tue, 19 Feb 2013 18:45:46 +0100 Subject: [PATCH 305/719] move2trash() handles keyfiles --- apps/files_trashbin/lib/trash.php | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index 8d54a471b4..1c0306ea90 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -37,7 +37,9 @@ class Trashbin { $view = new \OC_FilesystemView('/'. $user); if (!$view->is_dir('files_trashbin')) { $view->mkdir('files_trashbin'); - $view->mkdir("versions_trashbin"); + $view->mkdir("files_trashbin/files"); + $view->mkdir("files_trashbin/versions"); + $view->mkdir("files_trashbin/keyfiles"); } $path_parts = pathinfo($file_path); @@ -54,31 +56,38 @@ class Trashbin { } if ( ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) { - $trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin')); - $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin')); + $trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin')); } - $trashbinSize += self::copy_recursive($file_path, 'files_trashbin/'.$deleted.'.d'.$timestamp, $view); + $trashbinSize += self::copy_recursive($file_path, 'files_trashbin/files/'.$deleted.'.d'.$timestamp, $view); - if ( $view->file_exists('files_trashbin/'.$deleted.'.d'.$timestamp) ) { + if ( $view->file_exists('files_trashbin/files/'.$deleted.'.d'.$timestamp) ) { $query = \OC_DB::prepare("INSERT INTO *PREFIX*files_trash (id,timestamp,location,type,mime,user) VALUES (?,?,?,?,?,?)"); $result = $query->execute(array($deleted, $timestamp, $location, $type, $mime, $user)); if ( !$result ) { // if file couldn't be added to the database than also don't store it in the trash bin. - $view->deleteAll('files_trashbin/'.$deleted.'.d'.$timestamp); + $view->deleteAll('files_trashbin/files/'.$deleted.'.d'.$timestamp); \OC_Log::write('files_trashbin', 'trash bin database couldn\'t be updated', \OC_log::ERROR); return; } - + + // Take core of file versions if ( \OCP\App::isEnabled('files_versions') ) { if ( $view->is_dir('files_versions'.$file_path) ) { $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_versions/'.$file_path)); - $view->rename('files_versions'.$file_path, 'versions_trashbin/'. $deleted.'.d'.$timestamp); + $view->rename('files_versions'.$file_path, 'files_trashbin/versions'. $deleted.'.d'.$timestamp); } else if ( $versions = \OCA\Files_Versions\Storage::getVersions($file_path) ) { foreach ($versions as $v) { $trashbinSize += $view->filesize('files_versions'.$v['path'].'.v'.$v['version']); - $view->rename('files_versions'.$v['path'].'.v'.$v['version'], 'versions_trashbin/'. $deleted.'.v'.$v['version'].'.d'.$timestamp); + $view->rename('files_versions'.$v['path'].'.v'.$v['version'], 'files_trashbin/versions'. $deleted.'.v'.$v['version'].'.d'.$timestamp); } } } + + // Take care of encryption keys + if ( \OCP\App::isEnabled('files_encryption') ) { + $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_encryption/keyfiles/'.$file_path)); + $view->rename('files_encryption'.$file_path, 'files_trashbin/keyfiles'. $deleted.'.d'.$timestamp); + } + } else { \OC_Log::write('files_trashbin', 'Couldn\'t move '.$file_path.' to the trash bin', \OC_log::ERROR); } From 99758dce2b9e014081c27ff35b1df9e16f9eb430 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Wed, 20 Feb 2013 00:03:28 +0100 Subject: [PATCH 306/719] [tx-robot] updated from transifex --- apps/files/l10n/nl.php | 1 + apps/files/l10n/pl.php | 2 + apps/files_trashbin/l10n/uk.php | 9 +++- apps/files_versions/l10n/uk.php | 8 ++++ l10n/el/settings.po | 8 ++-- l10n/gl/core.po | 4 +- l10n/gl/files.po | 4 +- l10n/gl/lib.po | 4 +- l10n/nl/files.po | 8 ++-- l10n/pl/files.po | 11 ++--- l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_trashbin.pot | 4 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/settings.pot | 2 +- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- l10n/tr/settings.po | 68 ++++++++++++++--------------- l10n/uk/files_trashbin.po | 23 +++++----- l10n/uk/files_versions.po | 23 +++++----- l10n/uk/lib.po | 43 +++++++++--------- lib/l10n/uk.php | 18 ++++++++ settings/l10n/el.php | 2 + settings/l10n/tr.php | 32 +++++++++++++- 28 files changed, 182 insertions(+), 110 deletions(-) diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php index 381325d113..a92ec933b2 100644 --- a/apps/files/l10n/nl.php +++ b/apps/files/l10n/nl.php @@ -60,6 +60,7 @@ "Text file" => "Tekstbestand", "Folder" => "Map", "From link" => "Vanaf link", +"Deleted files" => "Verwijderde bestanden", "Cancel upload" => "Upload afbreken", "Nothing in here. Upload something!" => "Er bevindt zich hier niets. Upload een bestand!", "Download" => "Download", diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php index 83091bad18..d68a871a7d 100644 --- a/apps/files/l10n/pl.php +++ b/apps/files/l10n/pl.php @@ -10,6 +10,7 @@ "No file was uploaded" => "Nie przesłano żadnego pliku", "Missing a temporary folder" => "Brak katalogu tymczasowego", "Failed to write to disk" => "Błąd zapisu na dysk", +"Not enough storage available" => "Za mało miejsca", "Invalid directory." => "Zła ścieżka.", "Files" => "Pliki", "Delete" => "Usuwa element", @@ -54,6 +55,7 @@ "Text file" => "Plik tekstowy", "Folder" => "Katalog", "From link" => "Z linku", +"Deleted files" => "Pliki usnięte", "Cancel upload" => "Przestań wysyłać", "Nothing in here. Upload something!" => "Brak zawartości. Proszę wysłać pliki!", "Download" => "Pobiera element", diff --git a/apps/files_trashbin/l10n/uk.php b/apps/files_trashbin/l10n/uk.php index 14c6931255..06474d9b2c 100644 --- a/apps/files_trashbin/l10n/uk.php +++ b/apps/files_trashbin/l10n/uk.php @@ -1,7 +1,14 @@ "Неможливо видалити %s назавжди", +"Couldn't restore %s" => "Неможливо відновити %s", +"perform restore operation" => "виконати операцію відновлення", +"delete file permanently" => "видалити файл назавжди", "Name" => "Ім'я", +"Deleted" => "Видалено", "1 folder" => "1 папка", "{count} folders" => "{count} папок", "1 file" => "1 файл", -"{count} files" => "{count} файлів" +"{count} files" => "{count} файлів", +"Nothing in here. Your trash bin is empty!" => "Нічого немає. Ваший кошик для сміття пустий!", +"Restore" => "Відновити" ); diff --git a/apps/files_versions/l10n/uk.php b/apps/files_versions/l10n/uk.php index 49acda8107..861523bf6a 100644 --- a/apps/files_versions/l10n/uk.php +++ b/apps/files_versions/l10n/uk.php @@ -1,5 +1,13 @@ "Не вдалося відновити: %s", +"success" => "успішно", +"File %s was reverted to version %s" => "Файл %s був відновлений до версії %s", +"failure" => "неуспішно", +"File %s could not be reverted to version %s" => "Файл %s не може бути відновлений до версії %s", +"No old versions available" => "Старі версії недоступні", +"No path specified" => "Шлях не вказаний", "History" => "Історія", +"Revert a file to a previous version by clicking on its revert button" => "Відновити файл на попередню версію, натиснувши на кнопку Відновити", "Files Versioning" => "Версії файлів", "Enable" => "Включити" ); diff --git a/l10n/el/settings.po b/l10n/el/settings.po index 6c417dcbf3..d86b53331a 100644 --- a/l10n/el/settings.po +++ b/l10n/el/settings.po @@ -20,8 +20,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" -"PO-Revision-Date: 2013-02-17 12:30+0000\n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"PO-Revision-Date: 2013-02-19 22:10+0000\n" "Last-Translator: Efstathios Iosifidis \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" @@ -164,7 +164,7 @@ msgstr "προσθήκη ομάδας" #: js/users.js:352 msgid "A valid username must be provided" -msgstr "" +msgstr "Πρέπει να δοθεί έγκυρο όνομα χρήστη" #: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" @@ -172,7 +172,7 @@ msgstr "Σφάλμα δημιουργίας χρήστη" #: js/users.js:358 msgid "A valid password must be provided" -msgstr "" +msgstr "Πρέπει να δοθεί έγκυρο συνθηματικό" #: personal.php:29 personal.php:30 msgid "__language_name__" diff --git a/l10n/gl/core.po b/l10n/gl/core.po index f67798a78e..a21a74f87d 100644 --- a/l10n/gl/core.po +++ b/l10n/gl/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" -"PO-Revision-Date: 2013-02-15 15:00+0000\n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"PO-Revision-Date: 2013-02-19 12:10+0000\n" "Last-Translator: mbouzada \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/gl/files.po b/l10n/gl/files.po index 5fb9fb14df..42f77c08b6 100644 --- a/l10n/gl/files.po +++ b/l10n/gl/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" -"PO-Revision-Date: 2013-02-15 14:31+0000\n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"PO-Revision-Date: 2013-02-19 12:10+0000\n" "Last-Translator: mbouzada \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/gl/lib.po b/l10n/gl/lib.po index aa47bb8032..00e1b816f8 100644 --- a/l10n/gl/lib.po +++ b/l10n/gl/lib.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" -"PO-Revision-Date: 2013-02-15 15:40+0000\n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"PO-Revision-Date: 2013-02-19 12:10+0000\n" "Last-Translator: mbouzada \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/nl/files.po b/l10n/nl/files.po index bbd8fd530f..0cc281e39e 100644 --- a/l10n/nl/files.po +++ b/l10n/nl/files.po @@ -19,9 +19,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"PO-Revision-Date: 2013-02-19 21:50+0000\n" +"Last-Translator: André Koot \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -286,7 +286,7 @@ msgstr "Vanaf link" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Verwijderde bestanden" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/pl/files.po b/l10n/pl/files.po index 9890a2eae8..35556a13c0 100644 --- a/l10n/pl/files.po +++ b/l10n/pl/files.po @@ -7,6 +7,7 @@ # Cyryl Sochacki <>, 2012. # Cyryl Sochacki , 2012-2013. # Marcin Małecki , 2011-2012. +# Mariusz , 2013. # , 2011. # , 2012. # Piotr Sokół , 2012. @@ -15,9 +16,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"PO-Revision-Date: 2013-02-19 15:50+0000\n" +"Last-Translator: Mariusz Fik \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -76,7 +77,7 @@ msgstr "Błąd zapisu na dysk" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Za mało miejsca" #: ajax/upload.php:83 msgid "Invalid directory." @@ -282,7 +283,7 @@ msgstr "Z linku" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Pliki usnięte" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index 36be3c3706..bd782be12d 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index fb8cc4e0c8..7d45d571c9 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index 5e60e27efa..b27519c01e 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index c9bc38f0ef..6e98b59654 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index 1271253d44..c1f7c6dcd2 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index 4d7440e632..0e34b311a8 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ajax/delete.php:22 +#: ajax/delete.php:24 #, php-format msgid "Couldn't delete %s permanently" msgstr "" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 97806d4646..0339eb0917 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 2232f91928..53147fb1c5 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index d37161b4df..6403daf074 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index 93d7d9f6b6..cbc32af413 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index 3e170c6c32..15865d8de3 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/tr/settings.po b/l10n/tr/settings.po index 3409c93a04..65ec66d804 100644 --- a/l10n/tr/settings.po +++ b/l10n/tr/settings.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Aranel Surion , 2011, 2012. +# Aranel Surion , 2011-2013. # Emre , 2012. # , 2012. # Necdet Yücel , 2012. @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" -"PO-Revision-Date: 2013-02-18 19:50+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"PO-Revision-Date: 2013-02-18 23:30+0000\n" +"Last-Translator: Aranel Surion \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -32,7 +32,7 @@ msgstr "Eşleşme hata" #: ajax/changedisplayname.php:32 msgid "Unable to change display name" -msgstr "" +msgstr "Ekran adı değiştirilemiyor" #: ajax/creategroup.php:10 msgid "Group already exists" @@ -72,7 +72,7 @@ msgstr "Geçersiz istek" #: ajax/togglegroups.php:12 msgid "Admins can't remove themself from the admin group" -msgstr "" +msgstr "Yöneticiler kendilerini yönetici grubundan kaldıramaz" #: ajax/togglegroups.php:28 #, php-format @@ -82,15 +82,15 @@ msgstr "Kullanıcı %s grubuna eklenemiyor" #: ajax/togglegroups.php:34 #, php-format msgid "Unable to remove user from group %s" -msgstr "" +msgstr "%s grubundan kullanıcı kaldırılamıyor" #: ajax/updateapp.php:14 msgid "Couldn't update app." -msgstr "" +msgstr "Uygulama güncellenemedi." #: js/apps.js:30 msgid "Update to {appversion}" -msgstr "" +msgstr "{appversion} Güncelle" #: js/apps.js:36 js/apps.js:76 msgid "Disable" @@ -102,15 +102,15 @@ msgstr "Etkin" #: js/apps.js:55 msgid "Please wait...." -msgstr "" +msgstr "Lütfen bekleyin...." #: js/apps.js:84 msgid "Updating...." -msgstr "" +msgstr "Güncelleniyor...." #: js/apps.js:87 msgid "Error while updating app" -msgstr "" +msgstr "Uygulama güncellenirken hata" #: js/apps.js:87 msgid "Error" @@ -118,7 +118,7 @@ msgstr "Hata" #: js/apps.js:90 msgid "Updated" -msgstr "" +msgstr "Güncellendi" #: js/personal.js:96 msgid "Saving..." @@ -134,7 +134,7 @@ msgstr "geri al" #: js/users.js:62 msgid "Unable to remove user" -msgstr "" +msgstr "Kullanıcı kaldırılamıyor" #: js/users.js:75 templates/users.php:26 templates/users.php:80 #: templates/users.php:105 @@ -151,19 +151,19 @@ msgstr "Sil" #: js/users.js:191 msgid "add group" -msgstr "" +msgstr "grup ekle" #: js/users.js:352 msgid "A valid username must be provided" -msgstr "" +msgstr "Geçerli bir kullanıcı adı mutlaka sağlanmalı" #: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" -msgstr "" +msgstr "Kullanıcı oluşturulurken hata" #: js/users.js:358 msgid "A valid password must be provided" -msgstr "" +msgstr "Geçerli bir parola mutlaka sağlanmalı" #: personal.php:29 personal.php:30 msgid "__language_name__" @@ -184,7 +184,7 @@ msgstr "data dizininiz ve dosyalarınız büyük ihtimalle internet üzerinden e #: templates/admin.php:29 msgid "Setup Warning" -msgstr "" +msgstr "Kurulum Uyarısı" #: templates/admin.php:32 msgid "" @@ -199,7 +199,7 @@ msgstr "" #: templates/admin.php:44 msgid "Module 'fileinfo' missing" -msgstr "" +msgstr "Modül 'fileinfo' kayıp" #: templates/admin.php:47 msgid "" @@ -352,7 +352,7 @@ msgstr "Uygulamanın sayfasına apps.owncloud.com adresinden bakın " #: templates/apps.php:29 msgid "-licensed by " -msgstr "" +msgstr "-lisanslayan " #: templates/apps.php:31 msgid "Update" @@ -393,7 +393,7 @@ msgstr "Dosyalarınızı senkronize etmek için uygulamayı indirin" #: templates/personal.php:25 msgid "Show First Run Wizard again" -msgstr "" +msgstr "İlk Çalıştırma Sihirbazını yeniden göster" #: templates/personal.php:36 templates/users.php:23 templates/users.php:79 msgid "Password" @@ -421,19 +421,19 @@ msgstr "Parola değiştir" #: templates/personal.php:54 templates/users.php:78 msgid "Display Name" -msgstr "" +msgstr "Ekran Adı" #: templates/personal.php:55 msgid "Your display name was changed" -msgstr "" +msgstr "Ekran adınız değiştirildi" #: templates/personal.php:56 msgid "Unable to change your display name" -msgstr "" +msgstr "Ekran adınız değiştirilemiyor" #: templates/personal.php:59 msgid "Change display name" -msgstr "" +msgstr "Ekran adını değiştir" #: templates/personal.php:68 msgid "Email" @@ -461,11 +461,11 @@ msgstr "WebDAV" #: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" -msgstr "" +msgstr "Bu adresi kullanarak ownCloud 'unuza dosya yöneticinizde bağlanın" #: templates/users.php:21 templates/users.php:77 msgid "Login Name" -msgstr "" +msgstr "Giriş Adı" #: templates/users.php:32 msgid "Create" @@ -473,11 +473,11 @@ msgstr "Oluştur" #: templates/users.php:35 msgid "Default Storage" -msgstr "" +msgstr "Varsayılan Depolama" #: templates/users.php:41 templates/users.php:139 msgid "Unlimited" -msgstr "" +msgstr "Limitsiz" #: templates/users.php:59 templates/users.php:154 msgid "Other" @@ -485,16 +485,16 @@ msgstr "Diğer" #: templates/users.php:84 msgid "Storage" -msgstr "" +msgstr "Depolama" #: templates/users.php:95 msgid "change display name" -msgstr "" +msgstr "ekran adını değiştir" #: templates/users.php:99 msgid "set new password" -msgstr "" +msgstr "yeni parola belirle" #: templates/users.php:134 msgid "Default" -msgstr "" +msgstr "Varsayılan" diff --git a/l10n/uk/files_trashbin.po b/l10n/uk/files_trashbin.po index d2cbb893ab..7f2bd9d813 100644 --- a/l10n/uk/files_trashbin.po +++ b/l10n/uk/files_trashbin.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# пан Володимир , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"PO-Revision-Date: 2013-02-19 14:20+0000\n" +"Last-Translator: volodya327 \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,23 +18,23 @@ msgstr "" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:24 #, php-format msgid "Couldn't delete %s permanently" -msgstr "" +msgstr "Неможливо видалити %s назавжди" #: ajax/undelete.php:41 #, php-format msgid "Couldn't restore %s" -msgstr "" +msgstr "Неможливо відновити %s" #: js/trash.js:7 js/trash.js:94 msgid "perform restore operation" -msgstr "" +msgstr "виконати операцію відновлення" #: js/trash.js:33 msgid "delete file permanently" -msgstr "" +msgstr "видалити файл назавжди" #: js/trash.js:125 templates/index.php:17 msgid "Name" @@ -41,7 +42,7 @@ msgstr "Ім'я" #: js/trash.js:126 templates/index.php:27 msgid "Deleted" -msgstr "" +msgstr "Видалено" #: js/trash.js:135 msgid "1 folder" @@ -61,8 +62,8 @@ msgstr "{count} файлів" #: templates/index.php:9 msgid "Nothing in here. Your trash bin is empty!" -msgstr "" +msgstr "Нічого немає. Ваший кошик для сміття пустий!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" -msgstr "" +msgstr "Відновити" diff --git a/l10n/uk/files_versions.po b/l10n/uk/files_versions.po index a511f9ae55..91c980409d 100644 --- a/l10n/uk/files_versions.po +++ b/l10n/uk/files_versions.po @@ -4,13 +4,14 @@ # # Translators: # , 2012. +# пан Володимир , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"PO-Revision-Date: 2013-02-19 14:30+0000\n" +"Last-Translator: volodya327 \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,33 +22,33 @@ msgstr "" #: ajax/rollbackVersion.php:15 #, php-format msgid "Could not revert: %s" -msgstr "" +msgstr "Не вдалося відновити: %s" #: history.php:40 msgid "success" -msgstr "" +msgstr "успішно" #: history.php:42 #, php-format msgid "File %s was reverted to version %s" -msgstr "" +msgstr "Файл %s був відновлений до версії %s" #: history.php:49 msgid "failure" -msgstr "" +msgstr "неуспішно" #: history.php:51 #, php-format msgid "File %s could not be reverted to version %s" -msgstr "" +msgstr "Файл %s не може бути відновлений до версії %s" #: history.php:68 msgid "No old versions available" -msgstr "" +msgstr "Старі версії недоступні" #: history.php:73 msgid "No path specified" -msgstr "" +msgstr "Шлях не вказаний" #: js/versions.js:16 msgid "History" @@ -55,7 +56,7 @@ msgstr "Історія" #: templates/history.php:20 msgid "Revert a file to a previous version by clicking on its revert button" -msgstr "" +msgstr "Відновити файл на попередню версію, натиснувши на кнопку Відновити" #: templates/settings.php:3 msgid "Files Versioning" diff --git a/l10n/uk/lib.po b/l10n/uk/lib.po index 68427402a3..3ed55cb1ef 100644 --- a/l10n/uk/lib.po +++ b/l10n/uk/lib.po @@ -7,13 +7,14 @@ # , 2012. # , 2012. # , 2013. +# пан Володимир , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" -"PO-Revision-Date: 2013-02-18 13:40+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"PO-Revision-Date: 2013-02-19 14:10+0000\n" +"Last-Translator: volodya327 \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -91,51 +92,51 @@ msgstr "Зображення" #: setup.php:34 msgid "Set an admin username." -msgstr "" +msgstr "Встановіть ім'я адміністратора." #: setup.php:37 msgid "Set an admin password." -msgstr "" +msgstr "Встановіть пароль адміністратора." #: setup.php:40 msgid "Specify a data folder." -msgstr "" +msgstr "Вкажіть теку для даних." #: setup.php:53 #, php-format msgid "%s enter the database username." -msgstr "" +msgstr "%s введіть ім'я користувача бази даних." #: setup.php:56 #, php-format msgid "%s enter the database name." -msgstr "" +msgstr "%s введіть назву бази даних." #: setup.php:59 #, php-format msgid "%s you may not use dots in the database name" -msgstr "" +msgstr "%s не можна використовувати крапки в назві бази даних" #: setup.php:62 #, php-format msgid "%s set the database host." -msgstr "" +msgstr "%s встановити хост бази даних." #: setup.php:126 setup.php:294 setup.php:339 msgid "PostgreSQL username and/or password not valid" -msgstr "" +msgstr "PostgreSQL ім'я користувача та/або пароль не дійсні" #: setup.php:127 setup.php:150 setup.php:204 msgid "You need to enter either an existing account or the administrator." -msgstr "" +msgstr "Вам потрібно ввести або існуючий обліковий запис або administrator." #: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" -msgstr "" +msgstr "Oracle ім'я користувача та/або пароль не дійсні" #: setup.php:203 msgid "MySQL username and/or password not valid" -msgstr "" +msgstr "MySQL ім'я користувача та/або пароль не дійсні" #: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 #: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 @@ -143,37 +144,37 @@ msgstr "" #: setup.php:584 #, php-format msgid "DB Error: \"%s\"" -msgstr "" +msgstr "Помилка БД: \"%s\"" #: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 #: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 #: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" -msgstr "" +msgstr "Команда, що викликала проблему: \"%s\"" #: setup.php:273 #, php-format msgid "MySQL user '%s'@'localhost' exists already." -msgstr "" +msgstr "Користувач MySQL '%s'@'localhost' вже існує." #: setup.php:274 msgid "Drop this user from MySQL" -msgstr "" +msgstr "Видалити цього користувача з MySQL" #: setup.php:279 #, php-format msgid "MySQL user '%s'@'%%' already exists" -msgstr "" +msgstr "Користувач MySQL '%s'@'%%' вже існує" #: setup.php:280 msgid "Drop this user from MySQL." -msgstr "" +msgstr "Видалити цього користувача з MySQL." #: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" -msgstr "" +msgstr "Команда, що викликала проблему: \"%s\", ім'я: %s, пароль: %s" #: setup.php:649 msgid "" diff --git a/lib/l10n/uk.php b/lib/l10n/uk.php index 434ddcd973..415c0a80c2 100644 --- a/lib/l10n/uk.php +++ b/lib/l10n/uk.php @@ -16,6 +16,24 @@ "Files" => "Файли", "Text" => "Текст", "Images" => "Зображення", +"Set an admin username." => "Встановіть ім'я адміністратора.", +"Set an admin password." => "Встановіть пароль адміністратора.", +"Specify a data folder." => "Вкажіть теку для даних.", +"%s enter the database username." => "%s введіть ім'я користувача бази даних.", +"%s enter the database name." => "%s введіть назву бази даних.", +"%s you may not use dots in the database name" => "%s не можна використовувати крапки в назві бази даних", +"%s set the database host." => "%s встановити хост бази даних.", +"PostgreSQL username and/or password not valid" => "PostgreSQL ім'я користувача та/або пароль не дійсні", +"You need to enter either an existing account or the administrator." => "Вам потрібно ввести або існуючий обліковий запис або administrator.", +"Oracle username and/or password not valid" => "Oracle ім'я користувача та/або пароль не дійсні", +"MySQL username and/or password not valid" => "MySQL ім'я користувача та/або пароль не дійсні", +"DB Error: \"%s\"" => "Помилка БД: \"%s\"", +"Offending command was: \"%s\"" => "Команда, що викликала проблему: \"%s\"", +"MySQL user '%s'@'localhost' exists already." => "Користувач MySQL '%s'@'localhost' вже існує.", +"Drop this user from MySQL" => "Видалити цього користувача з MySQL", +"MySQL user '%s'@'%%' already exists" => "Користувач MySQL '%s'@'%%' вже існує", +"Drop this user from MySQL." => "Видалити цього користувача з MySQL.", +"Offending command was: \"%s\", name: %s, password: %s" => "Команда, що викликала проблему: \"%s\", ім'я: %s, пароль: %s", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ваш Web-сервер ще не налаштований належним чином для того, щоб дозволити синхронізацію файлів, через те що інтерфейс WebDAV, здається, зламаний.", "Please double check the installation guides." => "Будь ласка, перевірте інструкції по встановленню.", "seconds ago" => "секунди тому", diff --git a/settings/l10n/el.php b/settings/l10n/el.php index 1841793528..56c1837625 100644 --- a/settings/l10n/el.php +++ b/settings/l10n/el.php @@ -29,7 +29,9 @@ "Group Admin" => "Ομάδα Διαχειριστών", "Delete" => "Διαγραφή", "add group" => "προσθήκη ομάδας", +"A valid username must be provided" => "Πρέπει να δοθεί έγκυρο όνομα χρήστη", "Error creating user" => "Σφάλμα δημιουργίας χρήστη", +"A valid password must be provided" => "Πρέπει να δοθεί έγκυρο συνθηματικό", "__language_name__" => "__όνομα_γλώσσας__", "Security Warning" => "Προειδοποίηση Ασφαλείας", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Ο κατάλογος data και τα αρχεία σας πιθανόν να είναι διαθέσιμα στο διαδίκτυο. Το αρχείο .htaccess που παρέχει το ownCloud δεν δουλεύει. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος data να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο data έξω από τον κατάλογο του διακομιστή.", diff --git a/settings/l10n/tr.php b/settings/l10n/tr.php index 38a1d5f7f5..04db8cfcca 100644 --- a/settings/l10n/tr.php +++ b/settings/l10n/tr.php @@ -1,6 +1,7 @@ "App Store'dan liste yüklenemiyor", "Authentication error" => "Eşleşme hata", +"Unable to change display name" => "Ekran adı değiştirilemiyor", "Group already exists" => "Grup zaten mevcut", "Unable to add group" => "Gruba eklenemiyor", "Could not enable app. " => "Uygulama devreye alınamadı", @@ -10,19 +11,34 @@ "Unable to delete user" => "Kullanıcı silinemiyor", "Language changed" => "Dil değiştirildi", "Invalid request" => "Geçersiz istek", +"Admins can't remove themself from the admin group" => "Yöneticiler kendilerini yönetici grubundan kaldıramaz", "Unable to add user to group %s" => "Kullanıcı %s grubuna eklenemiyor", +"Unable to remove user from group %s" => "%s grubundan kullanıcı kaldırılamıyor", +"Couldn't update app." => "Uygulama güncellenemedi.", +"Update to {appversion}" => "{appversion} Güncelle", "Disable" => "Etkin değil", "Enable" => "Etkin", +"Please wait...." => "Lütfen bekleyin....", +"Updating...." => "Güncelleniyor....", +"Error while updating app" => "Uygulama güncellenirken hata", "Error" => "Hata", +"Updated" => "Güncellendi", "Saving..." => "Kaydediliyor...", "deleted" => "silindi", "undo" => "geri al", +"Unable to remove user" => "Kullanıcı kaldırılamıyor", "Groups" => "Gruplar", "Group Admin" => "Yönetici Grubu ", "Delete" => "Sil", +"add group" => "grup ekle", +"A valid username must be provided" => "Geçerli bir kullanıcı adı mutlaka sağlanmalı", +"Error creating user" => "Kullanıcı oluşturulurken hata", +"A valid password must be provided" => "Geçerli bir parola mutlaka sağlanmalı", "__language_name__" => "__dil_adı__", "Security Warning" => "Güvenlik Uyarisi", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "data dizininiz ve dosyalarınız büyük ihtimalle internet üzerinden erişilebilir. Owncloud tarafından sağlanan .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak data dizinine erişimi kapatmanızı veya data dizinini web sunucu döküman dizini dışına almanızı şiddetle tavsiye ederiz.", +"Setup Warning" => "Kurulum Uyarısı", +"Module 'fileinfo' missing" => "Modül 'fileinfo' kayıp", "More" => "Daha fazla", "Version" => "Sürüm", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Geliştirilen TarafownCloud community, the source code is altında lisanslanmıştır AGPL.", @@ -30,6 +46,7 @@ "More Apps" => "Daha fazla App", "Select an App" => "Bir uygulama seçin", "See application page at apps.owncloud.com" => "Uygulamanın sayfasına apps.owncloud.com adresinden bakın ", +"-licensed by " => "-lisanslayan ", "Update" => "Güncelleme", "User Documentation" => "Kullanıcı Belgelendirmesi", "Administrator Documentation" => "Yönetici Belgelendirmesi", @@ -38,18 +55,31 @@ "Bugtracker" => "Hata Takip Sistemi", "Commercial Support" => "Ticari Destek", "Get the apps to sync your files" => "Dosyalarınızı senkronize etmek için uygulamayı indirin", +"Show First Run Wizard again" => "İlk Çalıştırma Sihirbazını yeniden göster", "Password" => "Parola", "Your password was changed" => "Şifreniz değiştirildi", "Unable to change your password" => "Parolanız değiştirilemiyor", "Current password" => "Mevcut parola", "New password" => "Yeni parola", "Change password" => "Parola değiştir", +"Display Name" => "Ekran Adı", +"Your display name was changed" => "Ekran adınız değiştirildi", +"Unable to change your display name" => "Ekran adınız değiştirilemiyor", +"Change display name" => "Ekran adını değiştir", "Email" => "Eposta", "Your email address" => "Eposta adresiniz", "Fill in an email address to enable password recovery" => "Parola sıfırlamayı aktifleştirmek için eposta adresi girin", "Language" => "Dil", "Help translate" => "Çevirilere yardım edin", "WebDAV" => "WebDAV", +"Use this address to connect to your ownCloud in your file manager" => "Bu adresi kullanarak ownCloud 'unuza dosya yöneticinizde bağlanın", +"Login Name" => "Giriş Adı", "Create" => "Oluştur", -"Other" => "Diğer" +"Default Storage" => "Varsayılan Depolama", +"Unlimited" => "Limitsiz", +"Other" => "Diğer", +"Storage" => "Depolama", +"change display name" => "ekran adını değiştir", +"set new password" => "yeni parola belirle", +"Default" => "Varsayılan" ); From 3dfb1628ce6e394a80c03a96da7c837209767e5b Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Tue, 19 Feb 2013 20:42:48 -0500 Subject: [PATCH 307/719] Include etags for the root of the shared folder --- apps/files_sharing/lib/cache.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php index 9655e44787..910c268f01 100644 --- a/apps/files_sharing/lib/cache.php +++ b/apps/files_sharing/lib/cache.php @@ -28,10 +28,11 @@ namespace OC\Files\Cache; */ class Shared_Cache extends Cache { + private $storage; private $files = array(); public function __construct($storage) { - + $this->storage = $storage; } /** @@ -64,7 +65,14 @@ class Shared_Cache extends Cache { */ public function get($file) { if ($file == '') { - return \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_FILE_APP_ROOT); + $data = \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_FILE_APP_ROOT); + $etag = \OCP\Config::getUserValue(\OCP\User::getUser(), 'files_sharing', 'etag'); + if (!isset($etag)) { + $etag = $this->storage->getETag(''); + \OCP\Config::setUserValue(\OCP\User::getUser(), 'files_sharing', 'etag', $etag); + } + $data['etag'] = $etag; + return $data; } else if (is_string($file)) { if ($cache = $this->getSourceCache($file)) { return $cache->get($this->files[$file]); @@ -117,7 +125,9 @@ class Shared_Cache extends Cache { * @return int file id */ public function put($file, array $data) { - if ($cache = $this->getSourceCache($file)) { + if ($file == '' && isset($data['etag'])) { + \OCP\Config::setUserValue(\OCP\User::getUser(), 'files_sharing', 'etag', $etag); + } else if ($cache = $this->getSourceCache($file)) { return $cache->put($this->files[$file], $data); } return false; From 94e5de8fd08c832b713a8162609857b36ed995f7 Mon Sep 17 00:00:00 2001 From: maelzx Date: Wed, 20 Feb 2013 11:14:24 +0800 Subject: [PATCH 308/719] Update apps/files_versions/js/versions.js Fix "All version..." button not clickable. Reason is Google Chrome blocking inline javascript execution. --- apps/files_versions/js/versions.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/files_versions/js/versions.js b/apps/files_versions/js/versions.js index b9c5468981..dec222eefc 100644 --- a/apps/files_versions/js/versions.js +++ b/apps/files_versions/js/versions.js @@ -41,6 +41,10 @@ $(document).ready(function(){ } }); +function goToVersionPage(url){ + window.location(url); +} + function createVersionsDropdown(filename, files) { var historyUrl = OC.linkTo('files_versions', 'history.php') + '?path='+encodeURIComponent( $( '#dir' ).val() ).replace( /%2F/g, '/' )+'/'+encodeURIComponent( filename ); @@ -51,7 +55,7 @@ function createVersionsDropdown(filename, files) { html += ''; html += ''; html += ''; - html += ''; + html += ''; html += ''; if (filename) { @@ -60,6 +64,10 @@ function createVersionsDropdown(filename, files) { } else { $(html).appendTo($('thead .share')); } + + $("#makelink").click(function() { + goToVersionPage(historyUrl); + }); $.ajax({ type: 'GET', From 0efa4182dce6eb7179bea42646d7260bf5c97ea5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Wed, 20 Feb 2013 10:42:54 +0100 Subject: [PATCH 309/719] Update office icons --- core/img/filetypes/application-msexcel.png | Bin 566 -> 663 bytes core/img/filetypes/application-mspowerpoint.png | Bin 519 -> 588 bytes core/img/filetypes/application-msword.png | Bin 789 -> 651 bytes core/img/filetypes/ms-excel.png | Bin 566 -> 663 bytes core/img/filetypes/ms-powerpoint.png | Bin 519 -> 588 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/core/img/filetypes/application-msexcel.png b/core/img/filetypes/application-msexcel.png index abcd93689a08ec9bdbf0984927e8da06c043c7cd..b977d7e52e2446ea01201c5c7209ac3a05f12c9f 100644 GIT binary patch delta 586 zcmV-Q0=50N1eXPnSbqX3NklocDYX+w13v#(9+(pm2Y`rBgB%HhpcqAwHGjs)zZ?XCjE;`p19k(R zh%^AQQ54xysU+ocx$c#f61Z4HnT#3u~FR(3>BnZni zMIF4DouI8HiGLE0r61qOq|?OXaf-zv&N+-Rq*5sW^wy3hj(uOG^bs)oLvem;DeqBPUOyv)#?i1TLZHCN9Kvwz0{ z!ivH7eYDnSt%=2A>wqw@%zT~Z`SdfMzRS^BJ z!=Cg$-p{_`)8~(bp23S8QPm(KD5Y@DHU8z<8`%xd*nMfQgkjj=`WeH(aO(OYtZ954 zXQkn>)qqC0o}%!w}4`Ea$4)7Uae39IBRVMaGM#n)~*6p{Z{8)wK{v7Okjch YFP;~xM=H}_J^%m!07*qoM6N<$f_ye1d;kCd delta 488 zcmVNB_XI7v8TT#7Ow1h@d0(p>E&7-?^Da3<+o?9Yr;hHU^L<$w4{Ujg*A z6d~mYV4na=hT4Nz+_}SGTgW|Iir!%$;@OGkWI6+j0H}~K4RYR%!7y|zM`O@*K>rL{ z*&}x3lR**HrGL3dS>LXps$d!#`oaNnj-xjmOk?1;&##}sm`GeCN0T diff --git a/core/img/filetypes/application-mspowerpoint.png b/core/img/filetypes/application-mspowerpoint.png index b4aaad9a45c9abbee2d47611a6963101b64a8023..c4eff0387d5888c638ba09473ba6d2369f7b56f0 100644 GIT binary patch delta 509 zcmVc0NZemuCP!{KnLBw#02DSHvpDe1=-fW?3Ng5AEt$=eUHr|W3$NRou{cuWWZ z5uw>^0$|k%0DtL+XPmfskJ|1YAw9w!9`N)1^Aesr;y5Nr5-ODn)oOL|CGi}f9!&iV zwpK$khld0mrhJP0SsGJ2%QK?#~b*9`#}2tLg_ZGie66CL#xbVLc0R9ACGy zg;F4R?|%VdonY_%5#Y^V>wJE;&UQ@&9vJ)v^(=h-6CamO00000NkvXXu0mjfs-Eoo delta 440 zcmV;p0Z0DK1cwBWS$~;HL_t&-8KuF`i;ZC%#^KNN_Mn)f%tDevel8Uo4J*k?DQ0aJ z^A9LnrL3%3C~WN5$YQc$H%pW$gGLQyL1JpkIcMJYd*7ZXj%HzMG}o1Evk{qM>h`NE zz+T`Ka2#w*LZ)dFO#(?MSlX1maAeQ+6Ubb>cr;;~%eP+M^?!f5`RI)cGQXXsxIg=y z5wo`GiE-Y3S{hPhDtQ-w9NM{sDkc8u-IpO%f6#8G$P~7>QW$vub;x=+B2i=t%b8+& zVx09-h$>T9P85^ZpD~b-VdlnJ&fhynuh&Bol8{71@OWwlE2uJsC8}@zmNUn8GxOpz zRj)V3!2|oKY=2{m*K_k!?t-eJuuQc)2wIz;!;UIKBoeE25mZt~l_`=$H5|6|+aLxl zl_YEf1{>Q%7gX+6s4|5yBQ}3^T_6XQZDbP)D!Ze~6zXIkQ9PYpWTZE?jfD>%Y1@{S zwk5itNez`{Q)G&e7J>b9cP_BngG&!ti|rp2nJV;T@-f=;!?sT%?T|XKumYeSaefwW^{L9a%BKPWN%_+AW3au zXJt}lVPtu6$z?nM00JFJL_t(I%Z-z}Ym`wC#eetleaWK1%?39JF2tk}u~TET5D~Pq z5y4U`Q(1_uU@IbslJqwDUxI~_Mv;KvgDjhk*J`>E223Q5>T$=~mtA71q-jdG+eJhOAyBW^0k9Gk1+rX8)zFx((CG^&tDY>6 zXaS~Fy!WJON|Gdujg5^~VztuuYwG*C7#d7W9 zBvaKCiHb1>0OuUm+Jg=h>mU}wnW==^*H59qga&Rb)N$4z!&@=N{JxnHyopq{wsW38 zJ_`ziENbxN!Q7~zy`2+^{icJz19&NfyN}*|40$#_+nAgc0Tn?NR1^_|HTxs{4KuW6 zfJ-5SRlsmGi1+@A9R^APi7^fUIZAVkaTkc@K%5)HINKvSh`{DAZnb%%j-IN{00000 LNkvXXu0mjfaN;Ef delta 764 zcmVV>IRB3Hx05CZ(F*PqRHSv*;z5oCKC3HntbW?9;ba!ELWdKcKV{&h8 zWn^h#AVz6&Wp{6KYjYq?SRgVmFf@mDtj_=d0%S=;|_vLc8iNLz}aL#b^d)TJM%km?_ZAh2T*bt$StQHP+YFf>|7^dcw`frp?Uu!csZ z=BBH=x$e62oq695vx$%pJ@7Ka%=6MO6_IR0Z)`T?Ii0t>;LTE1q4O<77rbU5T2SRey|Sr-7|3_&C!O{lGfzzsdk` zqU{iC*VmzHxOL+yvGUw3n`&26oR1jKm3Tiq#mKj>bPr_7}{^=BEKDzdQeDp0IB(u@uggIDTLY)`NA56UA0bNaQQZsw3$|XJ5`P?qfEG zw-$h>{lfq>HP+!gM7~P!@j>%qz`bYvv^A$NfOSH3q``?2d5FB?suopykXS0!i^nocDYX+w13v#(9+(pm2Y`rBgB%HhpcqAwHGjs)zZ?XCjE;`p19k(R zh%^AQQ54xysU+ocx$c#f61Z4HnT#3u~FR(3>BnZni zMIF4DouI8HiGLE0r61qOq|?OXaf-zv&N+-Rq*5sW^wy3hj(uOG^bs)oLvem;DeqBPUOyv)#?i1TLZHCN9Kvwz0{ z!ivH7eYDnSt%=2A>wqw@%zT~Z`SdfMzRS^BJ z!=Cg$-p{_`)8~(bp23S8QPm(KD5Y@DHU8z<8`%xd*nMfQgkjj=`WeH(aO(OYtZ954 zXQkn>)qqC0o}%!w}4`Ea$4)7Uae39IBRVMaGM#n)~*6p{Z{8)wK{v7Okjch YFP;~xM=H}_J^%m!07*qoM6N<$f_ye1d;kCd delta 488 zcmVNB_XI7v8TT#7Ow1h@d0(p>E&7-?^Da3<+o?9Yr;hHU^L<$w4{Ujg*A z6d~mYV4na=hT4Nz+_}SGTgW|Iir!%$;@OGkWI6+j0H}~K4RYR%!7y|zM`O@*K>rL{ z*&}x3lR**HrGL3dS>LXps$d!#`oaNnj-xjmOk?1;&##}sm`GeCN0T diff --git a/core/img/filetypes/ms-powerpoint.png b/core/img/filetypes/ms-powerpoint.png index b4aaad9a45c9abbee2d47611a6963101b64a8023..c4eff0387d5888c638ba09473ba6d2369f7b56f0 100644 GIT binary patch delta 509 zcmVc0NZemuCP!{KnLBw#02DSHvpDe1=-fW?3Ng5AEt$=eUHr|W3$NRou{cuWWZ z5uw>^0$|k%0DtL+XPmfskJ|1YAw9w!9`N)1^Aesr;y5Nr5-ODn)oOL|CGi}f9!&iV zwpK$khld0mrhJP0SsGJ2%QK?#~b*9`#}2tLg_ZGie66CL#xbVLc0R9ACGy zg;F4R?|%VdonY_%5#Y^V>wJE;&UQ@&9vJ)v^(=h-6CamO00000NkvXXu0mjfs-Eoo delta 440 zcmV;p0Z0DK1cwBWS$~;HL_t&-8KuF`i;ZC%#^KNN_Mn)f%tDevel8Uo4J*k?DQ0aJ z^A9LnrL3%3C~WN5$YQc$H%pW$gGLQyL1JpkIcMJYd*7ZXj%HzMG}o1Evk{qM>h`NE zz+T`Ka2#w*LZ)dFO#(?MSlX1maAeQ+6Ubb>cr;;~%eP+M^?!f5`RI)cGQXXsxIg=y z5wo`GiE-Y3S{hPhDtQ-w9NM{sDkc8u-IpO%f6#8G$P~7>QW$vub;x=+B2i=t%b8+& zVx09-h$>T9P85^ZpD~b-VdlnJ&fhynuh&Bol8{71@OWwlE2uJsC8}@zmNUn8GxOpz zRj)V3!2|oKY=2{m*K_k!?t-eJuuQc)2wIz;!;UIKBoeE25mZt~l_`=$H5|6|+aLxl zl_YEf1{>Q%7gX+6s4|5yBQ}3^T_6XQZDbP)D!Ze~6zXIkQ9PYpWTZE?jfD>%Y1@{S zwk5itNez`{Q)G&e7J>b9cP_BngG&!ti|rp2nJV;T@-f=;!?sT%?T|XKumY Date: Wed, 20 Feb 2013 12:06:08 +0100 Subject: [PATCH 310/719] attach on() events to external storage table, dom events in the table will always bubble up here --- apps/files_external/js/settings.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index be24812869..ac408786ff 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -146,7 +146,7 @@ OC.MountConfig={ $(document).ready(function() { $('.chzn-select').chosen(); - $('#selectBackend').on('change', function() { + $('#externalStorage').on('change', '#selectBackend', function() { var tr = $(this).parent().parent(); $('#externalStorage tbody').append($(tr).clone()); $('#externalStorage tbody tr').last().find('.mountPoint input').val(''); @@ -243,11 +243,11 @@ $(document).ready(function() { OC.MountConfig.saveStorage($(this).parent().parent().parent()); }); - $('.applicable').on('change', '.chzn-select', function() { + $('#externalStorage').on('change', '.applicable .chzn-select', function() { OC.MountConfig.saveStorage($(this).parent().parent()); }); - $('td.remove>img').on('click', function() { + $('#externalStorage').on('click', 'td.remove>img', function() { var tr = $(this).parent().parent(); var mountPoint = $(tr).find('.mountPoint input').val(); if ( ! mountPoint) { From 4d0df9614b3aed23920f99645fed7a4385034525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Wed, 20 Feb 2013 13:34:32 +0100 Subject: [PATCH 311/719] put all trash bin content in user/files_trashbin --- apps/files_trashbin/lib/trash.php | 64 +++++++++++++++---------------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index 1c0306ea90..b54805c63e 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -34,7 +34,7 @@ class Trashbin { */ public static function move2trash($file_path) { $user = \OCP\User::getUser(); - $view = new \OC_FilesystemView('/'. $user); + $view = new \OC\Files\View('/'. $user); if (!$view->is_dir('files_trashbin')) { $view->mkdir('files_trashbin'); $view->mkdir("files_trashbin/files"); @@ -87,7 +87,7 @@ class Trashbin { $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_encryption/keyfiles/'.$file_path)); $view->rename('files_encryption'.$file_path, 'files_trashbin/keyfiles'. $deleted.'.d'.$timestamp); } - + } else { \OC_Log::write('files_trashbin', 'Couldn\'t move '.$file_path.' to the trash bin', \OC_log::ERROR); } @@ -127,7 +127,6 @@ class Trashbin { if ( ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) { $trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin')); - $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin')); } if ( $timestamp ) { $query = \OC_DB::prepare('SELECT location,type FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?'); @@ -148,12 +147,12 @@ class Trashbin { $path_parts = pathinfo($filename); $result[] = array( 'location' => $path_parts['dirname'], - 'type' => $view->is_dir('/files_trashbin/'.$file) ? 'dir' : 'files', + 'type' => $view->is_dir('/files_trashbin/files/'.$file) ? 'dir' : 'files', ); $location = ''; } - $source = \OC_Filesystem::normalizePath('files_trashbin/'.$file); + $source = \OC_Filesystem::normalizePath('files_trashbin/files/'.$file); $target = \OC_Filesystem::normalizePath('files/'.$location.'/'.$filename); // we need a extension in case a file/dir with the same name already exists @@ -174,16 +173,16 @@ class Trashbin { $versionedFile = $file; } if ( $result[0]['type'] == 'dir' ) { - $trashbinSize -= self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.'versions_trashbin/'. $file)); - $view->rename(\OC_Filesystem::normalizePath('versions_trashbin/'. $file), \OC_Filesystem::normalizePath('files_versions/'.$location.'/'.$filename.$ext)); + $trashbinSize -= self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.'files_trashbin/versions/'. $file)); + $view->rename(\OC_Filesystem::normalizePath('files_trashbin/versions/'. $file), \OC_Filesystem::normalizePath('files_versions/'.$location.'/'.$filename.$ext)); } else if ( $versions = self::getVersionsFromTrash($versionedFile, $timestamp) ) { foreach ($versions as $v) { if ($timestamp ) { - $trashbinSize -= $view->filesize('versions_trashbin/'.$versionedFile.'.v'.$v.'.d'.$timestamp); - $view->rename('versions_trashbin/'.$versionedFile.'.v'.$v.'.d'.$timestamp, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); + $trashbinSize -= $view->filesize('files_trashbin/versions/'.$versionedFile.'.v'.$v.'.d'.$timestamp); + $view->rename('files_trashbin/versions/'.$versionedFile.'.v'.$v.'.d'.$timestamp, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); } else { - $trashbinSize -= $view->filesize('versions_trashbin/'.$versionedFile.'.v'.$v); - $view->rename('versions_trashbin/'.$versionedFile.'.v'.$v, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); + $trashbinSize -= $view->filesize('files_trashbin/versions/'.$versionedFile.'.v'.$v); + $view->rename('files_trashbin/versions/'.$versionedFile.'.v'.$v, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); } } } @@ -216,7 +215,6 @@ class Trashbin { if ( ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) { $trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin')); - $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin')); } if ( $timestamp ) { @@ -228,28 +226,28 @@ class Trashbin { } if ( \OCP\App::isEnabled('files_versions') ) { - if ($view->is_dir('versions_trashbin/'.$file)) { - $size += self::calculateSize(new \OC_Filesystemview('/'.$user.'/versions_trashbin/'.$file)); - $view->unlink('versions_trashbin/'.$file); + if ($view->is_dir('files_trashbin/versions/'.$file)) { + $size += self::calculateSize(new \OC_Filesystemview('/'.$user.'/files_trashbin/versions/'.$file)); + $view->unlink('files_trashbin/versions/'.$file); } else if ( $versions = self::getVersionsFromTrash($filename, $timestamp) ) { foreach ($versions as $v) { if ($timestamp ) { - $size += $view->filesize('/versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); - $view->unlink('/versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); + $size += $view->filesize('/files_trashbin/versions/'.$filename.'.v'.$v.'.d'.$timestamp); + $view->unlink('/files_trashbin/versions/'.$filename.'.v'.$v.'.d'.$timestamp); } else { - $size += $view->filesize('/versions_trashbin/'.$filename.'.v'.$v); - $view->unlink('/versions_trashbin/'.$filename.'.v'.$v); + $size += $view->filesize('/files_trashbin/versions/'.$filename.'.v'.$v); + $view->unlink('/files_trashbin/versions/'.$filename.'.v'.$v); } } } } - if ($view->is_dir('/files_trashbin/'.$file)) { - $size += self::calculateSize(new \OC_Filesystemview('/'.$user.'/files_trashbin/'.$file)); + if ($view->is_dir('/files_trashbin/files/'.$file)) { + $size += self::calculateSize(new \OC_Filesystemview('/'.$user.'/files_trashbin/files/'.$file)); } else { - $size += $view->filesize('/files_trashbin/'.$file); + $size += $view->filesize('/files_trashbin/files/'.$file); } - $view->unlink('/files_trashbin/'.$file); + $view->unlink('/files_trashbin/files/'.$file); $trashbinSize -= $size; \OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize); @@ -272,7 +270,7 @@ class Trashbin { $filename = $filename; } - $target = \OC_Filesystem::normalizePath('files_trashbin/'.$filename); + $target = \OC_Filesystem::normalizePath('files_trashbin/files/'.$filename); return $view->file_exists($target); } @@ -297,19 +295,19 @@ class Trashbin { $timestamp = $r['timestamp']; $filename = $r['id']; if ( $r['timestamp'] < $limit ) { - if ($view->is_dir('files_trashbin/'.$filename.'.d'.$timestamp)) { - $size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/files_trashbin/'.$filename.'.d'.$timestamp)); + if ($view->is_dir('files_trashbin/files/'.$filename.'.d'.$timestamp)) { + $size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/files_trashbin/files/'.$filename.'.d'.$timestamp)); } else { - $size += $view->filesize('files_trashbin/'.$filename.'.d'.$timestamp); + $size += $view->filesize('files_trashbin/files/'.$filename.'.d'.$timestamp); } - $view->unlink('files_trashbin/'.$filename.'.d'.$timestamp); + $view->unlink('files_trashbin/files/'.$filename.'.d'.$timestamp); if ($r['type'] == 'dir') { - $size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/versions_trashbin/'.$filename.'.d'.$timestamp)); - $view->unlink('versions_trashbin/'.$filename.'.d'.$timestamp); + $size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/files_trashbin/versions'.$filename.'.d'.$timestamp)); + $view->unlink('files_trashbin/versions'.$filename.'.d'.$timestamp); } else if ( $versions = self::getVersionsFromTrash($filename, $timestamp) ) { foreach ($versions as $v) { - $size += $view->filesize('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); - $view->unlink('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); + $size += $view->filesize('files_trashbin/versions/'.$filename.'.v'.$v.'.d'.$timestamp); + $view->unlink('files_trashbin/versions/'.$filename.'.v'.$v.'.d'.$timestamp); } } } @@ -373,7 +371,7 @@ class Trashbin { * @param $timestamp timestamp when the file was deleted */ private static function getVersionsFromTrash($filename, $timestamp) { - $view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/versions_trashbin'); + $view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/files_trashbin/versions'); $versionsName = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath($filename); $versions = array(); if ($timestamp ) { From c49e73d43cd0e775ec653fa59811381b70e3efe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Wed, 20 Feb 2013 15:14:32 +0100 Subject: [PATCH 312/719] restore filekeys from trash bin --- apps/files_trashbin/lib/trash.php | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index b54805c63e..cde388015e 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -82,10 +82,11 @@ class Trashbin { } } - // Take care of encryption keys - if ( \OCP\App::isEnabled('files_encryption') ) { - $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_encryption/keyfiles/'.$file_path)); - $view->rename('files_encryption'.$file_path, 'files_trashbin/keyfiles'. $deleted.'.d'.$timestamp); + // Take care of encryption keys + $keyfile = \OC_Filesystem::normalizePath('files_encryption/keyfiles/'.$file_path.'.key'); + if ( \OCP\App::isEnabled('files_encryption') && $view->file_exists($keyfile) ) { + $trashbinSize += $view->filesize($keyfile); + $view->rename($keyfile, 'files_trashbin/keyfiles/'. $deleted.'.d'.$timestamp); } } else { @@ -187,7 +188,18 @@ class Trashbin { } } } - + + // Take care of encryption keys + $keyfile = 'files_trashbin/keyfiles/'.$file; + if ( \OCP\App::isEnabled('files_encryption') && $view->file_exists($keyfile) ) { + if ( $result[0]['type'] == 'dir' ) { + $trashbinSize -= self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.$keyfile)); + } else { + $trashbinSize -= $view->filesize($keyfile); + } + $view->rename($keyfile, 'files_encryption/keyfiles/'. $location.'/'.$filename.'.key'); + } + if ( $timestamp ) { $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?'); $query->execute(array($user,$filename,$timestamp)); From 3a364639b7649c12dcdd15e1c0344a35432aedc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Wed, 20 Feb 2013 15:17:32 +0100 Subject: [PATCH 313/719] use "|" as delimiter instead of ";", since "|" is not allowed in file/folder names --- apps/files_trashbin/ajax/delete.php | 6 +----- apps/files_trashbin/ajax/undelete.php | 2 +- apps/files_trashbin/js/trash.js | 4 ++-- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/apps/files_trashbin/ajax/delete.php b/apps/files_trashbin/ajax/delete.php index 915ad9379f..80382147eb 100644 --- a/apps/files_trashbin/ajax/delete.php +++ b/apps/files_trashbin/ajax/delete.php @@ -5,11 +5,7 @@ OCP\JSON::callCheck(); $files = $_POST['files']; $dirlisting = $_POST['dirlisting']; -$list = explode(';', $files); - -if (!is_array($list)){ - $list = array($list); -} +$list = explode('|', $files); $error = array(); $success = array(); diff --git a/apps/files_trashbin/ajax/undelete.php b/apps/files_trashbin/ajax/undelete.php index 57f6281674..b76adb2a2a 100644 --- a/apps/files_trashbin/ajax/undelete.php +++ b/apps/files_trashbin/ajax/undelete.php @@ -5,7 +5,7 @@ OCP\JSON::callCheck(); $files = $_POST['files']; $dirlisting = $_POST['dirlisting']; -$list = explode(';', $files); +$list = explode('|', $files); $error = array(); $success = array(); diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js index fc38889dc3..c8b862837a 100644 --- a/apps/files_trashbin/js/trash.js +++ b/apps/files_trashbin/js/trash.js @@ -93,7 +93,7 @@ $(document).ready(function() { $('.undelete').click('click',function(event) { var spinner = ''; var files=getSelectedFiles('file'); - var fileslist=files.join(';'); + var fileslist=files.join('|'); var dirlisting=getSelectedFiles('dirlisting')[0]; for (var i in files) { @@ -118,7 +118,7 @@ $(document).ready(function() { console.log("delete selected"); var spinner = ''; var files=getSelectedFiles('file'); - var fileslist=files.join(';'); + var fileslist=files.join('|'); var dirlisting=getSelectedFiles('dirlisting')[0]; for (var i in files) { From 273e1a146b27e197a7450589594edcb9131e3b5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Wed, 20 Feb 2013 16:33:45 +0100 Subject: [PATCH 314/719] switch to json encoded file list --- apps/files_trashbin/ajax/delete.php | 2 +- apps/files_trashbin/ajax/undelete.php | 2 +- apps/files_trashbin/js/trash.js | 10 ++++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/files_trashbin/ajax/delete.php b/apps/files_trashbin/ajax/delete.php index 80382147eb..34f35c39cc 100644 --- a/apps/files_trashbin/ajax/delete.php +++ b/apps/files_trashbin/ajax/delete.php @@ -5,7 +5,7 @@ OCP\JSON::callCheck(); $files = $_POST['files']; $dirlisting = $_POST['dirlisting']; -$list = explode('|', $files); +$list = json_decode($files); $error = array(); $success = array(); diff --git a/apps/files_trashbin/ajax/undelete.php b/apps/files_trashbin/ajax/undelete.php index b76adb2a2a..93f2aaf1fa 100644 --- a/apps/files_trashbin/ajax/undelete.php +++ b/apps/files_trashbin/ajax/undelete.php @@ -5,7 +5,7 @@ OCP\JSON::callCheck(); $files = $_POST['files']; $dirlisting = $_POST['dirlisting']; -$list = explode('|', $files); +$list = json_decode($files); $error = array(); $success = array(); diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js index c8b862837a..3841a09814 100644 --- a/apps/files_trashbin/js/trash.js +++ b/apps/files_trashbin/js/trash.js @@ -6,9 +6,10 @@ $(document).ready(function() { var tr=$('tr').filterAttr('data-file', filename); var spinner = ''; var undeleteAction = $('tr').filterAttr('data-file',filename).children("td.date"); + var files = tr.attr('data-file'); undeleteAction[0].innerHTML = undeleteAction[0].innerHTML+spinner; $.post(OC.filePath('files_trashbin','ajax','undelete.php'), - {files:tr.attr('data-file'), dirlisting:tr.attr('data-dirlisting') }, + {files:JSON.stringify([files]), dirlisting:tr.attr('data-dirlisting') }, function(result){ for (var i = 0; i < result.data.success.length; i++) { var row = document.getElementById(result.data.success[i].filename); @@ -31,10 +32,11 @@ $(document).ready(function() { var deleteAction = $('tr').filterAttr('data-file',filename).children("td.date").children(".action.delete"); var oldHTML = deleteAction[0].outerHTML; var newHTML = ''; + var files = tr.attr('data-file'); deleteAction[0].outerHTML = newHTML; $.post(OC.filePath('files_trashbin','ajax','delete.php'), - {files:tr.attr('data-file'), dirlisting:tr.attr('data-dirlisting') }, + {files:JSON.stringify([files]), dirlisting:tr.attr('data-dirlisting') }, function(result){ for (var i = 0; i < result.data.success.length; i++) { var row = document.getElementById(result.data.success[i].filename); @@ -93,7 +95,7 @@ $(document).ready(function() { $('.undelete').click('click',function(event) { var spinner = ''; var files=getSelectedFiles('file'); - var fileslist=files.join('|'); + var fileslist = JSON.stringify(files); var dirlisting=getSelectedFiles('dirlisting')[0]; for (var i in files) { @@ -118,7 +120,7 @@ $(document).ready(function() { console.log("delete selected"); var spinner = ''; var files=getSelectedFiles('file'); - var fileslist=files.join('|'); + var fileslist = JSON.stringify(files); var dirlisting=getSelectedFiles('dirlisting')[0]; for (var i in files) { From d8e8dab0066439414f282fa15dd1d9d3b851c310 Mon Sep 17 00:00:00 2001 From: raghunayyar Date: Wed, 20 Feb 2013 21:37:23 +0530 Subject: [PATCH 315/719] Fixes the Email Button and the email input Width. --- core/js/share.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/js/share.js b/core/js/share.js index 6d1c395404..231d07cf3b 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -186,8 +186,8 @@ OC.Share={ html += ''; html += ''; html += ''; - html += ''; - html += ''; + html += ''; + html += ''; html += ''; } html += '
'; From 326aae8a08248bced07ef59260924a7badda8a4d Mon Sep 17 00:00:00 2001 From: raghunayyar Date: Wed, 20 Feb 2013 21:59:12 +0530 Subject: [PATCH 316/719] Hovering on the unshare doesnt spoil look --- core/css/share.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/css/share.css b/core/css/share.css index aae4294ff2..c0d8e3f9d6 100644 --- a/core/css/share.css +++ b/core/css/share.css @@ -29,6 +29,9 @@ white-space:normal; } + #shareWithList .cruds { + margin-left:-10px; + } #dropdown label { font-weight:400; } @@ -47,6 +50,7 @@ float:right; opacity:.5; padding:.3em 0 0 .3em !important; + margin-top:-5px; } #link { From 4b5a662e09e1f1d0b7885b546e7b278fe263be34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Wed, 20 Feb 2013 17:58:04 +0100 Subject: [PATCH 317/719] delete keyfiles if file in trash bin gets deleted permanently --- apps/files_trashbin/lib/trash.php | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index cde388015e..5c0cf36f5b 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -83,10 +83,14 @@ class Trashbin { } // Take care of encryption keys - $keyfile = \OC_Filesystem::normalizePath('files_encryption/keyfiles/'.$file_path.'.key'); - if ( \OCP\App::isEnabled('files_encryption') && $view->file_exists($keyfile) ) { - $trashbinSize += $view->filesize($keyfile); - $view->rename($keyfile, 'files_trashbin/keyfiles/'. $deleted.'.d'.$timestamp); + $keyfile = \OC_Filesystem::normalizePath('files_encryption/keyfiles/'.$file_path); + if ( \OCP\App::isEnabled('files_encryption') && $view->file_exists($keyfile.'.key') ) { + if ( $view->is_dir('files'.$file_path) ) { + $trashbinSize -= self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.$keyfile)); + } else { + $trashbinSize += $view->filesize($keyfile.'.key'); + } + $view->rename($keyfile.'.key', 'files_trashbin/keyfiles/'. $deleted.'.d'.$timestamp); } } else { @@ -190,7 +194,7 @@ class Trashbin { } // Take care of encryption keys - $keyfile = 'files_trashbin/keyfiles/'.$file; + $keyfile = \OC_Filesystem::normalizePath('files_trashbin/keyfiles/'.$file); if ( \OCP\App::isEnabled('files_encryption') && $view->file_exists($keyfile) ) { if ( $result[0]['type'] == 'dir' ) { $trashbinSize -= self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.$keyfile)); @@ -252,6 +256,17 @@ class Trashbin { } } } + } + + // Take care of encryption keys + $keyfile = \OC_Filesystem::normalizePath('files_trashbin/keyfiles/'.$file); + if ( \OCP\App::isEnabled('files_encryption') && $view->file_exists($keyfile) ) { + if ( $result[0]['type'] == 'dir' ) { + $size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.$keyfile)); + } else { + $size += $view->filesize($keyfile); + } + $view->unlink($keyfile); } if ($view->is_dir('/files_trashbin/files/'.$file)) { From 5ce6d1fb5774bdc7dacea4c853d5412f03004e0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Wed, 20 Feb 2013 18:00:15 +0100 Subject: [PATCH 318/719] reuse delete() function in expire() --- apps/files_trashbin/lib/trash.php | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index 5c0cf36f5b..4d230449b5 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -322,27 +322,10 @@ class Trashbin { $timestamp = $r['timestamp']; $filename = $r['id']; if ( $r['timestamp'] < $limit ) { - if ($view->is_dir('files_trashbin/files/'.$filename.'.d'.$timestamp)) { - $size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/files_trashbin/files/'.$filename.'.d'.$timestamp)); - } else { - $size += $view->filesize('files_trashbin/files/'.$filename.'.d'.$timestamp); - } - $view->unlink('files_trashbin/files/'.$filename.'.d'.$timestamp); - if ($r['type'] == 'dir') { - $size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/files_trashbin/versions'.$filename.'.d'.$timestamp)); - $view->unlink('files_trashbin/versions'.$filename.'.d'.$timestamp); - } else if ( $versions = self::getVersionsFromTrash($filename, $timestamp) ) { - foreach ($versions as $v) { - $size += $view->filesize('files_trashbin/versions/'.$filename.'.v'.$v.'.d'.$timestamp); - $view->unlink('files_trashbin/versions/'.$filename.'.v'.$v.'.d'.$timestamp); - } - } + $size += self::delete($filename, $timestamp); } } - - $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND timestampexecute(array($user,$limit)); - + $availableSpace = $availableSpace + $size; // if size limit for trash bin reached, delete oldest files in trash bin if ($availableSpace < 0) { @@ -355,8 +338,7 @@ class Trashbin { $availableSpace += $tmp; $size += $tmp; $i++; - } - + } } return $size; From 6ecc3d7ee1a7ae1a33b4906a0ffa1ecc3760c2e1 Mon Sep 17 00:00:00 2001 From: raghunayyar Date: Wed, 20 Feb 2013 23:08:21 +0530 Subject: [PATCH 319/719] Reduced email input width by 10% to increase space. --- core/js/share.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/js/share.js b/core/js/share.js index 231d07cf3b..dc62dd2e04 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -186,7 +186,7 @@ OC.Share={ html += '
'; html += ''; html += ''; - html += ''; + html += ''; html += ''; html += ''; } From 59fd9b2bd2a23e008a0be3180a423276d7a00f35 Mon Sep 17 00:00:00 2001 From: Frank Karlitschek Date: Wed, 20 Feb 2013 19:09:58 +0100 Subject: [PATCH 320/719] 5.0.0 beta 1 --- lib/util.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/util.php b/lib/util.php index b2a4fce65a..636f3127f4 100755 --- a/lib/util.php +++ b/lib/util.php @@ -75,7 +75,7 @@ class OC_Util { public static function getVersion() { // hint: We only can count up. So the internal version number // of ownCloud 4.5 will be 4.90.0. This is not visible to the user - return array(4, 92, 10); + return array(4, 93, 10); } /** @@ -83,7 +83,7 @@ class OC_Util { * @return string */ public static function getVersionString() { - return '5.0 alpha 1'; + return '5.0 beta 1'; } /** From 5329c9ea31a1e0c31756d4faf8a9946965032012 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Wed, 20 Feb 2013 19:18:34 +0100 Subject: [PATCH 321/719] update script which copies all trash bin related files to user/files_trashbin --- apps/files_trashbin/appinfo/update.php | 40 ++++++++++++++++++++++++++ apps/files_trashbin/appinfo/version | 2 +- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 apps/files_trashbin/appinfo/update.php diff --git a/apps/files_trashbin/appinfo/update.php b/apps/files_trashbin/appinfo/update.php new file mode 100644 index 0000000000..b0bf79cc51 --- /dev/null +++ b/apps/files_trashbin/appinfo/update.php @@ -0,0 +1,40 @@ + Date: Wed, 20 Feb 2013 21:14:55 +0100 Subject: [PATCH 322/719] Add message when trouble sending email ref #1799 --- core/lostpassword/controller.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/lostpassword/controller.php b/core/lostpassword/controller.php index 3ef8eaf71a..fbcf4a87f2 100644 --- a/core/lostpassword/controller.php +++ b/core/lostpassword/controller.php @@ -44,7 +44,11 @@ class OC_Core_LostPassword_Controller { $msg = $tmpl->fetchPage(); $l = OC_L10N::get('core'); $from = OCP\Util::getDefaultEmailAddress('lostpassword-noreply'); - OC_Mail::send($email, $_POST['user'], $l->t('ownCloud password reset'), $msg, $from, 'ownCloud'); + try { + OC_Mail::send($email, $_POST['user'], $l->t('ownCloud password reset'), $msg, $from, 'ownCloud'); + } catch (Exception $e) { + OC_Template::printErrorPage( 'A problem occurs during sending the e-mail please contact your administrator.'); + } self::displayLostPasswordPage(false, true); } else { self::displayLostPasswordPage(true, false); From 3b9d9eea09bc7ccaad1445882f60ec2478bc34d0 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Wed, 20 Feb 2013 21:57:50 +0100 Subject: [PATCH 323/719] replaced for in loops with normal enumerating loops to fix #1803 --- apps/files/js/filelist.js | 4 ++-- apps/files_trashbin/js/trash.js | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index cc107656da..0bf1f79ab7 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -315,8 +315,8 @@ var FileList={ do_delete:function(files){ if(files.substr){ files=[files]; - } - for (var i in files) { + } + for (var i=0; i'; diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js index 6c810e4c2b..23e5fb2fc9 100644 --- a/apps/files_trashbin/js/trash.js +++ b/apps/files_trashbin/js/trash.js @@ -88,7 +88,7 @@ $(document).ready(function() { } } processSelection(); - }); + }); $('.undelete').click('click',function(event) { var spinner = ''; @@ -96,7 +96,7 @@ $(document).ready(function() { var fileslist=files.join(';'); var dirlisting=getSelectedFiles('dirlisting')[0]; - for (var i in files) { + for (var i=0; i Date: Wed, 20 Feb 2013 22:17:04 +0100 Subject: [PATCH 324/719] some fixes for the keyfile handling --- apps/files_trashbin/lib/trash.php | 38 +++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index 4d230449b5..f11e5c4cbf 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -69,7 +69,7 @@ class Trashbin { return; } - // Take core of file versions + // Take care of file versions if ( \OCP\App::isEnabled('files_versions') ) { if ( $view->is_dir('files_versions'.$file_path) ) { $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_versions/'.$file_path)); @@ -86,11 +86,12 @@ class Trashbin { $keyfile = \OC_Filesystem::normalizePath('files_encryption/keyfiles/'.$file_path); if ( \OCP\App::isEnabled('files_encryption') && $view->file_exists($keyfile.'.key') ) { if ( $view->is_dir('files'.$file_path) ) { - $trashbinSize -= self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.$keyfile)); + $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.$keyfile)); + $view->rename($keyfile, 'files_trashbin/keyfiles/'. $deleted.'.d'.$timestamp); } else { $trashbinSize += $view->filesize($keyfile.'.key'); + $view->rename($keyfile.'.key', 'files_trashbin/keyfiles/'. $deleted.'.key.d'.$timestamp); } - $view->rename($keyfile.'.key', 'files_trashbin/keyfiles/'. $deleted.'.d'.$timestamp); } } else { @@ -149,7 +150,7 @@ class Trashbin { $location = ''; } } else { - $path_parts = pathinfo($filename); + $path_parts = pathinfo($file); $result[] = array( 'location' => $path_parts['dirname'], 'type' => $view->is_dir('/files_trashbin/files/'.$file) ? 'dir' : 'files', @@ -193,15 +194,24 @@ class Trashbin { } } - // Take care of encryption keys - $keyfile = \OC_Filesystem::normalizePath('files_trashbin/keyfiles/'.$file); + // Take care of encryption keys TODO! Get '.key' in file between file name and delete date (also for permanent delete!) + $parts = pathinfo($file); + if ( $result[0]['type'] == 'dir' ) { + $keyfile = \OC_Filesystem::normalizePath('files_trashbin/keyfiles/'.$parts['dirname'].'/'.$filename); + } else { + $keyfile = \OC_Filesystem::normalizePath('files_trashbin/keyfiles/'.$parts['dirname'].'/'.$filename.'.key'); + } + if ($timestamp) { + $keyfile .= '.d'.$timestamp; + } if ( \OCP\App::isEnabled('files_encryption') && $view->file_exists($keyfile) ) { if ( $result[0]['type'] == 'dir' ) { $trashbinSize -= self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.$keyfile)); + $view->rename($keyfile, 'files_encryption/keyfiles/'. $location.'/'.$filename); } else { $trashbinSize -= $view->filesize($keyfile); + $view->rename($keyfile, 'files_encryption/keyfiles/'. $location.'/'.$filename.'.key'); } - $view->rename($keyfile, 'files_encryption/keyfiles/'. $location.'/'.$filename.'.key'); } if ( $timestamp ) { @@ -258,10 +268,18 @@ class Trashbin { } } - // Take care of encryption keys - $keyfile = \OC_Filesystem::normalizePath('files_trashbin/keyfiles/'.$file); + // Take care of encryption keys + $parts = pathinfo($file); + if ( $view->is_dir('/files_trashbin/files/'.$file) ) { + $keyfile = \OC_Filesystem::normalizePath('files_trashbin/keyfiles/'.$filename); + } else { + $keyfile = \OC_Filesystem::normalizePath('files_trashbin/keyfiles/'.$filename.'.key'); + } + if ($timestamp) { + $keyfile .= '.d'.$timestamp; + } if ( \OCP\App::isEnabled('files_encryption') && $view->file_exists($keyfile) ) { - if ( $result[0]['type'] == 'dir' ) { + if ( $view->is_dir($keyfile) ) { $size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.$keyfile)); } else { $size += $view->filesize($keyfile); From 2d6efae25714b188d4e689617b2e4ae8695b0317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Wed, 20 Feb 2013 22:19:23 +0100 Subject: [PATCH 325/719] update path to deleted files --- apps/files_trashbin/index.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php index a2d4cc0a44..8f8d143b4d 100644 --- a/apps/files_trashbin/index.php +++ b/apps/files_trashbin/index.php @@ -9,7 +9,7 @@ OCP\Util::addScript('files', 'fileactions'); $tmpl = new OCP\Template('files_trashbin', 'index', 'user'); $user = \OCP\User::getUser(); -$view = new OC_Filesystemview('/'.$user.'/files_trashbin'); +$view = new OC_Filesystemview('/'.$user.'/files_trashbin/files'); OCP\Util::addStyle('files', 'files'); OCP\Util::addScript('files', 'filelist'); @@ -17,8 +17,7 @@ OCP\Util::addScript('files', 'filelist'); $dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : ''; if ($dir) { - $dirlisting = true; - $view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/files_trashbin'); + $dirlisting = true; $fullpath = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath($dir); $dirContent = opendir($fullpath); $i = 0; From c1847aaf5159200c38eb52693a2d2a84aef5cb5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Wed, 20 Feb 2013 22:32:44 +0100 Subject: [PATCH 326/719] change for loop to make it hopefully work with IE --- apps/files_trashbin/js/trash.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js index 3841a09814..94fb4358d3 100644 --- a/apps/files_trashbin/js/trash.js +++ b/apps/files_trashbin/js/trash.js @@ -123,7 +123,7 @@ $(document).ready(function() { var fileslist = JSON.stringify(files); var dirlisting=getSelectedFiles('dirlisting')[0]; - for (var i in files) { + for (var i=0; i Date: Wed, 20 Feb 2013 23:11:38 +0100 Subject: [PATCH 327/719] WebDAV-Testing: - write the exception to the log - in case curl is missing we should return true as well --- lib/util.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/util.php b/lib/util.php index 636f3127f4..5d3286204e 100755 --- a/lib/util.php +++ b/lib/util.php @@ -562,7 +562,7 @@ class OC_Util { */ public static function isWebDAVWorking() { if (!function_exists('curl_init')) { - return; + return true; } $settings = array( @@ -578,6 +578,7 @@ class OC_Util { } catch(\Sabre_DAV_Exception_NotAuthenticated $e) { $return = true; } catch(\Exception $e) { + OC_Log::write('core', 'isWebDAVWorking: NO - Reason: '.$e, OC_Log::WARN); $return = false; } From fc1fba23040908fe5629f89b66a280aea5578520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Thu, 21 Feb 2013 00:02:52 +0100 Subject: [PATCH 328/719] don't show empty trash bin message for sub folders --- apps/files_trashbin/index.php | 1 + apps/files_trashbin/templates/index.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php index 8f8d143b4d..d575c75f1a 100644 --- a/apps/files_trashbin/index.php +++ b/apps/files_trashbin/index.php @@ -94,6 +94,7 @@ $list->assign('disableDownloadActions', true); $tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage(), false); $tmpl->assign('fileList', $list->fetchPage(), false); $tmpl->assign('files', $files); +$tmpl->assign('dirlisting', $dirlisting); $tmpl->assign('dir', OC_Filesystem::normalizePath($view->getAbsolutePath())); $tmpl->printPage(); diff --git a/apps/files_trashbin/templates/index.php b/apps/files_trashbin/templates/index.php index c3e51b4bec..b62ca0af00 100644 --- a/apps/files_trashbin/templates/index.php +++ b/apps/files_trashbin/templates/index.php @@ -5,7 +5,7 @@
- +
t('Nothing in here. Your trash bin is empty!')?>
From dcd93a53e4f2d158cb67493ce94ff164bac8f0e8 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Thu, 21 Feb 2013 00:15:58 +0100 Subject: [PATCH 329/719] [tx-robot] updated from transifex --- apps/files/l10n/de_DE.php | 4 +- apps/files/l10n/id.php | 4 + apps/files/l10n/pt_BR.php | 1 + apps/files_encryption/l10n/id.php | 7 +- apps/files_external/l10n/id.php | 36 +- apps/files_trashbin/l10n/de.php | 4 +- apps/files_trashbin/l10n/de_DE.php | 4 +- apps/files_trashbin/l10n/id.php | 13 +- apps/files_versions/l10n/id.php | 8 + apps/user_ldap/l10n/de.php | 10 +- apps/user_ldap/l10n/de_DE.php | 4 +- apps/user_ldap/l10n/id.php | 55 +++ apps/user_ldap/l10n/pt_BR.php | 1 + core/l10n/de.php | 18 +- core/l10n/de_DE.php | 6 +- core/l10n/my_MM.php | 3 + l10n/af_ZA/files_trashbin.po | 30 +- l10n/ar/files_trashbin.po | 30 +- l10n/be/files_trashbin.po | 32 +- l10n/bg_BG/files_trashbin.po | 32 +- l10n/bn_BD/files_trashbin.po | 30 +- l10n/ca/files_trashbin.po | 32 +- l10n/cs_CZ/files_trashbin.po | 32 +- l10n/da/files_trashbin.po | 32 +- l10n/de/core.po | 25 +- l10n/de/files.po | 44 +-- l10n/de/files_trashbin.po | 37 +- l10n/de/lib.po | 13 +- l10n/de/settings.po | 16 +- l10n/de/user_ldap.po | 17 +- l10n/de/user_webdavauth.po | 6 +- l10n/de_DE/core.po | 13 +- l10n/de_DE/files.po | 49 +-- l10n/de_DE/files_trashbin.po | 37 +- l10n/de_DE/files_versions.po | 6 +- l10n/de_DE/lib.po | 11 +- l10n/de_DE/settings.po | 14 +- l10n/de_DE/user_ldap.po | 11 +- l10n/de_DE/user_webdavauth.po | 6 +- l10n/el/files_trashbin.po | 32 +- l10n/eo/files_trashbin.po | 30 +- l10n/es/files_trashbin.po | 32 +- l10n/es/settings.po | 19 +- l10n/es_AR/files_trashbin.po | 32 +- l10n/et_EE/files_trashbin.po | 32 +- l10n/eu/files_trashbin.po | 32 +- l10n/fa/files_trashbin.po | 30 +- l10n/fi_FI/files_trashbin.po | 32 +- l10n/fr/files_trashbin.po | 32 +- l10n/gl/files_trashbin.po | 32 +- l10n/he/files_trashbin.po | 30 +- l10n/hi/files_trashbin.po | 30 +- l10n/hr/files_trashbin.po | 30 +- l10n/hu_HU/files_trashbin.po | 32 +- l10n/ia/files_trashbin.po | 30 +- l10n/id/core.po | 6 +- l10n/id/files.po | 50 +-- l10n/id/files_encryption.po | 17 +- l10n/id/files_external.po | 65 +-- l10n/id/files_trashbin.po | 51 ++- l10n/id/files_versions.po | 23 +- l10n/id/lib.po | 60 +-- l10n/id/settings.po | 16 +- l10n/id/user_ldap.po | 227 +++++------ l10n/is/files_trashbin.po | 30 +- l10n/it/files_trashbin.po | 32 +- l10n/ja_JP/files_trashbin.po | 32 +- l10n/ka_GE/files_trashbin.po | 30 +- l10n/ko/files_trashbin.po | 30 +- l10n/ku_IQ/files_trashbin.po | 30 +- l10n/lb/files_trashbin.po | 30 +- l10n/lt_LT/files_trashbin.po | 30 +- l10n/lv/files_trashbin.po | 32 +- l10n/mk/files_trashbin.po | 30 +- l10n/ms_MY/files_trashbin.po | 30 +- l10n/my_MM/core.po | 594 ++++++++++++++++++++++++++++ l10n/my_MM/files.po | 315 +++++++++++++++ l10n/my_MM/files_encryption.po | 38 ++ l10n/my_MM/files_external.po | 120 ++++++ l10n/my_MM/files_sharing.po | 48 +++ l10n/my_MM/files_trashbin.po | 76 ++++ l10n/my_MM/files_versions.po | 65 +++ l10n/my_MM/lib.po | 253 ++++++++++++ l10n/my_MM/settings.po | 496 +++++++++++++++++++++++ l10n/my_MM/user_ldap.po | 309 +++++++++++++++ l10n/my_MM/user_webdavauth.po | 33 ++ l10n/nb_NO/files_trashbin.po | 30 +- l10n/nl/files_trashbin.po | 32 +- l10n/nn_NO/files_trashbin.po | 30 +- l10n/oc/files_trashbin.po | 30 +- l10n/pl/files_trashbin.po | 30 +- l10n/pl_PL/files_trashbin.po | 30 +- l10n/pt_BR/files.po | 47 +-- l10n/pt_BR/files_trashbin.po | 32 +- l10n/pt_BR/user_ldap.po | 6 +- l10n/pt_PT/files_trashbin.po | 32 +- l10n/ro/files_trashbin.po | 30 +- l10n/ru/files_trashbin.po | 32 +- l10n/ru_RU/files_trashbin.po | 32 +- l10n/si_LK/files_trashbin.po | 30 +- l10n/sk/files_trashbin.po | 32 +- l10n/sk_SK/files_trashbin.po | 32 +- l10n/sl/files_trashbin.po | 30 +- l10n/sr/files_trashbin.po | 30 +- l10n/sr@latin/files_trashbin.po | 30 +- l10n/sv/files_trashbin.po | 32 +- l10n/sw_KE/files_trashbin.po | 30 +- l10n/ta_LK/files_trashbin.po | 30 +- l10n/templates/core.pot | 4 +- l10n/templates/files.pot | 40 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_trashbin.pot | 28 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/settings.pot | 2 +- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- l10n/th_TH/files_trashbin.po | 30 +- l10n/tr/files_trashbin.po | 32 +- l10n/uk/files_trashbin.po | 32 +- l10n/vi/files_trashbin.po | 32 +- l10n/zh_CN.GB2312/files_trashbin.po | 30 +- l10n/zh_CN/files_trashbin.po | 30 +- l10n/zh_HK/files_trashbin.po | 30 +- l10n/zh_TW/files_trashbin.po | 30 +- lib/l10n/de.php | 6 +- lib/l10n/de_DE.php | 4 +- lib/l10n/my_MM.php | 3 + settings/l10n/de.php | 10 +- settings/l10n/de_DE.php | 8 +- settings/l10n/es.php | 1 + settings/l10n/id.php | 1 + 134 files changed, 4224 insertions(+), 1230 deletions(-) create mode 100644 core/l10n/my_MM.php create mode 100644 l10n/my_MM/core.po create mode 100644 l10n/my_MM/files.po create mode 100644 l10n/my_MM/files_encryption.po create mode 100644 l10n/my_MM/files_external.po create mode 100644 l10n/my_MM/files_sharing.po create mode 100644 l10n/my_MM/files_trashbin.po create mode 100644 l10n/my_MM/files_versions.po create mode 100644 l10n/my_MM/lib.po create mode 100644 l10n/my_MM/settings.po create mode 100644 l10n/my_MM/user_ldap.po create mode 100644 l10n/my_MM/user_webdavauth.po create mode 100644 lib/l10n/my_MM.php diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php index 8d119afada..1462efdd5d 100644 --- a/apps/files/l10n/de_DE.php +++ b/apps/files/l10n/de_DE.php @@ -24,7 +24,7 @@ "replaced {new_name}" => "{new_name} wurde ersetzt", "undo" => "rückgängig machen", "replaced {new_name} with {old_name}" => "{old_name} wurde ersetzt durch {new_name}", -"perform delete operation" => "Führe das Löschen aus", +"perform delete operation" => "führe das Löschen aus", "'.' is an invalid file name." => "'.' ist kein gültiger Dateiname.", "File name cannot be empty." => "Der Dateiname darf nicht leer sein.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig.", @@ -69,5 +69,5 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.", "Files are being scanned, please wait." => "Dateien werden gescannt, bitte warten.", "Current scanning" => "Scanne", -"Upgrading filesystem cache..." => "Aktualisiere den Dateisystem-Cache" +"Upgrading filesystem cache..." => "Aktualisiere den Dateisystem-Cache..." ); diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php index 4c4e2e0f71..aff1933e56 100644 --- a/apps/files/l10n/id.php +++ b/apps/files/l10n/id.php @@ -19,6 +19,10 @@ "Name" => "Nama", "Size" => "Ukuran", "Modified" => "Dimodifikasi", +"1 folder" => "1 map", +"{count} folders" => "{count} map", +"1 file" => "1 berkas", +"{count} files" => "{count} berkas", "Upload" => "Unggah", "File handling" => "Penanganan berkas", "Maximum upload size" => "Ukuran unggah maksimum", diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php index 3a9dafcabf..eb66e15472 100644 --- a/apps/files/l10n/pt_BR.php +++ b/apps/files/l10n/pt_BR.php @@ -60,6 +60,7 @@ "Text file" => "Arquivo texto", "Folder" => "Pasta", "From link" => "Do link", +"Deleted files" => "Arquivos apagados", "Cancel upload" => "Cancelar upload", "Nothing in here. Upload something!" => "Nada aqui.Carrege alguma coisa!", "Download" => "Baixar", diff --git a/apps/files_encryption/l10n/id.php b/apps/files_encryption/l10n/id.php index 3f9a6c7d07..6044348e72 100644 --- a/apps/files_encryption/l10n/id.php +++ b/apps/files_encryption/l10n/id.php @@ -1,4 +1,7 @@ "enkripsi", -"None" => "tidak ada" +"Encryption" => "Enkripsi", +"File encryption is enabled." => "Enkripsi berkas aktif.", +"The following file types will not be encrypted:" => "Tipe berkas berikut tidak akan dienkripsi:", +"Exclude the following file types from encryption:" => "Kecualikan tipe berkas berikut dari enkripsi:", +"None" => "Tidak ada" ); diff --git a/apps/files_external/l10n/id.php b/apps/files_external/l10n/id.php index 4b7850025f..ab2d2d365f 100644 --- a/apps/files_external/l10n/id.php +++ b/apps/files_external/l10n/id.php @@ -1,14 +1,26 @@ "akses diberikan", -"Grant access" => "berikan hak akses", -"Fill out all required fields" => "isi semua field yang dibutuhkan", -"External Storage" => "penyimpanan eksternal", -"Configuration" => "konfigurasi", -"Options" => "pilihan", -"Applicable" => "berlaku", -"None set" => "tidak satupun di set", -"All Users" => "semua pengguna", -"Groups" => "grup", -"Users" => "pengguna", -"Delete" => "hapus" +"Access granted" => "Akses diberikan", +"Error configuring Dropbox storage" => "Kesalahan dalam mengkonfigurasi penyimpanan Dropbox", +"Grant access" => "Berikan hak akses", +"Fill out all required fields" => "Isi semua field yang dibutuhkan", +"Please provide a valid Dropbox app key and secret." => "Masukkan kunci dan sandi aplikasi Dropbox yang benar.", +"Error configuring Google Drive storage" => "Kesalahan dalam mengkonfigurasi penyimpanan Google Drive", +"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Peringatan: \"smbclient\" tidak terpasang. Mount direktori CIFS/SMB tidak dapat dilakukan. Silakan minta administrator sistem untuk memasangnya.", +"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Peringatan: Dukungan FTP di PHP tidak aktif atau tidak terpasang. Mount direktori FTP tidak dapat dilakukan. Silakan minta administrator sistem untuk memasangnya.", +"External Storage" => "Penyimpanan Eksternal", +"Mount point" => "Lokasi mount", +"Backend" => "Backend", +"Configuration" => "Konfigurasi", +"Options" => "Pilihan", +"Applicable" => "Berlaku", +"Add mount point" => "Tambah lokasi mount", +"None set" => "Tidak satupun di set", +"All Users" => "Semua Pengguna", +"Groups" => "Grup", +"Users" => "Pengguna", +"Delete" => "Hapus", +"Enable User External Storage" => "Aktifkan Penyimpanan Eksternal Pengguna", +"Allow users to mount their own external storage" => "Ijinkan pengguna untuk me-mount penyimpanan eksternal mereka", +"SSL root certificates" => "Sertifikat root SSL", +"Import Root Certificate" => "Impor Sertifikat Root" ); diff --git a/apps/files_trashbin/l10n/de.php b/apps/files_trashbin/l10n/de.php index 1271f5c313..54cd047813 100644 --- a/apps/files_trashbin/l10n/de.php +++ b/apps/files_trashbin/l10n/de.php @@ -1,8 +1,8 @@ "Konnte %s nicht permanent löschen", +"Couldn't delete %s permanently" => "Konnte %s nicht dauerhaft löschen", "Couldn't restore %s" => "Konnte %s nicht wiederherstellen", "perform restore operation" => "Wiederherstellung ausführen", -"delete file permanently" => "Datei permanent löschen", +"delete file permanently" => "Datei dauerhaft löschen", "Name" => "Name", "Deleted" => "gelöscht", "1 folder" => "1 Ordner", diff --git a/apps/files_trashbin/l10n/de_DE.php b/apps/files_trashbin/l10n/de_DE.php index 6d944b3580..cfa5469820 100644 --- a/apps/files_trashbin/l10n/de_DE.php +++ b/apps/files_trashbin/l10n/de_DE.php @@ -1,8 +1,8 @@ "Konnte %s nicht entgültig löschen", +"Couldn't delete %s permanently" => "Konnte %s nicht dauerhaft löschen", "Couldn't restore %s" => "Konnte %s nicht wiederherstellen", "perform restore operation" => "Wiederherstellung ausführen", -"delete file permanently" => "Datei entgültig löschen", +"delete file permanently" => "Datei dauerhaft löschen", "Name" => "Name", "Deleted" => "Gelöscht", "1 folder" => "1 Ordner", diff --git a/apps/files_trashbin/l10n/id.php b/apps/files_trashbin/l10n/id.php index 1a14d8b7c2..9d1ad64159 100644 --- a/apps/files_trashbin/l10n/id.php +++ b/apps/files_trashbin/l10n/id.php @@ -1,3 +1,14 @@ "nama" +"Couldn't delete %s permanently" => "Tidak dapat menghapus permanen %s", +"Couldn't restore %s" => "Tidak dapat memulihkan %s", +"perform restore operation" => "jalankan operasi pemulihan", +"delete file permanently" => "hapus berkas secara permanen", +"Name" => "Nama", +"Deleted" => "Dihapus", +"1 folder" => "1 map", +"{count} folders" => "{count} map", +"1 file" => "1 berkas", +"{count} files" => "{count} berkas", +"Nothing in here. Your trash bin is empty!" => "Tempat sampah anda kosong!", +"Restore" => "Pulihkan" ); diff --git a/apps/files_versions/l10n/id.php b/apps/files_versions/l10n/id.php index 6c553327c4..6e24a05cbb 100644 --- a/apps/files_versions/l10n/id.php +++ b/apps/files_versions/l10n/id.php @@ -1,5 +1,13 @@ "Tidak dapat mengembalikan: %s", +"success" => "sukses", +"File %s was reverted to version %s" => "Berkas %s telah dikembalikan ke versi %s", +"failure" => "gagal", +"File %s could not be reverted to version %s" => "Berkas %s gagal dikembalikan ke versi %s", +"No old versions available" => "Versi lama tidak tersedia", +"No path specified" => "Lokasi tidak ditentukan", "History" => "riwayat", +"Revert a file to a previous version by clicking on its revert button" => "Kembalikan berkas ke versi sebelumnya dengan mengklik tombol kembalikan", "Files Versioning" => "pembuatan versi file", "Enable" => "aktifkan" ); diff --git a/apps/user_ldap/l10n/de.php b/apps/user_ldap/l10n/de.php index 182025e8fb..6217a6d482 100644 --- a/apps/user_ldap/l10n/de.php +++ b/apps/user_ldap/l10n/de.php @@ -12,7 +12,7 @@ "Do you really want to delete the current Server Configuration?" => "Wollen Sie die aktuelle Serverkonfiguration wirklich löschen?", "Confirm Deletion" => "Löschung bestätigen", "Warning: Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "Warnung: Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann demzufolge zu unerwarteten Verhalten kommen. Bitte Deinen Systemadministator eine der beiden Anwendungen zu deaktivieren.", -"Warning: The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "Warnung: Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte deinen Systemadministrator das Modul zu installieren.", +"Warning: The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "Warnung: Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte Deinen Systemadministrator das Modul zu installieren.", "Server configuration" => "Serverkonfiguration", "Add Server Configuration" => "Serverkonfiguration hinzufügen", "Host" => "Host", @@ -38,12 +38,12 @@ "When unchecked, this configuration will be skipped." => "Konfiguration wird übersprungen wenn deaktiviert", "Port" => "Port", "Backup (Replica) Host" => "Backup Host (Kopie)", -"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Gib einen optionalen Backup Host an. Es muss sich um eine kopie des Haupt LDAP/AD Servers handeln.", +"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Gib einen optionalen Backup Host an. Es muss sich um eine Kopie des Haupt LDAP/AD Servers handeln.", "Backup (Replica) Port" => "Backup Port", "Disable Main Server" => "Hauptserver deaktivieren", -"When switched on, ownCloud will only connect to the replica server." => "Wenn aktiviert wird ownCloud ausschließlich den Backupserver verwenden", +"When switched on, ownCloud will only connect to the replica server." => "Wenn aktiviert, wird ownCloud ausschließlich den Backupserver verwenden.", "Use TLS" => "Nutze TLS", -"Do not use it additionally for LDAPS connections, it will fail." => "Benutze es nicht zusätzlich für LDAPS Verbindungen, es wird scheitern.", +"Do not use it additionally for LDAPS connections, it will fail." => "Benutze es nicht zusammen mit LDAPS Verbindungen, es wird fehlschlagen.", "Case insensitve LDAP server (Windows)" => "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)", "Turn off SSL certificate validation." => "Schalte die SSL-Zertifikatsprüfung aus.", "If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Falls die Verbindung es erfordert, muss das SSL-Zertifikat des LDAP-Server importiert werden.", @@ -55,7 +55,7 @@ "Base User Tree" => "Basis-Benutzerbaum", "One User Base DN per line" => "Ein Benutzer Base DN pro Zeile", "User Search Attributes" => "Benutzersucheigenschaften", -"Optional; one attribute per line" => "Optional, eine Eigenschaft pro Zeile", +"Optional; one attribute per line" => "Optional; eine Eigenschaft pro Zeile", "Group Display Name Field" => "Feld für den Anzeigenamen der Gruppe", "The LDAP attribute to use to generate the groups`s ownCloud name." => "Das LDAP-Attribut für die Generierung des Gruppennamens in ownCloud. ", "Base Group Tree" => "Basis-Gruppenbaum", diff --git a/apps/user_ldap/l10n/de_DE.php b/apps/user_ldap/l10n/de_DE.php index 9bee0a219a..c88ed22b4f 100644 --- a/apps/user_ldap/l10n/de_DE.php +++ b/apps/user_ldap/l10n/de_DE.php @@ -43,7 +43,7 @@ "Disable Main Server" => "Hauptserver deaktivieren", "When switched on, ownCloud will only connect to the replica server." => "Wenn eingeschaltet wird sich die ownCloud nur mit dem Replikat-Server verbinden.", "Use TLS" => "Nutze TLS", -"Do not use it additionally for LDAPS connections, it will fail." => "Benutzen Sie es nicht zusätzlich für LDAPS Verbindungen, es wird fehlschlagen.", +"Do not use it additionally for LDAPS connections, it will fail." => "Benutzen Sie es nicht in Verbindung mit LDAPS Verbindungen, es wird fehlschlagen.", "Case insensitve LDAP server (Windows)" => "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)", "Turn off SSL certificate validation." => "Schalten Sie die SSL-Zertifikatsprüfung aus.", "If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Falls die Verbindung es erfordert, muss das SSL-Zertifikat des LDAP-Server importiert werden.", @@ -55,7 +55,7 @@ "Base User Tree" => "Basis-Benutzerbaum", "One User Base DN per line" => "Ein Benutzer Base DN pro Zeile", "User Search Attributes" => "Benutzer-Suche Eigenschaften", -"Optional; one attribute per line" => "Optional; Ein Attribut pro Zeile", +"Optional; one attribute per line" => "Optional; ein Attribut pro Zeile", "Group Display Name Field" => "Feld für den Anzeigenamen der Gruppe", "The LDAP attribute to use to generate the groups`s ownCloud name." => "Das LDAP-Attribut für die Generierung des Gruppennamens in ownCloud. ", "Base Group Tree" => "Basis-Gruppenbaum", diff --git a/apps/user_ldap/l10n/id.php b/apps/user_ldap/l10n/id.php index c07892386d..5912789c85 100644 --- a/apps/user_ldap/l10n/id.php +++ b/apps/user_ldap/l10n/id.php @@ -1,14 +1,69 @@ "Gagal menghapus konfigurasi server", +"The configuration is valid and the connection could be established!" => "Konfigurasi valid dan koneksi dapat dilakukan!", +"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Konfigurasi valid, tetapi Bind gagal. Silakan cek pengaturan server dan keamanan.", +"The configuration is invalid. Please look in the ownCloud log for further details." => "Konfigurasi salah. Silakan lihat log ownCloud untuk lengkapnya.", "Deletion failed" => "penghapusan gagal", +"Take over settings from recent server configuration?" => "Ambil alih pengaturan dari konfigurasi server saat ini?", +"Keep settings?" => "Biarkan pengaturan?", +"Cannot add server configuration" => "Gagal menambah konfigurasi server", +"Connection test succeeded" => "Tes koneksi sukses", +"Connection test failed" => "Tes koneksi gagal", +"Do you really want to delete the current Server Configuration?" => "Anda ingin menghapus Konfigurasi Server saat ini?", +"Confirm Deletion" => "Konfirmasi Penghapusan", +"Warning: Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "Peringatan:/b> Aplikasi user_ldap dan user_webdavauth tidak kompatibel. Anda mungkin akan mengalami kejadian yang tidak diharapkan. Silakan minta administrator sistem untuk menonaktifkan salah satunya.", +"Warning: The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "Peringatan: Modul LDAP PHP tidak terpasang, perangkat tidak akan bekerja. Silakan minta administrator sistem untuk memasangnya.", +"Server configuration" => "Konfigurasi server", +"Add Server Configuration" => "Tambah Konfigurasi Server", "Host" => "host", +"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Protokol dapat tidak ditulis, kecuali anda menggunakan SSL. Lalu jalankan dengan ldaps://", +"Base DN" => "Base DN", +"One Base DN per line" => "Satu Base DN per baris", +"You can specify Base DN for users and groups in the Advanced tab" => "Anda dapat menetapkan Base DN untuk pengguna dan grup dalam tab Lanjutan", +"User DN" => "User DN", +"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN dari klien pengguna yang dengannya tautan akan diterapkan, mis. uid=agen,dc=contoh,dc=com. Untuk akses anonim, biarkan DN dan kata sandi kosong.", "Password" => "kata kunci", +"For anonymous access, leave DN and Password empty." => "Untuk akses anonim, biarkan DN dan Kata sandi kosong.", "User Login Filter" => "gunakan saringan login", +"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Definisikan filter untuk diterapkan, saat login dilakukan. %%uid menggantikan username saat login.", +"use %%uid placeholder, e.g. \"uid=%%uid\"" => "gunakan pengganti %%uid, mis. \"uid=%%uid\"", +"User List Filter" => "Daftar Filter Pengguna", +"Defines the filter to apply, when retrieving users." => "Definisikan filter untuk diterapkan saat menerima pengguna.", +"without any placeholder, e.g. \"objectClass=person\"." => "tanpa pengganti apapun, mis. \"objectClass=seseorang\".", "Group Filter" => "saringan grup", +"Defines the filter to apply, when retrieving groups." => "Definisikan filter untuk diterapkan saat menerima grup.", +"without any placeholder, e.g. \"objectClass=posixGroup\"." => "tanpa pengganti apapaun, mis. \"objectClass=posixGroup\".", +"Connection Settings" => "Pengaturan Koneksi", +"Configuration Active" => "Konfigurasi Aktif", +"When unchecked, this configuration will be skipped." => "Jika tidak dicentang, konfigurasi ini dilewati.", "Port" => "port", +"Backup (Replica) Host" => "Host Cadangan (Replika)", +"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Berikan pilihan host cadangan. Harus merupakan replika dari server LDAP/AD utama.", +"Backup (Replica) Port" => "Port Cadangan (Replika)", +"Disable Main Server" => "Nonaktifkan Server Utama", +"When switched on, ownCloud will only connect to the replica server." => "Saat diaktifkan, ownCloud hanya akan terhubung ke server replika.", "Use TLS" => "gunakan TLS", +"Do not use it additionally for LDAPS connections, it will fail." => "Jangan gunakan utamanya untuk koneksi LDAPS, koneksi akan gagal.", +"Case insensitve LDAP server (Windows)" => "Server LDAP dengan kapitalisasi tidak sensitif (Windows)", "Turn off SSL certificate validation." => "matikan validasi sertivikat SSL", +"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Jika koneksi hanya bekerja dengan opsi ini, impor sertifikat SSL server LDAP dari server ownCloud anda.", "Not recommended, use for testing only." => "tidak disarankan, gunakan hanya untuk pengujian.", "in seconds. A change empties the cache." => "dalam detik. perubahan mengosongkan cache", +"Directory Settings" => "Pengaturan Direktori", +"User Display Name Field" => "Bidang Tampilan Nama Pengguna", +"The LDAP attribute to use to generate the user`s ownCloud name." => "Atribut LDAP yang digunakan untuk menghasilkan nama pengguna ownCloud.", +"Base User Tree" => "Pohon Pengguna Dasar", +"One User Base DN per line" => "Satu Pengguna Base DN per baris", +"User Search Attributes" => "Atribut Pencarian Pengguna", +"Optional; one attribute per line" => "Pilihan; satu atribut per baris", +"Group Display Name Field" => "Bidang Tampilan Nama Grup", +"The LDAP attribute to use to generate the groups`s ownCloud name." => "Atribut LDAP yang digunakan untuk menghasilkan nama grup ownCloud.", +"Base Group Tree" => "Pohon Grup Dasar", +"One Group Base DN per line" => "Satu Grup Base DN per baris", +"Group Search Attributes" => "Atribut Pencarian Grup", +"Group-Member association" => "asosiasi Anggota-Grup", +"Special Attributes" => "Atribut Khusus", "in bytes" => "dalam bytes", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Biarkan nama pengguna kosong (default). Atau tetapkan atribut LDAP/AD.", "Help" => "bantuan" ); diff --git a/apps/user_ldap/l10n/pt_BR.php b/apps/user_ldap/l10n/pt_BR.php index c86263d52a..e3d2da463c 100644 --- a/apps/user_ldap/l10n/pt_BR.php +++ b/apps/user_ldap/l10n/pt_BR.php @@ -4,6 +4,7 @@ "The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "A configuração é válida, mas o Bind falhou. Confira as configurações do servidor e as credenciais.", "The configuration is invalid. Please look in the ownCloud log for further details." => "A configuração é inválida. Leia o \"log\" do ownCloud para mais detalhes.", "Deletion failed" => "Remoção falhou", +"Take over settings from recent server configuration?" => "Tomar parámetros de recente configuração de servidor?", "Keep settings?" => "Manter ajustes?", "Cannot add server configuration" => "Não foi possível adicionar a configuração do servidor", "Connection test succeeded" => "Teste de conexão bem sucedido", diff --git a/core/l10n/de.php b/core/l10n/de.php index f1e892fee4..e60f061ff3 100644 --- a/core/l10n/de.php +++ b/core/l10n/de.php @@ -1,8 +1,8 @@ "Der Nutzer %s hat eine Datei mit dir geteilt", -"User %s shared a folder with you" => "%s hat ein Verzeichnis mit dir geteilt", -"User %s shared the file \"%s\" with you. It is available for download here: %s" => "%s hat die Datei \"%s\" mit dir geteilt. Sie ist hier zum Download verfügbar: %s", -"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s hat den Ordner \"%s\" mit dir geteilt. Er ist hier zum Download verfügbar: %s", +"User %s shared a file with you" => "Der Nutzer %s hat eine Datei mit Dir geteilt", +"User %s shared a folder with you" => "%s hat ein Verzeichnis mit Dir geteilt", +"User %s shared the file \"%s\" with you. It is available for download here: %s" => "%s hat die Datei \"%s\" mit Dir geteilt. Sie ist hier zum Download verfügbar: %s", +"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s hat den Ordner \"%s\" mit Dir geteilt. Er ist hier zum Download verfügbar: %s", "Category type not provided." => "Kategorie nicht angegeben.", "No category to add?" => "Keine Kategorie hinzuzufügen?", "This category already exists: %s" => "Die Kategorie '%s' existiert bereits.", @@ -58,10 +58,10 @@ "Error while sharing" => "Fehler beim Teilen", "Error while unsharing" => "Fehler beim Aufheben der Teilung", "Error while changing permissions" => "Fehler beim Ändern der Rechte", -"Shared with you and the group {group} by {owner}" => "{owner} hat dies mit dir und der Gruppe {group} geteilt", -"Shared with you by {owner}" => "{owner} hat dies mit dir geteilt", +"Shared with you and the group {group} by {owner}" => "{owner} hat dies mit Dir und der Gruppe {group} geteilt", +"Shared with you by {owner}" => "{owner} hat dies mit Dir geteilt", "Share with" => "Teilen mit", -"Share with link" => "Über einen Link teilen", +"Share with link" => "Über einen Link freigegeben", "Password protect" => "Passwortschutz", "Password" => "Passwort", "Email link to person" => "Link per E-Mail verschicken", @@ -72,7 +72,7 @@ "No people found" => "Niemand gefunden", "Resharing is not allowed" => "Weiterverteilen ist nicht erlaubt", "Shared in {item} with {user}" => "Für {user} in {item} freigegeben", -"Unshare" => "Teilung aufheben", +"Unshare" => "Freigabe aufheben", "can edit" => "kann bearbeiten", "access control" => "Zugriffskontrolle", "create" => "erstellen", @@ -109,7 +109,7 @@ "Security Warning" => "Sicherheitswarnung", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Es ist kein sicherer Zufallszahlengenerator verfügbar, bitte aktiviere die PHP-Erweiterung für OpenSSL.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Ohne einen sicheren Zufallszahlengenerator sind Angreifer in der Lage die Tokens für das Zurücksetzen der Passwörter vorherzusehen und Konten zu übernehmen.", -"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Dein Daten-Verzeichnis und deine Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Dein Datenverzeichnis und deine Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.", "For information how to properly configure your server, please see the documentation." => "Bitte lesen Sie die Dokumentation für Informationen, wie Sie Ihren Server konfigurieren.", "Create an admin account" => "Administrator-Konto anlegen", "Advanced" => "Fortgeschritten", diff --git a/core/l10n/de_DE.php b/core/l10n/de_DE.php index 3430525894..9a975ddcb8 100644 --- a/core/l10n/de_DE.php +++ b/core/l10n/de_DE.php @@ -72,7 +72,7 @@ "No people found" => "Niemand gefunden", "Resharing is not allowed" => "Das Weiterverteilen ist nicht erlaubt", "Shared in {item} with {user}" => "Freigegeben in {item} von {user}", -"Unshare" => "Teilung aufheben", +"Unshare" => "Freigabe aufheben", "can edit" => "kann bearbeiten", "access control" => "Zugriffskontrolle", "create" => "erstellen", @@ -84,7 +84,7 @@ "Error setting expiration date" => "Fehler beim Setzen des Ablaufdatums", "Sending ..." => "Sende ...", "Email sent" => "Email gesendet", -"The update was unsuccessful. Please report this issue to the ownCloud community." => "Das Update ist fehlgeschlagen. Bitte melden Sie dieses Problem an die ownCloud Gemeinschaft.", +"The update was unsuccessful. Please report this issue to the ownCloud community." => "Das Update ist fehlgeschlagen. Bitte melden Sie dieses Problem an die ownCloud Community.", "The update was successful. Redirecting you to ownCloud now." => "Das Update war erfolgreich. Sie werden nun zu ownCloud weitergeleitet.", "ownCloud password reset" => "ownCloud-Passwort zurücksetzen", "Use the following link to reset your password: {link}" => "Nutzen Sie den nachfolgenden Link, um Ihr Passwort zurückzusetzen: {link}", @@ -109,7 +109,7 @@ "Security Warning" => "Sicherheitshinweis", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Es ist kein sicherer Zufallszahlengenerator verfügbar, bitte aktivieren Sie die PHP-Erweiterung für OpenSSL.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Ohne einen sicheren Zufallszahlengenerator sind Angreifer in der Lage, die Tokens für das Zurücksetzen der Passwörter vorherzusehen und Ihr Konto zu übernehmen.", -"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Dein Daten-Verzeichnis und deine Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.", "For information how to properly configure your server, please see the documentation." => "Bitte lesen Sie die Dokumentation für Informationen, wie Sie Ihren Server konfigurieren.", "Create an admin account" => "Administrator-Konto anlegen", "Advanced" => "Fortgeschritten", diff --git a/core/l10n/my_MM.php b/core/l10n/my_MM.php new file mode 100644 index 0000000000..8d5485a4a5 --- /dev/null +++ b/core/l10n/my_MM.php @@ -0,0 +1,3 @@ + "Apps" +); diff --git a/l10n/af_ZA/files_trashbin.po b/l10n/af_ZA/files_trashbin.po index 6fd4dfb314..a79bcc3940 100644 --- a/l10n/af_ZA/files_trashbin.po +++ b/l10n/af_ZA/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: af_ZA\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/ar/files_trashbin.po b/l10n/ar/files_trashbin.po index 174bde4c7f..74a6b21eb8 100644 --- a/l10n/ar/files_trashbin.po +++ b/l10n/ar/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "اسم" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/be/files_trashbin.po b/l10n/be/files_trashbin.po index c9d67b5a27..83bee5fbbd 100644 --- a/l10n/be/files_trashbin.po +++ b/l10n/be/files_trashbin.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" -"PO-Revision-Date: 2013-01-31 16:03+0000\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,7 +17,7 @@ msgstr "" "Language: be\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/bg_BG/files_trashbin.po b/l10n/bg_BG/files_trashbin.po index f46acd62e5..7ec18e9da4 100644 --- a/l10n/bg_BG/files_trashbin.po +++ b/l10n/bg_BG/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" -"PO-Revision-Date: 2013-02-14 17:50+0000\n" -"Last-Translator: Stefan Ilivanov \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: bg_BG\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Невъзможно изтриване на %s завинаги" @@ -28,35 +28,39 @@ msgstr "Невъзможно изтриване на %s завинаги" msgid "Couldn't restore %s" msgstr "Невъзможно възтановяване на %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "извършване на действие по възтановяване" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "изтриване на файла завинаги" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Име" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Изтрито" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 папка" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} папки" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 файл" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} файла" @@ -67,3 +71,7 @@ msgstr "Няма нищо. Кофата е празна!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Възтановяване" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/bn_BD/files_trashbin.po b/l10n/bn_BD/files_trashbin.po index b2577e03d2..643bed38fc 100644 --- a/l10n/bn_BD/files_trashbin.po +++ b/l10n/bn_BD/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: bn_BD\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "রাম" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "১টি ফোল্ডার" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} টি ফোল্ডার" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "১টি ফাইল" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} টি ফাইল" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/ca/files_trashbin.po b/l10n/ca/files_trashbin.po index 7f76de9cd6..7484f8e570 100644 --- a/l10n/ca/files_trashbin.po +++ b/l10n/ca/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 09:50+0000\n" -"Last-Translator: rogerc \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "No s'ha pogut esborrar permanentment %s" @@ -28,35 +28,39 @@ msgstr "No s'ha pogut esborrar permanentment %s" msgid "Couldn't restore %s" msgstr "No s'ha pogut restaurar %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "executa l'operació de restauració" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "esborra el fitxer permanentment" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nom" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Eliminat" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 carpeta" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} carpetes" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 fitxer" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} fitxers" @@ -67,3 +71,7 @@ msgstr "La paperera està buida!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Recupera" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/cs_CZ/files_trashbin.po b/l10n/cs_CZ/files_trashbin.po index 2052a13993..4241a18db3 100644 --- a/l10n/cs_CZ/files_trashbin.po +++ b/l10n/cs_CZ/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: Tomáš Chvátal \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: cs_CZ\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Nelze trvale odstranit %s" @@ -28,35 +28,39 @@ msgstr "Nelze trvale odstranit %s" msgid "Couldn't restore %s" msgstr "Nelze obnovit %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "provést obnovu" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "trvale odstranit soubor" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Název" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Smazáno" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 složka" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} složky" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 soubor" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} soubory" @@ -67,3 +71,7 @@ msgstr "Žádný obsah. Váš koš je prázdný." #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Obnovit" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/da/files_trashbin.po b/l10n/da/files_trashbin.po index 4e37f67f5b..6ebb48d541 100644 --- a/l10n/da/files_trashbin.po +++ b/l10n/da/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: Frederik Lassen \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Kunne ikke slette %s permanent" @@ -28,35 +28,39 @@ msgstr "Kunne ikke slette %s permanent" msgid "Couldn't restore %s" msgstr "Kunne ikke gendanne %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "udfør gendannelsesoperation" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "slet fil permanent" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Navn" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Slettet" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 mappe" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} mapper" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 fil" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} filer" @@ -67,3 +71,7 @@ msgstr "Intet at se her. Din papirkurv er tom!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Gendan" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/de/core.po b/l10n/de/core.po index bb7deec1e6..f59767d9eb 100644 --- a/l10n/de/core.po +++ b/l10n/de/core.po @@ -19,12 +19,13 @@ # Susi <>, 2012. # , 2012. # , 2012. +# Tristan , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" -"PO-Revision-Date: 2013-02-17 14:10+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 22:30+0000\n" "Last-Translator: Marcel Kühlhorn \n" "Language-Team: German \n" "MIME-Version: 1.0\n" @@ -36,26 +37,26 @@ msgstr "" #: ajax/share.php:85 #, php-format msgid "User %s shared a file with you" -msgstr "Der Nutzer %s hat eine Datei mit dir geteilt" +msgstr "Der Nutzer %s hat eine Datei mit Dir geteilt" #: ajax/share.php:87 #, php-format msgid "User %s shared a folder with you" -msgstr "%s hat ein Verzeichnis mit dir geteilt" +msgstr "%s hat ein Verzeichnis mit Dir geteilt" #: ajax/share.php:89 #, php-format msgid "" "User %s shared the file \"%s\" with you. It is available for download here: " "%s" -msgstr "%s hat die Datei \"%s\" mit dir geteilt. Sie ist hier zum Download verfügbar: %s" +msgstr "%s hat die Datei \"%s\" mit Dir geteilt. Sie ist hier zum Download verfügbar: %s" #: ajax/share.php:91 #, php-format msgid "" "User %s shared the folder \"%s\" with you. It is available for download " "here: %s" -msgstr "%s hat den Ordner \"%s\" mit dir geteilt. Er ist hier zum Download verfügbar: %s" +msgstr "%s hat den Ordner \"%s\" mit Dir geteilt. Er ist hier zum Download verfügbar: %s" #: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25 msgid "Category type not provided." @@ -289,11 +290,11 @@ msgstr "Fehler beim Ändern der Rechte" #: js/share.js:168 msgid "Shared with you and the group {group} by {owner}" -msgstr "{owner} hat dies mit dir und der Gruppe {group} geteilt" +msgstr "{owner} hat dies mit Dir und der Gruppe {group} geteilt" #: js/share.js:170 msgid "Shared with you by {owner}" -msgstr "{owner} hat dies mit dir geteilt" +msgstr "{owner} hat dies mit Dir geteilt" #: js/share.js:175 msgid "Share with" @@ -301,7 +302,7 @@ msgstr "Teilen mit" #: js/share.js:180 msgid "Share with link" -msgstr "Über einen Link teilen" +msgstr "Über einen Link freigegeben" #: js/share.js:183 msgid "Password protect" @@ -345,7 +346,7 @@ msgstr "Für {user} in {item} freigegeben" #: js/share.js:313 msgid "Unshare" -msgstr "Teilung aufheben" +msgstr "Freigabe aufheben" #: js/share.js:325 msgid "can edit" @@ -402,7 +403,7 @@ msgstr "Das Update ist fehlgeschlagen. Bitte melden Sie dieses Problem an die \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 21:41+0000\n" +"Last-Translator: Mirodin \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -111,8 +111,8 @@ msgstr "Löschen" msgid "Rename" msgstr "Umbenennen" -#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 -#: js/files.js:438 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:292 js/files.js:408 +#: js/files.js:439 msgid "Pending" msgstr "Ausstehend" @@ -170,74 +170,74 @@ msgstr "Ihr Speicherplatz ist voll, Dateien können nicht mehr aktualisiert oder msgid "Your storage is almost full ({usedSpacePercent}%)" msgstr "Ihr Speicherplatz ist fast aufgebraucht ({usedSpacePercent}%)" -#: js/files.js:224 +#: js/files.js:225 msgid "" "Your download is being prepared. This might take some time if the files are " "big." msgstr "Dein Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern." -#: js/files.js:261 +#: js/files.js:262 msgid "Unable to upload your file as it is a directory or has 0 bytes" msgstr "Deine Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist." -#: js/files.js:261 +#: js/files.js:262 msgid "Upload Error" msgstr "Fehler beim Upload" -#: js/files.js:272 +#: js/files.js:273 msgid "Close" msgstr "Schließen" -#: js/files.js:311 +#: js/files.js:312 msgid "1 file uploading" msgstr "Eine Datei wird hoch geladen" -#: js/files.js:314 js/files.js:369 js/files.js:384 +#: js/files.js:315 js/files.js:370 js/files.js:385 msgid "{count} files uploading" msgstr "{count} Dateien werden hochgeladen" -#: js/files.js:387 js/files.js:422 +#: js/files.js:388 js/files.js:423 msgid "Upload cancelled." msgstr "Upload abgebrochen." -#: js/files.js:496 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen." -#: js/files.js:569 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "Die URL darf nicht leer sein." -#: js/files.js:574 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten." -#: js/files.js:948 templates/index.php:67 +#: js/files.js:949 templates/index.php:67 msgid "Name" msgstr "Name" -#: js/files.js:949 templates/index.php:78 +#: js/files.js:950 templates/index.php:78 msgid "Size" msgstr "Größe" -#: js/files.js:950 templates/index.php:80 +#: js/files.js:951 templates/index.php:80 msgid "Modified" msgstr "Bearbeitet" -#: js/files.js:969 +#: js/files.js:970 msgid "1 folder" msgstr "1 Ordner" -#: js/files.js:971 +#: js/files.js:972 msgid "{count} folders" msgstr "{count} Ordner" -#: js/files.js:979 +#: js/files.js:980 msgid "1 file" msgstr "1 Datei" -#: js/files.js:981 +#: js/files.js:982 msgid "{count} files" msgstr "{count} Dateien" diff --git a/l10n/de/files_trashbin.po b/l10n/de/files_trashbin.po index 1aa1fd8154..eb4abe1788 100644 --- a/l10n/de/files_trashbin.po +++ b/l10n/de/files_trashbin.po @@ -5,14 +5,15 @@ # Translators: # I Robot , 2013. # Marcel Kühlhorn , 2013. +# Tristan , 2013. # , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" -"PO-Revision-Date: 2013-02-17 14:23+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,45 +21,49 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" -msgstr "Konnte %s nicht permanent löschen" +msgstr "Konnte %s nicht dauerhaft löschen" #: ajax/undelete.php:41 #, php-format msgid "Couldn't restore %s" msgstr "Konnte %s nicht wiederherstellen" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "Wiederherstellung ausführen" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" -msgstr "Datei permanent löschen" +msgstr "Datei dauerhaft löschen" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Name" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "gelöscht" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 Ordner" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} Ordner" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 Datei" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} Dateien" @@ -69,3 +74,7 @@ msgstr "Nichts zu löschen, der Papierkorb ist leer!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Wiederherstellen" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/de/lib.po b/l10n/de/lib.po index ba89f5ea5f..65f4c41119 100644 --- a/l10n/de/lib.po +++ b/l10n/de/lib.po @@ -10,13 +10,14 @@ # Phi Lieb <>, 2012. # , 2012. # , 2012. +# Tristan , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" -"PO-Revision-Date: 2013-02-17 14:10+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 22:10+0000\n" +"Last-Translator: Mirodin \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -66,7 +67,7 @@ msgstr "Die gewählten Dateien sind zu groß, um eine ZIP-Datei zu erstellen." #: helper.php:228 msgid "couldn't be determined" -msgstr "Konnte nicht festgestellt werden" +msgstr "konnte nicht festgestellt werden" #: json.php:28 msgid "Application is not enabled" @@ -102,7 +103,7 @@ msgstr "Setze Administrator Passwort" #: setup.php:40 msgid "Specify a data folder." -msgstr "Datei-Verzeichnis angeben" +msgstr "Datei-Verzeichnis angeben." #: setup.php:53 #, php-format @@ -171,7 +172,7 @@ msgstr "MySQL Benutzer '%s'@'%%' existiert bereits" #: setup.php:280 msgid "Drop this user from MySQL." -msgstr "Lösche diesen Benutzer von MySQL." +msgstr "Lösche diesen Benutzer aus MySQL." #: setup.php:553 setup.php:585 #, php-format diff --git a/l10n/de/settings.po b/l10n/de/settings.po index 736ddb0719..9d27684620 100644 --- a/l10n/de/settings.po +++ b/l10n/de/settings.po @@ -26,9 +26,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" -"PO-Revision-Date: 2013-02-17 14:31+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 21:50+0000\n" +"Last-Translator: Mirodin \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -195,7 +195,7 @@ msgid "" "strongly suggest that you configure your webserver in a way that the data " "directory is no longer accessible or you move the data directory outside the" " webserver document root." -msgstr "Dein Datenverzeichnis und deine Datein sind vielleicht vom Internet aus erreichbar. Die .htaccess Datei, die ownCloud verwendet, arbeitet nicht richtig. Wir schlagen Dir dringend vor, dass du deinen Webserver so konfigurierst, dass das Datenverzeichnis nicht länger erreichbar ist oder, dass du dein Datenverzeichnis aus dem Dokumenten-root des Webservers bewegst." +msgstr "Dein Datenverzeichnis und Deine Datein sind vielleicht vom Internet aus erreichbar. Die .htaccess Datei, die ownCloud verwendet, arbeitet nicht richtig. Wir schlagen Dir dringend vor, dass Du Deinen Webserver so konfigurierst, dass das Datenverzeichnis nicht länger erreichbar ist oder, dass Du Dein Datenverzeichnis aus dem Dokumenten-root des Webservers bewegst." #: templates/admin.php:29 msgid "Setup Warning" @@ -246,7 +246,7 @@ msgid "" "remote and sending of notification emails might also not work. We suggest to" " enable internet connection for this server if you want to have all features" " of ownCloud." -msgstr "Dieser ownCloud Server hat keine funktionierende Netzwerkverbindung. Dies bedeutet das einige Funktionen wie das einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Netzwerkverbindung für diesen Server zu aktivieren wenn Sie alle Funktionen von ownCloud nutzen wollen." +msgstr "Dieser ownCloud Server hat keine funktionierende Netzwerkverbindung. Dies bedeutet das einige Funktionen wie das Einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Netzwerkverbindung für diesen Server zu aktivieren wenn Du alle Funktionen von ownCloud nutzen möchtest." #: templates/admin.php:89 msgid "Cron" @@ -278,7 +278,7 @@ msgstr "Aktiviere Sharing-API" #: templates/admin.php:132 msgid "Allow apps to use the Share API" -msgstr "Erlaube Apps die Nutzung der Sharing-API" +msgstr "Erlaube Apps die Nutzung der Share-API" #: templates/admin.php:139 msgid "Allow links" @@ -329,7 +329,7 @@ msgstr "Log" #: templates/admin.php:193 msgid "Log level" -msgstr "Logtiefe" +msgstr "Loglevel" #: templates/admin.php:220 msgid "More" @@ -404,7 +404,7 @@ msgstr "Du verwendest %s der verfügbaren %s" #: templates/personal.php:14 msgid "Get the apps to sync your files" -msgstr "Laden Sie die Apps zur Synchronisierung ihrer Daten herunter" +msgstr "Lade die Apps zur Synchronisierung Deiner Daten herunter" #: templates/personal.php:25 msgid "Show First Run Wizard again" diff --git a/l10n/de/user_ldap.po b/l10n/de/user_ldap.po index 431c6be2ae..5bab82f9cb 100644 --- a/l10n/de/user_ldap.po +++ b/l10n/de/user_ldap.po @@ -12,13 +12,14 @@ # Phi Lieb <>, 2012. # Susi <>, 2012. # , 2012. +# Tristan , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" -"PO-Revision-Date: 2013-02-17 14:20+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 22:10+0000\n" +"Last-Translator: Mirodin \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -89,7 +90,7 @@ msgstr "Warnung: Die Anwendungen user_ldap und user_webdavauth sind inkom msgid "" "Warning: The PHP LDAP module is not installed, the backend will not " "work. Please ask your system administrator to install it." -msgstr "Warnung: Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte deinen Systemadministrator das Modul zu installieren." +msgstr "Warnung: Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte Deinen Systemadministrator das Modul zu installieren." #: templates/settings.php:15 msgid "Server configuration" @@ -203,7 +204,7 @@ msgstr "Backup Host (Kopie)" msgid "" "Give an optional backup host. It must be a replica of the main LDAP/AD " "server." -msgstr "Gib einen optionalen Backup Host an. Es muss sich um eine kopie des Haupt LDAP/AD Servers handeln." +msgstr "Gib einen optionalen Backup Host an. Es muss sich um eine Kopie des Haupt LDAP/AD Servers handeln." #: templates/settings.php:60 msgid "Backup (Replica) Port" @@ -215,7 +216,7 @@ msgstr "Hauptserver deaktivieren" #: templates/settings.php:61 msgid "When switched on, ownCloud will only connect to the replica server." -msgstr "Wenn aktiviert wird ownCloud ausschließlich den Backupserver verwenden" +msgstr "Wenn aktiviert, wird ownCloud ausschließlich den Backupserver verwenden." #: templates/settings.php:62 msgid "Use TLS" @@ -223,7 +224,7 @@ msgstr "Nutze TLS" #: templates/settings.php:62 msgid "Do not use it additionally for LDAPS connections, it will fail." -msgstr "Benutze es nicht zusätzlich für LDAPS Verbindungen, es wird scheitern." +msgstr "Benutze es nicht zusammen mit LDAPS Verbindungen, es wird fehlschlagen." #: templates/settings.php:63 msgid "Case insensitve LDAP server (Windows)" @@ -273,7 +274,7 @@ msgstr "Benutzersucheigenschaften" #: templates/settings.php:71 templates/settings.php:74 msgid "Optional; one attribute per line" -msgstr "Optional, eine Eigenschaft pro Zeile" +msgstr "Optional; eine Eigenschaft pro Zeile" #: templates/settings.php:72 msgid "Group Display Name Field" diff --git a/l10n/de/user_webdavauth.po b/l10n/de/user_webdavauth.po index 139f573438..d2653f1685 100644 --- a/l10n/de/user_webdavauth.po +++ b/l10n/de/user_webdavauth.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" -"PO-Revision-Date: 2013-02-17 13:50+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 22:10+0000\n" +"Last-Translator: Mirodin \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/l10n/de_DE/core.po b/l10n/de_DE/core.po index b471458f11..37875797f9 100644 --- a/l10n/de_DE/core.po +++ b/l10n/de_DE/core.po @@ -22,12 +22,13 @@ # Susi <>, 2013. # , 2012. # , 2012. +# Tristan , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-17 00:25+0100\n" -"PO-Revision-Date: 2013-02-16 23:00+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 22:30+0000\n" "Last-Translator: Marcel Kühlhorn \n" "Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" @@ -348,7 +349,7 @@ msgstr "Freigegeben in {item} von {user}" #: js/share.js:313 msgid "Unshare" -msgstr "Teilung aufheben" +msgstr "Freigabe aufheben" #: js/share.js:325 msgid "can edit" @@ -399,13 +400,13 @@ msgid "" "The update was unsuccessful. Please report this issue to the ownCloud " "community." -msgstr "Das Update ist fehlgeschlagen. Bitte melden Sie dieses Problem an die ownCloud Gemeinschaft." +msgstr "Das Update ist fehlgeschlagen. Bitte melden Sie dieses Problem an die ownCloud Community." #: js/update.js:18 msgid "The update was successful. Redirecting you to ownCloud now." msgstr "Das Update war erfolgreich. Sie werden nun zu ownCloud weitergeleitet." -#: lostpassword/controller.php:47 +#: lostpassword/controller.php:48 msgid "ownCloud password reset" msgstr "ownCloud-Passwort zurücksetzen" @@ -506,7 +507,7 @@ msgstr "Ohne einen sicheren Zufallszahlengenerator sind Angreifer in der Lage, d msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "Dein Daten-Verzeichnis und deine Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert." +msgstr "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert." #: templates/installation.php:32 msgid "" diff --git a/l10n/de_DE/files.po b/l10n/de_DE/files.po index 192ed3dbb8..f6a58a85f8 100644 --- a/l10n/de_DE/files.po +++ b/l10n/de_DE/files.po @@ -28,13 +28,14 @@ # , 2012. # Thomas Müller <>, 2012. # , 2012. +# Tristan , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-17 00:24+0100\n" -"PO-Revision-Date: 2013-02-16 16:30+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 22:30+0000\n" +"Last-Translator: Mirodin \n" "Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -115,8 +116,8 @@ msgstr "Löschen" msgid "Rename" msgstr "Umbenennen" -#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 -#: js/files.js:438 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:292 js/files.js:408 +#: js/files.js:439 msgid "Pending" msgstr "Ausstehend" @@ -150,7 +151,7 @@ msgstr "{old_name} wurde ersetzt durch {new_name}" #: js/filelist.js:322 msgid "perform delete operation" -msgstr "Führe das Löschen aus" +msgstr "führe das Löschen aus" #: js/files.js:52 msgid "'.' is an invalid file name." @@ -174,74 +175,74 @@ msgstr "Ihr Speicher ist voll. Daher können keine Dateien mehr aktualisiert ode msgid "Your storage is almost full ({usedSpacePercent}%)" msgstr "Ihr Speicher ist fast voll ({usedSpacePercent}%)" -#: js/files.js:224 +#: js/files.js:225 msgid "" "Your download is being prepared. This might take some time if the files are " "big." msgstr "Ihr Download wird vorbereitet. Dies kann bei größeren Dateien einen Moment dauern." -#: js/files.js:261 +#: js/files.js:262 msgid "Unable to upload your file as it is a directory or has 0 bytes" msgstr "Ihre Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist." -#: js/files.js:261 +#: js/files.js:262 msgid "Upload Error" msgstr "Fehler beim Upload" -#: js/files.js:272 +#: js/files.js:273 msgid "Close" msgstr "Schließen" -#: js/files.js:311 +#: js/files.js:312 msgid "1 file uploading" msgstr "1 Datei wird hochgeladen" -#: js/files.js:314 js/files.js:369 js/files.js:384 +#: js/files.js:315 js/files.js:370 js/files.js:385 msgid "{count} files uploading" msgstr "{count} Dateien wurden hochgeladen" -#: js/files.js:387 js/files.js:422 +#: js/files.js:388 js/files.js:423 msgid "Upload cancelled." msgstr "Upload abgebrochen." -#: js/files.js:496 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Der Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen." -#: js/files.js:569 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "Die URL darf nicht leer sein." -#: js/files.js:574 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten" -#: js/files.js:948 templates/index.php:67 +#: js/files.js:949 templates/index.php:67 msgid "Name" msgstr "Name" -#: js/files.js:949 templates/index.php:78 +#: js/files.js:950 templates/index.php:78 msgid "Size" msgstr "Größe" -#: js/files.js:950 templates/index.php:80 +#: js/files.js:951 templates/index.php:80 msgid "Modified" msgstr "Bearbeitet" -#: js/files.js:969 +#: js/files.js:970 msgid "1 folder" msgstr "1 Ordner" -#: js/files.js:971 +#: js/files.js:972 msgid "{count} folders" msgstr "{count} Ordner" -#: js/files.js:979 +#: js/files.js:980 msgid "1 file" msgstr "1 Datei" -#: js/files.js:981 +#: js/files.js:982 msgid "{count} files" msgstr "{count} Dateien" @@ -337,4 +338,4 @@ msgstr "Scanne" #: templates/upgrade.php:2 msgid "Upgrading filesystem cache..." -msgstr "Aktualisiere den Dateisystem-Cache" +msgstr "Aktualisiere den Dateisystem-Cache..." diff --git a/l10n/de_DE/files_trashbin.po b/l10n/de_DE/files_trashbin.po index 0a68526442..1b66b827f1 100644 --- a/l10n/de_DE/files_trashbin.po +++ b/l10n/de_DE/files_trashbin.po @@ -8,13 +8,14 @@ # Phillip Schichtel , 2013. # , 2013. # Susi <>, 2013. +# Tristan , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-17 00:24+0100\n" -"PO-Revision-Date: 2013-02-16 13:51+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,45 +23,49 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" -msgstr "Konnte %s nicht entgültig löschen" +msgstr "Konnte %s nicht dauerhaft löschen" #: ajax/undelete.php:41 #, php-format msgid "Couldn't restore %s" msgstr "Konnte %s nicht wiederherstellen" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "Wiederherstellung ausführen" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" -msgstr "Datei entgültig löschen" +msgstr "Datei dauerhaft löschen" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Name" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Gelöscht" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 Ordner" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} Ordner" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 Datei" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} Dateien" @@ -71,3 +76,7 @@ msgstr "Nichts zu löschen, Ihr Papierkorb ist leer!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Wiederherstellen" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/de_DE/files_versions.po b/l10n/de_DE/files_versions.po index a9ddf034b6..e28090ad62 100644 --- a/l10n/de_DE/files_versions.po +++ b/l10n/de_DE/files_versions.po @@ -16,9 +16,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-17 00:24+0100\n" -"PO-Revision-Date: 2013-02-16 23:10+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 22:16+0000\n" +"Last-Translator: Mirodin \n" "Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/l10n/de_DE/lib.po b/l10n/de_DE/lib.po index 1d9413b7ea..1cbf04792d 100644 --- a/l10n/de_DE/lib.po +++ b/l10n/de_DE/lib.po @@ -13,13 +13,14 @@ # , 2013. # , 2012. # , 2012. +# Tristan , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" -"PO-Revision-Date: 2013-02-16 23:30+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 22:20+0000\n" +"Last-Translator: Mirodin \n" "Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -165,7 +166,7 @@ msgstr "MySQL Benutzer '%s'@'localhost' existiert bereits." #: setup.php:274 msgid "Drop this user from MySQL" -msgstr "Lösche diesen Benutzer von MySQL" +msgstr "Lösche diesen Benutzer aus MySQL" #: setup.php:279 #, php-format @@ -174,7 +175,7 @@ msgstr "MySQL Benutzer '%s'@'%%' existiert bereits" #: setup.php:280 msgid "Drop this user from MySQL." -msgstr "Lösche diesen Benutzer von MySQL." +msgstr "Lösche diesen Benutzer aus MySQL." #: setup.php:553 setup.php:585 #, php-format diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po index ad5f7571a5..66515e2199 100644 --- a/l10n/de_DE/settings.po +++ b/l10n/de_DE/settings.po @@ -30,9 +30,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" -"PO-Revision-Date: 2013-02-18 14:18+0000\n" -"Last-Translator: robN \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 22:30+0000\n" +"Last-Translator: Mirodin \n" "Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -236,7 +236,7 @@ msgid "" "\"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with" " certain characters in file names. We strongly suggest to install the " "required packages on your system to support en_US.UTF-8/en_US.UTF8." -msgstr "Dieser ownCloud Server kann die Ländereinstellung nicht auf \"de_DE.UTF-8\"/\"de_DE.UTF8\" ändern. Dies bedeutet dass es Probleme mit bestimmten Zeichen in Dateinamen geben könnte. Wir empfehlen die für de_DE.UTF-8/de_DE.UTF8 benötigten Pakete auf ihrem System zu installieren." +msgstr "Dieser ownCloud Server kann die Ländereinstellung nicht auf \"de_DE.UTF-8\"/\"de_DE.UTF8\" ändern. Dies bedeutet dass es Probleme mit bestimmten Zeichen im Dateinamen geben könnte. Wir empfehlen die für de_DE.UTF-8/de_DE.UTF8 benötigten Pakete auf Ihrem System zu installieren." #: templates/admin.php:72 msgid "Internet connection not working" @@ -250,7 +250,7 @@ msgid "" "remote and sending of notification emails might also not work. We suggest to" " enable internet connection for this server if you want to have all features" " of ownCloud." -msgstr "Dieser ownCloud Server hat keine funktionierende Internetverbindung. Dies bedeutet das einige Funktionen wie das einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Internetverbindung für diesen Server zu aktivieren wenn Sie alle Funktionen von ownCloud nutzen wollen." +msgstr "Dieser ownCloud Server hat keine funktionierende Internetverbindung. Dies bedeutet das einige Funktionen wie das Einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Internetverbindung für diesen Server zu aktivieren wenn Sie alle Funktionen von ownCloud nutzen wollen." #: templates/admin.php:89 msgid "Cron" @@ -278,11 +278,11 @@ msgstr "Teilen" #: templates/admin.php:131 msgid "Enable Share API" -msgstr "Teilen-API aktivieren" +msgstr "Share-API aktivieren" #: templates/admin.php:132 msgid "Allow apps to use the Share API" -msgstr "Erlaube es Anwendungen, die Teilen-API zu benutzen" +msgstr "Erlaube es Anwendungen, die Share-API zu benutzen" #: templates/admin.php:139 msgid "Allow links" diff --git a/l10n/de_DE/user_ldap.po b/l10n/de_DE/user_ldap.po index 90f63eae9c..ad21db5c68 100644 --- a/l10n/de_DE/user_ldap.po +++ b/l10n/de_DE/user_ldap.po @@ -15,13 +15,14 @@ # Susi <>, 2013. # , 2012. # , 2012. +# Tristan , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" -"PO-Revision-Date: 2013-02-18 14:19+0000\n" -"Last-Translator: robN \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 22:20+0000\n" +"Last-Translator: Mirodin \n" "Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -226,7 +227,7 @@ msgstr "Nutze TLS" #: templates/settings.php:62 msgid "Do not use it additionally for LDAPS connections, it will fail." -msgstr "Benutzen Sie es nicht zusätzlich für LDAPS Verbindungen, es wird fehlschlagen." +msgstr "Benutzen Sie es nicht in Verbindung mit LDAPS Verbindungen, es wird fehlschlagen." #: templates/settings.php:63 msgid "Case insensitve LDAP server (Windows)" @@ -276,7 +277,7 @@ msgstr "Benutzer-Suche Eigenschaften" #: templates/settings.php:71 templates/settings.php:74 msgid "Optional; one attribute per line" -msgstr "Optional; Ein Attribut pro Zeile" +msgstr "Optional; ein Attribut pro Zeile" #: templates/settings.php:72 msgid "Group Display Name Field" diff --git a/l10n/de_DE/user_webdavauth.po b/l10n/de_DE/user_webdavauth.po index 3592cedb14..d9d63ec77e 100644 --- a/l10n/de_DE/user_webdavauth.po +++ b/l10n/de_DE/user_webdavauth.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-17 00:24+0100\n" -"PO-Revision-Date: 2013-02-16 14:00+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 22:13+0000\n" +"Last-Translator: Mirodin \n" "Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/l10n/el/files_trashbin.po b/l10n/el/files_trashbin.po index e8ac463bd2..0a7899ec9e 100644 --- a/l10n/el/files_trashbin.po +++ b/l10n/el/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: Dimitris M. \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Αδύνατη η μόνιμη διαγραφή του %s" @@ -28,35 +28,39 @@ msgstr "Αδύνατη η μόνιμη διαγραφή του %s" msgid "Couldn't restore %s" msgstr "Αδυναμία επαναφοράς %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "εκτέλεση λειτουργία επαναφοράς" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "μόνιμη διαγραφή αρχείου" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Όνομα" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Διαγράφηκε" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 φάκελος" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} φάκελοι" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 αρχείο" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} αρχεία" @@ -67,3 +71,7 @@ msgstr "Δεν υπάρχει τίποτα εδώ. Ο κάδος σας είνα #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Επαναφορά" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/eo/files_trashbin.po b/l10n/eo/files_trashbin.po index ba5bf42fbc..199528ce61 100644 --- a/l10n/eo/files_trashbin.po +++ b/l10n/eo/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: eo\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nomo" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 dosierujo" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} dosierujoj" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 dosiero" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} dosierujoj" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Restaŭri" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/es/files_trashbin.po b/l10n/es/files_trashbin.po index a2db3d575e..3b4d185f45 100644 --- a/l10n/es/files_trashbin.po +++ b/l10n/es/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: msvladimir \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "No se puede eliminar %s permanentemente" @@ -28,35 +28,39 @@ msgstr "No se puede eliminar %s permanentemente" msgid "Couldn't restore %s" msgstr "No se puede restaurar %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "Restaurar" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "Eliminar archivo permanentemente" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nombre" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Eliminado" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 carpeta" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} carpetas" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 archivo" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} archivos" @@ -67,3 +71,7 @@ msgstr "Nada aqui. La papelera esta vacia!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Recuperar" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/es/settings.po b/l10n/es/settings.po index 468cd0acfc..a469e600fc 100644 --- a/l10n/es/settings.po +++ b/l10n/es/settings.po @@ -9,6 +9,7 @@ # , 2011-2012. # , 2011. # oSiNaReF <>, 2012. +# , 2013. # , 2012. # Raul Fernandez Garcia , 2012. # , 2012. @@ -20,9 +21,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 19:31+0000\n" +"Last-Translator: pedro.navia \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -158,23 +159,23 @@ msgstr "Grupo admin" msgid "Delete" msgstr "Eliminar" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" msgstr "" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" msgstr "" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" msgstr "" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" msgstr "" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "Castellano" @@ -264,7 +265,7 @@ msgstr "" #: templates/admin.php:125 msgid "Sharing" -msgstr "" +msgstr "Compartiendo" #: templates/admin.php:131 msgid "Enable Share API" diff --git a/l10n/es_AR/files_trashbin.po b/l10n/es_AR/files_trashbin.po index 138bd484b7..2f47326a19 100644 --- a/l10n/es_AR/files_trashbin.po +++ b/l10n/es_AR/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: cjtess \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: es_AR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "No fue posible borrar %s de manera permanente" @@ -28,35 +28,39 @@ msgstr "No fue posible borrar %s de manera permanente" msgid "Couldn't restore %s" msgstr "No se pudo restaurar %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "Restaurar" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "Borrar archivo de manera permanente" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nombre" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Borrado" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 directorio" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} directorios" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 archivo" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} archivos" @@ -67,3 +71,7 @@ msgstr "No hay nada acá. ¡La papelera está vacía!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Recuperar" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/et_EE/files_trashbin.po b/l10n/et_EE/files_trashbin.po index 72073ead87..2fdc8f21c9 100644 --- a/l10n/et_EE/files_trashbin.po +++ b/l10n/et_EE/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 18:01+0000\n" -"Last-Translator: Rivo Zängov \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: et_EE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "%s jäädavalt kustutamine ebaõnnestus" @@ -28,35 +28,39 @@ msgstr "%s jäädavalt kustutamine ebaõnnestus" msgid "Couldn't restore %s" msgstr "%s ei saa taastada" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "soorita taastamine" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "kustuta fail jäädavalt" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nimi" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Kustutatud" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 kaust" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} kausta" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 fail" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} faili" @@ -67,3 +71,7 @@ msgstr "Siin pole midagi. Sinu prügikast on tühi!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Taasta" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/eu/files_trashbin.po b/l10n/eu/files_trashbin.po index 405582e420..9f07920929 100644 --- a/l10n/eu/files_trashbin.po +++ b/l10n/eu/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 22:00+0000\n" -"Last-Translator: asieriko \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Ezin izan da %s betirako ezabatu" @@ -28,35 +28,39 @@ msgstr "Ezin izan da %s betirako ezabatu" msgid "Couldn't restore %s" msgstr "Ezin izan da %s berreskuratu" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "berreskuratu" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "ezabatu fitxategia betirako" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Izena" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Ezabatuta" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "karpeta bat" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} karpeta" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "fitxategi bat" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} fitxategi" @@ -67,3 +71,7 @@ msgstr "Ez dago ezer ez. Zure zakarrontzia hutsik dago!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Berrezarri" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/fa/files_trashbin.po b/l10n/fa/files_trashbin.po index 435d45e463..c565a07fd2 100644 --- a/l10n/fa/files_trashbin.po +++ b/l10n/fa/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "نام" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 پوشه" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{ شمار} پوشه ها" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 پرونده" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{ شمار } فایل ها" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "بازیابی" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/fi_FI/files_trashbin.po b/l10n/fi_FI/files_trashbin.po index e64f9fdafb..f733faca83 100644 --- a/l10n/fi_FI/files_trashbin.po +++ b/l10n/fi_FI/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" -"PO-Revision-Date: 2013-02-14 07:40+0000\n" -"Last-Translator: Jiri Grönroos \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: fi_FI\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Kohdetta %s ei voitu poistaa pysyvästi" @@ -28,35 +28,39 @@ msgstr "Kohdetta %s ei voitu poistaa pysyvästi" msgid "Couldn't restore %s" msgstr "Kohteen %s palautus epäonnistui" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "suorita palautustoiminto" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "poista tiedosto pysyvästi" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nimi" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Poistettu" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 kansio" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} kansiota" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 tiedosto" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} tiedostoa" @@ -67,3 +71,7 @@ msgstr "Tyhjää täynnä! Roskakorissa ei ole mitään." #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Palauta" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/fr/files_trashbin.po b/l10n/fr/files_trashbin.po index 7f4f4cbbf7..5ea1578792 100644 --- a/l10n/fr/files_trashbin.po +++ b/l10n/fr/files_trashbin.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 09:50+0000\n" -"Last-Translator: Romain DEP. \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +19,7 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Impossible d'effacer %s de façon permanente" @@ -29,35 +29,39 @@ msgstr "Impossible d'effacer %s de façon permanente" msgid "Couldn't restore %s" msgstr "Impossible de restaurer %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "effectuer l'opération de restauration" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "effacer définitivement le fichier" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nom" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Effacé" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 dossier" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} dossiers" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 fichier" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} fichiers" @@ -68,3 +72,7 @@ msgstr "Il n'y a rien ici. Votre corbeille est vide !" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Restaurer" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/gl/files_trashbin.po b/l10n/gl/files_trashbin.po index 2f1e3e6d86..feb2788da9 100644 --- a/l10n/gl/files_trashbin.po +++ b/l10n/gl/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: mbouzada \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Non foi posíbel eliminar %s permanente" @@ -28,35 +28,39 @@ msgstr "Non foi posíbel eliminar %s permanente" msgid "Couldn't restore %s" msgstr "Non foi posíbel restaurar %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "realizar a operación de restauración" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "eliminar o ficheiro permanentemente" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nome" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Eliminado" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 cartafol" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} cartafoles" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 ficheiro" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} ficheiros" @@ -67,3 +71,7 @@ msgstr "Aquí non hai nada. O cesto do lixo está baleiro!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Restablecer" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/he/files_trashbin.po b/l10n/he/files_trashbin.po index 3ce0051e74..d21b9b5d62 100644 --- a/l10n/he/files_trashbin.po +++ b/l10n/he/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: he\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "שם" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "תיקייה אחת" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} תיקיות" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "קובץ אחד" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} קבצים" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/hi/files_trashbin.po b/l10n/hi/files_trashbin.po index a0b6e4cede..2f956fdfd7 100644 --- a/l10n/hi/files_trashbin.po +++ b/l10n/hi/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: hi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/hr/files_trashbin.po b/l10n/hr/files_trashbin.po index f7162d5dc4..afa3dc963a 100644 --- a/l10n/hr/files_trashbin.po +++ b/l10n/hr/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: hr\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Ime" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/hu_HU/files_trashbin.po b/l10n/hu_HU/files_trashbin.po index 45b1df8c92..07e77a3af0 100644 --- a/l10n/hu_HU/files_trashbin.po +++ b/l10n/hu_HU/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 13:30+0000\n" -"Last-Translator: Laszlo Tornoci \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: hu_HU\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Nem sikerült %s végleges törlése" @@ -28,35 +28,39 @@ msgstr "Nem sikerült %s végleges törlése" msgid "Couldn't restore %s" msgstr "Nem sikerült %s visszaállítása" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "a visszaállítás végrehajtása" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "az állomány végleges törlése" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Név" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Törölve" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 mappa" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} mappa" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 fájl" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} fájl" @@ -67,3 +71,7 @@ msgstr "Itt nincs semmi. Az Ön szemetes mappája üres!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Visszaállítás" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/ia/files_trashbin.po b/l10n/ia/files_trashbin.po index adba7ebd96..2099d6718c 100644 --- a/l10n/ia/files_trashbin.po +++ b/l10n/ia/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: ia\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nomine" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/id/core.po b/l10n/id/core.po index 3ddaac2d13..ff57644e68 100644 --- a/l10n/id/core.po +++ b/l10n/id/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:32+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 03:12+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" @@ -390,7 +390,7 @@ msgstr "" msgid "The update was successful. Redirecting you to ownCloud now." msgstr "" -#: lostpassword/controller.php:47 +#: lostpassword/controller.php:48 msgid "ownCloud password reset" msgstr "reset password ownCloud" diff --git a/l10n/id/files.po b/l10n/id/files.po index 8acd0447cf..5dc41bb1f5 100644 --- a/l10n/id/files.po +++ b/l10n/id/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 03:12+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" @@ -93,8 +93,8 @@ msgstr "Hapus" msgid "Rename" msgstr "" -#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 -#: js/files.js:438 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:292 js/files.js:408 +#: js/files.js:439 msgid "Pending" msgstr "Menunggu" @@ -152,76 +152,76 @@ msgstr "" msgid "Your storage is almost full ({usedSpacePercent}%)" msgstr "" -#: js/files.js:224 +#: js/files.js:225 msgid "" "Your download is being prepared. This might take some time if the files are " "big." msgstr "" -#: js/files.js:261 +#: js/files.js:262 msgid "Unable to upload your file as it is a directory or has 0 bytes" msgstr "Gagal mengunggah berkas anda karena berupa direktori atau mempunyai ukuran 0 byte" -#: js/files.js:261 +#: js/files.js:262 msgid "Upload Error" msgstr "Terjadi Galat Pengunggahan" -#: js/files.js:272 +#: js/files.js:273 msgid "Close" msgstr "tutup" -#: js/files.js:311 +#: js/files.js:312 msgid "1 file uploading" msgstr "" -#: js/files.js:314 js/files.js:369 js/files.js:384 +#: js/files.js:315 js/files.js:370 js/files.js:385 msgid "{count} files uploading" msgstr "" -#: js/files.js:387 js/files.js:422 +#: js/files.js:388 js/files.js:423 msgid "Upload cancelled." msgstr "Pengunggahan dibatalkan." -#: js/files.js:496 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:569 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "tautan tidak boleh kosong" -#: js/files.js:574 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:948 templates/index.php:67 +#: js/files.js:949 templates/index.php:67 msgid "Name" msgstr "Nama" -#: js/files.js:949 templates/index.php:78 +#: js/files.js:950 templates/index.php:78 msgid "Size" msgstr "Ukuran" -#: js/files.js:950 templates/index.php:80 +#: js/files.js:951 templates/index.php:80 msgid "Modified" msgstr "Dimodifikasi" -#: js/files.js:969 +#: js/files.js:970 msgid "1 folder" -msgstr "" +msgstr "1 map" -#: js/files.js:971 +#: js/files.js:972 msgid "{count} folders" -msgstr "" +msgstr "{count} map" -#: js/files.js:979 +#: js/files.js:980 msgid "1 file" -msgstr "" +msgstr "1 berkas" -#: js/files.js:981 +#: js/files.js:982 msgid "{count} files" -msgstr "" +msgstr "{count} berkas" #: lib/helper.php:11 templates/index.php:18 msgid "Upload" diff --git a/l10n/id/files_encryption.po b/l10n/id/files_encryption.po index 28191e4f23..7a7d4d5211 100644 --- a/l10n/id/files_encryption.po +++ b/l10n/id/files_encryption.po @@ -4,13 +4,14 @@ # # Translators: # , 2012. +# Widya Walesa , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:09+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 03:12+0000\n" +"Last-Translator: w41l \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,20 +21,20 @@ msgstr "" #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" -msgstr "enkripsi" +msgstr "Enkripsi" #: templates/settings-personal.php:7 msgid "File encryption is enabled." -msgstr "" +msgstr "Enkripsi berkas aktif." #: templates/settings-personal.php:11 msgid "The following file types will not be encrypted:" -msgstr "" +msgstr "Tipe berkas berikut tidak akan dienkripsi:" #: templates/settings.php:7 msgid "Exclude the following file types from encryption:" -msgstr "" +msgstr "Kecualikan tipe berkas berikut dari enkripsi:" #: templates/settings.php:12 msgid "None" -msgstr "tidak ada" +msgstr "Tidak ada" diff --git a/l10n/id/files_external.po b/l10n/id/files_external.po index cdec2730ac..eb0c9646b7 100644 --- a/l10n/id/files_external.po +++ b/l10n/id/files_external.po @@ -4,13 +4,14 @@ # # Translators: # , 2012. +# Widya Walesa , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-13 00:17+0100\n" -"PO-Revision-Date: 2012-12-11 23:22+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 03:12+0000\n" +"Last-Translator: w41l \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,102 +21,102 @@ msgstr "" #: js/dropbox.js:7 js/dropbox.js:25 js/google.js:7 js/google.js:23 msgid "Access granted" -msgstr "akses diberikan" +msgstr "Akses diberikan" #: js/dropbox.js:28 js/dropbox.js:74 js/dropbox.js:79 js/dropbox.js:86 msgid "Error configuring Dropbox storage" -msgstr "" +msgstr "Kesalahan dalam mengkonfigurasi penyimpanan Dropbox" #: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40 msgid "Grant access" -msgstr "berikan hak akses" +msgstr "Berikan hak akses" #: js/dropbox.js:73 js/google.js:72 msgid "Fill out all required fields" -msgstr "isi semua field yang dibutuhkan" +msgstr "Isi semua field yang dibutuhkan" #: js/dropbox.js:85 msgid "Please provide a valid Dropbox app key and secret." -msgstr "" +msgstr "Masukkan kunci dan sandi aplikasi Dropbox yang benar." #: js/google.js:26 js/google.js:73 js/google.js:78 msgid "Error configuring Google Drive storage" -msgstr "" +msgstr "Kesalahan dalam mengkonfigurasi penyimpanan Google Drive" -#: lib/config.php:434 +#: lib/config.php:398 msgid "" "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " "is not possible. Please ask your system administrator to install it." -msgstr "" +msgstr "Peringatan: \"smbclient\" tidak terpasang. Mount direktori CIFS/SMB tidak dapat dilakukan. Silakan minta administrator sistem untuk memasangnya." -#: lib/config.php:435 +#: lib/config.php:401 msgid "" "Warning: The FTP support in PHP is not enabled or installed. Mounting" " of FTP shares is not possible. Please ask your system administrator to " "install it." -msgstr "" +msgstr "Peringatan: Dukungan FTP di PHP tidak aktif atau tidak terpasang. Mount direktori FTP tidak dapat dilakukan. Silakan minta administrator sistem untuk memasangnya." #: templates/settings.php:3 msgid "External Storage" -msgstr "penyimpanan eksternal" +msgstr "Penyimpanan Eksternal" #: templates/settings.php:8 templates/settings.php:22 msgid "Mount point" -msgstr "" +msgstr "Lokasi mount" #: templates/settings.php:9 msgid "Backend" -msgstr "" +msgstr "Backend" #: templates/settings.php:10 msgid "Configuration" -msgstr "konfigurasi" +msgstr "Konfigurasi" #: templates/settings.php:11 msgid "Options" -msgstr "pilihan" +msgstr "Pilihan" #: templates/settings.php:12 msgid "Applicable" -msgstr "berlaku" +msgstr "Berlaku" #: templates/settings.php:27 msgid "Add mount point" -msgstr "" +msgstr "Tambah lokasi mount" #: templates/settings.php:85 msgid "None set" -msgstr "tidak satupun di set" +msgstr "Tidak satupun di set" #: templates/settings.php:86 msgid "All Users" -msgstr "semua pengguna" +msgstr "Semua Pengguna" #: templates/settings.php:87 msgid "Groups" -msgstr "grup" +msgstr "Grup" #: templates/settings.php:95 msgid "Users" -msgstr "pengguna" +msgstr "Pengguna" #: templates/settings.php:108 templates/settings.php:109 -#: templates/settings.php:149 templates/settings.php:150 +#: templates/settings.php:144 templates/settings.php:145 msgid "Delete" -msgstr "hapus" +msgstr "Hapus" #: templates/settings.php:124 msgid "Enable User External Storage" -msgstr "" +msgstr "Aktifkan Penyimpanan Eksternal Pengguna" #: templates/settings.php:125 msgid "Allow users to mount their own external storage" -msgstr "" +msgstr "Ijinkan pengguna untuk me-mount penyimpanan eksternal mereka" -#: templates/settings.php:139 +#: templates/settings.php:136 msgid "SSL root certificates" -msgstr "" +msgstr "Sertifikat root SSL" -#: templates/settings.php:158 +#: templates/settings.php:154 msgid "Import Root Certificate" -msgstr "" +msgstr "Impor Sertifikat Root" diff --git a/l10n/id/files_trashbin.po b/l10n/id/files_trashbin.po index 15be1a566a..2aae65540f 100644 --- a/l10n/id/files_trashbin.po +++ b/l10n/id/files_trashbin.po @@ -3,12 +3,13 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Widya Walesa , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" @@ -17,52 +18,60 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" -msgstr "" +msgstr "Tidak dapat menghapus permanen %s" #: ajax/undelete.php:41 #, php-format msgid "Couldn't restore %s" -msgstr "" +msgstr "Tidak dapat memulihkan %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" -msgstr "" +msgstr "jalankan operasi pemulihan" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" +msgstr "hapus berkas secara permanen" + +#: js/trash.js:121 +msgid "Delete permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:151 templates/index.php:17 msgid "Name" -msgstr "nama" +msgstr "Nama" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" -msgstr "" +msgstr "Dihapus" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" -msgstr "" +msgstr "1 map" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" -msgstr "" +msgstr "{count} map" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" -msgstr "" +msgstr "1 berkas" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" -msgstr "" +msgstr "{count} berkas" #: templates/index.php:9 msgid "Nothing in here. Your trash bin is empty!" -msgstr "" +msgstr "Tempat sampah anda kosong!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" +msgstr "Pulihkan" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" msgstr "" diff --git a/l10n/id/files_versions.po b/l10n/id/files_versions.po index 490e0fc816..5bf91c3ed0 100644 --- a/l10n/id/files_versions.po +++ b/l10n/id/files_versions.po @@ -4,13 +4,14 @@ # # Translators: # , 2012. +# Widya Walesa , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 03:00+0000\n" +"Last-Translator: w41l \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,33 +22,33 @@ msgstr "" #: ajax/rollbackVersion.php:15 #, php-format msgid "Could not revert: %s" -msgstr "" +msgstr "Tidak dapat mengembalikan: %s" #: history.php:40 msgid "success" -msgstr "" +msgstr "sukses" #: history.php:42 #, php-format msgid "File %s was reverted to version %s" -msgstr "" +msgstr "Berkas %s telah dikembalikan ke versi %s" #: history.php:49 msgid "failure" -msgstr "" +msgstr "gagal" #: history.php:51 #, php-format msgid "File %s could not be reverted to version %s" -msgstr "" +msgstr "Berkas %s gagal dikembalikan ke versi %s" #: history.php:68 msgid "No old versions available" -msgstr "" +msgstr "Versi lama tidak tersedia" #: history.php:73 msgid "No path specified" -msgstr "" +msgstr "Lokasi tidak ditentukan" #: js/versions.js:16 msgid "History" @@ -55,7 +56,7 @@ msgstr "riwayat" #: templates/history.php:20 msgid "Revert a file to a previous version by clicking on its revert button" -msgstr "" +msgstr "Kembalikan berkas ke versi sebelumnya dengan mengklik tombol kembalikan" #: templates/settings.php:3 msgid "Files Versioning" diff --git a/l10n/id/lib.po b/l10n/id/lib.po index 32d4cfd14e..12bb079d49 100644 --- a/l10n/id/lib.po +++ b/l10n/id/lib.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 15:39+0100\n" -"PO-Revision-Date: 2013-02-11 14:40+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 03:12+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" @@ -19,27 +19,27 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: app.php:339 +#: app.php:349 msgid "Help" msgstr "bantu" -#: app.php:346 +#: app.php:362 msgid "Personal" msgstr "perseorangan" -#: app.php:351 +#: app.php:373 msgid "Settings" msgstr "pengaturan" -#: app.php:356 +#: app.php:385 msgid "Users" msgstr "pengguna" -#: app.php:363 +#: app.php:398 msgid "Apps" msgstr "aplikasi" -#: app.php:365 +#: app.php:406 msgid "Admin" msgstr "admin" @@ -51,15 +51,15 @@ msgstr "download ZIP sedang dimatikan" msgid "Files need to be downloaded one by one." msgstr "file harus di unduh satu persatu" -#: files.php:203 files.php:228 +#: files.php:204 files.php:231 msgid "Back to Files" msgstr "kembali ke daftar file" -#: files.php:227 +#: files.php:228 msgid "Selected files too large to generate zip file." msgstr "file yang dipilih terlalu besar untuk membuat file zip" -#: helper.php:226 +#: helper.php:228 msgid "couldn't be determined" msgstr "" @@ -119,7 +119,7 @@ msgstr "" msgid "%s set the database host." msgstr "" -#: setup.php:126 setup.php:291 setup.php:336 +#: setup.php:126 setup.php:294 setup.php:339 msgid "PostgreSQL username and/or password not valid" msgstr "" @@ -127,7 +127,7 @@ msgstr "" msgid "You need to enter either an existing account or the administrator." msgstr "" -#: setup.php:149 setup.php:423 setup.php:489 +#: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" msgstr "" @@ -135,51 +135,51 @@ msgstr "" msgid "MySQL username and/or password not valid" msgstr "" -#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 -#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 -#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 -#: setup.php:579 +#: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 +#: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 +#: setup.php:545 setup.php:552 setup.php:561 setup.php:569 setup.php:578 +#: setup.php:584 #, php-format msgid "DB Error: \"%s\"" msgstr "" -#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 -#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 -#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 +#: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 +#: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" msgstr "" -#: setup.php:270 +#: setup.php:273 #, php-format msgid "MySQL user '%s'@'localhost' exists already." msgstr "" -#: setup.php:271 +#: setup.php:274 msgid "Drop this user from MySQL" msgstr "" -#: setup.php:276 +#: setup.php:279 #, php-format msgid "MySQL user '%s'@'%%' already exists" msgstr "" -#: setup.php:277 +#: setup.php:280 msgid "Drop this user from MySQL." msgstr "" -#: setup.php:548 setup.php:580 +#: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" msgstr "" -#: setup.php:644 +#: setup.php:649 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:645 +#: setup.php:651 #, php-format msgid "Please double check the installation guides." msgstr "" @@ -236,16 +236,16 @@ msgstr "tahun kemarin" msgid "years ago" msgstr "beberapa tahun lalu" -#: updater.php:75 +#: updater.php:78 #, php-format msgid "%s is available. Get more information" msgstr "%s tersedia. dapatkan info lebih lanjut" -#: updater.php:77 +#: updater.php:81 msgid "up to date" msgstr "terbaru" -#: updater.php:80 +#: updater.php:84 msgid "updates check is disabled" msgstr "pengecekan pembaharuan sedang non-aktifkan" diff --git a/l10n/id/settings.po b/l10n/id/settings.po index 56cc39cb35..cd8cfdfc1d 100644 --- a/l10n/id/settings.po +++ b/l10n/id/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 03:12+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" @@ -149,23 +149,23 @@ msgstr "Admin Grup" msgid "Delete" msgstr "Hapus" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" msgstr "" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" msgstr "" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" msgstr "" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" msgstr "" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "__language_name__" @@ -389,7 +389,7 @@ msgstr "" #: templates/personal.php:14 msgid "Get the apps to sync your files" -msgstr "" +msgstr "Dapatkan aplikasi untuk sinkronisasi berkas anda" #: templates/personal.php:25 msgid "Show First Run Wizard again" diff --git a/l10n/id/user_ldap.po b/l10n/id/user_ldap.po index c105afaa81..ca5a266207 100644 --- a/l10n/id/user_ldap.po +++ b/l10n/id/user_ldap.po @@ -4,13 +4,14 @@ # # Translators: # , 2012. +# Widya Walesa , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 03:00+0000\n" +"Last-Translator: w41l \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,23 +21,23 @@ msgstr "" #: ajax/deleteConfiguration.php:34 msgid "Failed to delete the server configuration" -msgstr "" +msgstr "Gagal menghapus konfigurasi server" -#: ajax/testConfiguration.php:35 +#: ajax/testConfiguration.php:36 msgid "The configuration is valid and the connection could be established!" -msgstr "" +msgstr "Konfigurasi valid dan koneksi dapat dilakukan!" -#: ajax/testConfiguration.php:37 +#: ajax/testConfiguration.php:39 msgid "" "The configuration is valid, but the Bind failed. Please check the server " "settings and credentials." -msgstr "" +msgstr "Konfigurasi valid, tetapi Bind gagal. Silakan cek pengaturan server dan keamanan." -#: ajax/testConfiguration.php:40 +#: ajax/testConfiguration.php:43 msgid "" "The configuration is invalid. Please look in the ownCloud log for further " "details." -msgstr "" +msgstr "Konfigurasi salah. Silakan lihat log ownCloud untuk lengkapnya." #: js/settings.js:66 msgid "Deletion failed" @@ -44,267 +45,267 @@ msgstr "penghapusan gagal" #: js/settings.js:82 msgid "Take over settings from recent server configuration?" -msgstr "" +msgstr "Ambil alih pengaturan dari konfigurasi server saat ini?" #: js/settings.js:83 msgid "Keep settings?" -msgstr "" +msgstr "Biarkan pengaturan?" #: js/settings.js:97 msgid "Cannot add server configuration" -msgstr "" +msgstr "Gagal menambah konfigurasi server" #: js/settings.js:121 msgid "Connection test succeeded" -msgstr "" +msgstr "Tes koneksi sukses" #: js/settings.js:126 msgid "Connection test failed" -msgstr "" +msgstr "Tes koneksi gagal" #: js/settings.js:136 msgid "Do you really want to delete the current Server Configuration?" -msgstr "" +msgstr "Anda ingin menghapus Konfigurasi Server saat ini?" #: js/settings.js:137 msgid "Confirm Deletion" -msgstr "" +msgstr "Konfirmasi Penghapusan" #: templates/settings.php:8 msgid "" "Warning: Apps user_ldap and user_webdavauth are incompatible. You may" " experience unexpected behaviour. Please ask your system administrator to " "disable one of them." -msgstr "" +msgstr "Peringatan:/b> Aplikasi user_ldap dan user_webdavauth tidak kompatibel. Anda mungkin akan mengalami kejadian yang tidak diharapkan. Silakan minta administrator sistem untuk menonaktifkan salah satunya." #: templates/settings.php:11 msgid "" "Warning: The PHP LDAP module is not installed, the backend will not " "work. Please ask your system administrator to install it." -msgstr "" +msgstr "Peringatan: Modul LDAP PHP tidak terpasang, perangkat tidak akan bekerja. Silakan minta administrator sistem untuk memasangnya." #: templates/settings.php:15 msgid "Server configuration" -msgstr "" +msgstr "Konfigurasi server" -#: templates/settings.php:17 +#: templates/settings.php:18 msgid "Add Server Configuration" -msgstr "" +msgstr "Tambah Konfigurasi Server" -#: templates/settings.php:21 +#: templates/settings.php:23 msgid "Host" msgstr "host" -#: templates/settings.php:21 +#: templates/settings.php:25 msgid "" "You can omit the protocol, except you require SSL. Then start with ldaps://" -msgstr "" +msgstr "Protokol dapat tidak ditulis, kecuali anda menggunakan SSL. Lalu jalankan dengan ldaps://" -#: templates/settings.php:22 +#: templates/settings.php:26 msgid "Base DN" -msgstr "" +msgstr "Base DN" -#: templates/settings.php:22 +#: templates/settings.php:27 msgid "One Base DN per line" -msgstr "" +msgstr "Satu Base DN per baris" -#: templates/settings.php:22 +#: templates/settings.php:28 msgid "You can specify Base DN for users and groups in the Advanced tab" -msgstr "" +msgstr "Anda dapat menetapkan Base DN untuk pengguna dan grup dalam tab Lanjutan" -#: templates/settings.php:23 +#: templates/settings.php:30 msgid "User DN" -msgstr "" +msgstr "User DN" -#: templates/settings.php:23 +#: templates/settings.php:32 msgid "" "The DN of the client user with which the bind shall be done, e.g. " "uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password " "empty." -msgstr "" +msgstr "DN dari klien pengguna yang dengannya tautan akan diterapkan, mis. uid=agen,dc=contoh,dc=com. Untuk akses anonim, biarkan DN dan kata sandi kosong." -#: templates/settings.php:24 +#: templates/settings.php:33 msgid "Password" msgstr "kata kunci" -#: templates/settings.php:24 +#: templates/settings.php:36 msgid "For anonymous access, leave DN and Password empty." -msgstr "" +msgstr "Untuk akses anonim, biarkan DN dan Kata sandi kosong." -#: templates/settings.php:25 +#: templates/settings.php:37 msgid "User Login Filter" msgstr "gunakan saringan login" -#: templates/settings.php:25 +#: templates/settings.php:40 #, php-format msgid "" "Defines the filter to apply, when login is attempted. %%uid replaces the " "username in the login action." -msgstr "" +msgstr "Definisikan filter untuk diterapkan, saat login dilakukan. %%uid menggantikan username saat login." -#: templates/settings.php:25 +#: templates/settings.php:41 #, php-format msgid "use %%uid placeholder, e.g. \"uid=%%uid\"" -msgstr "" +msgstr "gunakan pengganti %%uid, mis. \"uid=%%uid\"" -#: templates/settings.php:26 +#: templates/settings.php:42 msgid "User List Filter" -msgstr "" +msgstr "Daftar Filter Pengguna" -#: templates/settings.php:26 +#: templates/settings.php:45 msgid "Defines the filter to apply, when retrieving users." -msgstr "" +msgstr "Definisikan filter untuk diterapkan saat menerima pengguna." -#: templates/settings.php:26 +#: templates/settings.php:46 msgid "without any placeholder, e.g. \"objectClass=person\"." -msgstr "" +msgstr "tanpa pengganti apapun, mis. \"objectClass=seseorang\"." -#: templates/settings.php:27 +#: templates/settings.php:47 msgid "Group Filter" msgstr "saringan grup" -#: templates/settings.php:27 +#: templates/settings.php:50 msgid "Defines the filter to apply, when retrieving groups." -msgstr "" +msgstr "Definisikan filter untuk diterapkan saat menerima grup." -#: templates/settings.php:27 +#: templates/settings.php:51 msgid "without any placeholder, e.g. \"objectClass=posixGroup\"." -msgstr "" +msgstr "tanpa pengganti apapaun, mis. \"objectClass=posixGroup\"." -#: templates/settings.php:31 +#: templates/settings.php:55 msgid "Connection Settings" -msgstr "" +msgstr "Pengaturan Koneksi" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "Configuration Active" -msgstr "" +msgstr "Konfigurasi Aktif" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "When unchecked, this configuration will be skipped." -msgstr "" +msgstr "Jika tidak dicentang, konfigurasi ini dilewati." -#: templates/settings.php:34 +#: templates/settings.php:58 msgid "Port" msgstr "port" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "Backup (Replica) Host" -msgstr "" +msgstr "Host Cadangan (Replika)" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "" "Give an optional backup host. It must be a replica of the main LDAP/AD " "server." -msgstr "" +msgstr "Berikan pilihan host cadangan. Harus merupakan replika dari server LDAP/AD utama." -#: templates/settings.php:36 +#: templates/settings.php:60 msgid "Backup (Replica) Port" -msgstr "" +msgstr "Port Cadangan (Replika)" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "Disable Main Server" -msgstr "" +msgstr "Nonaktifkan Server Utama" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "When switched on, ownCloud will only connect to the replica server." -msgstr "" +msgstr "Saat diaktifkan, ownCloud hanya akan terhubung ke server replika." -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Use TLS" msgstr "gunakan TLS" -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Do not use it additionally for LDAPS connections, it will fail." -msgstr "" +msgstr "Jangan gunakan utamanya untuk koneksi LDAPS, koneksi akan gagal." -#: templates/settings.php:39 +#: templates/settings.php:63 msgid "Case insensitve LDAP server (Windows)" -msgstr "" +msgstr "Server LDAP dengan kapitalisasi tidak sensitif (Windows)" -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Turn off SSL certificate validation." msgstr "matikan validasi sertivikat SSL" -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "" "If connection only works with this option, import the LDAP server's SSL " "certificate in your ownCloud server." -msgstr "" +msgstr "Jika koneksi hanya bekerja dengan opsi ini, impor sertifikat SSL server LDAP dari server ownCloud anda." -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Not recommended, use for testing only." msgstr "tidak disarankan, gunakan hanya untuk pengujian." -#: templates/settings.php:41 +#: templates/settings.php:65 msgid "in seconds. A change empties the cache." msgstr "dalam detik. perubahan mengosongkan cache" -#: templates/settings.php:43 +#: templates/settings.php:67 msgid "Directory Settings" -msgstr "" +msgstr "Pengaturan Direktori" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "User Display Name Field" -msgstr "" +msgstr "Bidang Tampilan Nama Pengguna" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "The LDAP attribute to use to generate the user`s ownCloud name." -msgstr "" +msgstr "Atribut LDAP yang digunakan untuk menghasilkan nama pengguna ownCloud." -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "Base User Tree" -msgstr "" +msgstr "Pohon Pengguna Dasar" -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "One User Base DN per line" -msgstr "" +msgstr "Satu Pengguna Base DN per baris" -#: templates/settings.php:47 +#: templates/settings.php:71 msgid "User Search Attributes" -msgstr "" +msgstr "Atribut Pencarian Pengguna" -#: templates/settings.php:47 templates/settings.php:50 +#: templates/settings.php:71 templates/settings.php:74 msgid "Optional; one attribute per line" -msgstr "" +msgstr "Pilihan; satu atribut per baris" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "Group Display Name Field" -msgstr "" +msgstr "Bidang Tampilan Nama Grup" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "The LDAP attribute to use to generate the groups`s ownCloud name." -msgstr "" +msgstr "Atribut LDAP yang digunakan untuk menghasilkan nama grup ownCloud." -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "Base Group Tree" -msgstr "" +msgstr "Pohon Grup Dasar" -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "One Group Base DN per line" -msgstr "" +msgstr "Satu Grup Base DN per baris" -#: templates/settings.php:50 +#: templates/settings.php:74 msgid "Group Search Attributes" -msgstr "" +msgstr "Atribut Pencarian Grup" -#: templates/settings.php:51 +#: templates/settings.php:75 msgid "Group-Member association" -msgstr "" +msgstr "asosiasi Anggota-Grup" -#: templates/settings.php:53 +#: templates/settings.php:77 msgid "Special Attributes" -msgstr "" +msgstr "Atribut Khusus" -#: templates/settings.php:56 +#: templates/settings.php:80 msgid "in bytes" msgstr "dalam bytes" -#: templates/settings.php:58 +#: templates/settings.php:82 msgid "" "Leave empty for user name (default). Otherwise, specify an LDAP/AD " "attribute." -msgstr "" +msgstr "Biarkan nama pengguna kosong (default). Atau tetapkan atribut LDAP/AD." -#: templates/settings.php:62 +#: templates/settings.php:86 msgid "Help" msgstr "bantuan" diff --git a/l10n/is/files_trashbin.po b/l10n/is/files_trashbin.po index 858d3ee076..8af5dc9fdd 100644 --- a/l10n/is/files_trashbin.po +++ b/l10n/is/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: is\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nafn" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 mappa" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} möppur" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 skrá" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} skrár" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/it/files_trashbin.po b/l10n/it/files_trashbin.po index f696193957..92dd72ca00 100644 --- a/l10n/it/files_trashbin.po +++ b/l10n/it/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 09:50+0000\n" -"Last-Translator: Vincenzo Reale \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Impossibile eliminare %s definitivamente" @@ -28,35 +28,39 @@ msgstr "Impossibile eliminare %s definitivamente" msgid "Couldn't restore %s" msgstr "Impossibile ripristinare %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "esegui operazione di ripristino" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "elimina il file definitivamente" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nome" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Eliminati" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 cartella" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} cartelle" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 file" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} file" @@ -67,3 +71,7 @@ msgstr "Qui non c'è niente. Il tuo cestino è vuoto." #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Ripristina" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/ja_JP/files_trashbin.po b/l10n/ja_JP/files_trashbin.po index a81dae25c6..b81d864712 100644 --- a/l10n/ja_JP/files_trashbin.po +++ b/l10n/ja_JP/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 09:50+0000\n" -"Last-Translator: Daisuke Deguchi \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: ja_JP\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "%s を完全に削除出来ませんでした" @@ -28,35 +28,39 @@ msgstr "%s を完全に削除出来ませんでした" msgid "Couldn't restore %s" msgstr "%s を復元出来ませんでした" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "復元操作を実行する" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "ファイルを完全に削除する" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "名前" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "削除済み" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 フォルダ" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} フォルダ" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 ファイル" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} ファイル" @@ -67,3 +71,7 @@ msgstr "ここには何もありません。ゴミ箱は空です!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "復元" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/ka_GE/files_trashbin.po b/l10n/ka_GE/files_trashbin.po index 89f7efa5b6..499f14ca8c 100644 --- a/l10n/ka_GE/files_trashbin.po +++ b/l10n/ka_GE/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: ka_GE\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "სახელი" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 საქაღალდე" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} საქაღალდე" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 ფაილი" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} ფაილი" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/ko/files_trashbin.po b/l10n/ko/files_trashbin.po index d03c3476b2..5271e9cf04 100644 --- a/l10n/ko/files_trashbin.po +++ b/l10n/ko/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "이름" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "폴더 1개" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "폴더 {count}개" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "파일 1개" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "파일 {count}개" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "복원" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/ku_IQ/files_trashbin.po b/l10n/ku_IQ/files_trashbin.po index 03fa59c580..a4a5d2ace6 100644 --- a/l10n/ku_IQ/files_trashbin.po +++ b/l10n/ku_IQ/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: ku_IQ\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "ناو" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/lb/files_trashbin.po b/l10n/lb/files_trashbin.po index 5b1856decd..b4f7cfe3a3 100644 --- a/l10n/lb/files_trashbin.po +++ b/l10n/lb/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: lb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Numm" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/lt_LT/files_trashbin.po b/l10n/lt_LT/files_trashbin.po index 928d63096c..1414400ddc 100644 --- a/l10n/lt_LT/files_trashbin.po +++ b/l10n/lt_LT/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: lt_LT\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Pavadinimas" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 aplankalas" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} aplankalai" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 failas" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} failai" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/lv/files_trashbin.po b/l10n/lv/files_trashbin.po index 71b39e763b..7710bac8da 100644 --- a/l10n/lv/files_trashbin.po +++ b/l10n/lv/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: Rūdolfs Mazurs \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Nevarēja pilnībā izdzēst %s" @@ -28,35 +28,39 @@ msgstr "Nevarēja pilnībā izdzēst %s" msgid "Couldn't restore %s" msgstr "Nevarēja atjaunot %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "veikt atjaunošanu" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "dzēst datni pavisam" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nosaukums" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Dzēsts" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 mape" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} mapes" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 datne" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} datnes" @@ -67,3 +71,7 @@ msgstr "Šeit nekā nav. Jūsu miskaste ir tukša!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Atjaunot" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/mk/files_trashbin.po b/l10n/mk/files_trashbin.po index 173bc01b4e..609e2410e6 100644 --- a/l10n/mk/files_trashbin.po +++ b/l10n/mk/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: mk\n" "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Име" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 папка" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} папки" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 датотека" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} датотеки" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/ms_MY/files_trashbin.po b/l10n/ms_MY/files_trashbin.po index 7924d440e3..513d1b9832 100644 --- a/l10n/ms_MY/files_trashbin.po +++ b/l10n/ms_MY/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: ms_MY\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nama" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/my_MM/core.po b/l10n/my_MM/core.po new file mode 100644 index 0000000000..66f60cd781 --- /dev/null +++ b/l10n/my_MM/core.po @@ -0,0 +1,594 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Pyae Sone , 2013. +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 10:30+0000\n" +"Last-Translator: Pyae Sone \n" +"Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my_MM\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ajax/share.php:85 +#, php-format +msgid "User %s shared a file with you" +msgstr "" + +#: ajax/share.php:87 +#, php-format +msgid "User %s shared a folder with you" +msgstr "" + +#: ajax/share.php:89 +#, php-format +msgid "" +"User %s shared the file \"%s\" with you. It is available for download here: " +"%s" +msgstr "" + +#: ajax/share.php:91 +#, php-format +msgid "" +"User %s shared the folder \"%s\" with you. It is available for download " +"here: %s" +msgstr "" + +#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25 +msgid "Category type not provided." +msgstr "" + +#: ajax/vcategories/add.php:30 +msgid "No category to add?" +msgstr "" + +#: ajax/vcategories/add.php:37 +#, php-format +msgid "This category already exists: %s" +msgstr "" + +#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27 +#: ajax/vcategories/favorites.php:24 +#: ajax/vcategories/removeFromFavorites.php:26 +msgid "Object type not provided." +msgstr "" + +#: ajax/vcategories/addToFavorites.php:30 +#: ajax/vcategories/removeFromFavorites.php:30 +#, php-format +msgid "%s ID not provided." +msgstr "" + +#: ajax/vcategories/addToFavorites.php:35 +#, php-format +msgid "Error adding %s to favorites." +msgstr "" + +#: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136 +msgid "No categories selected for deletion." +msgstr "" + +#: ajax/vcategories/removeFromFavorites.php:35 +#, php-format +msgid "Error removing %s from favorites." +msgstr "" + +#: js/config.php:32 +msgid "Sunday" +msgstr "" + +#: js/config.php:32 +msgid "Monday" +msgstr "" + +#: js/config.php:32 +msgid "Tuesday" +msgstr "" + +#: js/config.php:32 +msgid "Wednesday" +msgstr "" + +#: js/config.php:32 +msgid "Thursday" +msgstr "" + +#: js/config.php:32 +msgid "Friday" +msgstr "" + +#: js/config.php:32 +msgid "Saturday" +msgstr "" + +#: js/config.php:33 +msgid "January" +msgstr "" + +#: js/config.php:33 +msgid "February" +msgstr "" + +#: js/config.php:33 +msgid "March" +msgstr "" + +#: js/config.php:33 +msgid "April" +msgstr "" + +#: js/config.php:33 +msgid "May" +msgstr "" + +#: js/config.php:33 +msgid "June" +msgstr "" + +#: js/config.php:33 +msgid "July" +msgstr "" + +#: js/config.php:33 +msgid "August" +msgstr "" + +#: js/config.php:33 +msgid "September" +msgstr "" + +#: js/config.php:33 +msgid "October" +msgstr "" + +#: js/config.php:33 +msgid "November" +msgstr "" + +#: js/config.php:33 +msgid "December" +msgstr "" + +#: js/js.js:286 +msgid "Settings" +msgstr "" + +#: js/js.js:767 +msgid "seconds ago" +msgstr "" + +#: js/js.js:768 +msgid "1 minute ago" +msgstr "" + +#: js/js.js:769 +msgid "{minutes} minutes ago" +msgstr "" + +#: js/js.js:770 +msgid "1 hour ago" +msgstr "" + +#: js/js.js:771 +msgid "{hours} hours ago" +msgstr "" + +#: js/js.js:772 +msgid "today" +msgstr "" + +#: js/js.js:773 +msgid "yesterday" +msgstr "" + +#: js/js.js:774 +msgid "{days} days ago" +msgstr "" + +#: js/js.js:775 +msgid "last month" +msgstr "" + +#: js/js.js:776 +msgid "{months} months ago" +msgstr "" + +#: js/js.js:777 +msgid "months ago" +msgstr "" + +#: js/js.js:778 +msgid "last year" +msgstr "" + +#: js/js.js:779 +msgid "years ago" +msgstr "" + +#: js/oc-dialogs.js:126 +msgid "Choose" +msgstr "" + +#: js/oc-dialogs.js:146 js/oc-dialogs.js:166 +msgid "Cancel" +msgstr "" + +#: js/oc-dialogs.js:162 +msgid "No" +msgstr "" + +#: js/oc-dialogs.js:163 +msgid "Yes" +msgstr "" + +#: js/oc-dialogs.js:180 +msgid "Ok" +msgstr "" + +#: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102 +#: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162 +msgid "The object type is not specified." +msgstr "" + +#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 +msgid "Error" +msgstr "" + +#: js/oc-vcategories.js:179 +msgid "The app name is not specified." +msgstr "" + +#: js/oc-vcategories.js:194 +msgid "The required file {file} is not installed!" +msgstr "" + +#: js/share.js:29 js/share.js:43 js/share.js:90 +msgid "Shared" +msgstr "" + +#: js/share.js:93 +msgid "Share" +msgstr "" + +#: js/share.js:141 js/share.js:622 +msgid "Error while sharing" +msgstr "" + +#: js/share.js:152 +msgid "Error while unsharing" +msgstr "" + +#: js/share.js:159 +msgid "Error while changing permissions" +msgstr "" + +#: js/share.js:168 +msgid "Shared with you and the group {group} by {owner}" +msgstr "" + +#: js/share.js:170 +msgid "Shared with you by {owner}" +msgstr "" + +#: js/share.js:175 +msgid "Share with" +msgstr "" + +#: js/share.js:180 +msgid "Share with link" +msgstr "" + +#: js/share.js:183 +msgid "Password protect" +msgstr "" + +#: js/share.js:185 templates/installation.php:44 templates/login.php:35 +msgid "Password" +msgstr "" + +#: js/share.js:189 +msgid "Email link to person" +msgstr "" + +#: js/share.js:190 +msgid "Send" +msgstr "" + +#: js/share.js:194 +msgid "Set expiration date" +msgstr "" + +#: js/share.js:195 +msgid "Expiration date" +msgstr "" + +#: js/share.js:227 +msgid "Share via email:" +msgstr "" + +#: js/share.js:229 +msgid "No people found" +msgstr "" + +#: js/share.js:256 +msgid "Resharing is not allowed" +msgstr "" + +#: js/share.js:292 +msgid "Shared in {item} with {user}" +msgstr "" + +#: js/share.js:313 +msgid "Unshare" +msgstr "" + +#: js/share.js:325 +msgid "can edit" +msgstr "" + +#: js/share.js:327 +msgid "access control" +msgstr "" + +#: js/share.js:330 +msgid "create" +msgstr "" + +#: js/share.js:333 +msgid "update" +msgstr "" + +#: js/share.js:336 +msgid "delete" +msgstr "" + +#: js/share.js:339 +msgid "share" +msgstr "" + +#: js/share.js:373 js/share.js:569 +msgid "Password protected" +msgstr "" + +#: js/share.js:582 +msgid "Error unsetting expiration date" +msgstr "" + +#: js/share.js:594 +msgid "Error setting expiration date" +msgstr "" + +#: js/share.js:609 +msgid "Sending ..." +msgstr "" + +#: js/share.js:620 +msgid "Email sent" +msgstr "" + +#: js/update.js:14 +msgid "" +"The update was unsuccessful. Please report this issue to the ownCloud " +"community." +msgstr "" + +#: js/update.js:18 +msgid "The update was successful. Redirecting you to ownCloud now." +msgstr "" + +#: lostpassword/controller.php:48 +msgid "ownCloud password reset" +msgstr "" + +#: lostpassword/templates/email.php:2 +msgid "Use the following link to reset your password: {link}" +msgstr "" + +#: lostpassword/templates/lostpassword.php:3 +msgid "You will receive a link to reset your password via Email." +msgstr "" + +#: lostpassword/templates/lostpassword.php:5 +msgid "Reset email send." +msgstr "" + +#: lostpassword/templates/lostpassword.php:8 +msgid "Request failed!" +msgstr "" + +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:39 +#: templates/login.php:28 +msgid "Username" +msgstr "" + +#: lostpassword/templates/lostpassword.php:14 +msgid "Request reset" +msgstr "" + +#: lostpassword/templates/resetpassword.php:4 +msgid "Your password was reset" +msgstr "" + +#: lostpassword/templates/resetpassword.php:5 +msgid "To login page" +msgstr "" + +#: lostpassword/templates/resetpassword.php:8 +msgid "New password" +msgstr "" + +#: lostpassword/templates/resetpassword.php:11 +msgid "Reset password" +msgstr "" + +#: strings.php:5 +msgid "Personal" +msgstr "" + +#: strings.php:6 +msgid "Users" +msgstr "" + +#: strings.php:7 +msgid "Apps" +msgstr "Apps" + +#: strings.php:8 +msgid "Admin" +msgstr "" + +#: strings.php:9 +msgid "Help" +msgstr "" + +#: templates/403.php:12 +msgid "Access forbidden" +msgstr "" + +#: templates/404.php:12 +msgid "Cloud not found" +msgstr "" + +#: templates/edit_categories_dialog.php:4 +msgid "Edit categories" +msgstr "" + +#: templates/edit_categories_dialog.php:16 +msgid "Add" +msgstr "" + +#: templates/installation.php:23 templates/installation.php:30 +msgid "Security Warning" +msgstr "" + +#: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:25 +msgid "" +"Without a secure random number generator an attacker may be able to predict " +"password reset tokens and take over your account." +msgstr "" + +#: templates/installation.php:31 +msgid "" +"Your data directory and files are probably accessible from the internet " +"because the .htaccess file does not work." +msgstr "" + +#: templates/installation.php:32 +msgid "" +"For information how to properly configure your server, please see the documentation." +msgstr "" + +#: templates/installation.php:36 +msgid "Create an admin account" +msgstr "" + +#: templates/installation.php:52 +msgid "Advanced" +msgstr "" + +#: templates/installation.php:54 +msgid "Data folder" +msgstr "" + +#: templates/installation.php:61 +msgid "Configure the database" +msgstr "" + +#: templates/installation.php:66 templates/installation.php:77 +#: templates/installation.php:87 templates/installation.php:97 +msgid "will be used" +msgstr "" + +#: templates/installation.php:109 +msgid "Database user" +msgstr "" + +#: templates/installation.php:113 +msgid "Database password" +msgstr "" + +#: templates/installation.php:117 +msgid "Database name" +msgstr "" + +#: templates/installation.php:125 +msgid "Database tablespace" +msgstr "" + +#: templates/installation.php:131 +msgid "Database host" +msgstr "" + +#: templates/installation.php:136 +msgid "Finish setup" +msgstr "" + +#: templates/layout.guest.php:33 +msgid "web services under your control" +msgstr "" + +#: templates/layout.user.php:48 +msgid "Log out" +msgstr "" + +#: templates/login.php:10 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:11 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:13 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:19 +msgid "Lost your password?" +msgstr "" + +#: templates/login.php:41 +msgid "remember" +msgstr "" + +#: templates/login.php:43 +msgid "Log in" +msgstr "" + +#: templates/login.php:49 +msgid "Alternative Logins" +msgstr "" + +#: templates/part.pagenavi.php:3 +msgid "prev" +msgstr "" + +#: templates/part.pagenavi.php:20 +msgid "next" +msgstr "" + +#: templates/update.php:3 +#, php-format +msgid "Updating ownCloud to version %s, this may take a while." +msgstr "" diff --git a/l10n/my_MM/files.po b/l10n/my_MM/files.po new file mode 100644 index 0000000000..528f0857ec --- /dev/null +++ b/l10n/my_MM/files.po @@ -0,0 +1,315 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2011-08-13 02:19+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my_MM\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ajax/move.php:17 +#, php-format +msgid "Could not move %s - File with this name already exists" +msgstr "" + +#: ajax/move.php:27 ajax/move.php:30 +#, php-format +msgid "Could not move %s" +msgstr "" + +#: ajax/rename.php:22 ajax/rename.php:25 +msgid "Unable to rename file" +msgstr "" + +#: ajax/upload.php:19 +msgid "No file was uploaded. Unknown error" +msgstr "" + +#: ajax/upload.php:26 +msgid "There is no error, the file uploaded with success" +msgstr "" + +#: ajax/upload.php:27 +msgid "" +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " +msgstr "" + +#: ajax/upload.php:29 +msgid "" +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in " +"the HTML form" +msgstr "" + +#: ajax/upload.php:31 +msgid "The uploaded file was only partially uploaded" +msgstr "" + +#: ajax/upload.php:32 +msgid "No file was uploaded" +msgstr "" + +#: ajax/upload.php:33 +msgid "Missing a temporary folder" +msgstr "" + +#: ajax/upload.php:34 +msgid "Failed to write to disk" +msgstr "" + +#: ajax/upload.php:52 +msgid "Not enough storage available" +msgstr "" + +#: ajax/upload.php:83 +msgid "Invalid directory." +msgstr "" + +#: appinfo/app.php:10 +msgid "Files" +msgstr "" + +#: js/fileactions.js:125 +msgid "Delete permanently" +msgstr "" + +#: js/fileactions.js:127 templates/index.php:91 templates/index.php:92 +msgid "Delete" +msgstr "" + +#: js/fileactions.js:193 +msgid "Rename" +msgstr "" + +#: js/filelist.js:49 js/filelist.js:52 js/files.js:292 js/files.js:408 +#: js/files.js:439 +msgid "Pending" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 +msgid "undo" +msgstr "" + +#: js/filelist.js:297 +msgid "replaced {new_name} with {old_name}" +msgstr "" + +#: js/filelist.js:322 +msgid "perform delete operation" +msgstr "" + +#: js/files.js:52 +msgid "'.' is an invalid file name." +msgstr "" + +#: js/files.js:56 +msgid "File name cannot be empty." +msgstr "" + +#: js/files.js:64 +msgid "" +"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not " +"allowed." +msgstr "" + +#: js/files.js:78 +msgid "Your storage is full, files can not be updated or synced anymore!" +msgstr "" + +#: js/files.js:82 +msgid "Your storage is almost full ({usedSpacePercent}%)" +msgstr "" + +#: js/files.js:225 +msgid "" +"Your download is being prepared. This might take some time if the files are " +"big." +msgstr "" + +#: js/files.js:262 +msgid "Unable to upload your file as it is a directory or has 0 bytes" +msgstr "" + +#: js/files.js:262 +msgid "Upload Error" +msgstr "" + +#: js/files.js:273 +msgid "Close" +msgstr "" + +#: js/files.js:312 +msgid "1 file uploading" +msgstr "" + +#: js/files.js:315 js/files.js:370 js/files.js:385 +msgid "{count} files uploading" +msgstr "" + +#: js/files.js:388 js/files.js:423 +msgid "Upload cancelled." +msgstr "" + +#: js/files.js:497 +msgid "" +"File upload is in progress. Leaving the page now will cancel the upload." +msgstr "" + +#: js/files.js:570 +msgid "URL cannot be empty." +msgstr "" + +#: js/files.js:575 +msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" +msgstr "" + +#: js/files.js:949 templates/index.php:67 +msgid "Name" +msgstr "" + +#: js/files.js:950 templates/index.php:78 +msgid "Size" +msgstr "" + +#: js/files.js:951 templates/index.php:80 +msgid "Modified" +msgstr "" + +#: js/files.js:970 +msgid "1 folder" +msgstr "" + +#: js/files.js:972 +msgid "{count} folders" +msgstr "" + +#: js/files.js:980 +msgid "1 file" +msgstr "" + +#: js/files.js:982 +msgid "{count} files" +msgstr "" + +#: lib/helper.php:11 templates/index.php:18 +msgid "Upload" +msgstr "" + +#: templates/admin.php:5 +msgid "File handling" +msgstr "" + +#: templates/admin.php:7 +msgid "Maximum upload size" +msgstr "" + +#: templates/admin.php:10 +msgid "max. possible: " +msgstr "" + +#: templates/admin.php:15 +msgid "Needed for multi-file and folder downloads." +msgstr "" + +#: templates/admin.php:17 +msgid "Enable ZIP-download" +msgstr "" + +#: templates/admin.php:20 +msgid "0 is unlimited" +msgstr "" + +#: templates/admin.php:22 +msgid "Maximum input size for ZIP files" +msgstr "" + +#: templates/admin.php:26 +msgid "Save" +msgstr "" + +#: templates/index.php:7 +msgid "New" +msgstr "" + +#: templates/index.php:10 +msgid "Text file" +msgstr "" + +#: templates/index.php:12 +msgid "Folder" +msgstr "" + +#: templates/index.php:14 +msgid "From link" +msgstr "" + +#: templates/index.php:40 +msgid "Deleted files" +msgstr "" + +#: templates/index.php:46 +msgid "Cancel upload" +msgstr "" + +#: templates/index.php:59 +msgid "Nothing in here. Upload something!" +msgstr "" + +#: templates/index.php:73 +msgid "Download" +msgstr "" + +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "" + +#: templates/index.php:105 +msgid "Upload too large" +msgstr "" + +#: templates/index.php:107 +msgid "" +"The files you are trying to upload exceed the maximum size for file uploads " +"on this server." +msgstr "" + +#: templates/index.php:112 +msgid "Files are being scanned, please wait." +msgstr "" + +#: templates/index.php:115 +msgid "Current scanning" +msgstr "" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/my_MM/files_encryption.po b/l10n/my_MM/files_encryption.po new file mode 100644 index 0000000000..e6b714b2cb --- /dev/null +++ b/l10n/my_MM/files_encryption.po @@ -0,0 +1,38 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2012-08-12 22:33+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my_MM\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: templates/settings-personal.php:4 templates/settings.php:5 +msgid "Encryption" +msgstr "" + +#: templates/settings-personal.php:7 +msgid "File encryption is enabled." +msgstr "" + +#: templates/settings-personal.php:11 +msgid "The following file types will not be encrypted:" +msgstr "" + +#: templates/settings.php:7 +msgid "Exclude the following file types from encryption:" +msgstr "" + +#: templates/settings.php:12 +msgid "None" +msgstr "" diff --git a/l10n/my_MM/files_external.po b/l10n/my_MM/files_external.po new file mode 100644 index 0000000000..4e24ec0555 --- /dev/null +++ b/l10n/my_MM/files_external.po @@ -0,0 +1,120 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2012-08-12 22:34+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my_MM\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: js/dropbox.js:7 js/dropbox.js:25 js/google.js:7 js/google.js:23 +msgid "Access granted" +msgstr "" + +#: js/dropbox.js:28 js/dropbox.js:74 js/dropbox.js:79 js/dropbox.js:86 +msgid "Error configuring Dropbox storage" +msgstr "" + +#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40 +msgid "Grant access" +msgstr "" + +#: js/dropbox.js:73 js/google.js:72 +msgid "Fill out all required fields" +msgstr "" + +#: js/dropbox.js:85 +msgid "Please provide a valid Dropbox app key and secret." +msgstr "" + +#: js/google.js:26 js/google.js:73 js/google.js:78 +msgid "Error configuring Google Drive storage" +msgstr "" + +#: lib/config.php:398 +msgid "" +"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " +"is not possible. Please ask your system administrator to install it." +msgstr "" + +#: lib/config.php:401 +msgid "" +"Warning: The FTP support in PHP is not enabled or installed. Mounting" +" of FTP shares is not possible. Please ask your system administrator to " +"install it." +msgstr "" + +#: templates/settings.php:3 +msgid "External Storage" +msgstr "" + +#: templates/settings.php:8 templates/settings.php:22 +msgid "Mount point" +msgstr "" + +#: templates/settings.php:9 +msgid "Backend" +msgstr "" + +#: templates/settings.php:10 +msgid "Configuration" +msgstr "" + +#: templates/settings.php:11 +msgid "Options" +msgstr "" + +#: templates/settings.php:12 +msgid "Applicable" +msgstr "" + +#: templates/settings.php:27 +msgid "Add mount point" +msgstr "" + +#: templates/settings.php:85 +msgid "None set" +msgstr "" + +#: templates/settings.php:86 +msgid "All Users" +msgstr "" + +#: templates/settings.php:87 +msgid "Groups" +msgstr "" + +#: templates/settings.php:95 +msgid "Users" +msgstr "" + +#: templates/settings.php:108 templates/settings.php:109 +#: templates/settings.php:144 templates/settings.php:145 +msgid "Delete" +msgstr "" + +#: templates/settings.php:124 +msgid "Enable User External Storage" +msgstr "" + +#: templates/settings.php:125 +msgid "Allow users to mount their own external storage" +msgstr "" + +#: templates/settings.php:136 +msgid "SSL root certificates" +msgstr "" + +#: templates/settings.php:154 +msgid "Import Root Certificate" +msgstr "" diff --git a/l10n/my_MM/files_sharing.po b/l10n/my_MM/files_sharing.po new file mode 100644 index 0000000000..2886a4d02b --- /dev/null +++ b/l10n/my_MM/files_sharing.po @@ -0,0 +1,48 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2012-08-12 22:35+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my_MM\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: templates/authenticate.php:4 +msgid "Password" +msgstr "" + +#: templates/authenticate.php:6 +msgid "Submit" +msgstr "" + +#: templates/public.php:9 +#, php-format +msgid "%s shared the folder %s with you" +msgstr "" + +#: templates/public.php:11 +#, php-format +msgid "%s shared the file %s with you" +msgstr "" + +#: templates/public.php:14 templates/public.php:30 +msgid "Download" +msgstr "" + +#: templates/public.php:29 +msgid "No preview available for" +msgstr "" + +#: templates/public.php:35 +msgid "web services under your control" +msgstr "" diff --git a/l10n/my_MM/files_trashbin.po b/l10n/my_MM/files_trashbin.po new file mode 100644 index 0000000000..33f2492dba --- /dev/null +++ b/l10n/my_MM/files_trashbin.po @@ -0,0 +1,76 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" +"Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my_MM\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ajax/delete.php:40 +#, php-format +msgid "Couldn't delete %s permanently" +msgstr "" + +#: ajax/undelete.php:41 +#, php-format +msgid "Couldn't restore %s" +msgstr "" + +#: js/trash.js:7 js/trash.js:96 +msgid "perform restore operation" +msgstr "" + +#: js/trash.js:34 +msgid "delete file permanently" +msgstr "" + +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 +msgid "Name" +msgstr "" + +#: js/trash.js:152 templates/index.php:27 +msgid "Deleted" +msgstr "" + +#: js/trash.js:161 +msgid "1 folder" +msgstr "" + +#: js/trash.js:163 +msgid "{count} folders" +msgstr "" + +#: js/trash.js:171 +msgid "1 file" +msgstr "" + +#: js/trash.js:173 +msgid "{count} files" +msgstr "" + +#: templates/index.php:9 +msgid "Nothing in here. Your trash bin is empty!" +msgstr "" + +#: templates/index.php:20 templates/index.php:22 +msgid "Restore" +msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/my_MM/files_versions.po b/l10n/my_MM/files_versions.po new file mode 100644 index 0000000000..4fac18084e --- /dev/null +++ b/l10n/my_MM/files_versions.po @@ -0,0 +1,65 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2012-08-12 22:37+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my_MM\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ajax/rollbackVersion.php:15 +#, php-format +msgid "Could not revert: %s" +msgstr "" + +#: history.php:40 +msgid "success" +msgstr "" + +#: history.php:42 +#, php-format +msgid "File %s was reverted to version %s" +msgstr "" + +#: history.php:49 +msgid "failure" +msgstr "" + +#: history.php:51 +#, php-format +msgid "File %s could not be reverted to version %s" +msgstr "" + +#: history.php:68 +msgid "No old versions available" +msgstr "" + +#: history.php:73 +msgid "No path specified" +msgstr "" + +#: js/versions.js:16 +msgid "History" +msgstr "" + +#: templates/history.php:20 +msgid "Revert a file to a previous version by clicking on its revert button" +msgstr "" + +#: templates/settings.php:3 +msgid "Files Versioning" +msgstr "" + +#: templates/settings.php:4 +msgid "Enable" +msgstr "" diff --git a/l10n/my_MM/lib.po b/l10n/my_MM/lib.po new file mode 100644 index 0000000000..456137d82d --- /dev/null +++ b/l10n/my_MM/lib.po @@ -0,0 +1,253 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2012-07-27 22:23+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my_MM\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: app.php:349 +msgid "Help" +msgstr "" + +#: app.php:362 +msgid "Personal" +msgstr "" + +#: app.php:373 +msgid "Settings" +msgstr "" + +#: app.php:385 +msgid "Users" +msgstr "" + +#: app.php:398 +msgid "Apps" +msgstr "Apps" + +#: app.php:406 +msgid "Admin" +msgstr "" + +#: files.php:202 +msgid "ZIP download is turned off." +msgstr "" + +#: files.php:203 +msgid "Files need to be downloaded one by one." +msgstr "" + +#: files.php:204 files.php:231 +msgid "Back to Files" +msgstr "" + +#: files.php:228 +msgid "Selected files too large to generate zip file." +msgstr "" + +#: helper.php:228 +msgid "couldn't be determined" +msgstr "" + +#: json.php:28 +msgid "Application is not enabled" +msgstr "" + +#: json.php:39 json.php:62 json.php:73 +msgid "Authentication error" +msgstr "" + +#: json.php:51 +msgid "Token expired. Please reload page." +msgstr "" + +#: search/provider/file.php:17 search/provider/file.php:35 +msgid "Files" +msgstr "" + +#: search/provider/file.php:26 search/provider/file.php:33 +msgid "Text" +msgstr "" + +#: search/provider/file.php:29 +msgid "Images" +msgstr "" + +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:294 setup.php:339 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:427 setup.php:494 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 +#: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 +#: setup.php:545 setup.php:552 setup.php:561 setup.php:569 setup.php:578 +#: setup.php:584 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 +#: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 +#: setup.php:546 setup.php:562 setup.php:570 setup.php:579 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:273 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:274 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:279 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:280 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:553 setup.php:585 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:649 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:651 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + +#: template.php:113 +msgid "seconds ago" +msgstr "" + +#: template.php:114 +msgid "1 minute ago" +msgstr "" + +#: template.php:115 +#, php-format +msgid "%d minutes ago" +msgstr "" + +#: template.php:116 +msgid "1 hour ago" +msgstr "" + +#: template.php:117 +#, php-format +msgid "%d hours ago" +msgstr "" + +#: template.php:118 +msgid "today" +msgstr "" + +#: template.php:119 +msgid "yesterday" +msgstr "" + +#: template.php:120 +#, php-format +msgid "%d days ago" +msgstr "" + +#: template.php:121 +msgid "last month" +msgstr "" + +#: template.php:122 +#, php-format +msgid "%d months ago" +msgstr "" + +#: template.php:123 +msgid "last year" +msgstr "" + +#: template.php:124 +msgid "years ago" +msgstr "" + +#: updater.php:78 +#, php-format +msgid "%s is available. Get more information" +msgstr "" + +#: updater.php:81 +msgid "up to date" +msgstr "" + +#: updater.php:84 +msgid "updates check is disabled" +msgstr "" + +#: vcategories.php:188 vcategories.php:249 +#, php-format +msgid "Could not find category \"%s\"" +msgstr "" diff --git a/l10n/my_MM/settings.po b/l10n/my_MM/settings.po new file mode 100644 index 0000000000..ade1a7d73e --- /dev/null +++ b/l10n/my_MM/settings.po @@ -0,0 +1,496 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2011-07-25 16:05+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my_MM\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ajax/apps/ocs.php:20 +msgid "Unable to load list from App Store" +msgstr "" + +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/togglegroups.php:18 +msgid "Authentication error" +msgstr "" + +#: ajax/changedisplayname.php:32 +msgid "Unable to change display name" +msgstr "" + +#: ajax/creategroup.php:10 +msgid "Group already exists" +msgstr "" + +#: ajax/creategroup.php:19 +msgid "Unable to add group" +msgstr "" + +#: ajax/enableapp.php:11 +msgid "Could not enable app. " +msgstr "" + +#: ajax/lostpassword.php:12 +msgid "Email saved" +msgstr "" + +#: ajax/lostpassword.php:14 +msgid "Invalid email" +msgstr "" + +#: ajax/removegroup.php:13 +msgid "Unable to delete group" +msgstr "" + +#: ajax/removeuser.php:24 +msgid "Unable to delete user" +msgstr "" + +#: ajax/setlanguage.php:15 +msgid "Language changed" +msgstr "" + +#: ajax/setlanguage.php:17 ajax/setlanguage.php:20 +msgid "Invalid request" +msgstr "" + +#: ajax/togglegroups.php:12 +msgid "Admins can't remove themself from the admin group" +msgstr "" + +#: ajax/togglegroups.php:28 +#, php-format +msgid "Unable to add user to group %s" +msgstr "" + +#: ajax/togglegroups.php:34 +#, php-format +msgid "Unable to remove user from group %s" +msgstr "" + +#: ajax/updateapp.php:14 +msgid "Couldn't update app." +msgstr "" + +#: js/apps.js:30 +msgid "Update to {appversion}" +msgstr "" + +#: js/apps.js:36 js/apps.js:76 +msgid "Disable" +msgstr "" + +#: js/apps.js:36 js/apps.js:64 +msgid "Enable" +msgstr "" + +#: js/apps.js:55 +msgid "Please wait...." +msgstr "" + +#: js/apps.js:84 +msgid "Updating...." +msgstr "" + +#: js/apps.js:87 +msgid "Error while updating app" +msgstr "" + +#: js/apps.js:87 +msgid "Error" +msgstr "" + +#: js/apps.js:90 +msgid "Updated" +msgstr "" + +#: js/personal.js:96 +msgid "Saving..." +msgstr "" + +#: js/users.js:30 +msgid "deleted" +msgstr "" + +#: js/users.js:30 +msgid "undo" +msgstr "" + +#: js/users.js:62 +msgid "Unable to remove user" +msgstr "" + +#: js/users.js:75 templates/users.php:26 templates/users.php:80 +#: templates/users.php:105 +msgid "Groups" +msgstr "" + +#: js/users.js:78 templates/users.php:82 templates/users.php:119 +msgid "Group Admin" +msgstr "" + +#: js/users.js:99 templates/users.php:161 +msgid "Delete" +msgstr "" + +#: js/users.js:191 +msgid "add group" +msgstr "" + +#: js/users.js:352 +msgid "A valid username must be provided" +msgstr "" + +#: js/users.js:353 js/users.js:359 js/users.js:374 +msgid "Error creating user" +msgstr "" + +#: js/users.js:358 +msgid "A valid password must be provided" +msgstr "" + +#: personal.php:29 personal.php:30 +msgid "__language_name__" +msgstr "" + +#: templates/admin.php:15 +msgid "Security Warning" +msgstr "" + +#: templates/admin.php:18 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides is not working. We " +"strongly suggest that you configure your webserver in a way that the data " +"directory is no longer accessible or you move the data directory outside the" +" webserver document root." +msgstr "" + +#: templates/admin.php:29 +msgid "Setup Warning" +msgstr "" + +#: templates/admin.php:32 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: templates/admin.php:33 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + +#: templates/admin.php:44 +msgid "Module 'fileinfo' missing" +msgstr "" + +#: templates/admin.php:47 +msgid "" +"The PHP module 'fileinfo' is missing. We strongly recommend to enable this " +"module to get best results with mime-type detection." +msgstr "" + +#: templates/admin.php:58 +msgid "Locale not working" +msgstr "" + +#: templates/admin.php:61 +msgid "" +"This ownCloud server can't set system locale to " +"\"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with" +" certain characters in file names. We strongly suggest to install the " +"required packages on your system to support en_US.UTF-8/en_US.UTF8." +msgstr "" + +#: templates/admin.php:72 +msgid "Internet connection not working" +msgstr "" + +#: templates/admin.php:75 +msgid "" +"This ownCloud server has no working internet connection. This means that " +"some of the features like mounting of external storage, notifications about " +"updates or installation of 3rd party apps don´t work. Accessing files from " +"remote and sending of notification emails might also not work. We suggest to" +" enable internet connection for this server if you want to have all features" +" of ownCloud." +msgstr "" + +#: templates/admin.php:89 +msgid "Cron" +msgstr "" + +#: templates/admin.php:98 +msgid "Execute one task with each page loaded" +msgstr "" + +#: templates/admin.php:108 +msgid "" +"cron.php is registered at a webcron service. Call the cron.php page in the " +"owncloud root once a minute over http." +msgstr "" + +#: templates/admin.php:118 +msgid "" +"Use systems cron service. Call the cron.php file in the owncloud folder via " +"a system cronjob once a minute." +msgstr "" + +#: templates/admin.php:125 +msgid "Sharing" +msgstr "" + +#: templates/admin.php:131 +msgid "Enable Share API" +msgstr "" + +#: templates/admin.php:132 +msgid "Allow apps to use the Share API" +msgstr "" + +#: templates/admin.php:139 +msgid "Allow links" +msgstr "" + +#: templates/admin.php:140 +msgid "Allow users to share items to the public with links" +msgstr "" + +#: templates/admin.php:147 +msgid "Allow resharing" +msgstr "" + +#: templates/admin.php:148 +msgid "Allow users to share items shared with them again" +msgstr "" + +#: templates/admin.php:155 +msgid "Allow users to share with anyone" +msgstr "" + +#: templates/admin.php:158 +msgid "Allow users to only share with users in their groups" +msgstr "" + +#: templates/admin.php:165 +msgid "Security" +msgstr "" + +#: templates/admin.php:178 +msgid "Enforce HTTPS" +msgstr "" + +#: templates/admin.php:179 +msgid "" +"Enforces the clients to connect to ownCloud via an encrypted connection." +msgstr "" + +#: templates/admin.php:182 +msgid "" +"Please connect to this ownCloud instance via HTTPS to enable or disable the " +"SSL enforcement." +msgstr "" + +#: templates/admin.php:192 +msgid "Log" +msgstr "" + +#: templates/admin.php:193 +msgid "Log level" +msgstr "" + +#: templates/admin.php:220 +msgid "More" +msgstr "" + +#: templates/admin.php:227 templates/personal.php:98 +msgid "Version" +msgstr "" + +#: templates/admin.php:230 templates/personal.php:100 +msgid "" +"Developed by the ownCloud community, the source code is " +"licensed under the AGPL." +msgstr "" + +#: templates/apps.php:10 +msgid "Add your App" +msgstr "" + +#: templates/apps.php:11 +msgid "More Apps" +msgstr "" + +#: templates/apps.php:24 +msgid "Select an App" +msgstr "" + +#: templates/apps.php:28 +msgid "See application page at apps.owncloud.com" +msgstr "" + +#: templates/apps.php:29 +msgid "-licensed by " +msgstr "" + +#: templates/apps.php:31 +msgid "Update" +msgstr "" + +#: templates/help.php:3 +msgid "User Documentation" +msgstr "" + +#: templates/help.php:4 +msgid "Administrator Documentation" +msgstr "" + +#: templates/help.php:6 +msgid "Online Documentation" +msgstr "" + +#: templates/help.php:7 +msgid "Forum" +msgstr "" + +#: templates/help.php:9 +msgid "Bugtracker" +msgstr "" + +#: templates/help.php:11 +msgid "Commercial Support" +msgstr "" + +#: templates/personal.php:8 +#, php-format +msgid "You have used %s of the available %s" +msgstr "" + +#: templates/personal.php:14 +msgid "Get the apps to sync your files" +msgstr "" + +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:79 +msgid "Password" +msgstr "" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 +msgid "Unable to change your password" +msgstr "" + +#: templates/personal.php:39 +msgid "Current password" +msgstr "" + +#: templates/personal.php:40 +msgid "New password" +msgstr "" + +#: templates/personal.php:42 +msgid "Change password" +msgstr "" + +#: templates/personal.php:54 templates/users.php:78 +msgid "Display Name" +msgstr "" + +#: templates/personal.php:55 +msgid "Your display name was changed" +msgstr "" + +#: templates/personal.php:56 +msgid "Unable to change your display name" +msgstr "" + +#: templates/personal.php:59 +msgid "Change display name" +msgstr "" + +#: templates/personal.php:68 +msgid "Email" +msgstr "" + +#: templates/personal.php:69 +msgid "Your email address" +msgstr "" + +#: templates/personal.php:70 +msgid "Fill in an email address to enable password recovery" +msgstr "" + +#: templates/personal.php:76 templates/personal.php:77 +msgid "Language" +msgstr "" + +#: templates/personal.php:82 +msgid "Help translate" +msgstr "" + +#: templates/personal.php:87 +msgid "WebDAV" +msgstr "" + +#: templates/personal.php:89 +msgid "Use this address to connect to your ownCloud in your file manager" +msgstr "" + +#: templates/users.php:21 templates/users.php:77 +msgid "Login Name" +msgstr "" + +#: templates/users.php:32 +msgid "Create" +msgstr "" + +#: templates/users.php:35 +msgid "Default Storage" +msgstr "" + +#: templates/users.php:41 templates/users.php:139 +msgid "Unlimited" +msgstr "" + +#: templates/users.php:59 templates/users.php:154 +msgid "Other" +msgstr "" + +#: templates/users.php:84 +msgid "Storage" +msgstr "" + +#: templates/users.php:95 +msgid "change display name" +msgstr "" + +#: templates/users.php:99 +msgid "set new password" +msgstr "" + +#: templates/users.php:134 +msgid "Default" +msgstr "" diff --git a/l10n/my_MM/user_ldap.po b/l10n/my_MM/user_ldap.po new file mode 100644 index 0000000000..3c0718016b --- /dev/null +++ b/l10n/my_MM/user_ldap.po @@ -0,0 +1,309 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2012-08-12 22:45+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my_MM\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ajax/deleteConfiguration.php:34 +msgid "Failed to delete the server configuration" +msgstr "" + +#: ajax/testConfiguration.php:36 +msgid "The configuration is valid and the connection could be established!" +msgstr "" + +#: ajax/testConfiguration.php:39 +msgid "" +"The configuration is valid, but the Bind failed. Please check the server " +"settings and credentials." +msgstr "" + +#: ajax/testConfiguration.php:43 +msgid "" +"The configuration is invalid. Please look in the ownCloud log for further " +"details." +msgstr "" + +#: js/settings.js:66 +msgid "Deletion failed" +msgstr "" + +#: js/settings.js:82 +msgid "Take over settings from recent server configuration?" +msgstr "" + +#: js/settings.js:83 +msgid "Keep settings?" +msgstr "" + +#: js/settings.js:97 +msgid "Cannot add server configuration" +msgstr "" + +#: js/settings.js:121 +msgid "Connection test succeeded" +msgstr "" + +#: js/settings.js:126 +msgid "Connection test failed" +msgstr "" + +#: js/settings.js:136 +msgid "Do you really want to delete the current Server Configuration?" +msgstr "" + +#: js/settings.js:137 +msgid "Confirm Deletion" +msgstr "" + +#: templates/settings.php:8 +msgid "" +"Warning: Apps user_ldap and user_webdavauth are incompatible. You may" +" experience unexpected behaviour. Please ask your system administrator to " +"disable one of them." +msgstr "" + +#: templates/settings.php:11 +msgid "" +"Warning: The PHP LDAP module is not installed, the backend will not " +"work. Please ask your system administrator to install it." +msgstr "" + +#: templates/settings.php:15 +msgid "Server configuration" +msgstr "" + +#: templates/settings.php:18 +msgid "Add Server Configuration" +msgstr "" + +#: templates/settings.php:23 +msgid "Host" +msgstr "" + +#: templates/settings.php:25 +msgid "" +"You can omit the protocol, except you require SSL. Then start with ldaps://" +msgstr "" + +#: templates/settings.php:26 +msgid "Base DN" +msgstr "" + +#: templates/settings.php:27 +msgid "One Base DN per line" +msgstr "" + +#: templates/settings.php:28 +msgid "You can specify Base DN for users and groups in the Advanced tab" +msgstr "" + +#: templates/settings.php:30 +msgid "User DN" +msgstr "" + +#: templates/settings.php:32 +msgid "" +"The DN of the client user with which the bind shall be done, e.g. " +"uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password " +"empty." +msgstr "" + +#: templates/settings.php:33 +msgid "Password" +msgstr "" + +#: templates/settings.php:36 +msgid "For anonymous access, leave DN and Password empty." +msgstr "" + +#: templates/settings.php:37 +msgid "User Login Filter" +msgstr "" + +#: templates/settings.php:40 +#, php-format +msgid "" +"Defines the filter to apply, when login is attempted. %%uid replaces the " +"username in the login action." +msgstr "" + +#: templates/settings.php:41 +#, php-format +msgid "use %%uid placeholder, e.g. \"uid=%%uid\"" +msgstr "" + +#: templates/settings.php:42 +msgid "User List Filter" +msgstr "" + +#: templates/settings.php:45 +msgid "Defines the filter to apply, when retrieving users." +msgstr "" + +#: templates/settings.php:46 +msgid "without any placeholder, e.g. \"objectClass=person\"." +msgstr "" + +#: templates/settings.php:47 +msgid "Group Filter" +msgstr "" + +#: templates/settings.php:50 +msgid "Defines the filter to apply, when retrieving groups." +msgstr "" + +#: templates/settings.php:51 +msgid "without any placeholder, e.g. \"objectClass=posixGroup\"." +msgstr "" + +#: templates/settings.php:55 +msgid "Connection Settings" +msgstr "" + +#: templates/settings.php:57 +msgid "Configuration Active" +msgstr "" + +#: templates/settings.php:57 +msgid "When unchecked, this configuration will be skipped." +msgstr "" + +#: templates/settings.php:58 +msgid "Port" +msgstr "" + +#: templates/settings.php:59 +msgid "Backup (Replica) Host" +msgstr "" + +#: templates/settings.php:59 +msgid "" +"Give an optional backup host. It must be a replica of the main LDAP/AD " +"server." +msgstr "" + +#: templates/settings.php:60 +msgid "Backup (Replica) Port" +msgstr "" + +#: templates/settings.php:61 +msgid "Disable Main Server" +msgstr "" + +#: templates/settings.php:61 +msgid "When switched on, ownCloud will only connect to the replica server." +msgstr "" + +#: templates/settings.php:62 +msgid "Use TLS" +msgstr "" + +#: templates/settings.php:62 +msgid "Do not use it additionally for LDAPS connections, it will fail." +msgstr "" + +#: templates/settings.php:63 +msgid "Case insensitve LDAP server (Windows)" +msgstr "" + +#: templates/settings.php:64 +msgid "Turn off SSL certificate validation." +msgstr "" + +#: templates/settings.php:64 +msgid "" +"If connection only works with this option, import the LDAP server's SSL " +"certificate in your ownCloud server." +msgstr "" + +#: templates/settings.php:64 +msgid "Not recommended, use for testing only." +msgstr "" + +#: templates/settings.php:65 +msgid "in seconds. A change empties the cache." +msgstr "" + +#: templates/settings.php:67 +msgid "Directory Settings" +msgstr "" + +#: templates/settings.php:69 +msgid "User Display Name Field" +msgstr "" + +#: templates/settings.php:69 +msgid "The LDAP attribute to use to generate the user`s ownCloud name." +msgstr "" + +#: templates/settings.php:70 +msgid "Base User Tree" +msgstr "" + +#: templates/settings.php:70 +msgid "One User Base DN per line" +msgstr "" + +#: templates/settings.php:71 +msgid "User Search Attributes" +msgstr "" + +#: templates/settings.php:71 templates/settings.php:74 +msgid "Optional; one attribute per line" +msgstr "" + +#: templates/settings.php:72 +msgid "Group Display Name Field" +msgstr "" + +#: templates/settings.php:72 +msgid "The LDAP attribute to use to generate the groups`s ownCloud name." +msgstr "" + +#: templates/settings.php:73 +msgid "Base Group Tree" +msgstr "" + +#: templates/settings.php:73 +msgid "One Group Base DN per line" +msgstr "" + +#: templates/settings.php:74 +msgid "Group Search Attributes" +msgstr "" + +#: templates/settings.php:75 +msgid "Group-Member association" +msgstr "" + +#: templates/settings.php:77 +msgid "Special Attributes" +msgstr "" + +#: templates/settings.php:80 +msgid "in bytes" +msgstr "" + +#: templates/settings.php:82 +msgid "" +"Leave empty for user name (default). Otherwise, specify an LDAP/AD " +"attribute." +msgstr "" + +#: templates/settings.php:86 +msgid "Help" +msgstr "" diff --git a/l10n/my_MM/user_webdavauth.po b/l10n/my_MM/user_webdavauth.po new file mode 100644 index 0000000000..45d8ff660d --- /dev/null +++ b/l10n/my_MM/user_webdavauth.po @@ -0,0 +1,33 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2012-11-09 09:06+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my_MM\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: templates/settings.php:3 +msgid "WebDAV Authentication" +msgstr "" + +#: templates/settings.php:4 +msgid "URL: http://" +msgstr "" + +#: templates/settings.php:7 +msgid "" +"ownCloud will send the user credentials to this URL. This plugin checks the " +"response and will interpret the HTTP statuscodes 401 and 403 as invalid " +"credentials, and all other responses as valid credentials." +msgstr "" diff --git a/l10n/nb_NO/files_trashbin.po b/l10n/nb_NO/files_trashbin.po index d745e97940..81d8126f33 100644 --- a/l10n/nb_NO/files_trashbin.po +++ b/l10n/nb_NO/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: nb_NO\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Navn" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 mappe" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} mapper" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 fil" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} filer" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/nl/files_trashbin.po b/l10n/nl/files_trashbin.po index 3798b0d116..e418e34f1d 100644 --- a/l10n/nl/files_trashbin.po +++ b/l10n/nl/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: André Koot \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Kon %s niet permanent verwijderen" @@ -28,35 +28,39 @@ msgstr "Kon %s niet permanent verwijderen" msgid "Couldn't restore %s" msgstr "Kon %s niet herstellen" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "uitvoeren restore operatie" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "verwijder bestanden definitief" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Naam" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Verwijderd" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 map" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} mappen" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 bestand" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} bestanden" @@ -67,3 +71,7 @@ msgstr "Niets te vinden. Uw prullenbak is leeg!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Herstellen" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/nn_NO/files_trashbin.po b/l10n/nn_NO/files_trashbin.po index 43941fff2c..ef3eb61285 100644 --- a/l10n/nn_NO/files_trashbin.po +++ b/l10n/nn_NO/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: nn_NO\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Namn" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/oc/files_trashbin.po b/l10n/oc/files_trashbin.po index f3243c02aa..318cc3209b 100644 --- a/l10n/oc/files_trashbin.po +++ b/l10n/oc/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: oc\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nom" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/pl/files_trashbin.po b/l10n/pl/files_trashbin.po index eea8ff8f6d..a793874bb4 100644 --- a/l10n/pl/files_trashbin.po +++ b/l10n/pl/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 09:50+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nazwa" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 folder" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} foldery" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 plik" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} pliki" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Przywróć" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/pl_PL/files_trashbin.po b/l10n/pl_PL/files_trashbin.po index d35b236c8f..e158e5a65e 100644 --- a/l10n/pl_PL/files_trashbin.po +++ b/l10n/pl_PL/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: pl_PL\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/pt_BR/files.po b/l10n/pt_BR/files.po index 9e297e235b..dc448a8091 100644 --- a/l10n/pt_BR/files.po +++ b/l10n/pt_BR/files.po @@ -10,15 +10,16 @@ # Rodrigo Tavares , 2013. # , 2012. # Thiago Vicente , 2012. +# Tulio Simoes Martins Padilha , 2013. # Unforgiving Fallout <>, 2012. # Van Der Fran , 2011, 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 20:00+0000\n" +"Last-Translator: tuliouel \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -99,8 +100,8 @@ msgstr "Excluir" msgid "Rename" msgstr "Renomear" -#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 -#: js/files.js:438 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:292 js/files.js:408 +#: js/files.js:439 msgid "Pending" msgstr "Pendente" @@ -158,74 +159,74 @@ msgstr "Seu armazenamento está cheio, arquivos não serão mais atualizados nem msgid "Your storage is almost full ({usedSpacePercent}%)" msgstr "Seu armazenamento está quase cheio ({usedSpacePercent}%)" -#: js/files.js:224 +#: js/files.js:225 msgid "" "Your download is being prepared. This might take some time if the files are " "big." msgstr "Seu download está sendo preparado. Isto pode levar algum tempo se os arquivos forem grandes." -#: js/files.js:261 +#: js/files.js:262 msgid "Unable to upload your file as it is a directory or has 0 bytes" msgstr "Impossível enviar seus arquivo como diretório ou ele tem 0 bytes." -#: js/files.js:261 +#: js/files.js:262 msgid "Upload Error" msgstr "Erro de envio" -#: js/files.js:272 +#: js/files.js:273 msgid "Close" msgstr "Fechar" -#: js/files.js:311 +#: js/files.js:312 msgid "1 file uploading" msgstr "enviando 1 arquivo" -#: js/files.js:314 js/files.js:369 js/files.js:384 +#: js/files.js:315 js/files.js:370 js/files.js:385 msgid "{count} files uploading" msgstr "Enviando {count} arquivos" -#: js/files.js:387 js/files.js:422 +#: js/files.js:388 js/files.js:423 msgid "Upload cancelled." msgstr "Envio cancelado." -#: js/files.js:496 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Upload em andamento. Sair da página agora resultará no cancelamento do envio." -#: js/files.js:569 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL não pode ficar em branco" -#: js/files.js:574 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nome de pasta inválido. O uso de 'Shared' é reservado para o Owncloud" -#: js/files.js:948 templates/index.php:67 +#: js/files.js:949 templates/index.php:67 msgid "Name" msgstr "Nome" -#: js/files.js:949 templates/index.php:78 +#: js/files.js:950 templates/index.php:78 msgid "Size" msgstr "Tamanho" -#: js/files.js:950 templates/index.php:80 +#: js/files.js:951 templates/index.php:80 msgid "Modified" msgstr "Modificado" -#: js/files.js:969 +#: js/files.js:970 msgid "1 folder" msgstr "1 pasta" -#: js/files.js:971 +#: js/files.js:972 msgid "{count} folders" msgstr "{count} pastas" -#: js/files.js:979 +#: js/files.js:980 msgid "1 file" msgstr "1 arquivo" -#: js/files.js:981 +#: js/files.js:982 msgid "{count} files" msgstr "{count} arquivos" @@ -283,7 +284,7 @@ msgstr "Do link" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Arquivos apagados" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/pt_BR/files_trashbin.po b/l10n/pt_BR/files_trashbin.po index e5e109080a..f506517b43 100644 --- a/l10n/pt_BR/files_trashbin.po +++ b/l10n/pt_BR/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" -"PO-Revision-Date: 2013-02-14 00:00+0000\n" -"Last-Translator: rodrigost23 \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Não foi possível excluir %s permanentemente" @@ -28,35 +28,39 @@ msgstr "Não foi possível excluir %s permanentemente" msgid "Couldn't restore %s" msgstr "Não foi possível restaurar %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "realizar operação de restauração" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "excluir arquivo permanentemente" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nome" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Excluído" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 pasta" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} pastas" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 arquivo" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} arquivos" @@ -67,3 +71,7 @@ msgstr "Nada aqui. Sua lixeira está vazia!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Restaurar" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/pt_BR/user_ldap.po b/l10n/pt_BR/user_ldap.po index f3ba82a97b..31113fe0d4 100644 --- a/l10n/pt_BR/user_ldap.po +++ b/l10n/pt_BR/user_ldap.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" -"PO-Revision-Date: 2013-02-18 14:10+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 20:00+0000\n" "Last-Translator: tuliouel \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -46,7 +46,7 @@ msgstr "Remoção falhou" #: js/settings.js:82 msgid "Take over settings from recent server configuration?" -msgstr "" +msgstr "Tomar parámetros de recente configuração de servidor?" #: js/settings.js:83 msgid "Keep settings?" diff --git a/l10n/pt_PT/files_trashbin.po b/l10n/pt_PT/files_trashbin.po index 653dc5d233..87268e151a 100644 --- a/l10n/pt_PT/files_trashbin.po +++ b/l10n/pt_PT/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: Mouxy \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: pt_PT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Não foi possível eliminar %s de forma permanente" @@ -28,35 +28,39 @@ msgstr "Não foi possível eliminar %s de forma permanente" msgid "Couldn't restore %s" msgstr "Não foi possível restaurar %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "Restaurar" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "Eliminar permanentemente o(s) ficheiro(s)" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nome" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Apagado" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 pasta" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} pastas" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 ficheiro" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} ficheiros" @@ -67,3 +71,7 @@ msgstr "Não ha ficheiros. O lixo está vazio" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Restaurar" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/ro/files_trashbin.po b/l10n/ro/files_trashbin.po index 441c56d598..11f9c763ef 100644 --- a/l10n/ro/files_trashbin.po +++ b/l10n/ro/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Nume" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 folder" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} foldare" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 fisier" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} fisiere" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/ru/files_trashbin.po b/l10n/ru/files_trashbin.po index cef3725c58..0ad24b090e 100644 --- a/l10n/ru/files_trashbin.po +++ b/l10n/ru/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: Langaru \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "%s не может быть удалён навсегда" @@ -28,35 +28,39 @@ msgstr "%s не может быть удалён навсегда" msgid "Couldn't restore %s" msgstr "%s не может быть восстановлен" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "выполнить операцию восстановления" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "удалить файл навсегда" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Имя" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Удалён" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 папка" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} папок" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 файл" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} файлов" @@ -67,3 +71,7 @@ msgstr "Здесь ничего нет. Ваша корзина пуста!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Восстановить" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/ru_RU/files_trashbin.po b/l10n/ru_RU/files_trashbin.po index 987521a796..f628f06dec 100644 --- a/l10n/ru_RU/files_trashbin.po +++ b/l10n/ru_RU/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: Langaru \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: ru_RU\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "%s не может быть удалён навсегда" @@ -28,35 +28,39 @@ msgstr "%s не может быть удалён навсегда" msgid "Couldn't restore %s" msgstr "%s не может быть восстановлен" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "выполнить операцию восстановления" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "удалить файл навсегда" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Имя" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Удалён" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 папка" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{количество} папок" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 файл" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{количество} файлов" @@ -67,3 +71,7 @@ msgstr "Здесь ничего нет. Ваша корзина пуста!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Восстановить" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/si_LK/files_trashbin.po b/l10n/si_LK/files_trashbin.po index e19b02db18..da9e298b80 100644 --- a/l10n/si_LK/files_trashbin.po +++ b/l10n/si_LK/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: si_LK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "නම" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 ෆොල්ඩරයක්" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 ගොනුවක්" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/sk/files_trashbin.po b/l10n/sk/files_trashbin.po index 8655044756..99f8cea940 100644 --- a/l10n/sk/files_trashbin.po +++ b/l10n/sk/files_trashbin.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-01-31 16:03+0000\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,7 +17,7 @@ msgstr "" "Language: sk\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/sk_SK/files_trashbin.po b/l10n/sk_SK/files_trashbin.po index c1d5863d67..bf92afc5fa 100644 --- a/l10n/sk_SK/files_trashbin.po +++ b/l10n/sk_SK/files_trashbin.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 09:50+0000\n" -"Last-Translator: mhh \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +19,7 @@ msgstr "" "Language: sk_SK\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Nemožno zmazať %s navždy" @@ -29,35 +29,39 @@ msgstr "Nemožno zmazať %s navždy" msgid "Couldn't restore %s" msgstr "Nemožno obnoviť %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "vykonať obnovu" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "trvalo zmazať súbor" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Meno" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Zmazané" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 priečinok" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} priečinkov" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 súbor" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} súborov" @@ -68,3 +72,7 @@ msgstr "Žiadny obsah. Kôš je prázdny!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Obnoviť" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/sl/files_trashbin.po b/l10n/sl/files_trashbin.po index 6bcfe28d48..4d498e2143 100644 --- a/l10n/sl/files_trashbin.po +++ b/l10n/sl/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: sl\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Ime" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 mapa" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} map" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 datoteka" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} datotek" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/sr/files_trashbin.po b/l10n/sr/files_trashbin.po index 4e1a43a049..90efd4e628 100644 --- a/l10n/sr/files_trashbin.po +++ b/l10n/sr/files_trashbin.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" @@ -18,7 +18,7 @@ msgstr "" "Language: sr\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -28,35 +28,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "врати у претходно стање" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Име" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Обрисано" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 фасцикла" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} фасцикле/и" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 датотека" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} датотеке/а" @@ -67,3 +71,7 @@ msgstr "Овде нема ништа. Корпа за отпатке је пра #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Врати" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/sr@latin/files_trashbin.po b/l10n/sr@latin/files_trashbin.po index a96b8aed4f..3e8b5838ae 100644 --- a/l10n/sr@latin/files_trashbin.po +++ b/l10n/sr@latin/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: sr@latin\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Ime" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/sv/files_trashbin.po b/l10n/sv/files_trashbin.po index 94410d99b9..552ab178fe 100644 --- a/l10n/sv/files_trashbin.po +++ b/l10n/sv/files_trashbin.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: Magnus Höglund \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +19,7 @@ msgstr "" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Kunde inte radera %s permanent" @@ -29,35 +29,39 @@ msgstr "Kunde inte radera %s permanent" msgid "Couldn't restore %s" msgstr "Kunde inte återställa %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "utför återställning" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "radera filen permanent" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Namn" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Raderad" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 mapp" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} mappar" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 fil" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} filer" @@ -68,3 +72,7 @@ msgstr "Ingenting här. Din papperskorg är tom!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Återskapa" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/sw_KE/files_trashbin.po b/l10n/sw_KE/files_trashbin.po index 91113e58ba..b7f7223929 100644 --- a/l10n/sw_KE/files_trashbin.po +++ b/l10n/sw_KE/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: sw_KE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/ta_LK/files_trashbin.po b/l10n/ta_LK/files_trashbin.po index aa8e568266..a58afea6b4 100644 --- a/l10n/ta_LK/files_trashbin.po +++ b/l10n/ta_LK/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: ta_LK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "பெயர்" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 கோப்புறை" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{எண்ணிக்கை} கோப்புறைகள்" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 கோப்பு" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{எண்ணிக்கை} கோப்புகள்" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index bd782be12d..02df7b5a05 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -386,7 +386,7 @@ msgstr "" msgid "The update was successful. Redirecting you to ownCloud now." msgstr "" -#: lostpassword/controller.php:47 +#: lostpassword/controller.php:48 msgid "ownCloud password reset" msgstr "" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index 7d45d571c9..8f2efdd443 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -90,8 +90,8 @@ msgstr "" msgid "Rename" msgstr "" -#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 -#: js/files.js:438 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:292 js/files.js:408 +#: js/files.js:439 msgid "Pending" msgstr "" @@ -149,74 +149,74 @@ msgstr "" msgid "Your storage is almost full ({usedSpacePercent}%)" msgstr "" -#: js/files.js:224 +#: js/files.js:225 msgid "" "Your download is being prepared. This might take some time if the files are " "big." msgstr "" -#: js/files.js:261 +#: js/files.js:262 msgid "Unable to upload your file as it is a directory or has 0 bytes" msgstr "" -#: js/files.js:261 +#: js/files.js:262 msgid "Upload Error" msgstr "" -#: js/files.js:272 +#: js/files.js:273 msgid "Close" msgstr "" -#: js/files.js:311 +#: js/files.js:312 msgid "1 file uploading" msgstr "" -#: js/files.js:314 js/files.js:369 js/files.js:384 +#: js/files.js:315 js/files.js:370 js/files.js:385 msgid "{count} files uploading" msgstr "" -#: js/files.js:387 js/files.js:422 +#: js/files.js:388 js/files.js:423 msgid "Upload cancelled." msgstr "" -#: js/files.js:496 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:569 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:574 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:948 templates/index.php:67 +#: js/files.js:949 templates/index.php:67 msgid "Name" msgstr "" -#: js/files.js:949 templates/index.php:78 +#: js/files.js:950 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:950 templates/index.php:80 +#: js/files.js:951 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:969 +#: js/files.js:970 msgid "1 folder" msgstr "" -#: js/files.js:971 +#: js/files.js:972 msgid "{count} folders" msgstr "" -#: js/files.js:979 +#: js/files.js:980 msgid "1 file" msgstr "" -#: js/files.js:981 +#: js/files.js:982 msgid "{count} files" msgstr "" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index b27519c01e..cc8e3d0e29 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index 6e98b59654..d6eea5a457 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index c1f7c6dcd2..2741ea4adf 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index 0e34b311a8..c54923762d 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ajax/delete.php:24 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 0339eb0917..fa264617a0 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 53147fb1c5..3c8268ee92 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index 6403daf074..5191c36b21 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index cbc32af413..a8cee2070d 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index 15865d8de3..03867180c9 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-20 00:02+0100\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/th_TH/files_trashbin.po b/l10n/th_TH/files_trashbin.po index b7f0801c5e..f97e95d398 100644 --- a/l10n/th_TH/files_trashbin.po +++ b/l10n/th_TH/files_trashbin.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n" "MIME-Version: 1.0\n" @@ -18,7 +18,7 @@ msgstr "" "Language: th_TH\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -28,35 +28,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "ดำเนินการคืนค่า" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "ชื่อ" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "ลบแล้ว" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 โฟลเดอร์" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} โฟลเดอร์" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 ไฟล์" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} ไฟล์" @@ -67,3 +71,7 @@ msgstr "ไม่มีอะไรอยู่ในนี้ ถังขย #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "คืนค่า" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/tr/files_trashbin.po b/l10n/tr/files_trashbin.po index 22a2d9527f..2283359981 100644 --- a/l10n/tr/files_trashbin.po +++ b/l10n/tr/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-19 00:05+0100\n" -"PO-Revision-Date: 2013-02-18 20:10+0000\n" -"Last-Translator: atakan96 \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: tr\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "%s Kalıcı olarak silinemedi" @@ -28,35 +28,39 @@ msgstr "%s Kalıcı olarak silinemedi" msgid "Couldn't restore %s" msgstr "%s Geri yüklenemedi" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "Geri yükleme işlemini gerçekleştir" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "Dosyayı kalıcı olarak sil" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "İsim" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Silindi" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 dizin" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} dizin" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 dosya" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} dosya" @@ -67,3 +71,7 @@ msgstr "Burası boş. Çöp kutun tamamen boş." #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Geri yükle" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/uk/files_trashbin.po b/l10n/uk/files_trashbin.po index 7f2bd9d813..aaaca834b6 100644 --- a/l10n/uk/files_trashbin.po +++ b/l10n/uk/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-20 00:02+0100\n" -"PO-Revision-Date: 2013-02-19 14:20+0000\n" -"Last-Translator: volodya327 \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/delete.php:24 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Неможливо видалити %s назавжди" @@ -28,35 +28,39 @@ msgstr "Неможливо видалити %s назавжди" msgid "Couldn't restore %s" msgstr "Неможливо відновити %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "виконати операцію відновлення" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "видалити файл назавжди" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Ім'я" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Видалено" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 папка" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} папок" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 файл" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} файлів" @@ -67,3 +71,7 @@ msgstr "Нічого немає. Ваший кошик для сміття пу #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Відновити" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/vi/files_trashbin.po b/l10n/vi/files_trashbin.po index c5b1c4de22..c4ebe67d89 100644 --- a/l10n/vi/files_trashbin.po +++ b/l10n/vi/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: saosangm \n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Language: vi\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "Không thể óa %s vĩnh viễn" @@ -28,35 +28,39 @@ msgstr "Không thể óa %s vĩnh viễn" msgid "Couldn't restore %s" msgstr "Không thể khôi phục %s" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "thực hiện phục hồi" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "xóa file vĩnh viễn" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "Tên" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "Đã xóa" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 thư mục" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} thư mục" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 tập tin" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} tập tin" @@ -67,3 +71,7 @@ msgstr "Không có gì ở đây. Thùng rác của bạn rỗng!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "Khôi phục" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/zh_CN.GB2312/files_trashbin.po b/l10n/zh_CN.GB2312/files_trashbin.po index 4432759cfe..2b3b09a9e1 100644 --- a/l10n/zh_CN.GB2312/files_trashbin.po +++ b/l10n/zh_CN.GB2312/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: zh_CN.GB2312\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "名称" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 个文件夹" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} 个文件夹" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 个文件" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} 个文件" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/zh_CN/files_trashbin.po b/l10n/zh_CN/files_trashbin.po index 74ce3be6ba..a2f415f760 100644 --- a/l10n/zh_CN/files_trashbin.po +++ b/l10n/zh_CN/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "名称" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1个文件夹" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} 个文件夹" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 个文件" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} 个文件" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/zh_HK/files_trashbin.po b/l10n/zh_HK/files_trashbin.po index 4d46282475..3619584ba4 100644 --- a/l10n/zh_HK/files_trashbin.po +++ b/l10n/zh_HK/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: zh_HK\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/l10n/zh_TW/files_trashbin.po b/l10n/zh_TW/files_trashbin.po index ae0e1da91d..347608bd4e 100644 --- a/l10n/zh_TW/files_trashbin.po +++ b/l10n/zh_TW/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" +"POT-Creation-Date: 2013-02-21 00:14+0100\n" +"PO-Revision-Date: 2013-02-20 23:14+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/delete.php:22 +#: ajax/delete.php:40 #, php-format msgid "Couldn't delete %s permanently" msgstr "" @@ -27,35 +27,39 @@ msgstr "" msgid "Couldn't restore %s" msgstr "" -#: js/trash.js:7 js/trash.js:94 +#: js/trash.js:7 js/trash.js:96 msgid "perform restore operation" msgstr "" -#: js/trash.js:33 +#: js/trash.js:34 msgid "delete file permanently" msgstr "" -#: js/trash.js:125 templates/index.php:17 +#: js/trash.js:121 +msgid "Delete permanently" +msgstr "" + +#: js/trash.js:151 templates/index.php:17 msgid "Name" msgstr "名稱" -#: js/trash.js:126 templates/index.php:27 +#: js/trash.js:152 templates/index.php:27 msgid "Deleted" msgstr "" -#: js/trash.js:135 +#: js/trash.js:161 msgid "1 folder" msgstr "1 個資料夾" -#: js/trash.js:137 +#: js/trash.js:163 msgid "{count} folders" msgstr "{count} 個資料夾" -#: js/trash.js:145 +#: js/trash.js:171 msgid "1 file" msgstr "1 個檔案" -#: js/trash.js:147 +#: js/trash.js:173 msgid "{count} files" msgstr "{count} 個檔案" @@ -66,3 +70,7 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" msgstr "" + +#: templates/index.php:30 templates/index.php:31 +msgid "Delete" +msgstr "" diff --git a/lib/l10n/de.php b/lib/l10n/de.php index 0ad254ad84..87b0b29469 100644 --- a/lib/l10n/de.php +++ b/lib/l10n/de.php @@ -9,7 +9,7 @@ "Files need to be downloaded one by one." => "Die Dateien müssen einzeln heruntergeladen werden.", "Back to Files" => "Zurück zu \"Dateien\"", "Selected files too large to generate zip file." => "Die gewählten Dateien sind zu groß, um eine ZIP-Datei zu erstellen.", -"couldn't be determined" => "Konnte nicht festgestellt werden", +"couldn't be determined" => "konnte nicht festgestellt werden", "Application is not enabled" => "Die Anwendung ist nicht aktiviert", "Authentication error" => "Authentifizierungs-Fehler", "Token expired. Please reload page." => "Token abgelaufen. Bitte lade die Seite neu.", @@ -18,7 +18,7 @@ "Images" => "Bilder", "Set an admin username." => "Setze Administrator Benutzername.", "Set an admin password." => "Setze Administrator Passwort", -"Specify a data folder." => "Datei-Verzeichnis angeben", +"Specify a data folder." => "Datei-Verzeichnis angeben.", "%s enter the database username." => "%s gib den Datenbank-Benutzernamen an.", "%s enter the database name." => "%s gib den Datenbank-Namen an.", "%s you may not use dots in the database name" => "%s Der Datenbank-Name darf keine Punkte enthalten", @@ -32,7 +32,7 @@ "MySQL user '%s'@'localhost' exists already." => "MySQL Benutzer '%s'@'localhost' existiert bereits.", "Drop this user from MySQL" => "Lösche diesen Benutzer von MySQL", "MySQL user '%s'@'%%' already exists" => "MySQL Benutzer '%s'@'%%' existiert bereits", -"Drop this user from MySQL." => "Lösche diesen Benutzer von MySQL.", +"Drop this user from MySQL." => "Lösche diesen Benutzer aus MySQL.", "Offending command was: \"%s\", name: %s, password: %s" => "Fehlerhafter Befehl war: \"%s\", Name: %s, Passwort: %s", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Dein Web-Server ist noch nicht für Datei-Synchronisation bereit, weil die WebDAV-Schnittstelle vermutlich defekt ist.", "Please double check the installation guides." => "Bitte prüfe die Instalationsanleitungen.", diff --git a/lib/l10n/de_DE.php b/lib/l10n/de_DE.php index 1f63fdd87b..d04c691f7e 100644 --- a/lib/l10n/de_DE.php +++ b/lib/l10n/de_DE.php @@ -30,9 +30,9 @@ "DB Error: \"%s\"" => "DB Fehler: \"%s\"", "Offending command was: \"%s\"" => "Fehlerhafter Befehl war: \"%s\"", "MySQL user '%s'@'localhost' exists already." => "MySQL Benutzer '%s'@'localhost' existiert bereits.", -"Drop this user from MySQL" => "Lösche diesen Benutzer von MySQL", +"Drop this user from MySQL" => "Lösche diesen Benutzer aus MySQL", "MySQL user '%s'@'%%' already exists" => "MySQL Benutzer '%s'@'%%' existiert bereits", -"Drop this user from MySQL." => "Lösche diesen Benutzer von MySQL.", +"Drop this user from MySQL." => "Lösche diesen Benutzer aus MySQL.", "Offending command was: \"%s\", name: %s, password: %s" => "Fehlerhafter Befehl war: \"%s\", Name: %s, Passwort: %s", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ihr Web-Server ist noch nicht für Datei-Synchronisation bereit, weil die WebDAV-Schnittstelle vermutlich defekt ist.", "Please double check the installation guides." => "Bitte prüfen Sie die Instalationsanleitungen.", diff --git a/lib/l10n/my_MM.php b/lib/l10n/my_MM.php new file mode 100644 index 0000000000..8d5485a4a5 --- /dev/null +++ b/lib/l10n/my_MM.php @@ -0,0 +1,3 @@ + "Apps" +); diff --git a/settings/l10n/de.php b/settings/l10n/de.php index 4b8ee76e76..42992855ec 100644 --- a/settings/l10n/de.php +++ b/settings/l10n/de.php @@ -36,7 +36,7 @@ "A valid password must be provided" => "Es muss ein gültiges Passwort angegeben werden", "__language_name__" => "Deutsch (Persönlich)", "Security Warning" => "Sicherheitswarnung", -"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Dein Datenverzeichnis und deine Datein sind vielleicht vom Internet aus erreichbar. Die .htaccess Datei, die ownCloud verwendet, arbeitet nicht richtig. Wir schlagen Dir dringend vor, dass du deinen Webserver so konfigurierst, dass das Datenverzeichnis nicht länger erreichbar ist oder, dass du dein Datenverzeichnis aus dem Dokumenten-root des Webservers bewegst.", +"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Dein Datenverzeichnis und Deine Datein sind vielleicht vom Internet aus erreichbar. Die .htaccess Datei, die ownCloud verwendet, arbeitet nicht richtig. Wir schlagen Dir dringend vor, dass Du Deinen Webserver so konfigurierst, dass das Datenverzeichnis nicht länger erreichbar ist oder, dass Du Dein Datenverzeichnis aus dem Dokumenten-root des Webservers bewegst.", "Setup Warning" => "Einrichtungswarnung", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Dein Web-Server ist noch nicht für Datei-Synchronisation bereit, weil die WebDAV-Schnittstelle vermutlich defekt ist.", "Please double check the installation guides." => "Bitte prüfen Sie die Instalationsanleitungen.", @@ -45,14 +45,14 @@ "Locale not working" => "Ländereinstellung funktioniert nicht", "This ownCloud server can't set system locale to \"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8/en_US.UTF8." => "Dieser ownCloud Server kann die Ländereinstellung nicht auf \"de_DE.UTF-8\"/\"de_DE.UTF8\" ändern. Dies bedeutet dass es Probleme mit bestimmten Zeichen in Dateinamen geben könnte. Wir empfehlen die für de_DE.UTF-8/de_DE.UTF8 benötigten Pakete auf ihrem System zu installieren.", "Internet connection not working" => "Keine Netzwerkverbindung", -"This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "Dieser ownCloud Server hat keine funktionierende Netzwerkverbindung. Dies bedeutet das einige Funktionen wie das einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Netzwerkverbindung für diesen Server zu aktivieren wenn Sie alle Funktionen von ownCloud nutzen wollen.", +"This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "Dieser ownCloud Server hat keine funktionierende Netzwerkverbindung. Dies bedeutet das einige Funktionen wie das Einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Netzwerkverbindung für diesen Server zu aktivieren wenn Du alle Funktionen von ownCloud nutzen möchtest.", "Cron" => "Cron", "Execute one task with each page loaded" => "Führe eine Aufgabe mit jeder geladenen Seite aus", "cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http." => "cron.php ist an einem Webcron-Service registriert. Die cron.php Seite wird einmal pro Minute über http abgerufen.", "Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "Nutze den Cron Systemdienst. Rufe die Datei cron.php im owncloud Ordner einmal pro Minute über einen Cronjob auf.", "Sharing" => "Teilen", "Enable Share API" => "Aktiviere Sharing-API", -"Allow apps to use the Share API" => "Erlaube Apps die Nutzung der Sharing-API", +"Allow apps to use the Share API" => "Erlaube Apps die Nutzung der Share-API", "Allow links" => "Erlaube Links", "Allow users to share items to the public with links" => "Erlaube Benutzern Inhalte über öffentliche Links zu teilen", "Allow resharing" => "Erlaube erneutes teilen", @@ -64,7 +64,7 @@ "Enforces the clients to connect to ownCloud via an encrypted connection." => "Erzwingt die Verwendung einer verschlüsselten Verbindung", "Please connect to this ownCloud instance via HTTPS to enable or disable the SSL enforcement." => "Bitte verbinden Sie sich über eine HTTPS Verbindung mit diesem ownCloud Server um diese Einstellung zu ändern", "Log" => "Log", -"Log level" => "Logtiefe", +"Log level" => "Loglevel", "More" => "Mehr", "Version" => "Version", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Entwickelt von der ownCloud-Community, der Quellcode ist unter der AGPL lizenziert.", @@ -81,7 +81,7 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "Kommerzieller Support", "You have used %s of the available %s" => "Du verwendest %s der verfügbaren %s", -"Get the apps to sync your files" => "Laden Sie die Apps zur Synchronisierung ihrer Daten herunter", +"Get the apps to sync your files" => "Lade die Apps zur Synchronisierung Deiner Daten herunter", "Show First Run Wizard again" => "Erstinstallation erneut durchführen", "Password" => "Passwort", "Your password was changed" => "Dein Passwort wurde geändert.", diff --git a/settings/l10n/de_DE.php b/settings/l10n/de_DE.php index ee23510536..5dd5001548 100644 --- a/settings/l10n/de_DE.php +++ b/settings/l10n/de_DE.php @@ -43,16 +43,16 @@ "Module 'fileinfo' missing" => "Das Modul 'fileinfo' fehlt", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen Ihnen dieses Modul zu aktivieren um die besten Resultate bei der Bestimmung der Dateitypen zu erzielen.", "Locale not working" => "Lokalisierung funktioniert nicht", -"This ownCloud server can't set system locale to \"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8/en_US.UTF8." => "Dieser ownCloud Server kann die Ländereinstellung nicht auf \"de_DE.UTF-8\"/\"de_DE.UTF8\" ändern. Dies bedeutet dass es Probleme mit bestimmten Zeichen in Dateinamen geben könnte. Wir empfehlen die für de_DE.UTF-8/de_DE.UTF8 benötigten Pakete auf ihrem System zu installieren.", +"This ownCloud server can't set system locale to \"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8/en_US.UTF8." => "Dieser ownCloud Server kann die Ländereinstellung nicht auf \"de_DE.UTF-8\"/\"de_DE.UTF8\" ändern. Dies bedeutet dass es Probleme mit bestimmten Zeichen im Dateinamen geben könnte. Wir empfehlen die für de_DE.UTF-8/de_DE.UTF8 benötigten Pakete auf Ihrem System zu installieren.", "Internet connection not working" => "Keine Netzwerkverbindung", -"This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "Dieser ownCloud Server hat keine funktionierende Internetverbindung. Dies bedeutet das einige Funktionen wie das einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Internetverbindung für diesen Server zu aktivieren wenn Sie alle Funktionen von ownCloud nutzen wollen.", +"This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "Dieser ownCloud Server hat keine funktionierende Internetverbindung. Dies bedeutet das einige Funktionen wie das Einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Internetverbindung für diesen Server zu aktivieren wenn Sie alle Funktionen von ownCloud nutzen wollen.", "Cron" => "Cron", "Execute one task with each page loaded" => "Führe eine Aufgabe bei jedem Laden der Seite aus", "cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http." => "cron.php ist bei einem Webcron-Service registriert. Die cron.php Seite im ownCloud Wurzelverzeichniss wird einmal pro Minute über http abgerufen.", "Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "Nutzen Sie den Cron Systemdienst. Rufen Sie die Datei cron.php im ownCloud Ordner einmal pro Minute über einen Cronjob auf.", "Sharing" => "Teilen", -"Enable Share API" => "Teilen-API aktivieren", -"Allow apps to use the Share API" => "Erlaube es Anwendungen, die Teilen-API zu benutzen", +"Enable Share API" => "Share-API aktivieren", +"Allow apps to use the Share API" => "Erlaube es Anwendungen, die Share-API zu benutzen", "Allow links" => "Links erlauben", "Allow users to share items to the public with links" => "Erlaube es Benutzern, Items per öffentlichem Link zu teilen", "Allow resharing" => "Erlaube weiterverteilen", diff --git a/settings/l10n/es.php b/settings/l10n/es.php index e0c20c6d97..ec805cca3c 100644 --- a/settings/l10n/es.php +++ b/settings/l10n/es.php @@ -34,6 +34,7 @@ "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Su directorio de datos y sus archivos están probablemente accesibles desde internet. El archivo .htaccess que ownCloud provee no está funcionando. Sugerimos fuertemente que configure su servidor web de manera que el directorio de datos ya no esté accesible o mueva el directorio de datos fuera del documento raíz de su servidor web.", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.", "Please double check the installation guides." => "Por favor, vuelva a comprobar las guías de instalación.", +"Sharing" => "Compartiendo", "More" => "Más", "Version" => "Version", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Desarrollado por la comunidad ownCloud, el código fuente está bajo licencia AGPL.", diff --git a/settings/l10n/id.php b/settings/l10n/id.php index e62b3e15a7..7f53a50b24 100644 --- a/settings/l10n/id.php +++ b/settings/l10n/id.php @@ -20,6 +20,7 @@ "Select an App" => "Pilih satu aplikasi", "See application page at apps.owncloud.com" => "Lihat halaman aplikasi di apps.owncloud.com", "Update" => "Pembaruan", +"Get the apps to sync your files" => "Dapatkan aplikasi untuk sinkronisasi berkas anda", "Password" => "Password", "Unable to change your password" => "Tidak dapat merubah password anda", "Current password" => "Password saat ini", From c5e0dda8874244ac3c9acdf92bfd5e97405438c0 Mon Sep 17 00:00:00 2001 From: Frank Karlitschek Date: Thu, 21 Feb 2013 11:09:00 +0100 Subject: [PATCH 330/719] add a safe_mode check --- lib/util.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/util.php b/lib/util.php index ab47e404c9..87facda180 100755 --- a/lib/util.php +++ b/lib/util.php @@ -269,6 +269,11 @@ class OC_Util { 'hint'=>'Please ask your server administrator to install the module.'); $web_server_restart= false; } + if(ini_get('safe_mode')) { + $errors[]=array('error'=>'PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly.
', + 'hint'=>'PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config.'); + $web_server_restart= false; + } $handler = ini_get("session.save_handler"); if($handler == "files") { From c24ec867f9e428dd90c021736c2d92c0516e3526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Thu, 21 Feb 2013 12:20:29 +0100 Subject: [PATCH 331/719] calculate versions size per user --- apps/files_versions/appinfo/database.xml | 35 ++++++++++++++++ apps/files_versions/appinfo/version | 2 +- apps/files_versions/lib/versions.php | 53 ++++++++++++++++++++---- 3 files changed, 80 insertions(+), 10 deletions(-) create mode 100644 apps/files_versions/appinfo/database.xml diff --git a/apps/files_versions/appinfo/database.xml b/apps/files_versions/appinfo/database.xml new file mode 100644 index 0000000000..7cfa5aa79a --- /dev/null +++ b/apps/files_versions/appinfo/database.xml @@ -0,0 +1,35 @@ + + + + *dbname* + true + false + + utf8 + +
From 7f58e2749537e000344dd886df5e103e06eefe91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Sat, 9 Feb 2013 18:01:38 +0100 Subject: [PATCH 097/719] cleanup - more to come after --- apps/files_encryption/ajax/mode.php | 38 - apps/files_encryption/appinfo/app.php | 4 +- apps/files_encryption/hooks/hooks.php | 10 - apps/files_encryption/js/settings-personal.js | 38 - apps/files_encryption/js/settings.js | 29 +- apps/files_encryption/lib/crypt.php | 779 +++++++++--------- apps/files_encryption/lib/keymanager.php | 103 +-- apps/files_encryption/lib/stream.php | 6 +- apps/files_encryption/settings-personal.php | 2 - .../templates/settings-personal.php | 2 +- 10 files changed, 423 insertions(+), 588 deletions(-) delete mode 100644 apps/files_encryption/ajax/mode.php delete mode 100644 apps/files_encryption/js/settings-personal.js diff --git a/apps/files_encryption/ajax/mode.php b/apps/files_encryption/ajax/mode.php deleted file mode 100644 index 64c5be9440..0000000000 --- a/apps/files_encryption/ajax/mode.php +++ /dev/null @@ -1,38 +0,0 @@ - - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. - */ - -use OCA\Encryption\Keymanager; - -OCP\JSON::checkAppEnabled('files_encryption'); -OCP\JSON::checkLoggedIn(); -OCP\JSON::callCheck(); - -$mode = $_POST['mode']; -$changePasswd = false; -$passwdChanged = false; - -if ( isset($_POST['newpasswd']) && isset($_POST['oldpasswd']) ) { - $oldpasswd = $_POST['oldpasswd']; - $newpasswd = $_POST['newpasswd']; - $changePasswd = true; - $passwdChanged = Keymanager::changePasswd($oldpasswd, $newpasswd); -} - -$query = \OC_DB::prepare( "SELECT mode FROM *PREFIX*encryption WHERE uid = ?" ); -$result = $query->execute(array(\OCP\User::getUser())); - -if ($result->fetchRow()){ - $query = OC_DB::prepare( 'UPDATE *PREFIX*encryption SET mode = ? WHERE uid = ?' ); -} else { - $query = OC_DB::prepare( 'INSERT INTO *PREFIX*encryption ( mode, uid ) VALUES( ?, ? )' ); -} - -if ( (!$changePasswd || $passwdChanged) && $query->execute(array($mode, \OCP\User::getUser())) ) { - OCP\JSON::success(); -} else { - OCP\JSON::error(); -} \ No newline at end of file diff --git a/apps/files_encryption/appinfo/app.php b/apps/files_encryption/appinfo/app.php index f83109a18e..0872862252 100644 --- a/apps/files_encryption/appinfo/app.php +++ b/apps/files_encryption/appinfo/app.php @@ -43,6 +43,6 @@ if ( } -// Reguster settings scripts +// Register settings scripts OCP\App::registerAdmin( 'files_encryption', 'settings' ); -OCP\App::registerPersonal( 'files_encryption', 'settings-personal' ); \ No newline at end of file +OCP\App::registerPersonal( 'files_encryption', 'settings-personal' ); diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/hooks/hooks.php index 8bdeee0937..7e4f677ce9 100644 --- a/apps/files_encryption/hooks/hooks.php +++ b/apps/files_encryption/hooks/hooks.php @@ -165,16 +165,6 @@ class Hooks { * @brief */ public static function postShared( $params ) { - - // Delete existing catfile - Keymanager::deleteFileKey( ); - - // Generate new catfile and env keys - Crypt::multiKeyEncrypt( $plainContent, $publicKeys ); - - // Save env keys to user folders - - } /** diff --git a/apps/files_encryption/js/settings-personal.js b/apps/files_encryption/js/settings-personal.js deleted file mode 100644 index 1a53e99d2b..0000000000 --- a/apps/files_encryption/js/settings-personal.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright (c) 2012, Bjoern Schiessle - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. - */ - -$(document).ready(function(){ - $('input[name=encryption_mode]').change(function(){ - var prevmode = document.getElementById('prev_encryption_mode').value - var client=$('input[value="client"]:checked').val() - ,server=$('input[value="server"]:checked').val() - ,user=$('input[value="user"]:checked').val() - ,none=$('input[value="none"]:checked').val() - if (client) { - $.post(OC.filePath('files_encryption', 'ajax', 'mode.php'), { mode: 'client' }); - if (prevmode == 'server') { - OC.dialogs.info(t('encryption', 'Please switch to your ownCloud client and change your encryption password to complete the conversion.'), t('encryption', 'switched to client side encryption')); - } - } else if (server) { - if (prevmode == 'client') { - OC.dialogs.form([{text:'Login password', name:'newpasswd', type:'password'},{text:'Encryption password used on the client', name:'oldpasswd', type:'password'}],t('encryption', 'Change encryption password to login password'), function(data) { - $.post(OC.filePath('files_encryption', 'ajax', 'mode.php'), { mode: 'server', newpasswd: data[0].value, oldpasswd: data[1].value }, function(result) { - if (result.status != 'success') { - document.getElementById(prevmode+'_encryption').checked = true; - OC.dialogs.alert(t('encryption', 'Please check your passwords and try again.'), t('encryption', 'Could not change your file encryption password to your login password')) - } else { - console.log("alles super"); - } - }, true); - }); - } else { - $.post(OC.filePath('files_encryption', 'ajax', 'mode.php'), { mode: 'server' }); - } - } else { - $.post(OC.filePath('files_encryption', 'ajax', 'mode.php'), { mode: 'none' }); - } - }) -}) \ No newline at end of file diff --git a/apps/files_encryption/js/settings.js b/apps/files_encryption/js/settings.js index 60563bde85..0be857bb73 100644 --- a/apps/files_encryption/js/settings.js +++ b/apps/files_encryption/js/settings.js @@ -9,38 +9,11 @@ $(document).ready(function(){ $('#encryption_blacklist').multiSelect({ oncheck:blackListChange, onuncheck:blackListChange, - createText:'...', + createText:'...' }); function blackListChange(){ var blackList=$('#encryption_blacklist').val().join(','); OC.AppConfig.setValue('files_encryption','type_blacklist',blackList); } - - //TODO: Handle switch between client and server side encryption - $('input[name=encryption_mode]').change(function(){ - var client=$('input[value="client"]:checked').val() - ,server=$('input[value="server"]:checked').val() - ,user=$('input[value="user"]:checked').val() - ,none=$('input[value="none"]:checked').val() - ,disable=false - if (client) { - OC.AppConfig.setValue('files_encryption','mode','client'); - disable = true; - } else if (server) { - OC.AppConfig.setValue('files_encryption','mode','server'); - disable = true; - } else if (user) { - OC.AppConfig.setValue('files_encryption','mode','user'); - disable = true; - } else { - OC.AppConfig.setValue('files_encryption','mode','none'); - } - if (disable) { - document.getElementById('server_encryption').disabled = true; - document.getElementById('client_encryption').disabled = true; - document.getElementById('user_encryption').disabled = true; - document.getElementById('none_encryption').disabled = true; - } - }) }) \ No newline at end of file diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php index e3d23023db..c7a414c508 100755 --- a/apps/files_encryption/lib/crypt.php +++ b/apps/files_encryption/lib/crypt.php @@ -4,8 +4,8 @@ * ownCloud * * @author Sam Tuke, Frank Karlitschek, Robin Appelman - * @copyright 2012 Sam Tuke samtuke@owncloud.com, - * Robin Appelman icewind@owncloud.com, Frank Karlitschek + * @copyright 2012 Sam Tuke samtuke@owncloud.com, + * Robin Appelman icewind@owncloud.com, Frank Karlitschek * frank@owncloud.org * * This library is free software; you can redistribute it and/or @@ -47,15 +47,15 @@ class Crypt { public static function mode( $user = null ) { return 'server'; - + } - - /** - * @brief Create a new encryption keypair - * @return array publicKey, privatekey - */ + + /** + * @brief Create a new encryption keypair + * @return array publicKey, privatekey + */ public static function createKeypair() { - + $res = openssl_pkey_new(); // Get private key @@ -63,576 +63,543 @@ class Crypt { // Get public key $publicKey = openssl_pkey_get_details( $res ); - + $publicKey = $publicKey['key']; - + return( array( 'publicKey' => $publicKey, 'privateKey' => $privateKey ) ); - + } - - /** - * @brief Add arbitrary padding to encrypted data - * @param string $data data to be padded - * @return padded data - * @note In order to end up with data exactly 8192 bytes long we must - * add two letters. It is impossible to achieve exactly 8192 length - * blocks with encryption alone, hence padding is added to achieve the - * required length. - */ + + /** + * @brief Add arbitrary padding to encrypted data + * @param string $data data to be padded + * @return padded data + * @note In order to end up with data exactly 8192 bytes long we must + * add two letters. It is impossible to achieve exactly 8192 length + * blocks with encryption alone, hence padding is added to achieve the + * required length. + */ public static function addPadding( $data ) { - + $padded = $data . 'xx'; - + return $padded; - + } - - /** - * @brief Remove arbitrary padding to encrypted data - * @param string $padded padded data to remove padding from - * @return unpadded data on success, false on error - */ + + /** + * @brief Remove arbitrary padding to encrypted data + * @param string $padded padded data to remove padding from + * @return unpadded data on success, false on error + */ public static function removePadding( $padded ) { - + if ( substr( $padded, -2 ) == 'xx' ) { - + $data = substr( $padded, 0, -2 ); - + return $data; - + } else { - + // TODO: log the fact that unpadded data was submitted for removal of padding return false; - + } - + } - - /** - * @brief Check if a file's contents contains an IV and is symmetrically encrypted - * @return true / false - * @note see also OCA\Encryption\Util->isEncryptedPath() - */ + + /** + * @brief Check if a file's contents contains an IV and is symmetrically encrypted + * @return true / false + * @note see also OCA\Encryption\Util->isEncryptedPath() + */ public static function isCatfile( $content ) { - + if ( !$content ) { - + return false; - + } - + $noPadding = self::removePadding( $content ); - + // Fetch encryption metadata from end of file $meta = substr( $noPadding, -22 ); - + // Fetch IV from end of file $iv = substr( $meta, -16 ); - + // Fetch identifier from start of metadata $identifier = substr( $meta, 0, 6 ); - + if ( $identifier == '00iv00') { - + return true; - + } else { - + return false; - + } - + } - + /** * Check if a file is encrypted according to database file cache * @param string $path * @return bool */ public static function isEncryptedMeta( $path ) { - + // TODO: Use DI to get \OC\Files\Filesystem out of here - + // Fetch all file metadata from DB $metadata = \OC\Files\Filesystem::getFileInfo( $path, '' ); - + // Return encryption status return isset( $metadata['encrypted'] ) and ( bool )$metadata['encrypted']; - + } - - /** - * @brief Check if a file is encrypted via legacy system - * @param string $relPath The path of the file, relative to user/data; - * e.g. filename or /Docs/filename, NOT admin/files/filename - * @return true / false - */ + + /** + * @brief Check if a file is encrypted via legacy system + * @param string $relPath The path of the file, relative to user/data; + * e.g. filename or /Docs/filename, NOT admin/files/filename + * @return true / false + */ public static function isLegacyEncryptedContent( $data, $relPath ) { - + // Fetch all file metadata from DB $metadata = \OC\Files\Filesystem::getFileInfo( $relPath, '' ); - + // If a file is flagged with encryption in DB, but isn't a // valid content + IV combination, it's probably using the // legacy encryption system - if ( - isset( $metadata['encrypted'] ) - and $metadata['encrypted'] === true - and ! self::isCatfile( $data ) + if ( + isset( $metadata['encrypted'] ) + and $metadata['encrypted'] === true + and ! self::isCatfile( $data ) ) { - + return true; - + } else { - + return false; - + } - + } - - /** - * @brief Symmetrically encrypt a string - * @returns encrypted file - */ + + /** + * @brief Symmetrically encrypt a string + * @returns encrypted file + */ public static function encrypt( $plainContent, $iv, $passphrase = '' ) { - + if ( $encryptedContent = openssl_encrypt( $plainContent, 'AES-128-CFB', $passphrase, false, $iv ) ) { return $encryptedContent; - + } else { - + \OC_Log::write( 'Encryption library', 'Encryption (symmetric) of content failed', \OC_Log::ERROR ); - + return false; - + } - + } - - /** - * @brief Symmetrically decrypt a string - * @returns decrypted file - */ + + /** + * @brief Symmetrically decrypt a string + * @returns decrypted file + */ public static function decrypt( $encryptedContent, $iv, $passphrase ) { - + if ( $plainContent = openssl_decrypt( $encryptedContent, 'AES-128-CFB', $passphrase, false, $iv ) ) { return $plainContent; - - + + } else { - + throw new \Exception( 'Encryption library: Decryption (symmetric) of content failed' ); - - return false; - + } - + } - - /** - * @brief Concatenate encrypted data with its IV and padding - * @param string $content content to be concatenated - * @param string $iv IV to be concatenated - * @returns string concatenated content - */ + + /** + * @brief Concatenate encrypted data with its IV and padding + * @param string $content content to be concatenated + * @param string $iv IV to be concatenated + * @returns string concatenated content + */ public static function concatIv ( $content, $iv ) { - + $combined = $content . '00iv00' . $iv; - + return $combined; - + } - - /** - * @brief Split concatenated data and IV into respective parts - * @param string $catFile concatenated data to be split - * @returns array keys: encrypted, iv - */ + + /** + * @brief Split concatenated data and IV into respective parts + * @param string $catFile concatenated data to be split + * @returns array keys: encrypted, iv + */ public static function splitIv ( $catFile ) { - + // Fetch encryption metadata from end of file $meta = substr( $catFile, -22 ); - + // Fetch IV from end of file $iv = substr( $meta, -16 ); - + // Remove IV and IV identifier text to expose encrypted content $encrypted = substr( $catFile, 0, -22 ); - + $split = array( 'encrypted' => $encrypted - , 'iv' => $iv + , 'iv' => $iv ); - + return $split; - + } - - /** - * @brief Symmetrically encrypts a string and returns keyfile content - * @param $plainContent content to be encrypted in keyfile - * @returns encrypted content combined with IV - * @note IV need not be specified, as it will be stored in the returned keyfile - * and remain accessible therein. - */ + + /** + * @brief Symmetrically encrypts a string and returns keyfile content + * @param $plainContent content to be encrypted in keyfile + * @returns encrypted content combined with IV + * @note IV need not be specified, as it will be stored in the returned keyfile + * and remain accessible therein. + */ public static function symmetricEncryptFileContent( $plainContent, $passphrase = '' ) { - + if ( !$plainContent ) { - + return false; - + } - + $iv = self::generateIv(); - + if ( $encryptedContent = self::encrypt( $plainContent, $iv, $passphrase ) ) { - - // Combine content to encrypt with IV identifier and actual IV - $catfile = self::concatIv( $encryptedContent, $iv ); - - $padded = self::addPadding( $catfile ); - - return $padded; - + + // Combine content to encrypt with IV identifier and actual IV + $catfile = self::concatIv( $encryptedContent, $iv ); + + $padded = self::addPadding( $catfile ); + + return $padded; + } else { - + \OC_Log::write( 'Encryption library', 'Encryption (symmetric) of keyfile content failed', \OC_Log::ERROR ); - + return false; - + } - + } /** - * @brief Symmetrically decrypts keyfile content - * @param string $source - * @param string $target - * @param string $key the decryption key - * @returns decrypted content - * - * This function decrypts a file - */ + * @brief Symmetrically decrypts keyfile content + * @param string $source + * @param string $target + * @param string $key the decryption key + * @returns decrypted content + * + * This function decrypts a file + */ public static function symmetricDecryptFileContent( $keyfileContent, $passphrase = '' ) { - + if ( !$keyfileContent ) { - + throw new \Exception( 'Encryption library: no data provided for decryption' ); - + } - + // Remove padding $noPadding = self::removePadding( $keyfileContent ); - + // Split into enc data and catfile $catfile = self::splitIv( $noPadding ); - + if ( $plainContent = self::decrypt( $catfile['encrypted'], $catfile['iv'], $passphrase ) ) { - + return $plainContent; - + } - + } - + /** - * @brief Creates symmetric keyfile content using a generated key - * @param string $plainContent content to be encrypted - * @returns array keys: key, encrypted - * @note symmetricDecryptFileContent() can be used to decrypt files created using this method - * - * This function decrypts a file - */ + * @brief Creates symmetric keyfile content using a generated key + * @param string $plainContent content to be encrypted + * @returns array keys: key, encrypted + * @note symmetricDecryptFileContent() can be used to decrypt files created using this method + * + * This function decrypts a file + */ public static function symmetricEncryptFileContentKeyfile( $plainContent ) { - + $key = self::generateKey(); - + if( $encryptedContent = self::symmetricEncryptFileContent( $plainContent, $key ) ) { - + return array( 'key' => $key - , 'encrypted' => $encryptedContent + , 'encrypted' => $encryptedContent ); - + } else { - + return false; - + } - + } - + /** - * @brief Create asymmetrically encrypted keyfile content using a generated key - * @param string $plainContent content to be encrypted - * @returns array keys: key, encrypted - * @note symmetricDecryptFileContent() can be used to decrypt files created using this method - * - * This function decrypts a file - */ + * @brief Create asymmetrically encrypted keyfile content using a generated key + * @param string $plainContent content to be encrypted + * @returns array keys: key, encrypted + * @note symmetricDecryptFileContent() can be used to decrypt files created using this method + * + * This function decrypts a file + */ public static function multiKeyEncrypt( $plainContent, array $publicKeys ) { - + // Set empty vars to be set by openssl by reference $sealed = ''; $envKeys = array(); - + if( openssl_seal( $plainContent, $sealed, $envKeys, $publicKeys ) ) { - + return array( 'keys' => $envKeys - , 'encrypted' => $sealed + , 'encrypted' => $sealed ); - + } else { - + return false; - + } - - } - - /** - * @brief Asymmetrically encrypt a file using multiple public keys - * @param string $plainContent content to be encrypted - * @returns string $plainContent decrypted string - * @note symmetricDecryptFileContent() can be used to decrypt files created using this method - * - * This function decrypts a file - */ - public static function multiKeyDecrypt( $encryptedContent, $envKey, $privateKey ) { - - if ( !$encryptedContent ) { - - return false; - - } - - if ( openssl_open( $encryptedContent, $plainContent, $envKey, $privateKey ) ) { - - return $plainContent; - - } else { - - \OC_Log::write( 'Encryption library', 'Decryption (asymmetric) of sealed content failed', \OC_Log::ERROR ); - - return false; - - } - - } - - /** - * @brief Asymetrically encrypt a string using a public key - * @returns encrypted file - */ - public static function keyEncrypt( $plainContent, $publicKey ) { - - openssl_public_encrypt( $plainContent, $encryptedContent, $publicKey ); - - return $encryptedContent; - - } - - /** - * @brief Asymetrically decrypt a file using a private key - * @returns decrypted file - */ - public static function keyDecrypt( $encryptedContent, $privatekey ) { - - openssl_private_decrypt( $encryptedContent, $plainContent, $privatekey ); - - return $plainContent; - + } - /** - * @brief Encrypts content symmetrically and generates keyfile asymmetrically - * @returns array containing catfile and new keyfile. - * keys: data, key - * @note this method is a wrapper for combining other crypt class methods - */ + /** + * @brief Asymmetrically encrypt a file using multiple public keys + * @param string $plainContent content to be encrypted + * @returns string $plainContent decrypted string + * @note symmetricDecryptFileContent() can be used to decrypt files created using this method + * + * This function decrypts a file + */ + public static function multiKeyDecrypt( $encryptedContent, $envKey, $privateKey ) { + + if ( !$encryptedContent ) { + + return false; + + } + + if ( openssl_open( $encryptedContent, $plainContent, $envKey, $privateKey ) ) { + + return $plainContent; + + } else { + + \OC_Log::write( 'Encryption library', 'Decryption (asymmetric) of sealed content failed', \OC_Log::ERROR ); + + return false; + + } + + } + + /** + * @brief Asymmetrically encrypt a string using a public key + * @returns encrypted file + */ + public static function keyEncrypt( $plainContent, $publicKey ) { + + openssl_public_encrypt( $plainContent, $encryptedContent, $publicKey ); + + return $encryptedContent; + + } + + /** + * @brief Asymetrically decrypt a file using a private key + * @returns decrypted file + */ + public static function keyDecrypt( $encryptedContent, $privatekey ) { + + openssl_private_decrypt( $encryptedContent, $plainContent, $privatekey ); + + return $plainContent; + + } + + /** + * @brief Encrypts content symmetrically and generates keyfile asymmetrically + * @returns array containing catfile and new keyfile. + * keys: data, key + * @note this method is a wrapper for combining other crypt class methods + */ public static function keyEncryptKeyfile( $plainContent, $publicKey ) { - + // Encrypt plain data, generate keyfile & encrypted file $cryptedData = self::symmetricEncryptFileContentKeyfile( $plainContent ); - + // Encrypt keyfile $cryptedKey = self::keyEncrypt( $cryptedData['key'], $publicKey ); - + return array( 'data' => $cryptedData['encrypted'], 'key' => $cryptedKey ); - + } - - /** - * @brief Takes catfile, keyfile, and private key, and - * performs decryption - * @returns decrypted content - * @note this method is a wrapper for combining other crypt class methods - */ + + /** + * @brief Takes catfile, keyfile, and private key, and + * performs decryption + * @returns decrypted content + * @note this method is a wrapper for combining other crypt class methods + */ public static function keyDecryptKeyfile( $catfile, $keyfile, $privateKey ) { - + // Decrypt the keyfile with the user's private key $decryptedKeyfile = self::keyDecrypt( $keyfile, $privateKey ); - + // Decrypt the catfile symmetrically using the decrypted keyfile $decryptedData = self::symmetricDecryptFileContent( $catfile, $decryptedKeyfile ); - + return $decryptedData; - + } - + /** - * @brief Symmetrically encrypt a file by combining encrypted component data blocks - */ + * @brief Symmetrically encrypt a file by combining encrypted component data blocks + */ public static function symmetricBlockEncryptFileContent( $plainContent, $key ) { - + $crypted = ''; - + $remaining = $plainContent; - + $testarray = array(); - + while( strlen( $remaining ) ) { - + //echo "\n\n\$block = ".substr( $remaining, 0, 6126 ); - + // Encrypt a chunk of unencrypted data and add it to the rest $block = self::symmetricEncryptFileContent( substr( $remaining, 0, 6126 ), $key ); - + $padded = self::addPadding( $block ); - + $crypted .= $block; - + $testarray[] = $block; - + // Remove the data already encrypted from remaining unencrypted data $remaining = substr( $remaining, 6126 ); - + } - - //echo "hags "; - - //echo "\n\n\n\$crypted = $crypted\n\n\n"; - - //print_r($testarray); - + return $crypted; } /** - * @brief Symmetrically decrypt a file by combining encrypted component data blocks - */ + * @brief Symmetrically decrypt a file by combining encrypted component data blocks + */ public static function symmetricBlockDecryptFileContent( $crypted, $key ) { - + $decrypted = ''; - + $remaining = $crypted; - + $testarray = array(); - + while( strlen( $remaining ) ) { - + $testarray[] = substr( $remaining, 0, 8192 ); - + // Decrypt a chunk of unencrypted data and add it to the rest $decrypted .= self::symmetricDecryptFileContent( $remaining, $key ); - + // Remove the data already encrypted from remaining unencrypted data $remaining = substr( $remaining, 8192 ); - + } - - //echo "\n\n\$testarray = "; print_r($testarray); - + return $decrypted; - + } - - /** - * @brief Generates a pseudo random initialisation vector - * @return String $iv generated IV - */ + + /** + * @brief Generates a pseudo random initialisation vector + * @return String $iv generated IV + */ public static function generateIv() { - + if ( $random = openssl_random_pseudo_bytes( 12, $strong ) ) { - + if ( !$strong ) { - + // If OpenSSL indicates randomness is insecure, log error \OC_Log::write( 'Encryption library', 'Insecure symmetric key was generated using openssl_random_pseudo_bytes()', \OC_Log::WARN ); - + } - + // We encode the iv purely for string manipulation // purposes - it gets decoded before use $iv = base64_encode( $random ); - + return $iv; - + } else { - - throw new Exception( 'Generating IV failed' ); - + + throw new \Exception( 'Generating IV failed' ); + } - + } - - /** - * @brief Generate a pseudo random 1024kb ASCII key - * @returns $key Generated key - */ + + /** + * @brief Generate a pseudo random 1024kb ASCII key + * @returns $key Generated key + */ public static function generateKey() { - + // Generate key if ( $key = base64_encode( openssl_random_pseudo_bytes( 183, $strong ) ) ) { - + if ( !$strong ) { - + // If OpenSSL indicates randomness is insecure, log error - throw new Exception ( 'Encryption library, Insecure symmetric key was generated using openssl_random_pseudo_bytes()' ); - + throw new \Exception ( 'Encryption library, Insecure symmetric key was generated using openssl_random_pseudo_bytes()' ); + } - + return $key; - + } else { - + return false; - + } - + } - public static function changekeypasscode( $oldPassword, $newPassword ) { - - if ( \OCP\User::isLoggedIn() ) { - - $key = Keymanager::getPrivateKey( $user, $view ); - - if ( ( $key = Crypt::symmetricDecryptFileContent($key,$oldpasswd) ) ) { - - if ( ( $key = Crypt::symmetricEncryptFileContent( $key, $newpasswd ) ) ) { - - Keymanager::setPrivateKey( $key ); - - return true; - } - - } - - } - - return false; - - } - /** * @brief Get the blowfish encryption handeler for a key * @param $key string (optional) @@ -641,21 +608,21 @@ class Crypt { * if the key is left out, the default handeler will be used */ public static function getBlowfish( $key = '' ) { - + if ( $key ) { - + return new \Crypt_Blowfish( $key ); - + } else { - + return false; - + } - + } - + public static function legacyCreateKey( $passphrase ) { - + // Generate a random integer $key = mt_rand( 10000, 99999 ) . mt_rand( 10000, 99999 ) . mt_rand( 10000, 99999 ) . mt_rand( 10000, 99999 ); @@ -663,9 +630,9 @@ class Crypt { $legacyEncKey = self::legacyEncrypt( $key, $passphrase ); return $legacyEncKey; - + } - + /** * @brief encrypts content using legacy blowfish system * @param $content the cleartext message you want to encrypt @@ -675,54 +642,54 @@ class Crypt { * This function encrypts an content */ public static function legacyEncrypt( $content, $passphrase = '' ) { - + $bf = self::getBlowfish( $passphrase ); - + return $bf->encrypt( $content ); - + } - + /** - * @brief decrypts content using legacy blowfish system - * @param $content the cleartext message you want to decrypt - * @param $key the encryption key (optional) - * @returns cleartext content - * - * This function decrypts an content - */ + * @brief decrypts content using legacy blowfish system + * @param $content the cleartext message you want to decrypt + * @param $key the encryption key (optional) + * @returns cleartext content + * + * This function decrypts an content + */ public static function legacyDecrypt( $content, $passphrase = '' ) { - + $bf = self::getBlowfish( $passphrase ); - + $decrypted = $bf->decrypt( $content ); - + $trimmed = rtrim( $decrypted, "\0" ); - + return $trimmed; - + } - + public static function legacyKeyRecryptKeyfile( $legacyEncryptedContent, $legacyPassphrase, $publicKey, $newPassphrase ) { - + $decrypted = self::legacyDecrypt( $legacyEncryptedContent, $legacyPassphrase ); - + $recrypted = self::keyEncryptKeyfile( $decrypted, $publicKey ); - + return $recrypted; - + } - + /** - * @brief Re-encryptes a legacy blowfish encrypted file using AES with integrated IV - * @param $legacyContent the legacy encrypted content to re-encrypt - * @returns cleartext content - * - * This function decrypts an content - */ + * @brief Re-encryptes a legacy blowfish encrypted file using AES with integrated IV + * @param $legacyContent the legacy encrypted content to re-encrypt + * @returns cleartext content + * + * This function decrypts an content + */ public static function legacyRecrypt( $legacyContent, $legacyPassphrase, $newPassphrase ) { - + // TODO: write me - + } - + } \ No newline at end of file diff --git a/apps/files_encryption/lib/keymanager.php b/apps/files_encryption/lib/keymanager.php index 0d0380db6e..9558779715 100755 --- a/apps/files_encryption/lib/keymanager.php +++ b/apps/files_encryption/lib/keymanager.php @@ -28,7 +28,7 @@ namespace OCA\Encryption; * @note Where a method requires a view object, it's root must be '/' */ class Keymanager { - + /** * @brief retrieve the ENCRYPTED private key from a user * @@ -46,8 +46,8 @@ class Keymanager { /** * @brief retrieve public key for a specified user - * @param \OC_FilesystemView $view - * @param $userId + * @param \OC_FilesystemView $view + * @param $userId * @return string public key or false */ public static function getPublicKey( \OC_FilesystemView $view, $userId ) { @@ -58,8 +58,8 @@ class Keymanager { /** * @brief retrieve both keys from a user (private and public) - * @param \OC_FilesystemView $view - * @param $userId + * @param \OC_FilesystemView $view + * @param $userId * @return array keys: privateKey, publicKey */ public static function getUserKeys( \OC_FilesystemView $view, $userId ) { @@ -148,11 +148,11 @@ class Keymanager { /** * @brief retrieve keyfile for an encrypted file - * @param \OC_FilesystemView $view - * @param $userId - * @param $filePath - * @internal param \OCA\Encryption\file $string name - * @return string file key or false + * @param \OC_FilesystemView $view + * @param $userId + * @param $filePath + * @internal param \OCA\Encryption\file $string name + * @return string file key or false * @note The keyfile returned is asymmetrically encrypted. Decryption * of the keyfile must be performed by client code */ @@ -177,12 +177,12 @@ class Keymanager { /** * @brief Delete a keyfile * - * @param OC_FilesystemView $view - * @param string $userId username - * @param string $path path of the file the key belongs to - * @return bool Outcome of unlink operation - * @note $path must be relative to data/user/files. e.g. mydoc.txt NOT - * /data/admin/files/mydoc.txt + * @param OC_FilesystemView $view + * @param string $userId username + * @param string $path path of the file the key belongs to + * @return bool Outcome of unlink operation + * @note $path must be relative to data/user/files. e.g. mydoc.txt NOT + * /data/admin/files/mydoc.txt */ public static function deleteFileKey( \OC_FilesystemView $view, $userId, $path ) { @@ -220,12 +220,11 @@ class Keymanager { \OC_FileProxy::$enabled = false; - if ( !$view->file_exists( '' ) ) $view->mkdir( '' ); + if ( !$view->file_exists( '' ) ) + $view->mkdir( '' ); return $view->file_put_contents( $user . '.private.key', $key ); - - \OC_FileProxy::$enabled = true; - + } /** @@ -253,24 +252,24 @@ class Keymanager { \OC_FileProxy::$enabled = false; - if ( !$view->file_exists( '' ) ) $view->mkdir( '' ); + if ( !$view->file_exists( '' ) ) + $view->mkdir( '' ); return $view->file_put_contents( \OCP\User::getUser() . '.public.key', $key ); - - \OC_FileProxy::$enabled = true; + } /** - * @brief store file encryption key - * - * @param string $path relative path of the file, including filename - * @param string $key - * @param null $view - * @param string $dbClassName - * @return bool true/false - * @note The keyfile is not encrypted here. Client code must - * asymmetrically encrypt the keyfile before passing it to this method + * @brief store file encryption key + * + * @param string $path relative path of the file, including filename + * @param string $key + * @param null $view + * @param string $dbClassName + * @return bool true/false + * @note The keyfile is not encrypted here. Client code must + * asymmetrically encrypt the keyfile before passing it to this method */ public static function setShareKey( \OC_FilesystemView $view, $path, $userId, $shareKey ) { @@ -280,54 +279,38 @@ class Keymanager { return $view->file_put_contents( $basePath . '/' . $shareKeyPath . '.shareKey', $shareKey ); - } - - /** - * @brief Make preparations to vars and filesystem for saving a keyfile - */ - public static function keySetPreparation( \OC_FilesystemView $view, $path, $basePath, $userId ) { + } + + /** + * @brief Make preparations to vars and filesystem for saving a keyfile + */ + public static function keySetPreparation( \OC_FilesystemView $view, $path, $basePath, $userId ) { $targetPath = ltrim( $path, '/' ); $path_parts = pathinfo( $targetPath ); // If the file resides within a subdirectory, create it - if ( - isset( $path_parts['dirname'] ) - && ! $view->file_exists( $basePath . '/' . $path_parts['dirname'] ) + if ( + isset( $path_parts['dirname'] ) + && ! $view->file_exists( $basePath . '/' . $path_parts['dirname'] ) ) { $view->mkdir( $basePath . '/' . $path_parts['dirname'] ); } - return $targetPath; - - } + return $targetPath; - /** - * @brief change password of private encryption key - * - * @param string $oldpasswd old password - * @param string $newpasswd new password - * @return bool true/false - */ - public static function changePasswd($oldpasswd, $newpasswd) { - - if ( \OCP\User::checkPassword(\OCP\User::getUser(), $newpasswd) ) { - return Crypt::changekeypasscode($oldpasswd, $newpasswd); - } - return false; - } - + /** * @brief Fetch the legacy encryption key from user files * @param string $login used to locate the legacy key * @param string $passphrase used to decrypt the legacy key * @return true / false * - * if the key is left out, the default handeler will be used + * if the key is left out, the default handler will be used */ public function getLegacyKey() { diff --git a/apps/files_encryption/lib/stream.php b/apps/files_encryption/lib/stream.php index d4b993b4c0..65d7d57a05 100644 --- a/apps/files_encryption/lib/stream.php +++ b/apps/files_encryption/lib/stream.php @@ -173,7 +173,7 @@ class Stream { // $count will always be 8192 https://bugs.php.net/bug.php?id=21641 // This makes this function a lot simpler, but will break this class if the above 'bug' gets 'fixed' - \OCP\Util::writeLog( 'files_encryption', 'PHP "bug" 21641 no longer holds, decryption system requires refactoring', OCP\Util::FATAL ); + \OCP\Util::writeLog( 'files_encryption', 'PHP "bug" 21641 no longer holds, decryption system requires refactoring', \OCP\Util::FATAL ); die(); @@ -209,7 +209,7 @@ class Stream { } /** - * @brief Encrypt and pad data ready for writting to disk + * @brief Encrypt and pad data ready for writing to disk * @param string $plainData data to be encrypted * @param string $key key to use for encryption * @return encrypted data on success, false on failure @@ -403,7 +403,7 @@ class Stream { $encrypted = $this->preWriteEncrypt( $chunk, $this->keyfile ); // Write the data chunk to disk. This will be - // addended to the last data chunk if the file + // attended to the last data chunk if the file // being handled totals more than 6126 bytes fwrite( $this->handle, $encrypted ); diff --git a/apps/files_encryption/settings-personal.php b/apps/files_encryption/settings-personal.php index 6fe4ea6d56..af0273cfdc 100644 --- a/apps/files_encryption/settings-personal.php +++ b/apps/files_encryption/settings-personal.php @@ -12,8 +12,6 @@ $blackList = explode( ',', \OCP\Config::getAppValue( 'files_encryption', 'type_b $tmpl->assign( 'blacklist', $blackList ); -OCP\Util::addscript('files_encryption','settings-personal'); - return $tmpl->fetchPage(); return null; diff --git a/apps/files_encryption/templates/settings-personal.php b/apps/files_encryption/templates/settings-personal.php index 1f71efb173..47467c52c0 100644 --- a/apps/files_encryption/templates/settings-personal.php +++ b/apps/files_encryption/templates/settings-personal.php @@ -16,7 +16,7 @@ -

+ From 0664b98b4ff3a8dd8c1b97732cdb60d2b7077636 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Sat, 9 Feb 2013 18:09:03 +0100 Subject: [PATCH 098/719] added icons and mimetypes for .msi and .exe files --- core/img/filetypes/application.png | Bin 0 -> 464 bytes lib/mimetypes.list.php | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 core/img/filetypes/application.png diff --git a/core/img/filetypes/application.png b/core/img/filetypes/application.png new file mode 100644 index 0000000000000000000000000000000000000000..1dee9e366094e87db68c606d0522d72d4b939818 GIT binary patch literal 464 zcmV;>0WbcEP)8e6`gpm!y1M!N^ZV(=IC*t) z{^;nqJv-tM$9J1L2QJ2DN!#51=1_l@G`2=6e0lehL%sic%`_4--LFM}IF!KzJCseW zq1I3__Z40|e?qyK1__gzP(qrBf-G7SQbQ`#Lw94WVe(o`qg+f4hy;Qju)q#I(9{`% zQmAGomzhQ!b|gq>KqL@IkO~$=Koi}a$u6d07kiS}NoYVMJjAeZpaB*;wwcDdEbK@K zNP;B7RzhQ|H9AlUO<`J>m1(5R)Pb-iLBb@7Jp)}LHdAb-VVgYxVoTzGoqu{~a>6uj zeqCRFI9pC#h09bGwy9;oHcp6(RB%jeY^F=Ll!S+9JkVe4nDG7tJMQiP0000 'application/illustrator', 'epub' => 'application/epub+zip', 'mobi' => 'application/x-mobipocket-ebook', + 'exe' => 'application', + 'msi' => 'application' ); From 96cfe375871a6ea24265183f76322e3fabcbd4d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Kj=C3=B6lhede?= Date: Sat, 9 Feb 2013 19:08:39 +0100 Subject: [PATCH 099/719] Update to conform to API changes --- apps/files_external/lib/sftp.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index 883b3ab643..0b461fe7f4 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -132,12 +132,13 @@ class SFTP extends OC\Files\Storage\Common { $list = $this->client->nlist($this->abs_path($path)); $id = md5('sftp:' . $path); - OC_FakeDirStream::$dirs[$id] = array(); + $dir_stream = array(); foreach($list as $file) { if ($file != '.' && $file != '..') { - OC_FakeDirStream::$dirs[$id][] = $file; + $dir_stream[] = $file; } } + \OC\Files\Stream\Dir::register($id, $dir_stream); return opendir('fakedir://' . $id); } catch(Exception $e) { return false; @@ -212,7 +213,7 @@ class SFTP extends OC\Files\Storage\Common { $ext=''; } $tmpFile=OC_Helper::tmpFile($ext); - OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack'); + \OC\Files\Stream\Close::registerCallback($tmpFile], array($this, 'writeBack')); if ($this->file_exists($path)) { $this->getFile($abs_path, $tmpFile); } From b2261c31eb3a7d45a0aacad90459b924503c8dac Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Sat, 9 Feb 2013 19:23:36 +0100 Subject: [PATCH 100/719] added l10n for db error messages --- lib/setup.php | 124 +++++++++++++++++++++++++++++--------------------- 1 file changed, 72 insertions(+), 52 deletions(-) diff --git a/lib/setup.php b/lib/setup.php index f342142c95..01aa9eb019 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -19,18 +19,25 @@ class DatabaseSetupException extends Exception } class OC_Setup { + + public static function getTrans(){ + return OC_L10N::get('lib'); + } + public static function install($options) { + $l = self::getTrans(); + $error = array(); $dbtype = $options['dbtype']; if(empty($options['adminlogin'])) { - $error[] = 'Set an admin username.'; + $error[] = $l->t('Set an admin username.'); } if(empty($options['adminpass'])) { - $error[] = 'Set an admin password.'; + $error[] = $l->t('Set an admin password.'); } if(empty($options['directory'])) { - $error[] = 'Specify a data folder.'; + $error[] = $l->t('Specify a data folder.'); } if($dbtype=='mysql' or $dbtype == 'pgsql' or $dbtype == 'oci') { //mysql and postgresql needs more config options @@ -43,16 +50,16 @@ class OC_Setup { if(empty($options['dbuser'])) { - $error[] = "$dbprettyname enter the database username."; + $error[] = $l->t("$dbprettyname enter the database username."); } if(empty($options['dbname'])) { - $error[] = "$dbprettyname enter the database name."; + $error[] = $l->t("$dbprettyname enter the database name."); } if(substr_count($options['dbname'], '.') >= 1) { - $error[] = "$dbprettyname you may not use dots in the database name"; + $error[] = $l->t("$dbprettyname you may not use dots in the database name"); } if($dbtype != 'oci' && empty($options['dbhost'])) { - $error[] = "$dbprettyname set the database host."; + $error[] = $l->t("$dbprettyname set the database host."); } } @@ -116,8 +123,8 @@ class OC_Setup { self::setupPostgreSQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $username); } catch (Exception $e) { $error[] = array( - 'error' => 'PostgreSQL username and/or password not valid', - 'hint' => 'You need to enter either an existing account or the administrator.' + 'error' => $l->t('PostgreSQL username and/or password not valid'), + 'hint' => $l->t('You need to enter either an existing account or the administrator.') ); return $error; } @@ -139,8 +146,8 @@ class OC_Setup { self::setupOCIDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $dbtablespace, $username); } catch (Exception $e) { $error[] = array( - 'error' => 'Oracle username and/or password not valid', - 'hint' => 'You need to enter either an existing account or the administrator.' + 'error' => $l->t('Oracle username and/or password not valid'), + 'hint' => $l->t('You need to enter either an existing account or the administrator.') ); return $error; } @@ -190,9 +197,11 @@ class OC_Setup { private static function setupMySQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $username) { //check if the database user has admin right + $l = self::getTrans(); $connection = @mysql_connect($dbhost, $dbuser, $dbpass); if(!$connection) { - throw new DatabaseSetupException('MySQL username and/or password not valid','You need to enter either an existing account or the administrator.'); + throw new DatabaseSetupException($l->t('MySQL username and/or password not valid'), + $l->t('You need to enter either an existing account or the administrator.')); } $oldUser=OC_Config::getValue('dbuser', false); @@ -239,11 +248,12 @@ class OC_Setup { private static function createMySQLDatabase($name, $user, $connection) { //we cant use OC_BD functions here because we need to connect as the administrative user. + $l = self::getTrans(); $query = "CREATE DATABASE IF NOT EXISTS `$name`"; $result = mysql_query($query, $connection); if(!$result) { - $entry='DB Error: "'.mysql_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; + $entry = $l->t('DB Error: "%s"', array(mysql_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
'; echo($entry); } $query="GRANT ALL PRIVILEGES ON `$name` . * TO '$user'"; @@ -253,15 +263,18 @@ class OC_Setup { private static function createDBUser($name, $password, $connection) { // we need to create 2 accounts, one for global use and one for local user. if we don't specify the local one, // the anonymous user would take precedence when there is one. + $l = self::getTrans(); $query = "CREATE USER '$name'@'localhost' IDENTIFIED BY '$password'"; $result = mysql_query($query, $connection); if (!$result) { - throw new DatabaseSetupException("MySQL user '" . "$name" . "'@'localhost' already exists","Delete this user from MySQL."); + throw new DatabaseSetupException($l->t("MySQL user '%s'@'localhost' exists already.", + array($name)), $l->t("Drop this user from MySQL", array($name))); } $query = "CREATE USER '$name'@'%' IDENTIFIED BY '$password'"; $result = mysql_query($query, $connection); if (!$result) { - throw new DatabaseSetupException("MySQL user '" . "$name" . "'@'%' already exists","Delete this user from MySQL."); + throw new DatabaseSetupException($l->t("MySQL user '%s'@'%%' already exists", array($name)), + $l->t("Drop this user from MySQL.")); } } @@ -269,12 +282,13 @@ class OC_Setup { $e_host = addslashes($dbhost); $e_user = addslashes($dbuser); $e_password = addslashes($dbpass); + $l = self::getTrans(); //check if the database user has admin rights $connection_string = "host='$e_host' dbname=postgres user='$e_user' password='$e_password'"; $connection = @pg_connect($connection_string); if(!$connection) { - throw new Exception('PostgreSQL username and/or password not valid'); + throw new Exception($l->t('PostgreSQL username and/or password not valid')); } $e_user = pg_escape_string($dbuser); //check for roles creation rights in postgresql @@ -319,7 +333,7 @@ class OC_Setup { $connection_string = "host='$e_host' dbname='$e_dbname' user='$e_user' password='$e_password'"; $connection = @pg_connect($connection_string); if(!$connection) { - throw new Exception('PostgreSQL username and/or password not valid'); + throw new Exception($l->t('PostgreSQL username and/or password not valid')); } $query = "select count(*) FROM pg_class WHERE relname='{$dbtableprefix}users' limit 1"; $result = pg_query($connection, $query); @@ -332,14 +346,16 @@ class OC_Setup { } private static function pg_createDatabase($name, $user, $connection) { + //we cant use OC_BD functions here because we need to connect as the administrative user. + $l = self::getTrans(); $e_name = pg_escape_string($name); $e_user = pg_escape_string($user); $query = "select datname from pg_database where datname = '$e_name'"; $result = pg_query($connection, $query); if(!$result) { - $entry='DB Error: "'.pg_last_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; + $entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
'; echo($entry); } if(! pg_fetch_row($result)) { @@ -347,8 +363,8 @@ class OC_Setup { $query = "CREATE DATABASE \"$e_name\" OWNER \"$e_user\""; $result = pg_query($connection, $query); if(!$result) { - $entry='DB Error: "'.pg_last_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; + $entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
'; echo($entry); } else { @@ -359,13 +375,14 @@ class OC_Setup { } private static function pg_createDBUser($name, $password, $connection) { + $l = self::getTrans(); $e_name = pg_escape_string($name); $e_password = pg_escape_string($password); $query = "select * from pg_roles where rolname='$e_name';"; $result = pg_query($connection, $query); if(!$result) { - $entry='DB Error: "'.pg_last_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; + $entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
'; echo($entry); } @@ -374,8 +391,8 @@ class OC_Setup { $query = "CREATE USER \"$e_name\" CREATEDB PASSWORD '$e_password';"; $result = pg_query($connection, $query); if(!$result) { - $entry='DB Error: "'.pg_last_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; + $entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
'; echo($entry); } } @@ -383,14 +400,15 @@ class OC_Setup { $query = "ALTER ROLE \"$e_name\" WITH PASSWORD '$e_password';"; $result = pg_query($connection, $query); if(!$result) { - $entry='DB Error: "'.pg_last_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; + $entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
'; echo($entry); } } } private static function setupOCIDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $dbtablespace, $username) { + $l = self::getTrans(); $e_host = addslashes($dbhost); $e_dbname = addslashes($dbname); //check if the database user has admin right @@ -402,15 +420,15 @@ class OC_Setup { $connection = @oci_connect($dbuser, $dbpass, $easy_connect_string); if(!$connection) { $e = oci_error(); - throw new Exception('Oracle username and/or password not valid'); + throw new Exception($l->t('Oracle username and/or password not valid')); } //check for roles creation rights in oracle $query="SELECT count(*) FROM user_role_privs, role_sys_privs WHERE user_role_privs.granted_role = role_sys_privs.role AND privilege = 'CREATE ROLE'"; $stmt = oci_parse($connection, $query); if (!$stmt) { - $entry='DB Error: "'.oci_last_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; + $entry = $l->t('DB Error: "%s"', array(oci_last_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
'; echo($entry); } $result = oci_execute($stmt); @@ -468,15 +486,15 @@ class OC_Setup { } $connection = @oci_connect($dbuser, $dbpass, $easy_connect_string); if(!$connection) { - throw new Exception('Oracle username and/or password not valid'); + throw new Exception($l->t('Oracle username and/or password not valid')); } $query = "SELECT count(*) FROM user_tables WHERE table_name = :un"; $stmt = oci_parse($connection, $query); $un = $dbtableprefix.'users'; oci_bind_by_name($stmt, ':un', $un); if (!$stmt) { - $entry='DB Error: "'.oci_last_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; + $entry = $l->t('DB Error: "%s"', array(oci_last_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
'; echo($entry); } $result = oci_execute($stmt); @@ -497,19 +515,19 @@ class OC_Setup { * @param resource $connection */ private static function oci_createDBUser($name, $password, $tablespace, $connection) { - + $l = self::getTrans(); $query = "SELECT * FROM all_users WHERE USERNAME = :un"; $stmt = oci_parse($connection, $query); if (!$stmt) { - $entry='DB Error: "'.oci_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; + $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
'; echo($entry); } oci_bind_by_name($stmt, ':un', $name); $result = oci_execute($stmt); if(!$result) { - $entry='DB Error: "'.oci_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; + $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
'; echo($entry); } @@ -519,31 +537,32 @@ class OC_Setup { $query = 'CREATE USER '.$name.' IDENTIFIED BY "'.$password.'" DEFAULT TABLESPACE '.$tablespace; //TODO set default tablespace $stmt = oci_parse($connection, $query); if (!$stmt) { - $entry='DB Error: "'.oci_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; + $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
'; echo($entry); } //oci_bind_by_name($stmt, ':un', $name); $result = oci_execute($stmt); if(!$result) { - $entry='DB Error: "'.oci_error($connection).'"
'; - $entry.='Offending command was: '.$query.', name:'.$name.', password:'.$password.'
'; + $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s", name: %s, password: %s', + array($query, $name, $password)) . '
'; echo($entry); } } else { // change password of the existing role $query = "ALTER USER :un IDENTIFIED BY :pw"; $stmt = oci_parse($connection, $query); if (!$stmt) { - $entry='DB Error: "'.oci_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; + $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
'; echo($entry); } oci_bind_by_name($stmt, ':un', $name); oci_bind_by_name($stmt, ':pw', $password); $result = oci_execute($stmt); if(!$result) { - $entry='DB Error: "'.oci_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; + $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
'; echo($entry); } } @@ -551,14 +570,15 @@ class OC_Setup { $query = 'GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER, UNLIMITED TABLESPACE TO '.$name; $stmt = oci_parse($connection, $query); if (!$stmt) { - $entry='DB Error: "'.oci_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; + $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
'; echo($entry); } $result = oci_execute($stmt); if(!$result) { - $entry='DB Error: "'.oci_error($connection).'"
'; - $entry.='Offending command was: '.$query.', name:'.$name.', password:'.$password.'
'; + $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '
'; + $entry .= $l->t('Offending command was: "%s", name: %s, password: %s', + array($query, $name, $password)) . '
'; echo($entry); } } @@ -616,10 +636,10 @@ class OC_Setup { */ public static function postSetupCheck($params) { // setup was successful -> webdav testing now + $l = self::getTrans(); if (OC_Util::isWebDAVWorking()) { header("Location: ".OC::$WEBROOT.'/'); } else { - $l=OC_L10N::get('lib'); $error = $l->t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.'); $hint = $l->t('Please double check the installation guides.', 'http://doc.owncloud.org/server/5.0/admin_manual/installation.html'); From 71d3903cfd54388bed22fafaaef750c60f8100c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Kj=C3=B6lhede?= Date: Sat, 9 Feb 2013 20:34:21 +0100 Subject: [PATCH 101/719] Added unittest --- apps/files_external/tests/config.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/files_external/tests/config.php b/apps/files_external/tests/config.php index 65127175ad..9ee77a4746 100644 --- a/apps/files_external/tests/config.php +++ b/apps/files_external/tests/config.php @@ -51,5 +51,12 @@ return array( 'app_secret' => '', 'token' => '', 'token_secret' => '' + ), + 'sftp' => array ( + 'run'=>false, + 'host'=>'localhost', + 'user'=>'test', + 'password'=>'test', + 'root'=>'/test' ) ); From 674955d1b64abe454dbd894d44d4d78e882b0fe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Kj=C3=B6lhede?= Date: Sat, 9 Feb 2013 20:35:48 +0100 Subject: [PATCH 102/719] Spelling mistake --- apps/files_external/lib/sftp.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index 0b461fe7f4..e5e9ea8b0f 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -213,7 +213,7 @@ class SFTP extends OC\Files\Storage\Common { $ext=''; } $tmpFile=OC_Helper::tmpFile($ext); - \OC\Files\Stream\Close::registerCallback($tmpFile], array($this, 'writeBack')); + \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack')); if ($this->file_exists($path)) { $this->getFile($abs_path, $tmpFile); } From 9e42a36fd854797c3674c047dfe672dad4b726be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Kj=C3=B6lhede?= Date: Sat, 9 Feb 2013 23:29:58 +0100 Subject: [PATCH 103/719] Update to touch --- apps/files_external/lib/sftp.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index e5e9ea8b0f..c6be3f96ba 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -239,12 +239,16 @@ class SFTP extends OC\Files\Storage\Common { public function touch($path, $mtime=null) { try { + if ($mtime != null) return false; if (!$this->file_exists($path)) { $this->client->put($this->abs_path($path), ''); + } else { + return false; } } catch (Exception $e) { + return false; } - + return true; } public function getFile($path, $target) { From bcf98879cb8e2551e3f9e044da88d81ee7a17139 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Kj=C3=B6lhede?= Date: Sat, 9 Feb 2013 23:33:01 +0100 Subject: [PATCH 104/719] Just a little cleaner in touch --- apps/files_external/lib/sftp.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index c6be3f96ba..f3605c3aa2 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -239,7 +239,7 @@ class SFTP extends OC\Files\Storage\Common { public function touch($path, $mtime=null) { try { - if ($mtime != null) return false; + if (!is_null($mtime)) return false; if (!$this->file_exists($path)) { $this->client->put($this->abs_path($path), ''); } else { From bd2f8980cd65b466342ae877e8a3ee54f8672391 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Sat, 9 Feb 2013 23:37:42 +0100 Subject: [PATCH 105/719] Typo --- lib/app.php | 6 +++--- settings/ajax/apps/ocs.php | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/app.php b/lib/app.php index 3a4e21e8cd..f9daea0bab 100644 --- a/lib/app.php +++ b/lib/app.php @@ -683,10 +683,10 @@ class OC_App{ * @return array, multi-dimensional array of apps. Keys: id, name, type, typename, personid, license, detailpage, preview, changed, description */ public static function getAppstoreApps( $filter = 'approved' ) { - $catagoryNames = OC_OCSClient::getCategories(); - if ( is_array( $catagoryNames ) ) { + $categoryNames = OC_OCSClient::getCategories(); + if ( is_array( $categoryNames ) ) { // Check that categories of apps were retrieved correctly - if ( ! $categories = array_keys( $catagoryNames ) ) { + if ( ! $categories = array_keys( $categoryNames ) ) { return false; } diff --git a/settings/ajax/apps/ocs.php b/settings/ajax/apps/ocs.php index d0205a1ba3..9bf3ccc34d 100644 --- a/settings/ajax/apps/ocs.php +++ b/settings/ajax/apps/ocs.php @@ -23,9 +23,9 @@ if(is_null($enabledApps)) { $apps=array(); // apps from external repo via OCS -$catagoryNames=OC_OCSClient::getCategories(); -if(is_array($catagoryNames)) { - $categories=array_keys($catagoryNames); +$categoryNames=OC_OCSClient::getCategories(); +if(is_array($categoryNames)) { + $categories=array_keys($categoryNames); $page=0; $filter='approved'; $externalApps=OC_OCSClient::getApplications($categories, $page, $filter); From 2dde418e996c5383ee6238b727ece335e7ef3965 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Sat, 9 Feb 2013 23:43:44 +0100 Subject: [PATCH 106/719] Remove uneeded lines --- settings/ajax/updateapp.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/settings/ajax/updateapp.php b/settings/ajax/updateapp.php index 9367a3b5a3..300e864251 100644 --- a/settings/ajax/updateapp.php +++ b/settings/ajax/updateapp.php @@ -12,7 +12,4 @@ if($result !== false) { } else { $l = OC_L10N::get('settings'); OC_JSON::error(array("data" => array( "message" => $l->t("Couldn't update app.") ))); -} - - - +} \ No newline at end of file From c6622301e55a14db0cc45df9e0f294ec6e3f01ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Kj=C3=B6lhede?= Date: Sat, 9 Feb 2013 23:49:21 +0100 Subject: [PATCH 107/719] Security bug --- apps/files_external/lib/sftp.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index f3605c3aa2..2f62a0ecf8 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -58,7 +58,7 @@ class SFTP extends OC\Files\Storage\Common { } private function abs_path($path) { - return $this->root . $path; + return $this->root . $this->cleanPath($path); } private function host_keys_path() { From f7d898d83512ce952a51c70ffacf083fc81f54e0 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sun, 10 Feb 2013 00:10:29 +0100 Subject: [PATCH 108/719] [tx-robot] updated from transifex --- apps/files/l10n/ar.php | 2 +- apps/files/l10n/bg_BG.php | 1 + apps/files/l10n/bn_BD.php | 7 +- apps/files/l10n/ca.php | 9 ++- apps/files/l10n/cs_CZ.php | 9 ++- apps/files/l10n/da.php | 8 +- apps/files/l10n/de.php | 9 ++- apps/files/l10n/de_DE.php | 9 ++- apps/files/l10n/el.php | 13 +++- apps/files/l10n/eo.php | 7 +- apps/files/l10n/es.php | 8 +- apps/files/l10n/es_AR.php | 9 ++- apps/files/l10n/et_EE.php | 4 +- apps/files/l10n/eu.php | 8 +- apps/files/l10n/fa.php | 7 +- apps/files/l10n/fi_FI.php | 9 ++- apps/files/l10n/fr.php | 9 ++- apps/files/l10n/gl.php | 7 +- apps/files/l10n/he.php | 4 +- apps/files/l10n/hr.php | 4 +- apps/files/l10n/hu_HU.php | 8 +- apps/files/l10n/id.php | 4 +- apps/files/l10n/is.php | 7 +- apps/files/l10n/it.php | 9 ++- apps/files/l10n/ja_JP.php | 9 ++- apps/files/l10n/ka_GE.php | 4 +- apps/files/l10n/ko.php | 7 +- apps/files/l10n/lb.php | 2 +- apps/files/l10n/lt_LT.php | 4 +- apps/files/l10n/lv.php | 5 +- apps/files/l10n/mk.php | 4 +- apps/files/l10n/ms_MY.php | 2 +- apps/files/l10n/nb_NO.php | 4 +- apps/files/l10n/nl.php | 8 +- apps/files/l10n/oc.php | 4 +- apps/files/l10n/pl.php | 7 +- apps/files/l10n/pt_BR.php | 8 +- apps/files/l10n/pt_PT.php | 9 ++- apps/files/l10n/ro.php | 7 +- apps/files/l10n/ru.php | 9 ++- apps/files/l10n/ru_RU.php | 5 +- apps/files/l10n/si_LK.php | 2 +- apps/files/l10n/sk_SK.php | 9 ++- apps/files/l10n/sl.php | 4 +- apps/files/l10n/sr.php | 4 +- apps/files/l10n/sv.php | 9 ++- apps/files/l10n/ta_LK.php | 4 +- apps/files/l10n/th_TH.php | 9 ++- apps/files/l10n/tr.php | 7 +- apps/files/l10n/uk.php | 5 +- apps/files/l10n/vi.php | 21 +++++- apps/files/l10n/zh_CN.GB2312.php | 4 +- apps/files/l10n/zh_CN.php | 7 +- apps/files/l10n/zh_TW.php | 8 +- apps/files_encryption/l10n/ca.php | 5 -- apps/files_encryption/l10n/cs_CZ.php | 5 -- apps/files_encryption/l10n/da.php | 5 -- apps/files_encryption/l10n/de.php | 5 -- apps/files_encryption/l10n/de_DE.php | 5 -- apps/files_encryption/l10n/el.php | 6 +- apps/files_encryption/l10n/es.php | 5 -- apps/files_encryption/l10n/es_AR.php | 5 -- apps/files_encryption/l10n/eu.php | 1 - apps/files_encryption/l10n/fa.php | 1 - apps/files_encryption/l10n/fi_FI.php | 1 - apps/files_encryption/l10n/fr.php | 5 -- apps/files_encryption/l10n/hu_HU.php | 5 -- apps/files_encryption/l10n/it.php | 5 -- apps/files_encryption/l10n/ja_JP.php | 5 -- apps/files_encryption/l10n/ko.php | 5 -- apps/files_encryption/l10n/lv.php | 5 -- apps/files_encryption/l10n/nl.php | 5 -- apps/files_encryption/l10n/pt_BR.php | 5 -- apps/files_encryption/l10n/pt_PT.php | 5 -- apps/files_encryption/l10n/ro.php | 5 -- apps/files_encryption/l10n/ru.php | 5 -- apps/files_encryption/l10n/ru_RU.php | 3 - apps/files_encryption/l10n/sk_SK.php | 5 -- apps/files_encryption/l10n/sv.php | 5 -- apps/files_encryption/l10n/th_TH.php | 5 -- apps/files_encryption/l10n/vi.php | 3 + apps/files_encryption/l10n/zh_TW.php | 5 -- apps/files_external/l10n/bg_BG.php | 1 + apps/files_external/l10n/vi.php | 2 + apps/files_trashbin/l10n/bg_BG.php | 3 +- apps/files_trashbin/l10n/el.php | 6 ++ apps/files_trashbin/l10n/ru_RU.php | 6 ++ apps/files_trashbin/l10n/vi.php | 9 ++- apps/files_versions/l10n/el.php | 8 ++ apps/files_versions/l10n/vi.php | 8 ++ apps/user_ldap/l10n/vi.php | 10 +++ apps/user_webdavauth/l10n/vi.php | 4 +- core/l10n/bg_BG.php | 1 + core/l10n/ca.php | 2 + core/l10n/cs_CZ.php | 2 + core/l10n/el.php | 1 + core/l10n/it.php | 2 + core/l10n/ru.php | 2 + core/l10n/ru_RU.php | 2 + core/l10n/vi.php | 10 ++- l10n/af_ZA/files.po | 97 ++++++++++++------------ l10n/af_ZA/files_encryption.po | 26 +------ l10n/af_ZA/lib.po | 29 ++++--- l10n/ar/files.po | 97 ++++++++++++------------ l10n/ar/files_encryption.po | 26 +------ l10n/ar/lib.po | 37 +++++---- l10n/bg_BG/core.po | 50 ++++++------- l10n/bg_BG/files.po | 99 ++++++++++++------------ l10n/bg_BG/files_encryption.po | 26 +------ l10n/bg_BG/files_external.po | 10 +-- l10n/bg_BG/files_trashbin.po | 6 +- l10n/bg_BG/lib.po | 39 ++++++---- l10n/bg_BG/settings.po | 38 +++++----- l10n/bn_BD/files.po | 79 +++++++++---------- l10n/bn_BD/files_encryption.po | 26 +------ l10n/bn_BD/lib.po | 37 +++++---- l10n/ca/core.po | 54 ++++++------- l10n/ca/files.po | 83 ++++++++++---------- l10n/ca/files_encryption.po | 28 +------ l10n/ca/lib.po | 39 ++++++---- l10n/cs_CZ/core.po | 54 ++++++------- l10n/cs_CZ/files.po | 83 ++++++++++---------- l10n/cs_CZ/files_encryption.po | 28 +------ l10n/cs_CZ/lib.po | 39 ++++++---- l10n/da/files.po | 81 ++++++++++---------- l10n/da/files_encryption.po | 26 +------ l10n/da/lib.po | 39 ++++++---- l10n/de/files.po | 83 ++++++++++---------- l10n/de/files_encryption.po | 26 +------ l10n/de/lib.po | 39 ++++++---- l10n/de_DE/files.po | 83 ++++++++++---------- l10n/de_DE/files_encryption.po | 28 +------ l10n/de_DE/lib.po | 39 ++++++---- l10n/el/core.po | 54 ++++++------- l10n/el/files.po | 89 +++++++++++----------- l10n/el/files_encryption.po | 33 ++------ l10n/el/files_trashbin.po | 19 ++--- l10n/el/files_versions.po | 24 +++--- l10n/el/lib.po | 39 ++++++---- l10n/eo/files.po | 79 +++++++++---------- l10n/eo/files_encryption.po | 26 +------ l10n/eo/lib.po | 37 +++++---- l10n/es/files.po | 81 ++++++++++---------- l10n/es/files_encryption.po | 28 +------ l10n/es/lib.po | 39 ++++++---- l10n/es_AR/files.po | 83 ++++++++++---------- l10n/es_AR/files_encryption.po | 26 +------ l10n/es_AR/lib.po | 39 ++++++---- l10n/et_EE/files.po | 73 +++++++++--------- l10n/et_EE/files_encryption.po | 26 +------ l10n/et_EE/lib.po | 37 +++++---- l10n/eu/files.po | 81 ++++++++++---------- l10n/eu/files_encryption.po | 26 +------ l10n/eu/lib.po | 39 ++++++---- l10n/fa/files.po | 79 +++++++++---------- l10n/fa/files_encryption.po | 26 +------ l10n/fa/lib.po | 29 ++++--- l10n/fi_FI/files.po | 83 ++++++++++---------- l10n/fi_FI/files_encryption.po | 26 +------ l10n/fi_FI/lib.po | 39 ++++++---- l10n/fr/files.po | 83 ++++++++++---------- l10n/fr/files_encryption.po | 28 +------ l10n/fr/lib.po | 39 ++++++---- l10n/gl/files.po | 79 +++++++++---------- l10n/gl/files_encryption.po | 26 +------ l10n/gl/lib.po | 39 ++++++---- l10n/he/files.po | 73 +++++++++--------- l10n/he/files_encryption.po | 26 +------ l10n/he/lib.po | 37 +++++---- l10n/hi/files.po | 97 ++++++++++++------------ l10n/hi/files_encryption.po | 26 +------ l10n/hi/lib.po | 37 +++++---- l10n/hr/files.po | 73 +++++++++--------- l10n/hr/files_encryption.po | 26 +------ l10n/hr/lib.po | 37 +++++---- l10n/hu_HU/files.po | 81 ++++++++++---------- l10n/hu_HU/files_encryption.po | 26 +------ l10n/hu_HU/lib.po | 39 ++++++---- l10n/ia/files.po | 97 ++++++++++++------------ l10n/ia/files_encryption.po | 26 +------ l10n/ia/lib.po | 37 +++++---- l10n/id/files.po | 73 +++++++++--------- l10n/id/files_encryption.po | 26 +------ l10n/id/lib.po | 37 +++++---- l10n/is/files.po | 79 +++++++++---------- l10n/is/files_encryption.po | 26 +------ l10n/is/lib.po | 37 +++++---- l10n/it/core.po | 54 ++++++------- l10n/it/files.po | 83 ++++++++++---------- l10n/it/files_encryption.po | 28 +------ l10n/it/lib.po | 39 ++++++---- l10n/ja_JP/files.po | 83 ++++++++++---------- l10n/ja_JP/files_encryption.po | 28 +------ l10n/ja_JP/lib.po | 39 ++++++---- l10n/ka_GE/files.po | 73 +++++++++--------- l10n/ka_GE/files_encryption.po | 26 +------ l10n/ka_GE/lib.po | 37 +++++---- l10n/ko/files.po | 79 +++++++++---------- l10n/ko/files_encryption.po | 26 +------ l10n/ko/lib.po | 29 ++++--- l10n/ku_IQ/files.po | 97 ++++++++++++------------ l10n/ku_IQ/files_encryption.po | 26 +------ l10n/ku_IQ/lib.po | 37 +++++---- l10n/lb/files.po | 97 ++++++++++++------------ l10n/lb/files_encryption.po | 26 +------ l10n/lb/lib.po | 37 +++++---- l10n/lt_LT/files.po | 73 +++++++++--------- l10n/lt_LT/files_encryption.po | 26 +------ l10n/lt_LT/lib.po | 37 +++++---- l10n/lv/files.po | 75 ++++++++++--------- l10n/lv/files_encryption.po | 28 +------ l10n/lv/lib.po | 29 ++++--- l10n/mk/files.po | 73 +++++++++--------- l10n/mk/files_encryption.po | 26 +------ l10n/mk/lib.po | 37 +++++---- l10n/ms_MY/files.po | 73 +++++++++--------- l10n/ms_MY/files_encryption.po | 26 +------ l10n/ms_MY/lib.po | 37 +++++---- l10n/nb_NO/files.po | 73 +++++++++--------- l10n/nb_NO/files_encryption.po | 26 +------ l10n/nb_NO/lib.po | 37 +++++---- l10n/nl/files.po | 81 ++++++++++---------- l10n/nl/files_encryption.po | 28 +------ l10n/nl/lib.po | 39 ++++++---- l10n/nn_NO/files.po | 97 ++++++++++++------------ l10n/nn_NO/files_encryption.po | 26 +------ l10n/nn_NO/lib.po | 37 +++++---- l10n/oc/files.po | 73 +++++++++--------- l10n/oc/files_encryption.po | 26 +------ l10n/oc/lib.po | 37 +++++---- l10n/pl/files.po | 79 +++++++++---------- l10n/pl/files_encryption.po | 26 +------ l10n/pl/lib.po | 39 ++++++---- l10n/pl_PL/files.po | 97 ++++++++++++------------ l10n/pl_PL/files_encryption.po | 26 +------ l10n/pl_PL/lib.po | 37 +++++---- l10n/pt_BR/files.po | 81 ++++++++++---------- l10n/pt_BR/files_encryption.po | 26 +------ l10n/pt_BR/lib.po | 27 +++++-- l10n/pt_PT/files.po | 83 ++++++++++---------- l10n/pt_PT/files_encryption.po | 26 +------ l10n/pt_PT/lib.po | 39 ++++++---- l10n/ro/files.po | 79 +++++++++---------- l10n/ro/files_encryption.po | 26 +------ l10n/ro/lib.po | 39 ++++++---- l10n/ru/core.po | 54 ++++++------- l10n/ru/files.po | 83 ++++++++++---------- l10n/ru/files_encryption.po | 28 +------ l10n/ru/lib.po | 29 ++++--- l10n/ru_RU/core.po | 54 ++++++------- l10n/ru_RU/files.po | 75 ++++++++++--------- l10n/ru_RU/files_encryption.po | 26 +------ l10n/ru_RU/files_trashbin.po | 19 ++--- l10n/ru_RU/lib.po | 39 ++++++---- l10n/si_LK/files.po | 97 ++++++++++++------------ l10n/si_LK/files_encryption.po | 26 +------ l10n/si_LK/lib.po | 37 +++++---- l10n/sk/files.po | 97 ++++++++++++------------ l10n/sk/files_encryption.po | 28 +------ l10n/sk/lib.po | 29 ++++--- l10n/sk_SK/files.po | 83 ++++++++++---------- l10n/sk_SK/files_encryption.po | 28 +------ l10n/sk_SK/lib.po | 39 ++++++---- l10n/sl/files.po | 73 +++++++++--------- l10n/sl/files_encryption.po | 26 +------ l10n/sl/lib.po | 37 +++++---- l10n/sr/files.po | 73 +++++++++--------- l10n/sr/files_encryption.po | 26 +------ l10n/sr/lib.po | 29 ++++--- l10n/sr@latin/files.po | 97 ++++++++++++------------ l10n/sr@latin/files_encryption.po | 26 +------ l10n/sr@latin/lib.po | 37 +++++---- l10n/sv/files.po | 83 ++++++++++---------- l10n/sv/files_encryption.po | 28 +------ l10n/sv/lib.po | 39 ++++++---- l10n/sw_KE/files.po | 97 ++++++++++++------------ l10n/sw_KE/files_encryption.po | 28 +------ l10n/sw_KE/lib.po | 29 ++++--- l10n/ta_LK/files.po | 73 +++++++++--------- l10n/ta_LK/files_encryption.po | 26 +------ l10n/ta_LK/lib.po | 37 +++++---- l10n/templates/core.pot | 46 ++++++------ l10n/templates/files.pot | 95 +++++++++++------------ l10n/templates/files_encryption.pot | 24 +----- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_trashbin.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 25 +++++-- l10n/templates/settings.pot | 4 +- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- l10n/th_TH/files.po | 83 ++++++++++---------- l10n/th_TH/files_encryption.po | 26 +------ l10n/th_TH/lib.po | 39 ++++++---- l10n/tr/files.po | 79 +++++++++---------- l10n/tr/files_encryption.po | 26 +------ l10n/tr/lib.po | 39 ++++++---- l10n/uk/files.po | 75 ++++++++++--------- l10n/uk/files_encryption.po | 26 +------ l10n/uk/lib.po | 39 ++++++---- l10n/vi/core.po | 67 +++++++++-------- l10n/vi/files.po | 104 +++++++++++++------------- l10n/vi/files_encryption.po | 33 ++------ l10n/vi/files_external.po | 21 +++--- l10n/vi/files_trashbin.po | 21 +++--- l10n/vi/files_versions.po | 23 +++--- l10n/vi/lib.po | 40 ++++++---- l10n/vi/settings.po | 69 ++++++++--------- l10n/vi/user_ldap.po | 27 +++---- l10n/vi/user_webdavauth.po | 15 ++-- l10n/zh_CN.GB2312/files.po | 73 +++++++++--------- l10n/zh_CN.GB2312/files_encryption.po | 26 +------ l10n/zh_CN.GB2312/lib.po | 37 +++++---- l10n/zh_CN/files.po | 79 +++++++++---------- l10n/zh_CN/files_encryption.po | 26 +------ l10n/zh_CN/lib.po | 37 +++++---- l10n/zh_HK/files.po | 97 ++++++++++++------------ l10n/zh_HK/files_encryption.po | 26 +------ l10n/zh_HK/lib.po | 37 +++++---- l10n/zh_TW/files.po | 81 ++++++++++---------- l10n/zh_TW/files_encryption.po | 26 +------ l10n/zh_TW/lib.po | 39 ++++++---- lib/l10n/bg_BG.php | 1 + lib/l10n/vi.php | 1 + settings/l10n/bg_BG.php | 14 ++++ settings/l10n/vi.php | 30 ++++++++ 327 files changed, 5204 insertions(+), 5723 deletions(-) diff --git a/apps/files/l10n/ar.php b/apps/files/l10n/ar.php index b741815be4..ce8a34aced 100644 --- a/apps/files/l10n/ar.php +++ b/apps/files/l10n/ar.php @@ -5,7 +5,6 @@ "No file was uploaded" => "لم يتم ترفيع أي من الملفات", "Missing a temporary folder" => "المجلد المؤقت غير موجود", "Files" => "الملفات", -"Unshare" => "إلغاء مشاركة", "Delete" => "محذوف", "Close" => "إغلق", "Name" => "الاسم", @@ -19,6 +18,7 @@ "Folder" => "مجلد", "Nothing in here. Upload something!" => "لا يوجد شيء هنا. إرفع بعض الملفات!", "Download" => "تحميل", +"Unshare" => "إلغاء مشاركة", "Upload too large" => "حجم الترفيع أعلى من المسموح", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "حجم الملفات التي تريد ترفيعها أعلى من المسموح على الخادم." ); diff --git a/apps/files/l10n/bg_BG.php b/apps/files/l10n/bg_BG.php index ae49f51699..632b574545 100644 --- a/apps/files/l10n/bg_BG.php +++ b/apps/files/l10n/bg_BG.php @@ -6,6 +6,7 @@ "replace" => "препокриване", "cancel" => "отказ", "undo" => "възтановяване", +"Close" => "Затвори", "Upload cancelled." => "Качването е спряно.", "Name" => "Име", "Size" => "Размер", diff --git a/apps/files/l10n/bn_BD.php b/apps/files/l10n/bn_BD.php index dbff81cef6..05cfb9f138 100644 --- a/apps/files/l10n/bn_BD.php +++ b/apps/files/l10n/bn_BD.php @@ -1,4 +1,7 @@ "%s কে স্থানান্তর করা সম্ভব হলো না - এই নামের ফাইল বিদ্যমান", +"Could not move %s" => "%s কে স্থানান্তর করা সম্ভব হলো না", +"Unable to rename file" => "ফাইলের নাম পরিবর্তন করা সম্ভব হলো না", "No file was uploaded. Unknown error" => "কোন ফাইল আপলোড করা হয় নি। সমস্যা অজ্ঞাত।", "There is no error, the file uploaded with success" => "কোন সমস্যা নেই, ফাইল আপলোড সুসম্পন্ন হয়েছে", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "আপলোড করা ফাইলটি php.ini তে বর্ণিত upload_max_filesize নির্দেশিত আয়তন অতিক্রম করছেঃ", @@ -9,9 +12,9 @@ "Failed to write to disk" => "ডিস্কে লিখতে ব্যর্থ", "Invalid directory." => "ভুল ডিরেক্টরি", "Files" => "ফাইল", -"Unshare" => "ভাগাভাগি বাতিল ", "Delete" => "মুছে ফেল", "Rename" => "পূনঃনামকরণ", +"Pending" => "মুলতুবি", "{new_name} already exists" => "{new_name} টি বিদ্যমান", "replace" => "প্রতিস্থাপন", "suggest name" => "নাম সুপারিশ করুন", @@ -25,7 +28,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "আপনার ফাইলটি আপলোড করা সম্ভব হলো না, কেননা এটি হয় একটি ফোল্ডার কিংবা এর আকার ০ বাইট", "Upload Error" => "আপলোড করতে সমস্যা ", "Close" => "বন্ধ", -"Pending" => "মুলতুবি", "1 file uploading" => "১টি ফাইল আপলোড করা হচ্ছে", "{count} files uploading" => "{count} টি ফাইল আপলোড করা হচ্ছে", "Upload cancelled." => "আপলোড বাতিল করা হয়েছে।", @@ -55,6 +57,7 @@ "Cancel upload" => "আপলোড বাতিল কর", "Nothing in here. Upload something!" => "এখানে কিছুই নেই। কিছু আপলোড করুন !", "Download" => "ডাউনলোড", +"Unshare" => "ভাগাভাগি বাতিল ", "Upload too large" => "আপলোডের আকারটি অনেক বড়", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "আপনি এই সার্ভারে আপলোড করার জন্য অনুমোদিত ফাইলের সর্বোচ্চ আকারের চেয়ে বৃহদাকার ফাইল আপলোড করার চেষ্টা করছেন ", "Files are being scanned, please wait." => "ফাইলগুলো স্ক্যান করা হচ্ছে, দয়া করে অপেক্ষা করুন।", diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php index 49ea7f73ab..ecfc6abc8d 100644 --- a/apps/files/l10n/ca.php +++ b/apps/files/l10n/ca.php @@ -1,4 +1,7 @@ "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom", +"Could not move %s" => " No s'ha pogut moure %s", +"Unable to rename file" => "No es pot canviar el nom del fitxer", "No file was uploaded. Unknown error" => "No s'ha carregat cap fitxer. Error desconegut", "There is no error, the file uploaded with success" => "El fitxer s'ha pujat correctament", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "L’arxiu que voleu carregar supera el màxim definit en la directiva upload_max_filesize del php.ini:", @@ -7,12 +10,13 @@ "No file was uploaded" => "El fitxer no s'ha pujat", "Missing a temporary folder" => "S'ha perdut un fitxer temporal", "Failed to write to disk" => "Ha fallat en escriure al disc", +"Not enough storage available" => "No hi ha prou espai disponible", "Invalid directory." => "Directori no vàlid.", "Files" => "Fitxers", -"Unshare" => "Deixa de compartir", "Delete permanently" => "Esborra permanentment", "Delete" => "Suprimeix", "Rename" => "Reanomena", +"Pending" => "Pendents", "{new_name} already exists" => "{new_name} ja existeix", "replace" => "substitueix", "suggest name" => "sugereix un nom", @@ -30,7 +34,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes", "Upload Error" => "Error en la pujada", "Close" => "Tanca", -"Pending" => "Pendents", "1 file uploading" => "1 fitxer pujant", "{count} files uploading" => "{count} fitxers en pujada", "Upload cancelled." => "La pujada s'ha cancel·lat.", @@ -57,10 +60,10 @@ "Text file" => "Fitxer de text", "Folder" => "Carpeta", "From link" => "Des d'enllaç", -"Trash" => "Esborra", "Cancel upload" => "Cancel·la la pujada", "Nothing in here. Upload something!" => "Res per aquí. Pugeu alguna cosa!", "Download" => "Baixa", +"Unshare" => "Deixa de compartir", "Upload too large" => "La pujada és massa gran", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor", "Files are being scanned, please wait." => "S'estan escanejant els fitxers, espereu", diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php index c2085a3aa9..7376056e4c 100644 --- a/apps/files/l10n/cs_CZ.php +++ b/apps/files/l10n/cs_CZ.php @@ -1,4 +1,7 @@ "Nelze přesunout %s - existuje soubor se stejným názvem", +"Could not move %s" => "Nelze přesunout %s", +"Unable to rename file" => "Nelze přejmenovat soubor", "No file was uploaded. Unknown error" => "Soubor nebyl odeslán. Neznámá chyba", "There is no error, the file uploaded with success" => "Soubor byl odeslán úspěšně", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Odesílaný soubor přesahuje velikost upload_max_filesize povolenou v php.ini:", @@ -7,12 +10,13 @@ "No file was uploaded" => "Žádný soubor nebyl odeslán", "Missing a temporary folder" => "Chybí adresář pro dočasné soubory", "Failed to write to disk" => "Zápis na disk selhal", +"Not enough storage available" => "Nedostatek dostupného úložného prostoru", "Invalid directory." => "Neplatný adresář", "Files" => "Soubory", -"Unshare" => "Zrušit sdílení", "Delete permanently" => "Trvale odstranit", "Delete" => "Smazat", "Rename" => "Přejmenovat", +"Pending" => "Čekající", "{new_name} already exists" => "{new_name} již existuje", "replace" => "nahradit", "suggest name" => "navrhnout název", @@ -30,7 +34,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Nelze odeslat Váš soubor, protože je to adresář nebo má velikost 0 bajtů", "Upload Error" => "Chyba odesílání", "Close" => "Zavřít", -"Pending" => "Čekající", "1 file uploading" => "odesílá se 1 soubor", "{count} files uploading" => "odesílám {count} souborů", "Upload cancelled." => "Odesílání zrušeno.", @@ -57,10 +60,10 @@ "Text file" => "Textový soubor", "Folder" => "Složka", "From link" => "Z odkazu", -"Trash" => "Koš", "Cancel upload" => "Zrušit odesílání", "Nothing in here. Upload something!" => "Žádný obsah. Nahrajte něco.", "Download" => "Stáhnout", +"Unshare" => "Zrušit sdílení", "Upload too large" => "Odeslaný soubor je příliš velký", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Soubory, které se snažíte odeslat, překračují limit velikosti odesílání na tomto serveru.", "Files are being scanned, please wait." => "Soubory se prohledávají, prosím čekejte.", diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php index 71a5a56de5..13ceacc624 100644 --- a/apps/files/l10n/da.php +++ b/apps/files/l10n/da.php @@ -1,4 +1,7 @@ "Kunne ikke flytte %s - der findes allerede en fil med dette navn", +"Could not move %s" => "Kunne ikke flytte %s", +"Unable to rename file" => "Kunne ikke omdøbe fil", "No file was uploaded. Unknown error" => "Ingen fil blev uploadet. Ukendt fejl.", "There is no error, the file uploaded with success" => "Der er ingen fejl, filen blev uploadet med success", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Den uploadede fil overstiger upload_max_filesize direktivet i php.ini", @@ -7,11 +10,12 @@ "No file was uploaded" => "Ingen fil blev uploadet", "Missing a temporary folder" => "Mangler en midlertidig mappe", "Failed to write to disk" => "Fejl ved skrivning til disk.", +"Not enough storage available" => "Der er ikke nok plads til rådlighed", "Invalid directory." => "Ugyldig mappe.", "Files" => "Filer", -"Unshare" => "Fjern deling", "Delete" => "Slet", "Rename" => "Omdøb", +"Pending" => "Afventer", "{new_name} already exists" => "{new_name} eksisterer allerede", "replace" => "erstat", "suggest name" => "foreslå navn", @@ -28,7 +32,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Kunne ikke uploade din fil, da det enten er en mappe eller er tom", "Upload Error" => "Fejl ved upload", "Close" => "Luk", -"Pending" => "Afventer", "1 file uploading" => "1 fil uploades", "{count} files uploading" => "{count} filer uploades", "Upload cancelled." => "Upload afbrudt.", @@ -58,6 +61,7 @@ "Cancel upload" => "Fortryd upload", "Nothing in here. Upload something!" => "Her er tomt. Upload noget!", "Download" => "Download", +"Unshare" => "Fjern deling", "Upload too large" => "Upload for stor", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server.", "Files are being scanned, please wait." => "Filerne bliver indlæst, vent venligst.", diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php index 4b38619eaa..fa202c8c2b 100644 --- a/apps/files/l10n/de.php +++ b/apps/files/l10n/de.php @@ -1,4 +1,7 @@ "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits.", +"Could not move %s" => "Konnte %s nicht verschieben", +"Unable to rename file" => "Konnte Datei nicht umbenennen", "No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler", "There is no error, the file uploaded with success" => "Datei fehlerfrei hochgeladen.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini", @@ -7,11 +10,12 @@ "No file was uploaded" => "Es wurde keine Datei hochgeladen.", "Missing a temporary folder" => "Temporärer Ordner fehlt.", "Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte", +"Not enough storage available" => "Nicht genug Speicherplatz verfügbar", "Invalid directory." => "Ungültiges Verzeichnis.", "Files" => "Dateien", -"Unshare" => "Nicht mehr freigeben", "Delete" => "Löschen", "Rename" => "Umbenennen", +"Pending" => "Ausstehend", "{new_name} already exists" => "{new_name} existiert bereits", "replace" => "ersetzen", "suggest name" => "Name vorschlagen", @@ -29,7 +33,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Deine Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist.", "Upload Error" => "Fehler beim Upload", "Close" => "Schließen", -"Pending" => "Ausstehend", "1 file uploading" => "Eine Datei wird hoch geladen", "{count} files uploading" => "{count} Dateien werden hochgeladen", "Upload cancelled." => "Upload abgebrochen.", @@ -56,10 +59,10 @@ "Text file" => "Textdatei", "Folder" => "Ordner", "From link" => "Von einem Link", -"Trash" => "Papierkorb", "Cancel upload" => "Upload abbrechen", "Nothing in here. Upload something!" => "Alles leer. Lade etwas hoch!", "Download" => "Herunterladen", +"Unshare" => "Nicht mehr freigeben", "Upload too large" => "Upload zu groß", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.", "Files are being scanned, please wait." => "Dateien werden gescannt, bitte warten.", diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php index 71f24eba4c..0dfc19ff01 100644 --- a/apps/files/l10n/de_DE.php +++ b/apps/files/l10n/de_DE.php @@ -1,4 +1,7 @@ "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits", +"Could not move %s" => "Konnte %s nicht verschieben", +"Unable to rename file" => "Konnte Datei nicht umbenennen", "No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler", "There is no error, the file uploaded with success" => "Es sind keine Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini", @@ -7,12 +10,13 @@ "No file was uploaded" => "Es wurde keine Datei hochgeladen.", "Missing a temporary folder" => "Der temporäre Ordner fehlt.", "Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte", +"Not enough storage available" => "Nicht genug Speicher vorhanden.", "Invalid directory." => "Ungültiges Verzeichnis.", "Files" => "Dateien", -"Unshare" => "Nicht mehr freigeben", "Delete permanently" => "Entgültig löschen", "Delete" => "Löschen", "Rename" => "Umbenennen", +"Pending" => "Ausstehend", "{new_name} already exists" => "{new_name} existiert bereits", "replace" => "ersetzen", "suggest name" => "Name vorschlagen", @@ -30,7 +34,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Ihre Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist.", "Upload Error" => "Fehler beim Upload", "Close" => "Schließen", -"Pending" => "Ausstehend", "1 file uploading" => "1 Datei wird hochgeladen", "{count} files uploading" => "{count} Dateien wurden hochgeladen", "Upload cancelled." => "Upload abgebrochen.", @@ -57,10 +60,10 @@ "Text file" => "Textdatei", "Folder" => "Ordner", "From link" => "Von einem Link", -"Trash" => "Abfall", "Cancel upload" => "Upload abbrechen", "Nothing in here. Upload something!" => "Alles leer. Bitte laden Sie etwas hoch!", "Download" => "Herunterladen", +"Unshare" => "Nicht mehr freigeben", "Upload too large" => "Der Upload ist zu groß", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.", "Files are being scanned, please wait." => "Dateien werden gescannt, bitte warten.", diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php index a9c5fda098..2a110afa96 100644 --- a/apps/files/l10n/el.php +++ b/apps/files/l10n/el.php @@ -1,4 +1,7 @@ "Αδυναμία μετακίνησης του %s - υπάρχει ήδη αρχείο με αυτό το όνομα", +"Could not move %s" => "Αδυναμία μετακίνησης του %s", +"Unable to rename file" => "Αδυναμία μετονομασίας αρχείου", "No file was uploaded. Unknown error" => "Δεν ανέβηκε κάποιο αρχείο. Άγνωστο σφάλμα", "There is no error, the file uploaded with success" => "Δεν υπάρχει σφάλμα, το αρχείο εστάλει επιτυχώς", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Το απεσταλμένο αρχείο ξεπερνά την οδηγία upload_max_filesize στο php.ini:", @@ -7,11 +10,13 @@ "No file was uploaded" => "Κανένα αρχείο δεν στάλθηκε", "Missing a temporary folder" => "Λείπει ο προσωρινός φάκελος", "Failed to write to disk" => "Αποτυχία εγγραφής στο δίσκο", +"Not enough storage available" => "Μη επαρκής διαθέσιμος αποθηκευτικός χώρος", "Invalid directory." => "Μη έγκυρος φάκελος.", "Files" => "Αρχεία", -"Unshare" => "Διακοπή κοινής χρήσης", +"Delete permanently" => "Μόνιμη διαγραφή", "Delete" => "Διαγραφή", "Rename" => "Μετονομασία", +"Pending" => "Εκκρεμεί", "{new_name} already exists" => "{new_name} υπάρχει ήδη", "replace" => "αντικατέστησε", "suggest name" => "συνιστώμενο όνομα", @@ -19,6 +24,7 @@ "replaced {new_name}" => "{new_name} αντικαταστάθηκε", "undo" => "αναίρεση", "replaced {new_name} with {old_name}" => "αντικαταστάθηκε το {new_name} με {old_name}", +"perform delete operation" => "εκτέλεση διαδικασία διαγραφής", "'.' is an invalid file name." => "'.' είναι μη έγκυρο όνομα αρχείου.", "File name cannot be empty." => "Το όνομα αρχείου δεν πρέπει να είναι κενό.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Μη έγκυρο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτρέπονται.", @@ -28,7 +34,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Αδυναμία στην αποστολή του αρχείου σας αφού είναι φάκελος ή έχει 0 bytes", "Upload Error" => "Σφάλμα Αποστολής", "Close" => "Κλείσιμο", -"Pending" => "Εκκρεμεί", "1 file uploading" => "1 αρχείο ανεβαίνει", "{count} files uploading" => "{count} αρχεία ανεβαίνουν", "Upload cancelled." => "Η αποστολή ακυρώθηκε.", @@ -58,8 +63,10 @@ "Cancel upload" => "Ακύρωση αποστολής", "Nothing in here. Upload something!" => "Δεν υπάρχει τίποτα εδώ. Ανέβασε κάτι!", "Download" => "Λήψη", +"Unshare" => "Διακοπή κοινής χρήσης", "Upload too large" => "Πολύ μεγάλο αρχείο προς αποστολή", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Τα αρχεία που προσπαθείτε να ανεβάσετε υπερβαίνουν το μέγιστο μέγεθος αποστολής αρχείων σε αυτόν τον διακομιστή.", "Files are being scanned, please wait." => "Τα αρχεία σαρώνονται, παρακαλώ περιμένετε", -"Current scanning" => "Τρέχουσα αναζήτηση " +"Current scanning" => "Τρέχουσα αναζήτηση ", +"Upgrading filesystem cache..." => "Αναβάθμιση μνήμης cache του συστήματος αρχείων..." ); diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php index ba78e8b56d..b943244f1a 100644 --- a/apps/files/l10n/eo.php +++ b/apps/files/l10n/eo.php @@ -1,4 +1,7 @@ "Ne eblis movi %s: dosiero kun ĉi tiu nomo jam ekzistas", +"Could not move %s" => "Ne eblis movi %s", +"Unable to rename file" => "Ne eblis alinomigi dosieron", "No file was uploaded. Unknown error" => "Neniu dosiero alŝutiĝis. Nekonata eraro.", "There is no error, the file uploaded with success" => "Ne estas eraro, la dosiero alŝutiĝis sukcese", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "La dosiero alŝutita superas la regulon upload_max_filesize el php.ini: ", @@ -9,9 +12,9 @@ "Failed to write to disk" => "Malsukcesis skribo al disko", "Invalid directory." => "Nevalida dosierujo.", "Files" => "Dosieroj", -"Unshare" => "Malkunhavigi", "Delete" => "Forigi", "Rename" => "Alinomigi", +"Pending" => "Traktotaj", "{new_name} already exists" => "{new_name} jam ekzistas", "replace" => "anstataŭigi", "suggest name" => "sugesti nomon", @@ -26,7 +29,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Ne eblis alŝuti vian dosieron ĉar ĝi estas dosierujo aŭ havas 0 duumokojn", "Upload Error" => "Alŝuta eraro", "Close" => "Fermi", -"Pending" => "Traktotaj", "1 file uploading" => "1 dosiero estas alŝutata", "{count} files uploading" => "{count} dosieroj alŝutatas", "Upload cancelled." => "La alŝuto nuliĝis.", @@ -56,6 +58,7 @@ "Cancel upload" => "Nuligi alŝuton", "Nothing in here. Upload something!" => "Nenio estas ĉi tie. Alŝutu ion!", "Download" => "Elŝuti", +"Unshare" => "Malkunhavigi", "Upload too large" => "Elŝuto tro larĝa", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo.", "Files are being scanned, please wait." => "Dosieroj estas skanataj, bonvolu atendi.", diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php index 9d45e6035c..9c4d304f7d 100644 --- a/apps/files/l10n/es.php +++ b/apps/files/l10n/es.php @@ -1,4 +1,7 @@ "No se puede mover %s - Ya existe un archivo con ese nombre", +"Could not move %s" => "No se puede mover %s", +"Unable to rename file" => "No se puede renombrar el archivo", "No file was uploaded. Unknown error" => "Fallo no se subió el fichero", "There is no error, the file uploaded with success" => "No se ha producido ningún error, el archivo se ha subido con éxito", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "El archivo que intentas subir sobrepasa el tamaño definido por la variable upload_max_filesize en php.ini", @@ -9,10 +12,10 @@ "Failed to write to disk" => "La escritura en disco ha fallado", "Invalid directory." => "Directorio invalido.", "Files" => "Archivos", -"Unshare" => "Dejar de compartir", "Delete permanently" => "Eliminar permanentemente", "Delete" => "Eliminar", "Rename" => "Renombrar", +"Pending" => "Pendiente", "{new_name} already exists" => "{new_name} ya existe", "replace" => "reemplazar", "suggest name" => "sugerir nombre", @@ -30,7 +33,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "No ha sido posible subir tu archivo porque es un directorio o tiene 0 bytes", "Upload Error" => "Error al subir el archivo", "Close" => "cerrrar", -"Pending" => "Pendiente", "1 file uploading" => "subiendo 1 archivo", "{count} files uploading" => "Subiendo {count} archivos", "Upload cancelled." => "Subida cancelada.", @@ -57,10 +59,10 @@ "Text file" => "Archivo de texto", "Folder" => "Carpeta", "From link" => "Desde el enlace", -"Trash" => "Basura", "Cancel upload" => "Cancelar subida", "Nothing in here. Upload something!" => "Aquí no hay nada. ¡Sube algo!", "Download" => "Descargar", +"Unshare" => "Dejar de compartir", "Upload too large" => "El archivo es demasiado grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido por este servidor.", "Files are being scanned, please wait." => "Se están escaneando los archivos, por favor espere.", diff --git a/apps/files/l10n/es_AR.php b/apps/files/l10n/es_AR.php index e805f24ce4..edc732b467 100644 --- a/apps/files/l10n/es_AR.php +++ b/apps/files/l10n/es_AR.php @@ -1,4 +1,7 @@ "No se pudo mover %s - Un archivo con este nombre ya existe", +"Could not move %s" => "No se pudo mover %s ", +"Unable to rename file" => "No fue posible cambiar el nombre al archivo", "No file was uploaded. Unknown error" => "El archivo no fue subido. Error desconocido", "There is no error, the file uploaded with success" => "No se han producido errores, el archivo se ha subido con éxito", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "El archivo que intentás subir excede el tamaño definido por upload_max_filesize en el php.ini:", @@ -7,11 +10,12 @@ "No file was uploaded" => "El archivo no fue subido", "Missing a temporary folder" => "Falta un directorio temporal", "Failed to write to disk" => "Error al escribir en el disco", +"Not enough storage available" => "No hay suficiente capacidad de almacenamiento", "Invalid directory." => "Directorio invalido.", "Files" => "Archivos", -"Unshare" => "Dejar de compartir", "Delete" => "Borrar", "Rename" => "Cambiar nombre", +"Pending" => "Pendiente", "{new_name} already exists" => "{new_name} ya existe", "replace" => "reemplazar", "suggest name" => "sugerir nombre", @@ -29,7 +33,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "No fue posible subir el archivo porque es un directorio o porque su tamaño es 0 bytes", "Upload Error" => "Error al subir el archivo", "Close" => "Cerrar", -"Pending" => "Pendiente", "1 file uploading" => "Subiendo 1 archivo", "{count} files uploading" => "Subiendo {count} archivos", "Upload cancelled." => "La subida fue cancelada", @@ -56,10 +59,10 @@ "Text file" => "Archivo de texto", "Folder" => "Carpeta", "From link" => "Desde enlace", -"Trash" => "Papelera", "Cancel upload" => "Cancelar subida", "Nothing in here. Upload something!" => "No hay nada. ¡Subí contenido!", "Download" => "Descargar", +"Unshare" => "Dejar de compartir", "Upload too large" => "El archivo es demasiado grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los archivos que intentás subir sobrepasan el tamaño máximo ", "Files are being scanned, please wait." => "Se están escaneando los archivos, por favor esperá.", diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php index 54dd7cfdc5..98af371e07 100644 --- a/apps/files/l10n/et_EE.php +++ b/apps/files/l10n/et_EE.php @@ -7,9 +7,9 @@ "Missing a temporary folder" => "Ajutiste failide kaust puudub", "Failed to write to disk" => "Kettale kirjutamine ebaõnnestus", "Files" => "Failid", -"Unshare" => "Lõpeta jagamine", "Delete" => "Kustuta", "Rename" => "ümber", +"Pending" => "Ootel", "{new_name} already exists" => "{new_name} on juba olemas", "replace" => "asenda", "suggest name" => "soovita nime", @@ -21,7 +21,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Sinu faili üleslaadimine ebaõnnestus, kuna see on kaust või selle suurus on 0 baiti", "Upload Error" => "Üleslaadimise viga", "Close" => "Sulge", -"Pending" => "Ootel", "1 file uploading" => "1 faili üleslaadimisel", "{count} files uploading" => "{count} faili üleslaadimist", "Upload cancelled." => "Üleslaadimine tühistati.", @@ -50,6 +49,7 @@ "Cancel upload" => "Tühista üleslaadimine", "Nothing in here. Upload something!" => "Siin pole midagi. Lae midagi üles!", "Download" => "Lae alla", +"Unshare" => "Lõpeta jagamine", "Upload too large" => "Üleslaadimine on liiga suur", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse.", "Files are being scanned, please wait." => "Faile skannitakse, palun oota", diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php index 45c515814e..b62b1c7bf7 100644 --- a/apps/files/l10n/eu.php +++ b/apps/files/l10n/eu.php @@ -1,4 +1,7 @@ "Ezin da %s mugitu - Izen hau duen fitxategia dagoeneko existitzen da", +"Could not move %s" => "Ezin dira fitxategiak mugitu %s", +"Unable to rename file" => "Ezin izan da fitxategia berrizendatu", "No file was uploaded. Unknown error" => "Ez da fitxategirik igo. Errore ezezaguna", "There is no error, the file uploaded with success" => "Ez da arazorik izan, fitxategia ongi igo da", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Igotako fitxategiak php.ini fitxategian ezarritako upload_max_filesize muga gainditu du:", @@ -7,11 +10,12 @@ "No file was uploaded" => "Ez da fitxategirik igo", "Missing a temporary folder" => "Aldi baterako karpeta falta da", "Failed to write to disk" => "Errore bat izan da diskoan idazterakoan", +"Not enough storage available" => "Ez dago behar aina leku erabilgarri,", "Invalid directory." => "Baliogabeko karpeta.", "Files" => "Fitxategiak", -"Unshare" => "Ez elkarbanatu", "Delete" => "Ezabatu", "Rename" => "Berrizendatu", +"Pending" => "Zain", "{new_name} already exists" => "{new_name} dagoeneko existitzen da", "replace" => "ordeztu", "suggest name" => "aholkatu izena", @@ -28,7 +32,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Ezin da zure fitxategia igo, karpeta bat da edo 0 byt ditu", "Upload Error" => "Igotzean errore bat suertatu da", "Close" => "Itxi", -"Pending" => "Zain", "1 file uploading" => "fitxategi 1 igotzen", "{count} files uploading" => "{count} fitxategi igotzen", "Upload cancelled." => "Igoera ezeztatuta", @@ -58,6 +61,7 @@ "Cancel upload" => "Ezeztatu igoera", "Nothing in here. Upload something!" => "Ez dago ezer. Igo zerbait!", "Download" => "Deskargatu", +"Unshare" => "Ez elkarbanatu", "Upload too large" => "Igotakoa handiegia da", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen duena baino handiagoak dira.", "Files are being scanned, please wait." => "Fitxategiak eskaneatzen ari da, itxoin mezedez.", diff --git a/apps/files/l10n/fa.php b/apps/files/l10n/fa.php index 2559d597a7..d4cbb99e10 100644 --- a/apps/files/l10n/fa.php +++ b/apps/files/l10n/fa.php @@ -1,4 +1,7 @@ "%s نمی تواند حرکت کند - در حال حاضر پرونده با این نام وجود دارد. ", +"Could not move %s" => "%s نمی تواند حرکت کند ", +"Unable to rename file" => "قادر به تغییر نام پرونده نیست.", "No file was uploaded. Unknown error" => "هیچ فایلی آپلود نشد.خطای ناشناس", "There is no error, the file uploaded with success" => "هیچ خطایی وجود ندارد فایل با موفقیت بار گذاری شد", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "پرونده آپلود شده بیش ازدستور ماکزیمم_حجم فایل_برای آپلود در php.ini استفاده کرده است.", @@ -9,9 +12,9 @@ "Failed to write to disk" => "نوشتن بر روی دیسک سخت ناموفق بود", "Invalid directory." => "فهرست راهنما نامعتبر می باشد.", "Files" => "فایل ها", -"Unshare" => "لغو اشتراک", "Delete" => "پاک کردن", "Rename" => "تغییرنام", +"Pending" => "در انتظار", "{new_name} already exists" => "{نام _جدید} در حال حاضر وجود دارد.", "replace" => "جایگزین", "suggest name" => "پیشنهاد نام", @@ -26,7 +29,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "ناتوان در بارگذاری یا فایل یک پوشه است یا 0بایت دارد", "Upload Error" => "خطا در بار گذاری", "Close" => "بستن", -"Pending" => "در انتظار", "1 file uploading" => "1 پرونده آپلود شد.", "{count} files uploading" => "{ شمار } فایل های در حال آپلود", "Upload cancelled." => "بار گذاری لغو شد", @@ -56,6 +58,7 @@ "Cancel upload" => "متوقف کردن بار گذاری", "Nothing in here. Upload something!" => "اینجا هیچ چیز نیست.", "Download" => "بارگیری", +"Unshare" => "لغو اشتراک", "Upload too large" => "حجم بارگذاری بسیار زیاد است", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "فایلها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر فایل php,ini میتوان این محدودیت را برطرف کرد", "Files are being scanned, please wait." => "پرونده ها در حال بازرسی هستند لطفا صبر کنید", diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php index 6a425e7609..031591d713 100644 --- a/apps/files/l10n/fi_FI.php +++ b/apps/files/l10n/fi_FI.php @@ -1,4 +1,7 @@ "Kohteen %s siirto ei onnistunut - Tiedosto samalla nimellä on jo olemassa", +"Could not move %s" => "Kohteen %s siirto ei onnistunut", +"Unable to rename file" => "Tiedoston nimeäminen uudelleen ei onnistunut", "No file was uploaded. Unknown error" => "Tiedostoa ei lähetetty. Tuntematon virhe", "There is no error, the file uploaded with success" => "Ei virheitä, tiedosto lähetettiin onnistuneesti", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Lähetetty tiedosto ylittää HTML-lomakkeessa määritetyn MAX_FILE_SIZE-arvon ylärajan", @@ -6,11 +9,12 @@ "No file was uploaded" => "Yhtäkään tiedostoa ei lähetetty", "Missing a temporary folder" => "Väliaikaiskansiota ei ole olemassa", "Failed to write to disk" => "Levylle kirjoitus epäonnistui", +"Not enough storage available" => "Tallennustilaa ei ole riittävästi käytettävissä", "Invalid directory." => "Virheellinen kansio.", "Files" => "Tiedostot", -"Unshare" => "Peru jakaminen", "Delete" => "Poista", "Rename" => "Nimeä uudelleen", +"Pending" => "Odottaa", "{new_name} already exists" => "{new_name} on jo olemassa", "replace" => "korvaa", "suggest name" => "ehdota nimeä", @@ -26,7 +30,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä on kansio", "Upload Error" => "Lähetysvirhe.", "Close" => "Sulje", -"Pending" => "Odottaa", "Upload cancelled." => "Lähetys peruttu.", "File upload is in progress. Leaving the page now will cancel the upload." => "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen.", "URL cannot be empty." => "Verkko-osoite ei voi olla tyhjä", @@ -50,10 +53,10 @@ "Text file" => "Tekstitiedosto", "Folder" => "Kansio", "From link" => "Linkistä", -"Trash" => "Roskakori", "Cancel upload" => "Peru lähetys", "Nothing in here. Upload something!" => "Täällä ei ole mitään. Lähetä tänne jotakin!", "Download" => "Lataa", +"Unshare" => "Peru jakaminen", "Upload too large" => "Lähetettävä tiedosto on liian suuri", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Lähetettäväksi valitsemasi tiedostot ylittävät palvelimen salliman tiedostokoon rajan.", "Files are being scanned, please wait." => "Tiedostoja tarkistetaan, odota hetki.", diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php index 45281d277f..e2af33da77 100644 --- a/apps/files/l10n/fr.php +++ b/apps/files/l10n/fr.php @@ -1,4 +1,7 @@ "Impossible de déplacer %s - Un fichier possédant ce nom existe déjà", +"Could not move %s" => "Impossible de déplacer %s", +"Unable to rename file" => "Impossible de renommer le fichier", "No file was uploaded. Unknown error" => "Aucun fichier n'a été chargé. Erreur inconnue", "There is no error, the file uploaded with success" => "Aucune erreur, le fichier a été téléversé avec succès", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Le fichier envoyé dépasse la valeur upload_max_filesize située dans le fichier php.ini:", @@ -7,12 +10,13 @@ "No file was uploaded" => "Aucun fichier n'a été téléversé", "Missing a temporary folder" => "Il manque un répertoire temporaire", "Failed to write to disk" => "Erreur d'écriture sur le disque", +"Not enough storage available" => "Plus assez d'espace de stockage disponible", "Invalid directory." => "Dossier invalide.", "Files" => "Fichiers", -"Unshare" => "Ne plus partager", "Delete permanently" => "Supprimer de façon définitive", "Delete" => "Supprimer", "Rename" => "Renommer", +"Pending" => "En cours", "{new_name} already exists" => "{new_name} existe déjà", "replace" => "remplacer", "suggest name" => "Suggérer un nom", @@ -30,7 +34,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Impossible de charger vos fichiers car il s'agit d'un dossier ou le fichier fait 0 octet.", "Upload Error" => "Erreur de chargement", "Close" => "Fermer", -"Pending" => "En cours", "1 file uploading" => "1 fichier en cours de téléchargement", "{count} files uploading" => "{count} fichiers téléversés", "Upload cancelled." => "Chargement annulé.", @@ -57,10 +60,10 @@ "Text file" => "Fichier texte", "Folder" => "Dossier", "From link" => "Depuis le lien", -"Trash" => "Corbeille", "Cancel upload" => "Annuler l'envoi", "Nothing in here. Upload something!" => "Il n'y a rien ici ! Envoyez donc quelque chose :)", "Download" => "Télécharger", +"Unshare" => "Ne plus partager", "Upload too large" => "Fichier trop volumineux", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Les fichiers que vous essayez d'envoyer dépassent la taille maximale permise par ce serveur.", "Files are being scanned, please wait." => "Les fichiers sont en cours d'analyse, veuillez patienter.", diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php index 362e92dace..4713da934a 100644 --- a/apps/files/l10n/gl.php +++ b/apps/files/l10n/gl.php @@ -1,4 +1,7 @@ "Non se moveu %s - Xa existe un ficheiro con ese nome.", +"Could not move %s" => "Non se puido mover %s", +"Unable to rename file" => "Non se pode renomear o ficheiro", "No file was uploaded. Unknown error" => "Non se subiu ningún ficheiro. Erro descoñecido.", "There is no error, the file uploaded with success" => "Non hai erros. O ficheiro enviouse correctamente", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro subido excede a directiva indicada polo tamaño_máximo_de_subida de php.ini", @@ -9,9 +12,9 @@ "Failed to write to disk" => "Erro ao escribir no disco", "Invalid directory." => "O directorio é incorrecto.", "Files" => "Ficheiros", -"Unshare" => "Deixar de compartir", "Delete" => "Eliminar", "Rename" => "Mudar o nome", +"Pending" => "Pendentes", "{new_name} already exists" => "xa existe un {new_name}", "replace" => "substituír", "suggest name" => "suxerir nome", @@ -25,7 +28,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Non se puido subir o ficheiro pois ou é un directorio ou ten 0 bytes", "Upload Error" => "Erro na subida", "Close" => "Pechar", -"Pending" => "Pendentes", "1 file uploading" => "1 ficheiro subíndose", "{count} files uploading" => "{count} ficheiros subíndose", "Upload cancelled." => "Subida cancelada.", @@ -55,6 +57,7 @@ "Cancel upload" => "Cancelar a subida", "Nothing in here. Upload something!" => "Nada por aquí. Envía algo.", "Download" => "Descargar", +"Unshare" => "Deixar de compartir", "Upload too large" => "Envío demasiado grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que trata de subir superan o tamaño máximo permitido neste servidor", "Files are being scanned, please wait." => "Estanse analizando os ficheiros. Agarda.", diff --git a/apps/files/l10n/he.php b/apps/files/l10n/he.php index 94cddca000..442eafe1c0 100644 --- a/apps/files/l10n/he.php +++ b/apps/files/l10n/he.php @@ -8,9 +8,9 @@ "Missing a temporary folder" => "תיקייה זמנית חסרה", "Failed to write to disk" => "הכתיבה לכונן נכשלה", "Files" => "קבצים", -"Unshare" => "הסר שיתוף", "Delete" => "מחיקה", "Rename" => "שינוי שם", +"Pending" => "ממתין", "{new_name} already exists" => "{new_name} כבר קיים", "replace" => "החלפה", "suggest name" => "הצעת שם", @@ -22,7 +22,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "לא יכול להעלות את הקובץ מכיוון שזו תקיה או שמשקל הקובץ 0 בתים", "Upload Error" => "שגיאת העלאה", "Close" => "סגירה", -"Pending" => "ממתין", "1 file uploading" => "קובץ אחד נשלח", "{count} files uploading" => "{count} קבצים נשלחים", "Upload cancelled." => "ההעלאה בוטלה.", @@ -51,6 +50,7 @@ "Cancel upload" => "ביטול ההעלאה", "Nothing in here. Upload something!" => "אין כאן שום דבר. אולי ברצונך להעלות משהו?", "Download" => "הורדה", +"Unshare" => "הסר שיתוף", "Upload too large" => "העלאה גדולה מידי", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "הקבצים שניסית להעלות חרגו מהגודל המקסימלי להעלאת קבצים על שרת זה.", "Files are being scanned, please wait." => "הקבצים נסרקים, נא להמתין.", diff --git a/apps/files/l10n/hr.php b/apps/files/l10n/hr.php index 4f4546aaf0..3516ab8c1e 100644 --- a/apps/files/l10n/hr.php +++ b/apps/files/l10n/hr.php @@ -6,9 +6,9 @@ "Missing a temporary folder" => "Nedostaje privremena mapa", "Failed to write to disk" => "Neuspjelo pisanje na disk", "Files" => "Datoteke", -"Unshare" => "Prekini djeljenje", "Delete" => "Briši", "Rename" => "Promjeni ime", +"Pending" => "U tijeku", "replace" => "zamjeni", "suggest name" => "predloži ime", "cancel" => "odustani", @@ -16,7 +16,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Nemoguće poslati datoteku jer je prazna ili je direktorij", "Upload Error" => "Pogreška pri slanju", "Close" => "Zatvori", -"Pending" => "U tijeku", "1 file uploading" => "1 datoteka se učitava", "Upload cancelled." => "Slanje poništeno.", "File upload is in progress. Leaving the page now will cancel the upload." => "Učitavanje datoteke. Napuštanjem stranice će prekinuti učitavanje.", @@ -38,6 +37,7 @@ "Cancel upload" => "Prekini upload", "Nothing in here. Upload something!" => "Nema ničega u ovoj mapi. Pošalji nešto!", "Download" => "Preuzmi", +"Unshare" => "Prekini djeljenje", "Upload too large" => "Prijenos je preobiman", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke koje pokušavate prenijeti prelaze maksimalnu veličinu za prijenos datoteka na ovom poslužitelju.", "Files are being scanned, please wait." => "Datoteke se skeniraju, molimo pričekajte.", diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php index 26d5648079..eaec8d24b7 100644 --- a/apps/files/l10n/hu_HU.php +++ b/apps/files/l10n/hu_HU.php @@ -1,4 +1,7 @@ "%s áthelyezése nem sikerült - már létezik másik fájl ezzel a névvel", +"Could not move %s" => "Nem sikerült %s áthelyezése", +"Unable to rename file" => "Nem lehet átnevezni a fájlt", "No file was uploaded. Unknown error" => "Nem történt feltöltés. Ismeretlen hiba", "There is no error, the file uploaded with success" => "A fájlt sikerült feltölteni", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "A feltöltött fájl mérete meghaladja a php.ini állományban megadott upload_max_filesize paraméter értékét.", @@ -7,11 +10,12 @@ "No file was uploaded" => "Nem töltődött fel semmi", "Missing a temporary folder" => "Hiányzik egy ideiglenes mappa", "Failed to write to disk" => "Nem sikerült a lemezre történő írás", +"Not enough storage available" => "Nincs elég szabad hely.", "Invalid directory." => "Érvénytelen mappa.", "Files" => "Fájlok", -"Unshare" => "Megosztás visszavonása", "Delete" => "Törlés", "Rename" => "Átnevezés", +"Pending" => "Folyamatban", "{new_name} already exists" => "{new_name} már létezik", "replace" => "írjuk fölül", "suggest name" => "legyen más neve", @@ -28,7 +32,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Nem tölthető fel, mert mappa volt, vagy 0 byte méretű", "Upload Error" => "Feltöltési hiba", "Close" => "Bezárás", -"Pending" => "Folyamatban", "1 file uploading" => "1 fájl töltődik föl", "{count} files uploading" => "{count} fájl töltődik föl", "Upload cancelled." => "A feltöltést megszakítottuk.", @@ -58,6 +61,7 @@ "Cancel upload" => "A feltöltés megszakítása", "Nothing in here. Upload something!" => "Itt nincs semmi. Töltsön fel valamit!", "Download" => "Letöltés", +"Unshare" => "Megosztás visszavonása", "Upload too large" => "A feltöltés túl nagy", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "A feltöltendő állományok mérete meghaladja a kiszolgálón megengedett maximális méretet.", "Files are being scanned, please wait." => "A fájllista ellenőrzése zajlik, kis türelmet!", diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php index 3ebb998329..4c4e2e0f71 100644 --- a/apps/files/l10n/id.php +++ b/apps/files/l10n/id.php @@ -6,15 +6,14 @@ "Missing a temporary folder" => "Kehilangan folder temporer", "Failed to write to disk" => "Gagal menulis ke disk", "Files" => "Berkas", -"Unshare" => "batalkan berbagi", "Delete" => "Hapus", +"Pending" => "Menunggu", "replace" => "mengganti", "cancel" => "batalkan", "undo" => "batal dikerjakan", "Unable to upload your file as it is a directory or has 0 bytes" => "Gagal mengunggah berkas anda karena berupa direktori atau mempunyai ukuran 0 byte", "Upload Error" => "Terjadi Galat Pengunggahan", "Close" => "tutup", -"Pending" => "Menunggu", "Upload cancelled." => "Pengunggahan dibatalkan.", "URL cannot be empty." => "tautan tidak boleh kosong", "Name" => "Nama", @@ -35,6 +34,7 @@ "Cancel upload" => "Batal mengunggah", "Nothing in here. Upload something!" => "Tidak ada apa-apa di sini. Unggah sesuatu!", "Download" => "Unduh", +"Unshare" => "batalkan berbagi", "Upload too large" => "Unggahan terlalu besar", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Berkas yang anda coba unggah melebihi ukuran maksimum untuk pengunggahan berkas di server ini.", "Files are being scanned, please wait." => "Berkas sedang dipindai, silahkan tunggu.", diff --git a/apps/files/l10n/is.php b/apps/files/l10n/is.php index f8d9789cf0..c0898c555b 100644 --- a/apps/files/l10n/is.php +++ b/apps/files/l10n/is.php @@ -1,4 +1,7 @@ "Gat ekki fært %s - Skrá með þessu nafni er þegar til", +"Could not move %s" => "Gat ekki fært %s", +"Unable to rename file" => "Gat ekki endurskýrt skrá", "No file was uploaded. Unknown error" => "Engin skrá var send inn. Óþekkt villa.", "There is no error, the file uploaded with success" => "Engin villa, innsending heppnaðist", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Innsend skrá er stærri en upload_max stillingin í php.ini:", @@ -9,9 +12,9 @@ "Failed to write to disk" => "Tókst ekki að skrifa á disk", "Invalid directory." => "Ógild mappa.", "Files" => "Skrár", -"Unshare" => "Hætta deilingu", "Delete" => "Eyða", "Rename" => "Endurskýra", +"Pending" => "Bíður", "{new_name} already exists" => "{new_name} er þegar til", "replace" => "yfirskrifa", "suggest name" => "stinga upp á nafni", @@ -25,7 +28,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Innsending á skrá mistókst, hugsanlega sendir þú möppu eða skráin er 0 bæti.", "Upload Error" => "Villa við innsendingu", "Close" => "Loka", -"Pending" => "Bíður", "1 file uploading" => "1 skrá innsend", "{count} files uploading" => "{count} skrár innsendar", "Upload cancelled." => "Hætt við innsendingu.", @@ -55,6 +57,7 @@ "Cancel upload" => "Hætta við innsendingu", "Nothing in here. Upload something!" => "Ekkert hér. Settu eitthvað inn!", "Download" => "Niðurhal", +"Unshare" => "Hætta deilingu", "Upload too large" => "Innsend skrá er of stór", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni.", "Files are being scanned, please wait." => "Verið er að skima skrár, vinsamlegast hinkraðu.", diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php index 3d6eb254e5..583a0ca7f7 100644 --- a/apps/files/l10n/it.php +++ b/apps/files/l10n/it.php @@ -1,4 +1,7 @@ "Impossibile spostare %s - un file con questo nome esiste già", +"Could not move %s" => "Impossibile spostare %s", +"Unable to rename file" => "Impossibile rinominare il file", "No file was uploaded. Unknown error" => "Nessun file è stato inviato. Errore sconosciuto", "There is no error, the file uploaded with success" => "Non ci sono errori, file caricato con successo", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Il file caricato supera la direttiva upload_max_filesize in php.ini:", @@ -7,12 +10,13 @@ "No file was uploaded" => "Nessun file è stato caricato", "Missing a temporary folder" => "Cartella temporanea mancante", "Failed to write to disk" => "Scrittura su disco non riuscita", +"Not enough storage available" => "Spazio di archiviazione insufficiente", "Invalid directory." => "Cartella non valida.", "Files" => "File", -"Unshare" => "Rimuovi condivisione", "Delete permanently" => "Elimina definitivamente", "Delete" => "Elimina", "Rename" => "Rinomina", +"Pending" => "In corso", "{new_name} already exists" => "{new_name} esiste già", "replace" => "sostituisci", "suggest name" => "suggerisci nome", @@ -30,7 +34,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Impossibile inviare il file poiché è una cartella o ha dimensione 0 byte", "Upload Error" => "Errore di invio", "Close" => "Chiudi", -"Pending" => "In corso", "1 file uploading" => "1 file in fase di caricamento", "{count} files uploading" => "{count} file in fase di caricamentoe", "Upload cancelled." => "Invio annullato", @@ -57,10 +60,10 @@ "Text file" => "File di testo", "Folder" => "Cartella", "From link" => "Da collegamento", -"Trash" => "Cestino", "Cancel upload" => "Annulla invio", "Nothing in here. Upload something!" => "Non c'è niente qui. Carica qualcosa!", "Download" => "Scarica", +"Unshare" => "Rimuovi condivisione", "Upload too large" => "Il file caricato è troppo grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "I file che stai provando a caricare superano la dimensione massima consentita su questo server.", "Files are being scanned, please wait." => "Scansione dei file in corso, attendi", diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php index 1caa308c1b..85ec6b6e95 100644 --- a/apps/files/l10n/ja_JP.php +++ b/apps/files/l10n/ja_JP.php @@ -1,4 +1,7 @@ "%s を移動できませんでした ― この名前のファイルはすでに存在します", +"Could not move %s" => "%s を移動できませんでした", +"Unable to rename file" => "ファイル名の変更ができません", "No file was uploaded. Unknown error" => "ファイルは何もアップロードされていません。不明なエラー", "There is no error, the file uploaded with success" => "エラーはありません。ファイルのアップロードは成功しました", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "アップロードされたファイルはphp.ini の upload_max_filesize に設定されたサイズを超えています:", @@ -7,12 +10,13 @@ "No file was uploaded" => "ファイルはアップロードされませんでした", "Missing a temporary folder" => "テンポラリフォルダが見つかりません", "Failed to write to disk" => "ディスクへの書き込みに失敗しました", +"Not enough storage available" => "ストレージに十分な空き容量がありません", "Invalid directory." => "無効なディレクトリです。", "Files" => "ファイル", -"Unshare" => "共有しない", "Delete permanently" => "完全に削除する", "Delete" => "削除", "Rename" => "名前の変更", +"Pending" => "保留", "{new_name} already exists" => "{new_name} はすでに存在しています", "replace" => "置き換え", "suggest name" => "推奨名称", @@ -30,7 +34,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "ディレクトリもしくは0バイトのファイルはアップロードできません", "Upload Error" => "アップロードエラー", "Close" => "閉じる", -"Pending" => "保留", "1 file uploading" => "ファイルを1つアップロード中", "{count} files uploading" => "{count} ファイルをアップロード中", "Upload cancelled." => "アップロードはキャンセルされました。", @@ -57,10 +60,10 @@ "Text file" => "テキストファイル", "Folder" => "フォルダ", "From link" => "リンク", -"Trash" => "ゴミ箱", "Cancel upload" => "アップロードをキャンセル", "Nothing in here. Upload something!" => "ここには何もありません。何かアップロードしてください。", "Download" => "ダウンロード", +"Unshare" => "共有しない", "Upload too large" => "ファイルサイズが大きすぎます", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "アップロードしようとしているファイルは、サーバで規定された最大サイズを超えています。", "Files are being scanned, please wait." => "ファイルをスキャンしています、しばらくお待ちください。", diff --git a/apps/files/l10n/ka_GE.php b/apps/files/l10n/ka_GE.php index 7ab6122c65..a7b58f02d2 100644 --- a/apps/files/l10n/ka_GE.php +++ b/apps/files/l10n/ka_GE.php @@ -6,9 +6,9 @@ "Missing a temporary folder" => "დროებითი საქაღალდე არ არსებობს", "Failed to write to disk" => "შეცდომა დისკზე ჩაწერისას", "Files" => "ფაილები", -"Unshare" => "გაზიარების მოხსნა", "Delete" => "წაშლა", "Rename" => "გადარქმევა", +"Pending" => "მოცდის რეჟიმში", "{new_name} already exists" => "{new_name} უკვე არსებობს", "replace" => "შეცვლა", "suggest name" => "სახელის შემოთავაზება", @@ -19,7 +19,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "თქვენი ფაილის ატვირთვა ვერ მოხერხდა. ის არის საქაღალდე და შეიცავს 0 ბაიტს", "Upload Error" => "შეცდომა ატვირთვისას", "Close" => "დახურვა", -"Pending" => "მოცდის რეჟიმში", "1 file uploading" => "1 ფაილის ატვირთვა", "{count} files uploading" => "{count} ფაილი იტვირთება", "Upload cancelled." => "ატვირთვა შეჩერებულ იქნა.", @@ -46,6 +45,7 @@ "Cancel upload" => "ატვირთვის გაუქმება", "Nothing in here. Upload something!" => "აქ არაფერი არ არის. ატვირთე რამე!", "Download" => "ჩამოტვირთვა", +"Unshare" => "გაზიარების მოხსნა", "Upload too large" => "ასატვირთი ფაილი ძალიან დიდია", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "ფაილის ზომა რომლის ატვირთვასაც თქვენ აპირებთ, აჭარბებს სერვერზე დაშვებულ მაქსიმუმს.", "Files are being scanned, please wait." => "მიმდინარეობს ფაილების სკანირება, გთხოვთ დაელოდოთ.", diff --git a/apps/files/l10n/ko.php b/apps/files/l10n/ko.php index 98d0d60280..d483f8061a 100644 --- a/apps/files/l10n/ko.php +++ b/apps/files/l10n/ko.php @@ -1,4 +1,7 @@ "%s 항목을 이동시키지 못하였음 - 파일 이름이 이미 존재함", +"Could not move %s" => "%s 항목을 이딩시키지 못하였음", +"Unable to rename file" => "파일 이름바꾸기 할 수 없음", "No file was uploaded. Unknown error" => "파일이 업로드되지 않았습니다. 알 수 없는 오류입니다", "There is no error, the file uploaded with success" => "업로드에 성공하였습니다.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "업로드한 파일이 php.ini의 upload_max_filesize보다 큽니다:", @@ -9,9 +12,9 @@ "Failed to write to disk" => "디스크에 쓰지 못했습니다", "Invalid directory." => "올바르지 않은 디렉터리입니다.", "Files" => "파일", -"Unshare" => "공유 해제", "Delete" => "삭제", "Rename" => "이름 바꾸기", +"Pending" => "보류 중", "{new_name} already exists" => "{new_name}이(가) 이미 존재함", "replace" => "바꾸기", "suggest name" => "이름 제안", @@ -28,7 +31,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "이 파일은 디렉터리이거나 비어 있기 때문에 업로드할 수 없습니다", "Upload Error" => "업로드 오류", "Close" => "닫기", -"Pending" => "보류 중", "1 file uploading" => "파일 1개 업로드 중", "{count} files uploading" => "파일 {count}개 업로드 중", "Upload cancelled." => "업로드가 취소되었습니다.", @@ -58,6 +60,7 @@ "Cancel upload" => "업로드 취소", "Nothing in here. Upload something!" => "내용이 없습니다. 업로드할 수 있습니다!", "Download" => "다운로드", +"Unshare" => "공유 해제", "Upload too large" => "업로드 용량 초과", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "이 파일이 서버에서 허용하는 최대 업로드 가능 용량보다 큽니다.", "Files are being scanned, please wait." => "파일을 검색하고 있습니다. 기다려 주십시오.", diff --git a/apps/files/l10n/lb.php b/apps/files/l10n/lb.php index 79ef4bc941..b052da3a02 100644 --- a/apps/files/l10n/lb.php +++ b/apps/files/l10n/lb.php @@ -6,7 +6,6 @@ "Missing a temporary folder" => "Et feelt en temporären Dossier", "Failed to write to disk" => "Konnt net op den Disk schreiwen", "Files" => "Dateien", -"Unshare" => "Net méi deelen", "Delete" => "Läschen", "replace" => "ersetzen", "cancel" => "ofbriechen", @@ -34,6 +33,7 @@ "Cancel upload" => "Upload ofbriechen", "Nothing in here. Upload something!" => "Hei ass näischt. Lued eppes rop!", "Download" => "Eroflueden", +"Unshare" => "Net méi deelen", "Upload too large" => "Upload ze grouss", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass.", "Files are being scanned, please wait." => "Fichieren gi gescannt, war weg.", diff --git a/apps/files/l10n/lt_LT.php b/apps/files/l10n/lt_LT.php index f4ad655f42..70296b5db9 100644 --- a/apps/files/l10n/lt_LT.php +++ b/apps/files/l10n/lt_LT.php @@ -6,9 +6,9 @@ "Missing a temporary folder" => "Nėra laikinojo katalogo", "Failed to write to disk" => "Nepavyko įrašyti į diską", "Files" => "Failai", -"Unshare" => "Nebesidalinti", "Delete" => "Ištrinti", "Rename" => "Pervadinti", +"Pending" => "Laukiantis", "{new_name} already exists" => "{new_name} jau egzistuoja", "replace" => "pakeisti", "suggest name" => "pasiūlyti pavadinimą", @@ -19,7 +19,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Neįmanoma įkelti failo - jo dydis gali būti 0 bitų arba tai katalogas", "Upload Error" => "Įkėlimo klaida", "Close" => "Užverti", -"Pending" => "Laukiantis", "1 file uploading" => "įkeliamas 1 failas", "{count} files uploading" => "{count} įkeliami failai", "Upload cancelled." => "Įkėlimas atšauktas.", @@ -46,6 +45,7 @@ "Cancel upload" => "Atšaukti siuntimą", "Nothing in here. Upload something!" => "Čia tuščia. Įkelkite ką nors!", "Download" => "Atsisiųsti", +"Unshare" => "Nebesidalinti", "Upload too large" => "Įkėlimui failas per didelis", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Bandomų įkelti failų dydis viršija maksimalų leidžiamą šiame serveryje", "Files are being scanned, please wait." => "Skenuojami failai, prašome palaukti.", diff --git a/apps/files/l10n/lv.php b/apps/files/l10n/lv.php index 57b391e444..ef4928d978 100644 --- a/apps/files/l10n/lv.php +++ b/apps/files/l10n/lv.php @@ -9,10 +9,10 @@ "Failed to write to disk" => "Neizdevās saglabāt diskā", "Invalid directory." => "Nederīga direktorija.", "Files" => "Datnes", -"Unshare" => "Pārtraukt dalīšanos", "Delete permanently" => "Dzēst pavisam", "Delete" => "Dzēst", "Rename" => "Pārsaukt", +"Pending" => "Gaida savu kārtu", "{new_name} already exists" => "{new_name} jau eksistē", "replace" => "aizvietot", "suggest name" => "ieteiktais nosaukums", @@ -30,7 +30,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Nevar augšupielādēt jūsu datni, jo tā ir direktorija vai arī tās izmērs ir 0 baiti", "Upload Error" => "Kļūda augšupielādējot", "Close" => "Aizvērt", -"Pending" => "Gaida savu kārtu", "1 file uploading" => "Augšupielādē 1 datni", "{count} files uploading" => "augšupielādē {count} datnes", "Upload cancelled." => "Augšupielāde ir atcelta.", @@ -57,10 +56,10 @@ "Text file" => "Teksta datne", "Folder" => "Mape", "From link" => "No saites", -"Trash" => "Miskaste", "Cancel upload" => "Atcelt augšupielādi", "Nothing in here. Upload something!" => "Te vēl nekas nav. Rīkojies, sāc augšupielādēt!", "Download" => "Lejupielādēt", +"Unshare" => "Pārtraukt dalīšanos", "Upload too large" => "Datne ir par lielu, lai to augšupielādētu", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Augšupielādējamās datnes pārsniedz servera pieļaujamo datņu augšupielādes apjomu", "Files are being scanned, please wait." => "Datnes šobrīd tiek caurskatītas, lūdzu, uzgaidiet.", diff --git a/apps/files/l10n/mk.php b/apps/files/l10n/mk.php index 2580d1e6a9..5cb7e72058 100644 --- a/apps/files/l10n/mk.php +++ b/apps/files/l10n/mk.php @@ -8,9 +8,9 @@ "Missing a temporary folder" => "Не постои привремена папка", "Failed to write to disk" => "Неуспеав да запишам на диск", "Files" => "Датотеки", -"Unshare" => "Не споделувај", "Delete" => "Избриши", "Rename" => "Преименувај", +"Pending" => "Чека", "{new_name} already exists" => "{new_name} веќе постои", "replace" => "замени", "suggest name" => "предложи име", @@ -22,7 +22,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Не може да се преземе вашата датотека бидејќи фолдерот во кој се наоѓа фајлот има големина од 0 бајти", "Upload Error" => "Грешка при преземање", "Close" => "Затвои", -"Pending" => "Чека", "1 file uploading" => "1 датотека се подига", "{count} files uploading" => "{count} датотеки се подигаат", "Upload cancelled." => "Преземањето е прекинато.", @@ -51,6 +50,7 @@ "Cancel upload" => "Откажи прикачување", "Nothing in here. Upload something!" => "Тука нема ништо. Снимете нешто!", "Download" => "Преземи", +"Unshare" => "Не споделувај", "Upload too large" => "Датотеката е премногу голема", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Датотеките кои се обидувате да ги подигнете ја надминуваат максималната големина за подигнување датотеки на овој сервер.", "Files are being scanned, please wait." => "Се скенираат датотеки, ве молам почекајте.", diff --git a/apps/files/l10n/ms_MY.php b/apps/files/l10n/ms_MY.php index 4ac26d8091..b15a9111e7 100644 --- a/apps/files/l10n/ms_MY.php +++ b/apps/files/l10n/ms_MY.php @@ -8,12 +8,12 @@ "Failed to write to disk" => "Gagal untuk disimpan", "Files" => "fail", "Delete" => "Padam", +"Pending" => "Dalam proses", "replace" => "ganti", "cancel" => "Batal", "Unable to upload your file as it is a directory or has 0 bytes" => "Tidak boleh memuatnaik fail anda kerana mungkin ianya direktori atau saiz fail 0 bytes", "Upload Error" => "Muat naik ralat", "Close" => "Tutup", -"Pending" => "Dalam proses", "Upload cancelled." => "Muatnaik dibatalkan.", "Name" => "Nama ", "Size" => "Saiz", diff --git a/apps/files/l10n/nb_NO.php b/apps/files/l10n/nb_NO.php index a6ba6e9c03..2609923cbf 100644 --- a/apps/files/l10n/nb_NO.php +++ b/apps/files/l10n/nb_NO.php @@ -7,9 +7,9 @@ "Missing a temporary folder" => "Mangler en midlertidig mappe", "Failed to write to disk" => "Klarte ikke å skrive til disk", "Files" => "Filer", -"Unshare" => "Avslutt deling", "Delete" => "Slett", "Rename" => "Omdøp", +"Pending" => "Ventende", "{new_name} already exists" => "{new_name} finnes allerede", "replace" => "erstatt", "suggest name" => "foreslå navn", @@ -21,7 +21,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Kan ikke laste opp filen din siden det er en mappe eller den har 0 bytes", "Upload Error" => "Opplasting feilet", "Close" => "Lukk", -"Pending" => "Ventende", "1 file uploading" => "1 fil lastes opp", "{count} files uploading" => "{count} filer laster opp", "Upload cancelled." => "Opplasting avbrutt.", @@ -50,6 +49,7 @@ "Cancel upload" => "Avbryt opplasting", "Nothing in here. Upload something!" => "Ingenting her. Last opp noe!", "Download" => "Last ned", +"Unshare" => "Avslutt deling", "Upload too large" => "Opplasting for stor", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filene du prøver å laste opp er for store for å laste opp til denne serveren.", "Files are being scanned, please wait." => "Skanner etter filer, vennligst vent.", diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php index 9095149cd9..6e886ad700 100644 --- a/apps/files/l10n/nl.php +++ b/apps/files/l10n/nl.php @@ -1,4 +1,7 @@ "Kon %s niet verplaatsen - Er bestaat al een bestand met deze naam", +"Could not move %s" => "Kon %s niet verplaatsen", +"Unable to rename file" => "Kan bestand niet hernoemen", "No file was uploaded. Unknown error" => "Er was geen bestand geladen. Onbekende fout", "There is no error, the file uploaded with success" => "Geen fout opgetreden, bestand successvol geupload.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Het geüploade bestand overscheidt de upload_max_filesize optie in php.ini:", @@ -9,10 +12,10 @@ "Failed to write to disk" => "Schrijven naar schijf mislukt", "Invalid directory." => "Ongeldige directory.", "Files" => "Bestanden", -"Unshare" => "Stop delen", "Delete permanently" => "Verwijder definitief", "Delete" => "Verwijder", "Rename" => "Hernoem", +"Pending" => "Wachten", "{new_name} already exists" => "{new_name} bestaat al", "replace" => "vervang", "suggest name" => "Stel een naam voor", @@ -30,7 +33,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "uploaden van de file mislukt, het is of een directory of de bestandsgrootte is 0 bytes", "Upload Error" => "Upload Fout", "Close" => "Sluit", -"Pending" => "Wachten", "1 file uploading" => "1 bestand wordt ge-upload", "{count} files uploading" => "{count} bestanden aan het uploaden", "Upload cancelled." => "Uploaden geannuleerd.", @@ -57,10 +59,10 @@ "Text file" => "Tekstbestand", "Folder" => "Map", "From link" => "Vanaf link", -"Trash" => "Verwijderen", "Cancel upload" => "Upload afbreken", "Nothing in here. Upload something!" => "Er bevindt zich hier niets. Upload een bestand!", "Download" => "Download", +"Unshare" => "Stop delen", "Upload too large" => "Bestanden te groot", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "De bestanden die u probeert te uploaden zijn groter dan de maximaal toegestane bestandsgrootte voor deze server.", "Files are being scanned, please wait." => "Bestanden worden gescand, even wachten.", diff --git a/apps/files/l10n/oc.php b/apps/files/l10n/oc.php index 78045b299e..7a39e9399f 100644 --- a/apps/files/l10n/oc.php +++ b/apps/files/l10n/oc.php @@ -6,16 +6,15 @@ "Missing a temporary folder" => "Un dorsièr temporari manca", "Failed to write to disk" => "L'escriptura sul disc a fracassat", "Files" => "Fichièrs", -"Unshare" => "Non parteja", "Delete" => "Escafa", "Rename" => "Torna nomenar", +"Pending" => "Al esperar", "replace" => "remplaça", "suggest name" => "nom prepausat", "cancel" => "anulla", "undo" => "defar", "Unable to upload your file as it is a directory or has 0 bytes" => "Impossible d'amontcargar lo teu fichièr qu'es un repertòri o que ten pas que 0 octet.", "Upload Error" => "Error d'amontcargar", -"Pending" => "Al esperar", "1 file uploading" => "1 fichièr al amontcargar", "Upload cancelled." => "Amontcargar anullat.", "File upload is in progress. Leaving the page now will cancel the upload." => "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. ", @@ -37,6 +36,7 @@ "Cancel upload" => " Anulla l'amontcargar", "Nothing in here. Upload something!" => "Pas res dedins. Amontcarga qualquaren", "Download" => "Avalcarga", +"Unshare" => "Non parteja", "Upload too large" => "Amontcargament tròp gròs", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los fichièrs que sias a amontcargar son tròp pesucs per la talha maxi pel servidor.", "Files are being scanned, please wait." => "Los fiichièrs son a èsser explorats, ", diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php index 45d0f43661..83091bad18 100644 --- a/apps/files/l10n/pl.php +++ b/apps/files/l10n/pl.php @@ -1,4 +1,7 @@ "Nie można było przenieść %s - Plik o takiej nazwie już istnieje", +"Could not move %s" => "Nie można było przenieść %s", +"Unable to rename file" => "Nie można zmienić nazwy pliku", "No file was uploaded. Unknown error" => "Plik nie został załadowany. Nieznany błąd", "There is no error, the file uploaded with success" => "Przesłano plik", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Wgrany plik przekracza wartość upload_max_filesize zdefiniowaną w php.ini: ", @@ -9,9 +12,9 @@ "Failed to write to disk" => "Błąd zapisu na dysk", "Invalid directory." => "Zła ścieżka.", "Files" => "Pliki", -"Unshare" => "Nie udostępniaj", "Delete" => "Usuwa element", "Rename" => "Zmień nazwę", +"Pending" => "Oczekujące", "{new_name} already exists" => "{new_name} już istnieje", "replace" => "zastap", "suggest name" => "zasugeruj nazwę", @@ -25,7 +28,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Nie można wczytać pliku jeśli jest katalogiem lub ma 0 bajtów", "Upload Error" => "Błąd wczytywania", "Close" => "Zamknij", -"Pending" => "Oczekujące", "1 file uploading" => "1 plik wczytany", "{count} files uploading" => "{count} przesyłanie plików", "Upload cancelled." => "Wczytywanie anulowane.", @@ -55,6 +57,7 @@ "Cancel upload" => "Przestań wysyłać", "Nothing in here. Upload something!" => "Brak zawartości. Proszę wysłać pliki!", "Download" => "Pobiera element", +"Unshare" => "Nie udostępniaj", "Upload too large" => "Wysyłany plik ma za duży rozmiar", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Pliki które próbujesz przesłać, przekraczają maksymalną, dopuszczalną wielkość.", "Files are being scanned, please wait." => "Skanowanie plików, proszę czekać.", diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php index 361e81052b..7d834b8f30 100644 --- a/apps/files/l10n/pt_BR.php +++ b/apps/files/l10n/pt_BR.php @@ -1,4 +1,7 @@ "Não possível mover %s - Um arquivo com este nome já existe", +"Could not move %s" => "Não possível mover %s", +"Unable to rename file" => "Impossível renomear arquivo", "No file was uploaded. Unknown error" => "Nenhum arquivo foi transferido. Erro desconhecido", "There is no error, the file uploaded with success" => "Não houve nenhum erro, o arquivo foi transferido com sucesso", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O arquivo enviado excede a diretiva upload_max_filesize no php.ini: ", @@ -7,11 +10,12 @@ "No file was uploaded" => "Nenhum arquivo foi transferido", "Missing a temporary folder" => "Pasta temporária não encontrada", "Failed to write to disk" => "Falha ao escrever no disco", +"Not enough storage available" => "Espaço de armazenamento insuficiente", "Invalid directory." => "Diretório inválido.", "Files" => "Arquivos", -"Unshare" => "Descompartilhar", "Delete" => "Excluir", "Rename" => "Renomear", +"Pending" => "Pendente", "{new_name} already exists" => "{new_name} já existe", "replace" => "substituir", "suggest name" => "sugerir nome", @@ -26,7 +30,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Impossível enviar seus arquivo como diretório ou ele tem 0 bytes.", "Upload Error" => "Erro de envio", "Close" => "Fechar", -"Pending" => "Pendente", "1 file uploading" => "enviando 1 arquivo", "{count} files uploading" => "Enviando {count} arquivos", "Upload cancelled." => "Envio cancelado.", @@ -56,6 +59,7 @@ "Cancel upload" => "Cancelar upload", "Nothing in here. Upload something!" => "Nada aqui.Carrege alguma coisa!", "Download" => "Baixar", +"Unshare" => "Descompartilhar", "Upload too large" => "Arquivo muito grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os arquivos que você está tentando carregar excedeu o tamanho máximo para arquivos no servidor.", "Files are being scanned, please wait." => "Arquivos sendo escaneados, por favor aguarde.", diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php index 52c87ed728..e036b3dacb 100644 --- a/apps/files/l10n/pt_PT.php +++ b/apps/files/l10n/pt_PT.php @@ -1,4 +1,7 @@ "Não foi possível mover o ficheiro %s - Já existe um ficheiro com esse nome", +"Could not move %s" => "Não foi possível move o ficheiro %s", +"Unable to rename file" => "Não foi possível renomear o ficheiro", "No file was uploaded. Unknown error" => "Nenhum ficheiro foi carregado. Erro desconhecido", "There is no error, the file uploaded with success" => "Sem erro, ficheiro enviado com sucesso", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro enviado excede o limite permitido na directiva do php.ini upload_max_filesize", @@ -7,12 +10,13 @@ "No file was uploaded" => "Não foi enviado nenhum ficheiro", "Missing a temporary folder" => "Falta uma pasta temporária", "Failed to write to disk" => "Falhou a escrita no disco", +"Not enough storage available" => "Não há espaço suficiente em disco", "Invalid directory." => "Directório Inválido", "Files" => "Ficheiros", -"Unshare" => "Deixar de partilhar", "Delete permanently" => "Eliminar permanentemente", "Delete" => "Apagar", "Rename" => "Renomear", +"Pending" => "Pendente", "{new_name} already exists" => "O nome {new_name} já existe", "replace" => "substituir", "suggest name" => "sugira um nome", @@ -30,7 +34,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Não é possível fazer o envio do ficheiro devido a ser uma pasta ou ter 0 bytes", "Upload Error" => "Erro no envio", "Close" => "Fechar", -"Pending" => "Pendente", "1 file uploading" => "A enviar 1 ficheiro", "{count} files uploading" => "A carregar {count} ficheiros", "Upload cancelled." => "Envio cancelado.", @@ -57,10 +60,10 @@ "Text file" => "Ficheiro de texto", "Folder" => "Pasta", "From link" => "Da ligação", -"Trash" => "Lixo", "Cancel upload" => "Cancelar envio", "Nothing in here. Upload something!" => "Vazio. Envie alguma coisa!", "Download" => "Transferir", +"Unshare" => "Deixar de partilhar", "Upload too large" => "Envio muito grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que está a tentar enviar excedem o tamanho máximo de envio permitido neste servidor.", "Files are being scanned, please wait." => "Os ficheiros estão a ser analisados, por favor aguarde.", diff --git a/apps/files/l10n/ro.php b/apps/files/l10n/ro.php index 79ca1cf4f5..79604f56ad 100644 --- a/apps/files/l10n/ro.php +++ b/apps/files/l10n/ro.php @@ -1,4 +1,7 @@ "Nu se poate de mutat %s - Fișier cu acest nume deja există", +"Could not move %s" => "Nu s-a putut muta %s", +"Unable to rename file" => "Nu s-a putut redenumi fișierul", "No file was uploaded. Unknown error" => "Nici un fișier nu a fost încărcat. Eroare necunoscută", "There is no error, the file uploaded with success" => "Nicio eroare, fișierul a fost încărcat cu succes", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Fisierul incarcat depaseste upload_max_filesize permisi in php.ini: ", @@ -9,9 +12,9 @@ "Failed to write to disk" => "Eroare la scriere pe disc", "Invalid directory." => "Director invalid.", "Files" => "Fișiere", -"Unshare" => "Anulează partajarea", "Delete" => "Șterge", "Rename" => "Redenumire", +"Pending" => "În așteptare", "{new_name} already exists" => "{new_name} deja exista", "replace" => "înlocuire", "suggest name" => "sugerează nume", @@ -26,7 +29,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Nu s-a putut încărca fișierul tău deoarece pare să fie un director sau are 0 bytes.", "Upload Error" => "Eroare la încărcare", "Close" => "Închide", -"Pending" => "În așteptare", "1 file uploading" => "un fișier se încarcă", "{count} files uploading" => "{count} fisiere incarcate", "Upload cancelled." => "Încărcare anulată.", @@ -56,6 +58,7 @@ "Cancel upload" => "Anulează încărcarea", "Nothing in here. Upload something!" => "Nimic aici. Încarcă ceva!", "Download" => "Descarcă", +"Unshare" => "Anulează partajarea", "Upload too large" => "Fișierul încărcat este prea mare", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fișierul care l-ai încărcat a depășită limita maximă admisă la încărcare pe acest server.", "Files are being scanned, please wait." => "Fișierele sunt scanate, te rog așteptă.", diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php index 05542452e7..803b34e99c 100644 --- a/apps/files/l10n/ru.php +++ b/apps/files/l10n/ru.php @@ -1,4 +1,7 @@ "Невозможно переместить %s - файл с таким именем уже существует", +"Could not move %s" => "Невозможно переместить %s", +"Unable to rename file" => "Невозможно переименовать файл", "No file was uploaded. Unknown error" => "Файл не был загружен. Неизвестная ошибка", "There is no error, the file uploaded with success" => "Файл успешно загружен", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Файл превышает размер установленный upload_max_filesize в php.ini:", @@ -7,12 +10,13 @@ "No file was uploaded" => "Файл не был загружен", "Missing a temporary folder" => "Невозможно найти временную папку", "Failed to write to disk" => "Ошибка записи на диск", +"Not enough storage available" => "Недостаточно доступного места в хранилище", "Invalid directory." => "Неправильный каталог.", "Files" => "Файлы", -"Unshare" => "Отменить публикацию", "Delete permanently" => "Удалено навсегда", "Delete" => "Удалить", "Rename" => "Переименовать", +"Pending" => "Ожидание", "{new_name} already exists" => "{new_name} уже существует", "replace" => "заменить", "suggest name" => "предложить название", @@ -30,7 +34,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Не удается загрузить файл размером 0 байт в каталог", "Upload Error" => "Ошибка загрузки", "Close" => "Закрыть", -"Pending" => "Ожидание", "1 file uploading" => "загружается 1 файл", "{count} files uploading" => "{count} файлов загружается", "Upload cancelled." => "Загрузка отменена.", @@ -57,10 +60,10 @@ "Text file" => "Текстовый файл", "Folder" => "Папка", "From link" => "Из ссылки", -"Trash" => "Корзина", "Cancel upload" => "Отмена загрузки", "Nothing in here. Upload something!" => "Здесь ничего нет. Загрузите что-нибудь!", "Download" => "Скачать", +"Unshare" => "Отменить публикацию", "Upload too large" => "Файл слишком большой", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Файлы, которые Вы пытаетесь загрузить, превышают лимит для файлов на этом сервере.", "Files are being scanned, please wait." => "Подождите, файлы сканируются.", diff --git a/apps/files/l10n/ru_RU.php b/apps/files/l10n/ru_RU.php index 9b2913970f..c019328bb6 100644 --- a/apps/files/l10n/ru_RU.php +++ b/apps/files/l10n/ru_RU.php @@ -9,10 +9,10 @@ "Failed to write to disk" => "Не удалось записать на диск", "Invalid directory." => "Неверный каталог.", "Files" => "Файлы", -"Unshare" => "Скрыть", "Delete permanently" => "Удалить навсегда", "Delete" => "Удалить", "Rename" => "Переименовать", +"Pending" => "Ожидающий решения", "{new_name} already exists" => "{новое_имя} уже существует", "replace" => "отмена", "suggest name" => "подобрать название", @@ -30,7 +30,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Невозможно загрузить файл,\n так как он имеет нулевой размер или является директорией", "Upload Error" => "Ошибка загрузки", "Close" => "Закрыть", -"Pending" => "Ожидающий решения", "1 file uploading" => "загрузка 1 файла", "{count} files uploading" => "{количество} загружено файлов", "Upload cancelled." => "Загрузка отменена", @@ -57,10 +56,10 @@ "Text file" => "Текстовый файл", "Folder" => "Папка", "From link" => "По ссылке", -"Trash" => "Корзина", "Cancel upload" => "Отмена загрузки", "Nothing in here. Upload something!" => "Здесь ничего нет. Загрузите что-нибудь!", "Download" => "Загрузить", +"Unshare" => "Скрыть", "Upload too large" => "Загрузка слишком велика", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Размер файлов, которые Вы пытаетесь загрузить, превышает максимально допустимый размер для загрузки на данный сервер.", "Files are being scanned, please wait." => "Файлы сканируются, пожалуйста, подождите.", diff --git a/apps/files/l10n/si_LK.php b/apps/files/l10n/si_LK.php index 316470d839..de2b890684 100644 --- a/apps/files/l10n/si_LK.php +++ b/apps/files/l10n/si_LK.php @@ -7,7 +7,6 @@ "Missing a temporary folder" => "තාවකාලික ෆොල්ඩරයක් සොයාගත නොහැක", "Failed to write to disk" => "තැටිගත කිරීම අසාර්ථකයි", "Files" => "ගොනු", -"Unshare" => "නොබෙදු", "Delete" => "මකන්න", "Rename" => "නැවත නම් කරන්න", "replace" => "ප්‍රතිස්ථාපනය කරන්න", @@ -41,6 +40,7 @@ "Cancel upload" => "උඩුගත කිරීම අත් හරින්න", "Nothing in here. Upload something!" => "මෙහි කිසිවක් නොමැත. යමක් උඩුගත කරන්න", "Download" => "බාගත කිරීම", +"Unshare" => "නොබෙදු", "Upload too large" => "උඩුගත කිරීම විශාල වැඩිය", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "ඔබ උඩුගත කිරීමට තැත් කරන ගොනු මෙම සේවාදායකයා උඩුගත කිරීමට ඉඩදී ඇති උපරිම ගොනු විශාලත්වයට වඩා වැඩිය", "Files are being scanned, please wait." => "ගොනු පරික්ෂා කෙරේ. මඳක් රැඳී සිටින්න", diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php index be7f77adab..0d2db9813b 100644 --- a/apps/files/l10n/sk_SK.php +++ b/apps/files/l10n/sk_SK.php @@ -1,4 +1,7 @@ "Nie je možné presunúť %s - súbor s týmto menom už existuje", +"Could not move %s" => "Nie je možné presunúť %s", +"Unable to rename file" => "Nemožno premenovať súbor", "No file was uploaded. Unknown error" => "Žiaden súbor nebol odoslaný. Neznáma chyba", "There is no error, the file uploaded with success" => "Nenastala žiadna chyba, súbor bol úspešne nahraný", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Nahraný súbor predčil konfiguračnú direktívu upload_max_filesize v súbore php.ini:", @@ -7,12 +10,13 @@ "No file was uploaded" => "Žiaden súbor nebol nahraný", "Missing a temporary folder" => "Chýbajúci dočasný priečinok", "Failed to write to disk" => "Zápis na disk sa nepodaril", +"Not enough storage available" => "Nedostatok dostupného úložného priestoru", "Invalid directory." => "Neplatný adresár", "Files" => "Súbory", -"Unshare" => "Nezdielať", "Delete permanently" => "Zmazať trvalo", "Delete" => "Odstrániť", "Rename" => "Premenovať", +"Pending" => "Čaká sa", "{new_name} already exists" => "{new_name} už existuje", "replace" => "nahradiť", "suggest name" => "pomôcť s menom", @@ -30,7 +34,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Nemôžem nahrať súbor lebo je to priečinok alebo má 0 bajtov.", "Upload Error" => "Chyba odosielania", "Close" => "Zavrieť", -"Pending" => "Čaká sa", "1 file uploading" => "1 súbor sa posiela ", "{count} files uploading" => "{count} súborov odosielaných", "Upload cancelled." => "Odosielanie zrušené", @@ -57,10 +60,10 @@ "Text file" => "Textový súbor", "Folder" => "Priečinok", "From link" => "Z odkazu", -"Trash" => "Kôš", "Cancel upload" => "Zrušiť odosielanie", "Nothing in here. Upload something!" => "Žiadny súbor. Nahrajte niečo!", "Download" => "Stiahnuť", +"Unshare" => "Nezdielať", "Upload too large" => "Odosielaný súbor je príliš veľký", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server.", "Files are being scanned, please wait." => "Čakajte, súbory sú prehľadávané.", diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php index d55b4207d2..6a379459f0 100644 --- a/apps/files/l10n/sl.php +++ b/apps/files/l10n/sl.php @@ -8,9 +8,9 @@ "Missing a temporary folder" => "Manjka začasna mapa", "Failed to write to disk" => "Pisanje na disk je spodletelo", "Files" => "Datoteke", -"Unshare" => "Odstrani iz souporabe", "Delete" => "Izbriši", "Rename" => "Preimenuj", +"Pending" => "V čakanju ...", "{new_name} already exists" => "{new_name} že obstaja", "replace" => "zamenjaj", "suggest name" => "predlagaj ime", @@ -22,7 +22,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Pošiljanje ni mogoče, saj gre za mapo, ali pa je datoteka velikosti 0 bajtov.", "Upload Error" => "Napaka med nalaganjem", "Close" => "Zapri", -"Pending" => "V čakanju ...", "1 file uploading" => "Pošiljanje 1 datoteke", "{count} files uploading" => "nalagam {count} datotek", "Upload cancelled." => "Pošiljanje je preklicano.", @@ -51,6 +50,7 @@ "Cancel upload" => "Prekliči pošiljanje", "Nothing in here. Upload something!" => "Tukaj ni ničesar. Naložite kaj!", "Download" => "Prejmi", +"Unshare" => "Odstrani iz souporabe", "Upload too large" => "Nalaganje ni mogoče, ker je preveliko", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke, ki jih želite naložiti, presegajo največjo dovoljeno velikost na tem strežniku.", "Files are being scanned, please wait." => "Poteka preučevanje datotek, počakajte ...", diff --git a/apps/files/l10n/sr.php b/apps/files/l10n/sr.php index 188c8fc0da..e50d6612c4 100644 --- a/apps/files/l10n/sr.php +++ b/apps/files/l10n/sr.php @@ -7,9 +7,9 @@ "Missing a temporary folder" => "Недостаје привремена фасцикла", "Failed to write to disk" => "Не могу да пишем на диск", "Files" => "Датотеке", -"Unshare" => "Укини дељење", "Delete" => "Обриши", "Rename" => "Преименуј", +"Pending" => "На чекању", "{new_name} already exists" => "{new_name} већ постоји", "replace" => "замени", "suggest name" => "предложи назив", @@ -21,7 +21,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Не могу да отпремим датотеку као фасциклу или она има 0 бајтова", "Upload Error" => "Грешка при отпремању", "Close" => "Затвори", -"Pending" => "На чекању", "1 file uploading" => "Отпремам 1 датотеку", "{count} files uploading" => "Отпремам {count} датотеке/а", "Upload cancelled." => "Отпремање је прекинуто.", @@ -49,6 +48,7 @@ "Cancel upload" => "Прекини отпремање", "Nothing in here. Upload something!" => "Овде нема ничег. Отпремите нешто!", "Download" => "Преузми", +"Unshare" => "Укини дељење", "Upload too large" => "Датотека је превелика", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Датотеке које желите да отпремите прелазе ограничење у величини.", "Files are being scanned, please wait." => "Скенирам датотеке…", diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php index ebdaae9193..d95701e908 100644 --- a/apps/files/l10n/sv.php +++ b/apps/files/l10n/sv.php @@ -1,4 +1,7 @@ "Kunde inte flytta %s - Det finns redan en fil med detta namn", +"Could not move %s" => "Kan inte flytta %s", +"Unable to rename file" => "Kan inte byta namn på filen", "No file was uploaded. Unknown error" => "Ingen fil uppladdad. Okänt fel", "There is no error, the file uploaded with success" => "Inga fel uppstod. Filen laddades upp utan problem", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Den uppladdade filen överskrider upload_max_filesize direktivet php.ini:", @@ -7,11 +10,12 @@ "No file was uploaded" => "Ingen fil blev uppladdad", "Missing a temporary folder" => "Saknar en tillfällig mapp", "Failed to write to disk" => "Misslyckades spara till disk", +"Not enough storage available" => "Inte tillräckligt med lagringsutrymme tillgängligt", "Invalid directory." => "Felaktig mapp.", "Files" => "Filer", -"Unshare" => "Sluta dela", "Delete" => "Radera", "Rename" => "Byt namn", +"Pending" => "Väntar", "{new_name} already exists" => "{new_name} finns redan", "replace" => "ersätt", "suggest name" => "föreslå namn", @@ -29,7 +33,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Kunde inte ladda upp dina filer eftersom det antingen är en mapp eller har 0 bytes.", "Upload Error" => "Uppladdningsfel", "Close" => "Stäng", -"Pending" => "Väntar", "1 file uploading" => "1 filuppladdning", "{count} files uploading" => "{count} filer laddas upp", "Upload cancelled." => "Uppladdning avbruten.", @@ -56,10 +59,10 @@ "Text file" => "Textfil", "Folder" => "Mapp", "From link" => "Från länk", -"Trash" => "Papperskorgen", "Cancel upload" => "Avbryt uppladdning", "Nothing in here. Upload something!" => "Ingenting här. Ladda upp något!", "Download" => "Ladda ner", +"Unshare" => "Sluta dela", "Upload too large" => "För stor uppladdning", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern.", "Files are being scanned, please wait." => "Filer skannas, var god vänta", diff --git a/apps/files/l10n/ta_LK.php b/apps/files/l10n/ta_LK.php index 383b4ef6f8..069a2ac582 100644 --- a/apps/files/l10n/ta_LK.php +++ b/apps/files/l10n/ta_LK.php @@ -7,9 +7,9 @@ "Missing a temporary folder" => "ஒரு தற்காலிகமான கோப்புறையை காணவில்லை", "Failed to write to disk" => "வட்டில் எழுத முடியவில்லை", "Files" => "கோப்புகள்", -"Unshare" => "பகிரப்படாதது", "Delete" => "அழிக்க", "Rename" => "பெயர்மாற்றம்", +"Pending" => "நிலுவையிலுள்ள", "{new_name} already exists" => "{new_name} ஏற்கனவே உள்ளது", "replace" => "மாற்றிடுக", "suggest name" => "பெயரை பரிந்துரைக்க", @@ -21,7 +21,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "அடைவு அல்லது 0 bytes ஐ கொண்டுள்ளதால் உங்களுடைய கோப்பை பதிவேற்ற முடியவில்லை", "Upload Error" => "பதிவேற்றல் வழு", "Close" => "மூடுக", -"Pending" => "நிலுவையிலுள்ள", "1 file uploading" => "1 கோப்பு பதிவேற்றப்படுகிறது", "{count} files uploading" => "{எண்ணிக்கை} கோப்புகள் பதிவேற்றப்படுகின்றது", "Upload cancelled." => "பதிவேற்றல் இரத்து செய்யப்பட்டுள்ளது", @@ -50,6 +49,7 @@ "Cancel upload" => "பதிவேற்றலை இரத்து செய்க", "Nothing in here. Upload something!" => "இங்கு ஒன்றும் இல்லை. ஏதாவது பதிவேற்றுக!", "Download" => "பதிவிறக்குக", +"Unshare" => "பகிரப்படாதது", "Upload too large" => "பதிவேற்றல் மிகப்பெரியது", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "நீங்கள் பதிவேற்ற முயற்சிக்கும் கோப்புகளானது இந்த சேவையகத்தில் கோப்பு பதிவேற்றக்கூடிய ஆகக்கூடிய அளவிலும் கூடியது.", "Files are being scanned, please wait." => "கோப்புகள் வருடப்படுகின்றன, தயவுசெய்து காத்திருங்கள்.", diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php index 5f880702b8..fce74874f1 100644 --- a/apps/files/l10n/th_TH.php +++ b/apps/files/l10n/th_TH.php @@ -1,4 +1,7 @@ "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่แล้ว", +"Could not move %s" => "ไม่สามารถย้าย %s ได้", +"Unable to rename file" => "ไม่สามารถเปลี่ยนชื่อไฟล์ได้", "No file was uploaded. Unknown error" => "ยังไม่มีไฟล์ใดที่ถูกอัพโหลด เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ", "There is no error, the file uploaded with success" => "ไม่มีข้อผิดพลาดใดๆ ไฟล์ถูกอัพโหลดเรียบร้อยแล้ว", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "ขนาดไฟล์ที่อัพโหลดมีขนาดเกิน upload_max_filesize ที่ระบุไว้ใน php.ini", @@ -7,11 +10,12 @@ "No file was uploaded" => "ยังไม่มีไฟล์ที่ถูกอัพโหลด", "Missing a temporary folder" => "แฟ้มเอกสารชั่วคราวเกิดการสูญหาย", "Failed to write to disk" => "เขียนข้อมูลลงแผ่นดิสก์ล้มเหลว", +"Not enough storage available" => "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน", "Invalid directory." => "ไดเร็กทอรี่ไม่ถูกต้อง", "Files" => "ไฟล์", -"Unshare" => "ยกเลิกการแชร์ข้อมูล", "Delete" => "ลบ", "Rename" => "เปลี่ยนชื่อ", +"Pending" => "อยู่ระหว่างดำเนินการ", "{new_name} already exists" => "{new_name} มีอยู่แล้วในระบบ", "replace" => "แทนที่", "suggest name" => "แนะนำชื่อ", @@ -29,7 +33,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "ไม่สามารถอัพโหลดไฟล์ของคุณได้ เนื่องจากไฟล์ดังกล่าวเป็นไดเร็กทอรี่หรือมีขนาด 0 ไบต์", "Upload Error" => "เกิดข้อผิดพลาดในการอัพโหลด", "Close" => "ปิด", -"Pending" => "อยู่ระหว่างดำเนินการ", "1 file uploading" => "กำลังอัพโหลดไฟล์ 1 ไฟล์", "{count} files uploading" => "กำลังอัพโหลด {count} ไฟล์", "Upload cancelled." => "การอัพโหลดถูกยกเลิก", @@ -56,10 +59,10 @@ "Text file" => "ไฟล์ข้อความ", "Folder" => "แฟ้มเอกสาร", "From link" => "จากลิงก์", -"Trash" => "ถังขยะ", "Cancel upload" => "ยกเลิกการอัพโหลด", "Nothing in here. Upload something!" => "ยังไม่มีไฟล์ใดๆอยู่ที่นี่ กรุณาอัพโหลดไฟล์!", "Download" => "ดาวน์โหลด", +"Unshare" => "ยกเลิกการแชร์ข้อมูล", "Upload too large" => "ไฟล์ที่อัพโหลดมีขนาดใหญ่เกินไป", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "ไฟล์ที่คุณพยายามที่จะอัพโหลดมีขนาดเกินกว่าขนาดสูงสุดที่กำหนดไว้ให้อัพโหลดได้สำหรับเซิร์ฟเวอร์นี้", "Files are being scanned, please wait." => "ไฟล์กำลังอยู่ระหว่างการสแกน, กรุณารอสักครู่.", diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php index 3325cbe1ee..f6943f1f4d 100644 --- a/apps/files/l10n/tr.php +++ b/apps/files/l10n/tr.php @@ -1,4 +1,7 @@ "%s taşınamadı. Bu isimde dosya zaten var.", +"Could not move %s" => "%s taşınamadı", +"Unable to rename file" => "Dosya adı değiştirilemedi", "No file was uploaded. Unknown error" => "Dosya yüklenmedi. Bilinmeyen hata", "There is no error, the file uploaded with success" => "Bir hata yok, dosya başarıyla yüklendi", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "php.ini dosyasında upload_max_filesize ile belirtilen dosya yükleme sınırı aşıldı.", @@ -9,9 +12,9 @@ "Failed to write to disk" => "Diske yazılamadı", "Invalid directory." => "Geçersiz dizin.", "Files" => "Dosyalar", -"Unshare" => "Paylaşılmayan", "Delete" => "Sil", "Rename" => "İsim değiştir.", +"Pending" => "Bekliyor", "{new_name} already exists" => "{new_name} zaten mevcut", "replace" => "değiştir", "suggest name" => "Öneri ad", @@ -26,7 +29,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Dosyanızın boyutu 0 byte olduğundan veya bir dizin olduğundan yüklenemedi", "Upload Error" => "Yükleme hatası", "Close" => "Kapat", -"Pending" => "Bekliyor", "1 file uploading" => "1 dosya yüklendi", "{count} files uploading" => "{count} dosya yükleniyor", "Upload cancelled." => "Yükleme iptal edildi.", @@ -56,6 +58,7 @@ "Cancel upload" => "Yüklemeyi iptal et", "Nothing in here. Upload something!" => "Burada hiçbir şey yok. Birşeyler yükleyin!", "Download" => "İndir", +"Unshare" => "Paylaşılmayan", "Upload too large" => "Yüklemeniz çok büyük", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Yüklemeye çalıştığınız dosyalar bu sunucudaki maksimum yükleme boyutunu aşıyor.", "Files are being scanned, please wait." => "Dosyalar taranıyor, lütfen bekleyin.", diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php index 4a76158c46..7e499e6c2c 100644 --- a/apps/files/l10n/uk.php +++ b/apps/files/l10n/uk.php @@ -9,10 +9,10 @@ "Failed to write to disk" => "Невдалося записати на диск", "Invalid directory." => "Невірний каталог.", "Files" => "Файли", -"Unshare" => "Заборонити доступ", "Delete permanently" => "Видалити назавжди", "Delete" => "Видалити", "Rename" => "Перейменувати", +"Pending" => "Очікування", "{new_name} already exists" => "{new_name} вже існує", "replace" => "заміна", "suggest name" => "запропонуйте назву", @@ -30,7 +30,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Неможливо завантажити ваш файл тому, що він тека або файл розміром 0 байт", "Upload Error" => "Помилка завантаження", "Close" => "Закрити", -"Pending" => "Очікування", "1 file uploading" => "1 файл завантажується", "{count} files uploading" => "{count} файлів завантажується", "Upload cancelled." => "Завантаження перервано.", @@ -57,10 +56,10 @@ "Text file" => "Текстовий файл", "Folder" => "Папка", "From link" => "З посилання", -"Trash" => "Смітник", "Cancel upload" => "Перервати завантаження", "Nothing in here. Upload something!" => "Тут нічого немає. Відвантажте що-небудь!", "Download" => "Завантажити", +"Unshare" => "Заборонити доступ", "Upload too large" => "Файл занадто великий", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Файли,що ви намагаєтесь відвантажити перевищують максимальний дозволений розмір файлів на цьому сервері.", "Files are being scanned, please wait." => "Файли скануються, зачекайте, будь-ласка.", diff --git a/apps/files/l10n/vi.php b/apps/files/l10n/vi.php index 0daf580a2f..b069246f01 100644 --- a/apps/files/l10n/vi.php +++ b/apps/files/l10n/vi.php @@ -1,15 +1,22 @@ "Không thể di chuyển %s - Đã có tên file này trên hệ thống", +"Could not move %s" => "Không thể di chuyển %s", +"Unable to rename file" => "Không thể đổi tên file", "No file was uploaded. Unknown error" => "Không có tập tin nào được tải lên. Lỗi không xác định", "There is no error, the file uploaded with success" => "Không có lỗi, các tập tin đã được tải lên thành công", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "The uploaded file exceeds the upload_max_filesize directive in php.ini: ", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Kích thước những tập tin tải lên vượt quá MAX_FILE_SIZE đã được quy định", "The uploaded file was only partially uploaded" => "Tập tin tải lên mới chỉ tải lên được một phần", "No file was uploaded" => "Không có tập tin nào được tải lên", "Missing a temporary folder" => "Không tìm thấy thư mục tạm", "Failed to write to disk" => "Không thể ghi ", +"Not enough storage available" => "Không đủ không gian lưu trữ", +"Invalid directory." => "Thư mục không hợp lệ", "Files" => "Tập tin", -"Unshare" => "Không chia sẽ", +"Delete permanently" => "Xóa vĩnh vễn", "Delete" => "Xóa", "Rename" => "Sửa tên", +"Pending" => "Chờ", "{new_name} already exists" => "{new_name} đã tồn tại", "replace" => "thay thế", "suggest name" => "tên gợi ý", @@ -17,16 +24,22 @@ "replaced {new_name}" => "đã thay thế {new_name}", "undo" => "lùi lại", "replaced {new_name} with {old_name}" => "đã thay thế {new_name} bằng {old_name}", +"perform delete operation" => "thực hiện việc xóa", +"'.' is an invalid file name." => "'.' là một tên file không hợp lệ", +"File name cannot be empty." => "Tên file không được rỗng", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Tên không hợp lệ, '\\', '/', '<', '>', ':', '\"', '|', '?' và '*' thì không được phép dùng.", +"Your storage is full, files can not be updated or synced anymore!" => "Your storage is full, files can not be updated or synced anymore!", +"Your storage is almost full ({usedSpacePercent}%)" => "Your storage is almost full ({usedSpacePercent}%)", +"Your download is being prepared. This might take some time if the files are big." => "Your download is being prepared. This might take some time if the files are big.", "Unable to upload your file as it is a directory or has 0 bytes" => "Không thể tải lên tập tin này do nó là một thư mục hoặc kích thước tập tin bằng 0 byte", "Upload Error" => "Tải lên lỗi", "Close" => "Đóng", -"Pending" => "Chờ", "1 file uploading" => "1 tệp tin đang được tải lên", "{count} files uploading" => "{count} tập tin đang tải lên", "Upload cancelled." => "Hủy tải lên", "File upload is in progress. Leaving the page now will cancel the upload." => "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này.", "URL cannot be empty." => "URL không được để trống.", +"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Invalid folder name. Usage of 'Shared' is reserved by Owncloud", "Name" => "Tên", "Size" => "Kích cỡ", "Modified" => "Thay đổi", @@ -50,8 +63,10 @@ "Cancel upload" => "Hủy upload", "Nothing in here. Upload something!" => "Không có gì ở đây .Hãy tải lên một cái gì đó !", "Download" => "Tải xuống", +"Unshare" => "Không chia sẽ", "Upload too large" => "Tập tin tải lên quá lớn", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ .", "Files are being scanned, please wait." => "Tập tin đang được quét ,vui lòng chờ.", -"Current scanning" => "Hiện tại đang quét" +"Current scanning" => "Hiện tại đang quét", +"Upgrading filesystem cache..." => "Upgrading filesystem cache..." ); diff --git a/apps/files/l10n/zh_CN.GB2312.php b/apps/files/l10n/zh_CN.GB2312.php index a38e2d3bc6..727b803800 100644 --- a/apps/files/l10n/zh_CN.GB2312.php +++ b/apps/files/l10n/zh_CN.GB2312.php @@ -7,9 +7,9 @@ "Missing a temporary folder" => "丢失了一个临时文件夹", "Failed to write to disk" => "写磁盘失败", "Files" => "文件", -"Unshare" => "取消共享", "Delete" => "删除", "Rename" => "重命名", +"Pending" => "Pending", "{new_name} already exists" => "{new_name} 已存在", "replace" => "替换", "suggest name" => "推荐名称", @@ -20,7 +20,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "不能上传你指定的文件,可能因为它是个文件夹或者大小为0", "Upload Error" => "上传错误", "Close" => "关闭", -"Pending" => "Pending", "1 file uploading" => "1 个文件正在上传", "{count} files uploading" => "{count} 个文件正在上传", "Upload cancelled." => "上传取消了", @@ -49,6 +48,7 @@ "Cancel upload" => "取消上传", "Nothing in here. Upload something!" => "这里没有东西.上传点什么!", "Download" => "下载", +"Unshare" => "取消共享", "Upload too large" => "上传的文件太大了", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "你正在试图上传的文件超过了此服务器支持的最大的文件大小.", "Files are being scanned, please wait." => "正在扫描文件,请稍候.", diff --git a/apps/files/l10n/zh_CN.php b/apps/files/l10n/zh_CN.php index 3c87ee2b73..569aaf1b0a 100644 --- a/apps/files/l10n/zh_CN.php +++ b/apps/files/l10n/zh_CN.php @@ -1,4 +1,7 @@ "无法移动 %s - 同名文件已存在", +"Could not move %s" => "无法移动 %s", +"Unable to rename file" => "无法重命名文件", "No file was uploaded. Unknown error" => "没有文件被上传。未知错误", "There is no error, the file uploaded with success" => "没有发生错误,文件上传成功。", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "上传文件大小已超过php.ini中upload_max_filesize所规定的值", @@ -9,9 +12,9 @@ "Failed to write to disk" => "写入磁盘失败", "Invalid directory." => "无效文件夹。", "Files" => "文件", -"Unshare" => "取消分享", "Delete" => "删除", "Rename" => "重命名", +"Pending" => "操作等待中", "{new_name} already exists" => "{new_name} 已存在", "replace" => "替换", "suggest name" => "建议名称", @@ -26,7 +29,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "无法上传文件,因为它是一个目录或者大小为 0 字节", "Upload Error" => "上传错误", "Close" => "关闭", -"Pending" => "操作等待中", "1 file uploading" => "1个文件上传中", "{count} files uploading" => "{count} 个文件上传中", "Upload cancelled." => "上传已取消", @@ -56,6 +58,7 @@ "Cancel upload" => "取消上传", "Nothing in here. Upload something!" => "这里还什么都没有。上传些东西吧!", "Download" => "下载", +"Unshare" => "取消分享", "Upload too large" => "上传文件过大", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "您正尝试上传的文件超过了此服务器可以上传的最大容量限制", "Files are being scanned, please wait." => "文件正在被扫描,请稍候。", diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php index 439907821d..0c029c8815 100644 --- a/apps/files/l10n/zh_TW.php +++ b/apps/files/l10n/zh_TW.php @@ -1,4 +1,7 @@ "無法移動 %s - 同名的檔案已經存在", +"Could not move %s" => "無法移動 %s", +"Unable to rename file" => "無法重新命名檔案", "No file was uploaded. Unknown error" => "沒有檔案被上傳。未知的錯誤。", "There is no error, the file uploaded with success" => "無錯誤,檔案上傳成功", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "上傳的檔案大小超過 php.ini 當中 upload_max_filesize 參數的設定:", @@ -9,9 +12,9 @@ "Failed to write to disk" => "寫入硬碟失敗", "Invalid directory." => "無效的資料夾。", "Files" => "檔案", -"Unshare" => "取消共享", "Delete" => "刪除", "Rename" => "重新命名", +"Pending" => "等候中", "{new_name} already exists" => "{new_name} 已經存在", "replace" => "取代", "suggest name" => "建議檔名", @@ -29,7 +32,6 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "無法上傳您的檔案因為它可能是一個目錄或檔案大小為0", "Upload Error" => "上傳發生錯誤", "Close" => "關閉", -"Pending" => "等候中", "1 file uploading" => "1 個檔案正在上傳", "{count} files uploading" => "{count} 個檔案正在上傳", "Upload cancelled." => "上傳取消", @@ -56,10 +58,10 @@ "Text file" => "文字檔", "Folder" => "資料夾", "From link" => "從連結", -"Trash" => "回收筒", "Cancel upload" => "取消上傳", "Nothing in here. Upload something!" => "沒有任何東西。請上傳內容!", "Download" => "下載", +"Unshare" => "取消共享", "Upload too large" => "上傳過大", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "您試圖上傳的檔案已超過伺服器的最大檔案大小限制。 ", "Files are being scanned, please wait." => "正在掃描檔案,請稍等。", diff --git a/apps/files_encryption/l10n/ca.php b/apps/files_encryption/l10n/ca.php index 1b888f7714..0c661353a7 100644 --- a/apps/files_encryption/l10n/ca.php +++ b/apps/files_encryption/l10n/ca.php @@ -1,9 +1,4 @@ "Connecteu-vos al client ownCloud i canvieu la contrasenya d'encriptació per completar la conversió.", -"switched to client side encryption" => "s'ha commutat a l'encriptació per part del client", -"Change encryption password to login password" => "Canvia la contrasenya d'encriptació per la d'accés", -"Please check your passwords and try again." => "Comproveu les contrasenyes i proveu-ho de nou.", -"Could not change your file encryption password to your login password" => "No s'ha pogut canviar la contrasenya d'encriptació de fitxers per la d'accés", "Encryption" => "Encriptatge", "File encryption is enabled." => "L'encriptació de fitxers està activada.", "The following file types will not be encrypted:" => "Els tipus de fitxers següents no s'encriptaran:", diff --git a/apps/files_encryption/l10n/cs_CZ.php b/apps/files_encryption/l10n/cs_CZ.php index 3278f13920..d225688a07 100644 --- a/apps/files_encryption/l10n/cs_CZ.php +++ b/apps/files_encryption/l10n/cs_CZ.php @@ -1,9 +1,4 @@ "Prosím přejděte na svého klienta ownCloud a nastavte šifrovací heslo pro dokončení konverze.", -"switched to client side encryption" => "přepnuto na šifrování na straně klienta", -"Change encryption password to login password" => "Změnit šifrovací heslo na přihlašovací", -"Please check your passwords and try again." => "Zkontrolujte, prosím, své heslo a zkuste to znovu.", -"Could not change your file encryption password to your login password" => "Nelze změnit šifrovací heslo na přihlašovací.", "Encryption" => "Šifrování", "File encryption is enabled." => "Šifrování je povoleno.", "The following file types will not be encrypted:" => "Následující typy souborů nebudou šifrovány:", diff --git a/apps/files_encryption/l10n/da.php b/apps/files_encryption/l10n/da.php index c9255759cb..e52ecb868a 100644 --- a/apps/files_encryption/l10n/da.php +++ b/apps/files_encryption/l10n/da.php @@ -1,9 +1,4 @@ "Skift venligst til din ownCloud-klient og skift krypteringskoden for at fuldføre konverteringen.", -"switched to client side encryption" => "skiftet til kryptering på klientsiden", -"Change encryption password to login password" => "Udskift krypteringskode til login-adgangskode", -"Please check your passwords and try again." => "Check adgangskoder og forsøg igen.", -"Could not change your file encryption password to your login password" => "Kunne ikke udskifte krypteringskode med login-adgangskode", "Encryption" => "Kryptering", "None" => "Ingen" ); diff --git a/apps/files_encryption/l10n/de.php b/apps/files_encryption/l10n/de.php index c3c69e0900..3dc586fe06 100644 --- a/apps/files_encryption/l10n/de.php +++ b/apps/files_encryption/l10n/de.php @@ -1,9 +1,4 @@ "Bitte wechseln Sie nun zum ownCloud Client und ändern Sie ihr Verschlüsselungspasswort um die Konvertierung abzuschließen.", -"switched to client side encryption" => "Zur Clientseitigen Verschlüsselung gewechselt", -"Change encryption password to login password" => "Ändern des Verschlüsselungspasswortes zum Anmeldepasswort", -"Please check your passwords and try again." => "Bitte überprüfen sie Ihr Passwort und versuchen Sie es erneut.", -"Could not change your file encryption password to your login password" => "Ihr Verschlüsselungspasswort konnte nicht als Anmeldepasswort gesetzt werden.", "Encryption" => "Verschlüsselung", "None" => "Keine" ); diff --git a/apps/files_encryption/l10n/de_DE.php b/apps/files_encryption/l10n/de_DE.php index 465af23efd..b942c659f9 100644 --- a/apps/files_encryption/l10n/de_DE.php +++ b/apps/files_encryption/l10n/de_DE.php @@ -1,9 +1,4 @@ "Bitte wechseln Sie nun zum ownCloud Client und ändern Sie ihr Verschlüsselungspasswort um die Konvertierung abzuschließen.", -"switched to client side encryption" => "Zur Clientseitigen Verschlüsselung gewechselt", -"Change encryption password to login password" => "Ändern des Verschlüsselungspasswortes zum Anmeldepasswort", -"Please check your passwords and try again." => "Bitte überprüfen sie Ihr Passwort und versuchen Sie es erneut.", -"Could not change your file encryption password to your login password" => "Ihr Verschlüsselungspasswort konnte nicht als Anmeldepasswort gesetzt werden.", "Encryption" => "Verschlüsselung", "File encryption is enabled." => "Datei-Verschlüsselung ist aktiviert", "The following file types will not be encrypted:" => "Die folgenden Datei-Typen werden nicht verschlüsselt:", diff --git a/apps/files_encryption/l10n/el.php b/apps/files_encryption/l10n/el.php index 94bb68bcbc..0031a73194 100644 --- a/apps/files_encryption/l10n/el.php +++ b/apps/files_encryption/l10n/el.php @@ -1,7 +1,7 @@ "Αλλαγή συνθηματικού κρυπτογράφησης στο συνθηματικό εισόδου ", -"Please check your passwords and try again." => "Παρακαλώ ελέγξτε το συνθηματικό σας και προσπαθήστε ξανά.", -"Could not change your file encryption password to your login password" => "Αδυναμία αλλαγής συνθηματικού κρυπτογράφησης αρχείων στο συνθηματικό εισόδου σας", "Encryption" => "Κρυπτογράφηση", +"File encryption is enabled." => "Η κρυπτογράφηση αρχείων είναι ενεργή.", +"The following file types will not be encrypted:" => "Οι παρακάτω τύποι αρχείων δεν θα κρυπτογραφηθούν:", +"Exclude the following file types from encryption:" => "Εξαίρεση των παρακάτω τύπων αρχείων από την κρυπτογράφηση:", "None" => "Καμία" ); diff --git a/apps/files_encryption/l10n/es.php b/apps/files_encryption/l10n/es.php index 73b5f273d1..4ea87b92e7 100644 --- a/apps/files_encryption/l10n/es.php +++ b/apps/files_encryption/l10n/es.php @@ -1,9 +1,4 @@ "Por favor, cambie su cliente de ownCloud y cambie su clave de cifrado para completar la conversión.", -"switched to client side encryption" => "Cambiar a cifrado del lado del cliente", -"Change encryption password to login password" => "Cambie la clave de cifrado para su contraseña de inicio de sesión", -"Please check your passwords and try again." => "Por favor revise su contraseña e intentelo de nuevo.", -"Could not change your file encryption password to your login password" => "No se pudo cambiar la contraseña de cifrado de archivos de su contraseña de inicio de sesión", "Encryption" => "Cifrado", "File encryption is enabled." => "La encriptacion de archivo esta activada.", "The following file types will not be encrypted:" => "Los siguientes tipos de archivo no seran encriptados:", diff --git a/apps/files_encryption/l10n/es_AR.php b/apps/files_encryption/l10n/es_AR.php index 8160db10df..52c7782784 100644 --- a/apps/files_encryption/l10n/es_AR.php +++ b/apps/files_encryption/l10n/es_AR.php @@ -1,9 +1,4 @@ "Por favor, cambiá uu cliente de ownCloud y cambiá tu clave de encriptado para completar la conversión.", -"switched to client side encryption" => "Cambiado a encriptación por parte del cliente", -"Change encryption password to login password" => "Cambiá la clave de encriptado para tu contraseña de inicio de sesión", -"Please check your passwords and try again." => "Por favor, revisá tu contraseña e intentalo de nuevo.", -"Could not change your file encryption password to your login password" => "No se pudo cambiar la contraseña de encriptación de archivos de tu contraseña de inicio de sesión", "Encryption" => "Encriptación", "None" => "Ninguno" ); diff --git a/apps/files_encryption/l10n/eu.php b/apps/files_encryption/l10n/eu.php index a2368816f5..b4f7be2c84 100644 --- a/apps/files_encryption/l10n/eu.php +++ b/apps/files_encryption/l10n/eu.php @@ -1,5 +1,4 @@ "Mesedez egiaztatu zure pasahitza eta saia zaitez berriro:", "Encryption" => "Enkriptazioa", "None" => "Bat ere ez" ); diff --git a/apps/files_encryption/l10n/fa.php b/apps/files_encryption/l10n/fa.php index 2186c9025b..21ad7e5656 100644 --- a/apps/files_encryption/l10n/fa.php +++ b/apps/files_encryption/l10n/fa.php @@ -1,5 +1,4 @@ "لطفا گذرواژه خود را بررسی کنید و دوباره امتحان کنید.", "Encryption" => "رمزگذاری", "None" => "هیچ‌کدام" ); diff --git a/apps/files_encryption/l10n/fi_FI.php b/apps/files_encryption/l10n/fi_FI.php index 8a9dd30e67..1e1dc4a121 100644 --- a/apps/files_encryption/l10n/fi_FI.php +++ b/apps/files_encryption/l10n/fi_FI.php @@ -1,5 +1,4 @@ "Tarkista salasanasi ja yritä uudelleen.", "Encryption" => "Salaus", "None" => "Ei mitään" ); diff --git a/apps/files_encryption/l10n/fr.php b/apps/files_encryption/l10n/fr.php index 7d431e6e46..88f1e4a393 100644 --- a/apps/files_encryption/l10n/fr.php +++ b/apps/files_encryption/l10n/fr.php @@ -1,9 +1,4 @@ "Veuillez vous connecter depuis votre client de synchronisation ownCloud et changer votre mot de passe de chiffrement pour finaliser la conversion.", -"switched to client side encryption" => "Mode de chiffrement changé en chiffrement côté client", -"Change encryption password to login password" => "Convertir le mot de passe de chiffrement en mot de passe de connexion", -"Please check your passwords and try again." => "Veuillez vérifier vos mots de passe et réessayer.", -"Could not change your file encryption password to your login password" => "Impossible de convertir votre mot de passe de chiffrement en mot de passe de connexion", "Encryption" => "Chiffrement", "File encryption is enabled." => "Le chiffrement des fichiers est activé", "The following file types will not be encrypted:" => "Les fichiers de types suivants ne seront pas chiffrés :", diff --git a/apps/files_encryption/l10n/hu_HU.php b/apps/files_encryption/l10n/hu_HU.php index fa62ae75fb..46f990bf38 100644 --- a/apps/files_encryption/l10n/hu_HU.php +++ b/apps/files_encryption/l10n/hu_HU.php @@ -1,9 +1,4 @@ "Kérjük, hogy váltson át az ownCloud kliensére, és változtassa meg a titkosítási jelszót az átalakítás befejezéséhez.", -"switched to client side encryption" => "átváltva a kliens oldalai titkosításra", -"Change encryption password to login password" => "Titkosítási jelszó módosítása a bejelentkezési jelszóra", -"Please check your passwords and try again." => "Kérjük, ellenőrizze a jelszavait, és próbálja meg újra.", -"Could not change your file encryption password to your login password" => "Nem módosíthatja a fájltitkosítási jelszavát a bejelentkezési jelszavára", "Encryption" => "Titkosítás", "None" => "Egyik sem" ); diff --git a/apps/files_encryption/l10n/it.php b/apps/files_encryption/l10n/it.php index ffa20b718d..9ab9bc492a 100644 --- a/apps/files_encryption/l10n/it.php +++ b/apps/files_encryption/l10n/it.php @@ -1,9 +1,4 @@ "Passa al tuo client ownCloud e cambia la password di cifratura per completare la conversione.", -"switched to client side encryption" => "passato alla cifratura lato client", -"Change encryption password to login password" => "Converti la password di cifratura nella password di accesso", -"Please check your passwords and try again." => "Controlla la password e prova ancora.", -"Could not change your file encryption password to your login password" => "Impossibile convertire la password di cifratura nella password di accesso", "Encryption" => "Cifratura", "File encryption is enabled." => "La cifratura dei file è abilitata.", "The following file types will not be encrypted:" => "I seguenti tipi di file non saranno cifrati:", diff --git a/apps/files_encryption/l10n/ja_JP.php b/apps/files_encryption/l10n/ja_JP.php index b7aeb8d834..35fba615ae 100644 --- a/apps/files_encryption/l10n/ja_JP.php +++ b/apps/files_encryption/l10n/ja_JP.php @@ -1,9 +1,4 @@ "変換を完了するために、ownCloud クライアントに切り替えて、暗号化パスワードを変更してください。", -"switched to client side encryption" => "クライアントサイドの暗号化に切り替えました", -"Change encryption password to login password" => "暗号化パスワードをログインパスワードに変更", -"Please check your passwords and try again." => "パスワードを確認してもう一度行なってください。", -"Could not change your file encryption password to your login password" => "ファイル暗号化パスワードをログインパスワードに変更できませんでした。", "Encryption" => "暗号化", "File encryption is enabled." => "ファイルの暗号化は有効です。", "The following file types will not be encrypted:" => "次のファイルタイプは暗号化されません:", diff --git a/apps/files_encryption/l10n/ko.php b/apps/files_encryption/l10n/ko.php index 625906d89d..bd1580578c 100644 --- a/apps/files_encryption/l10n/ko.php +++ b/apps/files_encryption/l10n/ko.php @@ -1,9 +1,4 @@ "ownCloud로 전환한 다음 암호화에 사용할 암호를 변경하면 변환이 완료됩니다.", -"switched to client side encryption" => "클라이언트 암호화로 변경됨", -"Change encryption password to login password" => "암호화 암호를 로그인 암호로 변경", -"Please check your passwords and try again." => "암호를 확인한 다음 다시 시도하십시오.", -"Could not change your file encryption password to your login password" => "암호화 암호를 로그인 암호로 변경할 수 없습니다", "Encryption" => "암호화", "None" => "없음" ); diff --git a/apps/files_encryption/l10n/lv.php b/apps/files_encryption/l10n/lv.php index 1aae137751..fc31ccdb92 100644 --- a/apps/files_encryption/l10n/lv.php +++ b/apps/files_encryption/l10n/lv.php @@ -1,9 +1,4 @@ "Lūdzu, pārslēdzieties uz savu ownCloud klientu un maniet savu šifrēšanas paroli, lai pabeigtu pārveidošanu.", -"switched to client side encryption" => "Pārslēdzās uz klienta puses šifrēšanu", -"Change encryption password to login password" => "Mainīt šifrēšanas paroli uz ierakstīšanās paroli", -"Please check your passwords and try again." => "Lūdzu, pārbaudiet savas paroles un mēģiniet vēlreiz.", -"Could not change your file encryption password to your login password" => "Nevarēja mainīt datņu šifrēšanas paroli uz ierakstīšanās paroli", "Encryption" => "Šifrēšana", "File encryption is enabled." => "Datņu šifrēšana ir aktivēta.", "The following file types will not be encrypted:" => "Sekojošās datnes netiks šifrētas:", diff --git a/apps/files_encryption/l10n/nl.php b/apps/files_encryption/l10n/nl.php index c434330049..b1cba96aad 100644 --- a/apps/files_encryption/l10n/nl.php +++ b/apps/files_encryption/l10n/nl.php @@ -1,9 +1,4 @@ "Schakel om naar uw eigen ownCloud client en wijzig uw versleutelwachtwoord om de conversie af te ronden.", -"switched to client side encryption" => "overgeschakeld naar client side encryptie", -"Change encryption password to login password" => "Verander encryptie wachtwoord naar login wachtwoord", -"Please check your passwords and try again." => "Controleer uw wachtwoorden en probeer het opnieuw.", -"Could not change your file encryption password to your login password" => "Kon het bestandsencryptie wachtwoord niet veranderen naar het login wachtwoord", "Encryption" => "Versleuteling", "File encryption is enabled." => "Bestandsversleuteling geactiveerd.", "The following file types will not be encrypted:" => "De volgende bestandstypen zullen niet worden versleuteld:", diff --git a/apps/files_encryption/l10n/pt_BR.php b/apps/files_encryption/l10n/pt_BR.php index 356419e0e7..2b4af2a877 100644 --- a/apps/files_encryption/l10n/pt_BR.php +++ b/apps/files_encryption/l10n/pt_BR.php @@ -1,9 +1,4 @@ "Por favor, vá ao seu cliente ownCloud e mude sua criptografia de senha para completar a conversão.", -"switched to client side encryption" => "alterado para criptografia por parte do cliente", -"Change encryption password to login password" => "Mudar senha de criptografia para senha de login", -"Please check your passwords and try again." => "Por favor, verifique suas senhas e tente novamente.", -"Could not change your file encryption password to your login password" => "Não foi possível mudar sua senha de criptografia de arquivos para sua senha de login", "Encryption" => "Criptografia", "None" => "Nenhuma" ); diff --git a/apps/files_encryption/l10n/pt_PT.php b/apps/files_encryption/l10n/pt_PT.php index 4dac4d2273..75ecd7f4da 100644 --- a/apps/files_encryption/l10n/pt_PT.php +++ b/apps/files_encryption/l10n/pt_PT.php @@ -1,9 +1,4 @@ "Por favor, use o seu cliente de sincronização do ownCloud e altere a sua password de encriptação para concluír a conversão.", -"switched to client side encryption" => "Alterado para encriptação do lado do cliente", -"Change encryption password to login password" => "Alterar a password de encriptação para a password de login", -"Please check your passwords and try again." => "Por favor verifique as suas paswords e tente de novo.", -"Could not change your file encryption password to your login password" => "Não foi possível alterar a password de encriptação de ficheiros para a sua password de login", "Encryption" => "Encriptação", "None" => "Nenhum" ); diff --git a/apps/files_encryption/l10n/ro.php b/apps/files_encryption/l10n/ro.php index 9a3acc18dd..a5a6fb3cb7 100644 --- a/apps/files_encryption/l10n/ro.php +++ b/apps/files_encryption/l10n/ro.php @@ -1,9 +1,4 @@ "Te rugăm să mergi în clientul ownCloud și să schimbi parola pentru a finisa conversia", -"switched to client side encryption" => "setat la encriptare locală", -"Change encryption password to login password" => "Schimbă parola de ecriptare în parolă de acces", -"Please check your passwords and try again." => "Verifică te rog parolele și înceracă din nou.", -"Could not change your file encryption password to your login password" => "Nu s-a putut schimba parola de encripție a fișierelor ca parolă de acces", "Encryption" => "Încriptare", "None" => "Niciuna" ); diff --git a/apps/files_encryption/l10n/ru.php b/apps/files_encryption/l10n/ru.php index 651885fe02..22c1e3da37 100644 --- a/apps/files_encryption/l10n/ru.php +++ b/apps/files_encryption/l10n/ru.php @@ -1,9 +1,4 @@ "Пожалуйста переключитесь на Ваш клиент ownCloud и поменяйте пароль шиврования для завершения преобразования.", -"switched to client side encryption" => "переключён на шифрование со стороны клиента", -"Change encryption password to login password" => "Изменить пароль шифрования для пароля входа", -"Please check your passwords and try again." => "Пожалуйста проверьте пароли и попробуйте снова.", -"Could not change your file encryption password to your login password" => "Невозможно изменить Ваш пароль файла шифрования для пароля входа", "Encryption" => "Шифрование", "File encryption is enabled." => "Шифрование файла включено.", "The following file types will not be encrypted:" => "Следующие типы файлов не будут зашифрованы:", diff --git a/apps/files_encryption/l10n/ru_RU.php b/apps/files_encryption/l10n/ru_RU.php index dbbb22ed9c..7222235485 100644 --- a/apps/files_encryption/l10n/ru_RU.php +++ b/apps/files_encryption/l10n/ru_RU.php @@ -1,7 +1,4 @@ "Пожалуйста, переключитесь на ownCloud-клиент и измените Ваш пароль шифрования для завершения конвертации.", -"switched to client side encryption" => "переключено на шифрование на клиентской стороне", -"Please check your passwords and try again." => "Пожалуйста, проверьте Ваш пароль и попробуйте снова", "Encryption" => "Шифрование", "None" => "Ни один" ); diff --git a/apps/files_encryption/l10n/sk_SK.php b/apps/files_encryption/l10n/sk_SK.php index dc2907e704..004c3b129a 100644 --- a/apps/files_encryption/l10n/sk_SK.php +++ b/apps/files_encryption/l10n/sk_SK.php @@ -1,9 +1,4 @@ "Prosím, prejdite do svojho klienta ownCloud a zmente šifrovacie heslo na dokončenie konverzie.", -"switched to client side encryption" => "prepnuté na šifrovanie prostredníctvom klienta", -"Change encryption password to login password" => "Zmeniť šifrovacie heslo na prihlasovacie", -"Please check your passwords and try again." => "Skontrolujte si heslo a skúste to znovu.", -"Could not change your file encryption password to your login password" => "Nie je možné zmeniť šifrovacie heslo na prihlasovacie", "Encryption" => "Šifrovanie", "File encryption is enabled." => "Kryptovanie súborov nastavené.", "The following file types will not be encrypted:" => "Uvedené typy súborov nebudú kryptované:", diff --git a/apps/files_encryption/l10n/sv.php b/apps/files_encryption/l10n/sv.php index e5294974e4..e214a937a1 100644 --- a/apps/files_encryption/l10n/sv.php +++ b/apps/files_encryption/l10n/sv.php @@ -1,9 +1,4 @@ "Vänligen växla till ownCloud klienten och ändra ditt krypteringslösenord för att slutföra omvandlingen.", -"switched to client side encryption" => "Bytte till kryptering på klientsidan", -"Change encryption password to login password" => "Ändra krypteringslösenord till loginlösenord", -"Please check your passwords and try again." => "Kontrollera dina lösenord och försök igen.", -"Could not change your file encryption password to your login password" => "Kunde inte ändra ditt filkrypteringslösenord till ditt loginlösenord", "Encryption" => "Kryptering", "File encryption is enabled." => "Filkryptering är aktiverat.", "The following file types will not be encrypted:" => "Följande filtyper kommer inte att krypteras:", diff --git a/apps/files_encryption/l10n/th_TH.php b/apps/files_encryption/l10n/th_TH.php index 28d9e30864..e46d249118 100644 --- a/apps/files_encryption/l10n/th_TH.php +++ b/apps/files_encryption/l10n/th_TH.php @@ -1,9 +1,4 @@ "กรุณาสลับไปที่โปรแกรมไคลเอนต์ ownCloud ของคุณ แล้วเปลี่ยนรหัสผ่านสำหรับการเข้ารหัสเพื่อแปลงข้อมูลให้เสร็จสมบูรณ์", -"switched to client side encryption" => "สลับไปใช้การเข้ารหัสจากโปรแกรมไคลเอนต์", -"Change encryption password to login password" => "เปลี่ยนรหัสผ่านสำหรับเข้ารหัสไปเป็นรหัสผ่านสำหรับการเข้าสู่ระบบ", -"Please check your passwords and try again." => "กรุณาตรวจสอบรหัสผ่านของคุณแล้วลองใหม่อีกครั้ง", -"Could not change your file encryption password to your login password" => "ไม่สามารถเปลี่ยนรหัสผ่านสำหรับการเข้ารหัสไฟล์ของคุณไปเป็นรหัสผ่านสำหรับการเข้าสู่ระบบของคุณได้", "Encryption" => "การเข้ารหัส", "None" => "ไม่ต้อง" ); diff --git a/apps/files_encryption/l10n/vi.php b/apps/files_encryption/l10n/vi.php index b86cd83978..0a88d1b2db 100644 --- a/apps/files_encryption/l10n/vi.php +++ b/apps/files_encryption/l10n/vi.php @@ -1,4 +1,7 @@ "Mã hóa", +"File encryption is enabled." => "Mã hóa file đã mở", +"The following file types will not be encrypted:" => "Loại file sau sẽ không được mã hóa", +"Exclude the following file types from encryption:" => "Việc mã hóa không bao gồm loại file sau", "None" => "Không có gì hết" ); diff --git a/apps/files_encryption/l10n/zh_TW.php b/apps/files_encryption/l10n/zh_TW.php index bd8257ed60..1655e17143 100644 --- a/apps/files_encryption/l10n/zh_TW.php +++ b/apps/files_encryption/l10n/zh_TW.php @@ -1,9 +1,4 @@ "請至您的 ownCloud 客戶端程式修改您的加密密碼以完成轉換。", -"switched to client side encryption" => "已切換為客戶端加密", -"Change encryption password to login password" => "將加密密碼修改為登入密碼", -"Please check your passwords and try again." => "請檢查您的密碼並再試一次。", -"Could not change your file encryption password to your login password" => "無法變更您的檔案加密密碼為登入密碼", "Encryption" => "加密", "None" => "無" ); diff --git a/apps/files_external/l10n/bg_BG.php b/apps/files_external/l10n/bg_BG.php index 1f2c29d54c..6342da3f3a 100644 --- a/apps/files_external/l10n/bg_BG.php +++ b/apps/files_external/l10n/bg_BG.php @@ -6,6 +6,7 @@ "Backend" => "Администрация", "Configuration" => "Конфигурация", "Options" => "Опции", +"Applicable" => "Приложимо", "None set" => "Няма избрано", "All Users" => "Всички потребители", "Groups" => "Групи", diff --git a/apps/files_external/l10n/vi.php b/apps/files_external/l10n/vi.php index 0160692cb6..c522c669e1 100644 --- a/apps/files_external/l10n/vi.php +++ b/apps/files_external/l10n/vi.php @@ -5,6 +5,8 @@ "Fill out all required fields" => "Điền vào tất cả các trường bắt buộc", "Please provide a valid Dropbox app key and secret." => "Xin vui lòng cung cấp một ứng dụng Dropbox hợp lệ và mã bí mật.", "Error configuring Google Drive storage" => "Lỗi cấu hình lưu trữ Google Drive", +"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Cảnh báo: \"smbclient\" chưa được cài đặt. Mount CIFS/SMB shares là không thể thực hiện được. Hãy hỏi người quản trị hệ thống để cài đặt nó.", +"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Cảnh báo: FTP trong PHP chưa được cài đặt hoặc chưa được mở. Mount FTP shares là không thể. Xin hãy yêu cầu quản trị hệ thống của bạn cài đặt nó.", "External Storage" => "Lưu trữ ngoài", "Mount point" => "Điểm gắn", "Backend" => "phụ trợ", diff --git a/apps/files_trashbin/l10n/bg_BG.php b/apps/files_trashbin/l10n/bg_BG.php index 681c1dc580..2e6309c22b 100644 --- a/apps/files_trashbin/l10n/bg_BG.php +++ b/apps/files_trashbin/l10n/bg_BG.php @@ -1,3 +1,4 @@ "Име" +"Name" => "Име", +"Restore" => "Възтановяване" ); diff --git a/apps/files_trashbin/l10n/el.php b/apps/files_trashbin/l10n/el.php index 83e359890e..bc3c2350da 100644 --- a/apps/files_trashbin/l10n/el.php +++ b/apps/files_trashbin/l10n/el.php @@ -1,8 +1,14 @@ "Αδύνατη η μόνιμη διαγραφή του %s", +"Couldn't restore %s" => "Αδυναμία επαναφοράς %s", +"perform restore operation" => "εκτέλεση λειτουργία επαναφοράς", +"delete file permanently" => "μόνιμη διαγραφή αρχείου", "Name" => "Όνομα", +"Deleted" => "Διαγράφηκε", "1 folder" => "1 φάκελος", "{count} folders" => "{count} φάκελοι", "1 file" => "1 αρχείο", "{count} files" => "{count} αρχεία", +"Nothing in here. Your trash bin is empty!" => "Δεν υπάρχει τίποτα εδώ. Ο κάδος σας είναι άδειος!", "Restore" => "Επαναφορά" ); diff --git a/apps/files_trashbin/l10n/ru_RU.php b/apps/files_trashbin/l10n/ru_RU.php index c5b1408e2c..379ee37af8 100644 --- a/apps/files_trashbin/l10n/ru_RU.php +++ b/apps/files_trashbin/l10n/ru_RU.php @@ -1,8 +1,14 @@ "%s не может быть удалён навсегда", +"Couldn't restore %s" => "%s не может быть восстановлен", +"perform restore operation" => "выполнить операцию восстановления", +"delete file permanently" => "удалить файл навсегда", "Name" => "Имя", +"Deleted" => "Удалён", "1 folder" => "1 папка", "{count} folders" => "{количество} папок", "1 file" => "1 файл", "{count} files" => "{количество} файлов", +"Nothing in here. Your trash bin is empty!" => "Здесь ничего нет. Ваша корзина пуста!", "Restore" => "Восстановить" ); diff --git a/apps/files_trashbin/l10n/vi.php b/apps/files_trashbin/l10n/vi.php index 2c51c69aaf..ac2a7be029 100644 --- a/apps/files_trashbin/l10n/vi.php +++ b/apps/files_trashbin/l10n/vi.php @@ -1,7 +1,14 @@ "Không thể óa %s vĩnh viễn", +"Couldn't restore %s" => "Không thể khôi phục %s", +"perform restore operation" => "thực hiện phục hồi", +"delete file permanently" => "xóa file vĩnh viễn", "Name" => "Tên", +"Deleted" => "Đã xóa", "1 folder" => "1 thư mục", "{count} folders" => "{count} thư mục", "1 file" => "1 tập tin", -"{count} files" => "{count} tập tin" +"{count} files" => "{count} tập tin", +"Nothing in here. Your trash bin is empty!" => "Không có gì ở đây. Thùng rác của bạn rỗng!", +"Restore" => "Khôi phục" ); diff --git a/apps/files_versions/l10n/el.php b/apps/files_versions/l10n/el.php index 6b189c2cdd..8b7ecf085f 100644 --- a/apps/files_versions/l10n/el.php +++ b/apps/files_versions/l10n/el.php @@ -1,5 +1,13 @@ "Αδυναμία επαναφοράς του: %s", +"success" => "επιτυχία", +"File %s was reverted to version %s" => "Το αρχείο %s επαναφέρθηκε στην έκδοση %s", +"failure" => "αποτυχία", +"File %s could not be reverted to version %s" => "Το αρχείο %s δεν είναι δυνατό να επαναφερθεί στην έκδοση %s", +"No old versions available" => "Μη διαθέσιμες παλιές εκδόσεις", +"No path specified" => "Δεν καθορίστηκε διαδρομή", "History" => "Ιστορικό", +"Revert a file to a previous version by clicking on its revert button" => "Επαναφορά ενός αρχείου σε προηγούμενη έκδοση πατώντας στο κουμπί επαναφοράς", "Files Versioning" => "Εκδόσεις Αρχείων", "Enable" => "Ενεργοποίηση" ); diff --git a/apps/files_versions/l10n/vi.php b/apps/files_versions/l10n/vi.php index bb7163f6b1..675cb841c7 100644 --- a/apps/files_versions/l10n/vi.php +++ b/apps/files_versions/l10n/vi.php @@ -1,5 +1,13 @@ "Không thể khôi phục: %s", +"success" => "thành công", +"File %s was reverted to version %s" => "File %s đã được khôi phục về phiên bản %s", +"failure" => "Thất bại", +"File %s could not be reverted to version %s" => "File %s không thể khôi phục về phiên bản %s", +"No old versions available" => "Không có phiên bản cũ nào", +"No path specified" => "Không chỉ ra đường dẫn rõ ràng", "History" => "Lịch sử", +"Revert a file to a previous version by clicking on its revert button" => "Khôi phục một file về phiên bản trước đó bằng cách click vào nút Khôi phục tương ứng", "Files Versioning" => "Phiên bản tập tin", "Enable" => "Bật " ); diff --git a/apps/user_ldap/l10n/vi.php b/apps/user_ldap/l10n/vi.php index 46054e4a4e..4bbb977f36 100644 --- a/apps/user_ldap/l10n/vi.php +++ b/apps/user_ldap/l10n/vi.php @@ -17,20 +17,30 @@ "Group Filter" => "Bộ lọc nhóm", "Defines the filter to apply, when retrieving groups." => "Xác định các bộ lọc để áp dụng, khi nhóm sử dụng.", "without any placeholder, e.g. \"objectClass=posixGroup\"." => "mà không giữ chỗ nào, ví dụ như \"objectClass = osixGroup\".", +"Connection Settings" => "Connection Settings", "Port" => "Cổng", +"Backup (Replica) Port" => "Cổng sao lưu (Replica)", +"Disable Main Server" => "Tắt máy chủ chính", +"When switched on, ownCloud will only connect to the replica server." => "When switched on, ownCloud will only connect to the replica server.", "Use TLS" => "Sử dụng TLS", +"Do not use it additionally for LDAPS connections, it will fail." => "Do not use it additionally for LDAPS connections, it will fail.", "Case insensitve LDAP server (Windows)" => "Trường hợp insensitve LDAP máy chủ (Windows)", "Turn off SSL certificate validation." => "Tắt xác thực chứng nhận SSL", "If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Nếu kết nối chỉ hoạt động với tùy chọn này, vui lòng import LDAP certificate SSL trong máy chủ ownCloud của bạn.", "Not recommended, use for testing only." => "Không khuyến khích, Chỉ sử dụng để thử nghiệm.", "in seconds. A change empties the cache." => "trong vài giây. Một sự thay đổi bộ nhớ cache.", +"Directory Settings" => "Directory Settings", "User Display Name Field" => "Hiển thị tên người sử dụng", "The LDAP attribute to use to generate the user`s ownCloud name." => "Các thuộc tính LDAP sử dụng để tạo tên người dùng ownCloud.", "Base User Tree" => "Cây người dùng cơ bản", +"User Search Attributes" => "User Search Attributes", +"Optional; one attribute per line" => "Optional; one attribute per line", "Group Display Name Field" => "Hiển thị tên nhóm", "The LDAP attribute to use to generate the groups`s ownCloud name." => "Các thuộc tính LDAP sử dụng để tạo các nhóm ownCloud.", "Base Group Tree" => "Cây nhóm cơ bản", +"Group Search Attributes" => "Group Search Attributes", "Group-Member association" => "Nhóm thành viên Cộng đồng", +"Special Attributes" => "Special Attributes", "in bytes" => "Theo Byte", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Để trống tên người dùng (mặc định). Nếu không chỉ định thuộc tính LDAP/AD", "Help" => "Giúp đỡ" diff --git a/apps/user_webdavauth/l10n/vi.php b/apps/user_webdavauth/l10n/vi.php index 9bd32954b0..ee2aa08912 100644 --- a/apps/user_webdavauth/l10n/vi.php +++ b/apps/user_webdavauth/l10n/vi.php @@ -1,3 +1,5 @@ "WebDAV URL: http://" +"WebDAV Authentication" => "Xác thực WebDAV", +"URL: http://" => "URL: http://", +"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud sẽ gửi chứng thư người dùng tới URL này. Tính năng này kiểm tra trả lời và sẽ hiểu mã 401 và 403 của giao thức HTTP là chứng thư không hợp lệ, và mọi trả lời khác được coi là hợp lệ." ); diff --git a/core/l10n/bg_BG.php b/core/l10n/bg_BG.php index 587991499a..f2320f1340 100644 --- a/core/l10n/bg_BG.php +++ b/core/l10n/bg_BG.php @@ -11,6 +11,7 @@ "Error" => "Грешка", "Share" => "Споделяне", "Password" => "Парола", +"New password" => "Нова парола", "Personal" => "Лични", "Users" => "Потребители", "Apps" => "Приложения", diff --git a/core/l10n/ca.php b/core/l10n/ca.php index c60a818a4e..2126b96edd 100644 --- a/core/l10n/ca.php +++ b/core/l10n/ca.php @@ -109,6 +109,8 @@ "Security Warning" => "Avís de seguretat", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "No està disponible el generador de nombres aleatoris segurs, habiliteu l'extensió de PHP OpenSSL.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sense un generador de nombres aleatoris segurs un atacant podria predir els senyals per restablir la contrasenya i prendre-us el compte.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona.", +"For information how to properly configure your server, please see the documentation." => "Per més informació sobre com configurar correctament el servidor, mireu la documentació.", "Create an admin account" => "Crea un compte d'administrador", "Advanced" => "Avançat", "Data folder" => "Carpeta de dades", diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php index c95854bc62..331fcefd92 100644 --- a/core/l10n/cs_CZ.php +++ b/core/l10n/cs_CZ.php @@ -109,6 +109,8 @@ "Security Warning" => "Bezpečnostní upozornění", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Není dostupný žádný bezpečný generátor náhodných čísel. Povolte, prosím, rozšíření OpenSSL v PHP.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez bezpečného generátoru náhodných čísel může útočník předpovědět token pro obnovu hesla a převzít kontrolu nad Vaším účtem.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Váš adresář s daty a soubory jsou dostupné z internetu, protože soubor .htaccess nefunguje.", +"For information how to properly configure your server, please see the documentation." => "Pro informace jak správně nastavit váš server se podívejte do dokumentace.", "Create an admin account" => "Vytvořit účet správce", "Advanced" => "Pokročilé", "Data folder" => "Složka s daty", diff --git a/core/l10n/el.php b/core/l10n/el.php index 01c6eb818a..54720f5ecb 100644 --- a/core/l10n/el.php +++ b/core/l10n/el.php @@ -5,6 +5,7 @@ "User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Ο χρήστης %s διαμοιράστηκε τον φάκελο \"%s\" μαζί σας. Είναι διαθέσιμος για λήψη εδώ: %s", "Category type not provided." => "Δεν δώθηκε τύπος κατηγορίας.", "No category to add?" => "Δεν έχετε κατηγορία να προσθέσετε;", +"This category already exists: %s" => "Αυτή η κατηγορία υπάρχει ήδη: %s", "Object type not provided." => "Δεν δώθηκε τύπος αντικειμένου.", "%s ID not provided." => "Δεν δώθηκε η ID για %s.", "Error adding %s to favorites." => "Σφάλμα προσθήκης %s στα αγαπημένα.", diff --git a/core/l10n/it.php b/core/l10n/it.php index 1068e0c31c..c0109b9123 100644 --- a/core/l10n/it.php +++ b/core/l10n/it.php @@ -109,6 +109,8 @@ "Security Warning" => "Avviso di sicurezza", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Non è disponibile alcun generatore di numeri casuali sicuro. Abilita l'estensione OpenSSL di PHP", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Senza un generatore di numeri casuali sicuro, un malintenzionato potrebbe riuscire a individuare i token di ripristino delle password e impossessarsi del tuo account.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "La cartella dei dati e i file sono probabilmente accessibili da Internet poiché il file .htaccess non funziona.", +"For information how to properly configure your server, please see the documentation." => "Per informazioni su come configurare correttamente il server, vedi la documentazione.", "Create an admin account" => "Crea un account amministratore", "Advanced" => "Avanzate", "Data folder" => "Cartella dati", diff --git a/core/l10n/ru.php b/core/l10n/ru.php index 0495f60d03..b9c00c6691 100644 --- a/core/l10n/ru.php +++ b/core/l10n/ru.php @@ -109,6 +109,8 @@ "Security Warning" => "Предупреждение безопасности", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Нет доступного защищенного генератора случайных чисел, пожалуйста, включите расширение PHP OpenSSL.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Без защищенного генератора случайных чисел злоумышленник может предугадать токены сброса пароля и завладеть Вашей учетной записью.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Ваша папка с данными и файлы возможно доступны из интернета потому что файл .htaccess не работает.", +"For information how to properly configure your server, please see the documentation." => "Для информации как правильно настроить Ваш сервер, пожалйста загляните в документацию.", "Create an admin account" => "Создать учётную запись администратора", "Advanced" => "Дополнительно", "Data folder" => "Директория с данными", diff --git a/core/l10n/ru_RU.php b/core/l10n/ru_RU.php index fad6ebeddc..86e068c6c8 100644 --- a/core/l10n/ru_RU.php +++ b/core/l10n/ru_RU.php @@ -109,6 +109,8 @@ "Security Warning" => "Предупреждение системы безопасности", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Нет доступного защищенного генератора случайных чисел, пожалуйста, включите расширение PHP OpenSSL.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Без защищенного генератора случайных чисел злоумышленник может спрогнозировать пароль, сбросить учетные данные и завладеть Вашим аккаунтом.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Ваша папка с данными и файлы возможно доступны из интернета потому что файл .htaccess не работает.", +"For information how to properly configure your server, please see the documentation." => "Для информации как правильно настроить Ваш сервер, пожалйста загляните в документацию.", "Create an admin account" => "Создать admin account", "Advanced" => "Расширенный", "Data folder" => "Папка данных", diff --git a/core/l10n/vi.php b/core/l10n/vi.php index ca6f9b91da..0c4b197322 100644 --- a/core/l10n/vi.php +++ b/core/l10n/vi.php @@ -5,6 +5,7 @@ "User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Người dùng %s chia sẻ thư mục \"%s\" cho bạn .Bạn có thể tải tại đây : %s", "Category type not provided." => "Kiểu hạng mục không được cung cấp.", "No category to add?" => "Không có danh mục được thêm?", +"This category already exists: %s" => "Danh mục này đã tồn tại: %s", "Object type not provided." => "Loại đối tượng không được cung cấp.", "%s ID not provided." => "%s ID không được cung cấp.", "Error adding %s to favorites." => "Lỗi thêm %s vào mục yêu thích.", @@ -53,6 +54,7 @@ "The app name is not specified." => "Tên ứng dụng không được chỉ định.", "The required file {file} is not installed!" => "Tập tin cần thiết {file} không được cài đặt!", "Share" => "Chia sẻ", +"Shared" => "Được chia sẻ", "Error while sharing" => "Lỗi trong quá trình chia sẻ", "Error while unsharing" => "Lỗi trong quá trình gỡ chia sẻ", "Error while changing permissions" => "Lỗi trong quá trình phân quyền", @@ -62,6 +64,7 @@ "Share with link" => "Chia sẻ với liên kết", "Password protect" => "Mật khẩu bảo vệ", "Password" => "Mật khẩu", +"Email link to person" => "Liên kết email tới cá nhân", "Send" => "Gởi", "Set expiration date" => "Đặt ngày kết thúc", "Expiration date" => "Ngày kết thúc", @@ -80,6 +83,7 @@ "Error unsetting expiration date" => "Lỗi không thiết lập ngày kết thúc", "Error setting expiration date" => "Lỗi cấu hình ngày kết thúc", "Sending ..." => "Đang gởi ...", +"Email sent" => "Email đã được gửi", "The update was unsuccessful. Please report this issue to the ownCloud community." => "Cập nhật không thành công . Vui lòng thông báo đến Cộng đồng ownCloud .", "The update was successful. Redirecting you to ownCloud now." => "Cập nhật thành công .Hệ thống sẽ đưa bạn tới ownCloud.", "ownCloud password reset" => "Khôi phục mật khẩu Owncloud ", @@ -105,6 +109,8 @@ "Security Warning" => "Cảnh bảo bảo mật", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Không an toàn ! chức năng random number generator đã có sẵn ,vui lòng bật PHP OpenSSL extension.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Nếu không có random number generator , Hacker có thể thiết lập lại mật khẩu và chiếm tài khoản của bạn.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Thư mục và file dữ liệu của bạn có thể được truy cập từ internet bởi vì file .htaccess không hoạt động", +"For information how to properly configure your server, please see the documentation." => "Để biết thêm cách cấu hình máy chủ của bạn, xin xem tài liệu.", "Create an admin account" => "Tạo một tài khoản quản trị", "Advanced" => "Nâng cao", "Data folder" => "Thư mục dữ liệu", @@ -124,6 +130,8 @@ "Lost your password?" => "Bạn quên mật khẩu ?", "remember" => "ghi nhớ", "Log in" => "Đăng nhập", +"Alternative Logins" => "Đăng nhập khác", "prev" => "Lùi lại", -"next" => "Kế tiếp" +"next" => "Kế tiếp", +"Updating ownCloud to version %s, this may take a while." => "Cập nhật ownCloud lên phiên bản %s, có thể sẽ mất thời gian" ); diff --git a/l10n/af_ZA/files.po b/l10n/af_ZA/files.po index 43e9f26707..67facac0f9 100644 --- a/l10n/af_ZA/files.po +++ b/l10n/af_ZA/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n" "MIME-Version: 1.0\n" @@ -78,51 +78,52 @@ msgstr "" msgid "Files" msgstr "" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "replace" -msgstr "" - -#: js/filelist.js:208 -msgid "suggest name" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "cancel" -msgstr "" - -#: js/filelist.js:253 -msgid "replaced {new_name}" +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" msgstr "" #: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -162,64 +163,60 @@ msgstr "" msgid "Upload Error" msgstr "" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -276,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -291,6 +288,10 @@ msgstr "" msgid "Download" msgstr "" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "" + #: templates/index.php:105 msgid "Upload too large" msgstr "" diff --git a/l10n/af_ZA/files_encryption.po b/l10n/af_ZA/files_encryption.po index 7bdb33d2fc..535d61f394 100644 --- a/l10n/af_ZA/files_encryption.po +++ b/l10n/af_ZA/files_encryption.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n" "MIME-Version: 1.0\n" @@ -17,28 +17,6 @@ msgstr "" "Language: af_ZA\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "" diff --git a/l10n/af_ZA/lib.po b/l10n/af_ZA/lib.po index e03f329b9b..67a6f17cf0 100644 --- a/l10n/af_ZA/lib.po +++ b/l10n/af_ZA/lib.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-05 00:19+0100\n" -"PO-Revision-Date: 2012-07-27 22:23+0000\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,27 +17,27 @@ msgstr "" "Language: af_ZA\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:312 +#: app.php:339 msgid "Help" msgstr "Hulp" -#: app.php:319 +#: app.php:346 msgid "Personal" msgstr "Persoonlik" -#: app.php:324 +#: app.php:351 msgid "Settings" msgstr "Instellings" -#: app.php:329 +#: app.php:356 msgid "Users" msgstr "Gebruikers" -#: app.php:336 +#: app.php:363 msgid "Apps" msgstr "Toepassings" -#: app.php:338 +#: app.php:365 msgid "Admin" msgstr "Admin" @@ -85,6 +85,17 @@ msgstr "" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "" diff --git a/l10n/ar/files.po b/l10n/ar/files.po index ce179ab2fb..3e5b521eab 100644 --- a/l10n/ar/files.po +++ b/l10n/ar/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n" "MIME-Version: 1.0\n" @@ -79,51 +79,52 @@ msgstr "" msgid "Files" msgstr "الملفات" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "إلغاء مشاركة" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "محذوف" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "replace" -msgstr "" - -#: js/filelist.js:208 -msgid "suggest name" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "cancel" -msgstr "" - -#: js/filelist.js:253 -msgid "replaced {new_name}" +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" msgstr "" #: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -163,64 +164,60 @@ msgstr "" msgid "Upload Error" msgstr "" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "إغلق" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "الاسم" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "حجم" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "معدل" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -277,7 +274,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -292,6 +289,10 @@ msgstr "لا يوجد شيء هنا. إرفع بعض الملفات!" msgid "Download" msgstr "تحميل" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "إلغاء مشاركة" + #: templates/index.php:105 msgid "Upload too large" msgstr "حجم الترفيع أعلى من المسموح" diff --git a/l10n/ar/files_encryption.po b/l10n/ar/files_encryption.po index 59f5adcf60..6604007653 100644 --- a/l10n/ar/files_encryption.po +++ b/l10n/ar/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "التشفير" diff --git a/l10n/ar/lib.po b/l10n/ar/lib.po index dbb9b7359c..512142c685 100644 --- a/l10n/ar/lib.po +++ b/l10n/ar/lib.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n" "MIME-Version: 1.0\n" @@ -17,47 +17,47 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "المساعدة" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "شخصي" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "تعديلات" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "المستخدمين" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -85,6 +85,17 @@ msgstr "معلومات إضافية" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "منذ ثواني" diff --git a/l10n/bg_BG/core.po b/l10n/bg_BG/core.po index aaa4f3d190..06b082dffc 100644 --- a/l10n/bg_BG/core.po +++ b/l10n/bg_BG/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 10:30+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" @@ -160,59 +160,59 @@ msgstr "" msgid "December" msgstr "" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "Настройки" -#: js/js.js:764 +#: js/js.js:766 msgid "seconds ago" msgstr "преди секунди" -#: js/js.js:765 +#: js/js.js:767 msgid "1 minute ago" msgstr "преди 1 минута" -#: js/js.js:766 +#: js/js.js:768 msgid "{minutes} minutes ago" msgstr "" -#: js/js.js:767 +#: js/js.js:769 msgid "1 hour ago" msgstr "преди 1 час" -#: js/js.js:768 +#: js/js.js:770 msgid "{hours} hours ago" msgstr "" -#: js/js.js:769 +#: js/js.js:771 msgid "today" msgstr "днес" -#: js/js.js:770 +#: js/js.js:772 msgid "yesterday" msgstr "вчера" -#: js/js.js:771 +#: js/js.js:773 msgid "{days} days ago" msgstr "" -#: js/js.js:772 +#: js/js.js:774 msgid "last month" msgstr "последният месец" -#: js/js.js:773 +#: js/js.js:775 msgid "{months} months ago" msgstr "" -#: js/js.js:774 +#: js/js.js:776 msgid "months ago" msgstr "" -#: js/js.js:775 +#: js/js.js:777 msgid "last year" msgstr "последната година" -#: js/js.js:776 +#: js/js.js:778 msgid "years ago" msgstr "последните години" @@ -242,8 +242,8 @@ msgid "The object type is not specified." msgstr "" #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "Грешка" @@ -263,7 +263,7 @@ msgstr "Споделяне" msgid "Shared" msgstr "" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "" @@ -359,23 +359,23 @@ msgstr "" msgid "share" msgstr "" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "" -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "" @@ -429,7 +429,7 @@ msgstr "" #: lostpassword/templates/resetpassword.php:8 msgid "New password" -msgstr "" +msgstr "Нова парола" #: lostpassword/templates/resetpassword.php:11 msgid "Reset password" diff --git a/l10n/bg_BG/files.po b/l10n/bg_BG/files.po index f4b6a8ca67..827d1e52d1 100644 --- a/l10n/bg_BG/files.po +++ b/l10n/bg_BG/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" @@ -80,51 +80,52 @@ msgstr "" msgid "Files" msgstr "Файлове" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Изтриване" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Преименуване" -#: js/filelist.js:208 js/filelist.js:210 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "replace" -msgstr "препокриване" - -#: js/filelist.js:208 -msgid "suggest name" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "cancel" -msgstr "отказ" - -#: js/filelist.js:253 -msgid "replaced {new_name}" +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" msgstr "" #: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "препокриване" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "отказ" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "възтановяване" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -164,64 +165,60 @@ msgstr "" msgid "Upload Error" msgstr "" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" -msgstr "" +msgstr "Затвори" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Качването е спряно." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Име" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Размер" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Променено" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -278,7 +275,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -293,6 +290,10 @@ msgstr "Няма нищо тук. Качете нещо." msgid "Download" msgstr "Изтегляне" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "" + #: templates/index.php:105 msgid "Upload too large" msgstr "Файлът който сте избрали за качване е прекалено голям" diff --git a/l10n/bg_BG/files_encryption.po b/l10n/bg_BG/files_encryption.po index 6faf2d1a51..4ec6da246a 100644 --- a/l10n/bg_BG/files_encryption.po +++ b/l10n/bg_BG/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: bg_BG\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Криптиране" diff --git a/l10n/bg_BG/files_external.po b/l10n/bg_BG/files_external.po index 656df3768c..66a058cb87 100644 --- a/l10n/bg_BG/files_external.po +++ b/l10n/bg_BG/files_external.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-10 00:04+0100\n" -"PO-Revision-Date: 2013-01-09 20:47+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 10:20+0000\n" "Last-Translator: Stefan Ilivanov \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" @@ -42,13 +42,13 @@ msgstr "" msgid "Error configuring Google Drive storage" msgstr "" -#: lib/config.php:434 +#: lib/config.php:405 msgid "" "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " "is not possible. Please ask your system administrator to install it." msgstr "" -#: lib/config.php:435 +#: lib/config.php:406 msgid "" "Warning: The FTP support in PHP is not enabled or installed. Mounting" " of FTP shares is not possible. Please ask your system administrator to " @@ -77,7 +77,7 @@ msgstr "Опции" #: templates/settings.php:12 msgid "Applicable" -msgstr "" +msgstr "Приложимо" #: templates/settings.php:27 msgid "Add mount point" diff --git a/l10n/bg_BG/files_trashbin.po b/l10n/bg_BG/files_trashbin.po index cf5275530e..bd5ca7e1fe 100644 --- a/l10n/bg_BG/files_trashbin.po +++ b/l10n/bg_BG/files_trashbin.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 10:30+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" @@ -65,4 +65,4 @@ msgstr "" #: templates/index.php:20 templates/index.php:22 msgid "Restore" -msgstr "" +msgstr "Възтановяване" diff --git a/l10n/bg_BG/lib.po b/l10n/bg_BG/lib.po index 5e238d1136..5ab2d04c53 100644 --- a/l10n/bg_BG/lib.po +++ b/l10n/bg_BG/lib.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" @@ -18,49 +18,49 @@ msgstr "" "Language: bg_BG\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Помощ" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Лични" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Настройки" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Потребители" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Приложения" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Админ" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Изтеглянето като ZIP е изключено." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Файловете трябва да се изтеглят един по един." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Назад към файловете" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Избраните файлове са прекалено големи за генерирането на ZIP архив." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" -msgstr "" +msgstr "не може да се определи" #: json.php:28 msgid "Application is not enabled" @@ -86,6 +86,17 @@ msgstr "Текст" msgid "Images" msgstr "Снимки" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "преди секунди" diff --git a/l10n/bg_BG/settings.po b/l10n/bg_BG/settings.po index 4cef09976a..ee7d41ac66 100644 --- a/l10n/bg_BG/settings.po +++ b/l10n/bg_BG/settings.po @@ -4,15 +4,15 @@ # # Translators: # , 2011. -# Stefan Ilivanov , 2011. +# Stefan Ilivanov , 2011,2013. # Yasen Pramatarov , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 10:40+0000\n" +"Last-Translator: Stefan Ilivanov \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -63,7 +63,7 @@ msgstr "" #: ajax/setlanguage.php:15 msgid "Language changed" -msgstr "" +msgstr "Езикът е променен" #: ajax/setlanguage.php:17 ajax/setlanguage.php:20 msgid "Invalid request" @@ -83,7 +83,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -125,11 +125,11 @@ msgstr "" #: personal.php:34 personal.php:35 msgid "__language_name__" -msgstr "" +msgstr "__language_name__" #: templates/apps.php:10 msgid "Add your App" -msgstr "" +msgstr "Добавете Ваше приложение" #: templates/apps.php:11 msgid "More Apps" @@ -137,7 +137,7 @@ msgstr "" #: templates/apps.php:24 msgid "Select an App" -msgstr "" +msgstr "Изберете приложение" #: templates/apps.php:28 msgid "See application page at apps.owncloud.com" @@ -206,23 +206,23 @@ msgstr "" #: templates/personal.php:25 msgid "Unable to change your password" -msgstr "" +msgstr "Промяната на паролата не беше извършена" #: templates/personal.php:26 msgid "Current password" -msgstr "" +msgstr "Текуща парола" #: templates/personal.php:27 msgid "New password" -msgstr "" +msgstr "Нова парола" #: templates/personal.php:28 msgid "show" -msgstr "" +msgstr "показва" #: templates/personal.php:29 msgid "Change password" -msgstr "" +msgstr "Промяна на паролата" #: templates/personal.php:41 templates/users.php:80 msgid "Display Name" @@ -246,7 +246,7 @@ msgstr "E-mail" #: templates/personal.php:56 msgid "Your email address" -msgstr "" +msgstr "Вашия email адрес" #: templates/personal.php:57 msgid "Fill in an email address to enable password recovery" @@ -254,11 +254,11 @@ msgstr "" #: templates/personal.php:63 templates/personal.php:64 msgid "Language" -msgstr "" +msgstr "Език" #: templates/personal.php:69 msgid "Help translate" -msgstr "" +msgstr "Помогнете с превода" #: templates/personal.php:74 msgid "WebDAV" @@ -292,7 +292,7 @@ msgstr "Групи" #: templates/users.php:32 msgid "Create" -msgstr "" +msgstr "Създаване" #: templates/users.php:35 msgid "Default Storage" @@ -304,7 +304,7 @@ msgstr "" #: templates/users.php:60 templates/users.php:157 msgid "Other" -msgstr "" +msgstr "Други" #: templates/users.php:84 templates/users.php:121 msgid "Group Admin" diff --git a/l10n/bn_BD/files.po b/l10n/bn_BD/files.po index 023ecf7d1e..0cc1231047 100644 --- a/l10n/bn_BD/files.po +++ b/l10n/bn_BD/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n" "MIME-Version: 1.0\n" @@ -21,16 +21,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "%s কে স্থানান্তর করা সম্ভব হলো না - এই নামের ফাইল বিদ্যমান" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "%s কে স্থানান্তর করা সম্ভব হলো না" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "ফাইলের নাম পরিবর্তন করা সম্ভব হলো না" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -79,51 +79,52 @@ msgstr "ভুল ডিরেক্টরি" msgid "Files" msgstr "ফাইল" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "ভাগাভাগি বাতিল " - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "মুছে ফেল" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "পূনঃনামকরণ" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "মুলতুবি" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} টি বিদ্যমান" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "প্রতিস্থাপন" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "নাম সুপারিশ করুন" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "বাতিল" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "{new_name} প্রতিস্থাপন করা হয়েছে" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "ক্রিয়া প্রত্যাহার" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "{new_name} কে {old_name} নামে প্রতিস্থাপন করা হয়েছে" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -163,64 +164,60 @@ msgstr "আপনার ফাইলটি আপলোড করা সম্ msgid "Upload Error" msgstr "আপলোড করতে সমস্যা " -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "বন্ধ" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "মুলতুবি" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "১টি ফাইল আপলোড করা হচ্ছে" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} টি ফাইল আপলোড করা হচ্ছে" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "আপলোড বাতিল করা হয়েছে।" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "ফাইল আপলোড চলমান। এই পৃষ্ঠা পরিত্যাগ করলে আপলোড বাতিল করা হবে।" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL ফাঁকা রাখা যাবে না।" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "ফোল্ডারের নামটি সঠিক নয়। 'ভাগাভাগি করা' শুধুমাত্র Owncloud এর জন্য সংরক্ষিত।" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "নাম" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "আকার" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "পরিবর্তিত" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "১টি ফোল্ডার" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} টি ফোল্ডার" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "১টি ফাইল" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} টি ফাইল" @@ -277,7 +274,7 @@ msgid "From link" msgstr " লিংক থেকে" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -292,6 +289,10 @@ msgstr "এখানে কিছুই নেই। কিছু আপলো msgid "Download" msgstr "ডাউনলোড" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "ভাগাভাগি বাতিল " + #: templates/index.php:105 msgid "Upload too large" msgstr "আপলোডের আকারটি অনেক বড়" diff --git a/l10n/bn_BD/files_encryption.po b/l10n/bn_BD/files_encryption.po index aa9ec98462..7c8a89fc3b 100644 --- a/l10n/bn_BD/files_encryption.po +++ b/l10n/bn_BD/files_encryption.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n" "MIME-Version: 1.0\n" @@ -17,28 +17,6 @@ msgstr "" "Language: bn_BD\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "সংকেতায়ন" diff --git a/l10n/bn_BD/lib.po b/l10n/bn_BD/lib.po index da90c84c97..cfe719acd2 100644 --- a/l10n/bn_BD/lib.po +++ b/l10n/bn_BD/lib.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n" "MIME-Version: 1.0\n" @@ -17,47 +17,47 @@ msgstr "" "Language: bn_BD\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "সহায়িকা" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "ব্যক্তিগত" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "নিয়ামকসমূহ" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "ব্যভহারকারী" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "অ্যাপ" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "প্রশাসক" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIP ডাউনলোড বন্ধ করা আছে।" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "ফাইলগুলো একে একে ডাউনলোড করা আবশ্যক।" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "ফাইলে ফিরে চল" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "নির্বাচিত ফাইলগুলো এতই বৃহৎ যে জিপ ফাইল তৈরী করা সম্ভব নয়।" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -85,6 +85,17 @@ msgstr "" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "সেকেন্ড পূর্বে" diff --git a/l10n/ca/core.po b/l10n/ca/core.po index 10f01f6ce3..bdfbedf5a5 100644 --- a/l10n/ca/core.po +++ b/l10n/ca/core.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 10:20+0000\n" +"Last-Translator: rogerc \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -159,59 +159,59 @@ msgstr "Novembre" msgid "December" msgstr "Desembre" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "Arranjament" -#: js/js.js:764 +#: js/js.js:766 msgid "seconds ago" msgstr "segons enrere" -#: js/js.js:765 +#: js/js.js:767 msgid "1 minute ago" msgstr "fa 1 minut" -#: js/js.js:766 +#: js/js.js:768 msgid "{minutes} minutes ago" msgstr "fa {minutes} minuts" -#: js/js.js:767 +#: js/js.js:769 msgid "1 hour ago" msgstr "fa 1 hora" -#: js/js.js:768 +#: js/js.js:770 msgid "{hours} hours ago" msgstr "fa {hours} hores" -#: js/js.js:769 +#: js/js.js:771 msgid "today" msgstr "avui" -#: js/js.js:770 +#: js/js.js:772 msgid "yesterday" msgstr "ahir" -#: js/js.js:771 +#: js/js.js:773 msgid "{days} days ago" msgstr "fa {days} dies" -#: js/js.js:772 +#: js/js.js:774 msgid "last month" msgstr "el mes passat" -#: js/js.js:773 +#: js/js.js:775 msgid "{months} months ago" msgstr "fa {months} mesos" -#: js/js.js:774 +#: js/js.js:776 msgid "months ago" msgstr "mesos enrere" -#: js/js.js:775 +#: js/js.js:777 msgid "last year" msgstr "l'any passat" -#: js/js.js:776 +#: js/js.js:778 msgid "years ago" msgstr "anys enrere" @@ -241,8 +241,8 @@ msgid "The object type is not specified." msgstr "No s'ha especificat el tipus d'objecte." #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "Error" @@ -262,7 +262,7 @@ msgstr "Comparteix" msgid "Shared" msgstr "Compartit" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "Error en compartir" @@ -358,23 +358,23 @@ msgstr "elimina" msgid "share" msgstr "comparteix" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "Protegeix amb contrasenya" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "Error en eliminar la data d'expiració" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "Error en establir la data d'expiració" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "Enviant..." -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "El correu electrónic s'ha enviat" @@ -490,14 +490,14 @@ msgstr "Sense un generador de nombres aleatoris segurs un atacant podria predir msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Per més informació sobre com configurar correctament el servidor, mireu la documentació." #: templates/installation.php:36 msgid "Create an admin account" diff --git a/l10n/ca/files.po b/l10n/ca/files.po index eb952e6f7c..8cb4b510b4 100644 --- a/l10n/ca/files.po +++ b/l10n/ca/files.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" @@ -27,16 +27,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr " No s'ha pogut moure %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "No es pot canviar el nom del fitxer" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -75,7 +75,7 @@ msgstr "Ha fallat en escriure al disc" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "No hi ha prou espai disponible" #: ajax/upload.php:83 msgid "Invalid directory." @@ -85,51 +85,52 @@ msgstr "Directori no vàlid." msgid "Files" msgstr "Fitxers" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Deixa de compartir" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "Esborra permanentment" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Suprimeix" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Reanomena" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Pendents" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} ja existeix" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "substitueix" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "sugereix un nom" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "cancel·la" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "s'ha substituït {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "desfés" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "s'ha substituït {old_name} per {new_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "executa d'operació d'esborrar" @@ -169,64 +170,60 @@ msgstr "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes" msgid "Upload Error" msgstr "Error en la pujada" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Tanca" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Pendents" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 fitxer pujant" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} fitxers en pujada" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "La pujada s'ha cancel·lat." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "La URL no pot ser buida" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nom de carpeta no vàlid. L'ús de 'Shared' està reservat per Owncloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nom" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Mida" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Modificat" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 carpeta" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} carpetes" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 fitxer" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} fitxers" @@ -283,8 +280,8 @@ msgid "From link" msgstr "Des d'enllaç" #: templates/index.php:40 -msgid "Trash" -msgstr "Esborra" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -298,6 +295,10 @@ msgstr "Res per aquí. Pugeu alguna cosa!" msgid "Download" msgstr "Baixa" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Deixa de compartir" + #: templates/index.php:105 msgid "Upload too large" msgstr "La pujada és massa gran" diff --git a/l10n/ca/files_encryption.po b/l10n/ca/files_encryption.po index 481b00ceee..98f7c39d55 100644 --- a/l10n/ca/files_encryption.po +++ b/l10n/ca/files_encryption.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 07:20+0000\n" -"Last-Translator: rogerc \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,28 +19,6 @@ msgstr "" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Connecteu-vos al client ownCloud i canvieu la contrasenya d'encriptació per completar la conversió." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "s'ha commutat a l'encriptació per part del client" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Canvia la contrasenya d'encriptació per la d'accés" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Comproveu les contrasenyes i proveu-ho de nou." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "No s'ha pogut canviar la contrasenya d'encriptació de fitxers per la d'accés" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Encriptatge" diff --git a/l10n/ca/lib.po b/l10n/ca/lib.po index 965da96ee3..72c7829833 100644 --- a/l10n/ca/lib.po +++ b/l10n/ca/lib.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-18 00:03+0100\n" -"PO-Revision-Date: 2013-01-17 09:24+0000\n" -"Last-Translator: rogerc \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,47 +18,47 @@ msgstr "" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Ajuda" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Personal" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Configuració" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Usuaris" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Aplicacions" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Administració" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "La baixada en ZIP està desactivada." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Els fitxers s'han de baixar d'un en un." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Torna a Fitxers" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Els fitxers seleccionats son massa grans per generar un fitxer zip." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "no s'ha pogut determinar" @@ -86,6 +86,17 @@ msgstr "Text" msgid "Images" msgstr "Imatges" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "segons enrere" diff --git a/l10n/cs_CZ/core.po b/l10n/cs_CZ/core.po index 65f55a3875..87c6869293 100644 --- a/l10n/cs_CZ/core.po +++ b/l10n/cs_CZ/core.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 13:30+0000\n" +"Last-Translator: Tomáš Chvátal \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -160,59 +160,59 @@ msgstr "Listopad" msgid "December" msgstr "Prosinec" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "Nastavení" -#: js/js.js:764 +#: js/js.js:766 msgid "seconds ago" msgstr "před pár vteřinami" -#: js/js.js:765 +#: js/js.js:767 msgid "1 minute ago" msgstr "před minutou" -#: js/js.js:766 +#: js/js.js:768 msgid "{minutes} minutes ago" msgstr "před {minutes} minutami" -#: js/js.js:767 +#: js/js.js:769 msgid "1 hour ago" msgstr "před hodinou" -#: js/js.js:768 +#: js/js.js:770 msgid "{hours} hours ago" msgstr "před {hours} hodinami" -#: js/js.js:769 +#: js/js.js:771 msgid "today" msgstr "dnes" -#: js/js.js:770 +#: js/js.js:772 msgid "yesterday" msgstr "včera" -#: js/js.js:771 +#: js/js.js:773 msgid "{days} days ago" msgstr "před {days} dny" -#: js/js.js:772 +#: js/js.js:774 msgid "last month" msgstr "minulý mesíc" -#: js/js.js:773 +#: js/js.js:775 msgid "{months} months ago" msgstr "před {months} měsíci" -#: js/js.js:774 +#: js/js.js:776 msgid "months ago" msgstr "před měsíci" -#: js/js.js:775 +#: js/js.js:777 msgid "last year" msgstr "minulý rok" -#: js/js.js:776 +#: js/js.js:778 msgid "years ago" msgstr "před lety" @@ -242,8 +242,8 @@ msgid "The object type is not specified." msgstr "Není určen typ objektu." #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "Chyba" @@ -263,7 +263,7 @@ msgstr "Sdílet" msgid "Shared" msgstr "Sdílené" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "Chyba při sdílení" @@ -359,23 +359,23 @@ msgstr "smazat" msgid "share" msgstr "sdílet" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "Chráněno heslem" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "Chyba při odstraňování data vypršení platnosti" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "Chyba při nastavení data vypršení platnosti" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "Odesílám..." -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "E-mail odeslán" @@ -491,14 +491,14 @@ msgstr "Bez bezpečného generátoru náhodných čísel může útočník před msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "Váš adresář s daty a soubory jsou dostupné z internetu, protože soubor .htaccess nefunguje." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Pro informace jak správně nastavit váš server se podívejte do dokumentace." #: templates/installation.php:36 msgid "Create an admin account" diff --git a/l10n/cs_CZ/files.po b/l10n/cs_CZ/files.po index 16812c71df..05a14c9121 100644 --- a/l10n/cs_CZ/files.po +++ b/l10n/cs_CZ/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" @@ -23,16 +23,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Nelze přesunout %s - existuje soubor se stejným názvem" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Nelze přesunout %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Nelze přejmenovat soubor" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -71,7 +71,7 @@ msgstr "Zápis na disk selhal" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Nedostatek dostupného úložného prostoru" #: ajax/upload.php:83 msgid "Invalid directory." @@ -81,51 +81,52 @@ msgstr "Neplatný adresář" msgid "Files" msgstr "Soubory" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Zrušit sdílení" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "Trvale odstranit" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Smazat" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Přejmenovat" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Čekající" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} již existuje" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "nahradit" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "navrhnout název" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "zrušit" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "nahrazeno {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "zpět" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "nahrazeno {new_name} s {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "provést smazání" @@ -165,64 +166,60 @@ msgstr "Nelze odeslat Váš soubor, protože je to adresář nebo má velikost 0 msgid "Upload Error" msgstr "Chyba odesílání" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Zavřít" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Čekající" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "odesílá se 1 soubor" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "odesílám {count} souborů" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Odesílání zrušeno." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Probíhá odesílání souboru. Opuštění stránky vyústí ve zrušení nahrávání." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL nemůže být prázdná" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Neplatný název složky. Použití 'Shared' je rezervováno pro vnitřní potřeby Owncloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Název" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Velikost" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Změněno" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 složka" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} složky" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 soubor" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} soubory" @@ -279,8 +276,8 @@ msgid "From link" msgstr "Z odkazu" #: templates/index.php:40 -msgid "Trash" -msgstr "Koš" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -294,6 +291,10 @@ msgstr "Žádný obsah. Nahrajte něco." msgid "Download" msgstr "Stáhnout" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Zrušit sdílení" + #: templates/index.php:105 msgid "Upload too large" msgstr "Odeslaný soubor je příliš velký" diff --git a/l10n/cs_CZ/files_encryption.po b/l10n/cs_CZ/files_encryption.po index ea06c00d30..566eff0e84 100644 --- a/l10n/cs_CZ/files_encryption.po +++ b/l10n/cs_CZ/files_encryption.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 09:51+0000\n" -"Last-Translator: Tomáš Chvátal \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,28 +19,6 @@ msgstr "" "Language: cs_CZ\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Prosím přejděte na svého klienta ownCloud a nastavte šifrovací heslo pro dokončení konverze." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "přepnuto na šifrování na straně klienta" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Změnit šifrovací heslo na přihlašovací" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Zkontrolujte, prosím, své heslo a zkuste to znovu." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Nelze změnit šifrovací heslo na přihlašovací." - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Šifrování" diff --git a/l10n/cs_CZ/lib.po b/l10n/cs_CZ/lib.po index 55cc3d0f58..d64f30979f 100644 --- a/l10n/cs_CZ/lib.po +++ b/l10n/cs_CZ/lib.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-18 00:03+0100\n" -"PO-Revision-Date: 2013-01-17 11:01+0000\n" -"Last-Translator: Tomáš Chvátal \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,47 +19,47 @@ msgstr "" "Language: cs_CZ\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Nápověda" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Osobní" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Nastavení" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Uživatelé" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Aplikace" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Administrace" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Stahování ZIPu je vypnuto." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Soubory musí být stahovány jednotlivě." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Zpět k souborům" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Vybrané soubory jsou příliš velké pro vytvoření zip souboru." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "nelze zjistit" @@ -87,6 +87,17 @@ msgstr "Text" msgid "Images" msgstr "Obrázky" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "před vteřinami" diff --git a/l10n/da/files.po b/l10n/da/files.po index faeb92854c..dfe1828390 100644 --- a/l10n/da/files.po +++ b/l10n/da/files.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n" "MIME-Version: 1.0\n" @@ -28,16 +28,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Kunne ikke flytte %s - der findes allerede en fil med dette navn" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Kunne ikke flytte %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Kunne ikke omdøbe fil" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -76,7 +76,7 @@ msgstr "Fejl ved skrivning til disk." #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Der er ikke nok plads til rådlighed" #: ajax/upload.php:83 msgid "Invalid directory." @@ -86,51 +86,52 @@ msgstr "Ugyldig mappe." msgid "Files" msgstr "Filer" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Fjern deling" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Slet" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Omdøb" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Afventer" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} eksisterer allerede" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "erstat" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "foreslå navn" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "fortryd" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "erstattede {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "fortryd" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "erstattede {new_name} med {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -170,64 +171,60 @@ msgstr "Kunne ikke uploade din fil, da det enten er en mappe eller er tom" msgid "Upload Error" msgstr "Fejl ved upload" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Luk" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Afventer" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 fil uploades" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} filer uploades" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Upload afbrudt." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URLen kan ikke være tom." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Ugyldigt mappenavn. Brug af \"Shared\" er forbeholdt Owncloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Navn" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Størrelse" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Ændret" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 mappe" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} mapper" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 fil" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} filer" @@ -284,7 +281,7 @@ msgid "From link" msgstr "Fra link" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -299,6 +296,10 @@ msgstr "Her er tomt. Upload noget!" msgid "Download" msgstr "Download" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Fjern deling" + #: templates/index.php:105 msgid "Upload too large" msgstr "Upload for stor" diff --git a/l10n/da/files_encryption.po b/l10n/da/files_encryption.po index 2a28a291a5..10625b4397 100644 --- a/l10n/da/files_encryption.po +++ b/l10n/da/files_encryption.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n" "MIME-Version: 1.0\n" @@ -19,28 +19,6 @@ msgstr "" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Skift venligst til din ownCloud-klient og skift krypteringskoden for at fuldføre konverteringen." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "skiftet til kryptering på klientsiden" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Udskift krypteringskode til login-adgangskode" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Check adgangskoder og forsøg igen." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Kunne ikke udskifte krypteringskode med login-adgangskode" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Kryptering" diff --git a/l10n/da/lib.po b/l10n/da/lib.po index 5596da61c3..48865c2368 100644 --- a/l10n/da/lib.po +++ b/l10n/da/lib.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 11:52+0000\n" -"Last-Translator: Morten Juhl-Johansen Zölde-Fejér \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,47 +20,47 @@ msgstr "" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Hjælp" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Personlig" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Indstillinger" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Brugere" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Apps" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Admin" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIP-download er slået fra." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Filer skal downloades en for en." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Tilbage til Filer" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "De markerede filer er for store til at generere en ZIP-fil." -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "kunne ikke fastslås" @@ -88,6 +88,17 @@ msgstr "SMS" msgid "Images" msgstr "Billeder" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "sekunder siden" diff --git a/l10n/de/files.po b/l10n/de/files.po index a016e0c107..bf70be47a7 100644 --- a/l10n/de/files.po +++ b/l10n/de/files.po @@ -28,8 +28,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" @@ -41,16 +41,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits." #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Konnte %s nicht verschieben" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Konnte Datei nicht umbenennen" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -89,7 +89,7 @@ msgstr "Fehler beim Schreiben auf die Festplatte" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Nicht genug Speicherplatz verfügbar" #: ajax/upload.php:83 msgid "Invalid directory." @@ -99,51 +99,52 @@ msgstr "Ungültiges Verzeichnis." msgid "Files" msgstr "Dateien" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Nicht mehr freigeben" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Löschen" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Umbenennen" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Ausstehend" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} existiert bereits" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "ersetzen" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "Name vorschlagen" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "abbrechen" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "{new_name} wurde ersetzt" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "rückgängig machen" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "{old_name} ersetzt durch {new_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "Löschvorgang ausführen" @@ -183,64 +184,60 @@ msgstr "Deine Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichn msgid "Upload Error" msgstr "Fehler beim Upload" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Schließen" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Ausstehend" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "Eine Datei wird hoch geladen" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} Dateien werden hochgeladen" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Upload abgebrochen." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "Die URL darf nicht leer sein." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten." -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Name" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Größe" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Bearbeitet" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 Ordner" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} Ordner" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 Datei" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} Dateien" @@ -297,8 +294,8 @@ msgid "From link" msgstr "Von einem Link" #: templates/index.php:40 -msgid "Trash" -msgstr "Papierkorb" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -312,6 +309,10 @@ msgstr "Alles leer. Lade etwas hoch!" msgid "Download" msgstr "Herunterladen" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Nicht mehr freigeben" + #: templates/index.php:105 msgid "Upload too large" msgstr "Upload zu groß" diff --git a/l10n/de/files_encryption.po b/l10n/de/files_encryption.po index 858ca4d692..075f5b7734 100644 --- a/l10n/de/files_encryption.po +++ b/l10n/de/files_encryption.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" @@ -19,28 +19,6 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Bitte wechseln Sie nun zum ownCloud Client und ändern Sie ihr Verschlüsselungspasswort um die Konvertierung abzuschließen." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "Zur Clientseitigen Verschlüsselung gewechselt" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Ändern des Verschlüsselungspasswortes zum Anmeldepasswort" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Bitte überprüfen sie Ihr Passwort und versuchen Sie es erneut." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Ihr Verschlüsselungspasswort konnte nicht als Anmeldepasswort gesetzt werden." - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Verschlüsselung" diff --git a/l10n/de/lib.po b/l10n/de/lib.po index d27f2e0504..be6328b4e4 100644 --- a/l10n/de/lib.po +++ b/l10n/de/lib.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-21 00:04+0100\n" -"PO-Revision-Date: 2013-01-20 03:39+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,47 +24,47 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Hilfe" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Persönlich" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Einstellungen" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Benutzer" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Apps" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Administrator" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Der ZIP-Download ist deaktiviert." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Die Dateien müssen einzeln heruntergeladen werden." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Zurück zu \"Dateien\"" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Die gewählten Dateien sind zu groß, um eine ZIP-Datei zu erstellen." -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "Konnte nicht festgestellt werden" @@ -92,6 +92,17 @@ msgstr "Text" msgid "Images" msgstr "Bilder" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "Gerade eben" diff --git a/l10n/de_DE/files.po b/l10n/de_DE/files.po index 4ff8576780..a92ea83e99 100644 --- a/l10n/de_DE/files.po +++ b/l10n/de_DE/files.po @@ -30,8 +30,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" @@ -43,16 +43,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Konnte %s nicht verschieben" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Konnte Datei nicht umbenennen" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -91,7 +91,7 @@ msgstr "Fehler beim Schreiben auf die Festplatte" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Nicht genug Speicher vorhanden." #: ajax/upload.php:83 msgid "Invalid directory." @@ -101,51 +101,52 @@ msgstr "Ungültiges Verzeichnis." msgid "Files" msgstr "Dateien" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Nicht mehr freigeben" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "Entgültig löschen" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Löschen" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Umbenennen" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Ausstehend" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} existiert bereits" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "ersetzen" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "Name vorschlagen" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "abbrechen" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "{new_name} wurde ersetzt" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "rückgängig machen" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "{old_name} wurde ersetzt durch {new_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "Führe das Löschen aus" @@ -185,64 +186,60 @@ msgstr "Ihre Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichni msgid "Upload Error" msgstr "Fehler beim Upload" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Schließen" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Ausstehend" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 Datei wird hochgeladen" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} Dateien wurden hochgeladen" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Upload abgebrochen." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Der Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "Die URL darf nicht leer sein." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Name" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Größe" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Bearbeitet" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 Ordner" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} Ordner" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 Datei" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} Dateien" @@ -299,8 +296,8 @@ msgid "From link" msgstr "Von einem Link" #: templates/index.php:40 -msgid "Trash" -msgstr "Abfall" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -314,6 +311,10 @@ msgstr "Alles leer. Bitte laden Sie etwas hoch!" msgid "Download" msgstr "Herunterladen" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Nicht mehr freigeben" + #: templates/index.php:105 msgid "Upload too large" msgstr "Der Upload ist zu groß" diff --git a/l10n/de_DE/files_encryption.po b/l10n/de_DE/files_encryption.po index af3fe444bf..a4b8388e60 100644 --- a/l10n/de_DE/files_encryption.po +++ b/l10n/de_DE/files_encryption.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:09+0100\n" -"PO-Revision-Date: 2013-02-07 08:20+0000\n" -"Last-Translator: Susi <>\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" +"Last-Translator: I Robot \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,28 +23,6 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Bitte wechseln Sie nun zum ownCloud Client und ändern Sie ihr Verschlüsselungspasswort um die Konvertierung abzuschließen." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "Zur Clientseitigen Verschlüsselung gewechselt" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Ändern des Verschlüsselungspasswortes zum Anmeldepasswort" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Bitte überprüfen sie Ihr Passwort und versuchen Sie es erneut." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Ihr Verschlüsselungspasswort konnte nicht als Anmeldepasswort gesetzt werden." - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Verschlüsselung" diff --git a/l10n/de_DE/lib.po b/l10n/de_DE/lib.po index 851e152e2d..2211ceeaee 100644 --- a/l10n/de_DE/lib.po +++ b/l10n/de_DE/lib.po @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-18 00:03+0100\n" -"PO-Revision-Date: 2013-01-17 21:16+0000\n" -"Last-Translator: a.tangemann \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,47 +25,47 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Hilfe" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Persönlich" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Einstellungen" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Benutzer" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Apps" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Administrator" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Der ZIP-Download ist deaktiviert." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Die Dateien müssen einzeln heruntergeladen werden." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Zurück zu \"Dateien\"" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Die gewählten Dateien sind zu groß, um eine ZIP-Datei zu erstellen." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "konnte nicht ermittelt werden" @@ -93,6 +93,17 @@ msgstr "Text" msgid "Images" msgstr "Bilder" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "Gerade eben" diff --git a/l10n/el/core.po b/l10n/el/core.po index 6947ca9a5c..0c8ae8d8ae 100644 --- a/l10n/el/core.po +++ b/l10n/el/core.po @@ -4,7 +4,7 @@ # # Translators: # axil Pι , 2012. -# Dimitris M. , 2012. +# Dimitris M. , 2012-2013. # Efstathios Iosifidis , 2012. # Efstathios Iosifidis , 2012. # Marios Bekatoros <>, 2012. @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 14:40+0000\n" +"Last-Translator: Dimitris M. \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -60,7 +60,7 @@ msgstr "Δεν έχετε κατηγορία να προσθέσετε;" #: ajax/vcategories/add.php:37 #, php-format msgid "This category already exists: %s" -msgstr "" +msgstr "Αυτή η κατηγορία υπάρχει ήδη: %s" #: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27 #: ajax/vcategories/favorites.php:24 @@ -164,59 +164,59 @@ msgstr "Νοέμβριος" msgid "December" msgstr "Δεκέμβριος" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "Ρυθμίσεις" -#: js/js.js:764 +#: js/js.js:766 msgid "seconds ago" msgstr "δευτερόλεπτα πριν" -#: js/js.js:765 +#: js/js.js:767 msgid "1 minute ago" msgstr "1 λεπτό πριν" -#: js/js.js:766 +#: js/js.js:768 msgid "{minutes} minutes ago" msgstr "{minutes} λεπτά πριν" -#: js/js.js:767 +#: js/js.js:769 msgid "1 hour ago" msgstr "1 ώρα πριν" -#: js/js.js:768 +#: js/js.js:770 msgid "{hours} hours ago" msgstr "{hours} ώρες πριν" -#: js/js.js:769 +#: js/js.js:771 msgid "today" msgstr "σήμερα" -#: js/js.js:770 +#: js/js.js:772 msgid "yesterday" msgstr "χτες" -#: js/js.js:771 +#: js/js.js:773 msgid "{days} days ago" msgstr "{days} ημέρες πριν" -#: js/js.js:772 +#: js/js.js:774 msgid "last month" msgstr "τελευταίο μήνα" -#: js/js.js:773 +#: js/js.js:775 msgid "{months} months ago" msgstr "{months} μήνες πριν" -#: js/js.js:774 +#: js/js.js:776 msgid "months ago" msgstr "μήνες πριν" -#: js/js.js:775 +#: js/js.js:777 msgid "last year" msgstr "τελευταίο χρόνο" -#: js/js.js:776 +#: js/js.js:778 msgid "years ago" msgstr "χρόνια πριν" @@ -246,8 +246,8 @@ msgid "The object type is not specified." msgstr "Δεν καθορίστηκε ο τύπος του αντικειμένου." #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "Σφάλμα" @@ -267,7 +267,7 @@ msgstr "Διαμοιρασμός" msgid "Shared" msgstr "" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "Σφάλμα κατά τον διαμοιρασμό" @@ -363,23 +363,23 @@ msgstr "διαγραφή" msgid "share" msgstr "διαμοιρασμός" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "Προστασία με συνθηματικό" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "Σφάλμα κατά την διαγραφή της ημ. λήξης" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "Σφάλμα κατά τον ορισμό ημ. λήξης" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "Αποστολή..." -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "Το Email απεστάλη " diff --git a/l10n/el/files.po b/l10n/el/files.po index 8466d5bc77..d0ce4ea85e 100644 --- a/l10n/el/files.po +++ b/l10n/el/files.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Dimitris M. , 2012. +# Dimitris M. , 2012-2013. # Efstathios Iosifidis , 2012-2013. # Efstathios Iosifidis , 2013. # Efstathios Iosifidis , 2012. @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" @@ -28,16 +28,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Αδυναμία μετακίνησης του %s - υπάρχει ήδη αρχείο με αυτό το όνομα" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Αδυναμία μετακίνησης του %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Αδυναμία μετονομασίας αρχείου" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -76,7 +76,7 @@ msgstr "Αποτυχία εγγραφής στο δίσκο" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Μη επαρκής διαθέσιμος αποθηκευτικός χώρος" #: ajax/upload.php:83 msgid "Invalid directory." @@ -86,53 +86,54 @@ msgstr "Μη έγκυρος φάκελος." msgid "Files" msgstr "Αρχεία" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Διακοπή κοινής χρήσης" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" -msgstr "" +msgstr "Μόνιμη διαγραφή" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Διαγραφή" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Μετονομασία" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Εκκρεμεί" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} υπάρχει ήδη" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "αντικατέστησε" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "συνιστώμενο όνομα" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "ακύρωση" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "{new_name} αντικαταστάθηκε" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "αναίρεση" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "αντικαταστάθηκε το {new_name} με {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" -msgstr "" +msgstr "εκτέλεση διαδικασία διαγραφής" #: js/files.js:52 msgid "'.' is an invalid file name." @@ -170,64 +171,60 @@ msgstr "Αδυναμία στην αποστολή του αρχείου σας msgid "Upload Error" msgstr "Σφάλμα Αποστολής" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Κλείσιμο" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Εκκρεμεί" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 αρχείο ανεβαίνει" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} αρχεία ανεβαίνουν" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Η αποστολή ακυρώθηκε." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "Η URL δεν πρέπει να είναι κενή." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Μη έγκυρο όνομα φακέλου. Η χρήση του 'Κοινόχρηστος' χρησιμοποιείται από ο Owncloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Όνομα" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Μέγεθος" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Τροποποιήθηκε" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 φάκελος" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} φάκελοι" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 αρχείο" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} αρχεία" @@ -284,7 +281,7 @@ msgid "From link" msgstr "Από σύνδεσμο" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -299,6 +296,10 @@ msgstr "Δεν υπάρχει τίποτα εδώ. Ανέβασε κάτι!" msgid "Download" msgstr "Λήψη" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Διακοπή κοινής χρήσης" + #: templates/index.php:105 msgid "Upload too large" msgstr "Πολύ μεγάλο αρχείο προς αποστολή" @@ -319,4 +320,4 @@ msgstr "Τρέχουσα αναζήτηση " #: templates/upgrade.php:2 msgid "Upgrading filesystem cache..." -msgstr "" +msgstr "Αναβάθμιση μνήμης cache του συστήματος αρχείων..." diff --git a/l10n/el/files_encryption.po b/l10n/el/files_encryption.po index fe96e9ba8a..7196402db4 100644 --- a/l10n/el/files_encryption.po +++ b/l10n/el/files_encryption.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Dimitris M. , 2013. # Efstathios Iosifidis , 2012. # Efstathios Iosifidis , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" @@ -19,43 +20,21 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Αλλαγή συνθηματικού κρυπτογράφησης στο συνθηματικό εισόδου " - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Παρακαλώ ελέγξτε το συνθηματικό σας και προσπαθήστε ξανά." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Αδυναμία αλλαγής συνθηματικού κρυπτογράφησης αρχείων στο συνθηματικό εισόδου σας" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Κρυπτογράφηση" #: templates/settings-personal.php:7 msgid "File encryption is enabled." -msgstr "" +msgstr "Η κρυπτογράφηση αρχείων είναι ενεργή." #: templates/settings-personal.php:11 msgid "The following file types will not be encrypted:" -msgstr "" +msgstr "Οι παρακάτω τύποι αρχείων δεν θα κρυπτογραφηθούν:" #: templates/settings.php:7 msgid "Exclude the following file types from encryption:" -msgstr "" +msgstr "Εξαίρεση των παρακάτω τύπων αρχείων από την κρυπτογράφηση:" #: templates/settings.php:12 msgid "None" diff --git a/l10n/el/files_trashbin.po b/l10n/el/files_trashbin.po index 27cd5e21b4..91d2ccfde2 100644 --- a/l10n/el/files_trashbin.po +++ b/l10n/el/files_trashbin.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Dimitris M. , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 14:20+0000\n" +"Last-Translator: Dimitris M. \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,20 +21,20 @@ msgstr "" #: ajax/delete.php:22 #, php-format msgid "Couldn't delete %s permanently" -msgstr "" +msgstr "Αδύνατη η μόνιμη διαγραφή του %s" #: ajax/undelete.php:41 #, php-format msgid "Couldn't restore %s" -msgstr "" +msgstr "Αδυναμία επαναφοράς %s" #: js/trash.js:7 js/trash.js:94 msgid "perform restore operation" -msgstr "" +msgstr "εκτέλεση λειτουργία επαναφοράς" #: js/trash.js:33 msgid "delete file permanently" -msgstr "" +msgstr "μόνιμη διαγραφή αρχείου" #: js/trash.js:125 templates/index.php:17 msgid "Name" @@ -41,7 +42,7 @@ msgstr "Όνομα" #: js/trash.js:126 templates/index.php:27 msgid "Deleted" -msgstr "" +msgstr "Διαγράφηκε" #: js/trash.js:135 msgid "1 folder" @@ -61,7 +62,7 @@ msgstr "{count} αρχεία" #: templates/index.php:9 msgid "Nothing in here. Your trash bin is empty!" -msgstr "" +msgstr "Δεν υπάρχει τίποτα εδώ. Ο κάδος σας είναι άδειος!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" diff --git a/l10n/el/files_versions.po b/l10n/el/files_versions.po index 7f82eaf81c..0f2316b7ab 100644 --- a/l10n/el/files_versions.po +++ b/l10n/el/files_versions.po @@ -3,16 +3,16 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Dimitris M. , 2012. +# Dimitris M. , 2012-2013. # Efstathios Iosifidis , 2012. # Nisok Kosin , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 14:20+0000\n" +"Last-Translator: Dimitris M. \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,33 +23,33 @@ msgstr "" #: ajax/rollbackVersion.php:15 #, php-format msgid "Could not revert: %s" -msgstr "" +msgstr "Αδυναμία επαναφοράς του: %s" #: history.php:40 msgid "success" -msgstr "" +msgstr "επιτυχία" #: history.php:42 #, php-format msgid "File %s was reverted to version %s" -msgstr "" +msgstr "Το αρχείο %s επαναφέρθηκε στην έκδοση %s" #: history.php:49 msgid "failure" -msgstr "" +msgstr "αποτυχία" #: history.php:51 #, php-format msgid "File %s could not be reverted to version %s" -msgstr "" +msgstr "Το αρχείο %s δεν είναι δυνατό να επαναφερθεί στην έκδοση %s" #: history.php:68 msgid "No old versions available" -msgstr "" +msgstr "Μη διαθέσιμες παλιές εκδόσεις" #: history.php:73 msgid "No path specified" -msgstr "" +msgstr "Δεν καθορίστηκε διαδρομή" #: js/versions.js:16 msgid "History" @@ -57,7 +57,7 @@ msgstr "Ιστορικό" #: templates/history.php:20 msgid "Revert a file to a previous version by clicking on its revert button" -msgstr "" +msgstr "Επαναφορά ενός αρχείου σε προηγούμενη έκδοση πατώντας στο κουμπί επαναφοράς" #: templates/settings.php:3 msgid "Files Versioning" diff --git a/l10n/el/lib.po b/l10n/el/lib.po index 27ef72f2eb..214303c9d1 100644 --- a/l10n/el/lib.po +++ b/l10n/el/lib.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-18 00:03+0100\n" -"PO-Revision-Date: 2013-01-17 20:39+0000\n" -"Last-Translator: xneo1 \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,47 +19,47 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Βοήθεια" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Προσωπικά" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Ρυθμίσεις" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Χρήστες" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Εφαρμογές" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Διαχειριστής" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Η λήψη ZIP απενεργοποιήθηκε." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Τα αρχεία πρέπει να ληφθούν ένα-ένα." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Πίσω στα Αρχεία" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Τα επιλεγμένα αρχεία είναι μεγάλα ώστε να δημιουργηθεί αρχείο zip." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "δεν μπορούσε να προσδιορισθεί" @@ -87,6 +87,17 @@ msgstr "Κείμενο" msgid "Images" msgstr "Εικόνες" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "δευτερόλεπτα πριν" diff --git a/l10n/eo/files.po b/l10n/eo/files.po index 139cd4a827..f2006ab6bd 100644 --- a/l10n/eo/files.po +++ b/l10n/eo/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" @@ -23,16 +23,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Ne eblis movi %s: dosiero kun ĉi tiu nomo jam ekzistas" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Ne eblis movi %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Ne eblis alinomigi dosieron" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -81,51 +81,52 @@ msgstr "Nevalida dosierujo." msgid "Files" msgstr "Dosieroj" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Malkunhavigi" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Forigi" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Alinomigi" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Traktotaj" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} jam ekzistas" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "anstataŭigi" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "sugesti nomon" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "nuligi" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "anstataŭiĝis {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "malfari" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "anstataŭiĝis {new_name} per {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -165,64 +166,60 @@ msgstr "Ne eblis alŝuti vian dosieron ĉar ĝi estas dosierujo aŭ havas 0 duum msgid "Upload Error" msgstr "Alŝuta eraro" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Fermi" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Traktotaj" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 dosiero estas alŝutata" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} dosieroj alŝutatas" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "La alŝuto nuliĝis." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Dosieralŝuto plenumiĝas. Lasi la paĝon nun nuligus la alŝuton." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL ne povas esti malplena." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nevalida dosierujnomo. Uzo de “Shared” rezervatas de Owncloud." -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nomo" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Grando" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Modifita" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 dosierujo" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} dosierujoj" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 dosiero" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} dosierujoj" @@ -279,7 +276,7 @@ msgid "From link" msgstr "El ligilo" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -294,6 +291,10 @@ msgstr "Nenio estas ĉi tie. Alŝutu ion!" msgid "Download" msgstr "Elŝuti" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Malkunhavigi" + #: templates/index.php:105 msgid "Upload too large" msgstr "Elŝuto tro larĝa" diff --git a/l10n/eo/files_encryption.po b/l10n/eo/files_encryption.po index 77ddc820b5..1a1260fd41 100644 --- a/l10n/eo/files_encryption.po +++ b/l10n/eo/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: eo\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Ĉifrado" diff --git a/l10n/eo/lib.po b/l10n/eo/lib.po index 05fd08aa22..72ab91a9de 100644 --- a/l10n/eo/lib.po +++ b/l10n/eo/lib.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" @@ -18,47 +18,47 @@ msgstr "" "Language: eo\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Helpo" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Persona" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Agordo" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Uzantoj" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Aplikaĵoj" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Administranto" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIP-elŝuto estas malkapabligita." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Dosieroj devas elŝutiĝi unuope." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Reen al la dosieroj" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "La elektitaj dosieroj tro grandas por genero de ZIP-dosiero." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -86,6 +86,17 @@ msgstr "Teksto" msgid "Images" msgstr "Bildoj" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "sekundojn antaŭe" diff --git a/l10n/es/files.po b/l10n/es/files.po index 589961db7a..cbad49ad5c 100644 --- a/l10n/es/files.po +++ b/l10n/es/files.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" @@ -30,16 +30,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "No se puede mover %s - Ya existe un archivo con ese nombre" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "No se puede mover %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "No se puede renombrar el archivo" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -88,51 +88,52 @@ msgstr "Directorio invalido." msgid "Files" msgstr "Archivos" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Dejar de compartir" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "Eliminar permanentemente" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Eliminar" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Renombrar" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Pendiente" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} ya existe" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "reemplazar" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "sugerir nombre" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "cancelar" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "reemplazado {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "deshacer" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "reemplazado {new_name} con {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "Eliminar" @@ -172,64 +173,60 @@ msgstr "No ha sido posible subir tu archivo porque es un directorio o tiene 0 by msgid "Upload Error" msgstr "Error al subir el archivo" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "cerrrar" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Pendiente" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "subiendo 1 archivo" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "Subiendo {count} archivos" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Subida cancelada." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "La subida del archivo está en proceso. Salir de la página ahora cancelará la subida." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "La URL no puede estar vacía." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nombre de carpeta invalido. El uso de \"Shared\" esta reservado para Owncloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nombre" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Tamaño" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Modificado" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 carpeta" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} carpetas" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 archivo" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} archivos" @@ -286,8 +283,8 @@ msgid "From link" msgstr "Desde el enlace" #: templates/index.php:40 -msgid "Trash" -msgstr "Basura" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -301,6 +298,10 @@ msgstr "Aquí no hay nada. ¡Sube algo!" msgid "Download" msgstr "Descargar" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Dejar de compartir" + #: templates/index.php:105 msgid "Upload too large" msgstr "El archivo es demasiado grande" diff --git a/l10n/es/files_encryption.po b/l10n/es/files_encryption.po index b7d69adaf0..f4c68c14f4 100644 --- a/l10n/es/files_encryption.po +++ b/l10n/es/files_encryption.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-05 23:10+0000\n" -"Last-Translator: msvladimir \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,28 +21,6 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Por favor, cambie su cliente de ownCloud y cambie su clave de cifrado para completar la conversión." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "Cambiar a cifrado del lado del cliente" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Cambie la clave de cifrado para su contraseña de inicio de sesión" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Por favor revise su contraseña e intentelo de nuevo." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "No se pudo cambiar la contraseña de cifrado de archivos de su contraseña de inicio de sesión" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Cifrado" diff --git a/l10n/es/lib.po b/l10n/es/lib.po index 38c6ee2855..bbee949d21 100644 --- a/l10n/es/lib.po +++ b/l10n/es/lib.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-21 00:04+0100\n" -"PO-Revision-Date: 2013-01-20 02:14+0000\n" -"Last-Translator: Agustin Ferrario \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,47 +22,47 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Ayuda" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Personal" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Ajustes" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Usuarios" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Aplicaciones" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Administración" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "La descarga en ZIP está desactivada." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Los archivos deben ser descargados uno por uno." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Volver a Archivos" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Los archivos seleccionados son demasiado grandes para generar el archivo zip." -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "no pudo ser determinado" @@ -90,6 +90,17 @@ msgstr "Texto" msgid "Images" msgstr "Imágenes" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "hace segundos" diff --git a/l10n/es_AR/files.po b/l10n/es_AR/files.po index 45bc777add..74cb51e8c7 100644 --- a/l10n/es_AR/files.po +++ b/l10n/es_AR/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" @@ -23,16 +23,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "No se pudo mover %s - Un archivo con este nombre ya existe" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "No se pudo mover %s " #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "No fue posible cambiar el nombre al archivo" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -71,7 +71,7 @@ msgstr "Error al escribir en el disco" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "No hay suficiente capacidad de almacenamiento" #: ajax/upload.php:83 msgid "Invalid directory." @@ -81,51 +81,52 @@ msgstr "Directorio invalido." msgid "Files" msgstr "Archivos" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Dejar de compartir" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Borrar" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Cambiar nombre" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Pendiente" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} ya existe" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "reemplazar" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "sugerir nombre" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "cancelar" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "reemplazado {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "deshacer" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "reemplazado {new_name} con {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "Eliminar" @@ -165,64 +166,60 @@ msgstr "No fue posible subir el archivo porque es un directorio o porque su tama msgid "Upload Error" msgstr "Error al subir el archivo" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Cerrar" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Pendiente" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "Subiendo 1 archivo" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "Subiendo {count} archivos" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "La subida fue cancelada" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "La URL no puede estar vacía" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nombre de carpeta inválido. El uso de 'Shared' está reservado por ownCloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nombre" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Tamaño" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Modificado" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 directorio" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} directorios" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 archivo" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} archivos" @@ -279,8 +276,8 @@ msgid "From link" msgstr "Desde enlace" #: templates/index.php:40 -msgid "Trash" -msgstr "Papelera" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -294,6 +291,10 @@ msgstr "No hay nada. ¡Subí contenido!" msgid "Download" msgstr "Descargar" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Dejar de compartir" + #: templates/index.php:105 msgid "Upload too large" msgstr "El archivo es demasiado grande" diff --git a/l10n/es_AR/files_encryption.po b/l10n/es_AR/files_encryption.po index 0e80127a88..1afbf7e9f8 100644 --- a/l10n/es_AR/files_encryption.po +++ b/l10n/es_AR/files_encryption.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" @@ -19,28 +19,6 @@ msgstr "" "Language: es_AR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Por favor, cambiá uu cliente de ownCloud y cambiá tu clave de encriptado para completar la conversión." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "Cambiado a encriptación por parte del cliente" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Cambiá la clave de encriptado para tu contraseña de inicio de sesión" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Por favor, revisá tu contraseña e intentalo de nuevo." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "No se pudo cambiar la contraseña de encriptación de archivos de tu contraseña de inicio de sesión" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Encriptación" diff --git a/l10n/es_AR/lib.po b/l10n/es_AR/lib.po index 0b6fd72855..5dd15f23d7 100644 --- a/l10n/es_AR/lib.po +++ b/l10n/es_AR/lib.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-21 00:04+0100\n" -"PO-Revision-Date: 2013-01-20 03:00+0000\n" -"Last-Translator: Agustin Ferrario \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,47 +19,47 @@ msgstr "" "Language: es_AR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Ayuda" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Personal" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Ajustes" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Usuarios" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Aplicaciones" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Administración" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "La descarga en ZIP está desactivada." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Los archivos deben ser descargados de a uno." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Volver a archivos" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Los archivos seleccionados son demasiado grandes para generar el archivo zip." -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "no pudo ser determinado" @@ -87,6 +87,17 @@ msgstr "Texto" msgid "Images" msgstr "Imágenes" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "hace unos segundos" diff --git a/l10n/et_EE/files.po b/l10n/et_EE/files.po index c42827d819..3e795d756e 100644 --- a/l10n/et_EE/files.po +++ b/l10n/et_EE/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n" "MIME-Version: 1.0\n" @@ -80,51 +80,52 @@ msgstr "" msgid "Files" msgstr "Failid" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Lõpeta jagamine" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Kustuta" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "ümber" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Ootel" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} on juba olemas" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "asenda" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "soovita nime" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "loobu" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "asendatud nimega {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "tagasi" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "asendas nime {old_name} nimega {new_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -164,64 +165,60 @@ msgstr "Sinu faili üleslaadimine ebaõnnestus, kuna see on kaust või selle suu msgid "Upload Error" msgstr "Üleslaadimise viga" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Sulge" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Ootel" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 faili üleslaadimisel" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} faili üleslaadimist" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Üleslaadimine tühistati." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL ei saa olla tühi." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nimi" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Suurus" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Muudetud" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 kaust" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} kausta" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 fail" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} faili" @@ -278,7 +275,7 @@ msgid "From link" msgstr "Allikast" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -293,6 +290,10 @@ msgstr "Siin pole midagi. Lae midagi üles!" msgid "Download" msgstr "Lae alla" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Lõpeta jagamine" + #: templates/index.php:105 msgid "Upload too large" msgstr "Üleslaadimine on liiga suur" diff --git a/l10n/et_EE/files_encryption.po b/l10n/et_EE/files_encryption.po index c7abb91cb7..3f06b12afb 100644 --- a/l10n/et_EE/files_encryption.po +++ b/l10n/et_EE/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: et_EE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Krüpteerimine" diff --git a/l10n/et_EE/lib.po b/l10n/et_EE/lib.po index a137f08e4a..0a5e2f9590 100644 --- a/l10n/et_EE/lib.po +++ b/l10n/et_EE/lib.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n" "MIME-Version: 1.0\n" @@ -18,47 +18,47 @@ msgstr "" "Language: et_EE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Abiinfo" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Isiklik" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Seaded" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Kasutajad" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Rakendused" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Admin" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIP-ina allalaadimine on välja lülitatud." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Failid tuleb alla laadida ükshaaval." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Tagasi failide juurde" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Valitud failid on ZIP-faili loomiseks liiga suured." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -86,6 +86,17 @@ msgstr "Tekst" msgid "Images" msgstr "Pildid" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "sekundit tagasi" diff --git a/l10n/eu/files.po b/l10n/eu/files.po index e32bbe4ed2..c7a7fc3d32 100644 --- a/l10n/eu/files.po +++ b/l10n/eu/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" @@ -24,16 +24,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Ezin da %s mugitu - Izen hau duen fitxategia dagoeneko existitzen da" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Ezin dira fitxategiak mugitu %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Ezin izan da fitxategia berrizendatu" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -72,7 +72,7 @@ msgstr "Errore bat izan da diskoan idazterakoan" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Ez dago behar aina leku erabilgarri," #: ajax/upload.php:83 msgid "Invalid directory." @@ -82,51 +82,52 @@ msgstr "Baliogabeko karpeta." msgid "Files" msgstr "Fitxategiak" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Ez elkarbanatu" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Ezabatu" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Berrizendatu" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Zain" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} dagoeneko existitzen da" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "ordeztu" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "aholkatu izena" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "ezeztatu" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "ordezkatua {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "desegin" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr " {new_name}-k {old_name} ordezkatu du" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -166,64 +167,60 @@ msgstr "Ezin da zure fitxategia igo, karpeta bat da edo 0 byt ditu" msgid "Upload Error" msgstr "Igotzean errore bat suertatu da" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Itxi" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Zain" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "fitxategi 1 igotzen" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} fitxategi igotzen" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Igoera ezeztatuta" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URLa ezin da hutsik egon." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Baliogabeako karpeta izena. 'Shared' izena Owncloudek erreserbatzen du" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Izena" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Tamaina" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Aldatuta" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "karpeta bat" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} karpeta" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "fitxategi bat" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} fitxategi" @@ -280,7 +277,7 @@ msgid "From link" msgstr "Estekatik" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -295,6 +292,10 @@ msgstr "Ez dago ezer. Igo zerbait!" msgid "Download" msgstr "Deskargatu" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Ez elkarbanatu" + #: templates/index.php:105 msgid "Upload too large" msgstr "Igotakoa handiegia da" diff --git a/l10n/eu/files_encryption.po b/l10n/eu/files_encryption.po index 8f72a0453b..767e018b1f 100644 --- a/l10n/eu/files_encryption.po +++ b/l10n/eu/files_encryption.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" @@ -19,28 +19,6 @@ msgstr "" "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Mesedez egiaztatu zure pasahitza eta saia zaitez berriro:" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Enkriptazioa" diff --git a/l10n/eu/lib.po b/l10n/eu/lib.po index 9ba6d45bb6..45a8d4d0bc 100644 --- a/l10n/eu/lib.po +++ b/l10n/eu/lib.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-20 00:05+0100\n" -"PO-Revision-Date: 2013-01-19 00:06+0000\n" -"Last-Translator: asieriko \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,47 +19,47 @@ msgstr "" "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Laguntza" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Pertsonala" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Ezarpenak" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Erabiltzaileak" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Aplikazioak" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Admin" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIP deskarga ez dago gaituta." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Fitxategiak banan-banan deskargatu behar dira." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Itzuli fitxategietara" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Hautatuko fitxategiak oso handiak dira zip fitxategia sortzeko." -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "ezin izan da zehaztu" @@ -87,6 +87,17 @@ msgstr "Testua" msgid "Images" msgstr "Irudiak" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "orain dela segundu batzuk" diff --git a/l10n/fa/files.po b/l10n/fa/files.po index d18c250ecf..ace120766b 100644 --- a/l10n/fa/files.po +++ b/l10n/fa/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" @@ -24,16 +24,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "%s نمی تواند حرکت کند - در حال حاضر پرونده با این نام وجود دارد. " #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "%s نمی تواند حرکت کند " #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "قادر به تغییر نام پرونده نیست." #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -82,51 +82,52 @@ msgstr "فهرست راهنما نامعتبر می باشد." msgid "Files" msgstr "فایل ها" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "لغو اشتراک" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "پاک کردن" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "تغییرنام" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "در انتظار" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{نام _جدید} در حال حاضر وجود دارد." -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "جایگزین" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "پیشنهاد نام" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "لغو" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "{نام _جدید} جایگزین شد " -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "بازگشت" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "{نام_جدید} با { نام_قدیمی} جایگزین شد." -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -166,64 +167,60 @@ msgstr "ناتوان در بارگذاری یا فایل یک پوشه است ی msgid "Upload Error" msgstr "خطا در بار گذاری" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "بستن" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "در انتظار" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 پرونده آپلود شد." -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{ شمار } فایل های در حال آپلود" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "بار گذاری لغو شد" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "آپلودکردن پرونده در حال پیشرفت است. در صورت خروج از صفحه آپلود لغو میگردد. " -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL نمی تواند خالی باشد." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "نام پوشه نامعتبر است. استفاده از \" به اشتراک گذاشته شده \" متعلق به سایت Owncloud است." -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "نام" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "اندازه" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "تغییر یافته" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 پوشه" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{ شمار} پوشه ها" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 پرونده" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{ شمار } فایل ها" @@ -280,7 +277,7 @@ msgid "From link" msgstr "از پیوند" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -295,6 +292,10 @@ msgstr "اینجا هیچ چیز نیست." msgid "Download" msgstr "بارگیری" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "لغو اشتراک" + #: templates/index.php:105 msgid "Upload too large" msgstr "حجم بارگذاری بسیار زیاد است" diff --git a/l10n/fa/files_encryption.po b/l10n/fa/files_encryption.po index 586cebd200..ca4053cf7e 100644 --- a/l10n/fa/files_encryption.po +++ b/l10n/fa/files_encryption.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" @@ -20,28 +20,6 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "لطفا گذرواژه خود را بررسی کنید و دوباره امتحان کنید." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "رمزگذاری" diff --git a/l10n/fa/lib.po b/l10n/fa/lib.po index 4fb46ee344..e5a7af7752 100644 --- a/l10n/fa/lib.po +++ b/l10n/fa/lib.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-03 00:04+0100\n" -"PO-Revision-Date: 2013-02-02 14:01+0000\n" -"Last-Translator: Amir Reza Asadi \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,27 +19,27 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: app.php:312 +#: app.php:339 msgid "Help" msgstr "راه‌نما" -#: app.php:319 +#: app.php:346 msgid "Personal" msgstr "شخصی" -#: app.php:324 +#: app.php:351 msgid "Settings" msgstr "تنظیمات" -#: app.php:329 +#: app.php:356 msgid "Users" msgstr "کاربران" -#: app.php:336 +#: app.php:363 msgid "Apps" msgstr " برنامه ها" -#: app.php:338 +#: app.php:365 msgid "Admin" msgstr "مدیر" @@ -87,6 +87,17 @@ msgstr "متن" msgid "Images" msgstr "تصاویر" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "ثانیه‌ها پیش" diff --git a/l10n/fi_FI/files.po b/l10n/fi_FI/files.po index 57096ee234..6a00c9da8d 100644 --- a/l10n/fi_FI/files.po +++ b/l10n/fi_FI/files.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" @@ -25,16 +25,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Kohteen %s siirto ei onnistunut - Tiedosto samalla nimellä on jo olemassa" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Kohteen %s siirto ei onnistunut" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Tiedoston nimeäminen uudelleen ei onnistunut" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -73,7 +73,7 @@ msgstr "Levylle kirjoitus epäonnistui" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Tallennustilaa ei ole riittävästi käytettävissä" #: ajax/upload.php:83 msgid "Invalid directory." @@ -83,51 +83,52 @@ msgstr "Virheellinen kansio." msgid "Files" msgstr "Tiedostot" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Peru jakaminen" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Poista" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Nimeä uudelleen" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Odottaa" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} on jo olemassa" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "korvaa" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "ehdota nimeä" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "peru" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "kumoa" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "suorita poistotoiminto" @@ -167,64 +168,60 @@ msgstr "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä msgid "Upload Error" msgstr "Lähetysvirhe." -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Sulje" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Odottaa" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Lähetys peruttu." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "Verkko-osoite ei voi olla tyhjä" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nimi" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Koko" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Muutettu" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 kansio" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} kansiota" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 tiedosto" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} tiedostoa" @@ -281,8 +278,8 @@ msgid "From link" msgstr "Linkistä" #: templates/index.php:40 -msgid "Trash" -msgstr "Roskakori" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -296,6 +293,10 @@ msgstr "Täällä ei ole mitään. Lähetä tänne jotakin!" msgid "Download" msgstr "Lataa" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Peru jakaminen" + #: templates/index.php:105 msgid "Upload too large" msgstr "Lähetettävä tiedosto on liian suuri" diff --git a/l10n/fi_FI/files_encryption.po b/l10n/fi_FI/files_encryption.po index d8095a939b..00e3d63dbb 100644 --- a/l10n/fi_FI/files_encryption.po +++ b/l10n/fi_FI/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: fi_FI\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Tarkista salasanasi ja yritä uudelleen." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Salaus" diff --git a/l10n/fi_FI/lib.po b/l10n/fi_FI/lib.po index 7b90f23c2c..733af91389 100644 --- a/l10n/fi_FI/lib.po +++ b/l10n/fi_FI/lib.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-18 00:03+0100\n" -"PO-Revision-Date: 2013-01-17 08:40+0000\n" -"Last-Translator: Jiri Grönroos \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,47 +18,47 @@ msgstr "" "Language: fi_FI\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Ohje" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Henkilökohtainen" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Asetukset" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Käyttäjät" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Sovellukset" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Ylläpitäjä" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIP-lataus on poistettu käytöstä." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Tiedostot on ladattava yksittäin." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Takaisin tiedostoihin" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Valitut tiedostot ovat liian suurikokoisia mahtuakseen zip-tiedostoon." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "ei voitu määrittää" @@ -86,6 +86,17 @@ msgstr "Teksti" msgid "Images" msgstr "Kuvat" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "sekuntia sitten" diff --git a/l10n/fr/files.po b/l10n/fr/files.po index 0e732da55a..2ed2310480 100644 --- a/l10n/fr/files.po +++ b/l10n/fr/files.po @@ -21,8 +21,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" @@ -34,16 +34,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Impossible de déplacer %s - Un fichier possédant ce nom existe déjà" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Impossible de déplacer %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Impossible de renommer le fichier" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -82,7 +82,7 @@ msgstr "Erreur d'écriture sur le disque" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Plus assez d'espace de stockage disponible" #: ajax/upload.php:83 msgid "Invalid directory." @@ -92,51 +92,52 @@ msgstr "Dossier invalide." msgid "Files" msgstr "Fichiers" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Ne plus partager" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "Supprimer de façon définitive" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Supprimer" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Renommer" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "En cours" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} existe déjà" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "remplacer" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "Suggérer un nom" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "annuler" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "{new_name} a été remplacé" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "annuler" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "{new_name} a été remplacé par {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "effectuer l'opération de suppression" @@ -176,64 +177,60 @@ msgstr "Impossible de charger vos fichiers car il s'agit d'un dossier ou le fich msgid "Upload Error" msgstr "Erreur de chargement" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Fermer" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "En cours" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 fichier en cours de téléchargement" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} fichiers téléversés" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Chargement annulé." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "L'URL ne peut-être vide" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nom de dossier invalide. L'utilisation du mot 'Shared' est réservée à Owncloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nom" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Taille" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Modifié" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 dossier" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} dossiers" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 fichier" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} fichiers" @@ -290,8 +287,8 @@ msgid "From link" msgstr "Depuis le lien" #: templates/index.php:40 -msgid "Trash" -msgstr "Corbeille" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -305,6 +302,10 @@ msgstr "Il n'y a rien ici ! Envoyez donc quelque chose :)" msgid "Download" msgstr "Télécharger" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Ne plus partager" + #: templates/index.php:105 msgid "Upload too large" msgstr "Fichier trop volumineux" diff --git a/l10n/fr/files_encryption.po b/l10n/fr/files_encryption.po index ac5a41de00..7c41515ad8 100644 --- a/l10n/fr/files_encryption.po +++ b/l10n/fr/files_encryption.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 14:02+0000\n" -"Last-Translator: Romain DEP. \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" +"Last-Translator: I Robot \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,28 +18,6 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Veuillez vous connecter depuis votre client de synchronisation ownCloud et changer votre mot de passe de chiffrement pour finaliser la conversion." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "Mode de chiffrement changé en chiffrement côté client" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Convertir le mot de passe de chiffrement en mot de passe de connexion" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Veuillez vérifier vos mots de passe et réessayer." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Impossible de convertir votre mot de passe de chiffrement en mot de passe de connexion" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Chiffrement" diff --git a/l10n/fr/lib.po b/l10n/fr/lib.po index 0ae131d5c5..ab80f084df 100644 --- a/l10n/fr/lib.po +++ b/l10n/fr/lib.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-25 00:05+0100\n" -"PO-Revision-Date: 2013-01-24 01:17+0000\n" -"Last-Translator: Romain DEP. \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,47 +19,47 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Aide" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Personnel" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Paramètres" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Utilisateurs" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Applications" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Administration" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Téléchargement ZIP désactivé." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Les fichiers nécessitent d'être téléchargés un par un." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Retour aux Fichiers" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Les fichiers sélectionnés sont trop volumineux pour être compressés." -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "impossible à déterminer" @@ -87,6 +87,17 @@ msgstr "Texte" msgid "Images" msgstr "Images" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "à l'instant" diff --git a/l10n/gl/files.po b/l10n/gl/files.po index 928faa768b..4440639947 100644 --- a/l10n/gl/files.po +++ b/l10n/gl/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" @@ -22,16 +22,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Non se moveu %s - Xa existe un ficheiro con ese nome." #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Non se puido mover %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Non se pode renomear o ficheiro" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -80,51 +80,52 @@ msgstr "O directorio é incorrecto." msgid "Files" msgstr "Ficheiros" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Deixar de compartir" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Eliminar" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Mudar o nome" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Pendentes" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "xa existe un {new_name}" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "substituír" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "suxerir nome" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "cancelar" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "substituír {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "desfacer" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "substituír {new_name} polo {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -164,64 +165,60 @@ msgstr "Non se puido subir o ficheiro pois ou é un directorio ou ten 0 bytes" msgid "Upload Error" msgstr "Erro na subida" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Pechar" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Pendentes" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 ficheiro subíndose" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} ficheiros subíndose" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Subida cancelada." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "A subida do ficheiro está en curso. Saír agora da páxina cancelará a subida." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL non pode quedar baleiro." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nome de cartafol non válido. O uso de 'Shared' está reservado por Owncloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nome" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Tamaño" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Modificado" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 cartafol" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} cartafoles" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 ficheiro" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} ficheiros" @@ -278,7 +275,7 @@ msgid "From link" msgstr "Dende a ligazón" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -293,6 +290,10 @@ msgstr "Nada por aquí. Envía algo." msgid "Download" msgstr "Descargar" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Deixar de compartir" + #: templates/index.php:105 msgid "Upload too large" msgstr "Envío demasiado grande" diff --git a/l10n/gl/files_encryption.po b/l10n/gl/files_encryption.po index 2d7038a124..ae8181660a 100644 --- a/l10n/gl/files_encryption.po +++ b/l10n/gl/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Cifrado" diff --git a/l10n/gl/lib.po b/l10n/gl/lib.po index c6fc161311..dfe0a1f310 100644 --- a/l10n/gl/lib.po +++ b/l10n/gl/lib.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-23 00:05+0100\n" -"PO-Revision-Date: 2013-01-22 06:11+0000\n" -"Last-Translator: Xosé M. Lamas \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,47 +20,47 @@ msgstr "" "Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Axuda" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Persoal" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Configuracións" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Usuarios" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Aplicativos" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Administración" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "As descargas ZIP están desactivadas" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Os ficheiros necesitan seren descargados de un en un." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Volver aos ficheiros" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Os ficheiros seleccionados son demasiado grandes como para xerar un ficheiro zip." -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "non puido ser determinado" @@ -88,6 +88,17 @@ msgstr "Texto" msgid "Images" msgstr "Imaxes" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "hai segundos" diff --git a/l10n/he/files.po b/l10n/he/files.po index 97499d15ec..8a109378c4 100644 --- a/l10n/he/files.po +++ b/l10n/he/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n" "MIME-Version: 1.0\n" @@ -82,51 +82,52 @@ msgstr "" msgid "Files" msgstr "קבצים" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "הסר שיתוף" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "מחיקה" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "שינוי שם" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "ממתין" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} כבר קיים" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "החלפה" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "הצעת שם" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "ביטול" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "{new_name} הוחלף" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "ביטול" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "{new_name} הוחלף ב־{old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -166,64 +167,60 @@ msgstr "לא יכול להעלות את הקובץ מכיוון שזו תקיה msgid "Upload Error" msgstr "שגיאת העלאה" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "סגירה" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "ממתין" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "קובץ אחד נשלח" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} קבצים נשלחים" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "ההעלאה בוטלה." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "מתבצעת כעת העלאת קבצים. עזיבה של העמוד תבטל את ההעלאה." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "קישור אינו יכול להיות ריק." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "שם" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "גודל" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "זמן שינוי" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "תיקייה אחת" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} תיקיות" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "קובץ אחד" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} קבצים" @@ -280,7 +277,7 @@ msgid "From link" msgstr "מקישור" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -295,6 +292,10 @@ msgstr "אין כאן שום דבר. אולי ברצונך להעלות משהו msgid "Download" msgstr "הורדה" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "הסר שיתוף" + #: templates/index.php:105 msgid "Upload too large" msgstr "העלאה גדולה מידי" diff --git a/l10n/he/files_encryption.po b/l10n/he/files_encryption.po index 5347a271b6..2c26e96cd1 100644 --- a/l10n/he/files_encryption.po +++ b/l10n/he/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: he\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "הצפנה" diff --git a/l10n/he/lib.po b/l10n/he/lib.po index 8383f3ccc9..fbafbd81e4 100644 --- a/l10n/he/lib.po +++ b/l10n/he/lib.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n" "MIME-Version: 1.0\n" @@ -19,47 +19,47 @@ msgstr "" "Language: he\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "עזרה" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "אישי" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "הגדרות" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "משתמשים" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "יישומים" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "מנהל" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "הורדת ZIP כבויה" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "יש להוריד את הקבצים אחד אחרי השני." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "חזרה לקבצים" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "הקבצים הנבחרים גדולים מידי ליצירת קובץ zip." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -87,6 +87,17 @@ msgstr "טקסט" msgid "Images" msgstr "תמונות" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "שניות" diff --git a/l10n/hi/files.po b/l10n/hi/files.po index 1bffd04a96..fe4e56b565 100644 --- a/l10n/hi/files.po +++ b/l10n/hi/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n" "MIME-Version: 1.0\n" @@ -78,51 +78,52 @@ msgstr "" msgid "Files" msgstr "" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "replace" -msgstr "" - -#: js/filelist.js:208 -msgid "suggest name" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "cancel" -msgstr "" - -#: js/filelist.js:253 -msgid "replaced {new_name}" +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" msgstr "" #: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -162,64 +163,60 @@ msgstr "" msgid "Upload Error" msgstr "" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -276,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -291,6 +288,10 @@ msgstr "" msgid "Download" msgstr "" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "" + #: templates/index.php:105 msgid "Upload too large" msgstr "" diff --git a/l10n/hi/files_encryption.po b/l10n/hi/files_encryption.po index 82eea01a3f..94768da1fc 100644 --- a/l10n/hi/files_encryption.po +++ b/l10n/hi/files_encryption.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n" "MIME-Version: 1.0\n" @@ -17,28 +17,6 @@ msgstr "" "Language: hi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "" diff --git a/l10n/hi/lib.po b/l10n/hi/lib.po index 9cb9753235..beea383568 100644 --- a/l10n/hi/lib.po +++ b/l10n/hi/lib.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n" "MIME-Version: 1.0\n" @@ -17,47 +17,47 @@ msgstr "" "Language: hi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -85,6 +85,17 @@ msgstr "" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "" diff --git a/l10n/hr/files.po b/l10n/hr/files.po index 54726b3331..4e58c45f93 100644 --- a/l10n/hr/files.po +++ b/l10n/hr/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n" "MIME-Version: 1.0\n" @@ -81,51 +81,52 @@ msgstr "" msgid "Files" msgstr "Datoteke" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Prekini djeljenje" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Briši" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Promjeni ime" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "U tijeku" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "zamjeni" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "predloži ime" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "odustani" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "vrati" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -165,64 +166,60 @@ msgstr "Nemoguće poslati datoteku jer je prazna ili je direktorij" msgid "Upload Error" msgstr "Pogreška pri slanju" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Zatvori" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "U tijeku" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 datoteka se učitava" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Slanje poništeno." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Učitavanje datoteke. Napuštanjem stranice će prekinuti učitavanje." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Naziv" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Veličina" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Zadnja promjena" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -279,7 +276,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -294,6 +291,10 @@ msgstr "Nema ničega u ovoj mapi. Pošalji nešto!" msgid "Download" msgstr "Preuzmi" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Prekini djeljenje" + #: templates/index.php:105 msgid "Upload too large" msgstr "Prijenos je preobiman" diff --git a/l10n/hr/files_encryption.po b/l10n/hr/files_encryption.po index 9b86d0ed1f..434831e8ab 100644 --- a/l10n/hr/files_encryption.po +++ b/l10n/hr/files_encryption.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n" "MIME-Version: 1.0\n" @@ -17,28 +17,6 @@ msgstr "" "Language: hr\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "" diff --git a/l10n/hr/lib.po b/l10n/hr/lib.po index 28ed5873c3..9eedb4b680 100644 --- a/l10n/hr/lib.po +++ b/l10n/hr/lib.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n" "MIME-Version: 1.0\n" @@ -17,47 +17,47 @@ msgstr "" "Language: hr\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Pomoć" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Osobno" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Postavke" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Korisnici" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -85,6 +85,17 @@ msgstr "Tekst" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "sekundi prije" diff --git a/l10n/hu_HU/files.po b/l10n/hu_HU/files.po index 3b40ac770e..5a793b84bf 100644 --- a/l10n/hu_HU/files.po +++ b/l10n/hu_HU/files.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" @@ -27,16 +27,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "%s áthelyezése nem sikerült - már létezik másik fájl ezzel a névvel" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Nem sikerült %s áthelyezése" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Nem lehet átnevezni a fájlt" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -75,7 +75,7 @@ msgstr "Nem sikerült a lemezre történő írás" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Nincs elég szabad hely." #: ajax/upload.php:83 msgid "Invalid directory." @@ -85,51 +85,52 @@ msgstr "Érvénytelen mappa." msgid "Files" msgstr "Fájlok" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Megosztás visszavonása" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Törlés" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Átnevezés" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Folyamatban" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} már létezik" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "írjuk fölül" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "legyen más neve" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "mégse" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "a(z) {new_name} állományt kicseréltük" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "visszavonás" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "{new_name} fájlt kicseréltük ezzel: {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -169,64 +170,60 @@ msgstr "Nem tölthető fel, mert mappa volt, vagy 0 byte méretű" msgid "Upload Error" msgstr "Feltöltési hiba" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Bezárás" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Folyamatban" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 fájl töltődik föl" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} fájl töltődik föl" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "A feltöltést megszakítottuk." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "Az URL nem lehet semmi." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Érvénytelen mappanév. A név használata csak a Owncloud számára lehetséges." -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Név" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Méret" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Módosítva" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 mappa" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} mappa" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 fájl" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} fájl" @@ -283,7 +280,7 @@ msgid "From link" msgstr "Feltöltés linkről" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -298,6 +295,10 @@ msgstr "Itt nincs semmi. Töltsön fel valamit!" msgid "Download" msgstr "Letöltés" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Megosztás visszavonása" + #: templates/index.php:105 msgid "Upload too large" msgstr "A feltöltés túl nagy" diff --git a/l10n/hu_HU/files_encryption.po b/l10n/hu_HU/files_encryption.po index 0409118f14..3a5ec713fb 100644 --- a/l10n/hu_HU/files_encryption.po +++ b/l10n/hu_HU/files_encryption.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" @@ -20,28 +20,6 @@ msgstr "" "Language: hu_HU\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Kérjük, hogy váltson át az ownCloud kliensére, és változtassa meg a titkosítási jelszót az átalakítás befejezéséhez." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "átváltva a kliens oldalai titkosításra" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Titkosítási jelszó módosítása a bejelentkezési jelszóra" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Kérjük, ellenőrizze a jelszavait, és próbálja meg újra." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Nem módosíthatja a fájltitkosítási jelszavát a bejelentkezési jelszavára" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Titkosítás" diff --git a/l10n/hu_HU/lib.po b/l10n/hu_HU/lib.po index c3c29798b1..f32209e9a7 100644 --- a/l10n/hu_HU/lib.po +++ b/l10n/hu_HU/lib.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-26 00:09+0100\n" -"PO-Revision-Date: 2013-01-25 12:37+0000\n" -"Last-Translator: Laszlo Tornoci \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,47 +20,47 @@ msgstr "" "Language: hu_HU\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Súgó" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Személyes" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Beállítások" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Felhasználók" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Alkalmazások" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Admin" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "A ZIP-letöltés nincs engedélyezve." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "A fájlokat egyenként kell letölteni" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Vissza a Fájlokhoz" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "A kiválasztott fájlok túl nagyok a zip tömörítéshez." -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "nem határozható meg" @@ -88,6 +88,17 @@ msgstr "Szöveg" msgid "Images" msgstr "Képek" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "másodperce" diff --git a/l10n/ia/files.po b/l10n/ia/files.po index 1ef72be29b..bbc3d82ed7 100644 --- a/l10n/ia/files.po +++ b/l10n/ia/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n" "MIME-Version: 1.0\n" @@ -80,51 +80,52 @@ msgstr "" msgid "Files" msgstr "Files" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Deler" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "replace" -msgstr "" - -#: js/filelist.js:208 -msgid "suggest name" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "cancel" -msgstr "" - -#: js/filelist.js:253 -msgid "replaced {new_name}" +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" msgstr "" #: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -164,64 +165,60 @@ msgstr "" msgid "Upload Error" msgstr "" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Clauder" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nomine" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Dimension" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Modificate" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -278,7 +275,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -293,6 +290,10 @@ msgstr "Nihil hic. Incarga alcun cosa!" msgid "Download" msgstr "Discargar" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "" + #: templates/index.php:105 msgid "Upload too large" msgstr "Incargamento troppo longe" diff --git a/l10n/ia/files_encryption.po b/l10n/ia/files_encryption.po index e9ea289fb9..11e4cc8eb8 100644 --- a/l10n/ia/files_encryption.po +++ b/l10n/ia/files_encryption.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n" "MIME-Version: 1.0\n" @@ -17,28 +17,6 @@ msgstr "" "Language: ia\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "" diff --git a/l10n/ia/lib.po b/l10n/ia/lib.po index 2e63828482..f1ac2e492b 100644 --- a/l10n/ia/lib.po +++ b/l10n/ia/lib.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n" "MIME-Version: 1.0\n" @@ -17,47 +17,47 @@ msgstr "" "Language: ia\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Adjuta" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Personal" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Configurationes" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Usatores" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -85,6 +85,17 @@ msgstr "Texto" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "" diff --git a/l10n/id/files.po b/l10n/id/files.po index c3b51b237d..e8dd16f5fa 100644 --- a/l10n/id/files.po +++ b/l10n/id/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" @@ -81,51 +81,52 @@ msgstr "" msgid "Files" msgstr "Berkas" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "batalkan berbagi" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Hapus" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Menunggu" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "mengganti" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "batalkan" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "batal dikerjakan" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -165,64 +166,60 @@ msgstr "Gagal mengunggah berkas anda karena berupa direktori atau mempunyai ukur msgid "Upload Error" msgstr "Terjadi Galat Pengunggahan" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "tutup" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Menunggu" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Pengunggahan dibatalkan." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "tautan tidak boleh kosong" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nama" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Ukuran" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Dimodifikasi" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -279,7 +276,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -294,6 +291,10 @@ msgstr "Tidak ada apa-apa di sini. Unggah sesuatu!" msgid "Download" msgstr "Unduh" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "batalkan berbagi" + #: templates/index.php:105 msgid "Upload too large" msgstr "Unggahan terlalu besar" diff --git a/l10n/id/files_encryption.po b/l10n/id/files_encryption.po index 88fc1f30a5..28191e4f23 100644 --- a/l10n/id/files_encryption.po +++ b/l10n/id/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "enkripsi" diff --git a/l10n/id/lib.po b/l10n/id/lib.po index 013ed9d846..020143c5a5 100644 --- a/l10n/id/lib.po +++ b/l10n/id/lib.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" @@ -19,47 +19,47 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "bantu" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "perseorangan" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "pengaturan" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "pengguna" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "aplikasi" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "admin" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "download ZIP sedang dimatikan" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "file harus di unduh satu persatu" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "kembali ke daftar file" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "file yang dipilih terlalu besar untuk membuat file zip" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -87,6 +87,17 @@ msgstr "teks" msgid "Images" msgstr "Gambar" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "beberapa detik yang lalu" diff --git a/l10n/is/files.po b/l10n/is/files.po index a1ea0e3040..c4b5238a06 100644 --- a/l10n/is/files.po +++ b/l10n/is/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n" "MIME-Version: 1.0\n" @@ -21,16 +21,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Gat ekki fært %s - Skrá með þessu nafni er þegar til" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Gat ekki fært %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Gat ekki endurskýrt skrá" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -79,51 +79,52 @@ msgstr "Ógild mappa." msgid "Files" msgstr "Skrár" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Hætta deilingu" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Eyða" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Endurskýra" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Bíður" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} er þegar til" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "yfirskrifa" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "stinga upp á nafni" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "hætta við" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "endurskýrði {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "afturkalla" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "yfirskrifaði {new_name} með {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -163,64 +164,60 @@ msgstr "Innsending á skrá mistókst, hugsanlega sendir þú möppu eða skrái msgid "Upload Error" msgstr "Villa við innsendingu" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Loka" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Bíður" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 skrá innsend" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} skrár innsendar" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Hætt við innsendingu." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "Vefslóð má ekki vera tóm." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Óleyfilegt nafn á möppu. Nafnið 'Shared' er frátekið fyrir Owncloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nafn" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Stærð" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Breytt" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 mappa" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} möppur" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 skrá" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} skrár" @@ -277,7 +274,7 @@ msgid "From link" msgstr "Af tengli" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -292,6 +289,10 @@ msgstr "Ekkert hér. Settu eitthvað inn!" msgid "Download" msgstr "Niðurhal" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Hætta deilingu" + #: templates/index.php:105 msgid "Upload too large" msgstr "Innsend skrá er of stór" diff --git a/l10n/is/files_encryption.po b/l10n/is/files_encryption.po index 4d128e6b4f..63f151c73c 100644 --- a/l10n/is/files_encryption.po +++ b/l10n/is/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: is\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Dulkóðun" diff --git a/l10n/is/lib.po b/l10n/is/lib.po index e6b54f855f..2b6b678986 100644 --- a/l10n/is/lib.po +++ b/l10n/is/lib.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n" "MIME-Version: 1.0\n" @@ -18,47 +18,47 @@ msgstr "" "Language: is\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Hjálp" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Um mig" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Stillingar" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Notendur" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Forrit" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Stjórnun" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Slökkt á ZIP niðurhali." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Skrárnar verður að sækja eina og eina" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Aftur í skrár" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Valdar skrár eru of stórar til að búa til ZIP skrá." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -86,6 +86,17 @@ msgstr "Texti" msgid "Images" msgstr "Myndir" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "sek." diff --git a/l10n/it/core.po b/l10n/it/core.po index 9d72b5b8d2..bca11b8fb8 100644 --- a/l10n/it/core.po +++ b/l10n/it/core.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 00:44+0000\n" +"Last-Translator: Vincenzo Reale \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -162,59 +162,59 @@ msgstr "Novembre" msgid "December" msgstr "Dicembre" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "Impostazioni" -#: js/js.js:764 +#: js/js.js:766 msgid "seconds ago" msgstr "secondi fa" -#: js/js.js:765 +#: js/js.js:767 msgid "1 minute ago" msgstr "Un minuto fa" -#: js/js.js:766 +#: js/js.js:768 msgid "{minutes} minutes ago" msgstr "{minutes} minuti fa" -#: js/js.js:767 +#: js/js.js:769 msgid "1 hour ago" msgstr "1 ora fa" -#: js/js.js:768 +#: js/js.js:770 msgid "{hours} hours ago" msgstr "{hours} ore fa" -#: js/js.js:769 +#: js/js.js:771 msgid "today" msgstr "oggi" -#: js/js.js:770 +#: js/js.js:772 msgid "yesterday" msgstr "ieri" -#: js/js.js:771 +#: js/js.js:773 msgid "{days} days ago" msgstr "{days} giorni fa" -#: js/js.js:772 +#: js/js.js:774 msgid "last month" msgstr "mese scorso" -#: js/js.js:773 +#: js/js.js:775 msgid "{months} months ago" msgstr "{months} mesi fa" -#: js/js.js:774 +#: js/js.js:776 msgid "months ago" msgstr "mesi fa" -#: js/js.js:775 +#: js/js.js:777 msgid "last year" msgstr "anno scorso" -#: js/js.js:776 +#: js/js.js:778 msgid "years ago" msgstr "anni fa" @@ -244,8 +244,8 @@ msgid "The object type is not specified." msgstr "Il tipo di oggetto non è specificato." #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "Errore" @@ -265,7 +265,7 @@ msgstr "Condividi" msgid "Shared" msgstr "Condivisi" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "Errore durante la condivisione" @@ -361,23 +361,23 @@ msgstr "eliminare" msgid "share" msgstr "condividere" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "Protetta da password" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "Errore durante la rimozione della data di scadenza" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "Errore durante l'impostazione della data di scadenza" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "Invio in corso..." -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "Messaggio inviato" @@ -493,14 +493,14 @@ msgstr "Senza un generatore di numeri casuali sicuro, un malintenzionato potrebb msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "La cartella dei dati e i file sono probabilmente accessibili da Internet poiché il file .htaccess non funziona." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Per informazioni su come configurare correttamente il server, vedi la documentazione." #: templates/installation.php:36 msgid "Create an admin account" diff --git a/l10n/it/files.po b/l10n/it/files.po index fae888f326..bcd2745015 100644 --- a/l10n/it/files.po +++ b/l10n/it/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" @@ -24,16 +24,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Impossibile spostare %s - un file con questo nome esiste già" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Impossibile spostare %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Impossibile rinominare il file" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -72,7 +72,7 @@ msgstr "Scrittura su disco non riuscita" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Spazio di archiviazione insufficiente" #: ajax/upload.php:83 msgid "Invalid directory." @@ -82,51 +82,52 @@ msgstr "Cartella non valida." msgid "Files" msgstr "File" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Rimuovi condivisione" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "Elimina definitivamente" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Elimina" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Rinomina" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "In corso" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} esiste già" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "sostituisci" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "suggerisci nome" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "annulla" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "sostituito {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "annulla" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "sostituito {new_name} con {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "esegui l'operazione di eliminazione" @@ -166,64 +167,60 @@ msgstr "Impossibile inviare il file poiché è una cartella o ha dimensione 0 by msgid "Upload Error" msgstr "Errore di invio" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Chiudi" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "In corso" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 file in fase di caricamento" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} file in fase di caricamentoe" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Invio annullato" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "L'URL non può essere vuoto." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nome della cartella non valido. L'uso di 'Shared' è riservato da ownCloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nome" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Dimensione" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Modificato" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 cartella" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} cartelle" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 file" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} file" @@ -280,8 +277,8 @@ msgid "From link" msgstr "Da collegamento" #: templates/index.php:40 -msgid "Trash" -msgstr "Cestino" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -295,6 +292,10 @@ msgstr "Non c'è niente qui. Carica qualcosa!" msgid "Download" msgstr "Scarica" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Rimuovi condivisione" + #: templates/index.php:105 msgid "Upload too large" msgstr "Il file caricato è troppo grande" diff --git a/l10n/it/files_encryption.po b/l10n/it/files_encryption.po index 843b2a267d..e94b789221 100644 --- a/l10n/it/files_encryption.po +++ b/l10n/it/files_encryption.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-05 23:20+0000\n" -"Last-Translator: Vincenzo Reale \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,28 +18,6 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Passa al tuo client ownCloud e cambia la password di cifratura per completare la conversione." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "passato alla cifratura lato client" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Converti la password di cifratura nella password di accesso" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Controlla la password e prova ancora." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Impossibile convertire la password di cifratura nella password di accesso" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Cifratura" diff --git a/l10n/it/lib.po b/l10n/it/lib.po index e162e94ad3..5e8f171bac 100644 --- a/l10n/it/lib.po +++ b/l10n/it/lib.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-18 00:03+0100\n" -"PO-Revision-Date: 2013-01-17 06:44+0000\n" -"Last-Translator: Vincenzo Reale \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,47 +18,47 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Aiuto" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Personale" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Impostazioni" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Utenti" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Applicazioni" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Admin" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Lo scaricamento in formato ZIP è stato disabilitato." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "I file devono essere scaricati uno alla volta." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Torna ai file" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "I file selezionati sono troppo grandi per generare un file zip." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "non può essere determinato" @@ -86,6 +86,17 @@ msgstr "Testo" msgid "Images" msgstr "Immagini" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "secondi fa" diff --git a/l10n/ja_JP/files.po b/l10n/ja_JP/files.po index 52a59def6d..ff098adc1b 100644 --- a/l10n/ja_JP/files.po +++ b/l10n/ja_JP/files.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" @@ -25,16 +25,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "%s を移動できませんでした ― この名前のファイルはすでに存在します" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "%s を移動できませんでした" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "ファイル名の変更ができません" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -73,7 +73,7 @@ msgstr "ディスクへの書き込みに失敗しました" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "ストレージに十分な空き容量がありません" #: ajax/upload.php:83 msgid "Invalid directory." @@ -83,51 +83,52 @@ msgstr "無効なディレクトリです。" msgid "Files" msgstr "ファイル" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "共有しない" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "完全に削除する" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "削除" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "名前の変更" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "保留" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} はすでに存在しています" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "置き換え" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "推奨名称" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "キャンセル" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "{new_name} を置換" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "元に戻す" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "{old_name} を {new_name} に置換" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "削除を実行" @@ -167,64 +168,60 @@ msgstr "ディレクトリもしくは0バイトのファイルはアップロ msgid "Upload Error" msgstr "アップロードエラー" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "閉じる" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "保留" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "ファイルを1つアップロード中" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} ファイルをアップロード中" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "アップロードはキャンセルされました。" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URLは空にできません。" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "無効なフォルダ名です。'Shared' の利用は ownCloud が予約済みです。" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "名前" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "サイズ" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "更新日時" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 フォルダ" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} フォルダ" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 ファイル" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} ファイル" @@ -281,8 +278,8 @@ msgid "From link" msgstr "リンク" #: templates/index.php:40 -msgid "Trash" -msgstr "ゴミ箱" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -296,6 +293,10 @@ msgstr "ここには何もありません。何かアップロードしてくだ msgid "Download" msgstr "ダウンロード" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "共有しない" + #: templates/index.php:105 msgid "Upload too large" msgstr "ファイルサイズが大きすぎます" diff --git a/l10n/ja_JP/files_encryption.po b/l10n/ja_JP/files_encryption.po index 1f13d0117c..6d5a563dfe 100644 --- a/l10n/ja_JP/files_encryption.po +++ b/l10n/ja_JP/files_encryption.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:09+0100\n" -"PO-Revision-Date: 2013-02-07 02:20+0000\n" -"Last-Translator: Daisuke Deguchi \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,28 +19,6 @@ msgstr "" "Language: ja_JP\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "変換を完了するために、ownCloud クライアントに切り替えて、暗号化パスワードを変更してください。" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "クライアントサイドの暗号化に切り替えました" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "暗号化パスワードをログインパスワードに変更" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "パスワードを確認してもう一度行なってください。" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "ファイル暗号化パスワードをログインパスワードに変更できませんでした。" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "暗号化" diff --git a/l10n/ja_JP/lib.po b/l10n/ja_JP/lib.po index 8dca495799..1cdf2d62ae 100644 --- a/l10n/ja_JP/lib.po +++ b/l10n/ja_JP/lib.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-19 00:04+0100\n" -"PO-Revision-Date: 2013-01-18 08:12+0000\n" -"Last-Translator: Daisuke Deguchi \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,47 +19,47 @@ msgstr "" "Language: ja_JP\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "ヘルプ" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "個人設定" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "設定" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "ユーザ" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "アプリ" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "管理者" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIPダウンロードは無効です。" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "ファイルは1つずつダウンロードする必要があります。" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "ファイルに戻る" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "選択したファイルはZIPファイルの生成には大きすぎます。" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "測定できませんでした" @@ -87,6 +87,17 @@ msgstr "TTY TDD" msgid "Images" msgstr "画像" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "秒前" diff --git a/l10n/ka_GE/files.po b/l10n/ka_GE/files.po index 640d3d1fab..c9b22c6c9c 100644 --- a/l10n/ka_GE/files.po +++ b/l10n/ka_GE/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n" "MIME-Version: 1.0\n" @@ -79,51 +79,52 @@ msgstr "" msgid "Files" msgstr "ფაილები" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "გაზიარების მოხსნა" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "წაშლა" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "გადარქმევა" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "მოცდის რეჟიმში" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} უკვე არსებობს" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "შეცვლა" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "სახელის შემოთავაზება" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "უარყოფა" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "{new_name} შეცვლილია" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "დაბრუნება" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "{new_name} შეცვლილია {old_name}–ით" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -163,64 +164,60 @@ msgstr "თქვენი ფაილის ატვირთვა ვერ msgid "Upload Error" msgstr "შეცდომა ატვირთვისას" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "დახურვა" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "მოცდის რეჟიმში" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 ფაილის ატვირთვა" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} ფაილი იტვირთება" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "ატვირთვა შეჩერებულ იქნა." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "სახელი" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "ზომა" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "შეცვლილია" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 საქაღალდე" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} საქაღალდე" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 ფაილი" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} ფაილი" @@ -277,7 +274,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -292,6 +289,10 @@ msgstr "აქ არაფერი არ არის. ატვირთე msgid "Download" msgstr "ჩამოტვირთვა" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "გაზიარების მოხსნა" + #: templates/index.php:105 msgid "Upload too large" msgstr "ასატვირთი ფაილი ძალიან დიდია" diff --git a/l10n/ka_GE/files_encryption.po b/l10n/ka_GE/files_encryption.po index 3bdaa16e10..81a4932c14 100644 --- a/l10n/ka_GE/files_encryption.po +++ b/l10n/ka_GE/files_encryption.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n" "MIME-Version: 1.0\n" @@ -17,28 +17,6 @@ msgstr "" "Language: ka_GE\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "" diff --git a/l10n/ka_GE/lib.po b/l10n/ka_GE/lib.po index f43fa26c13..333713fd7a 100644 --- a/l10n/ka_GE/lib.po +++ b/l10n/ka_GE/lib.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n" "MIME-Version: 1.0\n" @@ -18,47 +18,47 @@ msgstr "" "Language: ka_GE\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "დახმარება" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "პირადი" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "პარამეტრები" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "მომხმარებელი" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "აპლიკაციები" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "ადმინისტრატორი" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -86,6 +86,17 @@ msgstr "ტექსტი" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "წამის წინ" diff --git a/l10n/ko/files.po b/l10n/ko/files.po index 3b842ed252..4fc91abaee 100644 --- a/l10n/ko/files.po +++ b/l10n/ko/files.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n" "MIME-Version: 1.0\n" @@ -26,16 +26,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "%s 항목을 이동시키지 못하였음 - 파일 이름이 이미 존재함" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "%s 항목을 이딩시키지 못하였음" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "파일 이름바꾸기 할 수 없음" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -84,51 +84,52 @@ msgstr "올바르지 않은 디렉터리입니다." msgid "Files" msgstr "파일" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "공유 해제" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "삭제" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "이름 바꾸기" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "보류 중" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name}이(가) 이미 존재함" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "바꾸기" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "이름 제안" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "취소" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "{new_name}을(를) 대체함" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "실행 취소" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "{old_name}이(가) {new_name}(으)로 대체됨" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -168,64 +169,60 @@ msgstr "이 파일은 디렉터리이거나 비어 있기 때문에 업로드할 msgid "Upload Error" msgstr "업로드 오류" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "닫기" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "보류 중" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "파일 1개 업로드 중" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "파일 {count}개 업로드 중" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "업로드가 취소되었습니다." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL을 입력해야 합니다." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "폴더 이름이 유효하지 않습니다. " -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "이름" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "크기" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "수정됨" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "폴더 1개" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "폴더 {count}개" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "파일 1개" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "파일 {count}개" @@ -282,7 +279,7 @@ msgid "From link" msgstr "링크에서" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -297,6 +294,10 @@ msgstr "내용이 없습니다. 업로드할 수 있습니다!" msgid "Download" msgstr "다운로드" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "공유 해제" + #: templates/index.php:105 msgid "Upload too large" msgstr "업로드 용량 초과" diff --git a/l10n/ko/files_encryption.po b/l10n/ko/files_encryption.po index 22d55b9697..79f1c6ae60 100644 --- a/l10n/ko/files_encryption.po +++ b/l10n/ko/files_encryption.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n" "MIME-Version: 1.0\n" @@ -19,28 +19,6 @@ msgstr "" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "ownCloud로 전환한 다음 암호화에 사용할 암호를 변경하면 변환이 완료됩니다." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "클라이언트 암호화로 변경됨" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "암호화 암호를 로그인 암호로 변경" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "암호를 확인한 다음 다시 시도하십시오." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "암호화 암호를 로그인 암호로 변경할 수 없습니다" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "암호화" diff --git a/l10n/ko/lib.po b/l10n/ko/lib.po index ffbaa11a4e..2a2fefa135 100644 --- a/l10n/ko/lib.po +++ b/l10n/ko/lib.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-31 17:02+0100\n" -"PO-Revision-Date: 2013-01-31 08:10+0000\n" -"Last-Translator: Shinjo Park \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,27 +20,27 @@ msgstr "" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "도움말" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "개인" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "설정" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "사용자" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "앱" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "관리자" @@ -88,6 +88,17 @@ msgstr "텍스트" msgid "Images" msgstr "그림" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "초 전" diff --git a/l10n/ku_IQ/files.po b/l10n/ku_IQ/files.po index a94f463696..e22bec404b 100644 --- a/l10n/ku_IQ/files.po +++ b/l10n/ku_IQ/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n" "MIME-Version: 1.0\n" @@ -78,51 +78,52 @@ msgstr "" msgid "Files" msgstr "" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "replace" -msgstr "" - -#: js/filelist.js:208 -msgid "suggest name" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "cancel" -msgstr "" - -#: js/filelist.js:253 -msgid "replaced {new_name}" +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" msgstr "" #: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -162,64 +163,60 @@ msgstr "" msgid "Upload Error" msgstr "" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "داخستن" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "ناونیشانی به‌سته‌ر نابێت به‌تاڵ بێت." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "ناو" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -276,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -291,6 +288,10 @@ msgstr "" msgid "Download" msgstr "داگرتن" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "" + #: templates/index.php:105 msgid "Upload too large" msgstr "" diff --git a/l10n/ku_IQ/files_encryption.po b/l10n/ku_IQ/files_encryption.po index db1496b70d..25da3eec3a 100644 --- a/l10n/ku_IQ/files_encryption.po +++ b/l10n/ku_IQ/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: ku_IQ\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "نهێنیکردن" diff --git a/l10n/ku_IQ/lib.po b/l10n/ku_IQ/lib.po index 64ee0185d3..1c1edaba17 100644 --- a/l10n/ku_IQ/lib.po +++ b/l10n/ku_IQ/lib.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n" "MIME-Version: 1.0\n" @@ -17,47 +17,47 @@ msgstr "" "Language: ku_IQ\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "یارمەتی" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "ده‌ستكاری" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "به‌كارهێنه‌ر" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -85,6 +85,17 @@ msgstr "" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "" diff --git a/l10n/lb/files.po b/l10n/lb/files.po index fd8f5e4c98..fbd5a7b1bc 100644 --- a/l10n/lb/files.po +++ b/l10n/lb/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n" "MIME-Version: 1.0\n" @@ -79,51 +79,52 @@ msgstr "" msgid "Files" msgstr "Dateien" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Net méi deelen" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Läschen" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "replace" -msgstr "ersetzen" - -#: js/filelist.js:208 -msgid "suggest name" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "cancel" -msgstr "ofbriechen" - -#: js/filelist.js:253 -msgid "replaced {new_name}" +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" msgstr "" #: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "ersetzen" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "ofbriechen" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "réckgängeg man" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -163,64 +164,60 @@ msgstr "Kann deng Datei net eroplueden well et en Dossier ass oder 0 byte grouss msgid "Upload Error" msgstr "Fehler beim eroplueden" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Zoumaachen" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Upload ofgebrach." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Numm" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Gréisst" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Geännert" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -277,7 +274,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -292,6 +289,10 @@ msgstr "Hei ass näischt. Lued eppes rop!" msgid "Download" msgstr "Eroflueden" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Net méi deelen" + #: templates/index.php:105 msgid "Upload too large" msgstr "Upload ze grouss" diff --git a/l10n/lb/files_encryption.po b/l10n/lb/files_encryption.po index c8fc462a15..6705693de9 100644 --- a/l10n/lb/files_encryption.po +++ b/l10n/lb/files_encryption.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n" "MIME-Version: 1.0\n" @@ -17,28 +17,6 @@ msgstr "" "Language: lb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "" diff --git a/l10n/lb/lib.po b/l10n/lb/lib.po index b7995af644..ae807f5d53 100644 --- a/l10n/lb/lib.po +++ b/l10n/lb/lib.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 13:36+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n" "MIME-Version: 1.0\n" @@ -17,47 +17,47 @@ msgstr "" "Language: lb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Hëllef" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Perséinlech" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Astellungen" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "" -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -85,6 +85,17 @@ msgstr "SMS" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "" diff --git a/l10n/lt_LT/files.po b/l10n/lt_LT/files.po index 33d7eb0d16..966c0c8a34 100644 --- a/l10n/lt_LT/files.po +++ b/l10n/lt_LT/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n" "MIME-Version: 1.0\n" @@ -81,51 +81,52 @@ msgstr "" msgid "Files" msgstr "Failai" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Nebesidalinti" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Ištrinti" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Pervadinti" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Laukiantis" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} jau egzistuoja" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "pakeisti" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "pasiūlyti pavadinimą" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "atšaukti" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "pakeiskite {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "anuliuoti" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "pakeiskite {new_name} į {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -165,64 +166,60 @@ msgstr "Neįmanoma įkelti failo - jo dydis gali būti 0 bitų arba tai kataloga msgid "Upload Error" msgstr "Įkėlimo klaida" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Užverti" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Laukiantis" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "įkeliamas 1 failas" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} įkeliami failai" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Įkėlimas atšauktas." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Pavadinimas" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Dydis" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Pakeista" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 aplankalas" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} aplankalai" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 failas" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} failai" @@ -279,7 +276,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -294,6 +291,10 @@ msgstr "Čia tuščia. Įkelkite ką nors!" msgid "Download" msgstr "Atsisiųsti" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Nebesidalinti" + #: templates/index.php:105 msgid "Upload too large" msgstr "Įkėlimui failas per didelis" diff --git a/l10n/lt_LT/files_encryption.po b/l10n/lt_LT/files_encryption.po index 6e52ef83bb..2e398b6292 100644 --- a/l10n/lt_LT/files_encryption.po +++ b/l10n/lt_LT/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: lt_LT\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Šifravimas" diff --git a/l10n/lt_LT/lib.po b/l10n/lt_LT/lib.po index 1f676fdd4e..8cc55d0a7e 100644 --- a/l10n/lt_LT/lib.po +++ b/l10n/lt_LT/lib.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n" "MIME-Version: 1.0\n" @@ -19,47 +19,47 @@ msgstr "" "Language: lt_LT\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Pagalba" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Asmeniniai" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Nustatymai" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Vartotojai" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Programos" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Administravimas" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIP atsisiuntimo galimybė yra išjungta." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Failai turi būti parsiunčiami vienas po kito." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Atgal į Failus" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Pasirinkti failai per dideli archyvavimui į ZIP." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -87,6 +87,17 @@ msgstr "Žinučių" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "prieš kelias sekundes" diff --git a/l10n/lv/files.po b/l10n/lv/files.po index 803cbc1725..5d8e608d16 100644 --- a/l10n/lv/files.po +++ b/l10n/lv/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" @@ -81,51 +81,52 @@ msgstr "Nederīga direktorija." msgid "Files" msgstr "Datnes" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Pārtraukt dalīšanos" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "Dzēst pavisam" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Dzēst" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Pārsaukt" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Gaida savu kārtu" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} jau eksistē" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "aizvietot" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "ieteiktais nosaukums" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "atcelt" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "aizvietots {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "atsaukt" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "aizvietoja {new_name} ar {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "veikt dzēšanas darbību" @@ -165,64 +166,60 @@ msgstr "Nevar augšupielādēt jūsu datni, jo tā ir direktorija vai arī tās msgid "Upload Error" msgstr "Kļūda augšupielādējot" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Aizvērt" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Gaida savu kārtu" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "Augšupielādē 1 datni" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "augšupielādē {count} datnes" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Augšupielāde ir atcelta." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL nevar būt tukšs." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nederīgs mapes nosaukums. “Koplietots” izmantojums ir rezervēts ownCloud servisam." -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nosaukums" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Izmērs" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Mainīts" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 mape" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} mapes" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 datne" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} datnes" @@ -279,8 +276,8 @@ msgid "From link" msgstr "No saites" #: templates/index.php:40 -msgid "Trash" -msgstr "Miskaste" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -294,6 +291,10 @@ msgstr "Te vēl nekas nav. Rīkojies, sāc augšupielādēt!" msgid "Download" msgstr "Lejupielādēt" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Pārtraukt dalīšanos" + #: templates/index.php:105 msgid "Upload too large" msgstr "Datne ir par lielu, lai to augšupielādētu" diff --git a/l10n/lv/files_encryption.po b/l10n/lv/files_encryption.po index c5f33459a2..845062cf87 100644 --- a/l10n/lv/files_encryption.po +++ b/l10n/lv/files_encryption.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 20:40+0000\n" -"Last-Translator: Rūdolfs Mazurs \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,28 +18,6 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Lūdzu, pārslēdzieties uz savu ownCloud klientu un maniet savu šifrēšanas paroli, lai pabeigtu pārveidošanu." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "Pārslēdzās uz klienta puses šifrēšanu" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Mainīt šifrēšanas paroli uz ierakstīšanās paroli" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Lūdzu, pārbaudiet savas paroles un mēģiniet vēlreiz." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Nevarēja mainīt datņu šifrēšanas paroli uz ierakstīšanās paroli" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Šifrēšana" diff --git a/l10n/lv/lib.po b/l10n/lv/lib.po index 3dd07bcc2b..fe42b134fa 100644 --- a/l10n/lv/lib.po +++ b/l10n/lv/lib.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 21:40+0000\n" -"Last-Translator: Rūdolfs Mazurs \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,27 +18,27 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: app.php:313 +#: app.php:339 msgid "Help" msgstr "Palīdzība" -#: app.php:320 +#: app.php:346 msgid "Personal" msgstr "Personīgi" -#: app.php:325 +#: app.php:351 msgid "Settings" msgstr "Iestatījumi" -#: app.php:330 +#: app.php:356 msgid "Users" msgstr "Lietotāji" -#: app.php:337 +#: app.php:363 msgid "Apps" msgstr "Lietotnes" -#: app.php:339 +#: app.php:365 msgid "Admin" msgstr "Administratori" @@ -86,6 +86,17 @@ msgstr "Teksts" msgid "Images" msgstr "Attēli" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "sekundes atpakaļ" diff --git a/l10n/mk/files.po b/l10n/mk/files.po index 67955f49c6..1d5a2ed386 100644 --- a/l10n/mk/files.po +++ b/l10n/mk/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n" "MIME-Version: 1.0\n" @@ -81,51 +81,52 @@ msgstr "" msgid "Files" msgstr "Датотеки" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Не споделувај" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Избриши" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Преименувај" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Чека" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} веќе постои" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "замени" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "предложи име" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "откажи" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "земенета {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "врати" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "заменета {new_name} со {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -165,64 +166,60 @@ msgstr "Не може да се преземе вашата датотека б msgid "Upload Error" msgstr "Грешка при преземање" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Затвои" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Чека" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 датотека се подига" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} датотеки се подигаат" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Преземањето е прекинато." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Подигање на датотека е во тек. Напуштење на страницата ќе го прекине." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "Адресата неможе да биде празна." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Име" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Големина" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Променето" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 папка" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} папки" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 датотека" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} датотеки" @@ -279,7 +276,7 @@ msgid "From link" msgstr "Од врска" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -294,6 +291,10 @@ msgstr "Тука нема ништо. Снимете нешто!" msgid "Download" msgstr "Преземи" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Не споделувај" + #: templates/index.php:105 msgid "Upload too large" msgstr "Датотеката е премногу голема" diff --git a/l10n/mk/files_encryption.po b/l10n/mk/files_encryption.po index 56ed5df95c..3eab97885b 100644 --- a/l10n/mk/files_encryption.po +++ b/l10n/mk/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: mk\n" "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Енкрипција" diff --git a/l10n/mk/lib.po b/l10n/mk/lib.po index ada3766072..ba0adddc43 100644 --- a/l10n/mk/lib.po +++ b/l10n/mk/lib.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n" "MIME-Version: 1.0\n" @@ -18,47 +18,47 @@ msgstr "" "Language: mk\n" "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Помош" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Лично" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Параметри" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Корисници" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Аппликации" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Админ" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Преземање во ZIP е исклучено" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Датотеките треба да се симнат една по една." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Назад кон датотеки" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Избраните датотеки се преголеми за да се генерира zip." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -86,6 +86,17 @@ msgstr "Текст" msgid "Images" msgstr "Слики" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "пред секунди" diff --git a/l10n/ms_MY/files.po b/l10n/ms_MY/files.po index fe69de831b..8498ceb302 100644 --- a/l10n/ms_MY/files.po +++ b/l10n/ms_MY/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n" "MIME-Version: 1.0\n" @@ -82,51 +82,52 @@ msgstr "" msgid "Files" msgstr "fail" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Padam" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Dalam proses" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "ganti" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "Batal" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -166,64 +167,60 @@ msgstr "Tidak boleh memuatnaik fail anda kerana mungkin ianya direktori atau sai msgid "Upload Error" msgstr "Muat naik ralat" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Tutup" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Dalam proses" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Muatnaik dibatalkan." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nama " -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Saiz" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Dimodifikasi" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -280,7 +277,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -295,6 +292,10 @@ msgstr "Tiada apa-apa di sini. Muat naik sesuatu!" msgid "Download" msgstr "Muat turun" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "" + #: templates/index.php:105 msgid "Upload too large" msgstr "Muat naik terlalu besar" diff --git a/l10n/ms_MY/files_encryption.po b/l10n/ms_MY/files_encryption.po index 5c9ecb2f22..b87b0fa030 100644 --- a/l10n/ms_MY/files_encryption.po +++ b/l10n/ms_MY/files_encryption.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n" "MIME-Version: 1.0\n" @@ -17,28 +17,6 @@ msgstr "" "Language: ms_MY\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "" diff --git a/l10n/ms_MY/lib.po b/l10n/ms_MY/lib.po index 5365e602ba..2ba170d215 100644 --- a/l10n/ms_MY/lib.po +++ b/l10n/ms_MY/lib.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-18 00:03+0100\n" -"PO-Revision-Date: 2013-01-17 21:57+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n" "MIME-Version: 1.0\n" @@ -17,47 +17,47 @@ msgstr "" "Language: ms_MY\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Bantuan" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Peribadi" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Tetapan" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Pengguna" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -85,6 +85,17 @@ msgstr "Teks" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "" diff --git a/l10n/nb_NO/files.po b/l10n/nb_NO/files.po index 832fb94d7b..885b07c549 100644 --- a/l10n/nb_NO/files.po +++ b/l10n/nb_NO/files.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -87,51 +87,52 @@ msgstr "" msgid "Files" msgstr "Filer" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Avslutt deling" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Slett" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Omdøp" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Ventende" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} finnes allerede" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "erstatt" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "foreslå navn" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "avbryt" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "erstatt {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "angre" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "erstatt {new_name} med {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -171,64 +172,60 @@ msgstr "Kan ikke laste opp filen din siden det er en mappe eller den har 0 bytes msgid "Upload Error" msgstr "Opplasting feilet" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Lukk" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Ventende" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 fil lastes opp" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} filer laster opp" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Opplasting avbrutt." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL-en kan ikke være tom." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Navn" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Størrelse" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Endret" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 mappe" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} mapper" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 fil" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} filer" @@ -285,7 +282,7 @@ msgid "From link" msgstr "Fra link" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -300,6 +297,10 @@ msgstr "Ingenting her. Last opp noe!" msgid "Download" msgstr "Last ned" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Avslutt deling" + #: templates/index.php:105 msgid "Upload too large" msgstr "Opplasting for stor" diff --git a/l10n/nb_NO/files_encryption.po b/l10n/nb_NO/files_encryption.po index c8657a91e1..7be43b41df 100644 --- a/l10n/nb_NO/files_encryption.po +++ b/l10n/nb_NO/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: nb_NO\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Kryptering" diff --git a/l10n/nb_NO/lib.po b/l10n/nb_NO/lib.po index 4de8700485..981e26c022 100644 --- a/l10n/nb_NO/lib.po +++ b/l10n/nb_NO/lib.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -22,47 +22,47 @@ msgstr "" "Language: nb_NO\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Hjelp" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Personlig" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Innstillinger" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Brukere" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Apper" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Admin" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIP-nedlasting av avslått" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Filene må lastes ned en om gangen" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Tilbake til filer" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "De valgte filene er for store til å kunne generere ZIP-fil" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -90,6 +90,17 @@ msgstr "Tekst" msgid "Images" msgstr "Bilder" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "sekunder siden" diff --git a/l10n/nl/files.po b/l10n/nl/files.po index b91face47a..4d8405dc73 100644 --- a/l10n/nl/files.po +++ b/l10n/nl/files.po @@ -19,8 +19,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" @@ -32,16 +32,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Kon %s niet verplaatsen - Er bestaat al een bestand met deze naam" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Kon %s niet verplaatsen" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Kan bestand niet hernoemen" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -90,51 +90,52 @@ msgstr "Ongeldige directory." msgid "Files" msgstr "Bestanden" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Stop delen" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "Verwijder definitief" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Verwijder" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Hernoem" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Wachten" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} bestaat al" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "vervang" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "Stel een naam voor" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "annuleren" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "verving {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "ongedaan maken" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "verving {new_name} met {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "uitvoeren verwijderactie" @@ -174,64 +175,60 @@ msgstr "uploaden van de file mislukt, het is of een directory of de bestandsgroo msgid "Upload Error" msgstr "Upload Fout" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Sluit" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Wachten" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 bestand wordt ge-upload" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} bestanden aan het uploaden" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Uploaden geannuleerd." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL kan niet leeg zijn." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Ongeldige mapnaam. Gebruik van'Gedeeld' is voorbehouden aan Owncloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Naam" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Bestandsgrootte" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Laatst aangepast" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 map" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} mappen" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 bestand" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} bestanden" @@ -288,8 +285,8 @@ msgid "From link" msgstr "Vanaf link" #: templates/index.php:40 -msgid "Trash" -msgstr "Verwijderen" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -303,6 +300,10 @@ msgstr "Er bevindt zich hier niets. Upload een bestand!" msgid "Download" msgstr "Download" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Stop delen" + #: templates/index.php:105 msgid "Upload too large" msgstr "Bestanden te groot" diff --git a/l10n/nl/files_encryption.po b/l10n/nl/files_encryption.po index a138d9b3ae..c287efb9f7 100644 --- a/l10n/nl/files_encryption.po +++ b/l10n/nl/files_encryption.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:09+0100\n" -"PO-Revision-Date: 2013-02-07 13:50+0000\n" -"Last-Translator: André Koot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,28 +20,6 @@ msgstr "" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Schakel om naar uw eigen ownCloud client en wijzig uw versleutelwachtwoord om de conversie af te ronden." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "overgeschakeld naar client side encryptie" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Verander encryptie wachtwoord naar login wachtwoord" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Controleer uw wachtwoorden en probeer het opnieuw." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Kon het bestandsencryptie wachtwoord niet veranderen naar het login wachtwoord" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Versleuteling" diff --git a/l10n/nl/lib.po b/l10n/nl/lib.po index 2ae038b9e4..5a2a68eb45 100644 --- a/l10n/nl/lib.po +++ b/l10n/nl/lib.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-19 00:04+0100\n" -"PO-Revision-Date: 2013-01-18 09:03+0000\n" -"Last-Translator: André Koot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,47 +21,47 @@ msgstr "" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Help" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Persoonlijk" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Instellingen" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Gebruikers" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Apps" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Beheerder" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIP download is uitgeschakeld." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Bestanden moeten één voor één worden gedownload." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Terug naar bestanden" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "De geselecteerde bestanden zijn te groot om een zip bestand te maken." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "kon niet worden vastgesteld" @@ -89,6 +89,17 @@ msgstr "Tekst" msgid "Images" msgstr "Afbeeldingen" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "seconden geleden" diff --git a/l10n/nn_NO/files.po b/l10n/nn_NO/files.po index 5ec5f46101..67550c2332 100644 --- a/l10n/nn_NO/files.po +++ b/l10n/nn_NO/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n" "MIME-Version: 1.0\n" @@ -80,51 +80,52 @@ msgstr "" msgid "Files" msgstr "Filer" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Slett" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "replace" -msgstr "" - -#: js/filelist.js:208 -msgid "suggest name" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "cancel" -msgstr "" - -#: js/filelist.js:253 -msgid "replaced {new_name}" +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" msgstr "" #: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -164,64 +165,60 @@ msgstr "" msgid "Upload Error" msgstr "" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Lukk" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Namn" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Storleik" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Endra" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -278,7 +275,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -293,6 +290,10 @@ msgstr "Ingenting her. Last noko opp!" msgid "Download" msgstr "Last ned" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "" + #: templates/index.php:105 msgid "Upload too large" msgstr "For stor opplasting" diff --git a/l10n/nn_NO/files_encryption.po b/l10n/nn_NO/files_encryption.po index 4db0ffa21b..5b5ba56793 100644 --- a/l10n/nn_NO/files_encryption.po +++ b/l10n/nn_NO/files_encryption.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n" "MIME-Version: 1.0\n" @@ -17,28 +17,6 @@ msgstr "" "Language: nn_NO\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "" diff --git a/l10n/nn_NO/lib.po b/l10n/nn_NO/lib.po index 5d33fc1e80..ba41555b99 100644 --- a/l10n/nn_NO/lib.po +++ b/l10n/nn_NO/lib.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n" "MIME-Version: 1.0\n" @@ -17,47 +17,47 @@ msgstr "" "Language: nn_NO\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Hjelp" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Personleg" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Innstillingar" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Brukarar" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -85,6 +85,17 @@ msgstr "Tekst" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "" diff --git a/l10n/oc/files.po b/l10n/oc/files.po index 115f85f0fb..46ec34e547 100644 --- a/l10n/oc/files.po +++ b/l10n/oc/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n" "MIME-Version: 1.0\n" @@ -79,51 +79,52 @@ msgstr "" msgid "Files" msgstr "Fichièrs" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Non parteja" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Escafa" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Torna nomenar" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Al esperar" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "remplaça" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "nom prepausat" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "anulla" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "defar" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -163,64 +164,60 @@ msgstr "Impossible d'amontcargar lo teu fichièr qu'es un repertòri o que ten p msgid "Upload Error" msgstr "Error d'amontcargar" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Al esperar" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 fichièr al amontcargar" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Amontcargar anullat." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. " -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nom" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Talha" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Modificat" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -277,7 +274,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -292,6 +289,10 @@ msgstr "Pas res dedins. Amontcarga qualquaren" msgid "Download" msgstr "Avalcarga" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Non parteja" + #: templates/index.php:105 msgid "Upload too large" msgstr "Amontcargament tròp gròs" diff --git a/l10n/oc/files_encryption.po b/l10n/oc/files_encryption.po index a912cb58e7..4db4079a8e 100644 --- a/l10n/oc/files_encryption.po +++ b/l10n/oc/files_encryption.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n" "MIME-Version: 1.0\n" @@ -17,28 +17,6 @@ msgstr "" "Language: oc\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "" diff --git a/l10n/oc/lib.po b/l10n/oc/lib.po index 7a056315f6..c96977d906 100644 --- a/l10n/oc/lib.po +++ b/l10n/oc/lib.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n" "MIME-Version: 1.0\n" @@ -18,47 +18,47 @@ msgstr "" "Language: oc\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Ajuda" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Personal" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Configuracion" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Usancièrs" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Apps" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Admin" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Avalcargar los ZIP es inactiu." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Los fichièrs devan èsser avalcargats un per un." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Torna cap als fichièrs" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -86,6 +86,17 @@ msgstr "" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "segonda a" diff --git a/l10n/pl/files.po b/l10n/pl/files.po index 74de66a0d4..f49e1712ec 100644 --- a/l10n/pl/files.po +++ b/l10n/pl/files.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" @@ -28,16 +28,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Nie można było przenieść %s - Plik o takiej nazwie już istnieje" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Nie można było przenieść %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Nie można zmienić nazwy pliku" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -86,51 +86,52 @@ msgstr "Zła ścieżka." msgid "Files" msgstr "Pliki" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Nie udostępniaj" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Usuwa element" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Zmień nazwę" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Oczekujące" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} już istnieje" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "zastap" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "zasugeruj nazwę" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "anuluj" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "zastąpiony {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "wróć" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "zastąpiony {new_name} z {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -170,64 +171,60 @@ msgstr "Nie można wczytać pliku jeśli jest katalogiem lub ma 0 bajtów" msgid "Upload Error" msgstr "Błąd wczytywania" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Zamknij" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Oczekujące" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 plik wczytany" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} przesyłanie plików" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Wczytywanie anulowane." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Wysyłanie pliku jest w toku. Teraz opuszczając stronę wysyłanie zostanie anulowane." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL nie może być pusty." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nazwa folderu nieprawidłowa. Wykorzystanie \"Shared\" jest zarezerwowane przez Owncloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nazwa" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Rozmiar" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Czas modyfikacji" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 folder" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} foldery" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 plik" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} pliki" @@ -284,7 +281,7 @@ msgid "From link" msgstr "Z linku" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -299,6 +296,10 @@ msgstr "Brak zawartości. Proszę wysłać pliki!" msgid "Download" msgstr "Pobiera element" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Nie udostępniaj" + #: templates/index.php:105 msgid "Upload too large" msgstr "Wysyłany plik ma za duży rozmiar" diff --git a/l10n/pl/files_encryption.po b/l10n/pl/files_encryption.po index acf7f3f06e..414c6659d9 100644 --- a/l10n/pl/files_encryption.po +++ b/l10n/pl/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Szyfrowanie" diff --git a/l10n/pl/lib.po b/l10n/pl/lib.po index 917ce3b654..c1b35c7656 100644 --- a/l10n/pl/lib.po +++ b/l10n/pl/lib.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-29 00:05+0100\n" -"PO-Revision-Date: 2013-01-28 19:59+0000\n" -"Last-Translator: Marcin Małecki \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,47 +20,47 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Pomoc" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Osobiste" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Ustawienia" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Użytkownicy" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Aplikacje" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Administrator" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Pobieranie ZIP jest wyłączone." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Pliki muszą zostać pobrane pojedynczo." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Wróć do plików" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Wybrane pliki są zbyt duże, aby wygenerować plik zip." -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "nie może zostać znaleziony" @@ -88,6 +88,17 @@ msgstr "Połączenie tekstowe" msgid "Images" msgstr "Obrazy" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "sekund temu" diff --git a/l10n/pl_PL/files.po b/l10n/pl_PL/files.po index 19de2c0640..e1e8188680 100644 --- a/l10n/pl_PL/files.po +++ b/l10n/pl_PL/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" "MIME-Version: 1.0\n" @@ -78,51 +78,52 @@ msgstr "" msgid "Files" msgstr "" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "replace" -msgstr "" - -#: js/filelist.js:208 -msgid "suggest name" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "cancel" -msgstr "" - -#: js/filelist.js:253 -msgid "replaced {new_name}" +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" msgstr "" #: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -162,64 +163,60 @@ msgstr "" msgid "Upload Error" msgstr "" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -276,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -291,6 +288,10 @@ msgstr "" msgid "Download" msgstr "" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "" + #: templates/index.php:105 msgid "Upload too large" msgstr "" diff --git a/l10n/pl_PL/files_encryption.po b/l10n/pl_PL/files_encryption.po index 2e95f4ce7e..d41a8cb3da 100644 --- a/l10n/pl_PL/files_encryption.po +++ b/l10n/pl_PL/files_encryption.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" "MIME-Version: 1.0\n" @@ -17,28 +17,6 @@ msgstr "" "Language: pl_PL\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "" diff --git a/l10n/pl_PL/lib.po b/l10n/pl_PL/lib.po index af7e0260b9..8fec7a7635 100644 --- a/l10n/pl_PL/lib.po +++ b/l10n/pl_PL/lib.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" "MIME-Version: 1.0\n" @@ -17,47 +17,47 @@ msgstr "" "Language: pl_PL\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Ustawienia" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -85,6 +85,17 @@ msgstr "" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "" diff --git a/l10n/pt_BR/files.po b/l10n/pt_BR/files.po index a1270334a2..2fd721d545 100644 --- a/l10n/pt_BR/files.po +++ b/l10n/pt_BR/files.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -29,16 +29,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Não possível mover %s - Um arquivo com este nome já existe" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Não possível mover %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Impossível renomear arquivo" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -77,7 +77,7 @@ msgstr "Falha ao escrever no disco" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Espaço de armazenamento insuficiente" #: ajax/upload.php:83 msgid "Invalid directory." @@ -87,51 +87,52 @@ msgstr "Diretório inválido." msgid "Files" msgstr "Arquivos" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Descompartilhar" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Excluir" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Renomear" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Pendente" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} já existe" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "substituir" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "sugerir nome" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "cancelar" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "substituído {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "desfazer" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "Substituído {old_name} por {new_name} " -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -171,64 +172,60 @@ msgstr "Impossível enviar seus arquivo como diretório ou ele tem 0 bytes." msgid "Upload Error" msgstr "Erro de envio" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Fechar" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Pendente" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "enviando 1 arquivo" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "Enviando {count} arquivos" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Envio cancelado." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Upload em andamento. Sair da página agora resultará no cancelamento do envio." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL não pode ficar em branco" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nome de pasta inválido. O uso de 'Shared' é reservado para o Owncloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nome" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Tamanho" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Modificado" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 pasta" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} pastas" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 arquivo" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} arquivos" @@ -285,7 +282,7 @@ msgid "From link" msgstr "Do link" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -300,6 +297,10 @@ msgstr "Nada aqui.Carrege alguma coisa!" msgid "Download" msgstr "Baixar" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Descompartilhar" + #: templates/index.php:105 msgid "Upload too large" msgstr "Arquivo muito grande" diff --git a/l10n/pt_BR/files_encryption.po b/l10n/pt_BR/files_encryption.po index 1a4579181b..ee2e192fb4 100644 --- a/l10n/pt_BR/files_encryption.po +++ b/l10n/pt_BR/files_encryption.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -19,28 +19,6 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Por favor, vá ao seu cliente ownCloud e mude sua criptografia de senha para completar a conversão." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "alterado para criptografia por parte do cliente" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Mudar senha de criptografia para senha de login" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Por favor, verifique suas senhas e tente novamente." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Não foi possível mudar sua senha de criptografia de arquivos para sua senha de login" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Criptografia" diff --git a/l10n/pt_BR/lib.po b/l10n/pt_BR/lib.po index d20d57c814..dfed3b3905 100644 --- a/l10n/pt_BR/lib.po +++ b/l10n/pt_BR/lib.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-31 00:27+0100\n" -"PO-Revision-Date: 2013-01-30 15:50+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -20,27 +20,27 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Ajuda" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Pessoal" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Ajustes" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Usuários" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Aplicações" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Admin" @@ -88,6 +88,17 @@ msgstr "Texto" msgid "Images" msgstr "Imagens" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "segundos atrás" diff --git a/l10n/pt_PT/files.po b/l10n/pt_PT/files.po index 4f3a80d9f7..b38fea5335 100644 --- a/l10n/pt_PT/files.po +++ b/l10n/pt_PT/files.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" @@ -28,16 +28,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Não foi possível mover o ficheiro %s - Já existe um ficheiro com esse nome" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Não foi possível move o ficheiro %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Não foi possível renomear o ficheiro" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -76,7 +76,7 @@ msgstr "Falhou a escrita no disco" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Não há espaço suficiente em disco" #: ajax/upload.php:83 msgid "Invalid directory." @@ -86,51 +86,52 @@ msgstr "Directório Inválido" msgid "Files" msgstr "Ficheiros" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Deixar de partilhar" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "Eliminar permanentemente" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Apagar" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Renomear" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Pendente" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "O nome {new_name} já existe" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "substituir" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "sugira um nome" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "cancelar" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "{new_name} substituido" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "desfazer" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "substituido {new_name} por {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "Executar a tarefa de apagar" @@ -170,64 +171,60 @@ msgstr "Não é possível fazer o envio do ficheiro devido a ser uma pasta ou te msgid "Upload Error" msgstr "Erro no envio" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Fechar" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Pendente" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "A enviar 1 ficheiro" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "A carregar {count} ficheiros" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Envio cancelado." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Envio de ficheiro em progresso. Irá cancelar o envio se sair da página agora." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "O URL não pode estar vazio." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nome de pasta inválido. O Uso de 'shared' é reservado para o ownCloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nome" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Tamanho" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Modificado" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 pasta" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} pastas" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 ficheiro" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} ficheiros" @@ -284,8 +281,8 @@ msgid "From link" msgstr "Da ligação" #: templates/index.php:40 -msgid "Trash" -msgstr "Lixo" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -299,6 +296,10 @@ msgstr "Vazio. Envie alguma coisa!" msgid "Download" msgstr "Transferir" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Deixar de partilhar" + #: templates/index.php:105 msgid "Upload too large" msgstr "Envio muito grande" diff --git a/l10n/pt_PT/files_encryption.po b/l10n/pt_PT/files_encryption.po index 09e55792f7..460ced18d4 100644 --- a/l10n/pt_PT/files_encryption.po +++ b/l10n/pt_PT/files_encryption.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" @@ -19,28 +19,6 @@ msgstr "" "Language: pt_PT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Por favor, use o seu cliente de sincronização do ownCloud e altere a sua password de encriptação para concluír a conversão." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "Alterado para encriptação do lado do cliente" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Alterar a password de encriptação para a password de login" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Por favor verifique as suas paswords e tente de novo." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Não foi possível alterar a password de encriptação de ficheiros para a sua password de login" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Encriptação" diff --git a/l10n/pt_PT/lib.po b/l10n/pt_PT/lib.po index b9d558cbb4..db06396ca9 100644 --- a/l10n/pt_PT/lib.po +++ b/l10n/pt_PT/lib.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-18 00:03+0100\n" -"PO-Revision-Date: 2013-01-17 00:47+0000\n" -"Last-Translator: Mouxy \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,47 +19,47 @@ msgstr "" "Language: pt_PT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Ajuda" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Pessoal" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Configurações" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Utilizadores" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Aplicações" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Admin" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Descarregamento em ZIP está desligado." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Os ficheiros precisam de ser descarregados um por um." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Voltar a Ficheiros" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Os ficheiros seleccionados são grandes demais para gerar um ficheiro zip." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "Não foi possível determinar" @@ -87,6 +87,17 @@ msgstr "Texto" msgid "Images" msgstr "Imagens" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "há alguns segundos" diff --git a/l10n/ro/files.po b/l10n/ro/files.po index 5cb6516a73..4e321298f0 100644 --- a/l10n/ro/files.po +++ b/l10n/ro/files.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n" "MIME-Version: 1.0\n" @@ -26,16 +26,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Nu se poate de mutat %s - Fișier cu acest nume deja există" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Nu s-a putut muta %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Nu s-a putut redenumi fișierul" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -84,51 +84,52 @@ msgstr "Director invalid." msgid "Files" msgstr "Fișiere" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Anulează partajarea" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Șterge" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Redenumire" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "În așteptare" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} deja exista" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "înlocuire" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "sugerează nume" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "anulare" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "inlocuit {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "Anulează ultima acțiune" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "{new_name} inlocuit cu {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -168,64 +169,60 @@ msgstr "Nu s-a putut încărca fișierul tău deoarece pare să fie un director msgid "Upload Error" msgstr "Eroare la încărcare" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Închide" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "În așteptare" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "un fișier se încarcă" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} fisiere incarcate" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Încărcare anulată." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "Adresa URL nu poate fi goală." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Invalid folder name. Usage of 'Shared' is reserved by Ownclou" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Nume" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Dimensiune" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Modificat" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 folder" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} foldare" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 fisier" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} fisiere" @@ -282,7 +279,7 @@ msgid "From link" msgstr "de la adresa" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -297,6 +294,10 @@ msgstr "Nimic aici. Încarcă ceva!" msgid "Download" msgstr "Descarcă" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Anulează partajarea" + #: templates/index.php:105 msgid "Upload too large" msgstr "Fișierul încărcat este prea mare" diff --git a/l10n/ro/files_encryption.po b/l10n/ro/files_encryption.po index 10fad6ca46..ba27a3e08d 100644 --- a/l10n/ro/files_encryption.po +++ b/l10n/ro/files_encryption.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n" "MIME-Version: 1.0\n" @@ -19,28 +19,6 @@ msgstr "" "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Te rugăm să mergi în clientul ownCloud și să schimbi parola pentru a finisa conversia" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "setat la encriptare locală" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Schimbă parola de ecriptare în parolă de acces" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Verifică te rog parolele și înceracă din nou." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Nu s-a putut schimba parola de encripție a fișierelor ca parolă de acces" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Încriptare" diff --git a/l10n/ro/lib.po b/l10n/ro/lib.po index a48eb33474..0d5dcd34ea 100644 --- a/l10n/ro/lib.po +++ b/l10n/ro/lib.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-26 00:09+0100\n" -"PO-Revision-Date: 2013-01-25 21:31+0000\n" -"Last-Translator: Dimon Pockemon <>\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,47 +20,47 @@ msgstr "" "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Ajutor" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Personal" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Setări" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Utilizatori" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Aplicații" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Admin" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Descărcarea ZIP este dezactivată." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Fișierele trebuie descărcate unul câte unul." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Înapoi la fișiere" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Fișierele selectate sunt prea mari pentru a genera un fișier zip." -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "nu poate fi determinat" @@ -88,6 +88,17 @@ msgstr "Text" msgid "Images" msgstr "Imagini" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "secunde în urmă" diff --git a/l10n/ru/core.po b/l10n/ru/core.po index f41a1f241b..b9e138452b 100644 --- a/l10n/ru/core.po +++ b/l10n/ru/core.po @@ -19,9 +19,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 18:40+0000\n" +"Last-Translator: Langaru \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -168,59 +168,59 @@ msgstr "Ноябрь" msgid "December" msgstr "Декабрь" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "Настройки" -#: js/js.js:764 +#: js/js.js:766 msgid "seconds ago" msgstr "несколько секунд назад" -#: js/js.js:765 +#: js/js.js:767 msgid "1 minute ago" msgstr "1 минуту назад" -#: js/js.js:766 +#: js/js.js:768 msgid "{minutes} minutes ago" msgstr "{minutes} минут назад" -#: js/js.js:767 +#: js/js.js:769 msgid "1 hour ago" msgstr "час назад" -#: js/js.js:768 +#: js/js.js:770 msgid "{hours} hours ago" msgstr "{hours} часов назад" -#: js/js.js:769 +#: js/js.js:771 msgid "today" msgstr "сегодня" -#: js/js.js:770 +#: js/js.js:772 msgid "yesterday" msgstr "вчера" -#: js/js.js:771 +#: js/js.js:773 msgid "{days} days ago" msgstr "{days} дней назад" -#: js/js.js:772 +#: js/js.js:774 msgid "last month" msgstr "в прошлом месяце" -#: js/js.js:773 +#: js/js.js:775 msgid "{months} months ago" msgstr "{months} месяцев назад" -#: js/js.js:774 +#: js/js.js:776 msgid "months ago" msgstr "несколько месяцев назад" -#: js/js.js:775 +#: js/js.js:777 msgid "last year" msgstr "в прошлом году" -#: js/js.js:776 +#: js/js.js:778 msgid "years ago" msgstr "несколько лет назад" @@ -250,8 +250,8 @@ msgid "The object type is not specified." msgstr "Тип объекта не указан" #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "Ошибка" @@ -271,7 +271,7 @@ msgstr "Открыть доступ" msgid "Shared" msgstr "Общие" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "Ошибка при открытии доступа" @@ -367,23 +367,23 @@ msgstr "удалить" msgid "share" msgstr "открыть доступ" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "Защищено паролем" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "Ошибка при отмене срока доступа" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "Ошибка при установке срока доступа" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "Отправляется ..." -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "Письмо отправлено" @@ -499,14 +499,14 @@ msgstr "Без защищенного генератора случайных ч msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "Ваша папка с данными и файлы возможно доступны из интернета потому что файл .htaccess не работает." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Для информации как правильно настроить Ваш сервер, пожалйста загляните в документацию." #: templates/installation.php:36 msgid "Create an admin account" diff --git a/l10n/ru/files.po b/l10n/ru/files.po index bbb67c0ef4..8d0db97a9f 100644 --- a/l10n/ru/files.po +++ b/l10n/ru/files.po @@ -20,8 +20,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" @@ -33,16 +33,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Невозможно переместить %s - файл с таким именем уже существует" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Невозможно переместить %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Невозможно переименовать файл" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -81,7 +81,7 @@ msgstr "Ошибка записи на диск" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Недостаточно доступного места в хранилище" #: ajax/upload.php:83 msgid "Invalid directory." @@ -91,51 +91,52 @@ msgstr "Неправильный каталог." msgid "Files" msgstr "Файлы" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Отменить публикацию" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "Удалено навсегда" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Удалить" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Переименовать" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Ожидание" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} уже существует" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "заменить" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "предложить название" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "отмена" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "заменено {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "отмена" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "заменено {new_name} на {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "выполняется операция удаления" @@ -175,64 +176,60 @@ msgstr "Не удается загрузить файл размером 0 ба msgid "Upload Error" msgstr "Ошибка загрузки" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Закрыть" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Ожидание" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "загружается 1 файл" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} файлов загружается" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Загрузка отменена." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Файл в процессе загрузки. Покинув страницу вы прервёте загрузку." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "Ссылка не может быть пустой." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Неправильное имя каталога. Имя 'Shared' зарезервировано." -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Название" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Размер" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Изменён" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 папка" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} папок" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 файл" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} файлов" @@ -289,8 +286,8 @@ msgid "From link" msgstr "Из ссылки" #: templates/index.php:40 -msgid "Trash" -msgstr "Корзина" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -304,6 +301,10 @@ msgstr "Здесь ничего нет. Загрузите что-нибудь!" msgid "Download" msgstr "Скачать" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Отменить публикацию" + #: templates/index.php:105 msgid "Upload too large" msgstr "Файл слишком большой" diff --git a/l10n/ru/files_encryption.po b/l10n/ru/files_encryption.po index 4f23cda8f6..1244183e43 100644 --- a/l10n/ru/files_encryption.po +++ b/l10n/ru/files_encryption.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 06:40+0000\n" -"Last-Translator: Langaru \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,28 +19,6 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Пожалуйста переключитесь на Ваш клиент ownCloud и поменяйте пароль шиврования для завершения преобразования." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "переключён на шифрование со стороны клиента" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Изменить пароль шифрования для пароля входа" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Пожалуйста проверьте пароли и попробуйте снова." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Невозможно изменить Ваш пароль файла шифрования для пароля входа" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Шифрование" diff --git a/l10n/ru/lib.po b/l10n/ru/lib.po index f834d506e2..2511e84c26 100644 --- a/l10n/ru/lib.po +++ b/l10n/ru/lib.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 07:20+0000\n" -"Last-Translator: m4rkell \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,27 +23,27 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: app.php:313 +#: app.php:339 msgid "Help" msgstr "Помощь" -#: app.php:320 +#: app.php:346 msgid "Personal" msgstr "Личное" -#: app.php:325 +#: app.php:351 msgid "Settings" msgstr "Настройки" -#: app.php:330 +#: app.php:356 msgid "Users" msgstr "Пользователи" -#: app.php:337 +#: app.php:363 msgid "Apps" msgstr "Приложения" -#: app.php:339 +#: app.php:365 msgid "Admin" msgstr "Admin" @@ -91,6 +91,17 @@ msgstr "Текст" msgid "Images" msgstr "Изображения" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "менее минуты" diff --git a/l10n/ru_RU/core.po b/l10n/ru_RU/core.po index a32af7892a..4e06754858 100644 --- a/l10n/ru_RU/core.po +++ b/l10n/ru_RU/core.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 18:40+0000\n" +"Last-Translator: Langaru \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -159,59 +159,59 @@ msgstr "Ноябрь" msgid "December" msgstr "Декабрь" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "Настройки" -#: js/js.js:764 +#: js/js.js:766 msgid "seconds ago" msgstr "секунд назад" -#: js/js.js:765 +#: js/js.js:767 msgid "1 minute ago" msgstr " 1 минуту назад" -#: js/js.js:766 +#: js/js.js:768 msgid "{minutes} minutes ago" msgstr "{минуты} минут назад" -#: js/js.js:767 +#: js/js.js:769 msgid "1 hour ago" msgstr "1 час назад" -#: js/js.js:768 +#: js/js.js:770 msgid "{hours} hours ago" msgstr "{часы} часов назад" -#: js/js.js:769 +#: js/js.js:771 msgid "today" msgstr "сегодня" -#: js/js.js:770 +#: js/js.js:772 msgid "yesterday" msgstr "вчера" -#: js/js.js:771 +#: js/js.js:773 msgid "{days} days ago" msgstr "{дни} дней назад" -#: js/js.js:772 +#: js/js.js:774 msgid "last month" msgstr "в прошлом месяце" -#: js/js.js:773 +#: js/js.js:775 msgid "{months} months ago" msgstr "{месяцы} месяцев назад" -#: js/js.js:774 +#: js/js.js:776 msgid "months ago" msgstr "месяц назад" -#: js/js.js:775 +#: js/js.js:777 msgid "last year" msgstr "в прошлом году" -#: js/js.js:776 +#: js/js.js:778 msgid "years ago" msgstr "лет назад" @@ -241,8 +241,8 @@ msgid "The object type is not specified." msgstr "Тип объекта не указан." #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "Ошибка" @@ -262,7 +262,7 @@ msgstr "Сделать общим" msgid "Shared" msgstr "Опубликовано" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "Ошибка создания общего доступа" @@ -358,23 +358,23 @@ msgstr "удалить" msgid "share" msgstr "сделать общим" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "Пароль защищен" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "Ошибка при отключении даты истечения срока действия" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "Ошибка при установке даты истечения срока действия" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "Отправка ..." -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "Письмо отправлено" @@ -490,14 +490,14 @@ msgstr "Без защищенного генератора случайных ч msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "Ваша папка с данными и файлы возможно доступны из интернета потому что файл .htaccess не работает." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Для информации как правильно настроить Ваш сервер, пожалйста загляните в документацию." #: templates/installation.php:36 msgid "Create an admin account" diff --git a/l10n/ru_RU/files.po b/l10n/ru_RU/files.po index 574b383f37..209a7d5ba5 100644 --- a/l10n/ru_RU/files.po +++ b/l10n/ru_RU/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" @@ -82,51 +82,52 @@ msgstr "Неверный каталог." msgid "Files" msgstr "Файлы" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Скрыть" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "Удалить навсегда" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Удалить" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Переименовать" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Ожидающий решения" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{новое_имя} уже существует" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "отмена" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "подобрать название" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "отменить" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "заменено {новое_имя}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "отменить действие" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "заменено {новое_имя} с {старое_имя}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "выполняется процесс удаления" @@ -166,64 +167,60 @@ msgstr "Невозможно загрузить файл,\n так как он msgid "Upload Error" msgstr "Ошибка загрузки" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Закрыть" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Ожидающий решения" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "загрузка 1 файла" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{количество} загружено файлов" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Загрузка отменена" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Процесс загрузки файла. Если покинуть страницу сейчас, загрузка будет отменена." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL не должен быть пустым." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Неверное имя папки. Использование наименования 'Опубликовано' зарезервировано Owncloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Имя" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Размер" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Изменен" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 папка" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{количество} папок" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 файл" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{количество} файлов" @@ -280,8 +277,8 @@ msgid "From link" msgstr "По ссылке" #: templates/index.php:40 -msgid "Trash" -msgstr "Корзина" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -295,6 +292,10 @@ msgstr "Здесь ничего нет. Загрузите что-нибудь!" msgid "Download" msgstr "Загрузить" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Скрыть" + #: templates/index.php:105 msgid "Upload too large" msgstr "Загрузка слишком велика" diff --git a/l10n/ru_RU/files_encryption.po b/l10n/ru_RU/files_encryption.po index 41f89c1b29..cd0001f8da 100644 --- a/l10n/ru_RU/files_encryption.po +++ b/l10n/ru_RU/files_encryption.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" @@ -19,28 +19,6 @@ msgstr "" "Language: ru_RU\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Пожалуйста, переключитесь на ownCloud-клиент и измените Ваш пароль шифрования для завершения конвертации." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "переключено на шифрование на клиентской стороне" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Пожалуйста, проверьте Ваш пароль и попробуйте снова" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Шифрование" diff --git a/l10n/ru_RU/files_trashbin.po b/l10n/ru_RU/files_trashbin.po index d738f9f421..1213f4e5eb 100644 --- a/l10n/ru_RU/files_trashbin.po +++ b/l10n/ru_RU/files_trashbin.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Дмитрий , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 17:51+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 18:20+0000\n" +"Last-Translator: Langaru \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,20 +21,20 @@ msgstr "" #: ajax/delete.php:22 #, php-format msgid "Couldn't delete %s permanently" -msgstr "" +msgstr "%s не может быть удалён навсегда" #: ajax/undelete.php:41 #, php-format msgid "Couldn't restore %s" -msgstr "" +msgstr "%s не может быть восстановлен" #: js/trash.js:7 js/trash.js:94 msgid "perform restore operation" -msgstr "" +msgstr "выполнить операцию восстановления" #: js/trash.js:33 msgid "delete file permanently" -msgstr "" +msgstr "удалить файл навсегда" #: js/trash.js:125 templates/index.php:17 msgid "Name" @@ -41,7 +42,7 @@ msgstr "Имя" #: js/trash.js:126 templates/index.php:27 msgid "Deleted" -msgstr "" +msgstr "Удалён" #: js/trash.js:135 msgid "1 folder" @@ -61,7 +62,7 @@ msgstr "{количество} файлов" #: templates/index.php:9 msgid "Nothing in here. Your trash bin is empty!" -msgstr "" +msgstr "Здесь ничего нет. Ваша корзина пуста!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" diff --git a/l10n/ru_RU/lib.po b/l10n/ru_RU/lib.po index 34e58324fb..7ea63fa247 100644 --- a/l10n/ru_RU/lib.po +++ b/l10n/ru_RU/lib.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 10:41+0000\n" -"Last-Translator: AnnaSch \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,47 +19,47 @@ msgstr "" "Language: ru_RU\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Помощь" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Персональный" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Настройки" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Пользователи" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Приложения" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Админ" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Загрузка ZIP выключена." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Файлы должны быть загружены один за другим." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Обратно к файлам" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Выбранные файлы слишком велики для генерации zip-архива." -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "не может быть определено" @@ -87,6 +87,17 @@ msgstr "Текст" msgid "Images" msgstr "Изображения" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "секунд назад" diff --git a/l10n/si_LK/files.po b/l10n/si_LK/files.po index e3e769381e..2277e5ab28 100644 --- a/l10n/si_LK/files.po +++ b/l10n/si_LK/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" "MIME-Version: 1.0\n" @@ -80,51 +80,52 @@ msgstr "" msgid "Files" msgstr "ගොනු" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "නොබෙදු" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "මකන්න" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "නැවත නම් කරන්න" -#: js/filelist.js:208 js/filelist.js:210 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "replace" -msgstr "ප්‍රතිස්ථාපනය කරන්න" - -#: js/filelist.js:208 -msgid "suggest name" -msgstr "නමක් යෝජනා කරන්න" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "cancel" -msgstr "අත් හරින්න" - -#: js/filelist.js:253 -msgid "replaced {new_name}" +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" msgstr "" #: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "ප්‍රතිස්ථාපනය කරන්න" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "නමක් යෝජනා කරන්න" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "අත් හරින්න" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "නිෂ්ප්‍රභ කරන්න" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -164,64 +165,60 @@ msgstr "" msgid "Upload Error" msgstr "උඩුගත කිරීමේ දෝශයක්" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "වසන්න" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 ගොනුවක් උඩගත කෙරේ" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "උඩුගත කිරීම අත් හරින්න ලදී" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "උඩුගතකිරීමක් සිදුවේ. පිටුව හැර යාමෙන් එය නැවතෙනු ඇත" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "යොමුව හිස් විය නොහැක" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "නම" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "ප්‍රමාණය" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "වෙනස් කළ" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 ෆොල්ඩරයක්" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 ගොනුවක්" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -278,7 +275,7 @@ msgid "From link" msgstr "යොමුවෙන්" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -293,6 +290,10 @@ msgstr "මෙහි කිසිවක් නොමැත. යමක් උඩ msgid "Download" msgstr "බාගත කිරීම" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "නොබෙදු" + #: templates/index.php:105 msgid "Upload too large" msgstr "උඩුගත කිරීම විශාල වැඩිය" diff --git a/l10n/si_LK/files_encryption.po b/l10n/si_LK/files_encryption.po index 14724b9e31..7af077ac2a 100644 --- a/l10n/si_LK/files_encryption.po +++ b/l10n/si_LK/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: si_LK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "ගුප්ත කේතනය" diff --git a/l10n/si_LK/lib.po b/l10n/si_LK/lib.po index 9fcdc0a05a..2590931e93 100644 --- a/l10n/si_LK/lib.po +++ b/l10n/si_LK/lib.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" "MIME-Version: 1.0\n" @@ -19,47 +19,47 @@ msgstr "" "Language: si_LK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "උදව්" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "පෞද්ගලික" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "සිටුවම්" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "පරිශීලකයන්" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "යෙදුම්" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "පරිපාලක" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIP භාගත කිරීම් අක්‍රියයි" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "ගොනු එකින් එක භාගත යුතුයි" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "ගොනු වෙතට නැවත යන්න" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "තෝරාගත් ගොනු ZIP ගොනුවක් තැනීමට විශාල වැඩිය." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -87,6 +87,17 @@ msgstr "පෙළ" msgid "Images" msgstr "අනු රූ" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "තත්පරයන්ට පෙර" diff --git a/l10n/sk/files.po b/l10n/sk/files.po index e1beb2b3ae..8f6e6f689e 100644 --- a/l10n/sk/files.po +++ b/l10n/sk/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n" "MIME-Version: 1.0\n" @@ -78,51 +78,52 @@ msgstr "" msgid "Files" msgstr "" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "replace" -msgstr "" - -#: js/filelist.js:208 -msgid "suggest name" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "cancel" -msgstr "" - -#: js/filelist.js:253 -msgid "replaced {new_name}" +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" msgstr "" #: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -162,64 +163,60 @@ msgstr "" msgid "Upload Error" msgstr "" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -276,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -291,6 +288,10 @@ msgstr "" msgid "Download" msgstr "" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "" + #: templates/index.php:105 msgid "Upload too large" msgstr "" diff --git a/l10n/sk/files_encryption.po b/l10n/sk/files_encryption.po index 1873413f16..eb687048ca 100644 --- a/l10n/sk/files_encryption.po +++ b/l10n/sk/files_encryption.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2012-08-12 22:33+0000\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,28 +17,6 @@ msgstr "" "Language: sk\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "" diff --git a/l10n/sk/lib.po b/l10n/sk/lib.po index 0d0976b970..41bbad6595 100644 --- a/l10n/sk/lib.po +++ b/l10n/sk/lib.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2012-07-27 22:23+0000\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,27 +17,27 @@ msgstr "" "Language: sk\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: app.php:313 +#: app.php:339 msgid "Help" msgstr "" -#: app.php:320 +#: app.php:346 msgid "Personal" msgstr "" -#: app.php:325 +#: app.php:351 msgid "Settings" msgstr "" -#: app.php:330 +#: app.php:356 msgid "Users" msgstr "" -#: app.php:337 +#: app.php:363 msgid "Apps" msgstr "" -#: app.php:339 +#: app.php:365 msgid "Admin" msgstr "" @@ -85,6 +85,17 @@ msgstr "" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "" diff --git a/l10n/sk_SK/files.po b/l10n/sk_SK/files.po index 618ce24cad..3c052399e2 100644 --- a/l10n/sk_SK/files.po +++ b/l10n/sk_SK/files.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" @@ -26,16 +26,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Nie je možné presunúť %s - súbor s týmto menom už existuje" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Nie je možné presunúť %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Nemožno premenovať súbor" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -74,7 +74,7 @@ msgstr "Zápis na disk sa nepodaril" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Nedostatok dostupného úložného priestoru" #: ajax/upload.php:83 msgid "Invalid directory." @@ -84,51 +84,52 @@ msgstr "Neplatný adresár" msgid "Files" msgstr "Súbory" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Nezdielať" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "Zmazať trvalo" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Odstrániť" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Premenovať" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Čaká sa" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} už existuje" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "nahradiť" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "pomôcť s menom" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "zrušiť" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "prepísaný {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "vrátiť" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "prepísaný {new_name} súborom {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "vykonať zmazanie" @@ -168,64 +169,60 @@ msgstr "Nemôžem nahrať súbor lebo je to priečinok alebo má 0 bajtov." msgid "Upload Error" msgstr "Chyba odosielania" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Zavrieť" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Čaká sa" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 súbor sa posiela " -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} súborov odosielaných" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Odosielanie zrušené" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Opustenie stránky zruší práve prebiehajúce odosielanie súboru." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL nemôže byť prázdne" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Neplatné meno adresára. Používanie mena 'Shared' je vyhradené len pre Owncloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Meno" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Veľkosť" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Upravené" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 priečinok" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} priečinkov" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 súbor" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} súborov" @@ -282,8 +279,8 @@ msgid "From link" msgstr "Z odkazu" #: templates/index.php:40 -msgid "Trash" -msgstr "Kôš" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -297,6 +294,10 @@ msgstr "Žiadny súbor. Nahrajte niečo!" msgid "Download" msgstr "Stiahnuť" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Nezdielať" + #: templates/index.php:105 msgid "Upload too large" msgstr "Odosielaný súbor je príliš veľký" diff --git a/l10n/sk_SK/files_encryption.po b/l10n/sk_SK/files_encryption.po index 1e9b778f26..a03aa2a725 100644 --- a/l10n/sk_SK/files_encryption.po +++ b/l10n/sk_SK/files_encryption.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 22:50+0000\n" -"Last-Translator: georg007 \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,28 +20,6 @@ msgstr "" "Language: sk_SK\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Prosím, prejdite do svojho klienta ownCloud a zmente šifrovacie heslo na dokončenie konverzie." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "prepnuté na šifrovanie prostredníctvom klienta" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Zmeniť šifrovacie heslo na prihlasovacie" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Skontrolujte si heslo a skúste to znovu." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Nie je možné zmeniť šifrovacie heslo na prihlasovacie" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Šifrovanie" diff --git a/l10n/sk_SK/lib.po b/l10n/sk_SK/lib.po index 693d9535e4..37ba5198f6 100644 --- a/l10n/sk_SK/lib.po +++ b/l10n/sk_SK/lib.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 16:07+0000\n" -"Last-Translator: mhh \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,47 +21,47 @@ msgstr "" "Language: sk_SK\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Pomoc" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Osobné" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Nastavenia" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Užívatelia" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Aplikácie" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Správca" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Sťahovanie súborov ZIP je vypnuté." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Súbory musia byť nahrávané jeden za druhým." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Späť na súbory" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Zvolené súbory sú príliž veľké na vygenerovanie zip súboru." -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "nedá sa zistiť" @@ -89,6 +89,17 @@ msgstr "Text" msgid "Images" msgstr "Obrázky" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "pred sekundami" diff --git a/l10n/sl/files.po b/l10n/sl/files.po index 89ab93eb42..3482d91388 100644 --- a/l10n/sl/files.po +++ b/l10n/sl/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n" "MIME-Version: 1.0\n" @@ -82,51 +82,52 @@ msgstr "" msgid "Files" msgstr "Datoteke" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Odstrani iz souporabe" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Izbriši" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Preimenuj" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "V čakanju ..." + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} že obstaja" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "zamenjaj" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "predlagaj ime" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "prekliči" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "zamenjano je ime {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "razveljavi" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "zamenjano ime {new_name} z imenom {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -166,64 +167,60 @@ msgstr "Pošiljanje ni mogoče, saj gre za mapo, ali pa je datoteka velikosti 0 msgid "Upload Error" msgstr "Napaka med nalaganjem" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Zapri" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "V čakanju ..." - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "Pošiljanje 1 datoteke" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "nalagam {count} datotek" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Pošiljanje je preklicano." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "Naslov URL ne sme biti prazen." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Ime" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Velikost" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Spremenjeno" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 mapa" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} map" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 datoteka" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} datotek" @@ -280,7 +277,7 @@ msgid "From link" msgstr "Iz povezave" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -295,6 +292,10 @@ msgstr "Tukaj ni ničesar. Naložite kaj!" msgid "Download" msgstr "Prejmi" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Odstrani iz souporabe" + #: templates/index.php:105 msgid "Upload too large" msgstr "Nalaganje ni mogoče, ker je preveliko" diff --git a/l10n/sl/files_encryption.po b/l10n/sl/files_encryption.po index da59ca9a47..86d2a0d7d3 100644 --- a/l10n/sl/files_encryption.po +++ b/l10n/sl/files_encryption.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n" "MIME-Version: 1.0\n" @@ -19,28 +19,6 @@ msgstr "" "Language: sl\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Šifriranje" diff --git a/l10n/sl/lib.po b/l10n/sl/lib.po index 4af090e968..e0c60dd5cd 100644 --- a/l10n/sl/lib.po +++ b/l10n/sl/lib.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n" "MIME-Version: 1.0\n" @@ -19,47 +19,47 @@ msgstr "" "Language: sl\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Pomoč" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Osebno" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Nastavitve" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Uporabniki" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Programi" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Skrbništvo" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Prejem datotek ZIP je onemogočen." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Datoteke je mogoče prejeti le posamič." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Nazaj na datoteke" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Izbrane datoteke so prevelike za ustvarjanje datoteke arhiva zip." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -87,6 +87,17 @@ msgstr "Besedilo" msgid "Images" msgstr "Slike" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "pred nekaj sekundami" diff --git a/l10n/sr/files.po b/l10n/sr/files.po index e3ee1fecc9..23342d8cef 100644 --- a/l10n/sr/files.po +++ b/l10n/sr/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" @@ -81,51 +81,52 @@ msgstr "" msgid "Files" msgstr "Датотеке" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Укини дељење" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Обриши" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Преименуј" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "На чекању" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} већ постоји" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "замени" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "предложи назив" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "откажи" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "замењено {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "опозови" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "замењено {new_name} са {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -165,64 +166,60 @@ msgstr "Не могу да отпремим датотеку као фасцик msgid "Upload Error" msgstr "Грешка при отпремању" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Затвори" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "На чекању" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "Отпремам 1 датотеку" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "Отпремам {count} датотеке/а" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Отпремање је прекинуто." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Отпремање датотеке је у току. Ако сада напустите страницу, прекинућете отпремање." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Назив" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Величина" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Измењено" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 фасцикла" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} фасцикле/и" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 датотека" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} датотеке/а" @@ -279,7 +276,7 @@ msgid "From link" msgstr "Са везе" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -294,6 +291,10 @@ msgstr "Овде нема ничег. Отпремите нешто!" msgid "Download" msgstr "Преузми" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Укини дељење" + #: templates/index.php:105 msgid "Upload too large" msgstr "Датотека је превелика" diff --git a/l10n/sr/files_encryption.po b/l10n/sr/files_encryption.po index 4578d74732..4f38bb711f 100644 --- a/l10n/sr/files_encryption.po +++ b/l10n/sr/files_encryption.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" @@ -19,28 +19,6 @@ msgstr "" "Language: sr\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Шифровање" diff --git a/l10n/sr/lib.po b/l10n/sr/lib.po index 5f6cad797a..1520b0230c 100644 --- a/l10n/sr/lib.po +++ b/l10n/sr/lib.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 17:30+0000\n" -"Last-Translator: Rancher \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,27 +20,27 @@ msgstr "" "Language: sr\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: app.php:313 +#: app.php:339 msgid "Help" msgstr "Помоћ" -#: app.php:320 +#: app.php:346 msgid "Personal" msgstr "Лично" -#: app.php:325 +#: app.php:351 msgid "Settings" msgstr "Поставке" -#: app.php:330 +#: app.php:356 msgid "Users" msgstr "Корисници" -#: app.php:337 +#: app.php:363 msgid "Apps" msgstr "Апликације" -#: app.php:339 +#: app.php:365 msgid "Admin" msgstr "Администратор" @@ -88,6 +88,17 @@ msgstr "Текст" msgid "Images" msgstr "Слике" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "пре неколико секунди" diff --git a/l10n/sr@latin/files.po b/l10n/sr@latin/files.po index d0e6867e65..b1035f141d 100644 --- a/l10n/sr@latin/files.po +++ b/l10n/sr@latin/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n" "MIME-Version: 1.0\n" @@ -79,51 +79,52 @@ msgstr "" msgid "Files" msgstr "Fajlovi" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Obriši" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "replace" -msgstr "" - -#: js/filelist.js:208 -msgid "suggest name" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "cancel" -msgstr "" - -#: js/filelist.js:253 -msgid "replaced {new_name}" +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" msgstr "" #: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -163,64 +164,60 @@ msgstr "" msgid "Upload Error" msgstr "" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Zatvori" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Ime" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Veličina" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Zadnja izmena" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -277,7 +274,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -292,6 +289,10 @@ msgstr "Ovde nema ničeg. Pošaljite nešto!" msgid "Download" msgstr "Preuzmi" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "" + #: templates/index.php:105 msgid "Upload too large" msgstr "Pošiljka je prevelika" diff --git a/l10n/sr@latin/files_encryption.po b/l10n/sr@latin/files_encryption.po index 55b2d059ad..a34c90f6c0 100644 --- a/l10n/sr@latin/files_encryption.po +++ b/l10n/sr@latin/files_encryption.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n" "MIME-Version: 1.0\n" @@ -17,28 +17,6 @@ msgstr "" "Language: sr@latin\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "" diff --git a/l10n/sr@latin/lib.po b/l10n/sr@latin/lib.po index 264724c091..8d21e15455 100644 --- a/l10n/sr@latin/lib.po +++ b/l10n/sr@latin/lib.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n" "MIME-Version: 1.0\n" @@ -17,47 +17,47 @@ msgstr "" "Language: sr@latin\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Pomoć" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Lično" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Podešavanja" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Korisnici" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -85,6 +85,17 @@ msgstr "Tekst" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "" diff --git a/l10n/sv/files.po b/l10n/sv/files.po index 1ca2ac1ef0..edb0d69b80 100644 --- a/l10n/sv/files.po +++ b/l10n/sv/files.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" @@ -27,16 +27,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Kunde inte flytta %s - Det finns redan en fil med detta namn" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Kan inte flytta %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Kan inte byta namn på filen" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -75,7 +75,7 @@ msgstr "Misslyckades spara till disk" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Inte tillräckligt med lagringsutrymme tillgängligt" #: ajax/upload.php:83 msgid "Invalid directory." @@ -85,51 +85,52 @@ msgstr "Felaktig mapp." msgid "Files" msgstr "Filer" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Sluta dela" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Radera" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Byt namn" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Väntar" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} finns redan" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "ersätt" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "föreslå namn" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "avbryt" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "ersatt {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "ångra" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "ersatt {new_name} med {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "utför raderingen" @@ -169,64 +170,60 @@ msgstr "Kunde inte ladda upp dina filer eftersom det antingen är en mapp eller msgid "Upload Error" msgstr "Uppladdningsfel" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Stäng" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Väntar" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 filuppladdning" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} filer laddas upp" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Uppladdning avbruten." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL kan inte vara tom." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Ogiltigt mappnamn. Användande av 'Shared' är reserverat av ownCloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Namn" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Storlek" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Ändrad" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 mapp" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} mappar" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 fil" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} filer" @@ -283,8 +280,8 @@ msgid "From link" msgstr "Från länk" #: templates/index.php:40 -msgid "Trash" -msgstr "Papperskorgen" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -298,6 +295,10 @@ msgstr "Ingenting här. Ladda upp något!" msgid "Download" msgstr "Ladda ner" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Sluta dela" + #: templates/index.php:105 msgid "Upload too large" msgstr "För stor uppladdning" diff --git a/l10n/sv/files_encryption.po b/l10n/sv/files_encryption.po index 3c52fd7278..b401db609d 100644 --- a/l10n/sv/files_encryption.po +++ b/l10n/sv/files_encryption.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 02:41+0000\n" -"Last-Translator: Lokal_Profil \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,28 +19,6 @@ msgstr "" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "Vänligen växla till ownCloud klienten och ändra ditt krypteringslösenord för att slutföra omvandlingen." - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "Bytte till kryptering på klientsidan" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "Ändra krypteringslösenord till loginlösenord" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "Kontrollera dina lösenord och försök igen." - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "Kunde inte ändra ditt filkrypteringslösenord till ditt loginlösenord" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Kryptering" diff --git a/l10n/sv/lib.po b/l10n/sv/lib.po index 3fea987f13..9d898da301 100644 --- a/l10n/sv/lib.po +++ b/l10n/sv/lib.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-23 00:05+0100\n" -"PO-Revision-Date: 2013-01-21 14:32+0000\n" -"Last-Translator: Magnus Höglund \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,47 +19,47 @@ msgstr "" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Hjälp" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Personligt" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Inställningar" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Användare" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Program" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Admin" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Nerladdning av ZIP är avstängd." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Filer laddas ner en åt gången." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Tillbaka till Filer" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Valda filer är för stora för att skapa zip-fil." -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "kunde inte bestämmas" @@ -87,6 +87,17 @@ msgstr "Text" msgid "Images" msgstr "Bilder" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "sekunder sedan" diff --git a/l10n/sw_KE/files.po b/l10n/sw_KE/files.po index ed72da9980..742adbe87b 100644 --- a/l10n/sw_KE/files.po +++ b/l10n/sw_KE/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n" "MIME-Version: 1.0\n" @@ -78,51 +78,52 @@ msgstr "" msgid "Files" msgstr "" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "replace" -msgstr "" - -#: js/filelist.js:208 -msgid "suggest name" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "cancel" -msgstr "" - -#: js/filelist.js:253 -msgid "replaced {new_name}" +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" msgstr "" #: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -162,64 +163,60 @@ msgstr "" msgid "Upload Error" msgstr "" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -276,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -291,6 +288,10 @@ msgstr "" msgid "Download" msgstr "" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "" + #: templates/index.php:105 msgid "Upload too large" msgstr "" diff --git a/l10n/sw_KE/files_encryption.po b/l10n/sw_KE/files_encryption.po index f168cce6db..210f1a0455 100644 --- a/l10n/sw_KE/files_encryption.po +++ b/l10n/sw_KE/files_encryption.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:09+0100\n" -"PO-Revision-Date: 2012-08-12 22:33+0000\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,28 +17,6 @@ msgstr "" "Language: sw_KE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "" diff --git a/l10n/sw_KE/lib.po b/l10n/sw_KE/lib.po index 2934a40eb6..239e879ce3 100644 --- a/l10n/sw_KE/lib.po +++ b/l10n/sw_KE/lib.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2012-07-27 22:23+0000\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,27 +17,27 @@ msgstr "" "Language: sw_KE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:313 +#: app.php:339 msgid "Help" msgstr "" -#: app.php:320 +#: app.php:346 msgid "Personal" msgstr "" -#: app.php:325 +#: app.php:351 msgid "Settings" msgstr "" -#: app.php:330 +#: app.php:356 msgid "Users" msgstr "" -#: app.php:337 +#: app.php:363 msgid "Apps" msgstr "" -#: app.php:339 +#: app.php:365 msgid "Admin" msgstr "" @@ -85,6 +85,17 @@ msgstr "" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "" diff --git a/l10n/ta_LK/files.po b/l10n/ta_LK/files.po index 71d8d03be3..a6ead449b9 100644 --- a/l10n/ta_LK/files.po +++ b/l10n/ta_LK/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" "MIME-Version: 1.0\n" @@ -79,51 +79,52 @@ msgstr "" msgid "Files" msgstr "கோப்புகள்" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "பகிரப்படாதது" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "அழிக்க" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "பெயர்மாற்றம்" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "நிலுவையிலுள்ள" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} ஏற்கனவே உள்ளது" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "மாற்றிடுக" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "பெயரை பரிந்துரைக்க" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "இரத்து செய்க" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "மாற்றப்பட்டது {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "முன் செயல் நீக்கம் " -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "{new_name} ஆனது {old_name} இனால் மாற்றப்பட்டது" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -163,64 +164,60 @@ msgstr "அடைவு அல்லது 0 bytes ஐ கொண்டுள் msgid "Upload Error" msgstr "பதிவேற்றல் வழு" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "மூடுக" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "நிலுவையிலுள்ள" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 கோப்பு பதிவேற்றப்படுகிறது" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{எண்ணிக்கை} கோப்புகள் பதிவேற்றப்படுகின்றது" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "பதிவேற்றல் இரத்து செய்யப்பட்டுள்ளது" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "கோப்பு பதிவேற்றம் செயல்பாட்டில் உள்ளது. இந்தப் பக்கத்திலிருந்து வெறியேறுவதானது பதிவேற்றலை இரத்து செய்யும்." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL வெறுமையாக இருக்கமுடியாது." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "பெயர்" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "அளவு" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "மாற்றப்பட்டது" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 கோப்புறை" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{எண்ணிக்கை} கோப்புறைகள்" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 கோப்பு" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{எண்ணிக்கை} கோப்புகள்" @@ -277,7 +274,7 @@ msgid "From link" msgstr "இணைப்பிலிருந்து" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -292,6 +289,10 @@ msgstr "இங்கு ஒன்றும் இல்லை. ஏதாவத msgid "Download" msgstr "பதிவிறக்குக" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "பகிரப்படாதது" + #: templates/index.php:105 msgid "Upload too large" msgstr "பதிவேற்றல் மிகப்பெரியது" diff --git a/l10n/ta_LK/files_encryption.po b/l10n/ta_LK/files_encryption.po index dc06118a3e..fbd878dfe5 100644 --- a/l10n/ta_LK/files_encryption.po +++ b/l10n/ta_LK/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: ta_LK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "மறைக்குறியீடு" diff --git a/l10n/ta_LK/lib.po b/l10n/ta_LK/lib.po index febb5ad328..5817809e5b 100644 --- a/l10n/ta_LK/lib.po +++ b/l10n/ta_LK/lib.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" "MIME-Version: 1.0\n" @@ -18,47 +18,47 @@ msgstr "" "Language: ta_LK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "உதவி" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "தனிப்பட்ட" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "அமைப்புகள்" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "பயனாளர்கள்" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "செயலிகள்" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "நிர்வாகம்" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "வீசொலிப் பூட்டு பதிவிறக்கம் நிறுத்தப்பட்டுள்ளது." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "கோப்புகள்ஒன்றன் பின் ஒன்றாக பதிவிறக்கப்படவேண்டும்." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "கோப்புகளுக்கு செல்க" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "வீ சொலிக் கோப்புகளை உருவாக்குவதற்கு தெரிவுசெய்யப்பட்ட கோப்புகள் மிகப்பெரியவை" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -86,6 +86,17 @@ msgstr "உரை" msgid "Images" msgstr "படங்கள்" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "செக்கன்களுக்கு முன்" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index 43634de4b3..6a00507c5f 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -156,59 +156,59 @@ msgstr "" msgid "December" msgstr "" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "" -#: js/js.js:764 +#: js/js.js:766 msgid "seconds ago" msgstr "" -#: js/js.js:765 +#: js/js.js:767 msgid "1 minute ago" msgstr "" -#: js/js.js:766 +#: js/js.js:768 msgid "{minutes} minutes ago" msgstr "" -#: js/js.js:767 +#: js/js.js:769 msgid "1 hour ago" msgstr "" -#: js/js.js:768 +#: js/js.js:770 msgid "{hours} hours ago" msgstr "" -#: js/js.js:769 +#: js/js.js:771 msgid "today" msgstr "" -#: js/js.js:770 +#: js/js.js:772 msgid "yesterday" msgstr "" -#: js/js.js:771 +#: js/js.js:773 msgid "{days} days ago" msgstr "" -#: js/js.js:772 +#: js/js.js:774 msgid "last month" msgstr "" -#: js/js.js:773 +#: js/js.js:775 msgid "{months} months ago" msgstr "" -#: js/js.js:774 +#: js/js.js:776 msgid "months ago" msgstr "" -#: js/js.js:775 +#: js/js.js:777 msgid "last year" msgstr "" -#: js/js.js:776 +#: js/js.js:778 msgid "years ago" msgstr "" @@ -238,8 +238,8 @@ msgid "The object type is not specified." msgstr "" #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "" @@ -259,7 +259,7 @@ msgstr "" msgid "Shared" msgstr "" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "" @@ -355,23 +355,23 @@ msgstr "" msgid "share" msgstr "" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "" -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index 2ac9ac8686..e106765f56 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -78,51 +78,52 @@ msgstr "" msgid "Files" msgstr "" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "replace" -msgstr "" - -#: js/filelist.js:208 -msgid "suggest name" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "cancel" -msgstr "" - -#: js/filelist.js:253 -msgid "replaced {new_name}" +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" msgstr "" #: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -162,64 +163,60 @@ msgstr "" msgid "Upload Error" msgstr "" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -276,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -291,6 +288,10 @@ msgstr "" msgid "Download" msgstr "" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "" + #: templates/index.php:105 msgid "Upload too large" msgstr "" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index e1cc407d59..b0e79f0c42 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,28 +17,6 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to " -"complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index 0d4d620d98..f3455db032 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index bf6ff52b50..b6979782de 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index 3f59bb32a0..cd80ec0918 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 80d8fa35cd..6aa08a41e5 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 5c9b6e4cb8..87ad3ae49f 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,27 +17,27 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: app.php:313 +#: app.php:339 msgid "Help" msgstr "" -#: app.php:320 +#: app.php:346 msgid "Personal" msgstr "" -#: app.php:325 +#: app.php:351 msgid "Settings" msgstr "" -#: app.php:330 +#: app.php:356 msgid "Users" msgstr "" -#: app.php:337 +#: app.php:363 msgid "Apps" msgstr "" -#: app.php:339 +#: app.php:365 msgid "Admin" msgstr "" @@ -85,6 +85,17 @@ msgstr "" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index 0ed2c65e0d..7c27552622 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -80,7 +80,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index d13915b5b5..d255549329 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index 1f3da3f43f..2208724aa9 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/th_TH/files.po b/l10n/th_TH/files.po index 2b84a1a300..2104d5cd25 100644 --- a/l10n/th_TH/files.po +++ b/l10n/th_TH/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n" "MIME-Version: 1.0\n" @@ -22,16 +22,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่แล้ว" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "ไม่สามารถย้าย %s ได้" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "ไม่สามารถเปลี่ยนชื่อไฟล์ได้" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -70,7 +70,7 @@ msgstr "เขียนข้อมูลลงแผ่นดิสก์ล้ #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน" #: ajax/upload.php:83 msgid "Invalid directory." @@ -80,51 +80,52 @@ msgstr "ไดเร็กทอรี่ไม่ถูกต้อง" msgid "Files" msgstr "ไฟล์" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "ยกเลิกการแชร์ข้อมูล" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "ลบ" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "เปลี่ยนชื่อ" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "อยู่ระหว่างดำเนินการ" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} มีอยู่แล้วในระบบ" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "แทนที่" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "แนะนำชื่อ" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "ยกเลิก" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "แทนที่ {new_name} แล้ว" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "เลิกทำ" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "แทนที่ {new_name} ด้วย {old_name} แล้ว" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "ดำเนินการตามคำสั่งลบ" @@ -164,64 +165,60 @@ msgstr "ไม่สามารถอัพโหลดไฟล์ของค msgid "Upload Error" msgstr "เกิดข้อผิดพลาดในการอัพโหลด" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "ปิด" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "อยู่ระหว่างดำเนินการ" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "กำลังอัพโหลดไฟล์ 1 ไฟล์" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "กำลังอัพโหลด {count} ไฟล์" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "การอัพโหลดถูกยกเลิก" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL ไม่สามารถเว้นว่างได้" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "ชื่อโฟลเดอร์ไม่ถูกต้อง การใช้งาน 'แชร์' สงวนไว้สำหรับ Owncloud เท่านั้น" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "ชื่อ" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "ขนาด" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "ปรับปรุงล่าสุด" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 โฟลเดอร์" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} โฟลเดอร์" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 ไฟล์" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} ไฟล์" @@ -278,8 +275,8 @@ msgid "From link" msgstr "จากลิงก์" #: templates/index.php:40 -msgid "Trash" -msgstr "ถังขยะ" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -293,6 +290,10 @@ msgstr "ยังไม่มีไฟล์ใดๆอยู่ที่นี msgid "Download" msgstr "ดาวน์โหลด" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "ยกเลิกการแชร์ข้อมูล" + #: templates/index.php:105 msgid "Upload too large" msgstr "ไฟล์ที่อัพโหลดมีขนาดใหญ่เกินไป" diff --git a/l10n/th_TH/files_encryption.po b/l10n/th_TH/files_encryption.po index 5131a396a5..0f055b572f 100644 --- a/l10n/th_TH/files_encryption.po +++ b/l10n/th_TH/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: th_TH\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "กรุณาสลับไปที่โปรแกรมไคลเอนต์ ownCloud ของคุณ แล้วเปลี่ยนรหัสผ่านสำหรับการเข้ารหัสเพื่อแปลงข้อมูลให้เสร็จสมบูรณ์" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "สลับไปใช้การเข้ารหัสจากโปรแกรมไคลเอนต์" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "เปลี่ยนรหัสผ่านสำหรับเข้ารหัสไปเป็นรหัสผ่านสำหรับการเข้าสู่ระบบ" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "กรุณาตรวจสอบรหัสผ่านของคุณแล้วลองใหม่อีกครั้ง" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "ไม่สามารถเปลี่ยนรหัสผ่านสำหรับการเข้ารหัสไฟล์ของคุณไปเป็นรหัสผ่านสำหรับการเข้าสู่ระบบของคุณได้" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "การเข้ารหัส" diff --git a/l10n/th_TH/lib.po b/l10n/th_TH/lib.po index ab2e313276..5e486a7842 100644 --- a/l10n/th_TH/lib.po +++ b/l10n/th_TH/lib.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-23 00:05+0100\n" -"PO-Revision-Date: 2013-01-22 00:44+0000\n" -"Last-Translator: AriesAnywhere Anywhere \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,47 +18,47 @@ msgstr "" "Language: th_TH\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "ช่วยเหลือ" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "ส่วนตัว" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "ตั้งค่า" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "ผู้ใช้งาน" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "แอปฯ" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "ผู้ดูแล" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "คุณสมบัติการดาวน์โหลด zip ถูกปิดการใช้งานไว้" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "ไฟล์สามารถดาวน์โหลดได้ทีละครั้งเท่านั้น" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "กลับไปที่ไฟล์" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "ไฟล์ที่เลือกมีขนาดใหญ่เกินกว่าที่จะสร้างเป็นไฟล์ zip" -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "ไม่สามารถกำหนดได้" @@ -86,6 +86,17 @@ msgstr "ข้อความ" msgid "Images" msgstr "รูปภาพ" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "วินาทีที่ผ่านมา" diff --git a/l10n/tr/files.po b/l10n/tr/files.po index af033c8693..611384113c 100644 --- a/l10n/tr/files.po +++ b/l10n/tr/files.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -26,16 +26,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "%s taşınamadı. Bu isimde dosya zaten var." #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "%s taşınamadı" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Dosya adı değiştirilemedi" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -84,51 +84,52 @@ msgstr "Geçersiz dizin." msgid "Files" msgstr "Dosyalar" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Paylaşılmayan" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Sil" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "İsim değiştir." -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Bekliyor" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} zaten mevcut" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "değiştir" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "Öneri ad" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "iptal" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "değiştirilen {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "geri al" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "{new_name} ismi {old_name} ile değiştirildi" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -168,64 +169,60 @@ msgstr "Dosyanızın boyutu 0 byte olduğundan veya bir dizin olduğundan yükle msgid "Upload Error" msgstr "Yükleme hatası" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Kapat" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Bekliyor" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 dosya yüklendi" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} dosya yükleniyor" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Yükleme iptal edildi." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Dosya yükleme işlemi sürüyor. Şimdi sayfadan ayrılırsanız işleminiz iptal olur." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL boş olamaz." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Geçersiz dizin adı. Shared isminin kullanımı Owncloud tarafından rezerver edilmiştir." -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Ad" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Boyut" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Değiştirilme" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 dizin" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} dizin" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 dosya" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} dosya" @@ -282,7 +279,7 @@ msgid "From link" msgstr "Bağlantıdan" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -297,6 +294,10 @@ msgstr "Burada hiçbir şey yok. Birşeyler yükleyin!" msgid "Download" msgstr "İndir" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Paylaşılmayan" + #: templates/index.php:105 msgid "Upload too large" msgstr "Yüklemeniz çok büyük" diff --git a/l10n/tr/files_encryption.po b/l10n/tr/files_encryption.po index d8297b19c3..fec3cbfb0b 100644 --- a/l10n/tr/files_encryption.po +++ b/l10n/tr/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: tr\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Şifreleme" diff --git a/l10n/tr/lib.po b/l10n/tr/lib.po index fadb1957cf..524e298ee1 100644 --- a/l10n/tr/lib.po +++ b/l10n/tr/lib.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-23 00:05+0100\n" -"PO-Revision-Date: 2013-01-22 09:28+0000\n" -"Last-Translator: ismail yenigül \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,47 +19,47 @@ msgstr "" "Language: tr\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Yardı" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Kişisel" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Ayarlar" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Kullanıcılar" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Uygulamalar" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Yönetici" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIP indirmeleri kapatılmıştır." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Dosyaların birer birer indirilmesi gerekmektedir." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Dosyalara dön" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Seçilen dosyalar bir zip dosyası oluşturmak için fazla büyüktür." -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "tespit edilemedi" @@ -87,6 +87,17 @@ msgstr "Metin" msgid "Images" msgstr "Resimler" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "saniye önce" diff --git a/l10n/uk/files.po b/l10n/uk/files.po index 44b18cb87c..fd21387526 100644 --- a/l10n/uk/files.po +++ b/l10n/uk/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" @@ -82,51 +82,52 @@ msgstr "Невірний каталог." msgid "Files" msgstr "Файли" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Заборонити доступ" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "Видалити назавжди" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Видалити" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Перейменувати" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Очікування" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} вже існує" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "заміна" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "запропонуйте назву" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "відміна" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "замінено {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "відмінити" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "замінено {new_name} на {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "виконати операцію видалення" @@ -166,64 +167,60 @@ msgstr "Неможливо завантажити ваш файл тому, що msgid "Upload Error" msgstr "Помилка завантаження" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Закрити" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Очікування" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 файл завантажується" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} файлів завантажується" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Завантаження перервано." -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Виконується завантаження файлу. Закриття цієї сторінки приведе до відміни завантаження." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL не може бути пустим." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Невірне ім'я теки. Використання \"Shared\" зарезервовано Owncloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Ім'я" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Розмір" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Змінено" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 папка" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} папок" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 файл" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} файлів" @@ -280,8 +277,8 @@ msgid "From link" msgstr "З посилання" #: templates/index.php:40 -msgid "Trash" -msgstr "Смітник" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -295,6 +292,10 @@ msgstr "Тут нічого немає. Відвантажте що-небудь msgid "Download" msgstr "Завантажити" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Заборонити доступ" + #: templates/index.php:105 msgid "Upload too large" msgstr "Файл занадто великий" diff --git a/l10n/uk/files_encryption.po b/l10n/uk/files_encryption.po index 535f306855..1ee5660980 100644 --- a/l10n/uk/files_encryption.po +++ b/l10n/uk/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Шифрування" diff --git a/l10n/uk/lib.po b/l10n/uk/lib.po index 8d1708aa24..977f361120 100644 --- a/l10n/uk/lib.po +++ b/l10n/uk/lib.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-18 00:03+0100\n" -"PO-Revision-Date: 2013-01-17 13:24+0000\n" -"Last-Translator: volodya327 \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,47 +21,47 @@ msgstr "" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Допомога" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Особисте" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Налаштування" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Користувачі" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Додатки" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Адмін" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIP завантаження вимкнено." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Файли повинні бути завантаженні послідовно." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Повернутися до файлів" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Вибрані фали завеликі для генерування zip файлу." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "не може бути визначено" @@ -89,6 +89,17 @@ msgstr "Текст" msgid "Images" msgstr "Зображення" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "секунди тому" diff --git a/l10n/vi/core.po b/l10n/vi/core.po index 012e1202e9..24cd51e054 100644 --- a/l10n/vi/core.po +++ b/l10n/vi/core.po @@ -6,15 +6,16 @@ # , 2012. # , 2012. # , 2012. +# sao sang , 2013. # Son Nguyen , 2012. # Sơn Nguyễn , 2012-2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 18:20+0000\n" +"Last-Translator: saosangm \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -57,7 +58,7 @@ msgstr "Không có danh mục được thêm?" #: ajax/vcategories/add.php:37 #, php-format msgid "This category already exists: %s" -msgstr "" +msgstr "Danh mục này đã tồn tại: %s" #: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27 #: ajax/vcategories/favorites.php:24 @@ -161,59 +162,59 @@ msgstr "Tháng 11" msgid "December" msgstr "Tháng 12" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "Cài đặt" -#: js/js.js:764 +#: js/js.js:766 msgid "seconds ago" msgstr "vài giây trước" -#: js/js.js:765 +#: js/js.js:767 msgid "1 minute ago" msgstr "1 phút trước" -#: js/js.js:766 +#: js/js.js:768 msgid "{minutes} minutes ago" msgstr "{minutes} phút trước" -#: js/js.js:767 +#: js/js.js:769 msgid "1 hour ago" msgstr "1 giờ trước" -#: js/js.js:768 +#: js/js.js:770 msgid "{hours} hours ago" msgstr "{hours} giờ trước" -#: js/js.js:769 +#: js/js.js:771 msgid "today" msgstr "hôm nay" -#: js/js.js:770 +#: js/js.js:772 msgid "yesterday" msgstr "hôm qua" -#: js/js.js:771 +#: js/js.js:773 msgid "{days} days ago" msgstr "{days} ngày trước" -#: js/js.js:772 +#: js/js.js:774 msgid "last month" msgstr "tháng trước" -#: js/js.js:773 +#: js/js.js:775 msgid "{months} months ago" msgstr "{months} tháng trước" -#: js/js.js:774 +#: js/js.js:776 msgid "months ago" msgstr "tháng trước" -#: js/js.js:775 +#: js/js.js:777 msgid "last year" msgstr "năm trước" -#: js/js.js:776 +#: js/js.js:778 msgid "years ago" msgstr "năm trước" @@ -243,8 +244,8 @@ msgid "The object type is not specified." msgstr "Loại đối tượng không được chỉ định." #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "Lỗi" @@ -262,9 +263,9 @@ msgstr "Chia sẻ" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "Được chia sẻ" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "Lỗi trong quá trình chia sẻ" @@ -302,7 +303,7 @@ msgstr "Mật khẩu" #: js/share.js:189 msgid "Email link to person" -msgstr "" +msgstr "Liên kết email tới cá nhân" #: js/share.js:190 msgid "Send" @@ -360,25 +361,25 @@ msgstr "xóa" msgid "share" msgstr "chia sẻ" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "Mật khẩu bảo vệ" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "Lỗi không thiết lập ngày kết thúc" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "Lỗi cấu hình ngày kết thúc" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "Đang gởi ..." -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" -msgstr "" +msgstr "Email đã được gửi" #: js/update.js:14 msgid "" @@ -492,14 +493,14 @@ msgstr "Nếu không có random number generator , Hacker có thể thiết l msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "Thư mục và file dữ liệu của bạn có thể được truy cập từ internet bởi vì file .htaccess không hoạt động" #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Để biết thêm cách cấu hình máy chủ của bạn, xin xem tài liệu." #: templates/installation.php:36 msgid "Create an admin account" @@ -582,7 +583,7 @@ msgstr "Đăng nhập" #: templates/login.php:49 msgid "Alternative Logins" -msgstr "" +msgstr "Đăng nhập khác" #: templates/part.pagenavi.php:3 msgid "prev" @@ -595,4 +596,4 @@ msgstr "Kế tiếp" #: templates/update.php:3 #, php-format msgid "Updating ownCloud to version %s, this may take a while." -msgstr "" +msgstr "Cập nhật ownCloud lên phiên bản %s, có thể sẽ mất thời gian" diff --git a/l10n/vi/files.po b/l10n/vi/files.po index 131a491428..eeabcf3ec5 100644 --- a/l10n/vi/files.po +++ b/l10n/vi/files.po @@ -6,13 +6,14 @@ # , 2012. # , 2012. # , 2012. +# sao sang , 2013. # Sơn Nguyễn , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" @@ -24,16 +25,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Không thể di chuyển %s - Đã có tên file này trên hệ thống" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Không thể di chuyển %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Không thể đổi tên file" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -46,7 +47,7 @@ msgstr "Không có lỗi, các tập tin đã được tải lên thành công" #: ajax/upload.php:27 msgid "" "The uploaded file exceeds the upload_max_filesize directive in php.ini: " -msgstr "" +msgstr "The uploaded file exceeds the upload_max_filesize directive in php.ini: " #: ajax/upload.php:29 msgid "" @@ -72,71 +73,72 @@ msgstr "Không thể ghi " #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Không đủ không gian lưu trữ" #: ajax/upload.php:83 msgid "Invalid directory." -msgstr "" +msgstr "Thư mục không hợp lệ" #: appinfo/app.php:10 msgid "Files" msgstr "Tập tin" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "Không chia sẽ" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" -msgstr "" +msgstr "Xóa vĩnh vễn" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "Xóa" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "Sửa tên" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Chờ" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} đã tồn tại" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "thay thế" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "tên gợi ý" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "hủy" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "đã thay thế {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "lùi lại" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "đã thay thế {new_name} bằng {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" -msgstr "" +msgstr "thực hiện việc xóa" #: js/files.js:52 msgid "'.' is an invalid file name." -msgstr "" +msgstr "'.' là một tên file không hợp lệ" #: js/files.js:56 msgid "File name cannot be empty." -msgstr "" +msgstr "Tên file không được rỗng" #: js/files.js:64 msgid "" @@ -146,17 +148,17 @@ msgstr "Tên không hợp lệ, '\\', '/', '<', '>', ':', '\"', '|', '?' và '*' #: js/files.js:78 msgid "Your storage is full, files can not be updated or synced anymore!" -msgstr "" +msgstr "Your storage is full, files can not be updated or synced anymore!" #: js/files.js:82 msgid "Your storage is almost full ({usedSpacePercent}%)" -msgstr "" +msgstr "Your storage is almost full ({usedSpacePercent}%)" #: js/files.js:224 msgid "" "Your download is being prepared. This might take some time if the files are " "big." -msgstr "" +msgstr "Your download is being prepared. This might take some time if the files are big." #: js/files.js:261 msgid "Unable to upload your file as it is a directory or has 0 bytes" @@ -166,64 +168,60 @@ msgstr "Không thể tải lên tập tin này do nó là một thư mục hoặ msgid "Upload Error" msgstr "Tải lên lỗi" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "Đóng" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Chờ" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 tệp tin đang được tải lên" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} tập tin đang tải lên" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "Hủy tải lên" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này." -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL không được để trống." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" -msgstr "" +msgstr "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "Tên" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "Kích cỡ" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "Thay đổi" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 thư mục" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} thư mục" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 tập tin" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} tập tin" @@ -280,7 +278,7 @@ msgid "From link" msgstr "Từ liên kết" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -295,6 +293,10 @@ msgstr "Không có gì ở đây .Hãy tải lên một cái gì đó !" msgid "Download" msgstr "Tải xuống" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "Không chia sẽ" + #: templates/index.php:105 msgid "Upload too large" msgstr "Tập tin tải lên quá lớn" @@ -315,4 +317,4 @@ msgstr "Hiện tại đang quét" #: templates/upgrade.php:2 msgid "Upgrading filesystem cache..." -msgstr "" +msgstr "Upgrading filesystem cache..." diff --git a/l10n/vi/files_encryption.po b/l10n/vi/files_encryption.po index a845b05ea1..af199ade99 100644 --- a/l10n/vi/files_encryption.po +++ b/l10n/vi/files_encryption.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# sao sang , 2013. # Sơn Nguyễn , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" @@ -18,43 +19,21 @@ msgstr "" "Language: vi\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "Mã hóa" #: templates/settings-personal.php:7 msgid "File encryption is enabled." -msgstr "" +msgstr "Mã hóa file đã mở" #: templates/settings-personal.php:11 msgid "The following file types will not be encrypted:" -msgstr "" +msgstr "Loại file sau sẽ không được mã hóa" #: templates/settings.php:7 msgid "Exclude the following file types from encryption:" -msgstr "" +msgstr "Việc mã hóa không bao gồm loại file sau" #: templates/settings.php:12 msgid "None" diff --git a/l10n/vi/files_external.po b/l10n/vi/files_external.po index 72b1138b2b..6dbeed35de 100644 --- a/l10n/vi/files_external.po +++ b/l10n/vi/files_external.po @@ -4,14 +4,15 @@ # # Translators: # , 2012. +# sao sang , 2013. # Sơn Nguyễn , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-13 00:17+0100\n" -"PO-Revision-Date: 2012-12-11 23:22+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 18:40+0000\n" +"Last-Translator: saosangm \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -43,18 +44,18 @@ msgstr "Xin vui lòng cung cấp một ứng dụng Dropbox hợp lệ và mã b msgid "Error configuring Google Drive storage" msgstr "Lỗi cấu hình lưu trữ Google Drive" -#: lib/config.php:434 +#: lib/config.php:405 msgid "" "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " "is not possible. Please ask your system administrator to install it." -msgstr "" +msgstr "Cảnh báo: \"smbclient\" chưa được cài đặt. Mount CIFS/SMB shares là không thể thực hiện được. Hãy hỏi người quản trị hệ thống để cài đặt nó." -#: lib/config.php:435 +#: lib/config.php:406 msgid "" "Warning: The FTP support in PHP is not enabled or installed. Mounting" " of FTP shares is not possible. Please ask your system administrator to " "install it." -msgstr "" +msgstr "Cảnh báo: FTP trong PHP chưa được cài đặt hoặc chưa được mở. Mount FTP shares là không thể. Xin hãy yêu cầu quản trị hệ thống của bạn cài đặt nó." #: templates/settings.php:3 msgid "External Storage" @@ -101,7 +102,7 @@ msgid "Users" msgstr "Người dùng" #: templates/settings.php:108 templates/settings.php:109 -#: templates/settings.php:149 templates/settings.php:150 +#: templates/settings.php:144 templates/settings.php:145 msgid "Delete" msgstr "Xóa" @@ -113,10 +114,10 @@ msgstr "Kích hoạt tính năng lưu trữ ngoài" msgid "Allow users to mount their own external storage" msgstr "Cho phép người dùng kết nối với lưu trữ riêng bên ngoài của họ" -#: templates/settings.php:139 +#: templates/settings.php:136 msgid "SSL root certificates" msgstr "Chứng chỉ SSL root" -#: templates/settings.php:158 +#: templates/settings.php:153 msgid "Import Root Certificate" msgstr "Nhập Root Certificate" diff --git a/l10n/vi/files_trashbin.po b/l10n/vi/files_trashbin.po index 3d2b604621..9293b13b7d 100644 --- a/l10n/vi/files_trashbin.po +++ b/l10n/vi/files_trashbin.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# sao sang , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 19:10+0000\n" +"Last-Translator: saosangm \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,20 +21,20 @@ msgstr "" #: ajax/delete.php:22 #, php-format msgid "Couldn't delete %s permanently" -msgstr "" +msgstr "Không thể óa %s vĩnh viễn" #: ajax/undelete.php:41 #, php-format msgid "Couldn't restore %s" -msgstr "" +msgstr "Không thể khôi phục %s" #: js/trash.js:7 js/trash.js:94 msgid "perform restore operation" -msgstr "" +msgstr "thực hiện phục hồi" #: js/trash.js:33 msgid "delete file permanently" -msgstr "" +msgstr "xóa file vĩnh viễn" #: js/trash.js:125 templates/index.php:17 msgid "Name" @@ -41,7 +42,7 @@ msgstr "Tên" #: js/trash.js:126 templates/index.php:27 msgid "Deleted" -msgstr "" +msgstr "Đã xóa" #: js/trash.js:135 msgid "1 folder" @@ -61,8 +62,8 @@ msgstr "{count} tập tin" #: templates/index.php:9 msgid "Nothing in here. Your trash bin is empty!" -msgstr "" +msgstr "Không có gì ở đây. Thùng rác của bạn rỗng!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" -msgstr "" +msgstr "Khôi phục" diff --git a/l10n/vi/files_versions.po b/l10n/vi/files_versions.po index 9ebe3a80d4..86b6d7a998 100644 --- a/l10n/vi/files_versions.po +++ b/l10n/vi/files_versions.po @@ -4,14 +4,15 @@ # # Translators: # , 2012. +# sao sang , 2013. # Sơn Nguyễn , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 18:30+0000\n" +"Last-Translator: saosangm \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,33 +23,33 @@ msgstr "" #: ajax/rollbackVersion.php:15 #, php-format msgid "Could not revert: %s" -msgstr "" +msgstr "Không thể khôi phục: %s" #: history.php:40 msgid "success" -msgstr "" +msgstr "thành công" #: history.php:42 #, php-format msgid "File %s was reverted to version %s" -msgstr "" +msgstr "File %s đã được khôi phục về phiên bản %s" #: history.php:49 msgid "failure" -msgstr "" +msgstr "Thất bại" #: history.php:51 #, php-format msgid "File %s could not be reverted to version %s" -msgstr "" +msgstr "File %s không thể khôi phục về phiên bản %s" #: history.php:68 msgid "No old versions available" -msgstr "" +msgstr "Không có phiên bản cũ nào" #: history.php:73 msgid "No path specified" -msgstr "" +msgstr "Không chỉ ra đường dẫn rõ ràng" #: js/versions.js:16 msgid "History" @@ -56,7 +57,7 @@ msgstr "Lịch sử" #: templates/history.php:20 msgid "Revert a file to a previous version by clicking on its revert button" -msgstr "" +msgstr "Khôi phục một file về phiên bản trước đó bằng cách click vào nút Khôi phục tương ứng" #: templates/settings.php:3 msgid "Files Versioning" diff --git a/l10n/vi/lib.po b/l10n/vi/lib.po index d838960fd9..13cc3e0968 100644 --- a/l10n/vi/lib.po +++ b/l10n/vi/lib.po @@ -5,13 +5,14 @@ # Translators: # , 2012. # , 2012. +# sao sang , 2013. # Sơn Nguyễn , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" @@ -20,49 +21,49 @@ msgstr "" "Language: vi\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "Giúp đỡ" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "Cá nhân" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "Cài đặt" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "Người dùng" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "Ứng dụng" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "Quản trị" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Tải về ZIP đã bị tắt." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Tập tin cần phải được tải về từng người một." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Trở lại tập tin" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Tập tin được chọn quá lớn để tạo tập tin ZIP." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" -msgstr "" +msgstr "không thể phát hiện được" #: json.php:28 msgid "Application is not enabled" @@ -88,6 +89,17 @@ msgstr "Văn bản" msgid "Images" msgstr "Hình ảnh" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "1 giây trước" diff --git a/l10n/vi/settings.po b/l10n/vi/settings.po index a8cdfa2fbb..4b2e2d498d 100644 --- a/l10n/vi/settings.po +++ b/l10n/vi/settings.po @@ -6,6 +6,7 @@ # , 2012. # , 2012. # , 2012. +# sao sang , 2013. # Son Nguyen , 2012. # Sơn Nguyễn , 2012. # , 2012. @@ -13,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 18:50+0000\n" +"Last-Translator: saosangm \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -34,7 +35,7 @@ msgstr "Lỗi xác thực" #: ajax/changedisplayname.php:28 msgid "Unable to change display name" -msgstr "" +msgstr "Không thể thay đổi tên hiển thị" #: ajax/creategroup.php:10 msgid "Group already exists" @@ -86,13 +87,13 @@ msgstr "Không thể thêm người dùng vào nhóm %s" msgid "Unable to remove user from group %s" msgstr "Không thể xóa người dùng từ nhóm %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." -msgstr "" +msgstr "Không thể cập nhật ứng dụng" #: js/apps.js:30 msgid "Update to {appversion}" -msgstr "" +msgstr "Cập nhật lên {appversion}" #: js/apps.js:36 js/apps.js:76 msgid "Disable" @@ -104,15 +105,15 @@ msgstr "Bật" #: js/apps.js:55 msgid "Please wait...." -msgstr "" +msgstr "Xin hãy đợi..." #: js/apps.js:84 msgid "Updating...." -msgstr "" +msgstr "Đang cập nhật..." #: js/apps.js:87 msgid "Error while updating app" -msgstr "" +msgstr "Lỗi khi cập nhật ứng dụng" #: js/apps.js:87 msgid "Error" @@ -120,7 +121,7 @@ msgstr "Lỗi" #: js/apps.js:90 msgid "Updated" -msgstr "" +msgstr "Đã cập nhật" #: js/personal.js:96 msgid "Saving..." @@ -156,27 +157,27 @@ msgstr "Cập nhật" #: templates/help.php:3 msgid "User Documentation" -msgstr "" +msgstr "Tài liệu người sử dụng" #: templates/help.php:4 msgid "Administrator Documentation" -msgstr "" +msgstr "Tài liệu quản trị" #: templates/help.php:6 msgid "Online Documentation" -msgstr "" +msgstr "Tài liệu trực tuyến" #: templates/help.php:7 msgid "Forum" -msgstr "" +msgstr "Diễn đàn" #: templates/help.php:9 msgid "Bugtracker" -msgstr "" +msgstr "Hệ ghi nhận lỗi" #: templates/help.php:11 msgid "Commercial Support" -msgstr "" +msgstr "Hỗ trợ có phí" #: templates/personal.php:8 #, php-format @@ -189,15 +190,15 @@ msgstr "Khách hàng" #: templates/personal.php:13 msgid "Download Desktop Clients" -msgstr "" +msgstr "Download bộ cài trên desktop" #: templates/personal.php:14 msgid "Download Android Client" -msgstr "" +msgstr "Download bộ cài trên Android" #: templates/personal.php:15 msgid "Download iOS Client" -msgstr "" +msgstr "Download bộ cài trên iOS" #: templates/personal.php:23 templates/users.php:23 templates/users.php:81 msgid "Password" @@ -229,19 +230,19 @@ msgstr "Đổi mật khẩu" #: templates/personal.php:41 templates/users.php:80 msgid "Display Name" -msgstr "" +msgstr "Tên hiển thị" #: templates/personal.php:42 msgid "Your display name was changed" -msgstr "" +msgstr "Tên hiển thị của bạn đã được thay đổi" #: templates/personal.php:43 msgid "Unable to change your display name" -msgstr "" +msgstr "Không thể thay đổi tên hiển thị của bạn" #: templates/personal.php:46 msgid "Change display name" -msgstr "" +msgstr "Thay đổi tên hiển thị" #: templates/personal.php:55 msgid "Email" @@ -265,15 +266,15 @@ msgstr "Hỗ trợ dịch thuật" #: templates/personal.php:74 msgid "WebDAV" -msgstr "" +msgstr "WebDAV" #: templates/personal.php:76 msgid "Use this address to connect to your ownCloud in your file manager" -msgstr "" +msgstr "Sử dụng địa chỉ này để kết nối ownCloud của bạn trong trình quản lý file của bạn" #: templates/personal.php:85 msgid "Version" -msgstr "" +msgstr "Phiên bản" #: templates/personal.php:87 msgid "" @@ -287,7 +288,7 @@ msgstr "Được phát triển bởi , 2012. +# sao sang , 2013. # Sơn Nguyễn , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 19:00+0000\n" +"Last-Translator: saosangm \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -174,7 +175,7 @@ msgstr "mà không giữ chỗ nào, ví dụ như \"objectClass = osixGroup\"." #: templates/settings.php:31 msgid "Connection Settings" -msgstr "" +msgstr "Connection Settings" #: templates/settings.php:33 msgid "Configuration Active" @@ -200,15 +201,15 @@ msgstr "" #: templates/settings.php:36 msgid "Backup (Replica) Port" -msgstr "" +msgstr "Cổng sao lưu (Replica)" #: templates/settings.php:37 msgid "Disable Main Server" -msgstr "" +msgstr "Tắt máy chủ chính" #: templates/settings.php:37 msgid "When switched on, ownCloud will only connect to the replica server." -msgstr "" +msgstr "When switched on, ownCloud will only connect to the replica server." #: templates/settings.php:38 msgid "Use TLS" @@ -216,7 +217,7 @@ msgstr "Sử dụng TLS" #: templates/settings.php:38 msgid "Do not use it additionally for LDAPS connections, it will fail." -msgstr "" +msgstr "Do not use it additionally for LDAPS connections, it will fail." #: templates/settings.php:39 msgid "Case insensitve LDAP server (Windows)" @@ -242,7 +243,7 @@ msgstr "trong vài giây. Một sự thay đổi bộ nhớ cache." #: templates/settings.php:43 msgid "Directory Settings" -msgstr "" +msgstr "Directory Settings" #: templates/settings.php:45 msgid "User Display Name Field" @@ -262,11 +263,11 @@ msgstr "" #: templates/settings.php:47 msgid "User Search Attributes" -msgstr "" +msgstr "User Search Attributes" #: templates/settings.php:47 templates/settings.php:50 msgid "Optional; one attribute per line" -msgstr "" +msgstr "Optional; one attribute per line" #: templates/settings.php:48 msgid "Group Display Name Field" @@ -286,7 +287,7 @@ msgstr "" #: templates/settings.php:50 msgid "Group Search Attributes" -msgstr "" +msgstr "Group Search Attributes" #: templates/settings.php:51 msgid "Group-Member association" @@ -294,7 +295,7 @@ msgstr "Nhóm thành viên Cộng đồng" #: templates/settings.php:53 msgid "Special Attributes" -msgstr "" +msgstr "Special Attributes" #: templates/settings.php:56 msgid "in bytes" diff --git a/l10n/vi/user_webdavauth.po b/l10n/vi/user_webdavauth.po index 5442bdaff4..57c796e00d 100644 --- a/l10n/vi/user_webdavauth.po +++ b/l10n/vi/user_webdavauth.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# sao sang , 2013. # Sơn Nguyễn , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-15 00:03+0100\n" -"PO-Revision-Date: 2013-01-14 23:04+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 18:30+0000\n" +"Last-Translator: saosangm \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,15 +21,15 @@ msgstr "" #: templates/settings.php:3 msgid "WebDAV Authentication" -msgstr "" +msgstr "Xác thực WebDAV" #: templates/settings.php:4 msgid "URL: http://" -msgstr "" +msgstr "URL: http://" -#: templates/settings.php:6 +#: templates/settings.php:7 msgid "" "ownCloud will send the user credentials to this URL. This plugin checks the " "response and will interpret the HTTP statuscodes 401 and 403 as invalid " "credentials, and all other responses as valid credentials." -msgstr "" +msgstr "ownCloud sẽ gửi chứng thư người dùng tới URL này. Tính năng này kiểm tra trả lời và sẽ hiểu mã 401 và 403 của giao thức HTTP là chứng thư không hợp lệ, và mọi trả lời khác được coi là hợp lệ." diff --git a/l10n/zh_CN.GB2312/files.po b/l10n/zh_CN.GB2312/files.po index 000f4c3195..009c2cf362 100644 --- a/l10n/zh_CN.GB2312/files.po +++ b/l10n/zh_CN.GB2312/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n" "MIME-Version: 1.0\n" @@ -80,51 +80,52 @@ msgstr "" msgid "Files" msgstr "文件" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "取消共享" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "删除" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "重命名" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "Pending" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} 已存在" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "替换" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "推荐名称" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "取消" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "已替换 {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "撤销" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "已用 {old_name} 替换 {new_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -164,64 +165,60 @@ msgstr "不能上传你指定的文件,可能因为它是个文件夹或者大 msgid "Upload Error" msgstr "上传错误" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "关闭" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "Pending" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 个文件正在上传" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} 个文件正在上传" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "上传取消了" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "文件正在上传。关闭页面会取消上传。" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "网址不能为空。" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "名字" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "大小" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "修改日期" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 个文件夹" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} 个文件夹" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 个文件" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} 个文件" @@ -278,7 +275,7 @@ msgid "From link" msgstr "来自链接" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -293,6 +290,10 @@ msgstr "这里没有东西.上传点什么!" msgid "Download" msgstr "下载" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "取消共享" + #: templates/index.php:105 msgid "Upload too large" msgstr "上传的文件太大了" diff --git a/l10n/zh_CN.GB2312/files_encryption.po b/l10n/zh_CN.GB2312/files_encryption.po index bacd5c9294..262bed13b5 100644 --- a/l10n/zh_CN.GB2312/files_encryption.po +++ b/l10n/zh_CN.GB2312/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: zh_CN.GB2312\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "加密" diff --git a/l10n/zh_CN.GB2312/lib.po b/l10n/zh_CN.GB2312/lib.po index d03b24aa3a..54a6583f57 100644 --- a/l10n/zh_CN.GB2312/lib.po +++ b/l10n/zh_CN.GB2312/lib.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n" "MIME-Version: 1.0\n" @@ -18,47 +18,47 @@ msgstr "" "Language: zh_CN.GB2312\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "帮助" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "私人" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "设置" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "用户" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "程序" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "管理员" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIP 下载已关闭" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "需要逐个下载文件。" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "返回到文件" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "选择的文件太大而不能生成 zip 文件。" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -86,6 +86,17 @@ msgstr "文本" msgid "Images" msgstr "图片" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "秒前" diff --git a/l10n/zh_CN/files.po b/l10n/zh_CN/files.po index 8fe77aaf11..adec54ddf3 100644 --- a/l10n/zh_CN/files.po +++ b/l10n/zh_CN/files.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -27,16 +27,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "无法移动 %s - 同名文件已存在" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "无法移动 %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "无法重命名文件" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -85,51 +85,52 @@ msgstr "无效文件夹。" msgid "Files" msgstr "文件" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "取消分享" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "删除" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "重命名" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "操作等待中" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} 已存在" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "替换" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "建议名称" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "取消" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "替换 {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "撤销" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "已将 {old_name}替换成 {new_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -169,64 +170,60 @@ msgstr "无法上传文件,因为它是一个目录或者大小为 0 字节" msgid "Upload Error" msgstr "上传错误" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "关闭" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "操作等待中" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1个文件上传中" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} 个文件上传中" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "上传已取消" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "文件正在上传中。现在离开此页会导致上传动作被取消。" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL不能为空" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "无效文件夹名。'共享' 是 Owncloud 预留的文件夹名。" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "名称" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "大小" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "修改日期" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1个文件夹" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} 个文件夹" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 个文件" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} 个文件" @@ -283,7 +280,7 @@ msgid "From link" msgstr "来自链接" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -298,6 +295,10 @@ msgstr "这里还什么都没有。上传些东西吧!" msgid "Download" msgstr "下载" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "取消分享" + #: templates/index.php:105 msgid "Upload too large" msgstr "上传文件过大" diff --git a/l10n/zh_CN/files_encryption.po b/l10n/zh_CN/files_encryption.po index f7e50a5ccc..b9d48e1dce 100644 --- a/l10n/zh_CN/files_encryption.po +++ b/l10n/zh_CN/files_encryption.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -18,28 +18,6 @@ msgstr "" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "加密" diff --git a/l10n/zh_CN/lib.po b/l10n/zh_CN/lib.po index 7dd9eb3837..fb9d07ad2c 100644 --- a/l10n/zh_CN/lib.po +++ b/l10n/zh_CN/lib.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -19,47 +19,47 @@ msgstr "" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "帮助" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "个人" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "设置" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "用户" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "应用" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "管理" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIP 下载已经关闭" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "需要逐一下载文件" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "回到文件" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "选择的文件太大,无法生成 zip 文件。" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -87,6 +87,17 @@ msgstr "文本" msgid "Images" msgstr "图像" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "几秒前" diff --git a/l10n/zh_HK/files.po b/l10n/zh_HK/files.po index 172bdcbcee..215528e327 100644 --- a/l10n/zh_HK/files.po +++ b/l10n/zh_HK/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n" "MIME-Version: 1.0\n" @@ -78,51 +78,52 @@ msgstr "" msgid "Files" msgstr "" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "" -#: js/filelist.js:208 js/filelist.js:210 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "replace" -msgstr "" - -#: js/filelist.js:208 -msgid "suggest name" -msgstr "" - -#: js/filelist.js:208 js/filelist.js:210 -msgid "cancel" -msgstr "" - -#: js/filelist.js:253 -msgid "replaced {new_name}" +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" msgstr "" #: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "" @@ -162,64 +163,60 @@ msgstr "" msgid "Upload Error" msgstr "" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "" -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "" @@ -276,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash" +msgid "Trash bin" msgstr "" #: templates/index.php:46 @@ -291,6 +288,10 @@ msgstr "" msgid "Download" msgstr "" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "" + #: templates/index.php:105 msgid "Upload too large" msgstr "" diff --git a/l10n/zh_HK/files_encryption.po b/l10n/zh_HK/files_encryption.po index c8652a2cde..b213e0bbd8 100644 --- a/l10n/zh_HK/files_encryption.po +++ b/l10n/zh_HK/files_encryption.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n" "MIME-Version: 1.0\n" @@ -17,28 +17,6 @@ msgstr "" "Language: zh_HK\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "" diff --git a/l10n/zh_HK/lib.po b/l10n/zh_HK/lib.po index f3bc0dc6e1..f59d6a5279 100644 --- a/l10n/zh_HK/lib.po +++ b/l10n/zh_HK/lib.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n" "MIME-Version: 1.0\n" @@ -17,47 +17,47 @@ msgstr "" "Language: zh_HK\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "" -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" @@ -85,6 +85,17 @@ msgstr "" msgid "Images" msgstr "" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "" diff --git a/l10n/zh_TW/files.po b/l10n/zh_TW/files.po index 6f12f19b47..230cb56828 100644 --- a/l10n/zh_TW/files.po +++ b/l10n/zh_TW/files.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" @@ -26,16 +26,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "無法移動 %s - 同名的檔案已經存在" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "無法移動 %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "無法重新命名檔案" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -84,51 +84,52 @@ msgstr "無效的資料夾。" msgid "Files" msgstr "檔案" -#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86 -msgid "Unshare" -msgstr "取消共享" - -#: js/fileactions.js:119 +#: js/fileactions.js:116 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "刪除" -#: js/fileactions.js:187 +#: js/fileactions.js:184 msgid "Rename" msgstr "重新命名" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "等候中" + +#: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" msgstr "{new_name} 已經存在" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "replace" msgstr "取代" -#: js/filelist.js:208 +#: js/filelist.js:253 msgid "suggest name" msgstr "建議檔名" -#: js/filelist.js:208 js/filelist.js:210 +#: js/filelist.js:253 js/filelist.js:255 msgid "cancel" msgstr "取消" -#: js/filelist.js:253 +#: js/filelist.js:295 msgid "replaced {new_name}" msgstr "已取代 {new_name}" -#: js/filelist.js:253 js/filelist.js:255 +#: js/filelist.js:295 js/filelist.js:297 msgid "undo" msgstr "復原" -#: js/filelist.js:255 +#: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" msgstr "使用 {new_name} 取代 {old_name}" -#: js/filelist.js:280 +#: js/filelist.js:322 msgid "perform delete operation" msgstr "進行刪除動作" @@ -168,64 +169,60 @@ msgstr "無法上傳您的檔案因為它可能是一個目錄或檔案大小為 msgid "Upload Error" msgstr "上傳發生錯誤" -#: js/files.js:278 +#: js/files.js:272 msgid "Close" msgstr "關閉" -#: js/files.js:297 js/files.js:413 js/files.js:444 -msgid "Pending" -msgstr "等候中" - -#: js/files.js:317 +#: js/files.js:311 msgid "1 file uploading" msgstr "1 個檔案正在上傳" -#: js/files.js:320 js/files.js:375 js/files.js:390 +#: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" msgstr "{count} 個檔案正在上傳" -#: js/files.js:393 js/files.js:428 +#: js/files.js:387 js/files.js:422 msgid "Upload cancelled." msgstr "上傳取消" -#: js/files.js:502 +#: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "檔案上傳中。離開此頁面將會取消上傳。" -#: js/files.js:575 +#: js/files.js:569 msgid "URL cannot be empty." msgstr "URL 不能為空白." -#: js/files.js:580 +#: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "無效的資料夾名稱,'Shared' 的使用被 Owncloud 保留" -#: js/files.js:953 templates/index.php:67 +#: js/files.js:947 templates/index.php:67 msgid "Name" msgstr "名稱" -#: js/files.js:954 templates/index.php:78 +#: js/files.js:948 templates/index.php:78 msgid "Size" msgstr "大小" -#: js/files.js:955 templates/index.php:80 +#: js/files.js:949 templates/index.php:80 msgid "Modified" msgstr "修改" -#: js/files.js:974 +#: js/files.js:968 msgid "1 folder" msgstr "1 個資料夾" -#: js/files.js:976 +#: js/files.js:970 msgid "{count} folders" msgstr "{count} 個資料夾" -#: js/files.js:984 +#: js/files.js:978 msgid "1 file" msgstr "1 個檔案" -#: js/files.js:986 +#: js/files.js:980 msgid "{count} files" msgstr "{count} 個檔案" @@ -282,8 +279,8 @@ msgid "From link" msgstr "從連結" #: templates/index.php:40 -msgid "Trash" -msgstr "回收筒" +msgid "Trash bin" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" @@ -297,6 +294,10 @@ msgstr "沒有任何東西。請上傳內容!" msgid "Download" msgstr "下載" +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "取消共享" + #: templates/index.php:105 msgid "Upload too large" msgstr "上傳過大" diff --git a/l10n/zh_TW/files_encryption.po b/l10n/zh_TW/files_encryption.po index 785876bb0f..a07b9404ea 100644 --- a/l10n/zh_TW/files_encryption.po +++ b/l10n/zh_TW/files_encryption.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-06 00:05+0100\n" -"PO-Revision-Date: 2013-02-05 23:05+0000\n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:09+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" @@ -19,28 +19,6 @@ msgstr "" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: js/settings-personal.js:17 -msgid "" -"Please switch to your ownCloud client and change your encryption password to" -" complete the conversion." -msgstr "請至您的 ownCloud 客戶端程式修改您的加密密碼以完成轉換。" - -#: js/settings-personal.js:17 -msgid "switched to client side encryption" -msgstr "已切換為客戶端加密" - -#: js/settings-personal.js:21 -msgid "Change encryption password to login password" -msgstr "將加密密碼修改為登入密碼" - -#: js/settings-personal.js:25 -msgid "Please check your passwords and try again." -msgstr "請檢查您的密碼並再試一次。" - -#: js/settings-personal.js:25 -msgid "Could not change your file encryption password to your login password" -msgstr "無法變更您的檔案加密密碼為登入密碼" - #: templates/settings-personal.php:4 templates/settings.php:5 msgid "Encryption" msgstr "加密" diff --git a/l10n/zh_TW/lib.po b/l10n/zh_TW/lib.po index 8a76773c07..97f9bbed32 100644 --- a/l10n/zh_TW/lib.po +++ b/l10n/zh_TW/lib.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-24 00:06+0100\n" -"PO-Revision-Date: 2013-01-23 10:07+0000\n" -"Last-Translator: pellaeon \n" +"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,47 +21,47 @@ msgstr "" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: app.php:301 +#: app.php:339 msgid "Help" msgstr "說明" -#: app.php:308 +#: app.php:346 msgid "Personal" msgstr "個人" -#: app.php:313 +#: app.php:351 msgid "Settings" msgstr "設定" -#: app.php:318 +#: app.php:356 msgid "Users" msgstr "使用者" -#: app.php:325 +#: app.php:363 msgid "Apps" msgstr "應用程式" -#: app.php:327 +#: app.php:365 msgid "Admin" msgstr "管理" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "ZIP 下載已關閉" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "檔案需要逐一下載" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "回到檔案列表" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "選擇的檔案太大以致於無法產生壓縮檔" -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "無法判斷" @@ -89,6 +89,17 @@ msgstr "文字" msgid "Images" msgstr "圖片" +#: setup.php:624 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:625 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + #: template.php:113 msgid "seconds ago" msgstr "幾秒前" diff --git a/lib/l10n/bg_BG.php b/lib/l10n/bg_BG.php index 31f37458b8..fed7f29cbb 100644 --- a/lib/l10n/bg_BG.php +++ b/lib/l10n/bg_BG.php @@ -9,6 +9,7 @@ "Files need to be downloaded one by one." => "Файловете трябва да се изтеглят един по един.", "Back to Files" => "Назад към файловете", "Selected files too large to generate zip file." => "Избраните файлове са прекалено големи за генерирането на ZIP архив.", +"couldn't be determined" => "не може да се определи", "Application is not enabled" => "Приложението не е включено.", "Authentication error" => "Възникна проблем с идентификацията", "Token expired. Please reload page." => "Ключът е изтекъл, моля презаредете страницата", diff --git a/lib/l10n/vi.php b/lib/l10n/vi.php index 8b7242ae61..ea9660093a 100644 --- a/lib/l10n/vi.php +++ b/lib/l10n/vi.php @@ -9,6 +9,7 @@ "Files need to be downloaded one by one." => "Tập tin cần phải được tải về từng người một.", "Back to Files" => "Trở lại tập tin", "Selected files too large to generate zip file." => "Tập tin được chọn quá lớn để tạo tập tin ZIP.", +"couldn't be determined" => "không thể phát hiện được", "Application is not enabled" => "Ứng dụng không được BẬT", "Authentication error" => "Lỗi xác thực", "Token expired. Please reload page." => "Mã Token đã hết hạn. Hãy tải lại trang.", diff --git a/settings/l10n/bg_BG.php b/settings/l10n/bg_BG.php index 1cbbd5321c..418546a630 100644 --- a/settings/l10n/bg_BG.php +++ b/settings/l10n/bg_BG.php @@ -1,11 +1,25 @@ "Възникна проблем с идентификацията", +"Language changed" => "Езикът е променен", "Invalid request" => "Невалидна заявка", "Enable" => "Включено", "Error" => "Грешка", +"__language_name__" => "__language_name__", +"Add your App" => "Добавете Ваше приложение", +"Select an App" => "Изберете приложение", "Update" => "Обновяване", "Password" => "Парола", +"Unable to change your password" => "Промяната на паролата не беше извършена", +"Current password" => "Текуща парола", +"New password" => "Нова парола", +"show" => "показва", +"Change password" => "Промяна на паролата", "Email" => "E-mail", +"Your email address" => "Вашия email адрес", +"Language" => "Език", +"Help translate" => "Помогнете с превода", "Groups" => "Групи", +"Create" => "Създаване", +"Other" => "Други", "Delete" => "Изтриване" ); diff --git a/settings/l10n/vi.php b/settings/l10n/vi.php index a7682e7ed0..1b967b27b0 100644 --- a/settings/l10n/vi.php +++ b/settings/l10n/vi.php @@ -1,6 +1,7 @@ "Không thể tải danh sách ứng dụng từ App Store", "Authentication error" => "Lỗi xác thực", +"Unable to change display name" => "Không thể thay đổi tên hiển thị", "Group already exists" => "Nhóm đã tồn tại", "Unable to add group" => "Không thể thêm nhóm", "Could not enable app. " => "không thể kích hoạt ứng dụng.", @@ -13,9 +14,15 @@ "Admins can't remove themself from the admin group" => "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý", "Unable to add user to group %s" => "Không thể thêm người dùng vào nhóm %s", "Unable to remove user from group %s" => "Không thể xóa người dùng từ nhóm %s", +"Couldn't update app." => "Không thể cập nhật ứng dụng", +"Update to {appversion}" => "Cập nhật lên {appversion}", "Disable" => "Tắt", "Enable" => "Bật", +"Please wait...." => "Xin hãy đợi...", +"Updating...." => "Đang cập nhật...", +"Error while updating app" => "Lỗi khi cập nhật ứng dụng", "Error" => "Lỗi", +"Updated" => "Đã cập nhật", "Saving..." => "Đang tiến hành lưu ...", "__language_name__" => "__Ngôn ngữ___", "Add your App" => "Thêm ứng dụng của bạn", @@ -24,8 +31,17 @@ "See application page at apps.owncloud.com" => "Xem nhiều ứng dụng hơn tại apps.owncloud.com", "-licensed by " => "-Giấy phép được cấp bởi ", "Update" => "Cập nhật", +"User Documentation" => "Tài liệu người sử dụng", +"Administrator Documentation" => "Tài liệu quản trị", +"Online Documentation" => "Tài liệu trực tuyến", +"Forum" => "Diễn đàn", +"Bugtracker" => "Hệ ghi nhận lỗi", +"Commercial Support" => "Hỗ trợ có phí", "You have used %s of the available %s" => "Bạn đã sử dụng %s có sẵn %s ", "Clients" => "Khách hàng", +"Download Desktop Clients" => "Download bộ cài trên desktop", +"Download Android Client" => "Download bộ cài trên Android", +"Download iOS Client" => "Download bộ cài trên iOS", "Password" => "Mật khẩu", "Your password was changed" => "Mật khẩu của bạn đã được thay đổi.", "Unable to change your password" => "Không thể đổi mật khẩu", @@ -33,15 +49,29 @@ "New password" => "Mật khẩu mới ", "show" => "Hiện", "Change password" => "Đổi mật khẩu", +"Display Name" => "Tên hiển thị", +"Your display name was changed" => "Tên hiển thị của bạn đã được thay đổi", +"Unable to change your display name" => "Không thể thay đổi tên hiển thị của bạn", +"Change display name" => "Thay đổi tên hiển thị", "Email" => "Email", "Your email address" => "Email của bạn", "Fill in an email address to enable password recovery" => "Nhập địa chỉ email của bạn để khôi phục lại mật khẩu", "Language" => "Ngôn ngữ", "Help translate" => "Hỗ trợ dịch thuật", +"WebDAV" => "WebDAV", +"Use this address to connect to your ownCloud in your file manager" => "Sử dụng địa chỉ này để kết nối ownCloud của bạn trong trình quản lý file của bạn", +"Version" => "Phiên bản", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Được phát triển bởi cộng đồng ownCloud, mã nguồn đã được cấp phép theo chuẩn AGPL.", +"Login Name" => "Tên đăng nhập", "Groups" => "Nhóm", "Create" => "Tạo", +"Default Storage" => "Bộ nhớ mặc định", +"Unlimited" => "Không giới hạn", "Other" => "Khác", "Group Admin" => "Nhóm quản trị", +"Storage" => "Bộ nhớ", +"change display name" => "Thay đổi tên hiển thị", +"set new password" => "đặt mật khẩu mới", +"Default" => "Mặc định", "Delete" => "Xóa" ); From 71affd528c74410a53ae923da9750e1dcdb83d2f Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Sun, 10 Feb 2013 00:53:58 -0500 Subject: [PATCH 109/719] Fix public links --- apps/files_sharing/public.php | 238 ++++++---------------------------- 1 file changed, 40 insertions(+), 198 deletions(-) diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index 7159b21511..29b7b3dee7 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -1,21 +1,8 @@ execute(array($id)); - $row = $result->fetchRow(); - return $row; -} - - if (isset($_GET['t'])) { $token = $_GET['t']; $linkItem = OCP\Share::getShareByToken($token); @@ -24,24 +11,14 @@ if (isset($_GET['t'])) { $type = $linkItem['item_type']; $fileSource = $linkItem['file_source']; $shareOwner = $linkItem['uid_owner']; - - if (OCP\User::userExists($shareOwner) && $fileSource != -1 ) { - - $pathAndUser = getPathAndUser($linkItem['file_source']); - $fileOwner = $pathAndUser['user']; - - //if this is a reshare check the file owner also exists - if ($shareOwner != $fileOwner && ! OCP\User::userExists($fileOwner)) { - OCP\Util::writeLog('share', 'original file owner '.$fileOwner - .' does not exist for share '.$linkItem['id'], \OCP\Util::ERROR); - header('HTTP/1.0 404 Not Found'); - $tmpl = new OCP\Template('', '404', 'guest'); - $tmpl->printPage(); - exit(); - } - - //mount filesystem of file owner - OC_Util::setupFS($fileOwner); + if (OCP\User::userExists($shareOwner) && $fileSource != -1) { + OC_Util::setupFS($shareOwner); + $path = $linkItem['file_target']; + } else { + header('HTTP/1.0 404 Not Found'); + $tmpl = new OCP\Template('', '404', 'guest'); + $tmpl->printPage(); + exit(); } } } else { @@ -135,17 +112,12 @@ if ($linkItem) { } } } - $basePath = substr($pathAndUser['path'], strlen('/' . $fileOwner . '/files')); - $path = $basePath; - if (isset($_GET['path'])) { - $path .= $_GET['path']; - } - if (!$path || !\OC\Files\Filesystem::isValidPath($path) || !\OC\Files\Filesystem::file_exists($path)) { - OCP\Util::writeLog('share', 'Invalid path ' . $path . ' for share id ' . $linkItem['id'], \OCP\Util::ERROR); - header('HTTP/1.0 404 Not Found'); - $tmpl = new OCP\Template('', '404', 'guest'); - $tmpl->printPage(); - exit(); + $basePath = $path; + if (isset($_GET['path']) && \OC\Files\Filesystem::isReadable($_GET['path'])) { + $getPath = \OC\Files\Filesystem::normalizePath($_GET['path']); + $path .= $getPath; + } else { + $getPath = ''; } $dir = dirname($path); $file = basename($path); @@ -175,12 +147,6 @@ if ($linkItem) { $tmpl->assign('dir', $dir); $tmpl->assign('filename', $file); $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path)); - if (isset($_GET['path'])) { - $getPath = $_GET['path']; - } else { - $getPath = ''; - } - // $urlLinkIdentifiers= (isset($token)?'&t='.$token:'') .(isset($_GET['dir'])?'&dir='.$_GET['dir']:'') .(isset($_GET['file'])?'&file='.$_GET['file']:''); @@ -192,171 +158,37 @@ if ($linkItem) { OCP\Util::addscript('files', 'keyboardshortcuts'); $files = array(); $rootLength = strlen($basePath) + 1; - foreach (OC_Files::getDirectoryContent($path) as $i) { + foreach (\OC\Files\Filesystem::getDirectoryContent($path) as $i) { $i['date'] = OCP\Util::formatDate($i['mtime']); if ($i['type'] == 'file') { $fileinfo = pathinfo($i['name']); $i['basename'] = $fileinfo['filename']; - $i['extension'] = isset($fileinfo['extension']) ? ('.' . $fileinfo['extension']) : ''; + if (!empty($fileinfo['extension'])) { + $i['extension'] = '.' . $fileinfo['extension']; + } else { + $i['extension'] = ''; + } } - $i['directory'] = '/' . substr($i['directory'], $rootLength); - if ($i['directory'] == '/') { - $i['directory'] = ''; - } - $i['permissions'] = OCP\PERMISSION_READ; + $i['directory'] = $dir; $files[] = $i; } // Make breadcrumb $breadcrumb = array(); $pathtohere = ''; - - //add base breadcrumb - $breadcrumb[] = array('dir' => '/', 'name' => basename($basePath)); - - //add subdir breadcrumbs - foreach (explode('/', urldecode($getPath)) as $i) { + foreach (explode('/', $dir) as $i) { if ($i != '') { $pathtohere .= '/' . $i; $breadcrumb[] = array('dir' => $pathtohere, 'name' => $i); - $path = $linkItem['path']; - if (isset($_GET['path'])) { - $path .= $_GET['path']; - $dir .= $_GET['path']; - if (!\OC\Files\Filesystem::file_exists($path)) { - header('HTTP/1.0 404 Not Found'); - $tmpl = new OCP\Template('', '404', 'guest'); - $tmpl->printPage(); - exit(); - } - } - - $list = new OCP\Template('files', 'part.list', ''); - $list->assign('files', $files, false); - $list->assign('publicListView', true); - $list->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=', false); - $list->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=', false); - $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', ''); - $breadcrumbNav->assign('breadcrumb', $breadcrumb, false); - $breadcrumbNav->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=', false); - $folder = new OCP\Template('files', 'index', ''); - $folder->assign('fileList', $list->fetchPage(), false); - $folder->assign('breadcrumb', $breadcrumbNav->fetchPage(), false); - $folder->assign('isCreatable', false); - $folder->assign('permissions', 0); - $folder->assign('files', $files); - $folder->assign('uploadMaxFilesize', 0); - $folder->assign('uploadMaxHumanFilesize', 0); - $folder->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); - $tmpl->assign('folder', $folder->fetchPage(), false); - $tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); - $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=' . urlencode($getPath)); - } else { - // Show file preview if viewer is available - if ($type == 'file') { - $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download'); - } else { - OCP\Util::addStyle('files_sharing', 'public'); - OCP\Util::addScript('files_sharing', 'public'); - OCP\Util::addScript('files', 'fileactions'); - $tmpl = new OCP\Template('files_sharing', 'public', 'base'); - $tmpl->assign('owner', $uidOwner); - // Show file list - if (\OC\Files\Filesystem::is_dir($path)) { - OCP\Util::addStyle('files', 'files'); - OCP\Util::addScript('files', 'files'); - OCP\Util::addScript('files', 'filelist'); - $files = array(); - $rootLength = strlen($baseDir) + 1; - foreach (OC_Files::getDirectoryContent($path) as $i) { - $i['date'] = OCP\Util::formatDate($i['mtime']); - if ($i['type'] == 'file') { - $fileinfo = pathinfo($i['name']); - $i['basename'] = $fileinfo['filename']; - $i['extension'] = isset($fileinfo['extension']) ? ('.' . $fileinfo['extension']) : ''; - } - $i['directory'] = '/' . substr('/' . $uidOwner . '/files' . $i['directory'], $rootLength); - if ($i['directory'] == '/') { - $i['directory'] = ''; - } - $i['permissions'] = OCP\PERMISSION_READ; - $files[] = $i; - } - // Make breadcrumb - $breadcrumb = array(); - $pathtohere = ''; - $count = 1; - foreach (explode('/', $dir) as $i) { - if ($i != '') { - if ($i != $baseDir) { - $pathtohere .= '/' . $i; - } - if (strlen($pathtohere) < strlen($_GET['dir'])) { - continue; - } - $breadcrumb[] = array('dir' => str_replace($_GET['dir'], "", $pathtohere, $count), 'name' => $i); - } - } - $list = new OCP\Template('files', 'part.list', ''); - $list->assign('files', $files, false); - $list->assign('publicListView', true); - $list->assign('baseURL', OCP\Util::linkToPublic('files') . '&dir=' . urlencode($_GET['dir']) . '&path=', false); - $list->assign('downloadURL', OCP\Util::linkToPublic('files') . '&download&dir=' . urlencode($_GET['dir']) . '&path=', false); - $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', ''); - $breadcrumbNav->assign('breadcrumb', $breadcrumb, false); - $breadcrumbNav->assign('baseURL', OCP\Util::linkToPublic('files') . '&dir=' . urlencode($_GET['dir']) . '&path=', false); - $folder = new OCP\Template('files', 'index', ''); - $folder->assign('fileList', $list->fetchPage(), false); - $folder->assign('breadcrumb', $breadcrumbNav->fetchPage(), false); - $folder->assign('dir', basename($dir)); - $folder->assign('isCreatable', false); - $folder->assign('permissions', 0); - $folder->assign('files', $files); - $folder->assign('uploadMaxFilesize', 0); - $folder->assign('uploadMaxHumanFilesize', 0); - $folder->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); - $tmpl->assign('folder', $folder->fetchPage(), false); - $tmpl->assign('uidOwner', $uidOwner); - $tmpl->assign('dir', basename($dir)); - $tmpl->assign('filename', basename($path)); - $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path)); - $tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); - if (isset($_GET['path'])) { - $getPath = $_GET['path']; - } else { - $getPath = ''; - } - $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . '&download&dir=' . urlencode($_GET['dir']) . '&path=' . urlencode($getPath), false); - } else { - // Show file preview if viewer is available - $tmpl->assign('uidOwner', $uidOwner); - $tmpl->assign('dir', dirname($path)); - $tmpl->assign('filename', basename($path)); - $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path)); - if ($type == 'file') { - $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . '&file=' . urlencode($_GET['file']) . '&download', false); - } else { - if (isset($_GET['path'])) { - $getPath = $_GET['path']; - } else { - $getPath = ''; - } - $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . '&download&dir=' . urlencode($_GET['dir']) . '&path=' . urlencode($getPath), false); - } - } - $tmpl->printPage(); - } } - $tmpl->printPage(); } - $list = new OCP\Template('files', 'part.list', ''); $list->assign('files', $files, false); $list->assign('disableSharing', true); - $list->assign('baseURL', OCP\Util::linkToPublic('files').$urlLinkIdentifiers.'&path=', false); - $list->assign('downloadURL', OCP\Util::linkToPublic('files').$urlLinkIdentifiers.'&download&path=', false); - $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '' ); + $list->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=', false); + $list->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=', false); + $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', ''); $breadcrumbNav->assign('breadcrumb', $breadcrumb, false); - $breadcrumbNav->assign('baseURL', OCP\Util::linkToPublic('files').$urlLinkIdentifiers.'&path=', false); + $breadcrumbNav->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=', false); $folder = new OCP\Template('files', 'index', ''); $folder->assign('fileList', $list->fetchPage(), false); $folder->assign('breadcrumb', $breadcrumbNav->fetchPage(), false); @@ -367,14 +199,24 @@ if ($linkItem) { $folder->assign('uploadMaxFilesize', 0); $folder->assign('uploadMaxHumanFilesize', 0); $folder->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); + $folder->assign('usedSpacePercent', 0); $tmpl->assign('folder', $folder->fetchPage(), false); $tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); - $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') - .$urlLinkIdentifiers.'&download&path='.urlencode($getPath)); + $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=' . urlencode($getPath)); } else { - OCP\Util::writeLog('share', 'could not resolve linkItem', \OCP\Util::DEBUG); + // Show file preview if viewer is available + if ($type == 'file') { + $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download'); + } else { + $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') + .$urlLinkIdentifiers.'&download&path='.urlencode($getPath)); + } } + $tmpl->printPage(); } + exit(); +} else { + OCP\Util::writeLog('share', 'could not resolve linkItem', \OCP\Util::DEBUG); } header('HTTP/1.0 404 Not Found'); $tmpl = new OCP\Template('', '404', 'guest'); From b7b50f8082c0c27b462f94d3f0393c3392dc9a06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Sun, 10 Feb 2013 11:14:03 +0100 Subject: [PATCH 110/719] remove hascontrols from trash bin file list table --- apps/files_trashbin/templates/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_trashbin/templates/index.php b/apps/files_trashbin/templates/index.php index 24e4a0e6c6..c3e51b4bec 100644 --- a/apps/files_trashbin/templates/index.php +++ b/apps/files_trashbin/templates/index.php @@ -9,7 +9,7 @@
t('Nothing in here. Your trash bin is empty!')?>
- +
- - + + '.$l->t('Applicable').''; ?> @@ -30,7 +30,7 @@ + placeholder="t('Folder name'); ?>" /> From b05f05ec4a254ca5c2418fee473b648e52bb7e1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Thu, 14 Feb 2013 14:26:49 +0100 Subject: [PATCH 226/719] make store function static --- apps/files_versions/lib/versions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php index 9f021bc4f8..c537fcf351 100644 --- a/apps/files_versions/lib/versions.php +++ b/apps/files_versions/lib/versions.php @@ -55,7 +55,7 @@ class Storage { /** * store a new version of a file. */ - public function store($filename) { + public static function store($filename) { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { $owner = \OC\Files\Filesystem::getOwner($filename); if ( $owner != \OCP\User::getUser() ) { From 53a3a307e8f7040e0a9f7f87648eedf03100ba11 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 14 Feb 2013 15:47:14 +0100 Subject: [PATCH 227/719] no ugly border around checkboxes or radio buttons --- core/css/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/css/styles.css b/core/css/styles.css index c88a45fd46..34f1d388c1 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -34,7 +34,7 @@ filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#35537a', endC /* INPUTS */ input[type="text"], input[type="password"] { cursor:text; } -input, textarea, select, button, .button, #quota, div.jp-progress, .pager li a { +input:not([type="checkbox"]):not([type="radio"]), textarea, select, button, .button, #quota, div.jp-progress, .pager li a { width:10em; margin:.3em; padding:.6em .5em .4em; font-size:1em; font-family:Arial, Verdana, sans-serif; background:#fff; color:#333; border:1px solid #ddd; outline:none; From c5d716effe7adec67956d7dec006d8c258c2dcbe Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 14 Feb 2013 15:47:48 +0100 Subject: [PATCH 228/719] fixing javascript errors IE8 in apps management --- settings/js/apps.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/js/apps.js b/settings/js/apps.js index 3bc3488e49..8c266c66e4 100644 --- a/settings/js/apps.js +++ b/settings/js/apps.js @@ -134,7 +134,7 @@ OC.Settings.Apps = OC.Settings.Apps || { if(container.children('li[data-id="'+entry.id+'"]').length === 0){ var li=$('
  • '); li.attr('data-id', entry.id); - var img= $('').attr({ src: entry.icon, class:'icon'}); + var img= $('').attr({ src: entry.icon}); var a=$('').attr('href', entry.href); a.text(entry.name); a.prepend(img); From 1edfe874f5a3971a31fe8bc586cdbc56273570e8 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 14 Feb 2013 15:53:36 +0100 Subject: [PATCH 229/719] only style text, password and search inputs like inputs, instead of using unsupported :not selector --- core/css/styles.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/css/styles.css b/core/css/styles.css index 34f1d388c1..5662e50876 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -34,7 +34,8 @@ filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#35537a', endC /* INPUTS */ input[type="text"], input[type="password"] { cursor:text; } -input:not([type="checkbox"]):not([type="radio"]), textarea, select, button, .button, #quota, div.jp-progress, .pager li a { +input[type="text"], input[type="password"], input[type="search"], +textarea, select, button, .button, #quota, div.jp-progress, .pager li a { width:10em; margin:.3em; padding:.6em .5em .4em; font-size:1em; font-family:Arial, Verdana, sans-serif; background:#fff; color:#333; border:1px solid #ddd; outline:none; From 6a250c877f2f4446654cb249e9b577f37e41c889 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 14 Feb 2013 16:10:52 +0100 Subject: [PATCH 230/719] fixing javascript errors IE8 in personal settings --- apps/files_external/js/settings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index 172ef097fb..1269039527 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -47,7 +47,7 @@ OC.MountConfig={ oldUsers.splice($.inArray(applicable, oldUsers), 1); } } - $.post(OC.filePath('files_external', 'ajax', 'addMountPoint.php'), { mountPoint: mountPoint, class: backendClass, classOptions: classOptions, mountType: mountType, applicable: applicable, isPersonal: isPersonal }); + $.post(OC.filePath('files_external', 'ajax', 'addMountPoint.php'), { mountPoint: mountPoint, 'class': backendClass, classOptions: classOptions, mountType: mountType, applicable: applicable, isPersonal: isPersonal }); }); var mountType = 'group'; $.each(oldGroups, function(index, applicable) { @@ -61,7 +61,7 @@ OC.MountConfig={ var isPersonal = true; var mountType = 'user'; var applicable = OC.currentUser; - $.post(OC.filePath('files_external', 'ajax', 'addMountPoint.php'), { mountPoint: mountPoint, class: backendClass, classOptions: classOptions, mountType: mountType, applicable: applicable, isPersonal: isPersonal }); + $.post(OC.filePath('files_external', 'ajax', 'addMountPoint.php'), { mountPoint: mountPoint, 'class': backendClass, classOptions: classOptions, mountType: mountType, applicable: applicable, isPersonal: isPersonal }); } return true; } From 0f405d9895e23acbe524f8cd6cb1452e50a4afa4 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 14 Feb 2013 16:38:10 +0100 Subject: [PATCH 231/719] fix Users settings header bar element positioning, close #1686 --- settings/css/settings.css | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/settings/css/settings.css b/settings/css/settings.css index 703395f56d..689c54d04b 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -43,13 +43,18 @@ tr:hover>td.remove>a { float:right; } li.selected { background-color:#ddd; } table:not(.nostyle) { width:100%; } #rightcontent { padding-left: 1em; } -div.quota { float:right; display:block; position:absolute; right:25em; top:0; } +div.quota { float:right; display:block; position:absolute; right:25em; top:-1px; } div.quota-select-wrapper { position: relative; } -select.quota { position:absolute; left:0; top:0.5em; width:10em; } +select.quota { position:absolute; left:0; top:0; width:10em; } select.quota-user { position:relative; left:0; top:0; width:10em; } div.quota>span { position:absolute; right:0; white-space:nowrap; top:.7em; color:#888; text-shadow:0 1px 0 #fff; } select.quota.active { background: #fff; } +/* positioning fixes */ +#newuser { position:relative; top:-3px; } +#newuser .multiselect { top:1px; } + + /* APPS */ .appinfo { margin: 1em; } h3 { font-size: 1.4em; font-weight: bold; } From f29a0ec67d8e319571338537c8066c952fdce240 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 14 Feb 2013 16:38:34 +0100 Subject: [PATCH 232/719] also fix header alignment for multiselect columns --- settings/css/settings.css | 1 + 1 file changed, 1 insertion(+) diff --git a/settings/css/settings.css b/settings/css/settings.css index 689c54d04b..265a29b8f7 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -53,6 +53,7 @@ select.quota.active { background: #fff; } /* positioning fixes */ #newuser { position:relative; top:-3px; } #newuser .multiselect { top:1px; } +#headerGroups, #headerSubAdmins, #headerQuota { padding-left:18px; } /* APPS */ From 95575a7fd1e9491f18adbf2ea92d23897de1a13f Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 14 Feb 2013 17:06:08 +0100 Subject: [PATCH 233/719] simplify noise (immense file size reduction), also apply to user menu and header, fix #1576 --- core/css/styles.css | 10 +++++++++- core/img/noise.png | Bin 951865 -> 3127 bytes 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/core/css/styles.css b/core/css/styles.css index 738688a21a..caf338f68f 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -16,7 +16,10 @@ body { background:#fefefe; font:normal .8em/1.6em "Lucida Grande", Arial, Verdan /* HEADERS */ -#body-user #header, #body-settings #header { position:fixed; top:0; left:0; right:0; z-index:100; height:45px; line-height:2.5em; background:#1d2d44; -moz-box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; -webkit-box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; } +#body-user #header, #body-settings #header { + position:fixed; top:0; left:0; right:0; z-index:100; height:45px; line-height:2.5em; + background:#1d2d44 url('../img/noise.png') repeat; + -moz-box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; -webkit-box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; } #body-login #header { margin: -2em auto 0; text-align:center; height:10em; padding:1em 0 .5em; -moz-box-shadow:0 0 1em rgba(0, 0, 0, .5); -webkit-box-shadow:0 0 1em rgba(0, 0, 0, .5); box-shadow:0 0 1em rgba(0, 0, 0, .5); background:#1d2d44; /* Old browsers */ @@ -238,6 +241,9 @@ fieldset.warning a { color:#b94a48 !important; font-weight:bold; } #navigation a.active { opacity:1; } #navigation .icon { display:block; width:32px; height:32px; margin:0 16px 0; } #navigation li:first-child a { padding-top:16px; } + + +/* USER MENU */ #settings { float:right; margin-top:7px; color:#bbb; text-shadow:0 -1px 0 #000; } #expand { padding:15px; cursor:pointer; font-weight:bold; } #expand:hover, #expand:focus, #expand:active { color:#fff; } @@ -246,6 +252,8 @@ fieldset.warning a { color:#b94a48 !important; font-weight:bold; } #expanddiv { position:absolute; right:0; top:45px; z-index:76; display:none; background-color:#444; border-bottom-left-radius:7px; box-shadow: 0 0 20px rgb(29,45,68); + background:#383c43 url('../img/noise.png') repeat; border-bottom:1px #333 solid; border-left:border-bottom:1px #333 solid; + -moz-box-shadow:0 0 7px rgb(29,45,68); -webkit-box-shadow:0 0 7px rgb(29,45,68); box-shadow:0 0 7px rgb(29,45,68); } #expanddiv a { display:block; color:#fff; text-shadow:0 -1px 0 #000; padding:0 8px; opacity:.7; } #expanddiv a img { margin-bottom:-3px; } diff --git a/core/img/noise.png b/core/img/noise.png index 8fdda17b5e36b5a1aacc09652bc93126a1ccb8fc..271dd5ebcfbdc858f83f0f7ea18a59bb1980d74f 100644 GIT binary patch literal 3127 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

    JMP25%&0tuP^jwa1K^E~edce|Ka_(?c-H!1zsF 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 z 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 Date: Thu, 14 Feb 2013 17:13:50 +0100 Subject: [PATCH 234/719] double speed for user menu slide --- core/js/js.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/js/js.js b/core/js/js.js index ae23c955c3..6d5d65403f 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -663,14 +663,14 @@ $(document).ready(function(){ } }); $('#settings #expand').click(function(event) { - $('#settings #expanddiv').slideToggle(); + $('#settings #expanddiv').slideToggle(200); event.stopPropagation(); }); $('#settings #expanddiv').click(function(event){ event.stopPropagation(); }); $(window).click(function(){//hide the settings menu when clicking outside it - $('#settings #expanddiv').slideUp(); + $('#settings #expanddiv').slideUp(200); }); // all the tipsy stuff needs to be here (in reverse order) to work From e96f6ffa525db949c9a2204f7b769e04e09f81e9 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 14 Feb 2013 17:24:06 +0100 Subject: [PATCH 235/719] filter l10n-* files --- lib/l10n.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n.php b/lib/l10n.php index e272bcd79f..1e07a9b955 100644 --- a/lib/l10n.php +++ b/lib/l10n.php @@ -343,7 +343,7 @@ class OC_L10N{ if(is_dir($dir)) { $files=scandir($dir); foreach($files as $file) { - if(substr($file, -4, 4) == '.php') { + if(substr($file, -4, 4) === '.php' && substr($file, 0, 4) !== 'l10n') { $i = substr($file, 0, -4); $available[] = $i; } From d1dcb282cb34baea6ac4bacbc5b47f258e625389 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 14 Feb 2013 17:40:08 +0100 Subject: [PATCH 236/719] fix multiselect bar offset on shared page, close #1339 finally --- apps/files_sharing/css/public.css | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css index 13f42b130d..13298f113f 100644 --- a/apps/files_sharing/css/public.css +++ b/apps/files_sharing/css/public.css @@ -71,4 +71,5 @@ p.info a { thead{ background-color: white; + padding-left:0 !important; /* fixes multiselect bar offset on shared page */ } From 61e3c158b2781630c166875dbf8f8c4063b0c314 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 14 Feb 2013 17:46:53 +0100 Subject: [PATCH 237/719] add some missing fallback language mappings --- settings/languageCodes.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/settings/languageCodes.php b/settings/languageCodes.php index 7165580085..e116a5d268 100644 --- a/settings/languageCodes.php +++ b/settings/languageCodes.php @@ -50,6 +50,10 @@ return array( 'lv'=>'Latviešu', 'mk'=>'македонски', 'uk'=>'Українська', -'vi'=>'tiếng việt', +'vi'=>'Tiếng Việt', 'zh_TW'=>'臺灣話', +'af_ZA'=> 'Afrikaans', +'bn_BD'=>'Bengali', +'ta_LK'=>'தமிழ்', +'zh_HK'=>'Chinese (Hong Kong)' ); From 2e280167b81e8b8eae0e7bdd33bd3532d847a915 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 14 Feb 2013 17:51:27 +0100 Subject: [PATCH 238/719] adding language code oc --- settings/languageCodes.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/settings/languageCodes.php b/settings/languageCodes.php index e116a5d268..2c867c1913 100644 --- a/settings/languageCodes.php +++ b/settings/languageCodes.php @@ -55,5 +55,6 @@ return array( 'af_ZA'=> 'Afrikaans', 'bn_BD'=>'Bengali', 'ta_LK'=>'தமிழ்', -'zh_HK'=>'Chinese (Hong Kong)' +'zh_HK'=>'Chinese (Hong Kong)', +'oc'=>'Occitan (post 1500)', ); From c7094197bfe4b6702397e147847ef9cfd8d21b63 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Thu, 14 Feb 2013 18:15:14 +0100 Subject: [PATCH 239/719] Sanitize HTML --- core/templates/layout.user.php | 2 +- settings/js/users.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index c8b580b5fd..38aa31be32 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -31,7 +31,7 @@ '.$l->t('Warning: Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them.').'

    '; + echo '

    '.$l->t('Warning: Apps user_ldap and user_webdavauth are incompatible.' + .' You may experience unexpected behaviour.' + .' Please ask your system administrator to disable one of them.').'

    '; } if(!function_exists('ldap_connect')) { - echo '

    '.$l->t('Warning: The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.').'

    '; + echo '

    '.$l->t('Warning: The PHP LDAP module is not installed,' + .' the backend will not work. Please ask your system administrator to install it.').'

    '; } ?>
    -

    - +

    -

    -

    -

    -

    -


    t('use %%uid placeholder, e.g. "uid=%%uid"');?>

    -


    t('without any placeholder, e.g. "objectClass=person".');?>

    -


    t('without any placeholder, e.g. "objectClass=posixGroup".');?>

    +

    +

    +

    +

    +

    +

    +

    +

    +

    + +
    t('use %%uid placeholder, e.g. "uid=%%uid"');?>

    +

    + +
    t('without any placeholder, e.g. "objectClass=person".');?>

    +

    + +
    t('without any placeholder, e.g. "objectClass=posixGroup".');?>

    diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index 7778c37c79..2b24736244 100644 --- a/apps/user_ldap/user_ldap.php +++ b/apps/user_ldap/user_ldap.php @@ -112,7 +112,8 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { return $ldap_users; } - // if we'd pass -1 to LDAP search, we'd end up in a Protocol error. With a limit of 0, we get 0 results. So we pass null. + // if we'd pass -1 to LDAP search, we'd end up in a Protocol + // error. With a limit of 0, we get 0 results. So we pass null. if($limit <= 0) { $limit = null; } @@ -121,9 +122,12 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { $this->getFilterPartForUserSearch($search) )); - \OCP\Util::writeLog('user_ldap', 'getUsers: Options: search '.$search.' limit '.$limit.' offset '.$offset.' Filter: '.$filter, \OCP\Util::DEBUG); + \OCP\Util::writeLog('user_ldap', + 'getUsers: Options: search '.$search.' limit '.$limit.' offset '.$offset.' Filter: '.$filter, + \OCP\Util::DEBUG); //do the search and translate results to owncloud names - $ldap_users = $this->fetchListOfUsers($filter, array($this->connection->ldapUserDisplayName, 'dn'), $limit, $offset); + $ldap_users = $this->fetchListOfUsers($filter, array($this->connection->ldapUserDisplayName, 'dn'), + $limit, $offset); $ldap_users = $this->ownCloudUserNames($ldap_users); \OCP\Util::writeLog('user_ldap', 'getUsers: '.count($ldap_users). ' Users found', \OCP\Util::DEBUG); @@ -189,11 +193,13 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { //check for / at the beginning or pattern c:\ resp. c:/ if( '/' == $path[0] - || (3 < strlen($path) && ctype_alpha($path[0]) && $path[1] == ':' && ('\\' == $path[2] || '/' == $path[2])) + || (3 < strlen($path) && ctype_alpha($path[0]) + && $path[1] == ':' && ('\\' == $path[2] || '/' == $path[2])) ) { $homedir = $path; } else { - $homedir = \OCP\Config::getSystemValue('datadirectory', \OC::$SERVERROOT.'/data' ) . '/' . $homedir[0]; + $homedir = \OCP\Config::getSystemValue('datadirectory', + \OC::$SERVERROOT.'/data' ) . '/' . $homedir[0]; } $this->connection->writeToCache($cacheKey, $homedir); return $homedir; @@ -267,4 +273,4 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { public function hasUserListings() { return true; } -} \ No newline at end of file +} From b169073169ff7fc723ccbb1c0edd61556af8cd4e Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Fri, 15 Feb 2013 00:06:50 +0100 Subject: [PATCH 249/719] [tx-robot] updated from transifex --- apps/files/l10n/bg_BG.php | 10 + apps/files/l10n/ca.php | 1 - apps/files/l10n/cs_CZ.php | 1 - apps/files/l10n/da.php | 1 - apps/files/l10n/de.php | 1 - apps/files/l10n/de_DE.php | 1 - apps/files/l10n/es.php | 1 - apps/files/l10n/es_AR.php | 1 - apps/files/l10n/et_EE.php | 1 - apps/files/l10n/eu.php | 1 - apps/files/l10n/fi_FI.php | 1 - apps/files/l10n/fr.php | 1 - apps/files/l10n/gl.php | 1 - apps/files/l10n/hu_HU.php | 1 - apps/files/l10n/it.php | 1 - apps/files/l10n/ja_JP.php | 1 - apps/files/l10n/lv.php | 1 - apps/files/l10n/nl.php | 1 - apps/files/l10n/pt_BR.php | 7 +- apps/files/l10n/pt_PT.php | 1 - apps/files/l10n/ru.php | 1 - apps/files/l10n/ru_RU.php | 1 - apps/files/l10n/sk_SK.php | 1 - apps/files/l10n/sv.php | 1 - apps/files/l10n/vi.php | 1 - apps/files/l10n/zh_TW.php | 1 - apps/files_encryption/l10n/fi_FI.php | 3 + apps/files_external/l10n/fi_FI.php | 1 + apps/files_trashbin/l10n/bg_BG.php | 10 + apps/files_trashbin/l10n/fi_FI.php | 3 + apps/files_trashbin/l10n/pt_BR.php | 3 + apps/files_versions/l10n/de_DE.php | 4 +- apps/files_versions/l10n/fi_FI.php | 8 + apps/files_versions/l10n/gl.php | 8 + apps/user_ldap/l10n/fa.php | 9 + apps/user_ldap/l10n/fi_FI.php | 8 + apps/user_webdavauth/l10n/fi_FI.php | 3 +- core/l10n/fi_FI.php | 2 + l10n/af_ZA/files.po | 26 +- l10n/ar/files.po | 6 +- l10n/be/core.po | 593 +++++++++++++++++++++++++++ l10n/be/files.po | 315 ++++++++++++++ l10n/be/files_encryption.po | 38 ++ l10n/be/files_external.po | 120 ++++++ l10n/be/files_sharing.po | 48 +++ l10n/be/files_trashbin.po | 68 +++ l10n/be/files_versions.po | 65 +++ l10n/be/lib.po | 253 ++++++++++++ l10n/be/settings.po | 496 ++++++++++++++++++++++ l10n/be/user_ldap.po | 309 ++++++++++++++ l10n/be/user_webdavauth.po | 33 ++ l10n/bg_BG/files.po | 26 +- l10n/bg_BG/files_trashbin.po | 27 +- l10n/bg_BG/lib.po | 72 ++-- l10n/bg_BG/settings.po | 64 +-- l10n/bn_BD/files.po | 6 +- l10n/ca/files.po | 10 +- l10n/cs_CZ/files.po | 10 +- l10n/da/files.po | 10 +- l10n/de/files.po | 10 +- l10n/de_DE/files.po | 10 +- l10n/de_DE/files_versions.po | 11 +- l10n/de_DE/lib.po | 60 +-- l10n/de_DE/settings.po | 27 +- l10n/el/files.po | 6 +- l10n/eo/files.po | 6 +- l10n/es/files.po | 10 +- l10n/es_AR/files.po | 10 +- l10n/es_AR/lib.po | 87 ++-- l10n/es_AR/settings.po | 69 ++-- l10n/et_EE/files.po | 10 +- l10n/eu/files.po | 10 +- l10n/fa/core.po | 4 +- l10n/fa/files.po | 6 +- l10n/fa/user_ldap.po | 25 +- l10n/fi_FI/core.po | 10 +- l10n/fi_FI/files.po | 10 +- l10n/fi_FI/files_encryption.po | 12 +- l10n/fi_FI/files_external.po | 16 +- l10n/fi_FI/files_trashbin.po | 12 +- l10n/fi_FI/files_versions.po | 24 +- l10n/fi_FI/lib.po | 68 +-- l10n/fi_FI/settings.po | 16 +- l10n/fi_FI/user_ldap.po | 24 +- l10n/fi_FI/user_webdavauth.po | 14 +- l10n/fr/files.po | 10 +- l10n/gl/files.po | 10 +- l10n/gl/files_versions.po | 23 +- l10n/gl/settings.po | 91 ++-- l10n/he/files.po | 6 +- l10n/hi/files.po | 26 +- l10n/hr/files.po | 6 +- l10n/hu_HU/files.po | 10 +- l10n/ia/files.po | 6 +- l10n/id/files.po | 6 +- l10n/is/files.po | 6 +- l10n/it/files.po | 10 +- l10n/ja_JP/files.po | 10 +- l10n/ka_GE/files.po | 6 +- l10n/ko/files.po | 6 +- l10n/ku_IQ/files.po | 6 +- l10n/lb/files.po | 6 +- l10n/lt_LT/files.po | 6 +- l10n/lv/files.po | 10 +- l10n/mk/files.po | 6 +- l10n/ms_MY/files.po | 6 +- l10n/nb_NO/files.po | 6 +- l10n/nl/files.po | 10 +- l10n/nl/settings.po | 76 ++-- l10n/nn_NO/files.po | 6 +- l10n/oc/files.po | 6 +- l10n/pl/files.po | 6 +- l10n/pl_PL/files.po | 26 +- l10n/pt_BR/core.po | 4 +- l10n/pt_BR/files.po | 16 +- l10n/pt_BR/files_trashbin.po | 12 +- l10n/pt_BR/lib.po | 60 +-- l10n/pt_BR/settings.po | 22 +- l10n/pt_PT/files.po | 10 +- l10n/pt_PT/lib.po | 80 ++-- l10n/pt_PT/settings.po | 78 ++-- l10n/ro/files.po | 6 +- l10n/ru/files.po | 10 +- l10n/ru_RU/files.po | 10 +- l10n/si_LK/files.po | 6 +- l10n/sk/files.po | 26 +- l10n/sk_SK/files.po | 10 +- l10n/sk_SK/settings.po | 76 ++-- l10n/sl/files.po | 6 +- l10n/sr/files.po | 6 +- l10n/sr@latin/files.po | 6 +- l10n/sv/files.po | 10 +- l10n/sw_KE/files.po | 26 +- l10n/ta_LK/files.po | 6 +- l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 4 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_trashbin.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 58 +-- l10n/templates/settings.pot | 10 +- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- l10n/th_TH/files.po | 6 +- l10n/tr/files.po | 6 +- l10n/uk/files.po | 6 +- l10n/vi/files.po | 10 +- l10n/zh_CN.GB2312/files.po | 6 +- l10n/zh_CN/files.po | 6 +- l10n/zh_HK/files.po | 26 +- l10n/zh_TW/files.po | 10 +- lib/l10n/bg_BG.php | 5 + lib/l10n/es_AR.php | 12 + lib/l10n/fi_FI.php | 4 + lib/l10n/pt_PT.php | 9 + settings/l10n/bg_BG.php | 27 +- settings/l10n/de_DE.php | 12 +- settings/l10n/es_AR.php | 27 ++ settings/l10n/fi_FI.php | 1 + settings/l10n/gl.php | 42 +- settings/l10n/nl.php | 31 ++ settings/l10n/pt_BR.php | 4 + settings/l10n/pt_PT.php | 32 ++ settings/l10n/sk_SK.php | 31 ++ 166 files changed, 3584 insertions(+), 976 deletions(-) create mode 100644 l10n/be/core.po create mode 100644 l10n/be/files.po create mode 100644 l10n/be/files_encryption.po create mode 100644 l10n/be/files_external.po create mode 100644 l10n/be/files_sharing.po create mode 100644 l10n/be/files_trashbin.po create mode 100644 l10n/be/files_versions.po create mode 100644 l10n/be/lib.po create mode 100644 l10n/be/settings.po create mode 100644 l10n/be/user_ldap.po create mode 100644 l10n/be/user_webdavauth.po diff --git a/apps/files/l10n/bg_BG.php b/apps/files/l10n/bg_BG.php index 632b574545..f16a83bdfa 100644 --- a/apps/files/l10n/bg_BG.php +++ b/apps/files/l10n/bg_BG.php @@ -1,22 +1,32 @@ "Липсва временна папка", +"Failed to write to disk" => "Възникна проблем при запис в диска", +"Invalid directory." => "Невалидна директория.", "Files" => "Файлове", "Delete" => "Изтриване", "Rename" => "Преименуване", +"Pending" => "Чакащо", "replace" => "препокриване", "cancel" => "отказ", "undo" => "възтановяване", +"Upload Error" => "Възникна грешка при качването", "Close" => "Затвори", "Upload cancelled." => "Качването е спряно.", "Name" => "Име", "Size" => "Размер", "Modified" => "Променено", +"1 folder" => "1 папка", +"{count} folders" => "{count} папки", +"1 file" => "1 файл", +"{count} files" => "{count} файла", "Upload" => "Качване", "Maximum upload size" => "Максимален размер за качване", "0 is unlimited" => "Ползвайте 0 за без ограничения", "Save" => "Запис", "New" => "Ново", +"Text file" => "Текстов файл", "Folder" => "Папка", +"Cancel upload" => "Спри качването", "Nothing in here. Upload something!" => "Няма нищо тук. Качете нещо.", "Download" => "Изтегляне", "Upload too large" => "Файлът който сте избрали за качване е прекалено голям" diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php index 6655633bbd..ecfc6abc8d 100644 --- a/apps/files/l10n/ca.php +++ b/apps/files/l10n/ca.php @@ -60,7 +60,6 @@ "Text file" => "Fitxer de text", "Folder" => "Carpeta", "From link" => "Des d'enllaç", -"Trash bin" => "Paperera", "Cancel upload" => "Cancel·la la pujada", "Nothing in here. Upload something!" => "Res per aquí. Pugeu alguna cosa!", "Download" => "Baixa", diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php index d2306838bd..7376056e4c 100644 --- a/apps/files/l10n/cs_CZ.php +++ b/apps/files/l10n/cs_CZ.php @@ -60,7 +60,6 @@ "Text file" => "Textový soubor", "Folder" => "Složka", "From link" => "Z odkazu", -"Trash bin" => "Koš", "Cancel upload" => "Zrušit odesílání", "Nothing in here. Upload something!" => "Žádný obsah. Nahrajte něco.", "Download" => "Stáhnout", diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php index 6588281462..8b4ad675e0 100644 --- a/apps/files/l10n/da.php +++ b/apps/files/l10n/da.php @@ -60,7 +60,6 @@ "Text file" => "Tekstfil", "Folder" => "Mappe", "From link" => "Fra link", -"Trash bin" => "Papirkurv", "Cancel upload" => "Fortryd upload", "Nothing in here. Upload something!" => "Her er tomt. Upload noget!", "Download" => "Download", diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php index 1d76240396..d96e512ece 100644 --- a/apps/files/l10n/de.php +++ b/apps/files/l10n/de.php @@ -60,7 +60,6 @@ "Text file" => "Textdatei", "Folder" => "Ordner", "From link" => "Von einem Link", -"Trash bin" => "Mülleimer", "Cancel upload" => "Upload abbrechen", "Nothing in here. Upload something!" => "Alles leer. Lade etwas hoch!", "Download" => "Herunterladen", diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php index 012cfd69da..0dfc19ff01 100644 --- a/apps/files/l10n/de_DE.php +++ b/apps/files/l10n/de_DE.php @@ -60,7 +60,6 @@ "Text file" => "Textdatei", "Folder" => "Ordner", "From link" => "Von einem Link", -"Trash bin" => "Mülleimer", "Cancel upload" => "Upload abbrechen", "Nothing in here. Upload something!" => "Alles leer. Bitte laden Sie etwas hoch!", "Download" => "Herunterladen", diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php index 4ebbdb21e3..12262b5481 100644 --- a/apps/files/l10n/es.php +++ b/apps/files/l10n/es.php @@ -60,7 +60,6 @@ "Text file" => "Archivo de texto", "Folder" => "Carpeta", "From link" => "Desde el enlace", -"Trash bin" => "Papelera de reciclaje", "Cancel upload" => "Cancelar subida", "Nothing in here. Upload something!" => "Aquí no hay nada. ¡Sube algo!", "Download" => "Descargar", diff --git a/apps/files/l10n/es_AR.php b/apps/files/l10n/es_AR.php index e7c9dfe9d5..0dc423f96f 100644 --- a/apps/files/l10n/es_AR.php +++ b/apps/files/l10n/es_AR.php @@ -60,7 +60,6 @@ "Text file" => "Archivo de texto", "Folder" => "Carpeta", "From link" => "Desde enlace", -"Trash bin" => "Papelera", "Cancel upload" => "Cancelar subida", "Nothing in here. Upload something!" => "No hay nada. ¡Subí contenido!", "Download" => "Descargar", diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php index 7be5bcf1ee..3ec7cbb1a6 100644 --- a/apps/files/l10n/et_EE.php +++ b/apps/files/l10n/et_EE.php @@ -53,7 +53,6 @@ "Text file" => "Tekstifail", "Folder" => "Kaust", "From link" => "Allikast", -"Trash bin" => "Prügikast", "Cancel upload" => "Tühista üleslaadimine", "Nothing in here. Upload something!" => "Siin pole midagi. Lae midagi üles!", "Download" => "Lae alla", diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php index d5d28f2b0e..10f19cf4cb 100644 --- a/apps/files/l10n/eu.php +++ b/apps/files/l10n/eu.php @@ -60,7 +60,6 @@ "Text file" => "Testu fitxategia", "Folder" => "Karpeta", "From link" => "Estekatik", -"Trash bin" => "Zakarrontzia", "Cancel upload" => "Ezeztatu igoera", "Nothing in here. Upload something!" => "Ez dago ezer. Igo zerbait!", "Download" => "Deskargatu", diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php index cd7ce66dc4..81ac32c09f 100644 --- a/apps/files/l10n/fi_FI.php +++ b/apps/files/l10n/fi_FI.php @@ -54,7 +54,6 @@ "Text file" => "Tekstitiedosto", "Folder" => "Kansio", "From link" => "Linkistä", -"Trash bin" => "Roskakori", "Cancel upload" => "Peru lähetys", "Nothing in here. Upload something!" => "Täällä ei ole mitään. Lähetä tänne jotakin!", "Download" => "Lataa", diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php index 3e8945f345..e2af33da77 100644 --- a/apps/files/l10n/fr.php +++ b/apps/files/l10n/fr.php @@ -60,7 +60,6 @@ "Text file" => "Fichier texte", "Folder" => "Dossier", "From link" => "Depuis le lien", -"Trash bin" => "Corbeille", "Cancel upload" => "Annuler l'envoi", "Nothing in here. Upload something!" => "Il n'y a rien ici ! Envoyez donc quelque chose :)", "Download" => "Télécharger", diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php index e2a4c2f592..91896b8e39 100644 --- a/apps/files/l10n/gl.php +++ b/apps/files/l10n/gl.php @@ -60,7 +60,6 @@ "Text file" => "Ficheiro de texto", "Folder" => "Cartafol", "From link" => "Desde a ligazón", -"Trash bin" => "Cesto do lixo", "Cancel upload" => "Cancelar o envío", "Nothing in here. Upload something!" => "Aquí non hai nada por aquí. Envíe algo.", "Download" => "Descargar", diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php index 53da2d3ddc..9eed324415 100644 --- a/apps/files/l10n/hu_HU.php +++ b/apps/files/l10n/hu_HU.php @@ -60,7 +60,6 @@ "Text file" => "Szövegfájl", "Folder" => "Mappa", "From link" => "Feltöltés linkről", -"Trash bin" => "Szemetes mappa", "Cancel upload" => "A feltöltés megszakítása", "Nothing in here. Upload something!" => "Itt nincs semmi. Töltsön fel valamit!", "Download" => "Letöltés", diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php index 23372439a2..583a0ca7f7 100644 --- a/apps/files/l10n/it.php +++ b/apps/files/l10n/it.php @@ -60,7 +60,6 @@ "Text file" => "File di testo", "Folder" => "Cartella", "From link" => "Da collegamento", -"Trash bin" => "Cestino", "Cancel upload" => "Annulla invio", "Nothing in here. Upload something!" => "Non c'è niente qui. Carica qualcosa!", "Download" => "Scarica", diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php index 88f8ab985a..85ec6b6e95 100644 --- a/apps/files/l10n/ja_JP.php +++ b/apps/files/l10n/ja_JP.php @@ -60,7 +60,6 @@ "Text file" => "テキストファイル", "Folder" => "フォルダ", "From link" => "リンク", -"Trash bin" => "ゴミ箱", "Cancel upload" => "アップロードをキャンセル", "Nothing in here. Upload something!" => "ここには何もありません。何かアップロードしてください。", "Download" => "ダウンロード", diff --git a/apps/files/l10n/lv.php b/apps/files/l10n/lv.php index b7d0073562..9d4d2c9fb6 100644 --- a/apps/files/l10n/lv.php +++ b/apps/files/l10n/lv.php @@ -60,7 +60,6 @@ "Text file" => "Teksta datne", "Folder" => "Mape", "From link" => "No saites", -"Trash bin" => "Miskaste", "Cancel upload" => "Atcelt augšupielādi", "Nothing in here. Upload something!" => "Te vēl nekas nav. Rīkojies, sāc augšupielādēt!", "Download" => "Lejupielādēt", diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php index ddac77dc87..381325d113 100644 --- a/apps/files/l10n/nl.php +++ b/apps/files/l10n/nl.php @@ -60,7 +60,6 @@ "Text file" => "Tekstbestand", "Folder" => "Map", "From link" => "Vanaf link", -"Trash bin" => "Prullenbak", "Cancel upload" => "Upload afbreken", "Nothing in here. Upload something!" => "Er bevindt zich hier niets. Upload een bestand!", "Download" => "Download", diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php index 7d834b8f30..3a9dafcabf 100644 --- a/apps/files/l10n/pt_BR.php +++ b/apps/files/l10n/pt_BR.php @@ -13,6 +13,7 @@ "Not enough storage available" => "Espaço de armazenamento insuficiente", "Invalid directory." => "Diretório inválido.", "Files" => "Arquivos", +"Delete permanently" => "Excluir permanentemente", "Delete" => "Excluir", "Rename" => "Renomear", "Pending" => "Pendente", @@ -23,9 +24,12 @@ "replaced {new_name}" => "substituído {new_name}", "undo" => "desfazer", "replaced {new_name} with {old_name}" => "Substituído {old_name} por {new_name} ", +"perform delete operation" => "realizar operação de exclusão", "'.' is an invalid file name." => "'.' é um nome de arquivo inválido.", "File name cannot be empty." => "O nome do arquivo não pode estar vazio.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome inválido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos.", +"Your storage is full, files can not be updated or synced anymore!" => "Seu armazenamento está cheio, arquivos não serão mais atualizados nem sincronizados!", +"Your storage is almost full ({usedSpacePercent}%)" => "Seu armazenamento está quase cheio ({usedSpacePercent}%)", "Your download is being prepared. This might take some time if the files are big." => "Seu download está sendo preparado. Isto pode levar algum tempo se os arquivos forem grandes.", "Unable to upload your file as it is a directory or has 0 bytes" => "Impossível enviar seus arquivo como diretório ou ele tem 0 bytes.", "Upload Error" => "Erro de envio", @@ -63,5 +67,6 @@ "Upload too large" => "Arquivo muito grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os arquivos que você está tentando carregar excedeu o tamanho máximo para arquivos no servidor.", "Files are being scanned, please wait." => "Arquivos sendo escaneados, por favor aguarde.", -"Current scanning" => "Scanning atual" +"Current scanning" => "Scanning atual", +"Upgrading filesystem cache..." => "Aprimorando cache do sistema de arquivos..." ); diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php index 80dc774d65..e036b3dacb 100644 --- a/apps/files/l10n/pt_PT.php +++ b/apps/files/l10n/pt_PT.php @@ -60,7 +60,6 @@ "Text file" => "Ficheiro de texto", "Folder" => "Pasta", "From link" => "Da ligação", -"Trash bin" => "Reciclagem", "Cancel upload" => "Cancelar envio", "Nothing in here. Upload something!" => "Vazio. Envie alguma coisa!", "Download" => "Transferir", diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php index 6590f193f8..803b34e99c 100644 --- a/apps/files/l10n/ru.php +++ b/apps/files/l10n/ru.php @@ -60,7 +60,6 @@ "Text file" => "Текстовый файл", "Folder" => "Папка", "From link" => "Из ссылки", -"Trash bin" => "Корзина", "Cancel upload" => "Отмена загрузки", "Nothing in here. Upload something!" => "Здесь ничего нет. Загрузите что-нибудь!", "Download" => "Скачать", diff --git a/apps/files/l10n/ru_RU.php b/apps/files/l10n/ru_RU.php index b635444212..dbeab6b351 100644 --- a/apps/files/l10n/ru_RU.php +++ b/apps/files/l10n/ru_RU.php @@ -60,7 +60,6 @@ "Text file" => "Текстовый файл", "Folder" => "Папка", "From link" => "По ссылке", -"Trash bin" => "Корзина", "Cancel upload" => "Отмена загрузки", "Nothing in here. Upload something!" => "Здесь ничего нет. Загрузите что-нибудь!", "Download" => "Загрузить", diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php index 64ba7420d3..8ece8140d8 100644 --- a/apps/files/l10n/sk_SK.php +++ b/apps/files/l10n/sk_SK.php @@ -60,7 +60,6 @@ "Text file" => "Textový súbor", "Folder" => "Priečinok", "From link" => "Z odkazu", -"Trash bin" => "Kôš", "Cancel upload" => "Zrušiť odosielanie", "Nothing in here. Upload something!" => "Žiadny súbor. Nahrajte niečo!", "Download" => "Stiahnuť", diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php index 5e484ec130..ca4dfcf553 100644 --- a/apps/files/l10n/sv.php +++ b/apps/files/l10n/sv.php @@ -60,7 +60,6 @@ "Text file" => "Textfil", "Folder" => "Mapp", "From link" => "Från länk", -"Trash bin" => "Papperskorg", "Cancel upload" => "Avbryt uppladdning", "Nothing in here. Upload something!" => "Ingenting här. Ladda upp något!", "Download" => "Ladda ner", diff --git a/apps/files/l10n/vi.php b/apps/files/l10n/vi.php index ec0699e78c..b069246f01 100644 --- a/apps/files/l10n/vi.php +++ b/apps/files/l10n/vi.php @@ -60,7 +60,6 @@ "Text file" => "Tập tin văn bản", "Folder" => "Thư mục", "From link" => "Từ liên kết", -"Trash bin" => "Thùng rác", "Cancel upload" => "Hủy upload", "Nothing in here. Upload something!" => "Không có gì ở đây .Hãy tải lên một cái gì đó !", "Download" => "Tải xuống", diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php index 5249dfdbc5..7be0f1d658 100644 --- a/apps/files/l10n/zh_TW.php +++ b/apps/files/l10n/zh_TW.php @@ -60,7 +60,6 @@ "Text file" => "文字檔", "Folder" => "資料夾", "From link" => "從連結", -"Trash bin" => "回收筒", "Cancel upload" => "取消上傳", "Nothing in here. Upload something!" => "沒有任何東西。請上傳內容!", "Download" => "下載", diff --git a/apps/files_encryption/l10n/fi_FI.php b/apps/files_encryption/l10n/fi_FI.php index 1e1dc4a121..6352d396b3 100644 --- a/apps/files_encryption/l10n/fi_FI.php +++ b/apps/files_encryption/l10n/fi_FI.php @@ -1,4 +1,7 @@ "Salaus", +"File encryption is enabled." => "Tiedostojen salaus on käytössä.", +"The following file types will not be encrypted:" => "Seuraavia tiedostotyyppejä ei salata:", +"Exclude the following file types from encryption:" => "Älä salaa seuravia tiedostotyyppejä:", "None" => "Ei mitään" ); diff --git a/apps/files_external/l10n/fi_FI.php b/apps/files_external/l10n/fi_FI.php index 8c7381db71..120c190790 100644 --- a/apps/files_external/l10n/fi_FI.php +++ b/apps/files_external/l10n/fi_FI.php @@ -3,6 +3,7 @@ "Error configuring Dropbox storage" => "Virhe Dropbox levyn asetuksia tehtäessä", "Grant access" => "Salli pääsy", "Fill out all required fields" => "Täytä kaikki vaaditut kentät", +"Please provide a valid Dropbox app key and secret." => "Anna kelvollinen Dropbox-sovellusavain ja salainen vastaus.", "Error configuring Google Drive storage" => "Virhe Google Drive levyn asetuksia tehtäessä", "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Varoitus: \"smbclient\" ei ole asennettuna. CIFS-/SMB-jakojen liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan smbclient.", "Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Varoitus: PHP:n FTP-tuki ei ole käytössä tai sitä ei ole asennettu. FTP-jakojen liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan FTP-tuki käyttöön.", diff --git a/apps/files_trashbin/l10n/bg_BG.php b/apps/files_trashbin/l10n/bg_BG.php index 2e6309c22b..05965c2a9a 100644 --- a/apps/files_trashbin/l10n/bg_BG.php +++ b/apps/files_trashbin/l10n/bg_BG.php @@ -1,4 +1,14 @@ "Невъзможно изтриване на %s завинаги", +"Couldn't restore %s" => "Невъзможно възтановяване на %s", +"perform restore operation" => "извършване на действие по възтановяване", +"delete file permanently" => "изтриване на файла завинаги", "Name" => "Име", +"Deleted" => "Изтрито", +"1 folder" => "1 папка", +"{count} folders" => "{count} папки", +"1 file" => "1 файл", +"{count} files" => "{count} файла", +"Nothing in here. Your trash bin is empty!" => "Няма нищо. Кофата е празна!", "Restore" => "Възтановяване" ); diff --git a/apps/files_trashbin/l10n/fi_FI.php b/apps/files_trashbin/l10n/fi_FI.php index de25027f9a..ffdac8735b 100644 --- a/apps/files_trashbin/l10n/fi_FI.php +++ b/apps/files_trashbin/l10n/fi_FI.php @@ -1,5 +1,8 @@ "Kohdetta %s ei voitu poistaa pysyvästi", +"Couldn't restore %s" => "Kohteen %s palautus epäonnistui", "perform restore operation" => "suorita palautustoiminto", +"delete file permanently" => "poista tiedosto pysyvästi", "Name" => "Nimi", "Deleted" => "Poistettu", "1 folder" => "1 kansio", diff --git a/apps/files_trashbin/l10n/pt_BR.php b/apps/files_trashbin/l10n/pt_BR.php index db5737d923..5a6fc3a86b 100644 --- a/apps/files_trashbin/l10n/pt_BR.php +++ b/apps/files_trashbin/l10n/pt_BR.php @@ -1,5 +1,8 @@ "Não foi possível excluir %s permanentemente", +"Couldn't restore %s" => "Não foi possível restaurar %s", "perform restore operation" => "realizar operação de restauração", +"delete file permanently" => "excluir arquivo permanentemente", "Name" => "Nome", "Deleted" => "Excluído", "1 folder" => "1 pasta", diff --git a/apps/files_versions/l10n/de_DE.php b/apps/files_versions/l10n/de_DE.php index 5ca41fbe85..1cf2a63a1d 100644 --- a/apps/files_versions/l10n/de_DE.php +++ b/apps/files_versions/l10n/de_DE.php @@ -3,11 +3,11 @@ "success" => "Erfolgreich", "File %s was reverted to version %s" => "Die Datei %s wurde zur Version %s zurückgesetzt", "failure" => "Fehlgeschlagen", -"File %s could not be reverted to version %s" => "Doe Dateo %s konnte nicht zur Version %s zurückgesetzt werden", +"File %s could not be reverted to version %s" => "Die Datei %s konnte nicht zur Version %s zurückgesetzt werden", "No old versions available" => "keine älteren Versionen verfügbar", "No path specified" => "Kein Pfad angegeben", "History" => "Historie", -"Revert a file to a previous version by clicking on its revert button" => "Setze eine Datei zu durch Klicken auf den Zurücksetzen-Button auf einer frühere Version zurück", +"Revert a file to a previous version by clicking on its revert button" => "Setze eine Datei durch Klicken, auf den Zurücksetzen-Button, auf einer frühere Version zurück", "Files Versioning" => "Dateiversionierung", "Enable" => "Aktivieren" ); diff --git a/apps/files_versions/l10n/fi_FI.php b/apps/files_versions/l10n/fi_FI.php index bdce8e9fe5..61e073d4e0 100644 --- a/apps/files_versions/l10n/fi_FI.php +++ b/apps/files_versions/l10n/fi_FI.php @@ -1,5 +1,13 @@ "Palautus epäonnistui: %s", +"success" => "onnistui", +"File %s was reverted to version %s" => "Tiedosto %s palautettiin versioon %s", +"failure" => "epäonnistui", +"File %s could not be reverted to version %s" => "Tiedoston %s palautus versioon %s epäonnistui", +"No old versions available" => "Vanhoja ei ole saatavilla", +"No path specified" => "Polkua ei ole määritetty", "History" => "Historia", +"Revert a file to a previous version by clicking on its revert button" => "Palauta tiedoston edellinen versio napsauttamalla palautuspainiketta", "Files Versioning" => "Tiedostojen versiointi", "Enable" => "Käytä" ); diff --git a/apps/files_versions/l10n/gl.php b/apps/files_versions/l10n/gl.php index 7e44b8898b..b822b223cc 100644 --- a/apps/files_versions/l10n/gl.php +++ b/apps/files_versions/l10n/gl.php @@ -1,5 +1,13 @@ "Non foi posíbel reverter: %s", +"success" => "feito", +"File %s was reverted to version %s" => "O ficheiro %s foi revertido á versión %s", +"failure" => "produciuse un fallo", +"File %s could not be reverted to version %s" => "Non foi posíbel reverter o ficheiro %s á versión %s", +"No old versions available" => "Non hai versións antigas dispoñíbeis", +"No path specified" => "Non foi indicada a ruta", "History" => "Historial", +"Revert a file to a previous version by clicking on its revert button" => "Reverta un ficheiro a unha versión anterior premendo no botón reversión", "Files Versioning" => "Sistema de versión de ficheiros", "Enable" => "Activar" ); diff --git a/apps/user_ldap/l10n/fa.php b/apps/user_ldap/l10n/fa.php index 7ddd7dad5c..7816ef7c6f 100644 --- a/apps/user_ldap/l10n/fa.php +++ b/apps/user_ldap/l10n/fa.php @@ -1,8 +1,17 @@ "عملیات حذف پیکربندی سرور ناموفق ماند", +"The configuration is valid and the connection could be established!" => "پیکربندی معتبر است و ارتباط می تواند برقرار شود", "Deletion failed" => "حذف کردن انجام نشد", "Keep settings?" => "آیا تنظیمات ذخیره شود ؟", +"Connection test succeeded" => "تست اتصال با موفقیت انجام گردید", +"Connection test failed" => "تست اتصال ناموفق بود", +"Do you really want to delete the current Server Configuration?" => "آیا واقعا می خواهید پیکربندی کنونی سرور را حذف کنید؟", +"Confirm Deletion" => "تایید حذف", +"Server configuration" => "پیکربندی سرور", +"Add Server Configuration" => "افزودن پیکربندی سرور", "Host" => "میزبانی", "Password" => "رمز عبور", "Port" => "درگاه", +"in bytes" => "در بایت", "Help" => "راه‌نما" ); diff --git a/apps/user_ldap/l10n/fi_FI.php b/apps/user_ldap/l10n/fi_FI.php index 1c2a92f844..bfbd6c7856 100644 --- a/apps/user_ldap/l10n/fi_FI.php +++ b/apps/user_ldap/l10n/fi_FI.php @@ -1,5 +1,10 @@ "Poisto epäonnistui", +"Keep settings?" => "Säilytetäänkö asetukset?", +"Cannot add server configuration" => "Palvelinasetusten lisäys epäonnistui", +"Connection test succeeded" => "Yhteystesti onnistui", +"Connection test failed" => "Yhteystesti epäonnistui", +"Confirm Deletion" => "Vahvista poisto", "Host" => "Isäntä", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "Voit jättää protokollan määrittämättä, paitsi kun vaadit SSL:ää. Aloita silloin ldaps://", "Base DN" => "Oletus DN", @@ -17,13 +22,16 @@ "Group Filter" => "Ryhmien suodatus", "Defines the filter to apply, when retrieving groups." => "Määrittelee käytettävän suodattimen, kun ryhmiä haetaan. ", "without any placeholder, e.g. \"objectClass=posixGroup\"." => "ilman paikanvaraustermiä, ts. \"objectClass=posixGroup\".", +"Connection Settings" => "Yhteysasetukset", "Port" => "Portti", +"Disable Main Server" => "Poista pääpalvelin käytöstä", "Use TLS" => "Käytä TLS:ää", "Case insensitve LDAP server (Windows)" => "Kirjainkoosta piittamaton LDAP-palvelin (Windows)", "Turn off SSL certificate validation." => "Poista käytöstä SSL-varmenteen vahvistus", "If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Jos yhteys toimii vain tällä valinnalla, siirrä LDAP-palvelimen SSL-varmenne ownCloud-palvelimellesi.", "Not recommended, use for testing only." => "Ei suositella, käytä vain testausta varten.", "in seconds. A change empties the cache." => "sekunneissa. Muutos tyhjentää välimuistin.", +"Directory Settings" => "Hakemistoasetukset", "User Display Name Field" => "Käyttäjän näytettävän nimen kenttä", "The LDAP attribute to use to generate the user`s ownCloud name." => "LDAP-attribuutti, jota käytetään käyttäjän ownCloud-käyttäjänimenä ", "Base User Tree" => "Oletuskäyttäjäpuu", diff --git a/apps/user_webdavauth/l10n/fi_FI.php b/apps/user_webdavauth/l10n/fi_FI.php index 070a0ffdaf..6c67c78c81 100644 --- a/apps/user_webdavauth/l10n/fi_FI.php +++ b/apps/user_webdavauth/l10n/fi_FI.php @@ -1,3 +1,4 @@ "WebDAV-osoite: http://" +"WebDAV Authentication" => "WebDAV-todennus", +"URL: http://" => "Osoite: http://" ); diff --git a/core/l10n/fi_FI.php b/core/l10n/fi_FI.php index dedbf6723f..1b412510e0 100644 --- a/core/l10n/fi_FI.php +++ b/core/l10n/fi_FI.php @@ -100,6 +100,8 @@ "Edit categories" => "Muokkaa luokkia", "Add" => "Lisää", "Security Warning" => "Turvallisuusvaroitus", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Datakansiosi ja tiedostosi ovat mitä luultavimmin muiden saavutettavissa internetistä, koska .htaccess-tiedosto ei toimi.", +"For information how to properly configure your server, please see the documentation." => "Katso palvelimen asetuksien määrittämiseen liittyvät ohjeet dokumentaatiosta.", "Create an admin account" => "Luo ylläpitäjän tunnus", "Advanced" => "Lisäasetukset", "Data folder" => "Datakansio", diff --git a/l10n/af_ZA/files.po b/l10n/af_ZA/files.po index 67facac0f9..bdbedc57b7 100644 --- a/l10n/af_ZA/files.po +++ b/l10n/af_ZA/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n" "MIME-Version: 1.0\n" @@ -78,15 +78,15 @@ msgstr "" msgid "Files" msgstr "" -#: js/fileactions.js:116 +#: js/fileactions.js:125 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:127 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "" -#: js/fileactions.js:184 +#: js/fileactions.js:193 msgid "Rename" msgstr "" @@ -192,31 +192,31 @@ msgstr "" msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "" @@ -273,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/ar/files.po b/l10n/ar/files.po index 9729e06d91..35fd5981ed 100644 --- a/l10n/ar/files.po +++ b/l10n/ar/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:02+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n" "MIME-Version: 1.0\n" @@ -274,7 +274,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/be/core.po b/l10n/be/core.po new file mode 100644 index 0000000000..e5b4699d86 --- /dev/null +++ b/l10n/be/core.po @@ -0,0 +1,593 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2011-07-25 16:05+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: ajax/share.php:85 +#, php-format +msgid "User %s shared a file with you" +msgstr "" + +#: ajax/share.php:87 +#, php-format +msgid "User %s shared a folder with you" +msgstr "" + +#: ajax/share.php:89 +#, php-format +msgid "" +"User %s shared the file \"%s\" with you. It is available for download here: " +"%s" +msgstr "" + +#: ajax/share.php:91 +#, php-format +msgid "" +"User %s shared the folder \"%s\" with you. It is available for download " +"here: %s" +msgstr "" + +#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25 +msgid "Category type not provided." +msgstr "" + +#: ajax/vcategories/add.php:30 +msgid "No category to add?" +msgstr "" + +#: ajax/vcategories/add.php:37 +#, php-format +msgid "This category already exists: %s" +msgstr "" + +#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27 +#: ajax/vcategories/favorites.php:24 +#: ajax/vcategories/removeFromFavorites.php:26 +msgid "Object type not provided." +msgstr "" + +#: ajax/vcategories/addToFavorites.php:30 +#: ajax/vcategories/removeFromFavorites.php:30 +#, php-format +msgid "%s ID not provided." +msgstr "" + +#: ajax/vcategories/addToFavorites.php:35 +#, php-format +msgid "Error adding %s to favorites." +msgstr "" + +#: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136 +msgid "No categories selected for deletion." +msgstr "" + +#: ajax/vcategories/removeFromFavorites.php:35 +#, php-format +msgid "Error removing %s from favorites." +msgstr "" + +#: js/config.php:32 +msgid "Sunday" +msgstr "" + +#: js/config.php:32 +msgid "Monday" +msgstr "" + +#: js/config.php:32 +msgid "Tuesday" +msgstr "" + +#: js/config.php:32 +msgid "Wednesday" +msgstr "" + +#: js/config.php:32 +msgid "Thursday" +msgstr "" + +#: js/config.php:32 +msgid "Friday" +msgstr "" + +#: js/config.php:32 +msgid "Saturday" +msgstr "" + +#: js/config.php:33 +msgid "January" +msgstr "" + +#: js/config.php:33 +msgid "February" +msgstr "" + +#: js/config.php:33 +msgid "March" +msgstr "" + +#: js/config.php:33 +msgid "April" +msgstr "" + +#: js/config.php:33 +msgid "May" +msgstr "" + +#: js/config.php:33 +msgid "June" +msgstr "" + +#: js/config.php:33 +msgid "July" +msgstr "" + +#: js/config.php:33 +msgid "August" +msgstr "" + +#: js/config.php:33 +msgid "September" +msgstr "" + +#: js/config.php:33 +msgid "October" +msgstr "" + +#: js/config.php:33 +msgid "November" +msgstr "" + +#: js/config.php:33 +msgid "December" +msgstr "" + +#: js/js.js:286 +msgid "Settings" +msgstr "" + +#: js/js.js:767 +msgid "seconds ago" +msgstr "" + +#: js/js.js:768 +msgid "1 minute ago" +msgstr "" + +#: js/js.js:769 +msgid "{minutes} minutes ago" +msgstr "" + +#: js/js.js:770 +msgid "1 hour ago" +msgstr "" + +#: js/js.js:771 +msgid "{hours} hours ago" +msgstr "" + +#: js/js.js:772 +msgid "today" +msgstr "" + +#: js/js.js:773 +msgid "yesterday" +msgstr "" + +#: js/js.js:774 +msgid "{days} days ago" +msgstr "" + +#: js/js.js:775 +msgid "last month" +msgstr "" + +#: js/js.js:776 +msgid "{months} months ago" +msgstr "" + +#: js/js.js:777 +msgid "months ago" +msgstr "" + +#: js/js.js:778 +msgid "last year" +msgstr "" + +#: js/js.js:779 +msgid "years ago" +msgstr "" + +#: js/oc-dialogs.js:126 +msgid "Choose" +msgstr "" + +#: js/oc-dialogs.js:146 js/oc-dialogs.js:166 +msgid "Cancel" +msgstr "" + +#: js/oc-dialogs.js:162 +msgid "No" +msgstr "" + +#: js/oc-dialogs.js:163 +msgid "Yes" +msgstr "" + +#: js/oc-dialogs.js:180 +msgid "Ok" +msgstr "" + +#: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102 +#: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162 +msgid "The object type is not specified." +msgstr "" + +#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 +msgid "Error" +msgstr "" + +#: js/oc-vcategories.js:179 +msgid "The app name is not specified." +msgstr "" + +#: js/oc-vcategories.js:194 +msgid "The required file {file} is not installed!" +msgstr "" + +#: js/share.js:29 js/share.js:43 js/share.js:90 +msgid "Shared" +msgstr "" + +#: js/share.js:93 +msgid "Share" +msgstr "" + +#: js/share.js:141 js/share.js:622 +msgid "Error while sharing" +msgstr "" + +#: js/share.js:152 +msgid "Error while unsharing" +msgstr "" + +#: js/share.js:159 +msgid "Error while changing permissions" +msgstr "" + +#: js/share.js:168 +msgid "Shared with you and the group {group} by {owner}" +msgstr "" + +#: js/share.js:170 +msgid "Shared with you by {owner}" +msgstr "" + +#: js/share.js:175 +msgid "Share with" +msgstr "" + +#: js/share.js:180 +msgid "Share with link" +msgstr "" + +#: js/share.js:183 +msgid "Password protect" +msgstr "" + +#: js/share.js:185 templates/installation.php:44 templates/login.php:35 +msgid "Password" +msgstr "" + +#: js/share.js:189 +msgid "Email link to person" +msgstr "" + +#: js/share.js:190 +msgid "Send" +msgstr "" + +#: js/share.js:194 +msgid "Set expiration date" +msgstr "" + +#: js/share.js:195 +msgid "Expiration date" +msgstr "" + +#: js/share.js:227 +msgid "Share via email:" +msgstr "" + +#: js/share.js:229 +msgid "No people found" +msgstr "" + +#: js/share.js:256 +msgid "Resharing is not allowed" +msgstr "" + +#: js/share.js:292 +msgid "Shared in {item} with {user}" +msgstr "" + +#: js/share.js:313 +msgid "Unshare" +msgstr "" + +#: js/share.js:325 +msgid "can edit" +msgstr "" + +#: js/share.js:327 +msgid "access control" +msgstr "" + +#: js/share.js:330 +msgid "create" +msgstr "" + +#: js/share.js:333 +msgid "update" +msgstr "" + +#: js/share.js:336 +msgid "delete" +msgstr "" + +#: js/share.js:339 +msgid "share" +msgstr "" + +#: js/share.js:373 js/share.js:569 +msgid "Password protected" +msgstr "" + +#: js/share.js:582 +msgid "Error unsetting expiration date" +msgstr "" + +#: js/share.js:594 +msgid "Error setting expiration date" +msgstr "" + +#: js/share.js:609 +msgid "Sending ..." +msgstr "" + +#: js/share.js:620 +msgid "Email sent" +msgstr "" + +#: js/update.js:14 +msgid "" +"The update was unsuccessful. Please report this issue to the ownCloud " +"community." +msgstr "" + +#: js/update.js:18 +msgid "The update was successful. Redirecting you to ownCloud now." +msgstr "" + +#: lostpassword/controller.php:47 +msgid "ownCloud password reset" +msgstr "" + +#: lostpassword/templates/email.php:2 +msgid "Use the following link to reset your password: {link}" +msgstr "" + +#: lostpassword/templates/lostpassword.php:3 +msgid "You will receive a link to reset your password via Email." +msgstr "" + +#: lostpassword/templates/lostpassword.php:5 +msgid "Reset email send." +msgstr "" + +#: lostpassword/templates/lostpassword.php:8 +msgid "Request failed!" +msgstr "" + +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:39 +#: templates/login.php:28 +msgid "Username" +msgstr "" + +#: lostpassword/templates/lostpassword.php:14 +msgid "Request reset" +msgstr "" + +#: lostpassword/templates/resetpassword.php:4 +msgid "Your password was reset" +msgstr "" + +#: lostpassword/templates/resetpassword.php:5 +msgid "To login page" +msgstr "" + +#: lostpassword/templates/resetpassword.php:8 +msgid "New password" +msgstr "" + +#: lostpassword/templates/resetpassword.php:11 +msgid "Reset password" +msgstr "" + +#: strings.php:5 +msgid "Personal" +msgstr "" + +#: strings.php:6 +msgid "Users" +msgstr "" + +#: strings.php:7 +msgid "Apps" +msgstr "" + +#: strings.php:8 +msgid "Admin" +msgstr "" + +#: strings.php:9 +msgid "Help" +msgstr "" + +#: templates/403.php:12 +msgid "Access forbidden" +msgstr "" + +#: templates/404.php:12 +msgid "Cloud not found" +msgstr "" + +#: templates/edit_categories_dialog.php:4 +msgid "Edit categories" +msgstr "" + +#: templates/edit_categories_dialog.php:16 +msgid "Add" +msgstr "" + +#: templates/installation.php:23 templates/installation.php:30 +msgid "Security Warning" +msgstr "" + +#: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:25 +msgid "" +"Without a secure random number generator an attacker may be able to predict " +"password reset tokens and take over your account." +msgstr "" + +#: templates/installation.php:31 +msgid "" +"Your data directory and files are probably accessible from the internet " +"because the .htaccess file does not work." +msgstr "" + +#: templates/installation.php:32 +msgid "" +"For information how to properly configure your server, please see the documentation." +msgstr "" + +#: templates/installation.php:36 +msgid "Create an admin account" +msgstr "" + +#: templates/installation.php:52 +msgid "Advanced" +msgstr "" + +#: templates/installation.php:54 +msgid "Data folder" +msgstr "" + +#: templates/installation.php:61 +msgid "Configure the database" +msgstr "" + +#: templates/installation.php:66 templates/installation.php:77 +#: templates/installation.php:87 templates/installation.php:97 +msgid "will be used" +msgstr "" + +#: templates/installation.php:109 +msgid "Database user" +msgstr "" + +#: templates/installation.php:113 +msgid "Database password" +msgstr "" + +#: templates/installation.php:117 +msgid "Database name" +msgstr "" + +#: templates/installation.php:125 +msgid "Database tablespace" +msgstr "" + +#: templates/installation.php:131 +msgid "Database host" +msgstr "" + +#: templates/installation.php:136 +msgid "Finish setup" +msgstr "" + +#: templates/layout.guest.php:33 +msgid "web services under your control" +msgstr "" + +#: templates/layout.user.php:48 +msgid "Log out" +msgstr "" + +#: templates/login.php:10 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:11 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:13 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:19 +msgid "Lost your password?" +msgstr "" + +#: templates/login.php:41 +msgid "remember" +msgstr "" + +#: templates/login.php:43 +msgid "Log in" +msgstr "" + +#: templates/login.php:49 +msgid "Alternative Logins" +msgstr "" + +#: templates/part.pagenavi.php:3 +msgid "prev" +msgstr "" + +#: templates/part.pagenavi.php:20 +msgid "next" +msgstr "" + +#: templates/update.php:3 +#, php-format +msgid "Updating ownCloud to version %s, this may take a while." +msgstr "" diff --git a/l10n/be/files.po b/l10n/be/files.po new file mode 100644 index 0000000000..8a60af5a96 --- /dev/null +++ b/l10n/be/files.po @@ -0,0 +1,315 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" +"Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: ajax/move.php:17 +#, php-format +msgid "Could not move %s - File with this name already exists" +msgstr "" + +#: ajax/move.php:27 ajax/move.php:30 +#, php-format +msgid "Could not move %s" +msgstr "" + +#: ajax/rename.php:22 ajax/rename.php:25 +msgid "Unable to rename file" +msgstr "" + +#: ajax/upload.php:19 +msgid "No file was uploaded. Unknown error" +msgstr "" + +#: ajax/upload.php:26 +msgid "There is no error, the file uploaded with success" +msgstr "" + +#: ajax/upload.php:27 +msgid "" +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " +msgstr "" + +#: ajax/upload.php:29 +msgid "" +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in " +"the HTML form" +msgstr "" + +#: ajax/upload.php:31 +msgid "The uploaded file was only partially uploaded" +msgstr "" + +#: ajax/upload.php:32 +msgid "No file was uploaded" +msgstr "" + +#: ajax/upload.php:33 +msgid "Missing a temporary folder" +msgstr "" + +#: ajax/upload.php:34 +msgid "Failed to write to disk" +msgstr "" + +#: ajax/upload.php:52 +msgid "Not enough storage available" +msgstr "" + +#: ajax/upload.php:83 +msgid "Invalid directory." +msgstr "" + +#: appinfo/app.php:10 +msgid "Files" +msgstr "" + +#: js/fileactions.js:125 +msgid "Delete permanently" +msgstr "" + +#: js/fileactions.js:127 templates/index.php:91 templates/index.php:92 +msgid "Delete" +msgstr "" + +#: js/fileactions.js:193 +msgid "Rename" +msgstr "" + +#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 +#: js/files.js:438 +msgid "Pending" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "{new_name} already exists" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "replace" +msgstr "" + +#: js/filelist.js:253 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:253 js/filelist.js:255 +msgid "cancel" +msgstr "" + +#: js/filelist.js:295 +msgid "replaced {new_name}" +msgstr "" + +#: js/filelist.js:295 js/filelist.js:297 +msgid "undo" +msgstr "" + +#: js/filelist.js:297 +msgid "replaced {new_name} with {old_name}" +msgstr "" + +#: js/filelist.js:322 +msgid "perform delete operation" +msgstr "" + +#: js/files.js:52 +msgid "'.' is an invalid file name." +msgstr "" + +#: js/files.js:56 +msgid "File name cannot be empty." +msgstr "" + +#: js/files.js:64 +msgid "" +"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not " +"allowed." +msgstr "" + +#: js/files.js:78 +msgid "Your storage is full, files can not be updated or synced anymore!" +msgstr "" + +#: js/files.js:82 +msgid "Your storage is almost full ({usedSpacePercent}%)" +msgstr "" + +#: js/files.js:224 +msgid "" +"Your download is being prepared. This might take some time if the files are " +"big." +msgstr "" + +#: js/files.js:261 +msgid "Unable to upload your file as it is a directory or has 0 bytes" +msgstr "" + +#: js/files.js:261 +msgid "Upload Error" +msgstr "" + +#: js/files.js:272 +msgid "Close" +msgstr "" + +#: js/files.js:311 +msgid "1 file uploading" +msgstr "" + +#: js/files.js:314 js/files.js:369 js/files.js:384 +msgid "{count} files uploading" +msgstr "" + +#: js/files.js:387 js/files.js:422 +msgid "Upload cancelled." +msgstr "" + +#: js/files.js:496 +msgid "" +"File upload is in progress. Leaving the page now will cancel the upload." +msgstr "" + +#: js/files.js:569 +msgid "URL cannot be empty." +msgstr "" + +#: js/files.js:574 +msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" +msgstr "" + +#: js/files.js:948 templates/index.php:67 +msgid "Name" +msgstr "" + +#: js/files.js:949 templates/index.php:78 +msgid "Size" +msgstr "" + +#: js/files.js:950 templates/index.php:80 +msgid "Modified" +msgstr "" + +#: js/files.js:969 +msgid "1 folder" +msgstr "" + +#: js/files.js:971 +msgid "{count} folders" +msgstr "" + +#: js/files.js:979 +msgid "1 file" +msgstr "" + +#: js/files.js:981 +msgid "{count} files" +msgstr "" + +#: lib/helper.php:11 templates/index.php:18 +msgid "Upload" +msgstr "" + +#: templates/admin.php:5 +msgid "File handling" +msgstr "" + +#: templates/admin.php:7 +msgid "Maximum upload size" +msgstr "" + +#: templates/admin.php:10 +msgid "max. possible: " +msgstr "" + +#: templates/admin.php:15 +msgid "Needed for multi-file and folder downloads." +msgstr "" + +#: templates/admin.php:17 +msgid "Enable ZIP-download" +msgstr "" + +#: templates/admin.php:20 +msgid "0 is unlimited" +msgstr "" + +#: templates/admin.php:22 +msgid "Maximum input size for ZIP files" +msgstr "" + +#: templates/admin.php:26 +msgid "Save" +msgstr "" + +#: templates/index.php:7 +msgid "New" +msgstr "" + +#: templates/index.php:10 +msgid "Text file" +msgstr "" + +#: templates/index.php:12 +msgid "Folder" +msgstr "" + +#: templates/index.php:14 +msgid "From link" +msgstr "" + +#: templates/index.php:40 +msgid "Deleted files" +msgstr "" + +#: templates/index.php:46 +msgid "Cancel upload" +msgstr "" + +#: templates/index.php:59 +msgid "Nothing in here. Upload something!" +msgstr "" + +#: templates/index.php:73 +msgid "Download" +msgstr "" + +#: templates/index.php:85 templates/index.php:86 +msgid "Unshare" +msgstr "" + +#: templates/index.php:105 +msgid "Upload too large" +msgstr "" + +#: templates/index.php:107 +msgid "" +"The files you are trying to upload exceed the maximum size for file uploads " +"on this server." +msgstr "" + +#: templates/index.php:112 +msgid "Files are being scanned, please wait." +msgstr "" + +#: templates/index.php:115 +msgid "Current scanning" +msgstr "" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/be/files_encryption.po b/l10n/be/files_encryption.po new file mode 100644 index 0000000000..f1aff43a6c --- /dev/null +++ b/l10n/be/files_encryption.po @@ -0,0 +1,38 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2012-08-12 22:33+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: templates/settings-personal.php:4 templates/settings.php:5 +msgid "Encryption" +msgstr "" + +#: templates/settings-personal.php:7 +msgid "File encryption is enabled." +msgstr "" + +#: templates/settings-personal.php:11 +msgid "The following file types will not be encrypted:" +msgstr "" + +#: templates/settings.php:7 +msgid "Exclude the following file types from encryption:" +msgstr "" + +#: templates/settings.php:12 +msgid "None" +msgstr "" diff --git a/l10n/be/files_external.po b/l10n/be/files_external.po new file mode 100644 index 0000000000..de27bede65 --- /dev/null +++ b/l10n/be/files_external.po @@ -0,0 +1,120 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2012-08-12 22:34+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: js/dropbox.js:7 js/dropbox.js:25 js/google.js:7 js/google.js:23 +msgid "Access granted" +msgstr "" + +#: js/dropbox.js:28 js/dropbox.js:74 js/dropbox.js:79 js/dropbox.js:86 +msgid "Error configuring Dropbox storage" +msgstr "" + +#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40 +msgid "Grant access" +msgstr "" + +#: js/dropbox.js:73 js/google.js:72 +msgid "Fill out all required fields" +msgstr "" + +#: js/dropbox.js:85 +msgid "Please provide a valid Dropbox app key and secret." +msgstr "" + +#: js/google.js:26 js/google.js:73 js/google.js:78 +msgid "Error configuring Google Drive storage" +msgstr "" + +#: lib/config.php:413 +msgid "" +"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " +"is not possible. Please ask your system administrator to install it." +msgstr "" + +#: lib/config.php:414 +msgid "" +"Warning: The FTP support in PHP is not enabled or installed. Mounting" +" of FTP shares is not possible. Please ask your system administrator to " +"install it." +msgstr "" + +#: templates/settings.php:3 +msgid "External Storage" +msgstr "" + +#: templates/settings.php:8 templates/settings.php:22 +msgid "Mount point" +msgstr "" + +#: templates/settings.php:9 +msgid "Backend" +msgstr "" + +#: templates/settings.php:10 +msgid "Configuration" +msgstr "" + +#: templates/settings.php:11 +msgid "Options" +msgstr "" + +#: templates/settings.php:12 +msgid "Applicable" +msgstr "" + +#: templates/settings.php:27 +msgid "Add mount point" +msgstr "" + +#: templates/settings.php:85 +msgid "None set" +msgstr "" + +#: templates/settings.php:86 +msgid "All Users" +msgstr "" + +#: templates/settings.php:87 +msgid "Groups" +msgstr "" + +#: templates/settings.php:95 +msgid "Users" +msgstr "" + +#: templates/settings.php:108 templates/settings.php:109 +#: templates/settings.php:144 templates/settings.php:145 +msgid "Delete" +msgstr "" + +#: templates/settings.php:124 +msgid "Enable User External Storage" +msgstr "" + +#: templates/settings.php:125 +msgid "Allow users to mount their own external storage" +msgstr "" + +#: templates/settings.php:136 +msgid "SSL root certificates" +msgstr "" + +#: templates/settings.php:153 +msgid "Import Root Certificate" +msgstr "" diff --git a/l10n/be/files_sharing.po b/l10n/be/files_sharing.po new file mode 100644 index 0000000000..c09045efa9 --- /dev/null +++ b/l10n/be/files_sharing.po @@ -0,0 +1,48 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2012-08-12 22:35+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: templates/authenticate.php:4 +msgid "Password" +msgstr "" + +#: templates/authenticate.php:6 +msgid "Submit" +msgstr "" + +#: templates/public.php:9 +#, php-format +msgid "%s shared the folder %s with you" +msgstr "" + +#: templates/public.php:11 +#, php-format +msgid "%s shared the file %s with you" +msgstr "" + +#: templates/public.php:14 templates/public.php:30 +msgid "Download" +msgstr "" + +#: templates/public.php:29 +msgid "No preview available for" +msgstr "" + +#: templates/public.php:35 +msgid "web services under your control" +msgstr "" diff --git a/l10n/be/files_trashbin.po b/l10n/be/files_trashbin.po new file mode 100644 index 0000000000..c9d67b5a27 --- /dev/null +++ b/l10n/be/files_trashbin.po @@ -0,0 +1,68 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-01-31 16:03+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: ajax/delete.php:22 +#, php-format +msgid "Couldn't delete %s permanently" +msgstr "" + +#: ajax/undelete.php:41 +#, php-format +msgid "Couldn't restore %s" +msgstr "" + +#: js/trash.js:7 js/trash.js:94 +msgid "perform restore operation" +msgstr "" + +#: js/trash.js:33 +msgid "delete file permanently" +msgstr "" + +#: js/trash.js:125 templates/index.php:17 +msgid "Name" +msgstr "" + +#: js/trash.js:126 templates/index.php:27 +msgid "Deleted" +msgstr "" + +#: js/trash.js:135 +msgid "1 folder" +msgstr "" + +#: js/trash.js:137 +msgid "{count} folders" +msgstr "" + +#: js/trash.js:145 +msgid "1 file" +msgstr "" + +#: js/trash.js:147 +msgid "{count} files" +msgstr "" + +#: templates/index.php:9 +msgid "Nothing in here. Your trash bin is empty!" +msgstr "" + +#: templates/index.php:20 templates/index.php:22 +msgid "Restore" +msgstr "" diff --git a/l10n/be/files_versions.po b/l10n/be/files_versions.po new file mode 100644 index 0000000000..28ff041ebf --- /dev/null +++ b/l10n/be/files_versions.po @@ -0,0 +1,65 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2012-08-12 22:37+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: ajax/rollbackVersion.php:15 +#, php-format +msgid "Could not revert: %s" +msgstr "" + +#: history.php:40 +msgid "success" +msgstr "" + +#: history.php:42 +#, php-format +msgid "File %s was reverted to version %s" +msgstr "" + +#: history.php:49 +msgid "failure" +msgstr "" + +#: history.php:51 +#, php-format +msgid "File %s could not be reverted to version %s" +msgstr "" + +#: history.php:68 +msgid "No old versions available" +msgstr "" + +#: history.php:73 +msgid "No path specified" +msgstr "" + +#: js/versions.js:16 +msgid "History" +msgstr "" + +#: templates/history.php:20 +msgid "Revert a file to a previous version by clicking on its revert button" +msgstr "" + +#: templates/settings.php:3 +msgid "Files Versioning" +msgstr "" + +#: templates/settings.php:4 +msgid "Enable" +msgstr "" diff --git a/l10n/be/lib.po b/l10n/be/lib.po new file mode 100644 index 0000000000..5f4d28d5e4 --- /dev/null +++ b/l10n/be/lib.po @@ -0,0 +1,253 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2012-07-27 22:23+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: app.php:349 +msgid "Help" +msgstr "" + +#: app.php:362 +msgid "Personal" +msgstr "" + +#: app.php:373 +msgid "Settings" +msgstr "" + +#: app.php:385 +msgid "Users" +msgstr "" + +#: app.php:398 +msgid "Apps" +msgstr "" + +#: app.php:406 +msgid "Admin" +msgstr "" + +#: files.php:202 +msgid "ZIP download is turned off." +msgstr "" + +#: files.php:203 +msgid "Files need to be downloaded one by one." +msgstr "" + +#: files.php:204 files.php:231 +msgid "Back to Files" +msgstr "" + +#: files.php:228 +msgid "Selected files too large to generate zip file." +msgstr "" + +#: helper.php:228 +msgid "couldn't be determined" +msgstr "" + +#: json.php:28 +msgid "Application is not enabled" +msgstr "" + +#: json.php:39 json.php:62 json.php:73 +msgid "Authentication error" +msgstr "" + +#: json.php:51 +msgid "Token expired. Please reload page." +msgstr "" + +#: search/provider/file.php:17 search/provider/file.php:35 +msgid "Files" +msgstr "" + +#: search/provider/file.php:26 search/provider/file.php:33 +msgid "Text" +msgstr "" + +#: search/provider/file.php:29 +msgid "Images" +msgstr "" + +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:294 setup.php:339 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:427 setup.php:494 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 +#: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 +#: setup.php:545 setup.php:552 setup.php:561 setup.php:569 setup.php:578 +#: setup.php:584 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 +#: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 +#: setup.php:546 setup.php:562 setup.php:570 setup.php:579 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:273 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:274 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:279 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:280 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:553 setup.php:585 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:649 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: setup.php:651 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + +#: template.php:113 +msgid "seconds ago" +msgstr "" + +#: template.php:114 +msgid "1 minute ago" +msgstr "" + +#: template.php:115 +#, php-format +msgid "%d minutes ago" +msgstr "" + +#: template.php:116 +msgid "1 hour ago" +msgstr "" + +#: template.php:117 +#, php-format +msgid "%d hours ago" +msgstr "" + +#: template.php:118 +msgid "today" +msgstr "" + +#: template.php:119 +msgid "yesterday" +msgstr "" + +#: template.php:120 +#, php-format +msgid "%d days ago" +msgstr "" + +#: template.php:121 +msgid "last month" +msgstr "" + +#: template.php:122 +#, php-format +msgid "%d months ago" +msgstr "" + +#: template.php:123 +msgid "last year" +msgstr "" + +#: template.php:124 +msgid "years ago" +msgstr "" + +#: updater.php:78 +#, php-format +msgid "%s is available. Get more information" +msgstr "" + +#: updater.php:81 +msgid "up to date" +msgstr "" + +#: updater.php:84 +msgid "updates check is disabled" +msgstr "" + +#: vcategories.php:188 vcategories.php:249 +#, php-format +msgid "Could not find category \"%s\"" +msgstr "" diff --git a/l10n/be/settings.po b/l10n/be/settings.po new file mode 100644 index 0000000000..8610e96b1a --- /dev/null +++ b/l10n/be/settings.po @@ -0,0 +1,496 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2011-07-25 16:05+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: ajax/apps/ocs.php:20 +msgid "Unable to load list from App Store" +msgstr "" + +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/togglegroups.php:18 +msgid "Authentication error" +msgstr "" + +#: ajax/changedisplayname.php:32 +msgid "Unable to change display name" +msgstr "" + +#: ajax/creategroup.php:10 +msgid "Group already exists" +msgstr "" + +#: ajax/creategroup.php:19 +msgid "Unable to add group" +msgstr "" + +#: ajax/enableapp.php:11 +msgid "Could not enable app. " +msgstr "" + +#: ajax/lostpassword.php:12 +msgid "Email saved" +msgstr "" + +#: ajax/lostpassword.php:14 +msgid "Invalid email" +msgstr "" + +#: ajax/removegroup.php:13 +msgid "Unable to delete group" +msgstr "" + +#: ajax/removeuser.php:24 +msgid "Unable to delete user" +msgstr "" + +#: ajax/setlanguage.php:15 +msgid "Language changed" +msgstr "" + +#: ajax/setlanguage.php:17 ajax/setlanguage.php:20 +msgid "Invalid request" +msgstr "" + +#: ajax/togglegroups.php:12 +msgid "Admins can't remove themself from the admin group" +msgstr "" + +#: ajax/togglegroups.php:28 +#, php-format +msgid "Unable to add user to group %s" +msgstr "" + +#: ajax/togglegroups.php:34 +#, php-format +msgid "Unable to remove user from group %s" +msgstr "" + +#: ajax/updateapp.php:14 +msgid "Couldn't update app." +msgstr "" + +#: js/apps.js:30 +msgid "Update to {appversion}" +msgstr "" + +#: js/apps.js:36 js/apps.js:76 +msgid "Disable" +msgstr "" + +#: js/apps.js:36 js/apps.js:64 +msgid "Enable" +msgstr "" + +#: js/apps.js:55 +msgid "Please wait...." +msgstr "" + +#: js/apps.js:84 +msgid "Updating...." +msgstr "" + +#: js/apps.js:87 +msgid "Error while updating app" +msgstr "" + +#: js/apps.js:87 +msgid "Error" +msgstr "" + +#: js/apps.js:90 +msgid "Updated" +msgstr "" + +#: js/personal.js:96 +msgid "Saving..." +msgstr "" + +#: js/users.js:30 +msgid "deleted" +msgstr "" + +#: js/users.js:30 +msgid "undo" +msgstr "" + +#: js/users.js:62 +msgid "Unable to remove user" +msgstr "" + +#: js/users.js:75 templates/users.php:26 templates/users.php:80 +#: templates/users.php:105 +msgid "Groups" +msgstr "" + +#: js/users.js:78 templates/users.php:82 templates/users.php:119 +msgid "Group Admin" +msgstr "" + +#: js/users.js:99 templates/users.php:161 +msgid "Delete" +msgstr "" + +#: js/users.js:191 +msgid "add group" +msgstr "" + +#: js/users.js:352 +msgid "A valid username must be provided" +msgstr "" + +#: js/users.js:353 js/users.js:359 js/users.js:374 +msgid "Error creating user" +msgstr "" + +#: js/users.js:358 +msgid "A valid password must be provided" +msgstr "" + +#: personal.php:34 personal.php:35 +msgid "__language_name__" +msgstr "" + +#: templates/admin.php:15 +msgid "Security Warning" +msgstr "" + +#: templates/admin.php:18 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides is not working. We " +"strongly suggest that you configure your webserver in a way that the data " +"directory is no longer accessible or you move the data directory outside the" +" webserver document root." +msgstr "" + +#: templates/admin.php:29 +msgid "Setup Warning" +msgstr "" + +#: templates/admin.php:32 +msgid "" +"Your web server is not yet properly setup to allow files synchronization " +"because the WebDAV interface seems to be broken." +msgstr "" + +#: templates/admin.php:33 +#, php-format +msgid "Please double check the installation guides." +msgstr "" + +#: templates/admin.php:44 +msgid "Module 'fileinfo' missing" +msgstr "" + +#: templates/admin.php:47 +msgid "" +"The PHP module 'fileinfo' is missing. We strongly recommend to enable this " +"module to get best results with mime-type detection." +msgstr "" + +#: templates/admin.php:58 +msgid "Locale not working" +msgstr "" + +#: templates/admin.php:61 +msgid "" +"This ownCloud server can't set system locale to " +"\"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with" +" certain characters in file names. We strongly suggest to install the " +"required packages on your system to support en_US.UTF-8/en_US.UTF8." +msgstr "" + +#: templates/admin.php:72 +msgid "Internet connection not working" +msgstr "" + +#: templates/admin.php:75 +msgid "" +"This ownCloud server has no working internet connection. This means that " +"some of the features like mounting of external storage, notifications about " +"updates or installation of 3rd party apps don´t work. Accessing files from " +"remote and sending of notification emails might also not work. We suggest to" +" enable internet connection for this server if you want to have all features" +" of ownCloud." +msgstr "" + +#: templates/admin.php:89 +msgid "Cron" +msgstr "" + +#: templates/admin.php:98 +msgid "Execute one task with each page loaded" +msgstr "" + +#: templates/admin.php:108 +msgid "" +"cron.php is registered at a webcron service. Call the cron.php page in the " +"owncloud root once a minute over http." +msgstr "" + +#: templates/admin.php:118 +msgid "" +"Use systems cron service. Call the cron.php file in the owncloud folder via " +"a system cronjob once a minute." +msgstr "" + +#: templates/admin.php:125 +msgid "Sharing" +msgstr "" + +#: templates/admin.php:131 +msgid "Enable Share API" +msgstr "" + +#: templates/admin.php:132 +msgid "Allow apps to use the Share API" +msgstr "" + +#: templates/admin.php:139 +msgid "Allow links" +msgstr "" + +#: templates/admin.php:140 +msgid "Allow users to share items to the public with links" +msgstr "" + +#: templates/admin.php:147 +msgid "Allow resharing" +msgstr "" + +#: templates/admin.php:148 +msgid "Allow users to share items shared with them again" +msgstr "" + +#: templates/admin.php:155 +msgid "Allow users to share with anyone" +msgstr "" + +#: templates/admin.php:158 +msgid "Allow users to only share with users in their groups" +msgstr "" + +#: templates/admin.php:165 +msgid "Security" +msgstr "" + +#: templates/admin.php:178 +msgid "Enforce HTTPS" +msgstr "" + +#: templates/admin.php:179 +msgid "" +"Enforces the clients to connect to ownCloud via an encrypted connection." +msgstr "" + +#: templates/admin.php:182 +msgid "" +"Please connect to this ownCloud instance via HTTPS to enable or disable the " +"SSL enforcement." +msgstr "" + +#: templates/admin.php:192 +msgid "Log" +msgstr "" + +#: templates/admin.php:193 +msgid "Log level" +msgstr "" + +#: templates/admin.php:220 +msgid "More" +msgstr "" + +#: templates/admin.php:227 templates/personal.php:98 +msgid "Version" +msgstr "" + +#: templates/admin.php:230 templates/personal.php:100 +msgid "" +"Developed by the ownCloud community, the source code is " +"licensed under the AGPL." +msgstr "" + +#: templates/apps.php:10 +msgid "Add your App" +msgstr "" + +#: templates/apps.php:11 +msgid "More Apps" +msgstr "" + +#: templates/apps.php:24 +msgid "Select an App" +msgstr "" + +#: templates/apps.php:28 +msgid "See application page at apps.owncloud.com" +msgstr "" + +#: templates/apps.php:29 +msgid "-licensed by " +msgstr "" + +#: templates/apps.php:31 +msgid "Update" +msgstr "" + +#: templates/help.php:3 +msgid "User Documentation" +msgstr "" + +#: templates/help.php:4 +msgid "Administrator Documentation" +msgstr "" + +#: templates/help.php:6 +msgid "Online Documentation" +msgstr "" + +#: templates/help.php:7 +msgid "Forum" +msgstr "" + +#: templates/help.php:9 +msgid "Bugtracker" +msgstr "" + +#: templates/help.php:11 +msgid "Commercial Support" +msgstr "" + +#: templates/personal.php:8 +#, php-format +msgid "You have used %s of the available %s" +msgstr "" + +#: templates/personal.php:14 +msgid "Get the apps to sync your files" +msgstr "" + +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:79 +msgid "Password" +msgstr "" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 +msgid "Unable to change your password" +msgstr "" + +#: templates/personal.php:39 +msgid "Current password" +msgstr "" + +#: templates/personal.php:40 +msgid "New password" +msgstr "" + +#: templates/personal.php:42 +msgid "Change password" +msgstr "" + +#: templates/personal.php:54 templates/users.php:78 +msgid "Display Name" +msgstr "" + +#: templates/personal.php:55 +msgid "Your display name was changed" +msgstr "" + +#: templates/personal.php:56 +msgid "Unable to change your display name" +msgstr "" + +#: templates/personal.php:59 +msgid "Change display name" +msgstr "" + +#: templates/personal.php:68 +msgid "Email" +msgstr "" + +#: templates/personal.php:69 +msgid "Your email address" +msgstr "" + +#: templates/personal.php:70 +msgid "Fill in an email address to enable password recovery" +msgstr "" + +#: templates/personal.php:76 templates/personal.php:77 +msgid "Language" +msgstr "" + +#: templates/personal.php:82 +msgid "Help translate" +msgstr "" + +#: templates/personal.php:87 +msgid "WebDAV" +msgstr "" + +#: templates/personal.php:89 +msgid "Use this address to connect to your ownCloud in your file manager" +msgstr "" + +#: templates/users.php:21 templates/users.php:77 +msgid "Login Name" +msgstr "" + +#: templates/users.php:32 +msgid "Create" +msgstr "" + +#: templates/users.php:35 +msgid "Default Storage" +msgstr "" + +#: templates/users.php:41 templates/users.php:139 +msgid "Unlimited" +msgstr "" + +#: templates/users.php:59 templates/users.php:154 +msgid "Other" +msgstr "" + +#: templates/users.php:84 +msgid "Storage" +msgstr "" + +#: templates/users.php:95 +msgid "change display name" +msgstr "" + +#: templates/users.php:99 +msgid "set new password" +msgstr "" + +#: templates/users.php:134 +msgid "Default" +msgstr "" diff --git a/l10n/be/user_ldap.po b/l10n/be/user_ldap.po new file mode 100644 index 0000000000..1d422381d0 --- /dev/null +++ b/l10n/be/user_ldap.po @@ -0,0 +1,309 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2012-08-12 22:45+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: ajax/deleteConfiguration.php:34 +msgid "Failed to delete the server configuration" +msgstr "" + +#: ajax/testConfiguration.php:35 +msgid "The configuration is valid and the connection could be established!" +msgstr "" + +#: ajax/testConfiguration.php:37 +msgid "" +"The configuration is valid, but the Bind failed. Please check the server " +"settings and credentials." +msgstr "" + +#: ajax/testConfiguration.php:40 +msgid "" +"The configuration is invalid. Please look in the ownCloud log for further " +"details." +msgstr "" + +#: js/settings.js:66 +msgid "Deletion failed" +msgstr "" + +#: js/settings.js:82 +msgid "Take over settings from recent server configuration?" +msgstr "" + +#: js/settings.js:83 +msgid "Keep settings?" +msgstr "" + +#: js/settings.js:97 +msgid "Cannot add server configuration" +msgstr "" + +#: js/settings.js:121 +msgid "Connection test succeeded" +msgstr "" + +#: js/settings.js:126 +msgid "Connection test failed" +msgstr "" + +#: js/settings.js:136 +msgid "Do you really want to delete the current Server Configuration?" +msgstr "" + +#: js/settings.js:137 +msgid "Confirm Deletion" +msgstr "" + +#: templates/settings.php:8 +msgid "" +"Warning: Apps user_ldap and user_webdavauth are incompatible. You may" +" experience unexpected behaviour. Please ask your system administrator to " +"disable one of them." +msgstr "" + +#: templates/settings.php:11 +msgid "" +"Warning: The PHP LDAP module is not installed, the backend will not " +"work. Please ask your system administrator to install it." +msgstr "" + +#: templates/settings.php:15 +msgid "Server configuration" +msgstr "" + +#: templates/settings.php:17 +msgid "Add Server Configuration" +msgstr "" + +#: templates/settings.php:21 +msgid "Host" +msgstr "" + +#: templates/settings.php:21 +msgid "" +"You can omit the protocol, except you require SSL. Then start with ldaps://" +msgstr "" + +#: templates/settings.php:22 +msgid "Base DN" +msgstr "" + +#: templates/settings.php:22 +msgid "One Base DN per line" +msgstr "" + +#: templates/settings.php:22 +msgid "You can specify Base DN for users and groups in the Advanced tab" +msgstr "" + +#: templates/settings.php:23 +msgid "User DN" +msgstr "" + +#: templates/settings.php:23 +msgid "" +"The DN of the client user with which the bind shall be done, e.g. " +"uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password " +"empty." +msgstr "" + +#: templates/settings.php:24 +msgid "Password" +msgstr "" + +#: templates/settings.php:24 +msgid "For anonymous access, leave DN and Password empty." +msgstr "" + +#: templates/settings.php:25 +msgid "User Login Filter" +msgstr "" + +#: templates/settings.php:25 +#, php-format +msgid "" +"Defines the filter to apply, when login is attempted. %%uid replaces the " +"username in the login action." +msgstr "" + +#: templates/settings.php:25 +#, php-format +msgid "use %%uid placeholder, e.g. \"uid=%%uid\"" +msgstr "" + +#: templates/settings.php:26 +msgid "User List Filter" +msgstr "" + +#: templates/settings.php:26 +msgid "Defines the filter to apply, when retrieving users." +msgstr "" + +#: templates/settings.php:26 +msgid "without any placeholder, e.g. \"objectClass=person\"." +msgstr "" + +#: templates/settings.php:27 +msgid "Group Filter" +msgstr "" + +#: templates/settings.php:27 +msgid "Defines the filter to apply, when retrieving groups." +msgstr "" + +#: templates/settings.php:27 +msgid "without any placeholder, e.g. \"objectClass=posixGroup\"." +msgstr "" + +#: templates/settings.php:31 +msgid "Connection Settings" +msgstr "" + +#: templates/settings.php:33 +msgid "Configuration Active" +msgstr "" + +#: templates/settings.php:33 +msgid "When unchecked, this configuration will be skipped." +msgstr "" + +#: templates/settings.php:34 +msgid "Port" +msgstr "" + +#: templates/settings.php:35 +msgid "Backup (Replica) Host" +msgstr "" + +#: templates/settings.php:35 +msgid "" +"Give an optional backup host. It must be a replica of the main LDAP/AD " +"server." +msgstr "" + +#: templates/settings.php:36 +msgid "Backup (Replica) Port" +msgstr "" + +#: templates/settings.php:37 +msgid "Disable Main Server" +msgstr "" + +#: templates/settings.php:37 +msgid "When switched on, ownCloud will only connect to the replica server." +msgstr "" + +#: templates/settings.php:38 +msgid "Use TLS" +msgstr "" + +#: templates/settings.php:38 +msgid "Do not use it additionally for LDAPS connections, it will fail." +msgstr "" + +#: templates/settings.php:39 +msgid "Case insensitve LDAP server (Windows)" +msgstr "" + +#: templates/settings.php:40 +msgid "Turn off SSL certificate validation." +msgstr "" + +#: templates/settings.php:40 +msgid "" +"If connection only works with this option, import the LDAP server's SSL " +"certificate in your ownCloud server." +msgstr "" + +#: templates/settings.php:40 +msgid "Not recommended, use for testing only." +msgstr "" + +#: templates/settings.php:41 +msgid "in seconds. A change empties the cache." +msgstr "" + +#: templates/settings.php:43 +msgid "Directory Settings" +msgstr "" + +#: templates/settings.php:45 +msgid "User Display Name Field" +msgstr "" + +#: templates/settings.php:45 +msgid "The LDAP attribute to use to generate the user`s ownCloud name." +msgstr "" + +#: templates/settings.php:46 +msgid "Base User Tree" +msgstr "" + +#: templates/settings.php:46 +msgid "One User Base DN per line" +msgstr "" + +#: templates/settings.php:47 +msgid "User Search Attributes" +msgstr "" + +#: templates/settings.php:47 templates/settings.php:50 +msgid "Optional; one attribute per line" +msgstr "" + +#: templates/settings.php:48 +msgid "Group Display Name Field" +msgstr "" + +#: templates/settings.php:48 +msgid "The LDAP attribute to use to generate the groups`s ownCloud name." +msgstr "" + +#: templates/settings.php:49 +msgid "Base Group Tree" +msgstr "" + +#: templates/settings.php:49 +msgid "One Group Base DN per line" +msgstr "" + +#: templates/settings.php:50 +msgid "Group Search Attributes" +msgstr "" + +#: templates/settings.php:51 +msgid "Group-Member association" +msgstr "" + +#: templates/settings.php:53 +msgid "Special Attributes" +msgstr "" + +#: templates/settings.php:56 +msgid "in bytes" +msgstr "" + +#: templates/settings.php:58 +msgid "" +"Leave empty for user name (default). Otherwise, specify an LDAP/AD " +"attribute." +msgstr "" + +#: templates/settings.php:62 +msgid "Help" +msgstr "" diff --git a/l10n/be/user_webdavauth.po b/l10n/be/user_webdavauth.po new file mode 100644 index 0000000000..16028ee79d --- /dev/null +++ b/l10n/be/user_webdavauth.po @@ -0,0 +1,33 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2012-11-09 09:06+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: templates/settings.php:3 +msgid "WebDAV Authentication" +msgstr "" + +#: templates/settings.php:4 +msgid "URL: http://" +msgstr "" + +#: templates/settings.php:7 +msgid "" +"ownCloud will send the user credentials to this URL. This plugin checks the " +"response and will interpret the HTTP statuscodes 401 and 403 as invalid " +"credentials, and all other responses as valid credentials." +msgstr "" diff --git a/l10n/bg_BG/files.po b/l10n/bg_BG/files.po index 793c290313..449ff417fa 100644 --- a/l10n/bg_BG/files.po +++ b/l10n/bg_BG/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" @@ -66,7 +66,7 @@ msgstr "Липсва временна папка" #: ajax/upload.php:34 msgid "Failed to write to disk" -msgstr "" +msgstr "Възникна проблем при запис в диска" #: ajax/upload.php:52 msgid "Not enough storage available" @@ -74,7 +74,7 @@ msgstr "" #: ajax/upload.php:83 msgid "Invalid directory." -msgstr "" +msgstr "Невалидна директория." #: appinfo/app.php:10 msgid "Files" @@ -95,7 +95,7 @@ msgstr "Преименуване" #: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 #: js/files.js:438 msgid "Pending" -msgstr "" +msgstr "Чакащо" #: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" @@ -163,7 +163,7 @@ msgstr "" #: js/files.js:261 msgid "Upload Error" -msgstr "" +msgstr "Възникна грешка при качването" #: js/files.js:272 msgid "Close" @@ -208,19 +208,19 @@ msgstr "Променено" #: js/files.js:969 msgid "1 folder" -msgstr "" +msgstr "1 папка" #: js/files.js:971 msgid "{count} folders" -msgstr "" +msgstr "{count} папки" #: js/files.js:979 msgid "1 file" -msgstr "" +msgstr "1 файл" #: js/files.js:981 msgid "{count} files" -msgstr "" +msgstr "{count} файла" #: lib/helper.php:11 templates/index.php:18 msgid "Upload" @@ -264,7 +264,7 @@ msgstr "Ново" #: templates/index.php:10 msgid "Text file" -msgstr "" +msgstr "Текстов файл" #: templates/index.php:12 msgid "Folder" @@ -275,12 +275,12 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 msgid "Cancel upload" -msgstr "" +msgstr "Спри качването" #: templates/index.php:59 msgid "Nothing in here. Upload something!" diff --git a/l10n/bg_BG/files_trashbin.po b/l10n/bg_BG/files_trashbin.po index 07dfd469e3..f46acd62e5 100644 --- a/l10n/bg_BG/files_trashbin.po +++ b/l10n/bg_BG/files_trashbin.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Stefan Ilivanov , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 17:50+0000\n" +"Last-Translator: Stefan Ilivanov \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,20 +21,20 @@ msgstr "" #: ajax/delete.php:22 #, php-format msgid "Couldn't delete %s permanently" -msgstr "" +msgstr "Невъзможно изтриване на %s завинаги" #: ajax/undelete.php:41 #, php-format msgid "Couldn't restore %s" -msgstr "" +msgstr "Невъзможно възтановяване на %s" #: js/trash.js:7 js/trash.js:94 msgid "perform restore operation" -msgstr "" +msgstr "извършване на действие по възтановяване" #: js/trash.js:33 msgid "delete file permanently" -msgstr "" +msgstr "изтриване на файла завинаги" #: js/trash.js:125 templates/index.php:17 msgid "Name" @@ -41,27 +42,27 @@ msgstr "Име" #: js/trash.js:126 templates/index.php:27 msgid "Deleted" -msgstr "" +msgstr "Изтрито" #: js/trash.js:135 msgid "1 folder" -msgstr "" +msgstr "1 папка" #: js/trash.js:137 msgid "{count} folders" -msgstr "" +msgstr "{count} папки" #: js/trash.js:145 msgid "1 file" -msgstr "" +msgstr "1 файл" #: js/trash.js:147 msgid "{count} files" -msgstr "" +msgstr "{count} файла" #: templates/index.php:9 msgid "Nothing in here. Your trash bin is empty!" -msgstr "" +msgstr "Няма нищо. Кофата е празна!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" diff --git a/l10n/bg_BG/lib.po b/l10n/bg_BG/lib.po index a027f6cb72..6ffc3d0f7e 100644 --- a/l10n/bg_BG/lib.po +++ b/l10n/bg_BG/lib.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 15:39+0100\n" -"PO-Revision-Date: 2013-02-11 14:41+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 17:30+0000\n" +"Last-Translator: Stefan Ilivanov \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,27 +18,27 @@ msgstr "" "Language: bg_BG\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:339 +#: app.php:349 msgid "Help" msgstr "Помощ" -#: app.php:346 +#: app.php:362 msgid "Personal" msgstr "Лични" -#: app.php:351 +#: app.php:373 msgid "Settings" msgstr "Настройки" -#: app.php:356 +#: app.php:385 msgid "Users" msgstr "Потребители" -#: app.php:363 +#: app.php:398 msgid "Apps" msgstr "Приложения" -#: app.php:365 +#: app.php:406 msgid "Admin" msgstr "Админ" @@ -50,15 +50,15 @@ msgstr "Изтеглянето като ZIP е изключено." msgid "Files need to be downloaded one by one." msgstr "Файловете трябва да се изтеглят един по един." -#: files.php:203 files.php:228 +#: files.php:204 files.php:231 msgid "Back to Files" msgstr "Назад към файловете" -#: files.php:227 +#: files.php:228 msgid "Selected files too large to generate zip file." msgstr "Избраните файлове са прекалено големи за генерирането на ZIP архив." -#: helper.php:226 +#: helper.php:228 msgid "couldn't be determined" msgstr "не може да се определи" @@ -88,25 +88,25 @@ msgstr "Снимки" #: setup.php:34 msgid "Set an admin username." -msgstr "" +msgstr "Въведете потребителско име за администратор." #: setup.php:37 msgid "Set an admin password." -msgstr "" +msgstr "Въведете парола за администратор." #: setup.php:40 msgid "Specify a data folder." -msgstr "" +msgstr "Укажете папка за данни" #: setup.php:53 #, php-format msgid "%s enter the database username." -msgstr "" +msgstr "%s въведете потребителско име за базата с данни." #: setup.php:56 #, php-format msgid "%s enter the database name." -msgstr "" +msgstr "%s въведете име на базата с данни." #: setup.php:59 #, php-format @@ -118,7 +118,7 @@ msgstr "" msgid "%s set the database host." msgstr "" -#: setup.php:126 setup.php:291 setup.php:336 +#: setup.php:126 setup.php:294 setup.php:339 msgid "PostgreSQL username and/or password not valid" msgstr "" @@ -126,7 +126,7 @@ msgstr "" msgid "You need to enter either an existing account or the administrator." msgstr "" -#: setup.php:149 setup.php:423 setup.php:489 +#: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" msgstr "" @@ -134,51 +134,51 @@ msgstr "" msgid "MySQL username and/or password not valid" msgstr "" -#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 -#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 -#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 -#: setup.php:579 +#: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 +#: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 +#: setup.php:545 setup.php:552 setup.php:561 setup.php:569 setup.php:578 +#: setup.php:584 #, php-format msgid "DB Error: \"%s\"" msgstr "" -#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 -#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 -#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 +#: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 +#: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" msgstr "" -#: setup.php:270 +#: setup.php:273 #, php-format msgid "MySQL user '%s'@'localhost' exists already." msgstr "" -#: setup.php:271 +#: setup.php:274 msgid "Drop this user from MySQL" msgstr "" -#: setup.php:276 +#: setup.php:279 #, php-format msgid "MySQL user '%s'@'%%' already exists" msgstr "" -#: setup.php:277 +#: setup.php:280 msgid "Drop this user from MySQL." msgstr "" -#: setup.php:548 setup.php:580 +#: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" msgstr "" -#: setup.php:644 +#: setup.php:649 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:645 +#: setup.php:651 #, php-format msgid "Please double check the installation guides." msgstr "" @@ -235,16 +235,16 @@ msgstr "последната година" msgid "years ago" msgstr "последните години" -#: updater.php:75 +#: updater.php:78 #, php-format msgid "%s is available. Get more information" msgstr "%s е налична. Получете повече информация" -#: updater.php:77 +#: updater.php:81 msgid "up to date" msgstr "е актуална" -#: updater.php:80 +#: updater.php:84 msgid "updates check is disabled" msgstr "проверката за обновления е изключена" diff --git a/l10n/bg_BG/settings.po b/l10n/bg_BG/settings.po index 76d58b3b9b..c68881f51e 100644 --- a/l10n/bg_BG/settings.po +++ b/l10n/bg_BG/settings.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 17:50+0000\n" +"Last-Translator: Stefan Ilivanov \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -35,11 +35,11 @@ msgstr "" #: ajax/creategroup.php:10 msgid "Group already exists" -msgstr "" +msgstr "Групата вече съществува" #: ajax/creategroup.php:19 msgid "Unable to add group" -msgstr "" +msgstr "Невъзможно добавяне на група" #: ajax/enableapp.php:11 msgid "Could not enable app. " @@ -55,11 +55,11 @@ msgstr "" #: ajax/removegroup.php:13 msgid "Unable to delete group" -msgstr "" +msgstr "Невъзможно изтриване на група" #: ajax/removeuser.php:24 msgid "Unable to delete user" -msgstr "" +msgstr "Невъзможно изтриване на потребител" #: ajax/setlanguage.php:15 msgid "Language changed" @@ -93,7 +93,7 @@ msgstr "" #: js/apps.js:36 js/apps.js:76 msgid "Disable" -msgstr "" +msgstr "Изключено" #: js/apps.js:36 js/apps.js:64 msgid "Enable" @@ -101,11 +101,11 @@ msgstr "Включено" #: js/apps.js:55 msgid "Please wait...." -msgstr "" +msgstr "Моля почакайте...." #: js/apps.js:84 msgid "Updating...." -msgstr "" +msgstr "Обновява се..." #: js/apps.js:87 msgid "Error while updating app" @@ -117,15 +117,15 @@ msgstr "Грешка" #: js/apps.js:90 msgid "Updated" -msgstr "" +msgstr "Обновено" #: js/personal.js:96 msgid "Saving..." -msgstr "" +msgstr "Записване..." #: js/users.js:30 msgid "deleted" -msgstr "" +msgstr "изтрито" #: js/users.js:30 msgid "undo" @@ -148,19 +148,19 @@ msgstr "" msgid "Delete" msgstr "Изтриване" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" msgstr "" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" msgstr "" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" msgstr "" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" msgstr "" @@ -321,7 +321,7 @@ msgstr "Още" #: templates/admin.php:227 templates/personal.php:98 msgid "Version" -msgstr "" +msgstr "Версия" #: templates/admin.php:230 templates/personal.php:100 msgid "" @@ -339,7 +339,7 @@ msgstr "Добавете Ваше приложение" #: templates/apps.php:11 msgid "More Apps" -msgstr "" +msgstr "Още приложения" #: templates/apps.php:24 msgid "Select an App" @@ -359,27 +359,27 @@ msgstr "Обновяване" #: templates/help.php:3 msgid "User Documentation" -msgstr "" +msgstr "Потребителска документация" #: templates/help.php:4 msgid "Administrator Documentation" -msgstr "" +msgstr "Административна документация" #: templates/help.php:6 msgid "Online Documentation" -msgstr "" +msgstr "Документация" #: templates/help.php:7 msgid "Forum" -msgstr "" +msgstr "Форум" #: templates/help.php:9 msgid "Bugtracker" -msgstr "" +msgstr "Докладвани грешки" #: templates/help.php:11 msgid "Commercial Support" -msgstr "" +msgstr "Платена поддръжка" #: templates/personal.php:8 #, php-format @@ -420,7 +420,7 @@ msgstr "Промяна на паролата" #: templates/personal.php:54 templates/users.php:78 msgid "Display Name" -msgstr "" +msgstr "Екранно име" #: templates/personal.php:55 msgid "Your display name was changed" @@ -456,7 +456,7 @@ msgstr "Помогнете с превода" #: templates/personal.php:87 msgid "WebDAV" -msgstr "" +msgstr "WebDAV" #: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" @@ -464,7 +464,7 @@ msgstr "" #: templates/users.php:21 templates/users.php:77 msgid "Login Name" -msgstr "" +msgstr "Потребител" #: templates/users.php:32 msgid "Create" @@ -472,11 +472,11 @@ msgstr "Създаване" #: templates/users.php:35 msgid "Default Storage" -msgstr "" +msgstr "Хранилище по подразбиране" #: templates/users.php:41 templates/users.php:139 msgid "Unlimited" -msgstr "" +msgstr "Неограничено" #: templates/users.php:59 templates/users.php:154 msgid "Other" @@ -484,7 +484,7 @@ msgstr "Други" #: templates/users.php:84 msgid "Storage" -msgstr "" +msgstr "Хранилище" #: templates/users.php:95 msgid "change display name" @@ -496,4 +496,4 @@ msgstr "" #: templates/users.php:134 msgid "Default" -msgstr "" +msgstr "По подразбиране" diff --git a/l10n/bn_BD/files.po b/l10n/bn_BD/files.po index 037c92f25e..929307cb9c 100644 --- a/l10n/bn_BD/files.po +++ b/l10n/bn_BD/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n" "MIME-Version: 1.0\n" @@ -274,7 +274,7 @@ msgid "From link" msgstr " লিংক থেকে" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/ca/files.po b/l10n/ca/files.po index 62b2cf3066..722be0b3c8 100644 --- a/l10n/ca/files.po +++ b/l10n/ca/files.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: rogerc \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -280,8 +280,8 @@ msgid "From link" msgstr "Des d'enllaç" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Paperera" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/cs_CZ/files.po b/l10n/cs_CZ/files.po index a6905242c2..3a948f28f9 100644 --- a/l10n/cs_CZ/files.po +++ b/l10n/cs_CZ/files.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: Tomáš Chvátal \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -276,8 +276,8 @@ msgid "From link" msgstr "Z odkazu" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Koš" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/da/files.po b/l10n/da/files.po index f2da2db349..963b1c4557 100644 --- a/l10n/da/files.po +++ b/l10n/da/files.po @@ -16,9 +16,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: Frederik Lassen \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -282,8 +282,8 @@ msgid "From link" msgstr "Fra link" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Papirkurv" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/de/files.po b/l10n/de/files.po index 550b1c3034..0d7576ef62 100644 --- a/l10n/de/files.po +++ b/l10n/de/files.po @@ -28,9 +28,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 21:40+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -294,8 +294,8 @@ msgid "From link" msgstr "Von einem Link" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Mülleimer" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/de_DE/files.po b/l10n/de_DE/files.po index e79859cb6d..c62ccc0247 100644 --- a/l10n/de_DE/files.po +++ b/l10n/de_DE/files.po @@ -31,9 +31,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: stefanniedermann \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -297,8 +297,8 @@ msgid "From link" msgstr "Von einem Link" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Mülleimer" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/de_DE/files_versions.po b/l10n/de_DE/files_versions.po index 1280ca960c..8ea9b51ed6 100644 --- a/l10n/de_DE/files_versions.po +++ b/l10n/de_DE/files_versions.po @@ -9,15 +9,16 @@ # Marcel Kühlhorn , 2013. # , 2013. # , 2012. +# , 2013. # , 2013. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 22:10+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 10:50+0000\n" +"Last-Translator: robN \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -46,7 +47,7 @@ msgstr "Fehlgeschlagen" #: history.php:51 #, php-format msgid "File %s could not be reverted to version %s" -msgstr "Doe Dateo %s konnte nicht zur Version %s zurückgesetzt werden" +msgstr "Die Datei %s konnte nicht zur Version %s zurückgesetzt werden" #: history.php:68 msgid "No old versions available" @@ -62,7 +63,7 @@ msgstr "Historie" #: templates/history.php:20 msgid "Revert a file to a previous version by clicking on its revert button" -msgstr "Setze eine Datei zu durch Klicken auf den Zurücksetzen-Button auf einer frühere Version zurück" +msgstr "Setze eine Datei durch Klicken, auf den Zurücksetzen-Button, auf einer frühere Version zurück" #: templates/settings.php:3 msgid "Files Versioning" diff --git a/l10n/de_DE/lib.po b/l10n/de_DE/lib.po index 1984cf58d0..630cd9fa41 100644 --- a/l10n/de_DE/lib.po +++ b/l10n/de_DE/lib.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 20:50+0000\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 13:00+0000\n" "Last-Translator: Marcel Kühlhorn \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" @@ -27,27 +27,27 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:339 +#: app.php:349 msgid "Help" msgstr "Hilfe" -#: app.php:346 +#: app.php:362 msgid "Personal" msgstr "Persönlich" -#: app.php:351 +#: app.php:373 msgid "Settings" msgstr "Einstellungen" -#: app.php:356 +#: app.php:385 msgid "Users" msgstr "Benutzer" -#: app.php:363 +#: app.php:398 msgid "Apps" msgstr "Apps" -#: app.php:365 +#: app.php:406 msgid "Admin" msgstr "Administrator" @@ -59,15 +59,15 @@ msgstr "Der ZIP-Download ist deaktiviert." msgid "Files need to be downloaded one by one." msgstr "Die Dateien müssen einzeln heruntergeladen werden." -#: files.php:203 files.php:228 +#: files.php:204 files.php:231 msgid "Back to Files" msgstr "Zurück zu \"Dateien\"" -#: files.php:227 +#: files.php:228 msgid "Selected files too large to generate zip file." msgstr "Die gewählten Dateien sind zu groß, um eine ZIP-Datei zu erstellen." -#: helper.php:226 +#: helper.php:228 msgid "couldn't be determined" msgstr "konnte nicht ermittelt werden" @@ -127,7 +127,7 @@ msgstr "%s Der Datenbank-Name darf keine Punkte enthalten" msgid "%s set the database host." msgstr "%s setze den Datenbank-Host" -#: setup.php:126 setup.php:291 setup.php:336 +#: setup.php:126 setup.php:294 setup.php:339 msgid "PostgreSQL username and/or password not valid" msgstr "PostgreSQL Benutzername und/oder Passwort ungültig" @@ -135,7 +135,7 @@ msgstr "PostgreSQL Benutzername und/oder Passwort ungültig" msgid "You need to enter either an existing account or the administrator." msgstr "Sie müssen entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben." -#: setup.php:149 setup.php:423 setup.php:489 +#: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" msgstr "Oracle Benutzername und/oder Passwort ungültig" @@ -143,51 +143,51 @@ msgstr "Oracle Benutzername und/oder Passwort ungültig" msgid "MySQL username and/or password not valid" msgstr "MySQL Benutzername und/oder Passwort ungültig" -#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 -#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 -#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 -#: setup.php:579 +#: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 +#: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 +#: setup.php:545 setup.php:552 setup.php:561 setup.php:569 setup.php:578 +#: setup.php:584 #, php-format msgid "DB Error: \"%s\"" msgstr "DB Fehler: \"%s\"" -#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 -#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 -#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 +#: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 +#: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" msgstr "Fehlerhafter Befehl war: \"%s\"" -#: setup.php:270 +#: setup.php:273 #, php-format msgid "MySQL user '%s'@'localhost' exists already." msgstr "MySQL Benutzer '%s'@'localhost' existiert bereits." -#: setup.php:271 +#: setup.php:274 msgid "Drop this user from MySQL" msgstr "Lösche diesen Benutzer von MySQL" -#: setup.php:276 +#: setup.php:279 #, php-format msgid "MySQL user '%s'@'%%' already exists" msgstr "MySQL Benutzer '%s'@'%%' existiert bereits" -#: setup.php:277 +#: setup.php:280 msgid "Drop this user from MySQL." msgstr "Lösche diesen Benutzer von MySQL." -#: setup.php:548 setup.php:580 +#: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" msgstr "Fehlerhafter Befehl war: \"%s\", Name: %s, Passwort: %s" -#: setup.php:644 +#: setup.php:649 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "Ihr Web-Server ist noch nicht für Datei-Synchronisation bereit, weil die WebDAV-Schnittstelle vermutlich defekt ist." -#: setup.php:645 +#: setup.php:651 #, php-format msgid "Please double check the installation guides." msgstr "Bitte prüfen Sie die Instalationsanleitungen." @@ -244,16 +244,16 @@ msgstr "Letztes Jahr" msgid "years ago" msgstr "Vor Jahren" -#: updater.php:75 +#: updater.php:78 #, php-format msgid "%s is available. Get more information" msgstr "%s ist verfügbar. Weitere Informationen" -#: updater.php:77 +#: updater.php:81 msgid "up to date" msgstr "aktuell" -#: updater.php:80 +#: updater.php:84 msgid "updates check is disabled" msgstr "Die Update-Überprüfung ist ausgeschaltet" diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po index 3fe92343a0..77ae2f776f 100644 --- a/l10n/de_DE/settings.po +++ b/l10n/de_DE/settings.po @@ -18,6 +18,7 @@ # , 2012. # Phi Lieb <>, 2012. # Phillip Schichtel , 2013. +# , 2013. # , 2012. # , 2013. # Susi <>, 2013. @@ -29,9 +30,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 13:00+0000\n" +"Last-Translator: robN \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -167,19 +168,19 @@ msgstr "Gruppenadministrator" msgid "Delete" msgstr "Löschen" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" msgstr "Gruppe konnte nicht hinzugefügt werden" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" msgstr "" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" msgstr "Beim Erstellen des Benutzers ist ein Fehler aufgetreten" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" msgstr "" @@ -208,7 +209,7 @@ msgstr "" msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "Dein Web-Server ist wahrscheinlich noch nicht dafür eingestellt, Datei-Synchronisation zu erlauben, weil die WebDAV-Schnittstelle vermutlich defekt ist." +msgstr "Ihr Web-Server ist wahrscheinlich noch nicht konfiguriert, Datei-Synchronisation zu erlauben, weil die WebDAV-Schnittstelle vermutlich defekt ist." #: templates/admin.php:33 #, php-format @@ -281,7 +282,7 @@ msgstr "Teilen-API aktivieren" #: templates/admin.php:132 msgid "Allow apps to use the Share API" -msgstr "Erlaube es Anwendungen , die Teilen-API zu benutzen" +msgstr "Erlaube es Anwendungen, die Teilen-API zu benutzen" #: templates/admin.php:139 msgid "Allow links" @@ -324,7 +325,7 @@ msgstr "Zwingt die Clients, sich über eine verschlüsselte Verbindung mit ownCl msgid "" "Please connect to this ownCloud instance via HTTPS to enable or disable the " "SSL enforcement." -msgstr "Bitte verbinde dich mit dieser ownCloud-Instanz per HTTPS um SSL-Erzwingung zu aktivieren oder deaktivieren." +msgstr "Bitte verbinden Sie sich mit dieser ownCloud-Instanz per HTTPS um SSL-Erzwingung zu aktivieren oder deaktivieren." #: templates/admin.php:192 msgid "Log" @@ -407,7 +408,7 @@ msgstr "Sie verwenden %s der verfügbaren %s" #: templates/personal.php:14 msgid "Get the apps to sync your files" -msgstr "Installiere die App um Deine Dateien zu synchronisieren" +msgstr "Installieren Sie die Anwendungen um Ihre Dateien zu synchronisieren" #: templates/personal.php:25 msgid "Show First Run Wizard again" @@ -443,11 +444,11 @@ msgstr "Anzeigename" #: templates/personal.php:55 msgid "Your display name was changed" -msgstr "Dein Anzeigename wurde geändert" +msgstr "Ihr Anzeigename wurde geändert" #: templates/personal.php:56 msgid "Unable to change your display name" -msgstr "Das Ändern deines Anzeigenamens ist nicht möglich" +msgstr "Das Ändern Ihres Anzeigenamens ist nicht möglich" #: templates/personal.php:59 msgid "Change display name" diff --git a/l10n/el/files.po b/l10n/el/files.po index 3822166bb1..3f60220fd5 100644 --- a/l10n/el/files.po +++ b/l10n/el/files.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" @@ -281,7 +281,7 @@ msgid "From link" msgstr "Από σύνδεσμο" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/eo/files.po b/l10n/eo/files.po index f5745154d1..928c408fa2 100644 --- a/l10n/eo/files.po +++ b/l10n/eo/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" @@ -276,7 +276,7 @@ msgid "From link" msgstr "El ligilo" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/es/files.po b/l10n/es/files.po index 66b7601158..b6eac42de3 100644 --- a/l10n/es/files.po +++ b/l10n/es/files.po @@ -18,9 +18,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: juanman \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -284,8 +284,8 @@ msgid "From link" msgstr "Desde el enlace" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Papelera de reciclaje" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/es_AR/files.po b/l10n/es_AR/files.po index 56bad34c5c..116e75e86c 100644 --- a/l10n/es_AR/files.po +++ b/l10n/es_AR/files.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: cjtess \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -276,8 +276,8 @@ msgid "From link" msgstr "Desde enlace" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Papelera" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/es_AR/lib.po b/l10n/es_AR/lib.po index 550a304fe4..a997d69e93 100644 --- a/l10n/es_AR/lib.po +++ b/l10n/es_AR/lib.po @@ -6,13 +6,14 @@ # Agustin Ferrario , 2013. # CJTess , 2013. # , 2012. +# Javier Victor Mariano Bruno , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: cjtess \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 20:50+0000\n" +"Last-Translator: deftoner \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,27 +21,27 @@ msgstr "" "Language: es_AR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:339 +#: app.php:349 msgid "Help" msgstr "Ayuda" -#: app.php:346 +#: app.php:362 msgid "Personal" msgstr "Personal" -#: app.php:351 +#: app.php:373 msgid "Settings" msgstr "Ajustes" -#: app.php:356 +#: app.php:385 msgid "Users" msgstr "Usuarios" -#: app.php:363 +#: app.php:398 msgid "Apps" msgstr "Aplicaciones" -#: app.php:365 +#: app.php:406 msgid "Admin" msgstr "Administración" @@ -52,15 +53,15 @@ msgstr "La descarga en ZIP está desactivada." msgid "Files need to be downloaded one by one." msgstr "Los archivos deben ser descargados de a uno." -#: files.php:203 files.php:228 +#: files.php:204 files.php:231 msgid "Back to Files" msgstr "Volver a archivos" -#: files.php:227 +#: files.php:228 msgid "Selected files too large to generate zip file." msgstr "Los archivos seleccionados son demasiado grandes para generar el archivo zip." -#: helper.php:226 +#: helper.php:228 msgid "couldn't be determined" msgstr "no pudo ser determinado" @@ -103,84 +104,84 @@ msgstr "Especificar un directorio de datos" #: setup.php:53 #, php-format msgid "%s enter the database username." -msgstr "" +msgstr "%s Entre el Usuario de la Base de Datos" #: setup.php:56 #, php-format msgid "%s enter the database name." -msgstr "" +msgstr "%s Entre el Nombre de la Base de Datos" #: setup.php:59 #, php-format msgid "%s you may not use dots in the database name" -msgstr "" +msgstr "%s no puede usar puntos en el nombre de la Base de Datos" #: setup.php:62 #, php-format msgid "%s set the database host." -msgstr "" +msgstr "%s Especifique la dirección de la Base de Datos" -#: setup.php:126 setup.php:291 setup.php:336 +#: setup.php:126 setup.php:294 setup.php:339 msgid "PostgreSQL username and/or password not valid" -msgstr "" +msgstr "Nombre de usuario o contraseña de PostgradeSQL no válido." #: setup.php:127 setup.php:150 setup.php:204 msgid "You need to enter either an existing account or the administrator." -msgstr "" +msgstr "Debe ingresar una cuenta existente o el administrador" -#: setup.php:149 setup.php:423 setup.php:489 +#: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" msgstr "" #: setup.php:203 msgid "MySQL username and/or password not valid" -msgstr "" +msgstr "Usuario y/o contraseña MySQL no válido" -#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 -#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 -#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 -#: setup.php:579 +#: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 +#: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 +#: setup.php:545 setup.php:552 setup.php:561 setup.php:569 setup.php:578 +#: setup.php:584 #, php-format msgid "DB Error: \"%s\"" -msgstr "" +msgstr "Error DB: \"%s\"" -#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 -#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 -#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 +#: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 +#: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" msgstr "" -#: setup.php:270 +#: setup.php:273 #, php-format msgid "MySQL user '%s'@'localhost' exists already." -msgstr "" +msgstr "Usuario MySQL '%s'@'localhost' ya existente" -#: setup.php:271 +#: setup.php:274 msgid "Drop this user from MySQL" -msgstr "" +msgstr "Borrar este usuario de MySQL" -#: setup.php:276 +#: setup.php:279 #, php-format msgid "MySQL user '%s'@'%%' already exists" -msgstr "" +msgstr "Usuario MySQL '%s'@'%%' ya existente" -#: setup.php:277 +#: setup.php:280 msgid "Drop this user from MySQL." -msgstr "" +msgstr "Borrar este usuario de MySQL" -#: setup.php:548 setup.php:580 +#: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" msgstr "" -#: setup.php:644 +#: setup.php:649 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "Tu servidor web no está configurado todavía para permitir sincronización de archivos porque la interfaz WebDAV parece no funcionar." -#: setup.php:645 +#: setup.php:651 #, php-format msgid "Please double check the installation guides." msgstr "Por favor, comprobá nuevamente la guía de instalación." @@ -237,16 +238,16 @@ msgstr "este año" msgid "years ago" msgstr "hace años" -#: updater.php:75 +#: updater.php:78 #, php-format msgid "%s is available. Get more information" msgstr "%s está disponible. Conseguí más información" -#: updater.php:77 +#: updater.php:81 msgid "up to date" msgstr "actualizado" -#: updater.php:80 +#: updater.php:84 msgid "updates check is disabled" msgstr "comprobar actualizaciones está desactivado" diff --git a/l10n/es_AR/settings.po b/l10n/es_AR/settings.po index 76f4c5b690..63f5ab1289 100644 --- a/l10n/es_AR/settings.po +++ b/l10n/es_AR/settings.po @@ -6,13 +6,14 @@ # Agustin Ferrario , 2012. # CJTess , 2013. # , 2012. +# Javier Victor Mariano Bruno , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: deftoner \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -133,7 +134,7 @@ msgstr "deshacer" #: js/users.js:62 msgid "Unable to remove user" -msgstr "" +msgstr "Imposible remover usuario" #: js/users.js:75 templates/users.php:26 templates/users.php:80 #: templates/users.php:105 @@ -148,21 +149,21 @@ msgstr "Grupo Administrador" msgid "Delete" msgstr "Borrar" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" -msgstr "" +msgstr "Agregar grupo" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" -msgstr "" +msgstr "Debe ingresar un nombre de usuario válido" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" -msgstr "" +msgstr "Error creando usuario" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" -msgstr "" +msgstr "Debe ingresar una contraseña válida" #: personal.php:34 personal.php:35 msgid "__language_name__" @@ -183,7 +184,7 @@ msgstr "Tu directorio de datos y tus archivos son probablemente accesibles desde #: templates/admin.php:29 msgid "Setup Warning" -msgstr "" +msgstr "Alerta de Configuración" #: templates/admin.php:32 msgid "" @@ -198,17 +199,17 @@ msgstr "Por favor, comprobá nuevamente la guía de instalación\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -275,8 +275,8 @@ msgid "From link" msgstr "Allikast" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Prügikast" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/eu/files.po b/l10n/eu/files.po index 56533fddde..27a31c2ac4 100644 --- a/l10n/eu/files.po +++ b/l10n/eu/files.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 21:30+0000\n" -"Last-Translator: asieriko \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -277,8 +277,8 @@ msgid "From link" msgstr "Estekatik" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Zakarrontzia" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/fa/core.po b/l10n/fa/core.po index 10d406d5fa..068bba9148 100644 --- a/l10n/fa/core.po +++ b/l10n/fa/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:32+0000\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 11:00+0000\n" "Last-Translator: I Robot \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/fa/files.po b/l10n/fa/files.po index 260fba7f3a..478ca3405c 100644 --- a/l10n/fa/files.po +++ b/l10n/fa/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" @@ -277,7 +277,7 @@ msgid "From link" msgstr "از پیوند" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/fa/user_ldap.po b/l10n/fa/user_ldap.po index 4297459853..029b1993ac 100644 --- a/l10n/fa/user_ldap.po +++ b/l10n/fa/user_ldap.po @@ -3,15 +3,16 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Amir Reza Asadi , 2013. # mahdi Kereshteh , 2013. # Mohammad Dashtizadeh , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 10:50+0000\n" +"Last-Translator: Amir Reza Asadi \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,11 +22,11 @@ msgstr "" #: ajax/deleteConfiguration.php:34 msgid "Failed to delete the server configuration" -msgstr "" +msgstr "عملیات حذف پیکربندی سرور ناموفق ماند" #: ajax/testConfiguration.php:35 msgid "The configuration is valid and the connection could be established!" -msgstr "" +msgstr "پیکربندی معتبر است و ارتباط می تواند برقرار شود" #: ajax/testConfiguration.php:37 msgid "" @@ -57,19 +58,19 @@ msgstr "" #: js/settings.js:121 msgid "Connection test succeeded" -msgstr "" +msgstr "تست اتصال با موفقیت انجام گردید" #: js/settings.js:126 msgid "Connection test failed" -msgstr "" +msgstr "تست اتصال ناموفق بود" #: js/settings.js:136 msgid "Do you really want to delete the current Server Configuration?" -msgstr "" +msgstr "آیا واقعا می خواهید پیکربندی کنونی سرور را حذف کنید؟" #: js/settings.js:137 msgid "Confirm Deletion" -msgstr "" +msgstr "تایید حذف" #: templates/settings.php:8 msgid "" @@ -86,11 +87,11 @@ msgstr "" #: templates/settings.php:15 msgid "Server configuration" -msgstr "" +msgstr "پیکربندی سرور" #: templates/settings.php:17 msgid "Add Server Configuration" -msgstr "" +msgstr "افزودن پیکربندی سرور" #: templates/settings.php:21 msgid "Host" @@ -298,7 +299,7 @@ msgstr "" #: templates/settings.php:56 msgid "in bytes" -msgstr "" +msgstr "در بایت" #: templates/settings.php:58 msgid "" diff --git a/l10n/fi_FI/core.po b/l10n/fi_FI/core.po index 928e61942d..80e0cb1870 100644 --- a/l10n/fi_FI/core.po +++ b/l10n/fi_FI/core.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:32+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 14:00+0000\n" +"Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -494,14 +494,14 @@ msgstr "" msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "Datakansiosi ja tiedostosi ovat mitä luultavimmin muiden saavutettavissa internetistä, koska .htaccess-tiedosto ei toimi." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Katso palvelimen asetuksien määrittämiseen liittyvät ohjeet dokumentaatiosta." #: templates/installation.php:36 msgid "Create an admin account" diff --git a/l10n/fi_FI/files.po b/l10n/fi_FI/files.po index fd8dc14a74..e42625a78a 100644 --- a/l10n/fi_FI/files.po +++ b/l10n/fi_FI/files.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: Jiri Grönroos \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -278,8 +278,8 @@ msgid "From link" msgstr "Linkistä" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Roskakori" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/fi_FI/files_encryption.po b/l10n/fi_FI/files_encryption.po index 00e3d63dbb..3833503da0 100644 --- a/l10n/fi_FI/files_encryption.po +++ b/l10n/fi_FI/files_encryption.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:09+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 07:40+0000\n" +"Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,15 +24,15 @@ msgstr "Salaus" #: templates/settings-personal.php:7 msgid "File encryption is enabled." -msgstr "" +msgstr "Tiedostojen salaus on käytössä." #: templates/settings-personal.php:11 msgid "The following file types will not be encrypted:" -msgstr "" +msgstr "Seuraavia tiedostotyyppejä ei salata:" #: templates/settings.php:7 msgid "Exclude the following file types from encryption:" -msgstr "" +msgstr "Älä salaa seuravia tiedostotyyppejä:" #: templates/settings.php:12 msgid "None" diff --git a/l10n/fi_FI/files_external.po b/l10n/fi_FI/files_external.po index 7b2a88bd1b..1ccd529b50 100644 --- a/l10n/fi_FI/files_external.po +++ b/l10n/fi_FI/files_external.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-03 00:04+0100\n" -"PO-Revision-Date: 2013-02-02 14:01+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 13:50+0000\n" "Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" @@ -28,29 +28,29 @@ msgstr "Pääsy sallittu" msgid "Error configuring Dropbox storage" msgstr "Virhe Dropbox levyn asetuksia tehtäessä" -#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:41 +#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40 msgid "Grant access" msgstr "Salli pääsy" -#: js/dropbox.js:73 js/google.js:73 +#: js/dropbox.js:73 js/google.js:72 msgid "Fill out all required fields" msgstr "Täytä kaikki vaaditut kentät" #: js/dropbox.js:85 msgid "Please provide a valid Dropbox app key and secret." -msgstr "" +msgstr "Anna kelvollinen Dropbox-sovellusavain ja salainen vastaus." -#: js/google.js:26 js/google.js:74 js/google.js:79 +#: js/google.js:26 js/google.js:73 js/google.js:78 msgid "Error configuring Google Drive storage" msgstr "Virhe Google Drive levyn asetuksia tehtäessä" -#: lib/config.php:405 +#: lib/config.php:413 msgid "" "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " "is not possible. Please ask your system administrator to install it." msgstr "Varoitus: \"smbclient\" ei ole asennettuna. CIFS-/SMB-jakojen liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan smbclient." -#: lib/config.php:406 +#: lib/config.php:414 msgid "" "Warning: The FTP support in PHP is not enabled or installed. Mounting" " of FTP shares is not possible. Please ask your system administrator to " diff --git a/l10n/fi_FI/files_trashbin.po b/l10n/fi_FI/files_trashbin.po index 273ff877ba..e64f9fdafb 100644 --- a/l10n/fi_FI/files_trashbin.po +++ b/l10n/fi_FI/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 07:40+0000\n" +"Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,12 +21,12 @@ msgstr "" #: ajax/delete.php:22 #, php-format msgid "Couldn't delete %s permanently" -msgstr "" +msgstr "Kohdetta %s ei voitu poistaa pysyvästi" #: ajax/undelete.php:41 #, php-format msgid "Couldn't restore %s" -msgstr "" +msgstr "Kohteen %s palautus epäonnistui" #: js/trash.js:7 js/trash.js:94 msgid "perform restore operation" @@ -34,7 +34,7 @@ msgstr "suorita palautustoiminto" #: js/trash.js:33 msgid "delete file permanently" -msgstr "" +msgstr "poista tiedosto pysyvästi" #: js/trash.js:125 templates/index.php:17 msgid "Name" diff --git a/l10n/fi_FI/files_versions.po b/l10n/fi_FI/files_versions.po index f8ce72e1e0..5cd06f949b 100644 --- a/l10n/fi_FI/files_versions.po +++ b/l10n/fi_FI/files_versions.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Jiri Grönroos , 2012. +# Jiri Grönroos , 2012-2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 07:30+0000\n" +"Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,33 +21,33 @@ msgstr "" #: ajax/rollbackVersion.php:15 #, php-format msgid "Could not revert: %s" -msgstr "" +msgstr "Palautus epäonnistui: %s" #: history.php:40 msgid "success" -msgstr "" +msgstr "onnistui" #: history.php:42 #, php-format msgid "File %s was reverted to version %s" -msgstr "" +msgstr "Tiedosto %s palautettiin versioon %s" #: history.php:49 msgid "failure" -msgstr "" +msgstr "epäonnistui" #: history.php:51 #, php-format msgid "File %s could not be reverted to version %s" -msgstr "" +msgstr "Tiedoston %s palautus versioon %s epäonnistui" #: history.php:68 msgid "No old versions available" -msgstr "" +msgstr "Vanhoja ei ole saatavilla" #: history.php:73 msgid "No path specified" -msgstr "" +msgstr "Polkua ei ole määritetty" #: js/versions.js:16 msgid "History" @@ -55,7 +55,7 @@ msgstr "Historia" #: templates/history.php:20 msgid "Revert a file to a previous version by clicking on its revert button" -msgstr "" +msgstr "Palauta tiedoston edellinen versio napsauttamalla palautuspainiketta" #: templates/settings.php:3 msgid "Files Versioning" diff --git a/l10n/fi_FI/lib.po b/l10n/fi_FI/lib.po index 48c3329568..dd0f5e0fad 100644 --- a/l10n/fi_FI/lib.po +++ b/l10n/fi_FI/lib.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 13:30+0000\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 07:30+0000\n" "Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" @@ -18,27 +18,27 @@ msgstr "" "Language: fi_FI\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:339 +#: app.php:349 msgid "Help" msgstr "Ohje" -#: app.php:346 +#: app.php:362 msgid "Personal" msgstr "Henkilökohtainen" -#: app.php:351 +#: app.php:373 msgid "Settings" msgstr "Asetukset" -#: app.php:356 +#: app.php:385 msgid "Users" msgstr "Käyttäjät" -#: app.php:363 +#: app.php:398 msgid "Apps" msgstr "Sovellukset" -#: app.php:365 +#: app.php:406 msgid "Admin" msgstr "Ylläpitäjä" @@ -50,15 +50,15 @@ msgstr "ZIP-lataus on poistettu käytöstä." msgid "Files need to be downloaded one by one." msgstr "Tiedostot on ladattava yksittäin." -#: files.php:203 files.php:228 +#: files.php:204 files.php:231 msgid "Back to Files" msgstr "Takaisin tiedostoihin" -#: files.php:227 +#: files.php:228 msgid "Selected files too large to generate zip file." msgstr "Valitut tiedostot ovat liian suurikokoisia mahtuakseen zip-tiedostoon." -#: helper.php:226 +#: helper.php:228 msgid "couldn't be determined" msgstr "ei voitu määrittää" @@ -96,7 +96,7 @@ msgstr "Aseta ylläpitäjän salasana." #: setup.php:40 msgid "Specify a data folder." -msgstr "" +msgstr "Määritä datakansio." #: setup.php:53 #, php-format @@ -118,67 +118,67 @@ msgstr "" msgid "%s set the database host." msgstr "" -#: setup.php:126 setup.php:291 setup.php:336 +#: setup.php:126 setup.php:294 setup.php:339 msgid "PostgreSQL username and/or password not valid" -msgstr "" +msgstr "PostgreSQL:n käyttäjätunnus ja/tai salasana on väärin" #: setup.php:127 setup.php:150 setup.php:204 msgid "You need to enter either an existing account or the administrator." msgstr "" -#: setup.php:149 setup.php:423 setup.php:489 +#: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" -msgstr "" +msgstr "Oraclen käyttäjätunnus ja/tai salasana on väärin" #: setup.php:203 msgid "MySQL username and/or password not valid" -msgstr "" +msgstr "MySQL:n käyttäjätunnus ja/tai salasana on väärin" -#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 -#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 -#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 -#: setup.php:579 +#: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 +#: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 +#: setup.php:545 setup.php:552 setup.php:561 setup.php:569 setup.php:578 +#: setup.php:584 #, php-format msgid "DB Error: \"%s\"" msgstr "Tietokantavirhe: \"%s\"" -#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 -#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 -#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 +#: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 +#: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" msgstr "" -#: setup.php:270 +#: setup.php:273 #, php-format msgid "MySQL user '%s'@'localhost' exists already." msgstr "MySQL-käyttäjä '%s'@'localhost' on jo olemassa." -#: setup.php:271 +#: setup.php:274 msgid "Drop this user from MySQL" msgstr "" -#: setup.php:276 +#: setup.php:279 #, php-format msgid "MySQL user '%s'@'%%' already exists" msgstr "MySQL-käyttäjä '%s'@'%%' on jo olemassa" -#: setup.php:277 +#: setup.php:280 msgid "Drop this user from MySQL." msgstr "" -#: setup.php:548 setup.php:580 +#: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" msgstr "" -#: setup.php:644 +#: setup.php:649 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:645 +#: setup.php:651 #, php-format msgid "Please double check the installation guides." msgstr "Lue tarkasti asennusohjeet." @@ -235,16 +235,16 @@ msgstr "viime vuonna" msgid "years ago" msgstr "vuotta sitten" -#: updater.php:75 +#: updater.php:78 #, php-format msgid "%s is available. Get more information" msgstr "%s on saatavilla. Lue lisätietoja" -#: updater.php:77 +#: updater.php:81 msgid "up to date" msgstr "ajan tasalla" -#: updater.php:80 +#: updater.php:84 msgid "updates check is disabled" msgstr "päivitysten tarkistus on pois käytöstä" diff --git a/l10n/fi_FI/settings.po b/l10n/fi_FI/settings.po index 3674fd26bc..e1db381273 100644 --- a/l10n/fi_FI/settings.po +++ b/l10n/fi_FI/settings.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 07:30+0000\n" +"Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -148,19 +148,19 @@ msgstr "Ryhmän ylläpitäjä" msgid "Delete" msgstr "Poista" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" msgstr "lisää ryhmä" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" msgstr "" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" msgstr "Virhe käyttäjää luotaessa" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" msgstr "" @@ -198,7 +198,7 @@ msgstr "Lue tarkasti asennusohjeet." #: templates/admin.php:44 msgid "Module 'fileinfo' missing" -msgstr "" +msgstr "Moduuli 'fileinfo' puuttuu" #: templates/admin.php:47 msgid "" diff --git a/l10n/fi_FI/user_ldap.po b/l10n/fi_FI/user_ldap.po index 14247957dd..3a56d21654 100644 --- a/l10n/fi_FI/user_ldap.po +++ b/l10n/fi_FI/user_ldap.po @@ -4,15 +4,15 @@ # # Translators: # , 2012. -# Jiri Grönroos , 2012. +# Jiri Grönroos , 2012-2013. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 07:40+0000\n" +"Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -50,19 +50,19 @@ msgstr "" #: js/settings.js:83 msgid "Keep settings?" -msgstr "" +msgstr "Säilytetäänkö asetukset?" #: js/settings.js:97 msgid "Cannot add server configuration" -msgstr "" +msgstr "Palvelinasetusten lisäys epäonnistui" #: js/settings.js:121 msgid "Connection test succeeded" -msgstr "" +msgstr "Yhteystesti onnistui" #: js/settings.js:126 msgid "Connection test failed" -msgstr "" +msgstr "Yhteystesti epäonnistui" #: js/settings.js:136 msgid "Do you really want to delete the current Server Configuration?" @@ -70,7 +70,7 @@ msgstr "" #: js/settings.js:137 msgid "Confirm Deletion" -msgstr "" +msgstr "Vahvista poisto" #: templates/settings.php:8 msgid "" @@ -175,7 +175,7 @@ msgstr "ilman paikanvaraustermiä, ts. \"objectClass=posixGroup\"." #: templates/settings.php:31 msgid "Connection Settings" -msgstr "" +msgstr "Yhteysasetukset" #: templates/settings.php:33 msgid "Configuration Active" @@ -205,7 +205,7 @@ msgstr "" #: templates/settings.php:37 msgid "Disable Main Server" -msgstr "" +msgstr "Poista pääpalvelin käytöstä" #: templates/settings.php:37 msgid "When switched on, ownCloud will only connect to the replica server." @@ -243,7 +243,7 @@ msgstr "sekunneissa. Muutos tyhjentää välimuistin." #: templates/settings.php:43 msgid "Directory Settings" -msgstr "" +msgstr "Hakemistoasetukset" #: templates/settings.php:45 msgid "User Display Name Field" diff --git a/l10n/fi_FI/user_webdavauth.po b/l10n/fi_FI/user_webdavauth.po index c42c6d288e..e1fa0ca8d1 100644 --- a/l10n/fi_FI/user_webdavauth.po +++ b/l10n/fi_FI/user_webdavauth.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Jiri Grönroos , 2012. +# Jiri Grönroos , 2012-2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-15 00:03+0100\n" -"PO-Revision-Date: 2013-01-14 23:04+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 14:00+0000\n" +"Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,13 +20,13 @@ msgstr "" #: templates/settings.php:3 msgid "WebDAV Authentication" -msgstr "" +msgstr "WebDAV-todennus" #: templates/settings.php:4 msgid "URL: http://" -msgstr "" +msgstr "Osoite: http://" -#: templates/settings.php:6 +#: templates/settings.php:7 msgid "" "ownCloud will send the user credentials to this URL. This plugin checks the " "response and will interpret the HTTP statuscodes 401 and 403 as invalid " diff --git a/l10n/fr/files.po b/l10n/fr/files.po index 03fbc989e9..9e0b0e3a7a 100644 --- a/l10n/fr/files.po +++ b/l10n/fr/files.po @@ -21,9 +21,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: Robert Di Rosa <>\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -287,8 +287,8 @@ msgid "From link" msgstr "Depuis le lien" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Corbeille" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/gl/files.po b/l10n/gl/files.po index 3484079c4c..e00e1c1134 100644 --- a/l10n/gl/files.po +++ b/l10n/gl/files.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: mbouzada \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -276,8 +276,8 @@ msgid "From link" msgstr "Desde a ligazón" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Cesto do lixo" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/gl/files_versions.po b/l10n/gl/files_versions.po index 7bfd504e63..a468b7082b 100644 --- a/l10n/gl/files_versions.po +++ b/l10n/gl/files_versions.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# , 2013. # , 2012. # Miguel Branco , 2012. # Xosé M. Lamas , 2012. @@ -10,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 09:30+0000\n" +"Last-Translator: mbouzada \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,33 +24,33 @@ msgstr "" #: ajax/rollbackVersion.php:15 #, php-format msgid "Could not revert: %s" -msgstr "" +msgstr "Non foi posíbel reverter: %s" #: history.php:40 msgid "success" -msgstr "" +msgstr "feito" #: history.php:42 #, php-format msgid "File %s was reverted to version %s" -msgstr "" +msgstr "O ficheiro %s foi revertido á versión %s" #: history.php:49 msgid "failure" -msgstr "" +msgstr "produciuse un fallo" #: history.php:51 #, php-format msgid "File %s could not be reverted to version %s" -msgstr "" +msgstr "Non foi posíbel reverter o ficheiro %s á versión %s" #: history.php:68 msgid "No old versions available" -msgstr "" +msgstr "Non hai versións antigas dispoñíbeis" #: history.php:73 msgid "No path specified" -msgstr "" +msgstr "Non foi indicada a ruta" #: js/versions.js:16 msgid "History" @@ -57,7 +58,7 @@ msgstr "Historial" #: templates/history.php:20 msgid "Revert a file to a previous version by clicking on its revert button" -msgstr "" +msgstr "Reverta un ficheiro a unha versión anterior premendo no botón reversión" #: templates/settings.php:3 msgid "Files Versioning" diff --git a/l10n/gl/settings.po b/l10n/gl/settings.po index 59e260ae5f..0cfda98251 100644 --- a/l10n/gl/settings.po +++ b/l10n/gl/settings.po @@ -4,15 +4,16 @@ # # Translators: # antiparvos , 2012. +# , 2013. # , 2012. # Xosé M. Lamas , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 09:10+0000\n" +"Last-Translator: mbouzada \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -51,7 +52,7 @@ msgstr "Correo gardado" #: ajax/lostpassword.php:14 msgid "Invalid email" -msgstr "correo incorrecto" +msgstr "Correo incorrecto" #: ajax/removegroup.php:13 msgid "Unable to delete group" @@ -71,7 +72,7 @@ msgstr "Petición incorrecta" #: ajax/togglegroups.php:12 msgid "Admins can't remove themself from the admin group" -msgstr "Os administradores non se pode eliminar a si mesmos do grupo admin" +msgstr "Os administradores non poden eliminarse a si mesmos do grupo admin" #: ajax/togglegroups.php:28 #, php-format @@ -85,11 +86,11 @@ msgstr "Non é posíbel eliminar o usuario do grupo %s" #: ajax/updateapp.php:14 msgid "Couldn't update app." -msgstr "" +msgstr "Non foi posíbel actualizar o aplicativo." #: js/apps.js:30 msgid "Update to {appversion}" -msgstr "" +msgstr "Actualizar á {appversion}" #: js/apps.js:36 js/apps.js:76 msgid "Disable" @@ -101,15 +102,15 @@ msgstr "Activar" #: js/apps.js:55 msgid "Please wait...." -msgstr "" +msgstr "Agarde..." #: js/apps.js:84 msgid "Updating...." -msgstr "" +msgstr "Actualizando..." #: js/apps.js:87 msgid "Error while updating app" -msgstr "" +msgstr "Produciuse un erro mentres actualizaba o aplicativo" #: js/apps.js:87 msgid "Error" @@ -117,7 +118,7 @@ msgstr "Erro" #: js/apps.js:90 msgid "Updated" -msgstr "" +msgstr "Actualizado" #: js/personal.js:96 msgid "Saving..." @@ -133,7 +134,7 @@ msgstr "desfacer" #: js/users.js:62 msgid "Unable to remove user" -msgstr "" +msgstr "Non é posíbel retirar o usuario" #: js/users.js:75 templates/users.php:26 templates/users.php:80 #: templates/users.php:105 @@ -148,21 +149,21 @@ msgstr "Grupo Admin" msgid "Delete" msgstr "Eliminar" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" -msgstr "" +msgstr "engadir un grupo" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" -msgstr "" +msgstr "Debe fornecer un nome de usuario" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" -msgstr "" +msgstr "Produciuse un erro ao crear o usuario" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" -msgstr "" +msgstr "Debe fornecer un contrasinal" #: personal.php:34 personal.php:35 msgid "__language_name__" @@ -179,11 +180,11 @@ msgid "" "strongly suggest that you configure your webserver in a way that the data " "directory is no longer accessible or you move the data directory outside the" " webserver document root." -msgstr "O seu cartafol de datos e os seus ficheiros probabelmente sexan accesíbeis a través da Internet. O ficheiro .htaccess que fornece ownCloud non está a empregarse. Suxerimoslle que configure o seu servidor web de tal xeito que o cartafol de datos non estea accesíbel ou mova o cartafol de datos fora do directorio raíz de datos do servidor web." +msgstr "O seu cartafol de datos e os seus ficheiros probabelmente sexan accesíbeis a través da Internet. O ficheiro .htaccess que fornece ownCloud non está a empregarse. Suxerímoslle que configure o seu servidor web de tal xeito que o cartafol de datos non estea accesíbel ou mova o cartafol de datos fora do directorio raíz de datos do servidor web." #: templates/admin.php:29 msgid "Setup Warning" -msgstr "" +msgstr "Configurar os avisos" #: templates/admin.php:32 msgid "" @@ -198,13 +199,13 @@ msgstr "Volva comprobar as guías de instalación" #: templates/admin.php:44 msgid "Module 'fileinfo' missing" -msgstr "" +msgstr "Non se atopou o módulo «fileinfo»" #: templates/admin.php:47 msgid "" "The PHP module 'fileinfo' is missing. We strongly recommend to enable this " "module to get best results with mime-type detection." -msgstr "" +msgstr "Non se atopou o módulo de PHP «fileinfo». É recomendábel activar este módulo para obter os mellores resultados coa detección do tipo MIME." #: templates/admin.php:58 msgid "Locale not working" @@ -238,7 +239,7 @@ msgstr "" #: templates/admin.php:98 msgid "Execute one task with each page loaded" -msgstr "" +msgstr "Executar unha tarefa con cada páxina cargada" #: templates/admin.php:108 msgid "" @@ -254,66 +255,66 @@ msgstr "" #: templates/admin.php:125 msgid "Sharing" -msgstr "" +msgstr "Compartindo" #: templates/admin.php:131 msgid "Enable Share API" -msgstr "" +msgstr "Activar o API para compartir" #: templates/admin.php:132 msgid "Allow apps to use the Share API" -msgstr "" +msgstr "Permitir que os aplicativos empreguen o API para compartir" #: templates/admin.php:139 msgid "Allow links" -msgstr "" +msgstr "Permitir ligazóns" #: templates/admin.php:140 msgid "Allow users to share items to the public with links" -msgstr "" +msgstr "Permitir que os usuarios compartan elementos ao público con ligazóns" #: templates/admin.php:147 msgid "Allow resharing" -msgstr "" +msgstr "Permitir compartir" #: templates/admin.php:148 msgid "Allow users to share items shared with them again" -msgstr "" +msgstr "Permitir que os usuarios compartan de novo os elementos compartidos con eles" #: templates/admin.php:155 msgid "Allow users to share with anyone" -msgstr "" +msgstr "Permitir que os usuarios compartan con calquera" #: templates/admin.php:158 msgid "Allow users to only share with users in their groups" -msgstr "" +msgstr "Permitir que os usuarios compartan só cos usuarios dos seus grupos" #: templates/admin.php:165 msgid "Security" -msgstr "" +msgstr "Seguranza" #: templates/admin.php:178 msgid "Enforce HTTPS" -msgstr "" +msgstr "Forzar HTTPS" #: templates/admin.php:179 msgid "" "Enforces the clients to connect to ownCloud via an encrypted connection." -msgstr "" +msgstr "Forzar que os clientes se conecten a ownCloud empregando unha conexión cifrada" #: templates/admin.php:182 msgid "" "Please connect to this ownCloud instance via HTTPS to enable or disable the " "SSL enforcement." -msgstr "" +msgstr "Conectese a esta instancia ownCloud empregando HTTPS para activar ou desactivar o forzado de SSL." #: templates/admin.php:192 msgid "Log" -msgstr "" +msgstr "Rexistro" #: templates/admin.php:193 msgid "Log level" -msgstr "" +msgstr "Nivel de rexistro" #: templates/admin.php:220 msgid "More" @@ -384,11 +385,11 @@ msgstr "Asistencia comercial" #: templates/personal.php:8 #, php-format msgid "You have used %s of the available %s" -msgstr "Te en uso %s do total dispoñíbel de %s" +msgstr "Ten en uso %s do total dispoñíbel de %s" #: templates/personal.php:14 msgid "Get the apps to sync your files" -msgstr "" +msgstr "Obteña os aplicativos para sincronizar os seus ficheiros" #: templates/personal.php:25 msgid "Show First Run Wizard again" @@ -420,7 +421,7 @@ msgstr "Cambiar o contrasinal" #: templates/personal.php:54 templates/users.php:78 msgid "Display Name" -msgstr "" +msgstr "Amosar o nome" #: templates/personal.php:55 msgid "Your display name was changed" @@ -464,7 +465,7 @@ msgstr "Utilice este enderezo para conectarse ao seu ownCloud co administrador d #: templates/users.php:21 templates/users.php:77 msgid "Login Name" -msgstr "" +msgstr "Nome de acceso" #: templates/users.php:32 msgid "Create" @@ -492,7 +493,7 @@ msgstr "" #: templates/users.php:99 msgid "set new password" -msgstr "" +msgstr "estabelecer un novo contrasinal" #: templates/users.php:134 msgid "Default" diff --git a/l10n/he/files.po b/l10n/he/files.po index 3343d3b02b..9b9bb1c34f 100644 --- a/l10n/he/files.po +++ b/l10n/he/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n" "MIME-Version: 1.0\n" @@ -277,7 +277,7 @@ msgid "From link" msgstr "מקישור" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/hi/files.po b/l10n/hi/files.po index fe4e56b565..7469b9e6c3 100644 --- a/l10n/hi/files.po +++ b/l10n/hi/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n" "MIME-Version: 1.0\n" @@ -78,15 +78,15 @@ msgstr "" msgid "Files" msgstr "" -#: js/fileactions.js:116 +#: js/fileactions.js:125 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:127 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "" -#: js/fileactions.js:184 +#: js/fileactions.js:193 msgid "Rename" msgstr "" @@ -192,31 +192,31 @@ msgstr "" msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "" @@ -273,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/hr/files.po b/l10n/hr/files.po index fcfed2ba9d..b04b656f0f 100644 --- a/l10n/hr/files.po +++ b/l10n/hr/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n" "MIME-Version: 1.0\n" @@ -276,7 +276,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/hu_HU/files.po b/l10n/hu_HU/files.po index 6876f6ce18..ea2e55fc37 100644 --- a/l10n/hu_HU/files.po +++ b/l10n/hu_HU/files.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 13:20+0000\n" -"Last-Translator: Laszlo Tornoci \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -280,8 +280,8 @@ msgid "From link" msgstr "Feltöltés linkről" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Szemetes mappa" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/ia/files.po b/l10n/ia/files.po index 36264a6ab9..633ccdec7d 100644 --- a/l10n/ia/files.po +++ b/l10n/ia/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:02+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n" "MIME-Version: 1.0\n" @@ -275,7 +275,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/id/files.po b/l10n/id/files.po index 3ff275ed34..8acd0447cf 100644 --- a/l10n/id/files.po +++ b/l10n/id/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" @@ -276,7 +276,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/is/files.po b/l10n/is/files.po index d1b7bfe8c4..0e399eecf6 100644 --- a/l10n/is/files.po +++ b/l10n/is/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n" "MIME-Version: 1.0\n" @@ -274,7 +274,7 @@ msgid "From link" msgstr "Af tengli" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/it/files.po b/l10n/it/files.po index 35d030b588..1a3e8db783 100644 --- a/l10n/it/files.po +++ b/l10n/it/files.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: Vincenzo Reale \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -277,8 +277,8 @@ msgid "From link" msgstr "Da collegamento" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Cestino" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/ja_JP/files.po b/l10n/ja_JP/files.po index 5970a60191..21ebd3c48b 100644 --- a/l10n/ja_JP/files.po +++ b/l10n/ja_JP/files.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: Daisuke Deguchi \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -278,8 +278,8 @@ msgid "From link" msgstr "リンク" #: templates/index.php:40 -msgid "Trash bin" -msgstr "ゴミ箱" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/ka_GE/files.po b/l10n/ka_GE/files.po index 2fc7870913..c0cadd9070 100644 --- a/l10n/ka_GE/files.po +++ b/l10n/ka_GE/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n" "MIME-Version: 1.0\n" @@ -274,7 +274,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/ko/files.po b/l10n/ko/files.po index bf703ae40b..42732dd887 100644 --- a/l10n/ko/files.po +++ b/l10n/ko/files.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n" "MIME-Version: 1.0\n" @@ -279,7 +279,7 @@ msgid "From link" msgstr "링크에서" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/ku_IQ/files.po b/l10n/ku_IQ/files.po index c7bc1613ea..ae4edcd282 100644 --- a/l10n/ku_IQ/files.po +++ b/l10n/ku_IQ/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:02+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n" "MIME-Version: 1.0\n" @@ -273,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/lb/files.po b/l10n/lb/files.po index ef7903cd96..1c858d6cfa 100644 --- a/l10n/lb/files.po +++ b/l10n/lb/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n" "MIME-Version: 1.0\n" @@ -274,7 +274,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/lt_LT/files.po b/l10n/lt_LT/files.po index 98ae79a76b..0f4c408d50 100644 --- a/l10n/lt_LT/files.po +++ b/l10n/lt_LT/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n" "MIME-Version: 1.0\n" @@ -276,7 +276,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/lv/files.po b/l10n/lv/files.po index 7de10fc208..e17afcc185 100644 --- a/l10n/lv/files.po +++ b/l10n/lv/files.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: Rūdolfs Mazurs \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -276,8 +276,8 @@ msgid "From link" msgstr "No saites" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Miskaste" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/mk/files.po b/l10n/mk/files.po index b14561acb5..03d2c9c894 100644 --- a/l10n/mk/files.po +++ b/l10n/mk/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n" "MIME-Version: 1.0\n" @@ -276,7 +276,7 @@ msgid "From link" msgstr "Од врска" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/ms_MY/files.po b/l10n/ms_MY/files.po index 0e2edc2e3d..50e095c498 100644 --- a/l10n/ms_MY/files.po +++ b/l10n/ms_MY/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:02+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n" "MIME-Version: 1.0\n" @@ -277,7 +277,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/nb_NO/files.po b/l10n/nb_NO/files.po index b83d34bfa7..7669736496 100644 --- a/l10n/nb_NO/files.po +++ b/l10n/nb_NO/files.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -282,7 +282,7 @@ msgid "From link" msgstr "Fra link" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/nl/files.po b/l10n/nl/files.po index ec1f078dba..bbd8fd530f 100644 --- a/l10n/nl/files.po +++ b/l10n/nl/files.po @@ -19,9 +19,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: André Koot \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -285,8 +285,8 @@ msgid "From link" msgstr "Vanaf link" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Prullenbak" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/nl/settings.po b/l10n/nl/settings.po index aa2ab11df1..df5d343a7d 100644 --- a/l10n/nl/settings.po +++ b/l10n/nl/settings.po @@ -18,9 +18,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 13:00+0000\n" +"Last-Translator: André Koot \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -141,7 +141,7 @@ msgstr "ongedaan maken" #: js/users.js:62 msgid "Unable to remove user" -msgstr "" +msgstr "Kon gebruiker niet verwijderen" #: js/users.js:75 templates/users.php:26 templates/users.php:80 #: templates/users.php:105 @@ -156,21 +156,21 @@ msgstr "Groep beheerder" msgid "Delete" msgstr "verwijderen" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" -msgstr "" +msgstr "toevoegen groep" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" -msgstr "" +msgstr "Er moet een geldige gebruikersnaam worden opgegeven" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" -msgstr "" +msgstr "Fout bij aanmaken gebruiker" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" -msgstr "" +msgstr "Er moet een geldig wachtwoord worden opgegeven" #: personal.php:34 personal.php:35 msgid "__language_name__" @@ -191,7 +191,7 @@ msgstr "Uw data is waarschijnlijk toegankelijk vanaf net internet. Het .htacces #: templates/admin.php:29 msgid "Setup Warning" -msgstr "" +msgstr "Instellingswaarschuwing" #: templates/admin.php:32 msgid "" @@ -206,17 +206,17 @@ msgstr "Conntroleer de installatie handleiding goed." #: templates/admin.php:44 msgid "Module 'fileinfo' missing" -msgstr "" +msgstr "Module 'fileinfo' ontbreekt" #: templates/admin.php:47 msgid "" "The PHP module 'fileinfo' is missing. We strongly recommend to enable this " "module to get best results with mime-type detection." -msgstr "" +msgstr "De PHP module 'fileinfo' ontbreekt. We adviseren met klem om deze module te activeren om de beste resultaten te bereiken voor mime-type detectie." #: templates/admin.php:58 msgid "Locale not working" -msgstr "" +msgstr "Taalbestand werkt niet" #: templates/admin.php:61 msgid "" @@ -224,11 +224,11 @@ msgid "" "\"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with" " certain characters in file names. We strongly suggest to install the " "required packages on your system to support en_US.UTF-8/en_US.UTF8." -msgstr "" +msgstr "Deze ownCloud server kan de systeemtaal niet instellen op \"en_US.UTF-8\"/\"en_US.UTF8\". Er zijn vermoedelijk problemen met bepaalde tekens in de bestandsnamen. We adviseren om de voor ondersteuning van en_US.UTF-8/en_US.UTF8 vereiste pakketten op uw systeem te installeren." #: templates/admin.php:72 msgid "Internet connection not working" -msgstr "" +msgstr "Internet verbinding werkt niet" #: templates/admin.php:75 msgid "" @@ -238,90 +238,90 @@ msgid "" "remote and sending of notification emails might also not work. We suggest to" " enable internet connection for this server if you want to have all features" " of ownCloud." -msgstr "" +msgstr "Deze ownCloud server heeft geen actieve internet verbinding. dat betekent dat sommige functies, zoals aankoppelen van externe opslag, notificaties over updates of installatie van apps van 3e partijen niet werken. Ook het benaderen van bestanden vanaf een remote locatie en het versturen van notificatie emails kan mislukken. We adviseren om de internet verbinding voor deze server in te schakelen als u alle functies van ownCloud wilt gebruiken." #: templates/admin.php:89 msgid "Cron" -msgstr "" +msgstr "Cron" #: templates/admin.php:98 msgid "Execute one task with each page loaded" -msgstr "" +msgstr "Bij laden van elke pagina één taak uitvoeren" #: templates/admin.php:108 msgid "" "cron.php is registered at a webcron service. Call the cron.php page in the " "owncloud root once a minute over http." -msgstr "" +msgstr "cron.php is geregistreerd bij een webcron service. Roep eens per minuut de cron.php pagina aan over http in de ownCloud root." #: templates/admin.php:118 msgid "" "Use systems cron service. Call the cron.php file in the owncloud folder via " "a system cronjob once a minute." -msgstr "" +msgstr "Gebruik de systems cron service. Roep eens per minuut de cron.php file in de ownCloud map via een systeem cronjob." #: templates/admin.php:125 msgid "Sharing" -msgstr "" +msgstr "Delen" #: templates/admin.php:131 msgid "Enable Share API" -msgstr "" +msgstr "Activeren Share API" #: templates/admin.php:132 msgid "Allow apps to use the Share API" -msgstr "" +msgstr "Apps toestaan de Share API te gebruiken" #: templates/admin.php:139 msgid "Allow links" -msgstr "" +msgstr "Toestaan links" #: templates/admin.php:140 msgid "Allow users to share items to the public with links" -msgstr "" +msgstr "Toestaan dat gebruikers objecten met links delen met anderen" #: templates/admin.php:147 msgid "Allow resharing" -msgstr "" +msgstr "Toestaan opnieuw delen" #: templates/admin.php:148 msgid "Allow users to share items shared with them again" -msgstr "" +msgstr "Toestaan dat gebruikers objecten die anderen met hun gedeeld hebben zelf ook weer delen met anderen" #: templates/admin.php:155 msgid "Allow users to share with anyone" -msgstr "" +msgstr "Toestaan dat gebruikers met iedereen delen" #: templates/admin.php:158 msgid "Allow users to only share with users in their groups" -msgstr "" +msgstr "Instellen dat gebruikers alleen met leden binnen hun groepen delen" #: templates/admin.php:165 msgid "Security" -msgstr "" +msgstr "Beveiliging" #: templates/admin.php:178 msgid "Enforce HTTPS" -msgstr "" +msgstr "Afdwingen HTTPS" #: templates/admin.php:179 msgid "" "Enforces the clients to connect to ownCloud via an encrypted connection." -msgstr "" +msgstr "Afdwingen dat de clients alleen via versleutelde verbinding contact maken met ownCloud." #: templates/admin.php:182 msgid "" "Please connect to this ownCloud instance via HTTPS to enable or disable the " "SSL enforcement." -msgstr "" +msgstr "Maak via HTTPS verbinding met deze ownCloud inrichting om het afdwingen van gebruik van SSL te activeren of deactiveren." #: templates/admin.php:192 msgid "Log" -msgstr "" +msgstr "Log" #: templates/admin.php:193 msgid "Log level" -msgstr "" +msgstr "Log niveau" #: templates/admin.php:220 msgid "More" diff --git a/l10n/nn_NO/files.po b/l10n/nn_NO/files.po index 63b6b21838..06effef4db 100644 --- a/l10n/nn_NO/files.po +++ b/l10n/nn_NO/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:01+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n" "MIME-Version: 1.0\n" @@ -275,7 +275,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/oc/files.po b/l10n/oc/files.po index 462ad66cd2..57fc9bcb13 100644 --- a/l10n/oc/files.po +++ b/l10n/oc/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n" "MIME-Version: 1.0\n" @@ -274,7 +274,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/pl/files.po b/l10n/pl/files.po index 7dff4cfc65..9890a2eae8 100644 --- a/l10n/pl/files.po +++ b/l10n/pl/files.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" @@ -281,7 +281,7 @@ msgid "From link" msgstr "Z linku" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/pl_PL/files.po b/l10n/pl_PL/files.po index e1e8188680..058fd601d4 100644 --- a/l10n/pl_PL/files.po +++ b/l10n/pl_PL/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" "MIME-Version: 1.0\n" @@ -78,15 +78,15 @@ msgstr "" msgid "Files" msgstr "" -#: js/fileactions.js:116 +#: js/fileactions.js:125 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:127 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "" -#: js/fileactions.js:184 +#: js/fileactions.js:193 msgid "Rename" msgstr "" @@ -192,31 +192,31 @@ msgstr "" msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "" @@ -273,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/pt_BR/core.po b/l10n/pt_BR/core.po index 1ca124ca77..2fad1b25c9 100644 --- a/l10n/pt_BR/core.po +++ b/l10n/pt_BR/core.po @@ -18,8 +18,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 22:00+0000\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-13 23:10+0000\n" "Last-Translator: rodrigost23 \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/pt_BR/files.po b/l10n/pt_BR/files.po index 9f896512c4..9e297e235b 100644 --- a/l10n/pt_BR/files.po +++ b/l10n/pt_BR/files.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 22:50+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -89,7 +89,7 @@ msgstr "Arquivos" #: js/fileactions.js:125 msgid "Delete permanently" -msgstr "" +msgstr "Excluir permanentemente" #: js/fileactions.js:127 templates/index.php:91 templates/index.php:92 msgid "Delete" @@ -134,7 +134,7 @@ msgstr "Substituído {old_name} por {new_name} " #: js/filelist.js:322 msgid "perform delete operation" -msgstr "" +msgstr "realizar operação de exclusão" #: js/files.js:52 msgid "'.' is an invalid file name." @@ -152,11 +152,11 @@ msgstr "Nome inválido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são #: js/files.js:78 msgid "Your storage is full, files can not be updated or synced anymore!" -msgstr "" +msgstr "Seu armazenamento está cheio, arquivos não serão mais atualizados nem sincronizados!" #: js/files.js:82 msgid "Your storage is almost full ({usedSpacePercent}%)" -msgstr "" +msgstr "Seu armazenamento está quase cheio ({usedSpacePercent}%)" #: js/files.js:224 msgid "" @@ -282,7 +282,7 @@ msgid "From link" msgstr "Do link" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 @@ -321,4 +321,4 @@ msgstr "Scanning atual" #: templates/upgrade.php:2 msgid "Upgrading filesystem cache..." -msgstr "" +msgstr "Aprimorando cache do sistema de arquivos..." diff --git a/l10n/pt_BR/files_trashbin.po b/l10n/pt_BR/files_trashbin.po index 5c38d39cb3..e5e109080a 100644 --- a/l10n/pt_BR/files_trashbin.po +++ b/l10n/pt_BR/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 00:00+0000\n" +"Last-Translator: rodrigost23 \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,12 +21,12 @@ msgstr "" #: ajax/delete.php:22 #, php-format msgid "Couldn't delete %s permanently" -msgstr "" +msgstr "Não foi possível excluir %s permanentemente" #: ajax/undelete.php:41 #, php-format msgid "Couldn't restore %s" -msgstr "" +msgstr "Não foi possível restaurar %s" #: js/trash.js:7 js/trash.js:94 msgid "perform restore operation" @@ -34,7 +34,7 @@ msgstr "realizar operação de restauração" #: js/trash.js:33 msgid "delete file permanently" -msgstr "" +msgstr "excluir arquivo permanentemente" #: js/trash.js:125 templates/index.php:17 msgid "Name" diff --git a/l10n/pt_BR/lib.po b/l10n/pt_BR/lib.po index bc3c86566c..7bb62b48c8 100644 --- a/l10n/pt_BR/lib.po +++ b/l10n/pt_BR/lib.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:03+0000\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-13 23:10+0000\n" "Last-Translator: rodrigost23 \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -21,27 +21,27 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: app.php:339 +#: app.php:349 msgid "Help" msgstr "Ajuda" -#: app.php:346 +#: app.php:362 msgid "Personal" msgstr "Pessoal" -#: app.php:351 +#: app.php:373 msgid "Settings" msgstr "Ajustes" -#: app.php:356 +#: app.php:385 msgid "Users" msgstr "Usuários" -#: app.php:363 +#: app.php:398 msgid "Apps" msgstr "Aplicações" -#: app.php:365 +#: app.php:406 msgid "Admin" msgstr "Admin" @@ -53,15 +53,15 @@ msgstr "Download ZIP está desligado." msgid "Files need to be downloaded one by one." msgstr "Arquivos precisam ser baixados um de cada vez." -#: files.php:203 files.php:228 +#: files.php:204 files.php:231 msgid "Back to Files" msgstr "Voltar para Arquivos" -#: files.php:227 +#: files.php:228 msgid "Selected files too large to generate zip file." msgstr "Arquivos selecionados são muito grandes para gerar arquivo zip." -#: helper.php:226 +#: helper.php:228 msgid "couldn't be determined" msgstr "não pôde ser determinado" @@ -121,7 +121,7 @@ msgstr "%s você não pode usar pontos no nome do banco de dados" msgid "%s set the database host." msgstr "%s defina o host do banco de dados." -#: setup.php:126 setup.php:291 setup.php:336 +#: setup.php:126 setup.php:294 setup.php:339 msgid "PostgreSQL username and/or password not valid" msgstr "Nome de usuário e/ou senha PostgreSQL inválido(s)" @@ -129,7 +129,7 @@ msgstr "Nome de usuário e/ou senha PostgreSQL inválido(s)" msgid "You need to enter either an existing account or the administrator." msgstr "Você precisa inserir uma conta existente ou o administrador." -#: setup.php:149 setup.php:423 setup.php:489 +#: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" msgstr "Nome de usuário e/ou senha Oracle inválido(s)" @@ -137,51 +137,51 @@ msgstr "Nome de usuário e/ou senha Oracle inválido(s)" msgid "MySQL username and/or password not valid" msgstr "Nome de usuário e/ou senha MySQL inválido(s)" -#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 -#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 -#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 -#: setup.php:579 +#: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 +#: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 +#: setup.php:545 setup.php:552 setup.php:561 setup.php:569 setup.php:578 +#: setup.php:584 #, php-format msgid "DB Error: \"%s\"" msgstr "Erro no BD: \"%s\"" -#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 -#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 -#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 +#: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 +#: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" msgstr "Comando ofensivo era: \"%s\"" -#: setup.php:270 +#: setup.php:273 #, php-format msgid "MySQL user '%s'@'localhost' exists already." msgstr "O usuário MySQL '%s'@'localhost' já existe." -#: setup.php:271 +#: setup.php:274 msgid "Drop this user from MySQL" msgstr "Derrubar este usuário do MySQL" -#: setup.php:276 +#: setup.php:279 #, php-format msgid "MySQL user '%s'@'%%' already exists" msgstr "Usuário MySQL '%s'@'%%' já existe" -#: setup.php:277 +#: setup.php:280 msgid "Drop this user from MySQL." msgstr "Derrube este usuário do MySQL." -#: setup.php:548 setup.php:580 +#: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" msgstr "Comando ofensivo era: \"%s\", nome: %s, senha: %s" -#: setup.php:644 +#: setup.php:649 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "Seu servidor web não está configurado corretamente para permitir sincronização de arquivos porque a interface WebDAV parece estar quebrada." -#: setup.php:645 +#: setup.php:651 #, php-format msgid "Please double check the installation guides." msgstr "Por favor, confira os guias de instalação." @@ -238,16 +238,16 @@ msgstr "último ano" msgid "years ago" msgstr "anos atrás" -#: updater.php:75 +#: updater.php:78 #, php-format msgid "%s is available. Get more information" msgstr "%s está disponível. Obtenha mais informações" -#: updater.php:77 +#: updater.php:81 msgid "up to date" msgstr "atualizado" -#: updater.php:80 +#: updater.php:84 msgid "updates check is disabled" msgstr "checagens de atualização estão desativadas" diff --git a/l10n/pt_BR/settings.po b/l10n/pt_BR/settings.po index 4b9318a235..d73ca9e69d 100644 --- a/l10n/pt_BR/settings.po +++ b/l10n/pt_BR/settings.po @@ -17,9 +17,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 00:20+0000\n" +"Last-Translator: rodrigost23 \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -155,19 +155,19 @@ msgstr "Grupo Administrativo" msgid "Delete" msgstr "Excluir" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" msgstr "adicionar grupo" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" msgstr "Forneça um nome de usuário válido" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" msgstr "Erro ao criar usuário" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" msgstr "Forneça uma senha válida" @@ -245,19 +245,19 @@ msgstr "Cron" #: templates/admin.php:98 msgid "Execute one task with each page loaded" -msgstr "" +msgstr "Execute uma tarefa com cada página carregada" #: templates/admin.php:108 msgid "" "cron.php is registered at a webcron service. Call the cron.php page in the " "owncloud root once a minute over http." -msgstr "" +msgstr "cron.php está registrado no serviço webcron. Chame a página cron.php na raíz do owncloud a cada minuto por http." #: templates/admin.php:118 msgid "" "Use systems cron service. Call the cron.php file in the owncloud folder via " "a system cronjob once a minute." -msgstr "" +msgstr "Usar serviço de cron do sistema. Chama o arquivo cron.php na pasta owncloud via cronjob do sistema a cada minuto." #: templates/admin.php:125 msgid "Sharing" @@ -382,7 +382,7 @@ msgstr "Fórum" #: templates/help.php:9 msgid "Bugtracker" -msgstr "" +msgstr "Rastreador de Bugs" #: templates/help.php:11 msgid "Commercial Support" diff --git a/l10n/pt_PT/files.po b/l10n/pt_PT/files.po index ba9941ac42..1e85d6184d 100644 --- a/l10n/pt_PT/files.po +++ b/l10n/pt_PT/files.po @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: Mouxy \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -281,8 +281,8 @@ msgid "From link" msgstr "Da ligação" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Reciclagem" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/pt_PT/lib.po b/l10n/pt_PT/lib.po index 998f677f93..5aad6742ac 100644 --- a/l10n/pt_PT/lib.po +++ b/l10n/pt_PT/lib.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 23:06+0000\n" +"Last-Translator: Mouxy \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,27 +20,27 @@ msgstr "" "Language: pt_PT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:339 +#: app.php:349 msgid "Help" msgstr "Ajuda" -#: app.php:346 +#: app.php:362 msgid "Personal" msgstr "Pessoal" -#: app.php:351 +#: app.php:373 msgid "Settings" msgstr "Configurações" -#: app.php:356 +#: app.php:385 msgid "Users" msgstr "Utilizadores" -#: app.php:363 +#: app.php:398 msgid "Apps" msgstr "Aplicações" -#: app.php:365 +#: app.php:406 msgid "Admin" msgstr "Admin" @@ -52,15 +52,15 @@ msgstr "Descarregamento em ZIP está desligado." msgid "Files need to be downloaded one by one." msgstr "Os ficheiros precisam de ser descarregados um por um." -#: files.php:203 files.php:228 +#: files.php:204 files.php:231 msgid "Back to Files" msgstr "Voltar a Ficheiros" -#: files.php:227 +#: files.php:228 msgid "Selected files too large to generate zip file." msgstr "Os ficheiros seleccionados são grandes demais para gerar um ficheiro zip." -#: helper.php:226 +#: helper.php:228 msgid "couldn't be determined" msgstr "Não foi possível determinar" @@ -90,45 +90,45 @@ msgstr "Imagens" #: setup.php:34 msgid "Set an admin username." -msgstr "" +msgstr "Definir um nome de utilizador de administrador" #: setup.php:37 msgid "Set an admin password." -msgstr "" +msgstr "Definiar uma password de administrador" #: setup.php:40 msgid "Specify a data folder." -msgstr "" +msgstr "Especificar a pasta para os dados." #: setup.php:53 #, php-format msgid "%s enter the database username." -msgstr "" +msgstr "%s introduza o nome de utilizador da base de dados" #: setup.php:56 #, php-format msgid "%s enter the database name." -msgstr "" +msgstr "%s introduza o nome da base de dados" #: setup.php:59 #, php-format msgid "%s you may not use dots in the database name" -msgstr "" +msgstr "%s não é permitido utilizar pontos (.) no nome da base de dados" #: setup.php:62 #, php-format msgid "%s set the database host." -msgstr "" +msgstr "%s defina o servidor da base de dados (geralmente localhost)" -#: setup.php:126 setup.php:291 setup.php:336 +#: setup.php:126 setup.php:294 setup.php:339 msgid "PostgreSQL username and/or password not valid" -msgstr "" +msgstr "Nome de utilizador/passwor do PostgreSQL inválido" #: setup.php:127 setup.php:150 setup.php:204 msgid "You need to enter either an existing account or the administrator." -msgstr "" +msgstr "Precisa de introduzir uma conta existente ou de administrador" -#: setup.php:149 setup.php:423 setup.php:489 +#: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" msgstr "" @@ -136,51 +136,51 @@ msgstr "" msgid "MySQL username and/or password not valid" msgstr "" -#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 -#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 -#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 -#: setup.php:579 +#: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 +#: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 +#: setup.php:545 setup.php:552 setup.php:561 setup.php:569 setup.php:578 +#: setup.php:584 #, php-format msgid "DB Error: \"%s\"" msgstr "" -#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 -#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 -#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 +#: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 +#: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" msgstr "" -#: setup.php:270 +#: setup.php:273 #, php-format msgid "MySQL user '%s'@'localhost' exists already." msgstr "" -#: setup.php:271 +#: setup.php:274 msgid "Drop this user from MySQL" msgstr "" -#: setup.php:276 +#: setup.php:279 #, php-format msgid "MySQL user '%s'@'%%' already exists" msgstr "" -#: setup.php:277 +#: setup.php:280 msgid "Drop this user from MySQL." msgstr "" -#: setup.php:548 setup.php:580 +#: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" msgstr "" -#: setup.php:644 +#: setup.php:649 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas." -#: setup.php:645 +#: setup.php:651 #, php-format msgid "Please double check the installation guides." msgstr "Por favor verifique installation guides." @@ -237,16 +237,16 @@ msgstr "ano passado" msgid "years ago" msgstr "há anos" -#: updater.php:75 +#: updater.php:78 #, php-format msgid "%s is available. Get more information" msgstr "%s está disponível. Obtenha mais informação" -#: updater.php:77 +#: updater.php:81 msgid "up to date" msgstr "actualizado" -#: updater.php:80 +#: updater.php:84 msgid "updates check is disabled" msgstr "a verificação de actualizações está desligada" diff --git a/l10n/pt_PT/settings.po b/l10n/pt_PT/settings.po index c221ef8ddf..e1dc13b05b 100644 --- a/l10n/pt_PT/settings.po +++ b/l10n/pt_PT/settings.po @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 23:03+0000\n" +"Last-Translator: Mouxy \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -138,7 +138,7 @@ msgstr "desfazer" #: js/users.js:62 msgid "Unable to remove user" -msgstr "" +msgstr "Não foi possível remover o utilizador" #: js/users.js:75 templates/users.php:26 templates/users.php:80 #: templates/users.php:105 @@ -153,21 +153,21 @@ msgstr "Grupo Administrador" msgid "Delete" msgstr "Apagar" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" -msgstr "" +msgstr "Adicionar grupo" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" -msgstr "" +msgstr "Um nome de utilizador válido deve ser fornecido" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" -msgstr "" +msgstr "Erro a criar utilizador" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" -msgstr "" +msgstr "Uma password válida deve ser fornecida" #: personal.php:34 personal.php:35 msgid "__language_name__" @@ -188,7 +188,7 @@ msgstr "A sua pasta com os dados e os seus ficheiros estão provavelmente acess #: templates/admin.php:29 msgid "Setup Warning" -msgstr "" +msgstr "Aviso de setup" #: templates/admin.php:32 msgid "" @@ -203,17 +203,17 @@ msgstr "Por favor verifique installation guides." #: templates/admin.php:44 msgid "Module 'fileinfo' missing" -msgstr "" +msgstr "Falta o módulo 'fileinfo'" #: templates/admin.php:47 msgid "" "The PHP module 'fileinfo' is missing. We strongly recommend to enable this " "module to get best results with mime-type detection." -msgstr "" +msgstr "O Módulo PHP 'fileinfo' não se encontra instalado/activado. É fortemente recomendado que active este módulo para obter os melhores resultado com a detecção dos tipos de mime." #: templates/admin.php:58 msgid "Locale not working" -msgstr "" +msgstr "Internacionalização não está a funcionar" #: templates/admin.php:61 msgid "" @@ -221,11 +221,11 @@ msgid "" "\"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with" " certain characters in file names. We strongly suggest to install the " "required packages on your system to support en_US.UTF-8/en_US.UTF8." -msgstr "" +msgstr "Este servidor de ownCloud não consegue definir a codificação de caracteres para \"en_US.UTF-8\"/\"en_US.UTF8\". Isto significa que pode haver problemas com alguns caracteres nos nomes de ficheiros. É fortemente recomendado que instale o pacote para ser possível ver caracteres codificados em en_US.UTF-8/en_US.UTF8." #: templates/admin.php:72 msgid "Internet connection not working" -msgstr "" +msgstr "A ligação à internet não está a funcionar" #: templates/admin.php:75 msgid "" @@ -235,90 +235,90 @@ msgid "" "remote and sending of notification emails might also not work. We suggest to" " enable internet connection for this server if you want to have all features" " of ownCloud." -msgstr "" +msgstr "Este servidor ownCloud não tem uma ligação de internet funcional. Isto significa que algumas funcionalidades como o acesso a locais externos (dropbox, gdrive, etc), notificações sobre actualizções, ou a instalação de aplicações não irá funcionar. Sugerimos que active uma ligação à internet se pretende obter todas as funcionalidades do ownCloud." #: templates/admin.php:89 msgid "Cron" -msgstr "" +msgstr "Cron" #: templates/admin.php:98 msgid "Execute one task with each page loaded" -msgstr "" +msgstr "Executar uma tarefa com cada página carregada" #: templates/admin.php:108 msgid "" "cron.php is registered at a webcron service. Call the cron.php page in the " "owncloud root once a minute over http." -msgstr "" +msgstr "cron.php está registado como um serviço webcron. Aceda a pagina cron.php que se encontra na raiz do ownCloud uma vez por minuto utilizando o seu browser." #: templates/admin.php:118 msgid "" "Use systems cron service. Call the cron.php file in the owncloud folder via " "a system cronjob once a minute." -msgstr "" +msgstr "Usar o serviço cron do sistema. Aceda a pagina cron.php que se encontra na raiz do ownCloud uma vez por minuto utilizando o seu browser." #: templates/admin.php:125 msgid "Sharing" -msgstr "" +msgstr "Partilha" #: templates/admin.php:131 msgid "Enable Share API" -msgstr "" +msgstr "Activar a API de partilha" #: templates/admin.php:132 msgid "Allow apps to use the Share API" -msgstr "" +msgstr "Permitir que os utilizadores usem a API de partilha" #: templates/admin.php:139 msgid "Allow links" -msgstr "" +msgstr "Permitir links" #: templates/admin.php:140 msgid "Allow users to share items to the public with links" -msgstr "" +msgstr "Permitir que os utilizadores partilhem itens com o público utilizando um link." #: templates/admin.php:147 msgid "Allow resharing" -msgstr "" +msgstr "Permitir repartilha" #: templates/admin.php:148 msgid "Allow users to share items shared with them again" -msgstr "" +msgstr "Permitir que os utilizadores partilhem itens partilhados com eles" #: templates/admin.php:155 msgid "Allow users to share with anyone" -msgstr "" +msgstr "Permitir que os utilizadores partilhem com todos" #: templates/admin.php:158 msgid "Allow users to only share with users in their groups" -msgstr "" +msgstr "Permitir que os utilizadores partilhem somente com utilizadores do seu grupo" #: templates/admin.php:165 msgid "Security" -msgstr "" +msgstr "Segurança" #: templates/admin.php:178 msgid "Enforce HTTPS" -msgstr "" +msgstr "Forçar HTTPS" #: templates/admin.php:179 msgid "" "Enforces the clients to connect to ownCloud via an encrypted connection." -msgstr "" +msgstr "Forçar clientes a ligar através de uma ligação encriptada" #: templates/admin.php:182 msgid "" "Please connect to this ownCloud instance via HTTPS to enable or disable the " "SSL enforcement." -msgstr "" +msgstr "Por favor ligue-se ao ownCloud através de uma ligação HTTPS para ligar/desligar o forçar da ligação por SSL" #: templates/admin.php:192 msgid "Log" -msgstr "" +msgstr "Registo" #: templates/admin.php:193 msgid "Log level" -msgstr "" +msgstr "Nível do registo" #: templates/admin.php:220 msgid "More" @@ -393,7 +393,7 @@ msgstr "Usou %s do disponivel %s" #: templates/personal.php:14 msgid "Get the apps to sync your files" -msgstr "" +msgstr "Obtenha as aplicações para sincronizar os seus ficheiros" #: templates/personal.php:25 msgid "Show First Run Wizard again" diff --git a/l10n/ro/files.po b/l10n/ro/files.po index 3d83090d3e..828e14ff11 100644 --- a/l10n/ro/files.po +++ b/l10n/ro/files.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n" "MIME-Version: 1.0\n" @@ -279,7 +279,7 @@ msgid "From link" msgstr "de la adresa" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/ru/files.po b/l10n/ru/files.po index 40f354e7de..fcc6d86ae4 100644 --- a/l10n/ru/files.po +++ b/l10n/ru/files.po @@ -21,9 +21,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: unixoid \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -287,8 +287,8 @@ msgid "From link" msgstr "Из ссылки" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Корзина" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/ru_RU/files.po b/l10n/ru_RU/files.po index a24200204d..baae545b0e 100644 --- a/l10n/ru_RU/files.po +++ b/l10n/ru_RU/files.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: Langaru \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -277,8 +277,8 @@ msgid "From link" msgstr "По ссылке" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Корзина" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/si_LK/files.po b/l10n/si_LK/files.po index b89a8c3d28..4b00adc79e 100644 --- a/l10n/si_LK/files.po +++ b/l10n/si_LK/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" "MIME-Version: 1.0\n" @@ -275,7 +275,7 @@ msgid "From link" msgstr "යොමුවෙන්" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/sk/files.po b/l10n/sk/files.po index 8f6e6f689e..7645aa9b54 100644 --- a/l10n/sk/files.po +++ b/l10n/sk/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n" "MIME-Version: 1.0\n" @@ -78,15 +78,15 @@ msgstr "" msgid "Files" msgstr "" -#: js/fileactions.js:116 +#: js/fileactions.js:125 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:127 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "" -#: js/fileactions.js:184 +#: js/fileactions.js:193 msgid "Rename" msgstr "" @@ -192,31 +192,31 @@ msgstr "" msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "" @@ -273,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/sk_SK/files.po b/l10n/sk_SK/files.po index 068ed3e623..8893c32c43 100644 --- a/l10n/sk_SK/files.po +++ b/l10n/sk_SK/files.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: mhh \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -279,8 +279,8 @@ msgid "From link" msgstr "Z odkazu" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Kôš" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/sk_SK/settings.po b/l10n/sk_SK/settings.po index 737b5c8a7d..5df4ee90ec 100644 --- a/l10n/sk_SK/settings.po +++ b/l10n/sk_SK/settings.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"PO-Revision-Date: 2013-02-14 14:00+0000\n" +"Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -136,7 +136,7 @@ msgstr "vrátiť" #: js/users.js:62 msgid "Unable to remove user" -msgstr "" +msgstr "Nemožno odobrať používateľa" #: js/users.js:75 templates/users.php:26 templates/users.php:80 #: templates/users.php:105 @@ -151,21 +151,21 @@ msgstr "Správca skupiny" msgid "Delete" msgstr "Odstrániť" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" -msgstr "" +msgstr "pridať skupinu" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" -msgstr "" +msgstr "Musíte zadať platné používateľské meno" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" -msgstr "" +msgstr "Chyba pri vytváraní používateľa" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" -msgstr "" +msgstr "Musíte zadať platné heslo" #: personal.php:34 personal.php:35 msgid "__language_name__" @@ -186,7 +186,7 @@ msgstr "Váš priečinok s dátami a Vaše súbory sú pravdepodobne dostupné z #: templates/admin.php:29 msgid "Setup Warning" -msgstr "" +msgstr "Nastavenia oznámení" #: templates/admin.php:32 msgid "" @@ -201,17 +201,17 @@ msgstr "Prosím skontrolujte inštalačnú príručku." #: templates/admin.php:44 msgid "Module 'fileinfo' missing" -msgstr "" +msgstr "Chýba modul 'fileinfo'" #: templates/admin.php:47 msgid "" "The PHP module 'fileinfo' is missing. We strongly recommend to enable this " "module to get best results with mime-type detection." -msgstr "" +msgstr "Chýba modul 'fileinfo'. Dôrazne doporučujeme ho povoliť pre dosiahnutie najlepších výsledkov zisťovania mime-typu." #: templates/admin.php:58 msgid "Locale not working" -msgstr "" +msgstr "Lokalizácia nefunguje" #: templates/admin.php:61 msgid "" @@ -219,11 +219,11 @@ msgid "" "\"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with" " certain characters in file names. We strongly suggest to install the " "required packages on your system to support en_US.UTF-8/en_US.UTF8." -msgstr "" +msgstr "Tento server ownCloud nemôže nastaviť národné prostredie systému na \"en_US.UTF-8\" / \"en_US.UTF8\". To znamená, že by mohli byť problémy s niektorými znakmi v názvoch súborov. Veľmi odporúčame nainštalovať požadované balíky na podporu en_US.UTF-8/en_US.UTF8." #: templates/admin.php:72 msgid "Internet connection not working" -msgstr "" +msgstr "Pripojenie na internet nefunguje" #: templates/admin.php:75 msgid "" @@ -233,90 +233,90 @@ msgid "" "remote and sending of notification emails might also not work. We suggest to" " enable internet connection for this server if you want to have all features" " of ownCloud." -msgstr "" +msgstr "Tento server ownCloud nemá funkčné pripojenie k internetu. To znamená, že niektoré z funkcií, ako je pripojenie externého úložiska, oznámenia o aktualizáciách či inštalácia aplikácií tretích strán nefungujú. Prístup k súborom zo vzdialených miest a odosielanie oznamovacích e-mailov tiež nemusí fungovať. Odporúčame pripojiť tento server k internetu, ak chcete využívať všetky vlastnosti ownCloud." #: templates/admin.php:89 msgid "Cron" -msgstr "" +msgstr "Cron" #: templates/admin.php:98 msgid "Execute one task with each page loaded" -msgstr "" +msgstr "Vykonať jednu úlohu s každým načítaní stránky" #: templates/admin.php:108 msgid "" "cron.php is registered at a webcron service. Call the cron.php page in the " "owncloud root once a minute over http." -msgstr "" +msgstr "cron.php je registrovaná u služby webcron. Zavolá cron.php stránku v koreňovom priečinku owncloud raz za minútu cez protokol HTTP." #: templates/admin.php:118 msgid "" "Use systems cron service. Call the cron.php file in the owncloud folder via " "a system cronjob once a minute." -msgstr "" +msgstr "Používať systémovú službu cron. Zavolať cron.php v priečinku owncloud cez systémovú úlohu raz za minútu" #: templates/admin.php:125 msgid "Sharing" -msgstr "" +msgstr "Zdieľanie" #: templates/admin.php:131 msgid "Enable Share API" -msgstr "" +msgstr "Povoliť API zdieľania" #: templates/admin.php:132 msgid "Allow apps to use the Share API" -msgstr "" +msgstr "Povoliť aplikáciám používať API na zdieľanie" #: templates/admin.php:139 msgid "Allow links" -msgstr "" +msgstr "Povoliť odkazy" #: templates/admin.php:140 msgid "Allow users to share items to the public with links" -msgstr "" +msgstr "Povoliť používateľom zdieľať položky pre verejnosť cez odkazy" #: templates/admin.php:147 msgid "Allow resharing" -msgstr "" +msgstr "Povoliť zdieľanie ďalej" #: templates/admin.php:148 msgid "Allow users to share items shared with them again" -msgstr "" +msgstr "Povoliť používateľom ďalej zdieľať zdieľané položky" #: templates/admin.php:155 msgid "Allow users to share with anyone" -msgstr "" +msgstr "Povoliť používateľom zdieľať s kýmkoľvek" #: templates/admin.php:158 msgid "Allow users to only share with users in their groups" -msgstr "" +msgstr "Povoliť používateľom zdieľať len s používateľmi v ich skupinách" #: templates/admin.php:165 msgid "Security" -msgstr "" +msgstr "Zabezpečenie" #: templates/admin.php:178 msgid "Enforce HTTPS" -msgstr "" +msgstr "Vynútiť HTTPS" #: templates/admin.php:179 msgid "" "Enforces the clients to connect to ownCloud via an encrypted connection." -msgstr "" +msgstr "Vynúti pripojovanie klientov ownCloud cez šifrované pripojenie." #: templates/admin.php:182 msgid "" "Please connect to this ownCloud instance via HTTPS to enable or disable the " "SSL enforcement." -msgstr "" +msgstr "Pripojte sa k tejto inštancii ownCloud cez HTTPS pre povolenie alebo zakázanie vynútenia SSL." #: templates/admin.php:192 msgid "Log" -msgstr "" +msgstr "Záznam" #: templates/admin.php:193 msgid "Log level" -msgstr "" +msgstr "Úroveň záznamu" #: templates/admin.php:220 msgid "More" diff --git a/l10n/sl/files.po b/l10n/sl/files.po index 38aea37e55..94b106efea 100644 --- a/l10n/sl/files.po +++ b/l10n/sl/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n" "MIME-Version: 1.0\n" @@ -277,7 +277,7 @@ msgid "From link" msgstr "Iz povezave" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/sr/files.po b/l10n/sr/files.po index 87da73eae7..949fbc2cfc 100644 --- a/l10n/sr/files.po +++ b/l10n/sr/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" @@ -276,7 +276,7 @@ msgid "From link" msgstr "Са везе" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/sr@latin/files.po b/l10n/sr@latin/files.po index a6c469865e..721a34c099 100644 --- a/l10n/sr@latin/files.po +++ b/l10n/sr@latin/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:01+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n" "MIME-Version: 1.0\n" @@ -274,7 +274,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/sv/files.po b/l10n/sv/files.po index 89fbc15a0d..4b3b2f578f 100644 --- a/l10n/sv/files.po +++ b/l10n/sv/files.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: Magnus Höglund \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -280,8 +280,8 @@ msgid "From link" msgstr "Från länk" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Papperskorg" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/sw_KE/files.po b/l10n/sw_KE/files.po index 742adbe87b..7f9a342c8f 100644 --- a/l10n/sw_KE/files.po +++ b/l10n/sw_KE/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n" "MIME-Version: 1.0\n" @@ -78,15 +78,15 @@ msgstr "" msgid "Files" msgstr "" -#: js/fileactions.js:116 +#: js/fileactions.js:125 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:127 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "" -#: js/fileactions.js:184 +#: js/fileactions.js:193 msgid "Rename" msgstr "" @@ -192,31 +192,31 @@ msgstr "" msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "" @@ -273,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/ta_LK/files.po b/l10n/ta_LK/files.po index 029f9a8cef..f6d7c0f446 100644 --- a/l10n/ta_LK/files.po +++ b/l10n/ta_LK/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" "MIME-Version: 1.0\n" @@ -274,7 +274,7 @@ msgid "From link" msgstr "இணைப்பிலிருந்து" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index 2eee9f2a62..0cc8a3019e 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index 5e13944074..078e0e4058 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -273,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index 8df78c0aeb..6d0396470c 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index ad9a23ecd3..db27055908 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index b60e91b3e2..27454624e2 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index 2d57b907d0..dfb7649458 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index ed3b509d93..bbfa7fc167 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 39979f4ffd..40dc2bee04 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,27 +17,27 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: app.php:339 +#: app.php:349 msgid "Help" msgstr "" -#: app.php:346 +#: app.php:362 msgid "Personal" msgstr "" -#: app.php:351 +#: app.php:373 msgid "Settings" msgstr "" -#: app.php:356 +#: app.php:385 msgid "Users" msgstr "" -#: app.php:363 +#: app.php:398 msgid "Apps" msgstr "" -#: app.php:365 +#: app.php:406 msgid "Admin" msgstr "" @@ -49,15 +49,15 @@ msgstr "" msgid "Files need to be downloaded one by one." msgstr "" -#: files.php:203 files.php:228 +#: files.php:204 files.php:231 msgid "Back to Files" msgstr "" -#: files.php:227 +#: files.php:228 msgid "Selected files too large to generate zip file." msgstr "" -#: helper.php:226 +#: helper.php:228 msgid "couldn't be determined" msgstr "" @@ -117,7 +117,7 @@ msgstr "" msgid "%s set the database host." msgstr "" -#: setup.php:126 setup.php:291 setup.php:336 +#: setup.php:126 setup.php:294 setup.php:339 msgid "PostgreSQL username and/or password not valid" msgstr "" @@ -125,7 +125,7 @@ msgstr "" msgid "You need to enter either an existing account or the administrator." msgstr "" -#: setup.php:149 setup.php:423 setup.php:489 +#: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" msgstr "" @@ -133,51 +133,51 @@ msgstr "" msgid "MySQL username and/or password not valid" msgstr "" -#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 -#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 -#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 -#: setup.php:579 +#: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 +#: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 +#: setup.php:545 setup.php:552 setup.php:561 setup.php:569 setup.php:578 +#: setup.php:584 #, php-format msgid "DB Error: \"%s\"" msgstr "" -#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 -#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 -#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 +#: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 +#: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" msgstr "" -#: setup.php:270 +#: setup.php:273 #, php-format msgid "MySQL user '%s'@'localhost' exists already." msgstr "" -#: setup.php:271 +#: setup.php:274 msgid "Drop this user from MySQL" msgstr "" -#: setup.php:276 +#: setup.php:279 #, php-format msgid "MySQL user '%s'@'%%' already exists" msgstr "" -#: setup.php:277 +#: setup.php:280 msgid "Drop this user from MySQL." msgstr "" -#: setup.php:548 setup.php:580 +#: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" msgstr "" -#: setup.php:644 +#: setup.php:649 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:645 +#: setup.php:651 #, php-format msgid "Please double check the installation guides." msgstr "" @@ -234,16 +234,16 @@ msgstr "" msgid "years ago" msgstr "" -#: updater.php:75 +#: updater.php:78 #, php-format msgid "%s is available. Get more information" msgstr "" -#: updater.php:77 +#: updater.php:81 msgid "up to date" msgstr "" -#: updater.php:80 +#: updater.php:84 msgid "updates check is disabled" msgstr "" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index ba64549ac3..afd2407497 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -145,19 +145,19 @@ msgstr "" msgid "Delete" msgstr "" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" msgstr "" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" msgstr "" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" msgstr "" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" msgstr "" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index 28076de4f7..0a173656b5 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index dd101e97f2..0b84d4999f 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" +"POT-Creation-Date: 2013-02-15 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/th_TH/files.po b/l10n/th_TH/files.po index 46b65bacce..295ad41356 100644 --- a/l10n/th_TH/files.po +++ b/l10n/th_TH/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n" "MIME-Version: 1.0\n" @@ -275,7 +275,7 @@ msgid "From link" msgstr "จากลิงก์" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/tr/files.po b/l10n/tr/files.po index fef006738d..9656ce6720 100644 --- a/l10n/tr/files.po +++ b/l10n/tr/files.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -279,7 +279,7 @@ msgid "From link" msgstr "Bağlantıdan" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/uk/files.po b/l10n/uk/files.po index 911efad37b..6eeb4c0aa4 100644 --- a/l10n/uk/files.po +++ b/l10n/uk/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" @@ -277,7 +277,7 @@ msgid "From link" msgstr "З посилання" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/vi/files.po b/l10n/vi/files.po index 80f70455ab..d7eaa300bd 100644 --- a/l10n/vi/files.po +++ b/l10n/vi/files.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 05:00+0000\n" -"Last-Translator: saosangm \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -278,8 +278,8 @@ msgid "From link" msgstr "Từ liên kết" #: templates/index.php:40 -msgid "Trash bin" -msgstr "Thùng rác" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/zh_CN.GB2312/files.po b/l10n/zh_CN.GB2312/files.po index 1d224e5016..a9b6ba1536 100644 --- a/l10n/zh_CN.GB2312/files.po +++ b/l10n/zh_CN.GB2312/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n" "MIME-Version: 1.0\n" @@ -275,7 +275,7 @@ msgid "From link" msgstr "来自链接" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/zh_CN/files.po b/l10n/zh_CN/files.po index c34312e602..76347b180a 100644 --- a/l10n/zh_CN/files.po +++ b/l10n/zh_CN/files.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -280,7 +280,7 @@ msgid "From link" msgstr "来自链接" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/zh_HK/files.po b/l10n/zh_HK/files.po index 215528e327..81c2adf9f0 100644 --- a/l10n/zh_HK/files.po +++ b/l10n/zh_HK/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n" "MIME-Version: 1.0\n" @@ -78,15 +78,15 @@ msgstr "" msgid "Files" msgstr "" -#: js/fileactions.js:116 +#: js/fileactions.js:125 msgid "Delete permanently" msgstr "" -#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 +#: js/fileactions.js:127 templates/index.php:91 templates/index.php:92 msgid "Delete" msgstr "" -#: js/fileactions.js:184 +#: js/fileactions.js:193 msgid "Rename" msgstr "" @@ -192,31 +192,31 @@ msgstr "" msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "" @@ -273,7 +273,7 @@ msgid "From link" msgstr "" #: templates/index.php:40 -msgid "Trash bin" +msgid "Deleted files" msgstr "" #: templates/index.php:46 diff --git a/l10n/zh_TW/files.po b/l10n/zh_TW/files.po index bd0ba5a360..4532870022 100644 --- a/l10n/zh_TW/files.po +++ b/l10n/zh_TW/files.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: pellaeon \n" +"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -279,8 +279,8 @@ msgid "From link" msgstr "從連結" #: templates/index.php:40 -msgid "Trash bin" -msgstr "回收筒" +msgid "Deleted files" +msgstr "" #: templates/index.php:46 msgid "Cancel upload" diff --git a/lib/l10n/bg_BG.php b/lib/l10n/bg_BG.php index fed7f29cbb..d80e03608a 100644 --- a/lib/l10n/bg_BG.php +++ b/lib/l10n/bg_BG.php @@ -16,6 +16,11 @@ "Files" => "Файлове", "Text" => "Текст", "Images" => "Снимки", +"Set an admin username." => "Въведете потребителско име за администратор.", +"Set an admin password." => "Въведете парола за администратор.", +"Specify a data folder." => "Укажете папка за данни", +"%s enter the database username." => "%s въведете потребителско име за базата с данни.", +"%s enter the database name." => "%s въведете име на базата с данни.", "seconds ago" => "преди секунди", "1 minute ago" => "преди 1 минута", "%d minutes ago" => "преди %d минути", diff --git a/lib/l10n/es_AR.php b/lib/l10n/es_AR.php index 8e3f3d5e90..a2391a45b2 100644 --- a/lib/l10n/es_AR.php +++ b/lib/l10n/es_AR.php @@ -19,6 +19,18 @@ "Set an admin username." => "Configurar un nombre de administrador", "Set an admin password." => "Configurar una palabra clave de administrador", "Specify a data folder." => "Especificar un directorio de datos", +"%s enter the database username." => "%s Entre el Usuario de la Base de Datos", +"%s enter the database name." => "%s Entre el Nombre de la Base de Datos", +"%s you may not use dots in the database name" => "%s no puede usar puntos en el nombre de la Base de Datos", +"%s set the database host." => "%s Especifique la dirección de la Base de Datos", +"PostgreSQL username and/or password not valid" => "Nombre de usuario o contraseña de PostgradeSQL no válido.", +"You need to enter either an existing account or the administrator." => "Debe ingresar una cuenta existente o el administrador", +"MySQL username and/or password not valid" => "Usuario y/o contraseña MySQL no válido", +"DB Error: \"%s\"" => "Error DB: \"%s\"", +"MySQL user '%s'@'localhost' exists already." => "Usuario MySQL '%s'@'localhost' ya existente", +"Drop this user from MySQL" => "Borrar este usuario de MySQL", +"MySQL user '%s'@'%%' already exists" => "Usuario MySQL '%s'@'%%' ya existente", +"Drop this user from MySQL." => "Borrar este usuario de MySQL", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Tu servidor web no está configurado todavía para permitir sincronización de archivos porque la interfaz WebDAV parece no funcionar.", "Please double check the installation guides." => "Por favor, comprobá nuevamente la guía de instalación.", "seconds ago" => "hace unos segundos", diff --git a/lib/l10n/fi_FI.php b/lib/l10n/fi_FI.php index fd4cc27c9c..c3ff3e9a2b 100644 --- a/lib/l10n/fi_FI.php +++ b/lib/l10n/fi_FI.php @@ -18,6 +18,10 @@ "Images" => "Kuvat", "Set an admin username." => "Aseta ylläpitäjän käyttäjätunnus.", "Set an admin password." => "Aseta ylläpitäjän salasana.", +"Specify a data folder." => "Määritä datakansio.", +"PostgreSQL username and/or password not valid" => "PostgreSQL:n käyttäjätunnus ja/tai salasana on väärin", +"Oracle username and/or password not valid" => "Oraclen käyttäjätunnus ja/tai salasana on väärin", +"MySQL username and/or password not valid" => "MySQL:n käyttäjätunnus ja/tai salasana on väärin", "DB Error: \"%s\"" => "Tietokantavirhe: \"%s\"", "MySQL user '%s'@'localhost' exists already." => "MySQL-käyttäjä '%s'@'localhost' on jo olemassa.", "MySQL user '%s'@'%%' already exists" => "MySQL-käyttäjä '%s'@'%%' on jo olemassa", diff --git a/lib/l10n/pt_PT.php b/lib/l10n/pt_PT.php index 67b8078ddf..a3585f914d 100644 --- a/lib/l10n/pt_PT.php +++ b/lib/l10n/pt_PT.php @@ -16,6 +16,15 @@ "Files" => "Ficheiros", "Text" => "Texto", "Images" => "Imagens", +"Set an admin username." => "Definir um nome de utilizador de administrador", +"Set an admin password." => "Definiar uma password de administrador", +"Specify a data folder." => "Especificar a pasta para os dados.", +"%s enter the database username." => "%s introduza o nome de utilizador da base de dados", +"%s enter the database name." => "%s introduza o nome da base de dados", +"%s you may not use dots in the database name" => "%s não é permitido utilizar pontos (.) no nome da base de dados", +"%s set the database host." => "%s defina o servidor da base de dados (geralmente localhost)", +"PostgreSQL username and/or password not valid" => "Nome de utilizador/passwor do PostgreSQL inválido", +"You need to enter either an existing account or the administrator." => "Precisa de introduzir uma conta existente ou de administrador", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas.", "Please double check the installation guides." => "Por favor verifique installation guides.", "seconds ago" => "há alguns segundos", diff --git a/settings/l10n/bg_BG.php b/settings/l10n/bg_BG.php index de2ff4e481..cdb9927a6a 100644 --- a/settings/l10n/bg_BG.php +++ b/settings/l10n/bg_BG.php @@ -1,27 +1,52 @@ "Възникна проблем с идентификацията", +"Group already exists" => "Групата вече съществува", +"Unable to add group" => "Невъзможно добавяне на група", +"Unable to delete group" => "Невъзможно изтриване на група", +"Unable to delete user" => "Невъзможно изтриване на потребител", "Language changed" => "Езикът е променен", "Invalid request" => "Невалидна заявка", +"Disable" => "Изключено", "Enable" => "Включено", +"Please wait...." => "Моля почакайте....", +"Updating...." => "Обновява се...", "Error" => "Грешка", +"Updated" => "Обновено", +"Saving..." => "Записване...", +"deleted" => "изтрито", "undo" => "възтановяване", "Groups" => "Групи", "Delete" => "Изтриване", "__language_name__" => "__language_name__", "More" => "Още", +"Version" => "Версия", "Add your App" => "Добавете Ваше приложение", +"More Apps" => "Още приложения", "Select an App" => "Изберете приложение", "Update" => "Обновяване", +"User Documentation" => "Потребителска документация", +"Administrator Documentation" => "Административна документация", +"Online Documentation" => "Документация", +"Forum" => "Форум", +"Bugtracker" => "Докладвани грешки", +"Commercial Support" => "Платена поддръжка", "Show First Run Wizard again" => "Покажи настройките за първоначално зареждане отново", "Password" => "Парола", "Unable to change your password" => "Промяната на паролата не беше извършена", "Current password" => "Текуща парола", "New password" => "Нова парола", "Change password" => "Промяна на паролата", +"Display Name" => "Екранно име", "Email" => "E-mail", "Your email address" => "Вашия email адрес", "Language" => "Език", "Help translate" => "Помогнете с превода", +"WebDAV" => "WebDAV", +"Login Name" => "Потребител", "Create" => "Създаване", -"Other" => "Други" +"Default Storage" => "Хранилище по подразбиране", +"Unlimited" => "Неограничено", +"Other" => "Други", +"Storage" => "Хранилище", +"Default" => "По подразбиране" ); diff --git a/settings/l10n/de_DE.php b/settings/l10n/de_DE.php index b59e1236ca..cf94701958 100644 --- a/settings/l10n/de_DE.php +++ b/settings/l10n/de_DE.php @@ -35,19 +35,19 @@ "__language_name__" => "Deutsch (Förmlich: Sie)", "Security Warning" => "Sicherheitshinweis", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich über das Internet erreichbar. Die von ownCloud bereitgestellte .htaccess Datei funktioniert nicht. Wir empfehlen Ihnen dringend, Ihren Webserver so zu konfigurieren, dass das Datenverzeichnis nicht mehr über das Internet erreichbar ist. Alternativ können Sie auch das Datenverzeichnis aus dem Dokumentenverzeichnis des Webservers verschieben.", -"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Dein Web-Server ist wahrscheinlich noch nicht dafür eingestellt, Datei-Synchronisation zu erlauben, weil die WebDAV-Schnittstelle vermutlich defekt ist.", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ihr Web-Server ist wahrscheinlich noch nicht konfiguriert, Datei-Synchronisation zu erlauben, weil die WebDAV-Schnittstelle vermutlich defekt ist.", "Please double check the installation guides." => "Bitte prüfen Sie die Instalationsanleitungen.", "Execute one task with each page loaded" => "Führe eine Aufgabe bei jedem Laden der Seite aus", "Sharing" => "Teilen", "Enable Share API" => "Teilen-API aktivieren", -"Allow apps to use the Share API" => "Erlaube es Anwendungen , die Teilen-API zu benutzen", +"Allow apps to use the Share API" => "Erlaube es Anwendungen, die Teilen-API zu benutzen", "Allow links" => "Links erlauben", "Allow users to share items to the public with links" => "Erlaube es Benutzern, Items per öffentlichem Link zu teilen", "Allow resharing" => "Erlaube weiterteilen", "Security" => "Sicherheit", "Enforce HTTPS" => "HTTPS erzwingen", "Enforces the clients to connect to ownCloud via an encrypted connection." => "Zwingt die Clients, sich über eine verschlüsselte Verbindung mit ownCloud zu verbinden.", -"Please connect to this ownCloud instance via HTTPS to enable or disable the SSL enforcement." => "Bitte verbinde dich mit dieser ownCloud-Instanz per HTTPS um SSL-Erzwingung zu aktivieren oder deaktivieren.", +"Please connect to this ownCloud instance via HTTPS to enable or disable the SSL enforcement." => "Bitte verbinden Sie sich mit dieser ownCloud-Instanz per HTTPS um SSL-Erzwingung zu aktivieren oder deaktivieren.", "Log" => "Log", "Log level" => "Log-Level", "More" => "Mehr", @@ -66,7 +66,7 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "Kommerzieller Support", "You have used %s of the available %s" => "Sie verwenden %s der verfügbaren %s", -"Get the apps to sync your files" => "Installiere die App um Deine Dateien zu synchronisieren", +"Get the apps to sync your files" => "Installieren Sie die Anwendungen um Ihre Dateien zu synchronisieren", "Show First Run Wizard again" => "Zeige den Einrichtungsassistenten erneut", "Password" => "Passwort", "Your password was changed" => "Ihr Passwort wurde geändert.", @@ -75,8 +75,8 @@ "New password" => "Neues Passwort", "Change password" => "Passwort ändern", "Display Name" => "Anzeigename", -"Your display name was changed" => "Dein Anzeigename wurde geändert", -"Unable to change your display name" => "Das Ändern deines Anzeigenamens ist nicht möglich", +"Your display name was changed" => "Ihr Anzeigename wurde geändert", +"Unable to change your display name" => "Das Ändern Ihres Anzeigenamens ist nicht möglich", "Change display name" => "Anzeigenamen ändern", "Email" => "E-Mail", "Your email address" => "Ihre E-Mail-Adresse", diff --git a/settings/l10n/es_AR.php b/settings/l10n/es_AR.php index b09cc5f9b0..d5e054a14d 100644 --- a/settings/l10n/es_AR.php +++ b/settings/l10n/es_AR.php @@ -26,14 +26,41 @@ "Saving..." => "Guardando...", "deleted" => "borrado", "undo" => "deshacer", +"Unable to remove user" => "Imposible remover usuario", "Groups" => "Grupos", "Group Admin" => "Grupo Administrador", "Delete" => "Borrar", +"add group" => "Agregar grupo", +"A valid username must be provided" => "Debe ingresar un nombre de usuario válido", +"Error creating user" => "Error creando usuario", +"A valid password must be provided" => "Debe ingresar una contraseña válida", "__language_name__" => "Castellano (Argentina)", "Security Warning" => "Advertencia de seguridad", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Tu directorio de datos y tus archivos son probablemente accesibles desde internet. El archivo .htaccess provisto por ownCloud no está funcionando. Te sugerimos que configures tu servidor web de manera que el directorio de datos ya no esté accesible, o que muevas el directorio de datos afuera del directorio raíz de tu servidor web.", +"Setup Warning" => "Alerta de Configuración", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Tu servidor web no está configurado todavía para permitir sincronización de archivos porque la interfaz WebDAV parece no funcionar.", "Please double check the installation guides." => "Por favor, comprobá nuevamente la guía de instalación.", +"Module 'fileinfo' missing" => "Modulo 'fileinfo' no existe", +"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "El modulo PHP 'fileinfo' no existe. Es muy recomendable que active este modulo para obtener mejores resultados con la detección mime-type", +"Locale not working" => "\"Locale\" no está funcionando", +"This ownCloud server can't set system locale to \"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8/en_US.UTF8." => "El servidor ownCloud no puede establecer el sistema locale a \"en_US.UTF-8\"/\"en_US.UTF8\". Esto significa que debe haber u problema con ciertos caracteres en los nombres de archivo. Le recomendamos instalar en su sitema los paquetes requeridos para soportar en_US.UTF-8/en_US.UTF8.", +"Internet connection not working" => "La conexión a Internet no esta funcionando. ", +"Cron" => "Cron", +"Execute one task with each page loaded" => "Ejecute una tarea con cada pagina cargada.", +"Sharing" => "Compartiendo", +"Enable Share API" => "Habilitar Share API", +"Allow apps to use the Share API" => "Permitir a las aplicaciones usar la Share API", +"Allow links" => "Permitir enlaces", +"Allow users to share items to the public with links" => "Permitir a los usuarios compartir enlaces públicos", +"Allow resharing" => "Permitir Re-Compartir", +"Allow users to share items shared with them again" => "Permite a los usuarios volver a compartir items que le han compartido", +"Allow users to share with anyone" => "Permitir a los usuarios compartir con todos.", +"Allow users to only share with users in their groups" => "Permitir a los usuarios compartir solo con los de su propio grupo", +"Security" => "Seguridad", +"Enforce HTTPS" => "Forzar HTTPS", +"Enforces the clients to connect to ownCloud via an encrypted connection." => "Forzar a los clientes conectar a ownCloud vía conexión encriptada", +"Log" => "Log", +"Log level" => "Nivel de Log", "More" => "Más", "Version" => "Versión", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Desarrollado por la comunidad ownCloud, el código fuente está bajo licencia AGPL.", diff --git a/settings/l10n/fi_FI.php b/settings/l10n/fi_FI.php index e46bf0abd6..ab43f61eee 100644 --- a/settings/l10n/fi_FI.php +++ b/settings/l10n/fi_FI.php @@ -36,6 +36,7 @@ "Security Warning" => "Turvallisuusvaroitus", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Data-kansio ja tiedostot ovat ehkä saavutettavissa Internetistä. .htaccess-tiedosto, jolla kontrolloidaan pääsyä, ei toimi. Suosittelemme, että muutat web-palvelimesi asetukset niin ettei data-kansio ole enää pääsyä tai siirrät data-kansion pois web-palvelimen tiedostojen juuresta.", "Please double check the installation guides." => "Lue tarkasti asennusohjeet.", +"Module 'fileinfo' missing" => "Moduuli 'fileinfo' puuttuu", "Internet connection not working" => "Internet-yhteys ei toimi", "Cron" => "Cron", "Sharing" => "Jakaminen", diff --git a/settings/l10n/gl.php b/settings/l10n/gl.php index 117afab87a..6452a75f6c 100644 --- a/settings/l10n/gl.php +++ b/settings/l10n/gl.php @@ -5,28 +5,58 @@ "Unable to add group" => "Non é posíbel engadir o grupo", "Could not enable app. " => "Non é posíbel activar o aplicativo.", "Email saved" => "Correo gardado", -"Invalid email" => "correo incorrecto", +"Invalid email" => "Correo incorrecto", "Unable to delete group" => "Non é posíbel eliminar o grupo.", "Unable to delete user" => "Non é posíbel eliminar o usuario", "Language changed" => "O idioma cambiou", "Invalid request" => "Petición incorrecta", -"Admins can't remove themself from the admin group" => "Os administradores non se pode eliminar a si mesmos do grupo admin", +"Admins can't remove themself from the admin group" => "Os administradores non poden eliminarse a si mesmos do grupo admin", "Unable to add user to group %s" => "Non é posíbel engadir o usuario ao grupo %s", "Unable to remove user from group %s" => "Non é posíbel eliminar o usuario do grupo %s", +"Couldn't update app." => "Non foi posíbel actualizar o aplicativo.", +"Update to {appversion}" => "Actualizar á {appversion}", "Disable" => "Desactivar", "Enable" => "Activar", +"Please wait...." => "Agarde...", +"Updating...." => "Actualizando...", +"Error while updating app" => "Produciuse un erro mentres actualizaba o aplicativo", "Error" => "Erro", +"Updated" => "Actualizado", "Saving..." => "Gardando...", "deleted" => "eliminado", "undo" => "desfacer", +"Unable to remove user" => "Non é posíbel retirar o usuario", "Groups" => "Grupos", "Group Admin" => "Grupo Admin", "Delete" => "Eliminar", +"add group" => "engadir un grupo", +"A valid username must be provided" => "Debe fornecer un nome de usuario", +"Error creating user" => "Produciuse un erro ao crear o usuario", +"A valid password must be provided" => "Debe fornecer un contrasinal", "__language_name__" => "Galego", "Security Warning" => "Aviso de seguranza", -"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "O seu cartafol de datos e os seus ficheiros probabelmente sexan accesíbeis a través da Internet. O ficheiro .htaccess que fornece ownCloud non está a empregarse. Suxerimoslle que configure o seu servidor web de tal xeito que o cartafol de datos non estea accesíbel ou mova o cartafol de datos fora do directorio raíz de datos do servidor web.", +"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "O seu cartafol de datos e os seus ficheiros probabelmente sexan accesíbeis a través da Internet. O ficheiro .htaccess que fornece ownCloud non está a empregarse. Suxerímoslle que configure o seu servidor web de tal xeito que o cartafol de datos non estea accesíbel ou mova o cartafol de datos fora do directorio raíz de datos do servidor web.", +"Setup Warning" => "Configurar os avisos", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "O seu servidor web non está aínda configurado adecuadamente para permitir a sincronización de ficheiros xa que semella que a interface WebDAV non está a funcionar.", "Please double check the installation guides." => "Volva comprobar as guías de instalación", +"Module 'fileinfo' missing" => "Non se atopou o módulo «fileinfo»", +"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "Non se atopou o módulo de PHP «fileinfo». É recomendábel activar este módulo para obter os mellores resultados coa detección do tipo MIME.", +"Execute one task with each page loaded" => "Executar unha tarefa con cada páxina cargada", +"Sharing" => "Compartindo", +"Enable Share API" => "Activar o API para compartir", +"Allow apps to use the Share API" => "Permitir que os aplicativos empreguen o API para compartir", +"Allow links" => "Permitir ligazóns", +"Allow users to share items to the public with links" => "Permitir que os usuarios compartan elementos ao público con ligazóns", +"Allow resharing" => "Permitir compartir", +"Allow users to share items shared with them again" => "Permitir que os usuarios compartan de novo os elementos compartidos con eles", +"Allow users to share with anyone" => "Permitir que os usuarios compartan con calquera", +"Allow users to only share with users in their groups" => "Permitir que os usuarios compartan só cos usuarios dos seus grupos", +"Security" => "Seguranza", +"Enforce HTTPS" => "Forzar HTTPS", +"Enforces the clients to connect to ownCloud via an encrypted connection." => "Forzar que os clientes se conecten a ownCloud empregando unha conexión cifrada", +"Please connect to this ownCloud instance via HTTPS to enable or disable the SSL enforcement." => "Conectese a esta instancia ownCloud empregando HTTPS para activar ou desactivar o forzado de SSL.", +"Log" => "Rexistro", +"Log level" => "Nivel de rexistro", "More" => "Máis", "Version" => "Versión", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Desenvolvido pola comunidade ownCloud, o código fonte está baixo a licenza AGPL.", @@ -42,7 +72,8 @@ "Forum" => "Foro", "Bugtracker" => "Seguemento de fallos", "Commercial Support" => "Asistencia comercial", -"You have used %s of the available %s" => "Te en uso %s do total dispoñíbel de %s", +"You have used %s of the available %s" => "Ten en uso %s do total dispoñíbel de %s", +"Get the apps to sync your files" => "Obteña os aplicativos para sincronizar os seus ficheiros", "Show First Run Wizard again" => "Amosar o axudante da primeira execución outra vez", "Password" => "Contrasinal", "Your password was changed" => "O seu contrasinal foi cambiado", @@ -50,6 +81,7 @@ "Current password" => "Contrasinal actual", "New password" => "Novo contrasinal", "Change password" => "Cambiar o contrasinal", +"Display Name" => "Amosar o nome", "Email" => "Correo", "Your email address" => "O seu enderezo de correo", "Fill in an email address to enable password recovery" => "Escriba un enderezo de correo para activar a recuperación do contrasinal", @@ -57,10 +89,12 @@ "Help translate" => "Axude na tradución", "WebDAV" => "WebDAV", "Use this address to connect to your ownCloud in your file manager" => "Utilice este enderezo para conectarse ao seu ownCloud co administrador de ficheiros", +"Login Name" => "Nome de acceso", "Create" => "Crear", "Default Storage" => "Almacenamento predeterminado", "Unlimited" => "Sen límites", "Other" => "Outro", "Storage" => "Almacenamento", +"set new password" => "estabelecer un novo contrasinal", "Default" => "Predeterminado" ); diff --git a/settings/l10n/nl.php b/settings/l10n/nl.php index c466f619f2..b8e6491cc5 100644 --- a/settings/l10n/nl.php +++ b/settings/l10n/nl.php @@ -26,14 +26,45 @@ "Saving..." => "Aan het bewaren.....", "deleted" => "verwijderd", "undo" => "ongedaan maken", +"Unable to remove user" => "Kon gebruiker niet verwijderen", "Groups" => "Groepen", "Group Admin" => "Groep beheerder", "Delete" => "verwijderen", +"add group" => "toevoegen groep", +"A valid username must be provided" => "Er moet een geldige gebruikersnaam worden opgegeven", +"Error creating user" => "Fout bij aanmaken gebruiker", +"A valid password must be provided" => "Er moet een geldig wachtwoord worden opgegeven", "__language_name__" => "Nederlands", "Security Warning" => "Beveiligingswaarschuwing", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Uw data is waarschijnlijk toegankelijk vanaf net internet. Het .htaccess bestand dat ownCloud levert werkt niet goed. U wordt aangeraden om de configuratie van uw webserver zodanig aan te passen dat de data folders niet meer publiekelijk toegankelijk zijn. U kunt ook de data folder verplaatsen naar een folder buiten de webserver document folder.", +"Setup Warning" => "Instellingswaarschuwing", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Uw webserver is nog niet goed ingesteld voor bestandssynchronisatie omdat de WebDAV interface verbroken lijkt.", "Please double check the installation guides." => "Conntroleer de installatie handleiding goed.", +"Module 'fileinfo' missing" => "Module 'fileinfo' ontbreekt", +"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "De PHP module 'fileinfo' ontbreekt. We adviseren met klem om deze module te activeren om de beste resultaten te bereiken voor mime-type detectie.", +"Locale not working" => "Taalbestand werkt niet", +"This ownCloud server can't set system locale to \"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8/en_US.UTF8." => "Deze ownCloud server kan de systeemtaal niet instellen op \"en_US.UTF-8\"/\"en_US.UTF8\". Er zijn vermoedelijk problemen met bepaalde tekens in de bestandsnamen. We adviseren om de voor ondersteuning van en_US.UTF-8/en_US.UTF8 vereiste pakketten op uw systeem te installeren.", +"Internet connection not working" => "Internet verbinding werkt niet", +"This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "Deze ownCloud server heeft geen actieve internet verbinding. dat betekent dat sommige functies, zoals aankoppelen van externe opslag, notificaties over updates of installatie van apps van 3e partijen niet werken. Ook het benaderen van bestanden vanaf een remote locatie en het versturen van notificatie emails kan mislukken. We adviseren om de internet verbinding voor deze server in te schakelen als u alle functies van ownCloud wilt gebruiken.", +"Cron" => "Cron", +"Execute one task with each page loaded" => "Bij laden van elke pagina één taak uitvoeren", +"cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http." => "cron.php is geregistreerd bij een webcron service. Roep eens per minuut de cron.php pagina aan over http in de ownCloud root.", +"Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "Gebruik de systems cron service. Roep eens per minuut de cron.php file in de ownCloud map via een systeem cronjob.", +"Sharing" => "Delen", +"Enable Share API" => "Activeren Share API", +"Allow apps to use the Share API" => "Apps toestaan de Share API te gebruiken", +"Allow links" => "Toestaan links", +"Allow users to share items to the public with links" => "Toestaan dat gebruikers objecten met links delen met anderen", +"Allow resharing" => "Toestaan opnieuw delen", +"Allow users to share items shared with them again" => "Toestaan dat gebruikers objecten die anderen met hun gedeeld hebben zelf ook weer delen met anderen", +"Allow users to share with anyone" => "Toestaan dat gebruikers met iedereen delen", +"Allow users to only share with users in their groups" => "Instellen dat gebruikers alleen met leden binnen hun groepen delen", +"Security" => "Beveiliging", +"Enforce HTTPS" => "Afdwingen HTTPS", +"Enforces the clients to connect to ownCloud via an encrypted connection." => "Afdwingen dat de clients alleen via versleutelde verbinding contact maken met ownCloud.", +"Please connect to this ownCloud instance via HTTPS to enable or disable the SSL enforcement." => "Maak via HTTPS verbinding met deze ownCloud inrichting om het afdwingen van gebruik van SSL te activeren of deactiveren.", +"Log" => "Log", +"Log level" => "Log niveau", "More" => "Meer", "Version" => "Versie", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Ontwikkeld door de ownCloud gemeenschap, de bron code is gelicenseerd onder de AGPL.", diff --git a/settings/l10n/pt_BR.php b/settings/l10n/pt_BR.php index 811fb024f8..700bafc815 100644 --- a/settings/l10n/pt_BR.php +++ b/settings/l10n/pt_BR.php @@ -47,6 +47,9 @@ "Internet connection not working" => "Sem conexão com a internet", "This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "Este servidor ownCloud não tem conexão com a internet. Isto significa que alguns dos recursos como montar armazenamento externo, notificar atualizações ou instalar aplicativos de terceiros não funcionam. Acesso remoto a arquivos e envio de e-mails de notificação podem também não funcionar. Sugerimos que habilite a conexão com a internet neste servidor se quiser usufruir de todos os recursos do ownCloud.", "Cron" => "Cron", +"Execute one task with each page loaded" => "Execute uma tarefa com cada página carregada", +"cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http." => "cron.php está registrado no serviço webcron. Chame a página cron.php na raíz do owncloud a cada minuto por http.", +"Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "Usar serviço de cron do sistema. Chama o arquivo cron.php na pasta owncloud via cronjob do sistema a cada minuto.", "Sharing" => "Compartilhamento", "Enable Share API" => "Habilitar API de Compartilhamento", "Allow apps to use the Share API" => "Permitir que aplicativos usem a API de Compartilhamento", @@ -75,6 +78,7 @@ "Administrator Documentation" => "Documentação de Administrador", "Online Documentation" => "Documentação Online", "Forum" => "Fórum", +"Bugtracker" => "Rastreador de Bugs", "Commercial Support" => "Suporte Comercial", "You have used %s of the available %s" => "Você usou %s do seu espaço de %s", "Get the apps to sync your files" => "Faça com que os apps sincronize seus arquivos", diff --git a/settings/l10n/pt_PT.php b/settings/l10n/pt_PT.php index d4d7d4e789..3ed2204daf 100644 --- a/settings/l10n/pt_PT.php +++ b/settings/l10n/pt_PT.php @@ -26,14 +26,45 @@ "Saving..." => "A guardar...", "deleted" => "apagado", "undo" => "desfazer", +"Unable to remove user" => "Não foi possível remover o utilizador", "Groups" => "Grupos", "Group Admin" => "Grupo Administrador", "Delete" => "Apagar", +"add group" => "Adicionar grupo", +"A valid username must be provided" => "Um nome de utilizador válido deve ser fornecido", +"Error creating user" => "Erro a criar utilizador", +"A valid password must be provided" => "Uma password válida deve ser fornecida", "__language_name__" => "__language_name__", "Security Warning" => "Aviso de Segurança", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "A sua pasta com os dados e os seus ficheiros estão provavelmente acessíveis a partir das internet. Sugerimos veementemente que configure o seu servidor web de maneira a que a pasta com os dados deixe de ficar acessível, ou mova a pasta com os dados para fora da raiz de documentos do servidor web.", +"Setup Warning" => "Aviso de setup", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas.", "Please double check the installation guides." => "Por favor verifique installation guides.", +"Module 'fileinfo' missing" => "Falta o módulo 'fileinfo'", +"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "O Módulo PHP 'fileinfo' não se encontra instalado/activado. É fortemente recomendado que active este módulo para obter os melhores resultado com a detecção dos tipos de mime.", +"Locale not working" => "Internacionalização não está a funcionar", +"This ownCloud server can't set system locale to \"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8/en_US.UTF8." => "Este servidor de ownCloud não consegue definir a codificação de caracteres para \"en_US.UTF-8\"/\"en_US.UTF8\". Isto significa que pode haver problemas com alguns caracteres nos nomes de ficheiros. É fortemente recomendado que instale o pacote para ser possível ver caracteres codificados em en_US.UTF-8/en_US.UTF8.", +"Internet connection not working" => "A ligação à internet não está a funcionar", +"This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "Este servidor ownCloud não tem uma ligação de internet funcional. Isto significa que algumas funcionalidades como o acesso a locais externos (dropbox, gdrive, etc), notificações sobre actualizções, ou a instalação de aplicações não irá funcionar. Sugerimos que active uma ligação à internet se pretende obter todas as funcionalidades do ownCloud.", +"Cron" => "Cron", +"Execute one task with each page loaded" => "Executar uma tarefa com cada página carregada", +"cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http." => "cron.php está registado como um serviço webcron. Aceda a pagina cron.php que se encontra na raiz do ownCloud uma vez por minuto utilizando o seu browser.", +"Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "Usar o serviço cron do sistema. Aceda a pagina cron.php que se encontra na raiz do ownCloud uma vez por minuto utilizando o seu browser.", +"Sharing" => "Partilha", +"Enable Share API" => "Activar a API de partilha", +"Allow apps to use the Share API" => "Permitir que os utilizadores usem a API de partilha", +"Allow links" => "Permitir links", +"Allow users to share items to the public with links" => "Permitir que os utilizadores partilhem itens com o público utilizando um link.", +"Allow resharing" => "Permitir repartilha", +"Allow users to share items shared with them again" => "Permitir que os utilizadores partilhem itens partilhados com eles", +"Allow users to share with anyone" => "Permitir que os utilizadores partilhem com todos", +"Allow users to only share with users in their groups" => "Permitir que os utilizadores partilhem somente com utilizadores do seu grupo", +"Security" => "Segurança", +"Enforce HTTPS" => "Forçar HTTPS", +"Enforces the clients to connect to ownCloud via an encrypted connection." => "Forçar clientes a ligar através de uma ligação encriptada", +"Please connect to this ownCloud instance via HTTPS to enable or disable the SSL enforcement." => "Por favor ligue-se ao ownCloud através de uma ligação HTTPS para ligar/desligar o forçar da ligação por SSL", +"Log" => "Registo", +"Log level" => "Nível do registo", "More" => "Mais", "Version" => "Versão", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Desenvolvido pela comunidade ownCloud, ocódigo fonte está licenciado sob a AGPL.", @@ -50,6 +81,7 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "Suporte Comercial", "You have used %s of the available %s" => "Usou %s do disponivel %s", +"Get the apps to sync your files" => "Obtenha as aplicações para sincronizar os seus ficheiros", "Show First Run Wizard again" => "Mostrar novamente Wizard de Arranque Inicial", "Password" => "Palavra-chave", "Your password was changed" => "A sua palavra-passe foi alterada", diff --git a/settings/l10n/sk_SK.php b/settings/l10n/sk_SK.php index 9fe6a01b7a..0b0bbca7a5 100644 --- a/settings/l10n/sk_SK.php +++ b/settings/l10n/sk_SK.php @@ -26,14 +26,45 @@ "Saving..." => "Ukladám...", "deleted" => "zmazané", "undo" => "vrátiť", +"Unable to remove user" => "Nemožno odobrať používateľa", "Groups" => "Skupiny", "Group Admin" => "Správca skupiny", "Delete" => "Odstrániť", +"add group" => "pridať skupinu", +"A valid username must be provided" => "Musíte zadať platné používateľské meno", +"Error creating user" => "Chyba pri vytváraní používateľa", +"A valid password must be provided" => "Musíte zadať platné heslo", "__language_name__" => "Slovensky", "Security Warning" => "Bezpečnostné varovanie", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Váš priečinok s dátami a Vaše súbory sú pravdepodobne dostupné z internetu. .htaccess súbor dodávaný s inštaláciou ownCloud nespĺňa úlohu. Dôrazne Vám doporučujeme nakonfigurovať webserver takým spôsobom, aby dáta v priečinku neboli verejné, alebo presuňte dáta mimo štruktúry priečinkov webservera.", +"Setup Warning" => "Nastavenia oznámení", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Váš webový server nie je správne nastavený na synchronizáciu, pretože rozhranie WebDAV je poškodené.", "Please double check the installation guides." => "Prosím skontrolujte inštalačnú príručku.", +"Module 'fileinfo' missing" => "Chýba modul 'fileinfo'", +"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "Chýba modul 'fileinfo'. Dôrazne doporučujeme ho povoliť pre dosiahnutie najlepších výsledkov zisťovania mime-typu.", +"Locale not working" => "Lokalizácia nefunguje", +"This ownCloud server can't set system locale to \"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8/en_US.UTF8." => "Tento server ownCloud nemôže nastaviť národné prostredie systému na \"en_US.UTF-8\" / \"en_US.UTF8\". To znamená, že by mohli byť problémy s niektorými znakmi v názvoch súborov. Veľmi odporúčame nainštalovať požadované balíky na podporu en_US.UTF-8/en_US.UTF8.", +"Internet connection not working" => "Pripojenie na internet nefunguje", +"This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "Tento server ownCloud nemá funkčné pripojenie k internetu. To znamená, že niektoré z funkcií, ako je pripojenie externého úložiska, oznámenia o aktualizáciách či inštalácia aplikácií tretích strán nefungujú. Prístup k súborom zo vzdialených miest a odosielanie oznamovacích e-mailov tiež nemusí fungovať. Odporúčame pripojiť tento server k internetu, ak chcete využívať všetky vlastnosti ownCloud.", +"Cron" => "Cron", +"Execute one task with each page loaded" => "Vykonať jednu úlohu s každým načítaní stránky", +"cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http." => "cron.php je registrovaná u služby webcron. Zavolá cron.php stránku v koreňovom priečinku owncloud raz za minútu cez protokol HTTP.", +"Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "Používať systémovú službu cron. Zavolať cron.php v priečinku owncloud cez systémovú úlohu raz za minútu", +"Sharing" => "Zdieľanie", +"Enable Share API" => "Povoliť API zdieľania", +"Allow apps to use the Share API" => "Povoliť aplikáciám používať API na zdieľanie", +"Allow links" => "Povoliť odkazy", +"Allow users to share items to the public with links" => "Povoliť používateľom zdieľať položky pre verejnosť cez odkazy", +"Allow resharing" => "Povoliť zdieľanie ďalej", +"Allow users to share items shared with them again" => "Povoliť používateľom ďalej zdieľať zdieľané položky", +"Allow users to share with anyone" => "Povoliť používateľom zdieľať s kýmkoľvek", +"Allow users to only share with users in their groups" => "Povoliť používateľom zdieľať len s používateľmi v ich skupinách", +"Security" => "Zabezpečenie", +"Enforce HTTPS" => "Vynútiť HTTPS", +"Enforces the clients to connect to ownCloud via an encrypted connection." => "Vynúti pripojovanie klientov ownCloud cez šifrované pripojenie.", +"Please connect to this ownCloud instance via HTTPS to enable or disable the SSL enforcement." => "Pripojte sa k tejto inštancii ownCloud cez HTTPS pre povolenie alebo zakázanie vynútenia SSL.", +"Log" => "Záznam", +"Log level" => "Úroveň záznamu", "More" => "Viac", "Version" => "Verzia", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Vyvinuté komunitou ownCloud,zdrojový kód je licencovaný pod AGPL.", From bcabdd7dd56fd11f5afd5f486955627a657c2072 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Fri, 15 Feb 2013 03:09:33 +0100 Subject: [PATCH 250/719] Don't cache errors/exceptions when debug is enabled --- lib/base.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/base.php b/lib/base.php index 2fa288a6eb..ba77d0a618 100644 --- a/lib/base.php +++ b/lib/base.php @@ -424,7 +424,7 @@ class OC { self::initPaths(); - if (!defined('PHPUNIT_RUN')) { + if (!defined('PHPUNIT_RUN') and !(defined('DEBUG') and DEBUG)) { register_shutdown_function(array('OC_Log', 'onShutdown')); set_error_handler(array('OC_Log', 'onError')); set_exception_handler(array('OC_Log', 'onException')); From 0395715348de9cfddcd3d7666479ee0fcb554357 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Fri, 15 Feb 2013 03:15:09 +0100 Subject: [PATCH 251/719] set DEBUG from xdebug session before we first use it --- lib/base.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/base.php b/lib/base.php index ba77d0a618..b5439c00ab 100644 --- a/lib/base.php +++ b/lib/base.php @@ -424,12 +424,6 @@ class OC { self::initPaths(); - if (!defined('PHPUNIT_RUN') and !(defined('DEBUG') and DEBUG)) { - register_shutdown_function(array('OC_Log', 'onShutdown')); - set_error_handler(array('OC_Log', 'onError')); - set_exception_handler(array('OC_Log', 'onException')); - } - // set debug mode if an xdebug session is active if (!defined('DEBUG') || !DEBUG) { if (isset($_COOKIE['XDEBUG_SESSION'])) { @@ -437,6 +431,12 @@ class OC { } } + if (!defined('PHPUNIT_RUN') and !(defined('DEBUG') and DEBUG)) { + register_shutdown_function(array('OC_Log', 'onShutdown')); + set_error_handler(array('OC_Log', 'onError')); + set_exception_handler(array('OC_Log', 'onException')); + } + // register the stream wrappers stream_wrapper_register('fakedir', 'OC\Files\Stream\Dir'); stream_wrapper_register('static', 'OC\Files\Stream\StaticStream'); From ab70f9bd2592ec15ac16a4e388d54e3eb2c3d662 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Fri, 15 Feb 2013 03:20:02 +0100 Subject: [PATCH 252/719] Fix quotes in OC_User::isEnabled this broke login --- lib/user.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/user.php b/lib/user.php index 35b259550f..e69fef95a1 100644 --- a/lib/user.php +++ b/lib/user.php @@ -608,8 +608,8 @@ class OC_User { * @return bool */ public static function isEnabled($userid) { - $sql = "SELECT `userid` FROM `*PREFIX*preferences`' - .' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? AND `configvalue` = ?"; + $sql = 'SELECT `userid` FROM `*PREFIX*preferences`' + .' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? AND `configvalue` = ?'; $stmt = OC_DB::prepare($sql); if ( ! OC_DB::isError($stmt) ) { $result = $stmt->execute(array($userid, 'core', 'enabled', 'false')); From 102619ab87f3adb1d649a41232305eda704c7f57 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Fri, 15 Feb 2013 08:22:31 +0100 Subject: [PATCH 253/719] we should never drop a database --- lib/db.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/db.php b/lib/db.php index 28923e48f0..edbc2fe13e 100644 --- a/lib/db.php +++ b/lib/db.php @@ -497,6 +497,9 @@ class OC_DB { $definition['name']=OC_Config::getValue( "dbuser", $oldname ); } + // we should never drop a database + $definition['overwrite'] = false; + $ret=self::$schema->createDatabase( $definition ); // Die in case something went wrong From 297c50db189faacf13e05335b3d38ddc2ff688c5 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Fri, 15 Feb 2013 12:24:49 +0100 Subject: [PATCH 254/719] changing the bit mask of OC_USER_BACKEND_SET_DISPLAYNAME --- lib/user/backend.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/user/backend.php b/lib/user/backend.php index 34de1e5069..60b3cc6c5e 100644 --- a/lib/user/backend.php +++ b/lib/user/backend.php @@ -36,7 +36,7 @@ define('OC_USER_BACKEND_SET_PASSWORD', 0x000010); define('OC_USER_BACKEND_CHECK_PASSWORD', 0x000100); define('OC_USER_BACKEND_GET_HOME', 0x001000); define('OC_USER_BACKEND_GET_DISPLAYNAME', 0x010000); -define('OC_USER_BACKEND_SET_DISPLAYNAME', 0x010000); +define('OC_USER_BACKEND_SET_DISPLAYNAME', 0x100000); /** From 08b68aac6c89c75d8735a9bd5df9da296e06e7d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Fri, 15 Feb 2013 12:27:56 +0100 Subject: [PATCH 255/719] check if glob() returns any results, fix for stable45 was already approved by pull request #1695 --- apps/files_versions/lib/versions.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php index b4ef88a6e8..f23381cb15 100644 --- a/apps/files_versions/lib/versions.php +++ b/apps/files_versions/lib/versions.php @@ -190,6 +190,10 @@ class Storage { $versions = array(); // fetch for old versions $matches = glob( $versionsName.'.v*' ); + + if ( !$matches ) { + return $versions; + } sort( $matches ); From e3ba0c3082841afe84b677fdc1fc07692c5a6cd3 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Fri, 15 Feb 2013 14:46:09 +0100 Subject: [PATCH 256/719] adding a new test class for mapped local using a dot in the datadir - reflects the issue described in #1659 --- .../storage/mappedlocalwithdotteddatadir.php | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 tests/lib/files/storage/mappedlocalwithdotteddatadir.php diff --git a/tests/lib/files/storage/mappedlocalwithdotteddatadir.php b/tests/lib/files/storage/mappedlocalwithdotteddatadir.php new file mode 100644 index 0000000000..abd0b3d85c --- /dev/null +++ b/tests/lib/files/storage/mappedlocalwithdotteddatadir.php @@ -0,0 +1,40 @@ +. +* +*/ + +namespace Test\Files\Storage; + +class MappedLocalWithDottedDataDir extends Storage { + /** + * @var string tmpDir + */ + private $tmpDir; + public function setUp() { + $this->tmpDir = \OC_Helper::tmpFolder().'dir.123'.DIRECTORY_SEPARATOR; + $this->instance=new \OC\Files\Storage\MappedLocal(array('datadir'=>$this->tmpDir)); + } + + public function tearDown() { + \OC_Helper::rmdirr($this->tmpDir); + unset($this->instance); + } +} + From 92a36ca8b81c48565e98204e1bfdd05a23ff8bbd Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 15 Feb 2013 15:45:34 +0100 Subject: [PATCH 257/719] Join short comment lines --- apps/user_ldap/lib/access.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php index 32910b6e25..901299e7c2 100644 --- a/apps/user_ldap/lib/access.php +++ b/apps/user_ldap/lib/access.php @@ -1054,10 +1054,8 @@ abstract class Access { $cookie = $this->getPagedResultCookie($base, $filter, $limit, $offset); if(empty($cookie) && ($offset > 0)) { - // no cookie known, although the offset - // is not 0. Maybe cache run out. We need - // to start all over *sigh* (btw, Dear - // Reader, did you need LDAP paged + // no cookie known, although the offset is not 0. Maybe cache run out. We need + // to start all over *sigh* (btw, Dear Reader, did you need LDAP paged // searching was designed by MSFT?) $reOffset = ($offset - $limit) < 0 ? 0 : $offset - $limit; //a bit recursive, $offset of 0 is the exit From 925de78cec848b293266450f9b5dde85f3a9af8f Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 15 Feb 2013 15:51:55 +0100 Subject: [PATCH 258/719] Join split translated strings --- apps/user_ldap/ajax/testConfiguration.php | 3 +-- apps/user_ldap/templates/settings.php | 16 +++++----------- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/apps/user_ldap/ajax/testConfiguration.php b/apps/user_ldap/ajax/testConfiguration.php index cfc07ff263..7ce1258a79 100644 --- a/apps/user_ldap/ajax/testConfiguration.php +++ b/apps/user_ldap/ajax/testConfiguration.php @@ -36,8 +36,7 @@ if($connection->setConfiguration($_POST)) { => $l->t('The configuration is valid and the connection could be established!'))); } else { OCP\JSON::error(array('message' - => $l->t('The configuration is valid, but the Bind failed.' - .' Please check the server settings and credentials.'))); + => $l->t('The configuration is valid, but the Bind failed. Please check the server settings and credentials.'))); } } else { OCP\JSON::error(array('message' diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php index 43f87c076d..a882e5b754 100644 --- a/apps/user_ldap/templates/settings.php +++ b/apps/user_ldap/templates/settings.php @@ -5,13 +5,10 @@
  • Advanced
  • '.$l->t('Warning: Apps user_ldap and user_webdavauth are incompatible.' - .' You may experience unexpected behaviour.' - .' Please ask your system administrator to disable one of them.').'

    '; + echo '

    '.$l->t('Warning: Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them.').'

    '; } if(!function_exists('ldap_connect')) { - echo '

    '.$l->t('Warning: The PHP LDAP module is not installed,' - .' the backend will not work. Please ask your system administrator to install it.').'

    '; + echo '

    '.$l->t('Warning: The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.').'

    '; } ?>
    @@ -25,16 +22,14 @@

    + title="t('You can omit the protocol, except you require SSL. Then start with ldaps://');?>">

    + title="t('The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty.');?>" />

    + title="t('Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action.');?>" />
    t('use %%uid placeholder, e.g. "uid=%%uid"');?>

    Date: Thu, 14 Feb 2013 17:57:19 +0100 Subject: [PATCH 259/719] Style cleanup files_external --- apps/files_external/lib/config.php | 20 ++++++++++++++++---- apps/files_external/lib/sftp.php | 5 +++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 44e668a09c..fe9d62ab47 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -310,7 +310,9 @@ class OC_Mount_Config { foreach ($data[self::MOUNT_TYPE_GROUP] as $group => $mounts) { $content .= "\t\t'".$group."' => array (\n"; foreach ($mounts as $mountPoint => $mount) { - $content .= "\t\t\t'".addcslashes($mountPoint, "'")."' => ".str_replace("\n", '', var_export($mount, true)).", \n"; + $content .= "\t\t\t'".addcslashes($mountPoint, "'") + ."' => " + .str_replace("\n", '', var_export($mount, true)).", \n"; } $content .= "\t\t),\n"; @@ -322,7 +324,9 @@ class OC_Mount_Config { foreach ($data[self::MOUNT_TYPE_USER] as $user => $mounts) { $content .= "\t\t'".$user."' => array (\n"; foreach ($mounts as $mountPoint => $mount) { - $content .= "\t\t\t'".addcslashes($mountPoint, "'")."' => ".str_replace("\n", '', var_export($mount, true)).",\n"; + $content .= "\t\t\t'".addcslashes($mountPoint, "'") + ."' => " + .str_replace("\n", '', var_export($mount, true)).",\n"; } $content .= "\t\t),\n"; } @@ -410,8 +414,16 @@ class OC_Mount_Config { public static function checkDependencies() { $l= new OC_L10N('files_external'); $txt=''; - if(!OC_Mount_Config::checksmbclient()) $txt.=$l->t('Warning: "smbclient" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it.').'
    '; - if(!OC_Mount_Config::checkphpftp()) $txt.=$l->t('Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it.').'
    '; + if(!OC_Mount_Config::checksmbclient()) { + $txt.=$l->t('Warning: "smbclient" is not installed.' + .' Mounting of CIFS/SMB shares is not possible.' + .' Please ask your system administrator to install it.').'
    '; + } + if(!OC_Mount_Config::checkphpftp()) { + $txt.=$l->t('Warning: The FTP support in PHP is not enabled or installed.' + .' Mounting of FTP shares is not possible.' + .' Please ask your system administrator to install it.').'
    '; + } return($txt); } diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index 551a5a64ef..3527f50ec9 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -7,8 +7,9 @@ */ namespace OC\Files\Storage; -set_include_path(get_include_path() . PATH_SEPARATOR . \OC_App::getAppPath('files_external') . '/3rdparty/phpseclib/phpseclib'); -require('Net/SFTP.php'); +set_include_path(get_include_path() . PATH_SEPARATOR . + \OC_App::getAppPath('files_external') . '/3rdparty/phpseclib/phpseclib'); +require 'Net/SFTP.php'; class SFTP extends \OC\Files\Storage\Common { private $host; From 6c197227d06d03403f335dbc23463ebf4b5f98a6 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 15 Feb 2013 15:54:51 +0100 Subject: [PATCH 260/719] Join split translated strings --- apps/files_external/lib/config.php | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index fe9d62ab47..a3d1da6884 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -415,14 +415,10 @@ class OC_Mount_Config { $l= new OC_L10N('files_external'); $txt=''; if(!OC_Mount_Config::checksmbclient()) { - $txt.=$l->t('Warning: "smbclient" is not installed.' - .' Mounting of CIFS/SMB shares is not possible.' - .' Please ask your system administrator to install it.').'
    '; + $txt.=$l->t('Warning: "smbclient" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it.').'
    '; } if(!OC_Mount_Config::checkphpftp()) { - $txt.=$l->t('Warning: The FTP support in PHP is not enabled or installed.' - .' Mounting of FTP shares is not possible.' - .' Please ask your system administrator to install it.').'
    '; + $txt.=$l->t('Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it.').'
    '; } return($txt); From b8e2454f68f745141ff4d302413f28e3f03e95e4 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Fri, 15 Feb 2013 16:10:06 +0100 Subject: [PATCH 261/719] Fix strict standard warning in user template --- core/templates/layout.user.php | 2 +- lib/template.php | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index 0d2a9f5d34..2d00bdb5c8 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -31,7 +31,7 @@

      - +
      diff --git a/lib/template.php b/lib/template.php index 0230d2f934..3df5a24f94 100644 --- a/lib/template.php +++ b/lib/template.php @@ -415,6 +415,8 @@ class OC_Template{ $page = new OC_TemplateLayout($this->renderas); if($this->renderas == 'user') { $page->assign('requesttoken', $this->vars['requesttoken']); + $user = OC_User::getUser(); + $page->assign('displayname', OCP\User::getDisplayName($user)); } // Add custom headers From c0f3d8578a48ceee1a45fda4077696643747fc45 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Fri, 15 Feb 2013 17:40:07 +0100 Subject: [PATCH 262/719] folder should be created :-( --- tests/lib/files/storage/mappedlocalwithdotteddatadir.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/lib/files/storage/mappedlocalwithdotteddatadir.php b/tests/lib/files/storage/mappedlocalwithdotteddatadir.php index abd0b3d85c..d2e5e2e97a 100644 --- a/tests/lib/files/storage/mappedlocalwithdotteddatadir.php +++ b/tests/lib/files/storage/mappedlocalwithdotteddatadir.php @@ -27,8 +27,10 @@ class MappedLocalWithDottedDataDir extends Storage { * @var string tmpDir */ private $tmpDir; + public function setUp() { $this->tmpDir = \OC_Helper::tmpFolder().'dir.123'.DIRECTORY_SEPARATOR; + mkdir($this->tmpDir); $this->instance=new \OC\Files\Storage\MappedLocal(array('datadir'=>$this->tmpDir)); } From 191da024fa312c6322c00073c6cf48dc8e282ed0 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Fri, 15 Feb 2013 17:40:52 +0100 Subject: [PATCH 263/719] new test cases added to search in sub folders --- tests/lib/files/storage/storage.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/lib/files/storage/storage.php b/tests/lib/files/storage/storage.php index c74a16f509..f78f66d8b8 100644 --- a/tests/lib/files/storage/storage.php +++ b/tests/lib/files/storage/storage.php @@ -223,6 +223,22 @@ abstract class Storage extends \PHPUnit_Framework_TestCase { $this->assertContains('/logo-wide.png', $result); } + public function testSearchInSubFolder() { + $this->instance->mkdir('sub') + ; + $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt'; + $this->instance->file_put_contents('/sub/lorem.txt', file_get_contents($textFile, 'r')); + $pngFile = \OC::$SERVERROOT . '/tests/data/logo-wide.png'; + $this->instance->file_put_contents('/sub/logo-wide.png', file_get_contents($pngFile, 'r')); + $svgFile = \OC::$SERVERROOT . '/tests/data/logo-wide.svg'; + $this->instance->file_put_contents('/sub/logo-wide.svg', file_get_contents($svgFile, 'r')); + + $result = $this->instance->search('logo'); + $this->assertEquals(2, count($result)); + $this->assertContains('/sub/logo-wide.svg', $result); + $this->assertContains('/sub/logo-wide.png', $result); + } + public function testFOpen() { $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt'; From b488800bd5665eaa11b54002509e9e8b85c0780e Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Fri, 15 Feb 2013 17:41:22 +0100 Subject: [PATCH 264/719] fix error in recursive search --- lib/files/storage/mappedlocal.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/files/storage/mappedlocal.php b/lib/files/storage/mappedlocal.php index e707f71d71..434c10bcbf 100644 --- a/lib/files/storage/mappedlocal.php +++ b/lib/files/storage/mappedlocal.php @@ -20,7 +20,7 @@ class MappedLocal extends \OC\Files\Storage\Common{ $this->datadir.='/'; } - $this->mapper= new \OC\Files\Mapper(); + $this->mapper= new \OC\Files\Mapper($this->datadir); } public function __destruct() { if (defined('PHPUNIT_RUN')) { @@ -274,7 +274,7 @@ class MappedLocal extends \OC\Files\Storage\Common{ return $this->buildPath($path); } - protected function searchInDir($query, $dir='', $isLogicPath=true) { + protected function searchInDir($query, $dir='') { $files=array(); $physicalDir = $this->buildPath($dir); foreach (scandir($physicalDir) as $item) { @@ -287,7 +287,7 @@ class MappedLocal extends \OC\Files\Storage\Common{ $files[]=$dir.'/'.$item; } if(is_dir($physicalItem)) { - $files=array_merge($files, $this->searchInDir($query, $physicalItem, false)); + $files=array_merge($files, $this->searchInDir($query, $dir.'/'.$item)); } } return $files; From 40739350c9b674551f0b218220054ec4f303f154 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Fri, 15 Feb 2013 17:42:17 +0100 Subject: [PATCH 265/719] class Mapper no respects an unchanged physical root which will be excluded from slugifying the path --- lib/files/mapper.php | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/files/mapper.php b/lib/files/mapper.php index cd163dcbfc..520fadbd8c 100644 --- a/lib/files/mapper.php +++ b/lib/files/mapper.php @@ -7,6 +7,12 @@ namespace OC\Files; */ class Mapper { + private $unchangedPhysicalRoot; + + public function __construct($rootDir) { + $this->unchangedPhysicalRoot = $rootDir; + } + /** * @param string $logicPath * @param bool $create indicates if the generated physical name shall be stored in the database or not @@ -23,7 +29,7 @@ class Mapper /** * @param string $physicalPath - * @return string|null + * @return string */ public function physicalToLogic($physicalPath) { $logicPath = $this->resolvePhysicalPath($physicalPath); @@ -39,6 +45,7 @@ class Mapper * @param string $path * @param bool $isLogicPath indicates if $path is logical or physical * @param $recursive + * @return void */ public function removePath($path, $isLogicPath, $recursive) { if ($recursive) { @@ -159,14 +166,11 @@ class Mapper } private function slugifyPath($path, $index=null) { + $path = $this->stripRootFolder($path, $this->unchangedPhysicalRoot); + $pathElements = explode('/', $path); $sluggedElements = array(); - // skip slugging the drive letter on windows - TODO: test if local path - if (\OC_Util::runningOnWindows()) { - $sluggedElements[]= $pathElements[0]; - array_shift($pathElements); - } foreach ($pathElements as $pathElement) { // remove empty elements if (empty($pathElement)) { @@ -186,12 +190,8 @@ class Mapper array_push($sluggedElements, $last.'-'.$index); } - // on non-windows systems add the leading / if necessary - if (!\OC_Util::runningOnWindows() and $path[0] === '/') { - return DIRECTORY_SEPARATOR.implode(DIRECTORY_SEPARATOR, $sluggedElements); - } - - return implode(DIRECTORY_SEPARATOR, $sluggedElements); + $sluggedPath = $this->unchangedPhysicalRoot.implode(DIRECTORY_SEPARATOR, $sluggedElements); + return $this->stripLast($sluggedPath); } /** From 953c87db9cb1f58e0c79152f6603272d198dd8a0 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Fri, 15 Feb 2013 18:37:52 +0100 Subject: [PATCH 266/719] fix erroneous CSS, remove obsolete selectors --- core/css/styles.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/css/styles.css b/core/css/styles.css index c2e1ad9208..8a01211d8b 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -258,8 +258,8 @@ fieldset.warning a { color:#b94a48 !important; font-weight:bold; } #expand:hover img, #expand:focus img, #expand:active img { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; } #expanddiv { position:absolute; right:0; top:45px; z-index:76; display:none; - background-color:#444; border-bottom-left-radius:7px; box-shadow: 0 0 20px rgb(29,45,68); - background:#383c43 url('../img/noise.png') repeat; border-bottom:1px #333 solid; border-left:border-bottom:1px #333 solid; + background:#383c43 url('../img/noise.png') repeat; + border-bottom-left-radius:7px; border-bottom:1px #333 solid; border-left:1px #333 solid; -moz-box-shadow:0 0 7px rgb(29,45,68); -webkit-box-shadow:0 0 7px rgb(29,45,68); box-shadow:0 0 7px rgb(29,45,68); } #expanddiv a { From 0c1ec758e89517acac8971f87e3c5796124e40ca Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Fri, 15 Feb 2013 21:49:40 +0100 Subject: [PATCH 267/719] Cache: hash long storage ids to ensure they fit in the database --- lib/files/cache/cache.php | 11 +++++++---- lib/files/mount.php | 6 ++++++ tests/lib/files/cache/cache.php | 15 +++++++++++++++ tests/lib/files/mount.php | 17 +++++++++++++++++ 4 files changed, 45 insertions(+), 4 deletions(-) diff --git a/lib/files/cache/cache.php b/lib/files/cache/cache.php index 5feed37ae4..3652dc7cf2 100644 --- a/lib/files/cache/cache.php +++ b/lib/files/cache/cache.php @@ -48,6 +48,9 @@ class Cache { } else { $this->storageId = $storage; } + if (strlen($this->storageId) > 64) { + $this->storageId = md5($this->storageId); + } $query = \OC_DB::prepare('SELECT `numeric_id` FROM `*PREFIX*storages` WHERE `id` = ?'); $result = $query->execute(array($this->storageId)); @@ -199,7 +202,7 @@ class Cache { $valuesPlaceholder = array_fill(0, count($queryParts), '?'); $query = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache`(' . implode(', ', $queryParts) . ')' - .' VALUES(' . implode(', ', $valuesPlaceholder) . ')'); + . ' VALUES(' . implode(', ', $valuesPlaceholder) . ')'); $query->execute($params); return (int)\OC_DB::insertid('*PREFIX*filecache'); @@ -217,7 +220,7 @@ class Cache { $params[] = $id; $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET ' . implode(' = ?, ', $queryParts) . '=?' - .' WHERE fileid = ?'); + . ' WHERE fileid = ?'); $query->execute($params); } @@ -335,7 +338,7 @@ class Cache { } $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ?, `parent` =?' - .' WHERE `fileid` = ?'); + . ' WHERE `fileid` = ?'); $query->execute(array($target, md5($target), $newParentId, $sourceId)); } @@ -496,7 +499,7 @@ class Cache { */ public function getIncomplete() { $query = \OC_DB::prepare('SELECT `path` FROM `*PREFIX*filecache`' - .' WHERE `storage` = ? AND `size` = -1 ORDER BY `fileid` DESC LIMIT 1'); + . ' WHERE `storage` = ? AND `size` = -1 ORDER BY `fileid` DESC LIMIT 1'); $query->execute(array($this->numericId)); if ($row = $query->fetchRow()) { return $row['path']; diff --git a/lib/files/mount.php b/lib/files/mount.php index 74ee483b1b..6e99d8eabb 100644 --- a/lib/files/mount.php +++ b/lib/files/mount.php @@ -93,6 +93,9 @@ class Mount { $this->storage = $this->createStorage(); } $this->storageId = $this->storage->getId(); + if (strlen($this->storageId) > 64) { + $this->storageId = md5($this->storageId); + } } return $this->storageId; } @@ -177,6 +180,9 @@ class Mount { * @return \OC\Files\Storage\Storage[] */ public static function findById($id) { + if (strlen($id) > 64) { + $id = md5($id); + } $result = array(); foreach (self::$mounts as $mount) { if ($mount->getStorageId() === $id) { diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php index c466fbb63e..250842805e 100644 --- a/tests/lib/files/cache/cache.php +++ b/tests/lib/files/cache/cache.php @@ -8,6 +8,12 @@ namespace Test\Files\Cache; +class LongId extends \OC\Files\Storage\Temporary { + public function getId() { + return 'long:' . str_repeat('foo', 50) . parent::getId(); + } +} + class Cache extends \PHPUnit_Framework_TestCase { /** * @var \OC\Files\Storage\Temporary $storage; @@ -204,6 +210,15 @@ class Cache extends \PHPUnit_Framework_TestCase { $this->assertEquals(array($storageId, 'foo'), \OC\Files\Cache\Cache::getById($id)); } + function testLongId() { + $storage = new LongId(array()); + $cache = $storage->getCache(); + $storageId = $storage->getId(); + $data = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file'); + $id = $cache->put('foo', $data); + $this->assertEquals(array(md5($storageId), 'foo'), \OC\Files\Cache\Cache::getById($id)); + } + public function tearDown() { $this->cache->clear(); } diff --git a/tests/lib/files/mount.php b/tests/lib/files/mount.php index f223f0f6c5..4e6aaf0679 100644 --- a/tests/lib/files/mount.php +++ b/tests/lib/files/mount.php @@ -10,6 +10,12 @@ namespace Test\Files; use \OC\Files\Storage\Temporary; +class LongId extends Temporary { + public function getId() { + return 'long:' . str_repeat('foo', 50) . parent::getId(); + } +} + class Mount extends \PHPUnit_Framework_TestCase { public function setup() { \OC_Util::setupFS(); @@ -38,4 +44,15 @@ class Mount extends \PHPUnit_Framework_TestCase { $mount2 = new \OC\Files\Mount($storage, '/foo/bar'); $this->assertEquals(array($mount, $mount2), \OC\Files\Mount::findById($id)); } + + public function testLong() { + $storage = new LongId(array()); + $mount = new \OC\Files\Mount($storage, '/foo'); + + $id = $mount->getStorageId(); + $storageId = $storage->getId(); + $this->assertEquals(array($mount), \OC\Files\Mount::findById($id)); + $this->assertEquals(array($mount), \OC\Files\Mount::findById($storageId)); + $this->assertEquals(array($mount), \OC\Files\Mount::findById(md5($storageId))); + } } From 83f0c8ce613eca5c384cec75c9657a95038cb90b Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sat, 16 Feb 2013 00:05:50 +0100 Subject: [PATCH 268/719] [tx-robot] updated from transifex --- apps/files/l10n/cs_CZ.php | 1 + apps/files/l10n/de_DE.php | 1 + apps/files/l10n/es_AR.php | 1 + apps/files/l10n/gl.php | 5 +- apps/files/l10n/it.php | 1 + apps/files/l10n/ja_JP.php | 1 + apps/files/l10n/lv.php | 1 + apps/files/l10n/pt_PT.php | 1 + apps/files/l10n/sk_SK.php | 1 + apps/files/l10n/vi.php | 1 + apps/user_ldap/l10n/gl.php | 33 ++++++++- core/l10n/gl.php | 7 ++ l10n/cs_CZ/files.po | 8 +-- l10n/de_DE/files.po | 11 +-- l10n/es_AR/files.po | 9 +-- l10n/es_AR/settings.po | 12 ++-- l10n/gl/core.po | 21 +++--- l10n/gl/files.po | 12 ++-- l10n/gl/lib.po | 102 ++++++++++++++-------------- l10n/gl/user_ldap.po | 71 +++++++++---------- l10n/it/files.po | 8 +-- l10n/ja_JP/files.po | 8 +-- l10n/lv/files.po | 8 +-- l10n/pt_PT/files.po | 8 +-- l10n/pt_PT/lib.po | 24 +++---- l10n/pt_PT/settings.po | 6 +- l10n/sk_SK/files.po | 8 +-- l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_trashbin.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/settings.pot | 4 +- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- l10n/vi/files.po | 8 +-- lib/l10n/gl.php | 22 +++++- lib/l10n/pt_PT.php | 11 ++- settings/l10n/es_AR.php | 2 + 42 files changed, 259 insertions(+), 178 deletions(-) diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php index 7376056e4c..7eebd649cd 100644 --- a/apps/files/l10n/cs_CZ.php +++ b/apps/files/l10n/cs_CZ.php @@ -60,6 +60,7 @@ "Text file" => "Textový soubor", "Folder" => "Složka", "From link" => "Z odkazu", +"Deleted files" => "Odstraněné soubory", "Cancel upload" => "Zrušit odesílání", "Nothing in here. Upload something!" => "Žádný obsah. Nahrajte něco.", "Download" => "Stáhnout", diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php index 0dfc19ff01..8d119afada 100644 --- a/apps/files/l10n/de_DE.php +++ b/apps/files/l10n/de_DE.php @@ -60,6 +60,7 @@ "Text file" => "Textdatei", "Folder" => "Ordner", "From link" => "Von einem Link", +"Deleted files" => "Gelöschte Dateien", "Cancel upload" => "Upload abbrechen", "Nothing in here. Upload something!" => "Alles leer. Bitte laden Sie etwas hoch!", "Download" => "Herunterladen", diff --git a/apps/files/l10n/es_AR.php b/apps/files/l10n/es_AR.php index 0dc423f96f..1e87eff9ba 100644 --- a/apps/files/l10n/es_AR.php +++ b/apps/files/l10n/es_AR.php @@ -60,6 +60,7 @@ "Text file" => "Archivo de texto", "Folder" => "Carpeta", "From link" => "Desde enlace", +"Deleted files" => "Archivos Borrados", "Cancel upload" => "Cancelar subida", "Nothing in here. Upload something!" => "No hay nada. ¡Subí contenido!", "Download" => "Descargar", diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php index 91896b8e39..202f2becd3 100644 --- a/apps/files/l10n/gl.php +++ b/apps/files/l10n/gl.php @@ -17,7 +17,7 @@ "Delete" => "Eliminar", "Rename" => "Renomear", "Pending" => "Pendentes", -"{new_name} already exists" => "xa existe un {new_name}", +"{new_name} already exists" => "Xa existe un {new_name}", "replace" => "substituír", "suggest name" => "suxerir nome", "cancel" => "cancelar", @@ -60,8 +60,9 @@ "Text file" => "Ficheiro de texto", "Folder" => "Cartafol", "From link" => "Desde a ligazón", +"Deleted files" => "Ficheiros eliminados", "Cancel upload" => "Cancelar o envío", -"Nothing in here. Upload something!" => "Aquí non hai nada por aquí. Envíe algo.", +"Nothing in here. Upload something!" => "Aquí non hai nada. Envíe algo.", "Download" => "Descargar", "Unshare" => "Deixar de compartir", "Upload too large" => "Envío demasiado grande", diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php index 583a0ca7f7..33a2fbda71 100644 --- a/apps/files/l10n/it.php +++ b/apps/files/l10n/it.php @@ -60,6 +60,7 @@ "Text file" => "File di testo", "Folder" => "Cartella", "From link" => "Da collegamento", +"Deleted files" => "File eliminati", "Cancel upload" => "Annulla invio", "Nothing in here. Upload something!" => "Non c'è niente qui. Carica qualcosa!", "Download" => "Scarica", diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php index 85ec6b6e95..8d1a95e243 100644 --- a/apps/files/l10n/ja_JP.php +++ b/apps/files/l10n/ja_JP.php @@ -60,6 +60,7 @@ "Text file" => "テキストファイル", "Folder" => "フォルダ", "From link" => "リンク", +"Deleted files" => "削除ファイル", "Cancel upload" => "アップロードをキャンセル", "Nothing in here. Upload something!" => "ここには何もありません。何かアップロードしてください。", "Download" => "ダウンロード", diff --git a/apps/files/l10n/lv.php b/apps/files/l10n/lv.php index 9d4d2c9fb6..30b1f4eccb 100644 --- a/apps/files/l10n/lv.php +++ b/apps/files/l10n/lv.php @@ -60,6 +60,7 @@ "Text file" => "Teksta datne", "Folder" => "Mape", "From link" => "No saites", +"Deleted files" => "Dzēstās datnes", "Cancel upload" => "Atcelt augšupielādi", "Nothing in here. Upload something!" => "Te vēl nekas nav. Rīkojies, sāc augšupielādēt!", "Download" => "Lejupielādēt", diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php index e036b3dacb..6f51cc6dea 100644 --- a/apps/files/l10n/pt_PT.php +++ b/apps/files/l10n/pt_PT.php @@ -60,6 +60,7 @@ "Text file" => "Ficheiro de texto", "Folder" => "Pasta", "From link" => "Da ligação", +"Deleted files" => "Ficheiros eliminados", "Cancel upload" => "Cancelar envio", "Nothing in here. Upload something!" => "Vazio. Envie alguma coisa!", "Download" => "Transferir", diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php index 8ece8140d8..f3634af6f2 100644 --- a/apps/files/l10n/sk_SK.php +++ b/apps/files/l10n/sk_SK.php @@ -60,6 +60,7 @@ "Text file" => "Textový súbor", "Folder" => "Priečinok", "From link" => "Z odkazu", +"Deleted files" => "Zmazané súbory", "Cancel upload" => "Zrušiť odosielanie", "Nothing in here. Upload something!" => "Žiadny súbor. Nahrajte niečo!", "Download" => "Stiahnuť", diff --git a/apps/files/l10n/vi.php b/apps/files/l10n/vi.php index b069246f01..2c97033154 100644 --- a/apps/files/l10n/vi.php +++ b/apps/files/l10n/vi.php @@ -60,6 +60,7 @@ "Text file" => "Tập tin văn bản", "Folder" => "Thư mục", "From link" => "Từ liên kết", +"Deleted files" => "File đã bị xóa", "Cancel upload" => "Hủy upload", "Nothing in here. Upload something!" => "Không có gì ở đây .Hãy tải lên một cái gì đó !", "Download" => "Tải xuống", diff --git a/apps/user_ldap/l10n/gl.php b/apps/user_ldap/l10n/gl.php index 36c1f7af11..2d07f3215e 100644 --- a/apps/user_ldap/l10n/gl.php +++ b/apps/user_ldap/l10n/gl.php @@ -1,9 +1,24 @@ "Non foi posíbel eliminar a configuración do servidor", +"The configuration is valid and the connection could be established!" => "A configuración é correcta e pode estabelecerse a conexión.", +"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "A configuración é correcta, mais a ligazón non. Comprobe a configuración do servidor e as credenciais.", +"The configuration is invalid. Please look in the ownCloud log for further details." => "A configuración non é correcta. Vexa o rexistro de ownCloud para máis detalles", "Deletion failed" => "Fallou o borrado", +"Take over settings from recent server configuration?" => "Tomar os recentes axustes de configuración do servidor?", +"Keep settings?" => "Manter os axustes?", +"Cannot add server configuration" => "Non é posíbel engadir a configuración do servidor", +"Connection test succeeded" => "A proba de conexión foi satisfactoria", +"Connection test failed" => "A proba de conexión fracasou", +"Do you really want to delete the current Server Configuration?" => "Confirma que quere eliminar a configuración actual do servidor?", +"Confirm Deletion" => "Confirmar a eliminación", "Warning: Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "Aviso: Os aplicativos user_ldap e user_webdavauth son incompatíbeis. Pode acontecer un comportamento estraño. Consulte co administrador do sistema para desactivar un deles.", +"Warning: The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "Aviso: O módulo PHP LDAP non está instalado, o servidor non funcionará. Consulte co administrador do sistema para instalalo.", +"Server configuration" => "Configuración do servidor", +"Add Server Configuration" => "Engadir a configuración do servidor", "Host" => "Servidor", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "Pode omitir o protocolo agás que precise de SSL. Nese caso comece con ldaps://", "Base DN" => "DN base", +"One Base DN per line" => "Un DN base por liña", "You can specify Base DN for users and groups in the Advanced tab" => "Pode especificar a DN base para usuarios e grupos na lapela de «Avanzado»", "User DN" => "DN do usuario", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "O DN do cliente do usuario co que hai que estabelecer unha conexión, p.ex uid=axente, dc=exemplo, dc=com. Para o acceso anónimo deixe o DN e o contrasinal baleiros.", @@ -18,20 +33,36 @@ "Group Filter" => "Filtro de grupo", "Defines the filter to apply, when retrieving groups." => "Define o filtro a aplicar cando se recompilan os grupos.", "without any placeholder, e.g. \"objectClass=posixGroup\"." => "sen ningunha marca de posición, como p.ex «objectClass=grupoPosix».", +"Connection Settings" => "Axustes da conexión", +"Configuration Active" => "Configuración activa", +"When unchecked, this configuration will be skipped." => "Se está sen marcar, omítese esta configuración.", "Port" => "Porto", +"Backup (Replica) Host" => "Servidor da copia de seguranza (Réplica)", +"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Indicar un servidor de copia de seguranza opcional. Debe ser unha réplica do servidor principal LDAP/AD.", +"Backup (Replica) Port" => "Porto da copia de seguranza (Réplica)", +"Disable Main Server" => "Desactivar o servidor principal", +"When switched on, ownCloud will only connect to the replica server." => "Cando está activado, ownCloud só se conectará ao servidor de réplica.", "Use TLS" => "Usar TLS", +"Do not use it additionally for LDAPS connections, it will fail." => "Non utilizalo ademais para conexións LDAPS xa que fallará.", "Case insensitve LDAP server (Windows)" => "Servidor LDAP que non distingue entre maiúsculas e minúsculas (Windows)", "Turn off SSL certificate validation." => "Desactiva a validación do certificado SSL.", -"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Se a conexión só funciona con esta opción importa o certificado SSL do servidor LDAP no seu servidor ownCloud.", +"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Se a conexión só funciona con esta opción importe o certificado SSL do servidor LDAP no seu servidor ownCloud.", "Not recommended, use for testing only." => "Non se recomenda. Só para probas.", "in seconds. A change empties the cache." => "en segundos. Calquera cambio baleira a caché.", +"Directory Settings" => "Axustes do directorio", "User Display Name Field" => "Campo de mostra do nome de usuario", "The LDAP attribute to use to generate the user`s ownCloud name." => "O atributo LDAP a empregar para xerar o nome de usuario de ownCloud.", "Base User Tree" => "Base da árbore de usuarios", +"One User Base DN per line" => "Un DN base de usuario por liña", +"User Search Attributes" => "Atributos de busca do usuario", +"Optional; one attribute per line" => "Opcional; un atributo por liña", "Group Display Name Field" => "Campo de mostra do nome de grupo", "The LDAP attribute to use to generate the groups`s ownCloud name." => "O atributo LDAP úsase para xerar os nomes dos grupos de ownCloud.", "Base Group Tree" => "Base da árbore de grupo", +"One Group Base DN per line" => "Un DN base de grupo por liña", +"Group Search Attributes" => "Atributos de busca do grupo", "Group-Member association" => "Asociación de grupos e membros", +"Special Attributes" => "Atributos especiais", "in bytes" => "en bytes", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Deixar baleiro para o nome de usuario (predeterminado). Noutro caso, especifique un atributo LDAP/AD.", "Help" => "Axuda" diff --git a/core/l10n/gl.php b/core/l10n/gl.php index 8fd9292ce6..194c28e7cf 100644 --- a/core/l10n/gl.php +++ b/core/l10n/gl.php @@ -5,6 +5,7 @@ "User %s shared the folder \"%s\" with you. It is available for download here: %s" => "O usuario %s compartiu o cartafol «%s» con vostede. Teno dispoñíbel en: %s", "Category type not provided." => "Non se indicou o tipo de categoría", "No category to add?" => "Sen categoría que engadir?", +"This category already exists: %s" => "Esta categoría xa existe: %s", "Object type not provided." => "Non se forneceu o tipo de obxecto.", "%s ID not provided." => "Non se forneceu o ID %s.", "Error adding %s to favorites." => "Produciuse un erro ao engadir %s aos favoritos.", @@ -52,6 +53,7 @@ "Error" => "Erro", "The app name is not specified." => "Non se especificou o nome do aplicativo.", "The required file {file} is not installed!" => "Non está instalado o ficheiro {file} que se precisa", +"Shared" => "Compartir", "Share" => "Compartir", "Error while sharing" => "Produciuse un erro ao compartir", "Error while unsharing" => "Produciuse un erro ao deixar de compartir", @@ -82,6 +84,8 @@ "Error setting expiration date" => "Produciuse un erro ao definir a data de caducidade", "Sending ..." => "Enviando...", "Email sent" => "Correo enviado", +"The update was unsuccessful. Please report this issue to the ownCloud community." => "A actualización non foi satisfactoria, informe deste problema á comunidade de ownCloud.", +"The update was successful. Redirecting you to ownCloud now." => "A actualización realizouse correctamente. Redirixíndoo agora á ownCloud.", "ownCloud password reset" => "Restabelecer o contrasinal de ownCloud", "Use the following link to reset your password: {link}" => "Usa a seguinte ligazón para restabelecer o contrasinal: {link}", "You will receive a link to reset your password via Email." => "Recibirá unha ligazón por correo para restabelecer o contrasinal", @@ -105,6 +109,8 @@ "Security Warning" => "Aviso de seguranza", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Non hai un xerador de números ao chou dispoñíbel. Active o engadido de OpenSSL para PHP.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sen un xerador seguro de números ao chou podería acontecer que predicindo as cadeas de texto de reinicio de contrasinais se afagan coa súa conta.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "O seu directorio de datos e os ficheiros probabelmente sexan accesíbeis desde a Internet xa que o ficheiro .htaccess non está a traballar.", +"For information how to properly configure your server, please see the documentation." => "Para obter información sobre como como configurar axeitadamente o seu servidor, vexa a documentación.", "Create an admin account" => "Crear unha contra de administrador", "Advanced" => "Avanzado", "Data folder" => "Cartafol de datos", @@ -124,6 +130,7 @@ "Lost your password?" => "Perdeu o contrasinal?", "remember" => "lembrar", "Log in" => "Conectar", +"Alternative Logins" => "Accesos alternativos", "prev" => "anterior", "next" => "seguinte", "Updating ownCloud to version %s, this may take a while." => "Actualizando ownCloud a versión %s, esto pode levar un anaco." diff --git a/l10n/cs_CZ/files.po b/l10n/cs_CZ/files.po index 3a948f28f9..6ce25474a9 100644 --- a/l10n/cs_CZ/files.po +++ b/l10n/cs_CZ/files.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-15 06:50+0000\n" +"Last-Translator: Tomáš Chvátal \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -277,7 +277,7 @@ msgstr "Z odkazu" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Odstraněné soubory" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/de_DE/files.po b/l10n/de_DE/files.po index c62ccc0247..f7896897c3 100644 --- a/l10n/de_DE/files.po +++ b/l10n/de_DE/files.po @@ -21,6 +21,7 @@ # , 2012. # Phi Lieb <>, 2012. # Phillip Schichtel , 2013. +# , 2013. # , 2013. # , 2013. # Susi <>, 2013. @@ -31,10 +32,10 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" -"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-15 10:50+0000\n" +"Last-Translator: robN \n" +"Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -298,7 +299,7 @@ msgstr "Von einem Link" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Gelöschte Dateien" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/es_AR/files.po b/l10n/es_AR/files.po index 116e75e86c..6421f04d5f 100644 --- a/l10n/es_AR/files.po +++ b/l10n/es_AR/files.po @@ -6,13 +6,14 @@ # Agustin Ferrario , 2012-2013. # CJTess , 2013. # , 2012-2013. +# Javier Victor Mariano Bruno , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:10+0000\n" +"Last-Translator: Javier Victor Mariano Bruno \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -277,7 +278,7 @@ msgstr "Desde enlace" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Archivos Borrados" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/es_AR/settings.po b/l10n/es_AR/settings.po index 63f5ab1289..87ad26cb9c 100644 --- a/l10n/es_AR/settings.po +++ b/l10n/es_AR/settings.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: deftoner \n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:10+0000\n" +"Last-Translator: Javier Victor Mariano Bruno \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -165,7 +165,7 @@ msgstr "Error creando usuario" msgid "A valid password must be provided" msgstr "Debe ingresar una contraseña válida" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "Castellano (Argentina)" @@ -251,7 +251,7 @@ msgstr "" msgid "" "Use systems cron service. Call the cron.php file in the owncloud folder via " "a system cronjob once a minute." -msgstr "" +msgstr "Usa el servicio de sistema cron. Llama al archivo cron.php en la carpeta de ownCloud a través del sistema cronjob cada un minuto." #: templates/admin.php:125 msgid "Sharing" @@ -306,7 +306,7 @@ msgstr "Forzar a los clientes conectar a ownCloud vía conexión encriptada" msgid "" "Please connect to this ownCloud instance via HTTPS to enable or disable the " "SSL enforcement." -msgstr "" +msgstr "Por favor conectese a este ownCloud vía HTTPS para habilitar o des-habilitar el forzado de SSL" #: templates/admin.php:192 msgid "Log" diff --git a/l10n/gl/core.po b/l10n/gl/core.po index 15c7556ce0..f67798a78e 100644 --- a/l10n/gl/core.po +++ b/l10n/gl/core.po @@ -4,15 +4,16 @@ # # Translators: # antiparvos , 2012. +# , 2013. # , 2012. # Xosé M. Lamas , 2012-2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:32+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-15 15:00+0000\n" +"Last-Translator: mbouzada \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -55,7 +56,7 @@ msgstr "Sen categoría que engadir?" #: ajax/vcategories/add.php:37 #, php-format msgid "This category already exists: %s" -msgstr "" +msgstr "Esta categoría xa existe: %s" #: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27 #: ajax/vcategories/favorites.php:24 @@ -256,7 +257,7 @@ msgstr "Non está instalado o ficheiro {file} que se precisa" #: js/share.js:29 js/share.js:43 js/share.js:90 msgid "Shared" -msgstr "" +msgstr "Compartir" #: js/share.js:93 msgid "Share" @@ -383,11 +384,11 @@ msgid "" "The update was unsuccessful. Please report this issue to the ownCloud " "community." -msgstr "" +msgstr "A actualización non foi satisfactoria, informe deste problema á comunidade de ownCloud." #: js/update.js:18 msgid "The update was successful. Redirecting you to ownCloud now." -msgstr "" +msgstr "A actualización realizouse correctamente. Redirixíndoo agora á ownCloud." #: lostpassword/controller.php:47 msgid "ownCloud password reset" @@ -490,14 +491,14 @@ msgstr "Sen un xerador seguro de números ao chou podería acontecer que predici msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "O seu directorio de datos e os ficheiros probabelmente sexan accesíbeis desde a Internet xa que o ficheiro .htaccess non está a traballar." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Para obter información sobre como como configurar axeitadamente o seu servidor, vexa a documentación." #: templates/installation.php:36 msgid "Create an admin account" @@ -580,7 +581,7 @@ msgstr "Conectar" #: templates/login.php:49 msgid "Alternative Logins" -msgstr "" +msgstr "Accesos alternativos" #: templates/part.pagenavi.php:3 msgid "prev" diff --git a/l10n/gl/files.po b/l10n/gl/files.po index e00e1c1134..5fb9fb14df 100644 --- a/l10n/gl/files.po +++ b/l10n/gl/files.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-15 14:31+0000\n" +"Last-Translator: mbouzada \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -100,7 +100,7 @@ msgstr "Pendentes" #: js/filelist.js:253 js/filelist.js:255 msgid "{new_name} already exists" -msgstr "xa existe un {new_name}" +msgstr "Xa existe un {new_name}" #: js/filelist.js:253 js/filelist.js:255 msgid "replace" @@ -277,7 +277,7 @@ msgstr "Desde a ligazón" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Ficheiros eliminados" #: templates/index.php:46 msgid "Cancel upload" @@ -285,7 +285,7 @@ msgstr "Cancelar o envío" #: templates/index.php:59 msgid "Nothing in here. Upload something!" -msgstr "Aquí non hai nada por aquí. Envíe algo." +msgstr "Aquí non hai nada. Envíe algo." #: templates/index.php:73 msgid "Download" diff --git a/l10n/gl/lib.po b/l10n/gl/lib.po index e41f414f4e..aa47bb8032 100644 --- a/l10n/gl/lib.po +++ b/l10n/gl/lib.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:33+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-15 15:40+0000\n" +"Last-Translator: mbouzada \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,27 +21,27 @@ msgstr "" "Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:339 +#: app.php:349 msgid "Help" msgstr "Axuda" -#: app.php:346 +#: app.php:362 msgid "Personal" msgstr "Persoal" -#: app.php:351 +#: app.php:373 msgid "Settings" msgstr "Configuracións" -#: app.php:356 +#: app.php:385 msgid "Users" msgstr "Usuarios" -#: app.php:363 +#: app.php:398 msgid "Apps" msgstr "Aplicativos" -#: app.php:365 +#: app.php:406 msgid "Admin" msgstr "Administración" @@ -51,17 +51,17 @@ msgstr "As descargas ZIP están desactivadas." #: files.php:203 msgid "Files need to be downloaded one by one." -msgstr "Os ficheiros necesitan seren descargados de un en un." +msgstr "Os ficheiros necesitan seren descargados dun en un." -#: files.php:203 files.php:228 +#: files.php:204 files.php:231 msgid "Back to Files" msgstr "Volver aos ficheiros" -#: files.php:227 +#: files.php:228 msgid "Selected files too large to generate zip file." msgstr "Os ficheiros seleccionados son demasiado grandes como para xerar un ficheiro zip." -#: helper.php:226 +#: helper.php:228 msgid "couldn't be determined" msgstr "non foi posíbel determinalo" @@ -91,97 +91,97 @@ msgstr "Imaxes" #: setup.php:34 msgid "Set an admin username." -msgstr "" +msgstr "Estabeleza un nome de usuario administrador" #: setup.php:37 msgid "Set an admin password." -msgstr "" +msgstr "Estabeleza un contrasinal de administrador" #: setup.php:40 msgid "Specify a data folder." -msgstr "" +msgstr "Especifique un cartafol de datos." #: setup.php:53 #, php-format msgid "%s enter the database username." -msgstr "" +msgstr "%s introduza o nome de usuario da base de datos" #: setup.php:56 #, php-format msgid "%s enter the database name." -msgstr "" +msgstr "%s introduza o nome da base de datos" #: setup.php:59 #, php-format msgid "%s you may not use dots in the database name" -msgstr "" +msgstr "%s non se poden empregar puntos na base de datos" #: setup.php:62 #, php-format msgid "%s set the database host." -msgstr "" +msgstr "%s estabeleza o servidor da base de datos" -#: setup.php:126 setup.php:291 setup.php:336 +#: setup.php:126 setup.php:294 setup.php:339 msgid "PostgreSQL username and/or password not valid" -msgstr "" +msgstr "Nome de usuario e/ou contrasinal PostgreSQL incorrecto" #: setup.php:127 setup.php:150 setup.php:204 msgid "You need to enter either an existing account or the administrator." -msgstr "" +msgstr "Deberá introducir unha conta existente ou o administrador." -#: setup.php:149 setup.php:423 setup.php:489 +#: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" -msgstr "" +msgstr "Nome de usuario e/ou contrasinal Oracle incorrecto" #: setup.php:203 msgid "MySQL username and/or password not valid" -msgstr "" +msgstr "Nome de usuario e/ou contrasinal MySQL incorrecto" -#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 -#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 -#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 -#: setup.php:579 +#: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 +#: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 +#: setup.php:545 setup.php:552 setup.php:561 setup.php:569 setup.php:578 +#: setup.php:584 #, php-format msgid "DB Error: \"%s\"" -msgstr "" +msgstr "Produciuse un erro na base de datos: «%s»" -#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 -#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 -#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 +#: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 +#: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" -msgstr "" +msgstr "A orde ofensiva foi: «%s»" -#: setup.php:270 +#: setup.php:273 #, php-format msgid "MySQL user '%s'@'localhost' exists already." -msgstr "" +msgstr "O usuario MySQL '%s'@'localhost' xa existe." -#: setup.php:271 +#: setup.php:274 msgid "Drop this user from MySQL" -msgstr "" +msgstr "Omitir este usuario de MySQL" -#: setup.php:276 +#: setup.php:279 #, php-format msgid "MySQL user '%s'@'%%' already exists" -msgstr "" +msgstr "O usuario MySQL «%s»@«%%» xa existe." -#: setup.php:277 +#: setup.php:280 msgid "Drop this user from MySQL." -msgstr "" +msgstr "Omitir este usuario de MySQL." -#: setup.php:548 setup.php:580 +#: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" -msgstr "" +msgstr "A orde ofensiva foi: «%s», nome: %s, contrasinal: %s" -#: setup.php:644 +#: setup.php:649 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "O seu servidor web non está aínda configurado adecuadamente para permitir a sincronización de ficheiros xa que semella que a interface WebDAV non está a funcionar." -#: setup.php:645 +#: setup.php:651 #, php-format msgid "Please double check the installation guides." msgstr "Volva comprobar as guías de instalación" @@ -238,16 +238,16 @@ msgstr "último ano" msgid "years ago" msgstr "anos atrás" -#: updater.php:75 +#: updater.php:78 #, php-format msgid "%s is available. Get more information" msgstr "%s está dispoñíbel. Obtéña máis información" -#: updater.php:77 +#: updater.php:81 msgid "up to date" -msgstr "ao día" +msgstr "actualizado" -#: updater.php:80 +#: updater.php:84 msgid "updates check is disabled" msgstr "a comprobación de actualizacións está desactivada" diff --git a/l10n/gl/user_ldap.po b/l10n/gl/user_ldap.po index 62e23bcad3..af16ecd286 100644 --- a/l10n/gl/user_ldap.po +++ b/l10n/gl/user_ldap.po @@ -3,15 +3,16 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# , 2013. # , 2012. # Miguel Branco, 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 12:47+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-15 20:40+0000\n" +"Last-Translator: mbouzada \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,23 +22,23 @@ msgstr "" #: ajax/deleteConfiguration.php:34 msgid "Failed to delete the server configuration" -msgstr "" +msgstr "Non foi posíbel eliminar a configuración do servidor" #: ajax/testConfiguration.php:35 msgid "The configuration is valid and the connection could be established!" -msgstr "" +msgstr "A configuración é correcta e pode estabelecerse a conexión." #: ajax/testConfiguration.php:37 msgid "" "The configuration is valid, but the Bind failed. Please check the server " "settings and credentials." -msgstr "" +msgstr "A configuración é correcta, mais a ligazón non. Comprobe a configuración do servidor e as credenciais." #: ajax/testConfiguration.php:40 msgid "" "The configuration is invalid. Please look in the ownCloud log for further " "details." -msgstr "" +msgstr "A configuración non é correcta. Vexa o rexistro de ownCloud para máis detalles" #: js/settings.js:66 msgid "Deletion failed" @@ -45,31 +46,31 @@ msgstr "Fallou o borrado" #: js/settings.js:82 msgid "Take over settings from recent server configuration?" -msgstr "" +msgstr "Tomar os recentes axustes de configuración do servidor?" #: js/settings.js:83 msgid "Keep settings?" -msgstr "" +msgstr "Manter os axustes?" #: js/settings.js:97 msgid "Cannot add server configuration" -msgstr "" +msgstr "Non é posíbel engadir a configuración do servidor" #: js/settings.js:121 msgid "Connection test succeeded" -msgstr "" +msgstr "A proba de conexión foi satisfactoria" #: js/settings.js:126 msgid "Connection test failed" -msgstr "" +msgstr "A proba de conexión fracasou" #: js/settings.js:136 msgid "Do you really want to delete the current Server Configuration?" -msgstr "" +msgstr "Confirma que quere eliminar a configuración actual do servidor?" #: js/settings.js:137 msgid "Confirm Deletion" -msgstr "" +msgstr "Confirmar a eliminación" #: templates/settings.php:8 msgid "" @@ -82,15 +83,15 @@ msgstr "Aviso: Os aplicativos user_ldap e user_webdavauth son incompatíb msgid "" "Warning: The PHP LDAP module is not installed, the backend will not " "work. Please ask your system administrator to install it." -msgstr "" +msgstr "Aviso: O módulo PHP LDAP non está instalado, o servidor non funcionará. Consulte co administrador do sistema para instalalo." #: templates/settings.php:15 msgid "Server configuration" -msgstr "" +msgstr "Configuración do servidor" #: templates/settings.php:17 msgid "Add Server Configuration" -msgstr "" +msgstr "Engadir a configuración do servidor" #: templates/settings.php:21 msgid "Host" @@ -107,7 +108,7 @@ msgstr "DN base" #: templates/settings.php:22 msgid "One Base DN per line" -msgstr "" +msgstr "Un DN base por liña" #: templates/settings.php:22 msgid "You can specify Base DN for users and groups in the Advanced tab" @@ -174,15 +175,15 @@ msgstr "sen ningunha marca de posición, como p.ex «objectClass=grupoPosix»." #: templates/settings.php:31 msgid "Connection Settings" -msgstr "" +msgstr "Axustes da conexión" #: templates/settings.php:33 msgid "Configuration Active" -msgstr "" +msgstr "Configuración activa" #: templates/settings.php:33 msgid "When unchecked, this configuration will be skipped." -msgstr "" +msgstr "Se está sen marcar, omítese esta configuración." #: templates/settings.php:34 msgid "Port" @@ -190,25 +191,25 @@ msgstr "Porto" #: templates/settings.php:35 msgid "Backup (Replica) Host" -msgstr "" +msgstr "Servidor da copia de seguranza (Réplica)" #: templates/settings.php:35 msgid "" "Give an optional backup host. It must be a replica of the main LDAP/AD " "server." -msgstr "" +msgstr "Indicar un servidor de copia de seguranza opcional. Debe ser unha réplica do servidor principal LDAP/AD." #: templates/settings.php:36 msgid "Backup (Replica) Port" -msgstr "" +msgstr "Porto da copia de seguranza (Réplica)" #: templates/settings.php:37 msgid "Disable Main Server" -msgstr "" +msgstr "Desactivar o servidor principal" #: templates/settings.php:37 msgid "When switched on, ownCloud will only connect to the replica server." -msgstr "" +msgstr "Cando está activado, ownCloud só se conectará ao servidor de réplica." #: templates/settings.php:38 msgid "Use TLS" @@ -216,7 +217,7 @@ msgstr "Usar TLS" #: templates/settings.php:38 msgid "Do not use it additionally for LDAPS connections, it will fail." -msgstr "" +msgstr "Non utilizalo ademais para conexións LDAPS xa que fallará." #: templates/settings.php:39 msgid "Case insensitve LDAP server (Windows)" @@ -230,7 +231,7 @@ msgstr "Desactiva a validación do certificado SSL." msgid "" "If connection only works with this option, import the LDAP server's SSL " "certificate in your ownCloud server." -msgstr "Se a conexión só funciona con esta opción importa o certificado SSL do servidor LDAP no seu servidor ownCloud." +msgstr "Se a conexión só funciona con esta opción importe o certificado SSL do servidor LDAP no seu servidor ownCloud." #: templates/settings.php:40 msgid "Not recommended, use for testing only." @@ -242,7 +243,7 @@ msgstr "en segundos. Calquera cambio baleira a caché." #: templates/settings.php:43 msgid "Directory Settings" -msgstr "" +msgstr "Axustes do directorio" #: templates/settings.php:45 msgid "User Display Name Field" @@ -258,15 +259,15 @@ msgstr "Base da árbore de usuarios" #: templates/settings.php:46 msgid "One User Base DN per line" -msgstr "" +msgstr "Un DN base de usuario por liña" #: templates/settings.php:47 msgid "User Search Attributes" -msgstr "" +msgstr "Atributos de busca do usuario" #: templates/settings.php:47 templates/settings.php:50 msgid "Optional; one attribute per line" -msgstr "" +msgstr "Opcional; un atributo por liña" #: templates/settings.php:48 msgid "Group Display Name Field" @@ -282,11 +283,11 @@ msgstr "Base da árbore de grupo" #: templates/settings.php:49 msgid "One Group Base DN per line" -msgstr "" +msgstr "Un DN base de grupo por liña" #: templates/settings.php:50 msgid "Group Search Attributes" -msgstr "" +msgstr "Atributos de busca do grupo" #: templates/settings.php:51 msgid "Group-Member association" @@ -294,7 +295,7 @@ msgstr "Asociación de grupos e membros" #: templates/settings.php:53 msgid "Special Attributes" -msgstr "" +msgstr "Atributos especiais" #: templates/settings.php:56 msgid "in bytes" diff --git a/l10n/it/files.po b/l10n/it/files.po index 1a3e8db783..001d45a4be 100644 --- a/l10n/it/files.po +++ b/l10n/it/files.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:30+0000\n" +"Last-Translator: Vincenzo Reale \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -278,7 +278,7 @@ msgstr "Da collegamento" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "File eliminati" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/ja_JP/files.po b/l10n/ja_JP/files.po index 21ebd3c48b..17180fdddc 100644 --- a/l10n/ja_JP/files.po +++ b/l10n/ja_JP/files.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-15 01:50+0000\n" +"Last-Translator: Daisuke Deguchi \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -279,7 +279,7 @@ msgstr "リンク" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "削除ファイル" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/lv/files.po b/l10n/lv/files.po index e17afcc185..e51491eec5 100644 --- a/l10n/lv/files.po +++ b/l10n/lv/files.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-15 13:00+0000\n" +"Last-Translator: Rūdolfs Mazurs \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -277,7 +277,7 @@ msgstr "No saites" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Dzēstās datnes" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/pt_PT/files.po b/l10n/pt_PT/files.po index 1e85d6184d..97c8051277 100644 --- a/l10n/pt_PT/files.po +++ b/l10n/pt_PT/files.po @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:10+0000\n" +"Last-Translator: Mouxy \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -282,7 +282,7 @@ msgstr "Da ligação" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Ficheiros eliminados" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/pt_PT/lib.po b/l10n/pt_PT/lib.po index 5aad6742ac..9d3cdd6e61 100644 --- a/l10n/pt_PT/lib.po +++ b/l10n/pt_PT/lib.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" -"PO-Revision-Date: 2013-02-14 23:06+0000\n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:10+0000\n" "Last-Translator: Mouxy \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" @@ -122,7 +122,7 @@ msgstr "%s defina o servidor da base de dados (geralmente localhost)" #: setup.php:126 setup.php:294 setup.php:339 msgid "PostgreSQL username and/or password not valid" -msgstr "Nome de utilizador/passwor do PostgreSQL inválido" +msgstr "Nome de utilizador/password do PostgreSQL inválido" #: setup.php:127 setup.php:150 setup.php:204 msgid "You need to enter either an existing account or the administrator." @@ -130,11 +130,11 @@ msgstr "Precisa de introduzir uma conta existente ou de administrador" #: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" -msgstr "" +msgstr "Nome de utilizador/password do Oracle inválida" #: setup.php:203 msgid "MySQL username and/or password not valid" -msgstr "" +msgstr "Nome de utilizador/password do MySQL inválida" #: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 #: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 @@ -142,37 +142,37 @@ msgstr "" #: setup.php:584 #, php-format msgid "DB Error: \"%s\"" -msgstr "" +msgstr "Erro na BD: \"%s\"" #: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 #: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 #: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" -msgstr "" +msgstr "O comando gerador de erro foi: \"%s\"" #: setup.php:273 #, php-format msgid "MySQL user '%s'@'localhost' exists already." -msgstr "" +msgstr "O utilizador '%s'@'localhost' do MySQL já existe." #: setup.php:274 msgid "Drop this user from MySQL" -msgstr "" +msgstr "Eliminar este utilizador do MySQL" #: setup.php:279 #, php-format msgid "MySQL user '%s'@'%%' already exists" -msgstr "" +msgstr "O utilizador '%s'@'%%' do MySQL já existe" #: setup.php:280 msgid "Drop this user from MySQL." -msgstr "" +msgstr "Eliminar este utilizador do MySQL" #: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" -msgstr "" +msgstr "O comando gerador de erro foi: \"%s\", nome: %s, password: %s" #: setup.php:649 msgid "" diff --git a/l10n/pt_PT/settings.po b/l10n/pt_PT/settings.po index e1dc13b05b..03a761e64f 100644 --- a/l10n/pt_PT/settings.po +++ b/l10n/pt_PT/settings.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" -"PO-Revision-Date: 2013-02-14 23:03+0000\n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-14 23:10+0000\n" "Last-Translator: Mouxy \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" @@ -169,7 +169,7 @@ msgstr "Erro a criar utilizador" msgid "A valid password must be provided" msgstr "Uma password válida deve ser fornecida" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "__language_name__" diff --git a/l10n/sk_SK/files.po b/l10n/sk_SK/files.po index 8893c32c43..a290cd58f6 100644 --- a/l10n/sk_SK/files.po +++ b/l10n/sk_SK/files.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-15 06:10+0000\n" +"Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -280,7 +280,7 @@ msgstr "Z odkazu" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Zmazané súbory" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index 0cc8a3019e..2822af0fa6 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index 078e0e4058..fd84b8854b 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index 6d0396470c..f3a9c41f44 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index db27055908..b1555b2cfe 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index 27454624e2..078d6a894d 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index dfb7649458..ca7dd1f208 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index bbfa7fc167..56ffebb83e 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 40dc2bee04..b1b060a1e2 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index afd2407497..1c27a1ae28 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -161,7 +161,7 @@ msgstr "" msgid "A valid password must be provided" msgstr "" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index 0a173656b5..29a637c80d 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index 0b84d4999f..59d943daf4 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/vi/files.po b/l10n/vi/files.po index d7eaa300bd..ec785055c6 100644 --- a/l10n/vi/files.po +++ b/l10n/vi/files.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"PO-Revision-Date: 2013-02-15 20:30+0000\n" +"Last-Translator: saosangm \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -279,7 +279,7 @@ msgstr "Từ liên kết" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "File đã bị xóa" #: templates/index.php:46 msgid "Cancel upload" diff --git a/lib/l10n/gl.php b/lib/l10n/gl.php index c49e8134af..9673bb65fc 100644 --- a/lib/l10n/gl.php +++ b/lib/l10n/gl.php @@ -6,7 +6,7 @@ "Apps" => "Aplicativos", "Admin" => "Administración", "ZIP download is turned off." => "As descargas ZIP están desactivadas.", -"Files need to be downloaded one by one." => "Os ficheiros necesitan seren descargados de un en un.", +"Files need to be downloaded one by one." => "Os ficheiros necesitan seren descargados dun en un.", "Back to Files" => "Volver aos ficheiros", "Selected files too large to generate zip file." => "Os ficheiros seleccionados son demasiado grandes como para xerar un ficheiro zip.", "couldn't be determined" => "non foi posíbel determinalo", @@ -16,6 +16,24 @@ "Files" => "Ficheiros", "Text" => "Texto", "Images" => "Imaxes", +"Set an admin username." => "Estabeleza un nome de usuario administrador", +"Set an admin password." => "Estabeleza un contrasinal de administrador", +"Specify a data folder." => "Especifique un cartafol de datos.", +"%s enter the database username." => "%s introduza o nome de usuario da base de datos", +"%s enter the database name." => "%s introduza o nome da base de datos", +"%s you may not use dots in the database name" => "%s non se poden empregar puntos na base de datos", +"%s set the database host." => "%s estabeleza o servidor da base de datos", +"PostgreSQL username and/or password not valid" => "Nome de usuario e/ou contrasinal PostgreSQL incorrecto", +"You need to enter either an existing account or the administrator." => "Deberá introducir unha conta existente ou o administrador.", +"Oracle username and/or password not valid" => "Nome de usuario e/ou contrasinal Oracle incorrecto", +"MySQL username and/or password not valid" => "Nome de usuario e/ou contrasinal MySQL incorrecto", +"DB Error: \"%s\"" => "Produciuse un erro na base de datos: «%s»", +"Offending command was: \"%s\"" => "A orde ofensiva foi: «%s»", +"MySQL user '%s'@'localhost' exists already." => "O usuario MySQL '%s'@'localhost' xa existe.", +"Drop this user from MySQL" => "Omitir este usuario de MySQL", +"MySQL user '%s'@'%%' already exists" => "O usuario MySQL «%s»@«%%» xa existe.", +"Drop this user from MySQL." => "Omitir este usuario de MySQL.", +"Offending command was: \"%s\", name: %s, password: %s" => "A orde ofensiva foi: «%s», nome: %s, contrasinal: %s", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "O seu servidor web non está aínda configurado adecuadamente para permitir a sincronización de ficheiros xa que semella que a interface WebDAV non está a funcionar.", "Please double check the installation guides." => "Volva comprobar as guías de instalación", "seconds ago" => "segundos atrás", @@ -31,7 +49,7 @@ "last year" => "último ano", "years ago" => "anos atrás", "%s is available. Get more information" => "%s está dispoñíbel. Obtéña máis información", -"up to date" => "ao día", +"up to date" => "actualizado", "updates check is disabled" => "a comprobación de actualizacións está desactivada", "Could not find category \"%s\"" => "Non foi posíbel atopar a categoría «%s»" ); diff --git a/lib/l10n/pt_PT.php b/lib/l10n/pt_PT.php index a3585f914d..9bdcfcc9ce 100644 --- a/lib/l10n/pt_PT.php +++ b/lib/l10n/pt_PT.php @@ -23,8 +23,17 @@ "%s enter the database name." => "%s introduza o nome da base de dados", "%s you may not use dots in the database name" => "%s não é permitido utilizar pontos (.) no nome da base de dados", "%s set the database host." => "%s defina o servidor da base de dados (geralmente localhost)", -"PostgreSQL username and/or password not valid" => "Nome de utilizador/passwor do PostgreSQL inválido", +"PostgreSQL username and/or password not valid" => "Nome de utilizador/password do PostgreSQL inválido", "You need to enter either an existing account or the administrator." => "Precisa de introduzir uma conta existente ou de administrador", +"Oracle username and/or password not valid" => "Nome de utilizador/password do Oracle inválida", +"MySQL username and/or password not valid" => "Nome de utilizador/password do MySQL inválida", +"DB Error: \"%s\"" => "Erro na BD: \"%s\"", +"Offending command was: \"%s\"" => "O comando gerador de erro foi: \"%s\"", +"MySQL user '%s'@'localhost' exists already." => "O utilizador '%s'@'localhost' do MySQL já existe.", +"Drop this user from MySQL" => "Eliminar este utilizador do MySQL", +"MySQL user '%s'@'%%' already exists" => "O utilizador '%s'@'%%' do MySQL já existe", +"Drop this user from MySQL." => "Eliminar este utilizador do MySQL", +"Offending command was: \"%s\", name: %s, password: %s" => "O comando gerador de erro foi: \"%s\", nome: %s, password: %s", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas.", "Please double check the installation guides." => "Por favor verifique installation guides.", "seconds ago" => "há alguns segundos", diff --git a/settings/l10n/es_AR.php b/settings/l10n/es_AR.php index d5e054a14d..1e122bdd45 100644 --- a/settings/l10n/es_AR.php +++ b/settings/l10n/es_AR.php @@ -47,6 +47,7 @@ "Internet connection not working" => "La conexión a Internet no esta funcionando. ", "Cron" => "Cron", "Execute one task with each page loaded" => "Ejecute una tarea con cada pagina cargada.", +"Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "Usa el servicio de sistema cron. Llama al archivo cron.php en la carpeta de ownCloud a través del sistema cronjob cada un minuto.", "Sharing" => "Compartiendo", "Enable Share API" => "Habilitar Share API", "Allow apps to use the Share API" => "Permitir a las aplicaciones usar la Share API", @@ -59,6 +60,7 @@ "Security" => "Seguridad", "Enforce HTTPS" => "Forzar HTTPS", "Enforces the clients to connect to ownCloud via an encrypted connection." => "Forzar a los clientes conectar a ownCloud vía conexión encriptada", +"Please connect to this ownCloud instance via HTTPS to enable or disable the SSL enforcement." => "Por favor conectese a este ownCloud vía HTTPS para habilitar o des-habilitar el forzado de SSL", "Log" => "Log", "Log level" => "Nivel de Log", "More" => "Más", From 46626915ef6888c958111b259ae6c0d3729b5198 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sat, 16 Feb 2013 01:30:44 +0100 Subject: [PATCH 269/719] Use a parser to read custom mount configuration instead of including the php files --- apps/files_external/lib/config.php | 3 +- lib/arrayparser.php | 189 +++++++++++++++++++++++++++++ lib/files/filesystem.php | 16 +-- 3 files changed, 200 insertions(+), 8 deletions(-) create mode 100644 lib/arrayparser.php diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 44e668a09c..6ef7f37f58 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -279,13 +279,14 @@ class OC_Mount_Config { * @return array */ private static function readData($isPersonal) { + $parser = new \OC\ArrayParser(); if ($isPersonal) { $file = OC_User::getHome(OCP\User::getUser()).'/mount.php'; } else { $file = OC::$SERVERROOT.'/config/mount.php'; } if (is_file($file)) { - $mountPoints = include $file; + $mountPoints = $parser->parsePHP(file_get_contents($file)); if (is_array($mountPoints)) { return $mountPoints; } diff --git a/lib/arrayparser.php b/lib/arrayparser.php new file mode 100644 index 0000000000..3bb394a516 --- /dev/null +++ b/lib/arrayparser.php @@ -0,0 +1,189 @@ +. + * + */ + +namespace OC; + +class SyntaxException extends \Exception { +} + +class ArrayParser { + const TYPE_NUM = 1; + const TYPE_BOOL = 2; + const TYPE_STRING = 3; + const TYPE_ARRAY = 4; + + function parsePHP($string) { + $string = $this->stripPHPTags($string); + $string = $this->stripAssignAndReturn($string); + return $this->parse($string); + } + + function stripPHPTags($string) { + $string = trim($string); + if (substr($string, 0, 5) === '') { + $string = substr($string, 0, -2); + } + return $string; + } + + function stripAssignAndReturn($string) { + $string = trim($string); + if (substr($string, 0, 6) === 'return') { + $string = substr($string, 6); + } + if (substr($string, 0, 1) === '$') { + list(, $string) = explode('=', $string, 2); + } + return $string; + } + + function parse($string) { + $string = trim($string); + $string = trim($string, ';'); + switch ($this->getType($string)) { + case self::TYPE_NUM: + return $this->parseNum($string); + case self::TYPE_BOOL: + return $this->parseBool($string); + case self::TYPE_STRING: + return $this->parseString($string); + case self::TYPE_ARRAY: + return $this->parseArray($string); + } + return null; + } + + function getType($string) { + $string = strtolower($string); + $first = substr($string, 0, 1); + $last = substr($string, -1, 1); + $arrayFirst = substr($string, 0, 5); + if (($first === '"' or $first === "'") and ($last === '"' or $last === "'")) { + return self::TYPE_STRING; + } elseif ($string === 'false' or $string === 'true') { + return self::TYPE_BOOL; + } elseif ($arrayFirst === 'array' and $last === ')') { + return self::TYPE_ARRAY; + } else { + return self::TYPE_NUM; + } + } + + function parseString($string) { + return substr($string, 1, -1); + } + + function parseNum($string) { + return intval($string); + } + + function parseBool($string) { + $string = strtolower($string); + return $string === 'true'; + } + + function parseArray($string) { + $body = substr($string, 5); + $body = trim($body); + $body = substr($body, 1, -1); + $items = $this->splitArray($body); + $result = array(); + $lastKey = -1; + foreach ($items as $item) { + $item = trim($item); + if ($item) { + if (strpos($item, '=>')) { + list($key, $value) = explode('=>', $item, 2); + $key = $this->parse($key); + $value = $this->parse($value); + } else { + $key = ++$lastKey; + $value = $item; + } + + if (is_numeric($key)) { + $lastKey = $key; + } + $result[$key] = $value; + } + } + return $result; + } + + function splitArray($body) { + $inSingleQuote = false;//keep track if we are inside quotes + $inDoubleQuote = false; + $bracketDepth = 0;//keep track if we are inside brackets + $parts = array(); + $start = 0; + $escaped = false;//keep track if we are after an escape character + $skips = array();//keep track of the escape characters we need to remove from the result + if (substr($body, -1, 1) !== ',') { + $body .= ','; + } + for ($i = 0; $i < strlen($body); $i++) { + $char = substr($body, $i, 1); + if ($char === '\\') { + if ($escaped) { + array_unshift($skips, $i - 1); + } + $escaped = !$escaped; + } else { + if ($char === '"' and !$inSingleQuote) { + if ($escaped) { + array_unshift($skips, $i - 1); + } else { + $inDoubleQuote = !$inDoubleQuote; + } + } elseif ($char === "'" and !$inDoubleQuote) { + if ($escaped) { + array_unshift($skips, $i - 1); + } else { + $inSingleQuote = !$inSingleQuote; + } + } elseif (!$inDoubleQuote and !$inSingleQuote) { + if ($char === '(') { + $bracketDepth++; + } elseif ($char === ')') { + if ($bracketDepth <= 0) { + throw new SyntaxException; + } else { + $bracketDepth--; + } + } elseif ($bracketDepth === 0 and $char === ',') { + $part = substr($body, $start, $i - $start); + foreach ($skips as $skip) { + $part = substr($part, 0, $skip - $start) . substr($part, $skip - $start + 1); + } + $parts[] = $part; + $start = $i + 1; + $skips = array(); + } + } + $escaped = false; + } + } + return $parts; + } +} diff --git a/lib/files/filesystem.php b/lib/files/filesystem.php index f453086807..89a9ab2921 100644 --- a/lib/files/filesystem.php +++ b/lib/files/filesystem.php @@ -215,9 +215,11 @@ class Filesystem { if ($user == '') { $user = \OC_User::getUser(); } + $parser = new \OC\ArrayParser(); + // Load system mount points if (is_file(\OC::$SERVERROOT . '/config/mount.php')) { - $mountConfig = include 'config/mount.php'; + $mountConfig = $parser->parsePHP(file_get_contents(\OC::$SERVERROOT . '/config/mount.php')); if (isset($mountConfig['global'])) { foreach ($mountConfig['global'] as $mountPoint => $options) { self::mount($options['class'], $options['options'], $mountPoint); @@ -254,7 +256,7 @@ class Filesystem { $root = \OC_User::getHome($user); self::mount('\OC\Files\Storage\Local', array('datadir' => $root), $user); if (is_file($root . '/mount.php')) { - $mountConfig = include $root . '/mount.php'; + $mountConfig = $parser->parsePHP(file_get_contents($root . '/mount.php')); if (isset($mountConfig['user'][$user])) { foreach ($mountConfig['user'][$user] as $mountPoint => $options) { self::mount($options['class'], $options['options'], $mountPoint); @@ -613,11 +615,11 @@ class Filesystem { } /** - * Get the owner for a file or folder - * - * @param string $path - * @return string - */ + * Get the owner for a file or folder + * + * @param string $path + * @return string + */ public static function getOwner($path) { return self::$defaultInstance->getOwner($path); } From 6da2c6c83e48fc3c7f8dd0814fe815d2b772f6eb Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sat, 16 Feb 2013 01:50:40 +0100 Subject: [PATCH 270/719] Create new mountconfig files in json --- apps/files_external/lib/config.php | 45 ++++++++++-------------------- lib/files/filesystem.php | 16 ++++++++--- 2 files changed, 26 insertions(+), 35 deletions(-) diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 6ef7f37f58..36ef48462a 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -281,12 +281,19 @@ class OC_Mount_Config { private static function readData($isPersonal) { $parser = new \OC\ArrayParser(); if ($isPersonal) { - $file = OC_User::getHome(OCP\User::getUser()).'/mount.php'; + $phpFile = OC_User::getHome(OCP\User::getUser()).'/mount.php'; + $jsonFile = OC_User::getHome(OCP\User::getUser()).'/mount.json'; } else { - $file = OC::$SERVERROOT.'/config/mount.php'; + $phpFile = OC::$SERVERROOT.'/config/mount.php'; + $jsonFile = OC::$SERVERROOT.'/config/mount.json'; } - if (is_file($file)) { - $mountPoints = $parser->parsePHP(file_get_contents($file)); + if (is_file($jsonFile)) { + $mountPoints = json_decode(file_get_contents($jsonFile), true); + if (is_array($mountPoints)) { + return $mountPoints; + } + } elseif (is_file($phpFile)) { + $mountPoints = $parser->parsePHP(file_get_contents($phpFile)); if (is_array($mountPoints)) { return $mountPoints; } @@ -301,35 +308,11 @@ class OC_Mount_Config { */ private static function writeData($isPersonal, $data) { if ($isPersonal) { - $file = OC_User::getHome(OCP\User::getUser()).'/mount.php'; + $file = OC_User::getHome(OCP\User::getUser()).'/mount.json'; } else { - $file = OC::$SERVERROOT.'/config/mount.php'; + $file = OC::$SERVERROOT.'/config/mount.json'; } - $content = " array (\n"; - foreach ($data[self::MOUNT_TYPE_GROUP] as $group => $mounts) { - $content .= "\t\t'".$group."' => array (\n"; - foreach ($mounts as $mountPoint => $mount) { - $content .= "\t\t\t'".addcslashes($mountPoint, "'")."' => ".str_replace("\n", '', var_export($mount, true)).", \n"; - - } - $content .= "\t\t),\n"; - } - $content .= "\t),\n"; - } - if (isset($data[self::MOUNT_TYPE_USER])) { - $content .= "\t'user' => array (\n"; - foreach ($data[self::MOUNT_TYPE_USER] as $user => $mounts) { - $content .= "\t\t'".$user."' => array (\n"; - foreach ($mounts as $mountPoint => $mount) { - $content .= "\t\t\t'".addcslashes($mountPoint, "'")."' => ".str_replace("\n", '', var_export($mount, true)).",\n"; - } - $content .= "\t\t),\n"; - } - $content .= "\t),\n"; - } - $content .= ");\n?>"; + $content = json_encode($data); @file_put_contents($file, $content); } diff --git a/lib/files/filesystem.php b/lib/files/filesystem.php index 89a9ab2921..cba469e06c 100644 --- a/lib/files/filesystem.php +++ b/lib/files/filesystem.php @@ -218,8 +218,12 @@ class Filesystem { $parser = new \OC\ArrayParser(); // Load system mount points - if (is_file(\OC::$SERVERROOT . '/config/mount.php')) { - $mountConfig = $parser->parsePHP(file_get_contents(\OC::$SERVERROOT . '/config/mount.php')); + if (is_file(\OC::$SERVERROOT . '/config/mount.php') or is_file(\OC::$SERVERROOT . '/config/mount.json')) { + if(is_file(\OC::$SERVERROOT . '/config/mount.json')){ + $mountConfig = json_decode(file_get_contents(\OC::$SERVERROOT . '/config/mount.json'), true); + }elseif(is_file(\OC::$SERVERROOT . '/config/mount.php')){ + $mountConfig = $parser->parsePHP(file_get_contents(\OC::$SERVERROOT . '/config/mount.php')); + } if (isset($mountConfig['global'])) { foreach ($mountConfig['global'] as $mountPoint => $options) { self::mount($options['class'], $options['options'], $mountPoint); @@ -255,8 +259,12 @@ class Filesystem { // Load personal mount points $root = \OC_User::getHome($user); self::mount('\OC\Files\Storage\Local', array('datadir' => $root), $user); - if (is_file($root . '/mount.php')) { - $mountConfig = $parser->parsePHP(file_get_contents($root . '/mount.php')); + if (is_file($root . '/mount.php') or is_file($root . '/mount.json')) { + if (is_file($root . '/mount.json')){ + $mountConfig = json_decode(file_get_contents($root . '/mount.json'), true); + } elseif (is_file($root . '/mount.php')){ + $mountConfig = $parser->parsePHP(file_get_contents($root . '/mount.php')); + } if (isset($mountConfig['user'][$user])) { foreach ($mountConfig['user'][$user] as $mountPoint => $options) { self::mount($options['class'], $options['options'], $mountPoint); From bef48bad8b83b2826d6eb3397e3f22e8d20ba5f3 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Sat, 16 Feb 2013 02:06:45 +0100 Subject: [PATCH 271/719] LDAP: announce that OC_USER_BACKEND_GET_DISPLAYNAME is implemented, fixes #1727 --- apps/user_ldap/user_ldap.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index 7778c37c79..50effd79c1 100644 --- a/apps/user_ldap/user_ldap.php +++ b/apps/user_ldap/user_ldap.php @@ -221,7 +221,7 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { $this->connection->ldapUserDisplayName); if($displayName && (count($displayName) > 0)) { - $this->connection->writeToCache($cacheKey, $displayName); + $this->connection->writeToCache($cacheKey, $displayName[0]); return $displayName[0]; } @@ -258,7 +258,10 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { * compared with OC_USER_BACKEND_CREATE_USER etc. */ public function implementsActions($actions) { - return (bool)((OC_USER_BACKEND_CHECK_PASSWORD | OC_USER_BACKEND_GET_HOME) & $actions); + return (bool)((OC_USER_BACKEND_CHECK_PASSWORD + | OC_USER_BACKEND_GET_HOME + | OC_USER_BACKEND_GET_DISPLAYNAME) + & $actions); } /** From a28df74ee593481e869a74e9a84e4e20aad293eb Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Sat, 16 Feb 2013 02:33:19 +0100 Subject: [PATCH 272/719] LDAP: check array with isset first to avoid warnings about undefined index --- apps/user_ldap/lib/connection.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/user_ldap/lib/connection.php b/apps/user_ldap/lib/connection.php index 0bf2efe35a..7ed3f3afe9 100644 --- a/apps/user_ldap/lib/connection.php +++ b/apps/user_ldap/lib/connection.php @@ -295,7 +295,8 @@ class Connection { foreach($config as $parameter => $value) { if(($parameter == 'homeFolderNamingRule' - || $params[$parameter] == 'homeFolderNamingRule') + || (isset($params[$parameter]) + && $params[$parameter] == 'homeFolderNamingRule')) && !empty($value)) { $value = 'attr:'.$value; } From d96146a017bd8f7e4573e4555cea2c198fa9fbad Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sat, 16 Feb 2013 03:27:50 +0100 Subject: [PATCH 273/719] Give storage backends the option to define having no known free space When this is the case only the configured max upload size is taking into account for uploading --- apps/files/ajax/upload.php | 2 +- apps/files_external/lib/amazons3.php | 5 ----- apps/files_external/lib/sftp.php | 4 ---- apps/files_external/lib/streamwrapper.php | 4 ---- apps/files_external/lib/swift.php | 4 ---- apps/files_external/lib/webdav.php | 2 +- lib/files/filesystem.php | 2 ++ lib/files/storage/common.php | 9 +++++++++ lib/helper.php | 8 ++++++-- 9 files changed, 19 insertions(+), 21 deletions(-) diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php index 07977f5ddf..9031c729ef 100644 --- a/apps/files/ajax/upload.php +++ b/apps/files/ajax/upload.php @@ -48,7 +48,7 @@ $totalSize = 0; foreach ($files['size'] as $size) { $totalSize += $size; } -if ($totalSize > \OC\Files\Filesystem::free_space($dir)) { +if ($totalSize > $maxUploadFilesize) { OCP\JSON::error(array('data' => array('message' => $l->t('Not enough storage available'), 'uploadMaxFilesize' => $maxUploadFilesize, 'maxHumanFilesize' => $maxHumanFilesize))); diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php index 494885a1dd..37e53a3a67 100644 --- a/apps/files_external/lib/amazons3.php +++ b/apps/files_external/lib/amazons3.php @@ -229,11 +229,6 @@ class AmazonS3 extends \OC\Files\Storage\Common { return false; } - public function free_space($path) { - // Infinite? - return false; - } - public function touch($path, $mtime = null) { if (is_null($mtime)) { $mtime = time(); diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index 551a5a64ef..77c08d3b73 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -241,10 +241,6 @@ class SFTP extends \OC\Files\Storage\Common { } } - public function free_space($path) { - return -1; - } - public function touch($path, $mtime=null) { try { if (!is_null($mtime)) return false; diff --git a/apps/files_external/lib/streamwrapper.php b/apps/files_external/lib/streamwrapper.php index a631e7ce06..4685877f26 100644 --- a/apps/files_external/lib/streamwrapper.php +++ b/apps/files_external/lib/streamwrapper.php @@ -76,10 +76,6 @@ abstract class StreamWrapper extends \OC\Files\Storage\Common{ return fopen($this->constructUrl($path), $mode); } - public function free_space($path) { - return 0; - } - public function touch($path, $mtime=null) { $this->init(); if(is_null($mtime)) { diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php index 0fd6fa143b..a00316c1f8 100644 --- a/apps/files_external/lib/swift.php +++ b/apps/files_external/lib/swift.php @@ -478,10 +478,6 @@ class SWIFT extends \OC\Files\Storage\Common{ } } - public function free_space($path) { - return 1024*1024*1024*8; - } - public function touch($path, $mtime=null) { $this->init(); $obj=$this->getObject($path); diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php index 039a07b1ef..91cc22779e 100644 --- a/apps/files_external/lib/webdav.php +++ b/apps/files_external/lib/webdav.php @@ -222,7 +222,7 @@ class DAV extends \OC\Files\Storage\Common{ return 0; } } catch(\Exception $e) { - return 0; + return \OC\Files\FREE_SPACE_UNKNOWN; } } diff --git a/lib/files/filesystem.php b/lib/files/filesystem.php index f453086807..0dafef836b 100644 --- a/lib/files/filesystem.php +++ b/lib/files/filesystem.php @@ -29,6 +29,8 @@ namespace OC\Files; +const FREE_SPACE_UNKNOWN = -2; + class Filesystem { public static $loaded = false; /** diff --git a/lib/files/storage/common.php b/lib/files/storage/common.php index 4cdabf1c8a..4e7a73e5d4 100644 --- a/lib/files/storage/common.php +++ b/lib/files/storage/common.php @@ -301,4 +301,13 @@ abstract class Common implements \OC\Files\Storage\Storage { } return implode('/', $output); } + + /** + * get the free space in the storage + * @param $path + * return int + */ + public function free_space($path){ + return \OC\Files\FREE_SPACE_UNKNOWN; + } } diff --git a/lib/helper.php b/lib/helper.php index 0f810ffc0c..add5c66e7b 100644 --- a/lib/helper.php +++ b/lib/helper.php @@ -762,9 +762,13 @@ class OC_Helper { $maxUploadFilesize = min($upload_max_filesize, $post_max_size); $freeSpace = \OC\Files\Filesystem::free_space($dir); - $freeSpace = max($freeSpace, 0); + if($freeSpace !== \OC\Files\FREE_SPACE_UNKNOWN){ + $freeSpace = max($freeSpace, 0); - return min($maxUploadFilesize, $freeSpace); + return min($maxUploadFilesize, $freeSpace); + } else { + return $maxUploadFilesize; + } } /** From e1700c28fa879afe6bc63a91e3f426fb4bb5b7b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Sat, 16 Feb 2013 12:10:54 +0100 Subject: [PATCH 274/719] pretty print json --- apps/files_external/lib/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 36ef48462a..81c01eb3d0 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -312,7 +312,7 @@ class OC_Mount_Config { } else { $file = OC::$SERVERROOT.'/config/mount.json'; } - $content = json_encode($data); + $content = json_encode($data, JSON_PRETTY_PRINTy print json); @file_put_contents($file, $content); } From cad65915a7c5b8df10ebbe27064a8012b9a79e74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Sat, 16 Feb 2013 12:55:36 +0100 Subject: [PATCH 275/719] look where you are typing ... --- apps/files_external/lib/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 81c01eb3d0..e49d52ebc7 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -312,7 +312,7 @@ class OC_Mount_Config { } else { $file = OC::$SERVERROOT.'/config/mount.json'; } - $content = json_encode($data, JSON_PRETTY_PRINTy print json); + $content = json_encode($data, JSON_PRETTY_PRINT); @file_put_contents($file, $content); } From 4708d4549d5574e39dfd18c722941b5512cabc89 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Sat, 16 Feb 2013 13:28:49 +0100 Subject: [PATCH 276/719] Add missing requesttoken This is a trivial fix for a regression caused by #1648 --- apps/files_external/templates/settings.php | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index df8d7d6e2b..d7a4dd5150 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -149,6 +149,7 @@
    From b44c18d1640f4ac395eecbad5a33dcb9af1d4038 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sun, 10 Feb 2013 11:39:03 +0100 Subject: [PATCH 111/719] Don't run external storage tests on default --- apps/files_external/tests/config.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/files_external/tests/config.php b/apps/files_external/tests/config.php index 65127175ad..ff16b1c1d8 100644 --- a/apps/files_external/tests/config.php +++ b/apps/files_external/tests/config.php @@ -8,7 +8,7 @@ return array( 'root'=>'/test', ), 'webdav'=>array( - 'run'=>true, + 'run'=>false, 'host'=>'localhost', 'user'=>'test', 'password'=>'test', @@ -30,7 +30,7 @@ return array( 'root'=>'/', ), 'smb'=>array( - 'run'=>true, + 'run'=>false, 'user'=>'test', 'password'=>'test', 'host'=>'localhost', From 0c05244f8bdc083f54b01cbde05c3df7bd97e618 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sun, 10 Feb 2013 11:49:37 +0100 Subject: [PATCH 112/719] Mapper: use md5 hashes for database indexes indexing the full path exeeds the maximum index length for MySQL --- db_structure.xml | 20 ++++++++++++++++++-- lib/files/mapper.php | 12 ++++++------ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/db_structure.xml b/db_structure.xml index fc7f1082ff..f353ae0809 100644 --- a/db_structure.xml +++ b/db_structure.xml @@ -108,6 +108,14 @@ 512 + + logic_path_hash + text + + true + 32 + + physic_path text @@ -116,11 +124,19 @@ 512 + + physic_path_hash + text + + true + 32 + + file_map_lp_index true - logic_path + logic_path_hash ascending @@ -129,7 +145,7 @@ file_map_pp_index true - physic_path + physic_path_hash ascending diff --git a/lib/files/mapper.php b/lib/files/mapper.php index 90e4e1ca66..71b665e49b 100644 --- a/lib/files/mapper.php +++ b/lib/files/mapper.php @@ -114,8 +114,8 @@ class Mapper private function resolveLogicPath($logicPath) { $logicPath = $this->stripLast($logicPath); - $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `logic_path` = ?'); - $result = $query->execute(array($logicPath)); + $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `logic_path_hash` = ?'); + $result = $query->execute(array(md5($logicPath))); $result = $result->fetchRow(); return $result['physic_path']; @@ -123,8 +123,8 @@ class Mapper private function resolvePhysicalPath($physicalPath) { $physicalPath = $this->stripLast($physicalPath); - $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `physic_path` = ?'); - $result = $query->execute(array($physicalPath)); + $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `physic_path_hash` = ?'); + $result = $query->execute(array(md5($physicalPath))); $result = $result->fetchRow(); return $result['logic_path']; @@ -151,8 +151,8 @@ class Mapper } private function insert($logicPath, $physicalPath) { - $query = \OC_DB::prepare('INSERT INTO `*PREFIX*file_map`(`logic_path`,`physic_path`) VALUES(?,?)'); - $query->execute(array($logicPath, $physicalPath)); + $query = \OC_DB::prepare('INSERT INTO `*PREFIX*file_map`(`logic_path`, `physic_path`, `logic_path_hash`, `physic_path_hash`) VALUES(?, ?, ?, ?)'); + $query->execute(array($logicPath, $physicalPath, md5($logicPath), md5($physicalPath))); } private function slugifyPath($path, $index=null) { From 266ba2806d9b72ec675b71fb939483b40f77cf00 Mon Sep 17 00:00:00 2001 From: Tom Needham Date: Sun, 10 Feb 2013 12:35:39 +0100 Subject: [PATCH 113/719] Remove debug call, correct app identifier --- apps/files_versions/appinfo/routes.php | 2 +- lib/api.php | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/files_versions/appinfo/routes.php b/apps/files_versions/appinfo/routes.php index 3793e25173..8cef57c9e4 100644 --- a/apps/files_versions/appinfo/routes.php +++ b/apps/files_versions/appinfo/routes.php @@ -6,4 +6,4 @@ */ // Register with the capabilities API -OC_API::register('get', '/cloud/capabilities', array('OCA\Files_Versions\Capabilities', 'getCapabilities'), 'ocs', OC_API::USER_AUTH); \ No newline at end of file +OC_API::register('get', '/cloud/capabilities', array('OCA\Files_Versions\Capabilities', 'getCapabilities'), 'files_versions', OC_API::USER_AUTH); \ No newline at end of file diff --git a/lib/api.php b/lib/api.php index d50882b119..8fa4d764ab 100644 --- a/lib/api.php +++ b/lib/api.php @@ -117,7 +117,6 @@ class OC_API { 'response' => call_user_func($action['action'], $parameters), ); } - $response = self::mergeResponses($responses); $formats = array('json', 'xml'); $format = !empty($_GET['format']) && in_array($_GET['format'], $formats) ? $_GET['format'] : 'xml'; @@ -249,7 +248,6 @@ class OC_API { */ private static function respond($result, $format='xml') { // Send 401 headers if unauthorised - die(var_dump($result)); if($result->getStatusCode() === self::RESPOND_UNAUTHORISED) { header('WWW-Authenticate: Basic realm="Authorisation Required"'); header('HTTP/1.0 401 Unauthorized'); From 1df8a5a774ae5d665849daf74540d967826d5e11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Kj=C3=B6lhede?= Date: Sun, 10 Feb 2013 12:35:49 +0100 Subject: [PATCH 114/719] Updated phpseclib from git + requested style changes --- .../3rdparty/phpseclib/README.md | 1 + .../phpseclib/phpseclib/Crypt/AES.php | 613 ++++++++++++++---- .../phpseclib/phpseclib/Crypt/DES.php | 381 ++++++----- .../phpseclib/phpseclib/Crypt/RC4.php | 50 +- .../phpseclib/phpseclib/Crypt/RSA.php | 68 +- .../phpseclib/phpseclib/Crypt/Random.php | 4 +- .../phpseclib/phpseclib/Crypt/Rijndael.php | 317 +++++---- .../phpseclib/phpseclib/Crypt/TripleDES.php | 239 +++---- .../phpseclib/phpseclib/File/ANSI.php | 20 +- .../phpseclib/phpseclib/File/ASN1.php | 24 +- .../phpseclib/phpseclib/File/X509.php | 32 +- .../phpseclib/phpseclib/Math/BigInteger.php | 2 +- .../3rdparty/phpseclib/phpseclib/Net/SFTP.php | 42 +- .../3rdparty/phpseclib/phpseclib/Net/SSH1.php | 298 ++++++--- .../3rdparty/phpseclib/phpseclib/Net/SSH2.php | 170 ++--- apps/files_external/lib/sftp.php | 43 +- apps/files_external/tests/sftp.php | 43 ++ 17 files changed, 1432 insertions(+), 915 deletions(-) create mode 100644 apps/files_external/tests/sftp.php diff --git a/apps/files_external/3rdparty/phpseclib/README.md b/apps/files_external/3rdparty/phpseclib/README.md index 4e1330e896..fbd58bd82b 100644 --- a/apps/files_external/3rdparty/phpseclib/README.md +++ b/apps/files_external/3rdparty/phpseclib/README.md @@ -10,6 +10,7 @@ AES, SSH-1, SSH-2, SFTP, and X.509 * [Browse Git](https://github.com/phpseclib/phpseclib) * [Documentation](http://phpseclib.sourceforge.net/) * [Support](http://www.frostjedi.com/phpbb/viewforum.php?f=46) +* [Code Coverage Report](http://phpseclib.bantux.org/code_coverage/latest/) PEAR Channel PEAR Channel: [phpseclib.sourceforge.net](http://phpseclib.sourceforge.net/pear.htm) diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/AES.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/AES.php index 74383cce8a..bc05adf67a 100644 --- a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/AES.php +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/AES.php @@ -166,6 +166,58 @@ class Crypt_AES extends Crypt_Rijndael { */ var $ecb; + /** + * The SubByte S-Box + * + * @see Crypt_AES::_encryptBlock() + * @var Array + * @access intern + */ + var $sbox = array( + 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, + 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, + 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, + 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, + 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, + 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, + 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, + 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, + 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, + 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, + 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, + 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, + 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, + 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, + 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, + 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 + ); + + /** + * The inverse SubByte S-Box + * + * @see Crypt_AES::_decryptBlock() + * @var Array + * @access intern + */ + var $isbox = array( + 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, + 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, + 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, + 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, + 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, + 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, + 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, + 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, + 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, + 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, + 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, + 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, + 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, + 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, + 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D + ); + /** * Default Constructor. * @@ -214,8 +266,6 @@ class Crypt_AES extends Crypt_Rijndael { $this->mode = MCRYPT_MODE_CBC; } - $this->debuffer = $this->enbuffer = ''; - break; default: switch ($mode) { @@ -244,6 +294,36 @@ class Crypt_AES extends Crypt_Rijndael { } } + /** + * Extended Crypt_Rijndael::_setup() + * + * Optimizing the key schedule arrays ($w, $dw) for _encryptBlock() and _decryptBlock() after Crypt_Rijndael::_setup() + * + * @see Crypt_Rijndael::_setup() + * @access private + */ + function _setup() + { + if (!$this->changed) { + return; + } + + $this->w = $this->dw = array(); + parent::_setup(); + + $this->dw = array_reverse($this->dw); + $w = array_pop($this->w); + $dw = array_pop($this->dw); + foreach ($this->w as $r => $wr) { + foreach ($wr as $c => $wc) { + $w[] = $wc; + $dw[] = $this->dw[$r][$c]; + } + } + $this->w = $w; + $this->dw = $dw; + } + /** * Dummy function * @@ -257,7 +337,6 @@ class Crypt_AES extends Crypt_Rijndael { return; } - /** * Sets the initialization vector. (optional) * @@ -295,51 +374,58 @@ class Crypt_AES extends Crypt_Rijndael { function encrypt($plaintext) { if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) { - $changed = $this->changed; $this->_mcryptSetup(); - /* - if ($this->mode == CRYPT_AES_MODE_CTR) { - $iv = $this->encryptIV; - $xor = mcrypt_generic($this->enmcrypt, $this->_generate_xor(strlen($plaintext), $iv)); - $ciphertext = $plaintext ^ $xor; - if ($this->continuousBuffer) { - $this->encryptIV = $iv; - } - return $ciphertext; - } - */ + // re: http://phpseclib.sourceforge.net/cfb-demo.phps // using mcrypt's default handing of CFB the above would output two different things. using phpseclib's // rewritten CFB implementation the above outputs the same thing twice. - if ($this->mode == 'ncfb') { - if ($changed) { - $this->ecb = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, ''); - mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); + if ($this->mode == 'ncfb' && $this->continuousBuffer) { + $iv = &$this->encryptIV; + $pos = &$this->enbuffer['pos']; + $len = strlen($plaintext); + $ciphertext = ''; + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = 16 - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; + } + $ciphertext = substr($iv, $orig_pos) ^ $plaintext; + $iv = substr_replace($iv, $ciphertext, $orig_pos, $i); + $this->enbuffer['enmcrypt_init'] = true; + } + if ($len >= 16) { + if ($this->enbuffer['enmcrypt_init'] === false || $len > 280) { + if ($this->enbuffer['enmcrypt_init'] === true) { + mcrypt_generic_init($this->enmcrypt, $this->key, $iv); + $this->enbuffer['enmcrypt_init'] = false; + } + $ciphertext.= mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % 16)); + $iv = substr($ciphertext, -16); + $len%= 16; + } else { + while ($len >= 16) { + $iv = mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, 16); + $ciphertext.= $iv; + $len-= 16; + $i+= 16; + } + } } - if (strlen($this->enbuffer)) { - $ciphertext = $plaintext ^ substr($this->encryptIV, strlen($this->enbuffer)); - $this->enbuffer.= $ciphertext; - if (strlen($this->enbuffer) == 16) { - $this->encryptIV = $this->enbuffer; - $this->enbuffer = ''; - mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV); - } - $plaintext = substr($plaintext, strlen($ciphertext)); - } else { - $ciphertext = ''; - } - - $last_pos = strlen($plaintext) & 0xFFFFFFF0; - $ciphertext.= $last_pos ? mcrypt_generic($this->enmcrypt, substr($plaintext, 0, $last_pos)) : ''; - - if (strlen($plaintext) & 0xF) { - if (strlen($ciphertext)) { - $this->encryptIV = substr($ciphertext, -16); - } - $this->encryptIV = mcrypt_generic($this->ecb, $this->encryptIV); - $this->enbuffer = substr($plaintext, $last_pos) ^ $this->encryptIV; - $ciphertext.= $this->enbuffer; + if ($len) { + $iv = mcrypt_generic($this->ecb, $iv); + $block = $iv ^ substr($plaintext, -$len); + $iv = substr_replace($iv, $block, 0, $len); + $ciphertext.= $block; + $pos = $len; } return $ciphertext; @@ -373,49 +459,41 @@ class Crypt_AES extends Crypt_Rijndael { function decrypt($ciphertext) { if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) { - $changed = $this->changed; $this->_mcryptSetup(); - /* - if ($this->mode == CRYPT_AES_MODE_CTR) { - $iv = $this->decryptIV; - $xor = mcrypt_generic($this->enmcrypt, $this->_generate_xor(strlen($ciphertext), $iv)); - $plaintext = $ciphertext ^ $xor; - if ($this->continuousBuffer) { - $this->decryptIV = $iv; - } - return $plaintext; - } - */ - if ($this->mode == 'ncfb') { - if ($changed) { - $this->ecb = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, ''); - mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); - } - if (strlen($this->debuffer)) { - $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($this->debuffer)); - - $this->debuffer.= substr($ciphertext, 0, strlen($plaintext)); - if (strlen($this->debuffer) == 16) { - $this->decryptIV = $this->debuffer; - $this->debuffer = ''; - mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV); + if ($this->mode == 'ncfb' && $this->continuousBuffer) { + $iv = &$this->decryptIV; + $pos = &$this->debuffer['pos']; + $len = strlen($ciphertext); + $plaintext = ''; + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = 16 - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; } - $ciphertext = substr($ciphertext, strlen($plaintext)); - } else { - $plaintext = ''; + // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize + $plaintext = substr($iv, $orig_pos) ^ $ciphertext; + $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i); } - - $last_pos = strlen($ciphertext) & 0xFFFFFFF0; - $plaintext.= $last_pos ? mdecrypt_generic($this->demcrypt, substr($ciphertext, 0, $last_pos)) : ''; - - if (strlen($ciphertext) & 0xF) { - if (strlen($plaintext)) { - $this->decryptIV = substr($ciphertext, $last_pos - 16, 16); - } - $this->decryptIV = mcrypt_generic($this->ecb, $this->decryptIV); - $this->debuffer = substr($ciphertext, $last_pos); - $plaintext.= $this->debuffer ^ $this->decryptIV; + if ($len >= 16) { + $cb = substr($ciphertext, $i, $len - $len % 16); + $plaintext.= mcrypt_generic($this->ecb, $iv . $cb) ^ $cb; + $iv = substr($cb, -16); + $len%= 16; + } + if ($len) { + $iv = mcrypt_generic($this->ecb, $iv); + $plaintext.= $iv ^ substr($ciphertext, -$len); + $iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len); + $pos = $len; } return $plaintext; @@ -486,11 +564,20 @@ class Crypt_AES extends Crypt_Rijndael { $this->demcrypt = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', $mode, ''); $this->enmcrypt = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', $mode, ''); + + if ($mode == 'ncfb') { + $this->ecb = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, ''); + } + } // else should mcrypt_generic_deinit be called? mcrypt_generic_init($this->demcrypt, $this->key, $this->iv); mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv); + if ($this->mode == 'ncfb') { + mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); + } + $this->changed = false; } @@ -506,53 +593,154 @@ class Crypt_AES extends Crypt_Rijndael { */ function _encryptBlock($in) { - $state = unpack('N*word', $in); + $state = unpack('N*', $in); - $Nr = $this->Nr; - $w = $this->w; + $sbox = $this->sbox; + $w = $this->w; $t0 = $this->t0; $t1 = $this->t1; $t2 = $this->t2; $t3 = $this->t3; - // addRoundKey and reindex $state - $state = array( - $state['word1'] ^ $w[0][0], - $state['word2'] ^ $w[0][1], - $state['word3'] ^ $w[0][2], - $state['word4'] ^ $w[0][3] - ); + // addRoundKey + $s0 = $state[1] ^ $w[4]; + $s1 = $state[2] ^ $w[5]; + $s2 = $state[3] ^ $w[6]; + $s3 = $state[4] ^ $w[7]; // shiftRows + subWord + mixColumns + addRoundKey - // we could loop unroll this and use if statements to do more rounds as necessary, but, in my tests, that yields - // only a marginal improvement. since that also, imho, hinders the readability of the code, i've opted not to do it. - for ($round = 1; $round < $this->Nr; $round++) { - $state = array( - $t0[$state[0] & 0xFF000000] ^ $t1[$state[1] & 0x00FF0000] ^ $t2[$state[2] & 0x0000FF00] ^ $t3[$state[3] & 0x000000FF] ^ $w[$round][0], - $t0[$state[1] & 0xFF000000] ^ $t1[$state[2] & 0x00FF0000] ^ $t2[$state[3] & 0x0000FF00] ^ $t3[$state[0] & 0x000000FF] ^ $w[$round][1], - $t0[$state[2] & 0xFF000000] ^ $t1[$state[3] & 0x00FF0000] ^ $t2[$state[0] & 0x0000FF00] ^ $t3[$state[1] & 0x000000FF] ^ $w[$round][2], - $t0[$state[3] & 0xFF000000] ^ $t1[$state[0] & 0x00FF0000] ^ $t2[$state[1] & 0x0000FF00] ^ $t3[$state[2] & 0x000000FF] ^ $w[$round][3] - ); + $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[8]; + $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[9]; + $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[10]; + $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[11]; + $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[12]; + $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[13]; + $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[14]; + $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[15]; + + $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[16]; + $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[17]; + $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[18]; + $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[19]; + + $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[20]; + $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[21]; + $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[22]; + $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[23]; + + $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[24]; + $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[25]; + $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[26]; + $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[27]; + + $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[28]; + $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[29]; + $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[30]; + $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[31]; + + $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[32]; + $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[33]; + $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[34]; + $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[35]; + + $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[36]; + $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[37]; + $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[38]; + $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[39]; + + $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[40]; + $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[41]; + $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[42]; + $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[43]; + + switch ($this->Nr) { + case 10: + break; + + case 14: + $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[44]; + $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[45]; + $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[46]; + $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[47]; + + $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[48]; + $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[49]; + $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[50]; + $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[51]; + + $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[52]; + $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[53]; + $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[54]; + $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[55]; + + $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[56]; + $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[57]; + $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[58]; + $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[59]; + break; + + case 12: + $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[44]; + $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[45]; + $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[46]; + $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[47]; + + $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[48]; + $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[49]; + $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[50]; + $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[51]; + break; + + case 13: + $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[44]; + $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[45]; + $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[46]; + $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[47]; + + $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[48]; + $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[49]; + $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[50]; + $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[51]; + + $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[52]; + $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[53]; + $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[54]; + $e3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[55]; + // Note: Here we skip $s3 but using $e3 + + $e0 = $s0; + $e1 = $s1; + $e2 = $s2; + // $e3 = $s3; + break; + + default: // 11 + $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[44]; + $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[45]; + $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[46]; + $e3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[47]; + // Note: Here we skip $s3 but using $e3 + + $e0 = $s0; + $e1 = $s1; + $e2 = $s2; + // $e3 = $s3; } // subWord - $state = array( - $this->_subWord($state[0]), - $this->_subWord($state[1]), - $this->_subWord($state[2]), - $this->_subWord($state[3]) - ); + $e0 = $sbox[$e0 & 0xff] | ($sbox[($e0 >> 8) & 0xff] << 8) | ($sbox[($e0 >> 16) & 0xff] << 16) | ($sbox[($e0 >> 24) & 0xff] << 24); + $e1 = $sbox[$e1 & 0xff] | ($sbox[($e1 >> 8) & 0xff] << 8) | ($sbox[($e1 >> 16) & 0xff] << 16) | ($sbox[($e1 >> 24) & 0xff] << 24); + $e2 = $sbox[$e2 & 0xff] | ($sbox[($e2 >> 8) & 0xff] << 8) | ($sbox[($e2 >> 16) & 0xff] << 16) | ($sbox[($e2 >> 24) & 0xff] << 24); + $e3 = $sbox[$e3 & 0xff] | ($sbox[($e3 >> 8) & 0xff] << 8) | ($sbox[($e3 >> 16) & 0xff] << 16) | ($sbox[($e3 >> 24) & 0xff] << 24); // shiftRows + addRoundKey - $state = array( - ($state[0] & 0xFF000000) ^ ($state[1] & 0x00FF0000) ^ ($state[2] & 0x0000FF00) ^ ($state[3] & 0x000000FF) ^ $this->w[$this->Nr][0], - ($state[1] & 0xFF000000) ^ ($state[2] & 0x00FF0000) ^ ($state[3] & 0x0000FF00) ^ ($state[0] & 0x000000FF) ^ $this->w[$this->Nr][1], - ($state[2] & 0xFF000000) ^ ($state[3] & 0x00FF0000) ^ ($state[0] & 0x0000FF00) ^ ($state[1] & 0x000000FF) ^ $this->w[$this->Nr][2], - ($state[3] & 0xFF000000) ^ ($state[0] & 0x00FF0000) ^ ($state[1] & 0x0000FF00) ^ ($state[2] & 0x000000FF) ^ $this->w[$this->Nr][3] + return pack('N*', + ($e0 & 0xFF000000) ^ ($e1 & 0x00FF0000) ^ ($e2 & 0x0000FF00) ^ ($e3 & 0x000000FF) ^ $w[0], + ($e1 & 0xFF000000) ^ ($e2 & 0x00FF0000) ^ ($e3 & 0x0000FF00) ^ ($e0 & 0x000000FF) ^ $w[1], + ($e2 & 0xFF000000) ^ ($e3 & 0x00FF0000) ^ ($e0 & 0x0000FF00) ^ ($e1 & 0x000000FF) ^ $w[2], + ($e3 & 0xFF000000) ^ ($e0 & 0x00FF0000) ^ ($e1 & 0x0000FF00) ^ ($e2 & 0x000000FF) ^ $w[3] ); - - return pack('N*', $state[0], $state[1], $state[2], $state[3]); } /** @@ -567,43 +755,190 @@ class Crypt_AES extends Crypt_Rijndael { */ function _decryptBlock($in) { - $state = unpack('N*word', $in); + $state = unpack('N*', $in); - $Nr = $this->Nr; - $dw = $this->dw; + $sbox = $this->isbox; + $dw = $this->dw; $dt0 = $this->dt0; $dt1 = $this->dt1; $dt2 = $this->dt2; $dt3 = $this->dt3; - // addRoundKey and reindex $state - $state = array( - $state['word1'] ^ $dw[$this->Nr][0], - $state['word2'] ^ $dw[$this->Nr][1], - $state['word3'] ^ $dw[$this->Nr][2], - $state['word4'] ^ $dw[$this->Nr][3] - ); - + // addRoundKey + $s0 = $state[1] ^ $dw[4]; + $s1 = $state[2] ^ $dw[5]; + $s2 = $state[3] ^ $dw[6]; + $s3 = $state[4] ^ $dw[7]; // invShiftRows + invSubBytes + invMixColumns + addRoundKey - for ($round = $this->Nr - 1; $round > 0; $round--) { - $state = array( - $dt0[$state[0] & 0xFF000000] ^ $dt1[$state[3] & 0x00FF0000] ^ $dt2[$state[2] & 0x0000FF00] ^ $dt3[$state[1] & 0x000000FF] ^ $dw[$round][0], - $dt0[$state[1] & 0xFF000000] ^ $dt1[$state[0] & 0x00FF0000] ^ $dt2[$state[3] & 0x0000FF00] ^ $dt3[$state[2] & 0x000000FF] ^ $dw[$round][1], - $dt0[$state[2] & 0xFF000000] ^ $dt1[$state[1] & 0x00FF0000] ^ $dt2[$state[0] & 0x0000FF00] ^ $dt3[$state[3] & 0x000000FF] ^ $dw[$round][2], - $dt0[$state[3] & 0xFF000000] ^ $dt1[$state[2] & 0x00FF0000] ^ $dt2[$state[1] & 0x0000FF00] ^ $dt3[$state[0] & 0x000000FF] ^ $dw[$round][3] - ); + $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[8]; + $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[9]; + $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[10]; + $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[11]; + + $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[12]; + $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[13]; + $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[14]; + $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[15]; + + $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[16]; + $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[17]; + $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[18]; + $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[19]; + + $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[20]; + $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[21]; + $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[22]; + $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[23]; + + $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[24]; + $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[25]; + $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[26]; + $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[27]; + + $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[28]; + $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[29]; + $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[30]; + $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[31]; + + $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[32]; + $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[33]; + $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[34]; + $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[35]; + + $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[36]; + $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[37]; + $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[38]; + $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[39]; + + $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[40]; + $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[41]; + $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[42]; + $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[43]; + + switch ($this->Nr) { + case 10: + break; + + case 14: + $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[44]; + $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[45]; + $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[46]; + $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[47]; + + $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[48]; + $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[49]; + $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[50]; + $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[51]; + + $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[52]; + $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[53]; + $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[54]; + $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[55]; + + $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[56]; + $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[57]; + $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[58]; + $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[59]; + break; + + case 12: + $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[44]; + $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[45]; + $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[46]; + $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[47]; + + $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[48]; + $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[49]; + $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[50]; + $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[51]; + break; + + case 13: + $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[44]; + $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[45]; + $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[46]; + $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[47]; + + $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[48]; + $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[49]; + $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[50]; + $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[51]; + + $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[52]; + $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[53]; + $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[54]; + $e3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[55]; + // Note: Here we skip $s3 but using $e3 + + $e0 = $s0; + $e1 = $s1; + $e2 = $s2; + // $e3 = $s3; + break; + + default: // 11 + $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[44]; + $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[45]; + $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[46]; + $e3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[47]; + // Note: Here we skip $s3 but using $e3 + + $e0 = $s0; + $e1 = $s1; + $e2 = $s2; + // $e3 = $s3; } - // invShiftRows + invSubWord + addRoundKey - $state = array( - $this->_invSubWord(($state[0] & 0xFF000000) ^ ($state[3] & 0x00FF0000) ^ ($state[2] & 0x0000FF00) ^ ($state[1] & 0x000000FF)) ^ $dw[0][0], - $this->_invSubWord(($state[1] & 0xFF000000) ^ ($state[0] & 0x00FF0000) ^ ($state[3] & 0x0000FF00) ^ ($state[2] & 0x000000FF)) ^ $dw[0][1], - $this->_invSubWord(($state[2] & 0xFF000000) ^ ($state[1] & 0x00FF0000) ^ ($state[0] & 0x0000FF00) ^ ($state[3] & 0x000000FF)) ^ $dw[0][2], - $this->_invSubWord(($state[3] & 0xFF000000) ^ ($state[2] & 0x00FF0000) ^ ($state[1] & 0x0000FF00) ^ ($state[0] & 0x000000FF)) ^ $dw[0][3] - ); + // invSubWord + $e0 = $sbox[$e0 & 0xff] | ($sbox[($e0 >> 8) & 0xff] << 8) | ($sbox[($e0 >> 16) & 0xff] << 16) | ($sbox[($e0 >> 24) & 0xff] << 24); + $e1 = $sbox[$e1 & 0xff] | ($sbox[($e1 >> 8) & 0xff] << 8) | ($sbox[($e1 >> 16) & 0xff] << 16) | ($sbox[($e1 >> 24) & 0xff] << 24); + $e2 = $sbox[$e2 & 0xff] | ($sbox[($e2 >> 8) & 0xff] << 8) | ($sbox[($e2 >> 16) & 0xff] << 16) | ($sbox[($e2 >> 24) & 0xff] << 24); + $e3 = $sbox[$e3 & 0xff] | ($sbox[($e3 >> 8) & 0xff] << 8) | ($sbox[($e3 >> 16) & 0xff] << 16) | ($sbox[($e3 >> 24) & 0xff] << 24); - return pack('N*', $state[0], $state[1], $state[2], $state[3]); + // invShiftRows + addRoundKey + return pack('N*', + ($e0 & 0xFF000000) ^ ($e3 & 0x00FF0000) ^ ($e2 & 0x0000FF00) ^ ($e1 & 0x000000FF) ^ $dw[0], + ($e1 & 0xFF000000) ^ ($e0 & 0x00FF0000) ^ ($e3 & 0x0000FF00) ^ ($e2 & 0x000000FF) ^ $dw[1], + ($e2 & 0xFF000000) ^ ($e1 & 0x00FF0000) ^ ($e0 & 0x0000FF00) ^ ($e3 & 0x000000FF) ^ $dw[2], + ($e3 & 0xFF000000) ^ ($e2 & 0x00FF0000) ^ ($e1 & 0x0000FF00) ^ ($e0 & 0x000000FF) ^ $dw[3] + ); + } + + /** + * Treat consecutive "packets" as if they are a continuous buffer. + * + * The default behavior. + * + * @see Crypt_Rijndael::disableContinuousBuffer() + * @access public + */ + function enableContinuousBuffer() + { + parent::enableContinuousBuffer(); + + if (CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT) { + $this->enbuffer['enmcrypt_init'] = true; + $this->debuffer['demcrypt_init'] = true; + } + } + + /** + * Treat consecutive packets as if they are a discontinuous buffer. + * + * The default behavior. + * + * @see Crypt_Rijndael::enableContinuousBuffer() + * @access public + */ + function disableContinuousBuffer() + { + parent::disableContinuousBuffer(); + + if (CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT) { + mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv); + mcrypt_generic_init($this->demcrypt, $this->key, $this->iv); + } } } diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/DES.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/DES.php index 6a6d33897e..1197a50ab7 100644 --- a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/DES.php +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/DES.php @@ -257,19 +257,19 @@ class Crypt_DES { * Encryption buffer for CTR, OFB and CFB modes * * @see Crypt_DES::encrypt() - * @var String + * @var Array * @access private */ - var $enbuffer = ''; + var $enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true); /** * Decryption buffer for CTR, OFB and CFB modes * * @see Crypt_DES::decrypt() - * @var String + * @var Array * @access private */ - var $debuffer = ''; + var $debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'demcrypt_init' => true); /** * mcrypt resource for CFB mode @@ -316,6 +316,7 @@ class Crypt_DES { break; case CRYPT_DES_MODE_CFB: $this->mode = 'ncfb'; + $this->ecb = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, ''); break; case CRYPT_DES_MODE_OFB: $this->mode = MCRYPT_MODE_NOFB; @@ -325,6 +326,8 @@ class Crypt_DES { $this->paddable = true; $this->mode = MCRYPT_MODE_CBC; } + $this->enmcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, ''); + $this->demcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, ''); break; default: @@ -363,7 +366,8 @@ class Crypt_DES { function setKey($key) { $this->keys = ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) ? str_pad(substr($key, 0, 8), 8, chr(0)) : $this->_prepareKey($key); - $this->changed = true; + $this->enchanged = true; + $this->dechanged = true; } /** @@ -387,7 +391,7 @@ class Crypt_DES { if (!isset($hash)) { $hash = 'sha1'; } - // WPA and WPA use the SSID as the salt + // WPA and WPA2 use the SSID as the salt if (!isset($salt)) { $salt = 'phpseclib/salt'; } @@ -431,7 +435,8 @@ class Crypt_DES { function setIV($iv) { $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, 8), 8, chr(0)); - $this->changed = true; + $this->enchanged = true; + $this->dechanged = true; } /** @@ -443,29 +448,24 @@ class Crypt_DES { * @see Crypt_DES::decrypt() * @see Crypt_DES::encrypt() * @access public - * @param Integer $length * @param String $iv */ - function _generate_xor($length, &$iv) + function _generate_xor(&$iv) { - $xor = ''; - $num_blocks = ($length + 7) >> 3; - for ($i = 0; $i < $num_blocks; $i++) { - $xor.= $iv; - for ($j = 4; $j <= 8; $j+=4) { - $temp = substr($iv, -$j, 4); - switch ($temp) { - case "\xFF\xFF\xFF\xFF": - $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4); - break; - case "\x7F\xFF\xFF\xFF": - $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4); - break 2; - default: - extract(unpack('Ncount', $temp)); - $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4); - break 2; - } + $xor = $iv; + for ($j = 4; $j <= 8; $j+=4) { + $temp = substr($iv, -$j, 4); + switch ($temp) { + case "\xFF\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4); + break; + case "\x7F\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4); + break 2; + default: + extract(unpack('Ncount', $temp)); + $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4); + break 2; } } @@ -497,48 +497,63 @@ class Crypt_DES { if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) { if ($this->enchanged) { - if (!isset($this->enmcrypt)) { - $this->enmcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, ''); - } mcrypt_generic_init($this->enmcrypt, $this->keys, $this->encryptIV); - if ($this->mode != 'ncfb') { - $this->enchanged = false; + if ($this->mode == 'ncfb') { + mcrypt_generic_init($this->ecb, $this->keys, "\0\0\0\0\0\0\0\0"); } + $this->enchanged = false; } - if ($this->mode != 'ncfb') { + if ($this->mode != 'ncfb' || !$this->continuousBuffer) { $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext); } else { - if ($this->enchanged) { - $this->ecb = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, ''); - mcrypt_generic_init($this->ecb, $this->keys, "\0\0\0\0\0\0\0\0"); - $this->enchanged = false; - } - - if (strlen($this->enbuffer)) { - $ciphertext = $plaintext ^ substr($this->encryptIV, strlen($this->enbuffer)); - $this->enbuffer.= $ciphertext; - if (strlen($this->enbuffer) == 8) { - $this->encryptIV = $this->enbuffer; - $this->enbuffer = ''; - mcrypt_generic_init($this->enmcrypt, $this->keys, $this->encryptIV); + $iv = &$this->encryptIV; + $pos = &$this->enbuffer['pos']; + $len = strlen($plaintext); + $ciphertext = ''; + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = 8 - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; } - $plaintext = substr($plaintext, strlen($ciphertext)); - } else { - $ciphertext = ''; + $ciphertext = substr($iv, $orig_pos) ^ $plaintext; + $iv = substr_replace($iv, $ciphertext, $orig_pos, $i); + $this->enbuffer['enmcrypt_init'] = true; } - - $last_pos = strlen($plaintext) & 0xFFFFFFF8; - $ciphertext.= $last_pos ? mcrypt_generic($this->enmcrypt, substr($plaintext, 0, $last_pos)) : ''; - - if (strlen($plaintext) & 0x7) { - if (strlen($ciphertext)) { - $this->encryptIV = substr($ciphertext, -8); + if ($len >= 8) { + if ($this->enbuffer['enmcrypt_init'] === false || $len > 600) { + if ($this->enbuffer['enmcrypt_init'] === true) { + mcrypt_generic_init($this->enmcrypt, $this->keys, $iv); + $this->enbuffer['enmcrypt_init'] = false; + } + $ciphertext.= mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % 8)); + $iv = substr($ciphertext, -8); + $len%= 8; + } else { + while ($len >= 8) { + $iv = mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, 8); + $ciphertext.= $iv; + $len-= 8; + $i+= 8; + } } - $this->encryptIV = mcrypt_generic($this->ecb, $this->encryptIV); - $this->enbuffer = substr($plaintext, $last_pos) ^ $this->encryptIV; - $ciphertext.= $this->enbuffer; + } + if ($len) { + $iv = mcrypt_generic($this->ecb, $iv); + $block = $iv ^ substr($plaintext, -$len); + $iv = substr_replace($iv, $block, 0, $len); + $ciphertext.= $block; + $pos = $len; } + return $ciphertext; } if (!$this->continuousBuffer) { @@ -578,14 +593,14 @@ class Crypt_DES { if (strlen($buffer['encrypted'])) { for ($i = 0; $i < strlen($plaintext); $i+=8) { $block = substr($plaintext, $i, 8); - $buffer['encrypted'].= $this->_processBlock($this->_generate_xor(8, $xor), CRYPT_DES_ENCRYPT); + $buffer['encrypted'].= $this->_processBlock($this->_generate_xor($xor), CRYPT_DES_ENCRYPT); $key = $this->_string_shift($buffer['encrypted'], 8); $ciphertext.= $block ^ $key; } } else { for ($i = 0; $i < strlen($plaintext); $i+=8) { $block = substr($plaintext, $i, 8); - $key = $this->_processBlock($this->_generate_xor(8, $xor), CRYPT_DES_ENCRYPT); + $key = $this->_processBlock($this->_generate_xor($xor), CRYPT_DES_ENCRYPT); $ciphertext.= $block ^ $key; } } @@ -597,42 +612,51 @@ class Crypt_DES { } break; case CRYPT_DES_MODE_CFB: - if (!empty($buffer['xor'])) { - $ciphertext = $plaintext ^ $buffer['xor']; - $iv = $buffer['encrypted'] . $ciphertext; - $start = strlen($ciphertext); - $buffer['encrypted'].= $ciphertext; - $buffer['xor'] = substr($buffer['xor'], strlen($ciphertext)); - } else { - $ciphertext = ''; - $iv = $this->encryptIV; - $start = 0; - } - - for ($i = $start; $i < strlen($plaintext); $i+=8) { - $block = substr($plaintext, $i, 8); - $xor = $this->_processBlock($iv, CRYPT_DES_ENCRYPT); - $iv = $block ^ $xor; - if ($continuousBuffer && strlen($iv) != 8) { - $buffer = array( - 'encrypted' => $iv, - 'xor' => substr($xor, strlen($iv)) - ); - } - $ciphertext.= $iv; - } - if ($this->continuousBuffer) { - $this->encryptIV = $iv; + $iv = &$this->encryptIV; + $pos = &$buffer['pos']; + } else { + $iv = $this->encryptIV; + $pos = 0; } - break; + $len = strlen($plaintext); + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = 8 - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; + } + $ciphertext = substr($iv, $orig_pos) ^ $plaintext; + $iv = substr_replace($iv, $ciphertext, $orig_pos, $i); + } + while ($len >= 8) { + $iv = $this->_processBlock($iv, CRYPT_DES_ENCRYPT) ^ substr($plaintext, $i, 8); + $ciphertext.= $iv; + $len-= 8; + $i+= 8; + } + if ($len) { + $iv = $this->_processBlock($iv, CRYPT_DES_ENCRYPT); + $block = $iv ^ substr($plaintext, $i); + $iv = substr_replace($iv, $block, 0, $len); + $ciphertext.= $block; + $pos = $len; + } + return $ciphertext; case CRYPT_DES_MODE_OFB: $xor = $this->encryptIV; - if (strlen($buffer)) { + if (strlen($buffer['xor'])) { for ($i = 0; $i < strlen($plaintext); $i+=8) { $xor = $this->_processBlock($xor, CRYPT_DES_ENCRYPT); - $buffer.= $xor; - $key = $this->_string_shift($buffer, 8); + $buffer['xor'].= $xor; + $key = $this->_string_shift($buffer['xor'], 8); $ciphertext.= substr($plaintext, $i, 8) ^ $key; } } else { @@ -645,7 +669,7 @@ class Crypt_DES { if ($this->continuousBuffer) { $this->encryptIV = $xor; if ($start = strlen($plaintext) & 7) { - $buffer = substr($key, $start) . $buffer; + $buffer['xor'] = substr($key, $start) . $buffer['xor']; } } } @@ -672,50 +696,48 @@ class Crypt_DES { if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) { if ($this->dechanged) { - if (!isset($this->demcrypt)) { - $this->demcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, ''); - } mcrypt_generic_init($this->demcrypt, $this->keys, $this->decryptIV); - if ($this->mode != 'ncfb') { - $this->dechanged = false; + if ($this->mode == 'ncfb') { + mcrypt_generic_init($this->ecb, $this->keys, "\0\0\0\0\0\0\0\0"); } + $this->dechanged = false; } - if ($this->mode != 'ncfb') { + if ($this->mode != 'ncfb' || !$this->continuousBuffer) { $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext); } else { - if ($this->dechanged) { - $this->ecb = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, ''); - mcrypt_generic_init($this->ecb, $this->keys, "\0\0\0\0\0\0\0\0"); - $this->dechanged = false; - } - - if (strlen($this->debuffer)) { - $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($this->debuffer)); - - $this->debuffer.= substr($ciphertext, 0, strlen($plaintext)); - if (strlen($this->debuffer) == 8) { - $this->decryptIV = $this->debuffer; - $this->debuffer = ''; - mcrypt_generic_init($this->demcrypt, $this->keys, $this->decryptIV); + $iv = &$this->decryptIV; + $pos = &$this->debuffer['pos']; + $len = strlen($ciphertext); + $plaintext = ''; + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = 8 - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; } - $ciphertext = substr($ciphertext, strlen($plaintext)); - } else { - $plaintext = ''; + $plaintext = substr($iv, $orig_pos) ^ $ciphertext; + $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i); } - - $last_pos = strlen($ciphertext) & 0xFFFFFFF8; - $plaintext.= $last_pos ? mdecrypt_generic($this->demcrypt, substr($ciphertext, 0, $last_pos)) : ''; - - if (strlen($ciphertext) & 0x7) { - if (strlen($plaintext)) { - $this->decryptIV = substr($ciphertext, $last_pos - 8, 8); - } - $this->decryptIV = mcrypt_generic($this->ecb, $this->decryptIV); - $this->debuffer = substr($ciphertext, $last_pos); - $plaintext.= $this->debuffer ^ $this->decryptIV; + if ($len >= 8) { + $cb = substr($ciphertext, $i, $len - $len % 8); + $plaintext.= mcrypt_generic($this->ecb, $iv . $cb) ^ $cb; + $iv = substr($cb, -8); + $len%= 8; + } + if ($len) { + $iv = mcrypt_generic($this->ecb, $iv); + $plaintext.= $iv ^ substr($ciphertext, -$len); + $iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len); + $pos = $len; } - return $plaintext; } @@ -755,14 +777,14 @@ class Crypt_DES { if (strlen($buffer['ciphertext'])) { for ($i = 0; $i < strlen($ciphertext); $i+=8) { $block = substr($ciphertext, $i, 8); - $buffer['ciphertext'].= $this->_processBlock($this->_generate_xor(8, $xor), CRYPT_DES_ENCRYPT); + $buffer['ciphertext'].= $this->_processBlock($this->_generate_xor($xor), CRYPT_DES_ENCRYPT); $key = $this->_string_shift($buffer['ciphertext'], 8); $plaintext.= $block ^ $key; } } else { for ($i = 0; $i < strlen($ciphertext); $i+=8) { $block = substr($ciphertext, $i, 8); - $key = $this->_processBlock($this->_generate_xor(8, $xor), CRYPT_DES_ENCRYPT); + $key = $this->_processBlock($this->_generate_xor($xor), CRYPT_DES_ENCRYPT); $plaintext.= $block ^ $key; } } @@ -774,42 +796,52 @@ class Crypt_DES { } break; case CRYPT_DES_MODE_CFB: - if (!empty($buffer['ciphertext'])) { - $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($buffer['ciphertext'])); - $buffer['ciphertext'].= substr($ciphertext, 0, strlen($plaintext)); - if (strlen($buffer['ciphertext']) == 8) { - $xor = $this->_processBlock($buffer['ciphertext'], CRYPT_DES_ENCRYPT); - $buffer['ciphertext'] = ''; - } - $start = strlen($plaintext); - $block = $this->decryptIV; - } else { - $plaintext = ''; - $xor = $this->_processBlock($this->decryptIV, CRYPT_DES_ENCRYPT); - $start = 0; - } - - for ($i = $start; $i < strlen($ciphertext); $i+=8) { - $block = substr($ciphertext, $i, 8); - $plaintext.= $block ^ $xor; - if ($continuousBuffer && strlen($block) != 8) { - $buffer['ciphertext'].= $block; - $block = $xor; - } else if (strlen($block) == 8) { - $xor = $this->_processBlock($block, CRYPT_DES_ENCRYPT); - } - } if ($this->continuousBuffer) { - $this->decryptIV = $block; + $iv = &$this->decryptIV; + $pos = &$buffer['pos']; + } else { + $iv = $this->decryptIV; + $pos = 0; } - break; + $len = strlen($ciphertext); + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = 8 - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; + } + $plaintext = substr($iv, $orig_pos) ^ $ciphertext; + $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i); + } + while ($len >= 8) { + $iv = $this->_processBlock($iv, CRYPT_DES_ENCRYPT); + $cb = substr($ciphertext, $i, 8); + $plaintext.= $iv ^ $cb; + $iv = $cb; + $len-= 8; + $i+= 8; + } + if ($len) { + $iv = $this->_processBlock($iv, CRYPT_DES_ENCRYPT); + $plaintext.= $iv ^ substr($ciphertext, $i); + $iv = substr_replace($iv, substr($ciphertext, $i), 0, $len); + $pos = $len; + } + return $plaintext; case CRYPT_DES_MODE_OFB: $xor = $this->decryptIV; - if (strlen($buffer)) { + if (strlen($buffer['xor'])) { for ($i = 0; $i < strlen($ciphertext); $i+=8) { $xor = $this->_processBlock($xor, CRYPT_DES_ENCRYPT); - $buffer.= $xor; - $key = $this->_string_shift($buffer, 8); + $buffer['xor'].= $xor; + $key = $this->_string_shift($buffer['xor'], 8); $plaintext.= substr($ciphertext, $i, 8) ^ $key; } } else { @@ -822,7 +854,7 @@ class Crypt_DES { if ($this->continuousBuffer) { $this->decryptIV = $xor; if ($start = strlen($ciphertext) % 8) { - $buffer = substr($key, $start) . $buffer; + $buffer['xor'] = substr($key, $start) . $buffer['xor']; } } } @@ -885,6 +917,13 @@ class Crypt_DES { $this->continuousBuffer = false; $this->encryptIV = $this->iv; $this->decryptIV = $this->iv; + $this->enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true); + $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'demcrypt_init' => true); + + if (CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT) { + mcrypt_generic_init($this->enmcrypt, $this->keys, $this->iv); + mcrypt_generic_init($this->demcrypt, $this->keys, $this->iv); + } } /** @@ -937,7 +976,7 @@ class Crypt_DES { if (($length & 7) == 0) { return $text; } else { - $this->_handle_error("The plaintext's length ($length) is not a multiple of the block size (8)"); + user_error("The plaintext's length ($length) is not a multiple of the block size (8)"); $this->padding = true; } } @@ -1289,25 +1328,7 @@ class Crypt_DES { $string = substr($string, $index); return $substr; } - - /** - * Error Handler - * - * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. - * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. - * - * @param String $string - * @access private - */ - function _handle_error($err_msg) { - if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { - $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; - throw(new $class($err_msg)); - } else { - user_error($err_msg); - } - } } // vim: ts=4:sw=4:et: -// vim6: fdl=1: \ No newline at end of file +// vim6: fdl=1: diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RC4.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RC4.php index 94cb691734..390108e048 100644 --- a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RC4.php +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RC4.php @@ -167,7 +167,6 @@ class Crypt_RC4 { * * Determines whether or not the mcrypt extension should be used. * - * @param optional Integer $mode * @return Crypt_RC4 * @access public */ @@ -192,6 +191,9 @@ class Crypt_RC4 { case defined('MCRYPT_RC4'); $this->mode = MCRYPT_RC4; } + $this->encryptStream = mcrypt_module_open($this->mode, '', MCRYPT_MODE_STREAM, ''); + $this->decryptStream = mcrypt_module_open($this->mode, '', MCRYPT_MODE_STREAM, ''); + } } @@ -209,6 +211,8 @@ class Crypt_RC4 { $this->key = $key; if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) { + mcrypt_generic_init($this->encryptStream, $this->key, ''); + mcrypt_generic_init($this->decryptStream, $this->key, ''); return; } @@ -250,7 +254,7 @@ class Crypt_RC4 { if (!isset($hash)) { $hash = 'sha1'; } - // WPA and WPA use the SSID as the salt + // WPA and WPA2 use the SSID as the salt if (!isset($salt)) { $salt = 'phpseclib/salt'; } @@ -349,18 +353,11 @@ class Crypt_RC4 { if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) { $keyStream = $mode == CRYPT_RC4_ENCRYPT ? 'encryptStream' : 'decryptStream'; - if ($this->$keyStream === false) { - $this->$keyStream = mcrypt_module_open($this->mode, '', MCRYPT_MODE_STREAM, ''); - mcrypt_generic_init($this->$keyStream, $this->key, ''); - } else if (!$this->continuousBuffer) { - mcrypt_generic_init($this->$keyStream, $this->key, ''); - } - $newText = mcrypt_generic($this->$keyStream, $text); if (!$this->continuousBuffer) { - mcrypt_generic_deinit($this->$keyStream); + mcrypt_generic_init($this->$keyStream, $this->key, ''); } - return $newText; + return mcrypt_generic($this->$keyStream, $text); } if ($this->encryptStream === false) { @@ -442,6 +439,11 @@ class Crypt_RC4 { */ function enableContinuousBuffer() { + if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) { + mcrypt_generic_init($this->encryptStream, $this->key, ''); + mcrypt_generic_init($this->decryptStream, $this->key, ''); + } + $this->continuousBuffer = true; } @@ -457,7 +459,7 @@ class Crypt_RC4 { { if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_INTERNAL ) { $this->encryptIndex = $this->decryptIndex = array(0, 0); - $this->setKey($this->key); + $this->encryptStream = $this->decryptStream = false; } $this->continuousBuffer = false; @@ -508,24 +510,10 @@ class Crypt_RC4 { */ function _closeMCrypt() { - if ( $this->encryptStream !== false ) { - if ( $this->continuousBuffer ) { - mcrypt_generic_deinit($this->encryptStream); - } - - mcrypt_module_close($this->encryptStream); - - $this->encryptStream = false; - } - - if ( $this->decryptStream !== false ) { - if ( $this->continuousBuffer ) { - mcrypt_generic_deinit($this->decryptStream); - } - - mcrypt_module_close($this->decryptStream); - - $this->decryptStream = false; - } + mcrypt_module_close($this->encryptStream); + mcrypt_module_close($this->decryptStream); } } + +// vim: ts=4:sw=4:et: +// vim6: fdl=1: \ No newline at end of file diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RSA.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RSA.php index 3373efa6f6..db1ba1581b 100644 --- a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RSA.php +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RSA.php @@ -1746,7 +1746,7 @@ class Crypt_RSA { { $x = $x->toBytes(); if (strlen($x) > $xLen) { - $this->_handle_error('Integer too large'); + user_error('Integer too large'); return false; } return str_pad($x, $xLen, chr(0), STR_PAD_LEFT); @@ -1907,7 +1907,7 @@ class Crypt_RSA { function _rsaep($m) { if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) { - $this->_handle_error('Message representative out of range'); + user_error('Message representative out of range'); return false; } return $this->_exponentiate($m); @@ -1925,7 +1925,7 @@ class Crypt_RSA { function _rsadp($c) { if ($c->compare($this->zero) < 0 || $c->compare($this->modulus) > 0) { - $this->_handle_error('Ciphertext representative out of range'); + user_error('Ciphertext representative out of range'); return false; } return $this->_exponentiate($c); @@ -1943,7 +1943,7 @@ class Crypt_RSA { function _rsasp1($m) { if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) { - $this->_handle_error('Message representative out of range'); + user_error('Message representative out of range'); return false; } return $this->_exponentiate($m); @@ -1961,7 +1961,7 @@ class Crypt_RSA { function _rsavp1($s) { if ($s->compare($this->zero) < 0 || $s->compare($this->modulus) > 0) { - $this->_handle_error('Signature representative out of range'); + user_error('Signature representative out of range'); return false; } return $this->_exponentiate($s); @@ -2012,7 +2012,7 @@ class Crypt_RSA { // be output. if ($mLen > $this->k - 2 * $this->hLen - 2) { - $this->_handle_error('Message too long'); + user_error('Message too long'); return false; } @@ -2073,7 +2073,7 @@ class Crypt_RSA { // be output. if (strlen($c) != $this->k || $this->k < 2 * $this->hLen + 2) { - $this->_handle_error('Decryption error'); + user_error('Decryption error'); return false; } @@ -2082,7 +2082,7 @@ class Crypt_RSA { $c = $this->_os2ip($c); $m = $this->_rsadp($c); if ($m === false) { - $this->_handle_error('Decryption error'); + user_error('Decryption error'); return false; } $em = $this->_i2osp($m, $this->k); @@ -2100,12 +2100,12 @@ class Crypt_RSA { $lHash2 = substr($db, 0, $this->hLen); $m = substr($db, $this->hLen); if ($lHash != $lHash2) { - $this->_handle_error('Decryption error'); + user_error('Decryption error'); return false; } $m = ltrim($m, chr(0)); if (ord($m[0]) != 1) { - $this->_handle_error('Decryption error'); + user_error('Decryption error'); return false; } @@ -2130,7 +2130,7 @@ class Crypt_RSA { // Length checking if ($mLen > $this->k - 11) { - $this->_handle_error('Message too long'); + user_error('Message too long'); return false; } @@ -2179,7 +2179,7 @@ class Crypt_RSA { // Length checking if (strlen($c) != $this->k) { // or if k < 11 - $this->_handle_error('Decryption error'); + user_error('Decryption error'); return false; } @@ -2189,7 +2189,7 @@ class Crypt_RSA { $m = $this->_rsadp($c); if ($m === false) { - $this->_handle_error('Decryption error'); + user_error('Decryption error'); return false; } $em = $this->_i2osp($m, $this->k); @@ -2197,7 +2197,7 @@ class Crypt_RSA { // EME-PKCS1-v1_5 decoding if (ord($em[0]) != 0 || ord($em[1]) > 2) { - $this->_handle_error('Decryption error'); + user_error('Decryption error'); return false; } @@ -2205,7 +2205,7 @@ class Crypt_RSA { $m = substr($em, strlen($ps) + 3); if (strlen($ps) < 8) { - $this->_handle_error('Decryption error'); + user_error('Decryption error'); return false; } @@ -2233,7 +2233,7 @@ class Crypt_RSA { $mHash = $this->hash->hash($m); if ($emLen < $this->hLen + $sLen + 2) { - $this->_handle_error('Encoding error'); + user_error('Encoding error'); return false; } @@ -2338,7 +2338,7 @@ class Crypt_RSA { // Length checking if (strlen($s) != $this->k) { - $this->_handle_error('Invalid signature'); + user_error('Invalid signature'); return false; } @@ -2349,12 +2349,12 @@ class Crypt_RSA { $s2 = $this->_os2ip($s); $m2 = $this->_rsavp1($s2); if ($m2 === false) { - $this->_handle_error('Invalid signature'); + user_error('Invalid signature'); return false; } $em = $this->_i2osp($m2, $modBits >> 3); if ($em === false) { - $this->_handle_error('Invalid signature'); + user_error('Invalid signature'); return false; } @@ -2404,7 +2404,7 @@ class Crypt_RSA { $tLen = strlen($t); if ($emLen < $tLen + 11) { - $this->_handle_error('Intended encoded message length too short'); + user_error('Intended encoded message length too short'); return false; } @@ -2430,7 +2430,7 @@ class Crypt_RSA { $em = $this->_emsa_pkcs1_v1_5_encode($m, $this->k); if ($em === false) { - $this->_handle_error('RSA modulus too short'); + user_error('RSA modulus too short'); return false; } @@ -2459,7 +2459,7 @@ class Crypt_RSA { // Length checking if (strlen($s) != $this->k) { - $this->_handle_error('Invalid signature'); + user_error('Invalid signature'); return false; } @@ -2468,12 +2468,12 @@ class Crypt_RSA { $s = $this->_os2ip($s); $m2 = $this->_rsavp1($s); if ($m2 === false) { - $this->_handle_error('Invalid signature'); + user_error('Invalid signature'); return false; } $em = $this->_i2osp($m2, $this->k); if ($em === false) { - $this->_handle_error('Invalid signature'); + user_error('Invalid signature'); return false; } @@ -2481,7 +2481,7 @@ class Crypt_RSA { $em2 = $this->_emsa_pkcs1_v1_5_encode($m, $this->k); if ($em2 === false) { - $this->_handle_error('RSA modulus too short'); + user_error('RSA modulus too short'); return false; } @@ -2643,22 +2643,4 @@ class Crypt_RSA { return $this->_rsassa_pss_verify($message, $signature); } } - - /** - * Error Handler - * - * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. - * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. - * - * @param String $string - * @access private - */ - function _handle_error($err_msg) { - if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { - $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; - throw(new $class($err_msg)); - } else { - user_error($err_msg); - } - } } diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Random.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Random.php index 55df0bde5f..a60857df95 100644 --- a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Random.php +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Random.php @@ -90,7 +90,7 @@ function crypt_random_string($length) { $fp = @fopen('/dev/urandom', 'rb'); } if ($fp !== true && $fp !== false) { // surprisingly faster than !is_bool() or is_resource() - return fread($urandom, $length); + return fread($fp, $length); } // method 3. pretty much does the same thing as method 2 per the following url: // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1391 @@ -240,4 +240,4 @@ function crypt_random_string($length) { $result.= $r; } return substr($result, 0, $length); -} \ No newline at end of file +} diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Rijndael.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Rijndael.php index 71155c8976..335d5233c4 100644 --- a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Rijndael.php +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Rijndael.php @@ -387,7 +387,7 @@ class Crypt_Rijndael { * @var String * @access private */ - var $enbuffer = array('encrypted' => '', 'xor' => ''); + var $enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0); /** * Decryption buffer for CTR, OFB and CFB modes @@ -396,7 +396,7 @@ class Crypt_Rijndael { * @var String * @access private */ - var $debuffer = array('ciphertext' => ''); + var $debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0); /** * Default Constructor. @@ -510,13 +510,13 @@ class Crypt_Rijndael { ); for ($i = 0; $i < 256; $i++) { - $t2[$i << 8] = (($t3[$i] << 8) & 0xFFFFFF00) | (($t3[$i] >> 24) & 0x000000FF); - $t1[$i << 16] = (($t3[$i] << 16) & 0xFFFF0000) | (($t3[$i] >> 16) & 0x0000FFFF); - $t0[$i << 24] = (($t3[$i] << 24) & 0xFF000000) | (($t3[$i] >> 8) & 0x00FFFFFF); + $t2[] = (($t3[$i] << 8) & 0xFFFFFF00) | (($t3[$i] >> 24) & 0x000000FF); + $t1[] = (($t3[$i] << 16) & 0xFFFF0000) | (($t3[$i] >> 16) & 0x0000FFFF); + $t0[] = (($t3[$i] << 24) & 0xFF000000) | (($t3[$i] >> 8) & 0x00FFFFFF); - $dt2[$i << 8] = (($this->dt3[$i] << 8) & 0xFFFFFF00) | (($dt3[$i] >> 24) & 0x000000FF); - $dt1[$i << 16] = (($this->dt3[$i] << 16) & 0xFFFF0000) | (($dt3[$i] >> 16) & 0x0000FFFF); - $dt0[$i << 24] = (($this->dt3[$i] << 24) & 0xFF000000) | (($dt3[$i] >> 8) & 0x00FFFFFF); + $dt2[] = (($dt3[$i] << 8) & 0xFFFFFF00) | (($dt3[$i] >> 24) & 0x000000FF); + $dt1[] = (($dt3[$i] << 16) & 0xFFFF0000) | (($dt3[$i] >> 16) & 0x0000FFFF); + $dt0[] = (($dt3[$i] << 24) & 0xFF000000) | (($dt3[$i] >> 8) & 0x00FFFFFF); } } @@ -599,7 +599,7 @@ class Crypt_Rijndael { if (!isset($hash)) { $hash = 'sha1'; } - // WPA and WPA use the SSID as the salt + // WPA and WPA2 use the SSID as the salt if (!isset($salt)) { $salt = 'phpseclib'; } @@ -719,7 +719,6 @@ class Crypt_Rijndael { $block_size = $this->block_size; $buffer = &$this->enbuffer; - $continuousBuffer = $this->continuousBuffer; $ciphertext = ''; switch ($this->mode) { case CRYPT_RIJNDAEL_MODE_ECB: @@ -741,7 +740,7 @@ class Crypt_Rijndael { break; case CRYPT_RIJNDAEL_MODE_CTR: $xor = $this->encryptIV; - if (!empty($buffer['encrypted'])) { + if (strlen($buffer['encrypted'])) { for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { $block = substr($plaintext, $i, $block_size); $buffer['encrypted'].= $this->_encryptBlock($this->_generate_xor($block_size, $xor)); @@ -763,42 +762,54 @@ class Crypt_Rijndael { } break; case CRYPT_RIJNDAEL_MODE_CFB: - if (!empty($buffer['xor'])) { - $ciphertext = $plaintext ^ $buffer['xor']; - $iv = $buffer['encrypted'] . $ciphertext; - $start = strlen($ciphertext); - $buffer['encrypted'].= $ciphertext; - $buffer['xor'] = substr($buffer['xor'], strlen($ciphertext)); - } else { - $ciphertext = ''; - $iv = $this->encryptIV; - $start = 0; - } - - for ($i = $start; $i < strlen($plaintext); $i+=$block_size) { - $block = substr($plaintext, $i, $block_size); - $xor = $this->_encryptBlock($iv); - $iv = $block ^ $xor; - if ($continuousBuffer && strlen($iv) != $block_size) { - $buffer = array( - 'encrypted' => $iv, - 'xor' => substr($xor, strlen($iv)) - ); - } - $ciphertext.= $iv; - } - + // cfb loosely routines inspired by openssl's: + // http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1 if ($this->continuousBuffer) { - $this->encryptIV = $iv; + $iv = &$this->encryptIV; + $pos = &$buffer['pos']; + } else { + $iv = $this->encryptIV; + $pos = 0; + } + $len = strlen($plaintext); + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = $block_size - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; + } + // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize + $ciphertext = substr($iv, $orig_pos) ^ $plaintext; + $iv = substr_replace($iv, $ciphertext, $orig_pos, $i); + } + while ($len >= $block_size) { + $iv = $this->_encryptBlock($iv) ^ substr($plaintext, $i, $block_size); + $ciphertext.= $iv; + $len-= $block_size; + $i+= $block_size; + } + if ($len) { + $iv = $this->_encryptBlock($iv); + $block = $iv ^ substr($plaintext, $i); + $iv = substr_replace($iv, $block, 0, $len); + $ciphertext.= $block; + $pos = $len; } break; case CRYPT_RIJNDAEL_MODE_OFB: $xor = $this->encryptIV; - if (strlen($buffer)) { + if (strlen($buffer['xor'])) { for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { $xor = $this->_encryptBlock($xor); - $buffer.= $xor; - $key = $this->_string_shift($buffer, $block_size); + $buffer['xor'].= $xor; + $key = $this->_string_shift($buffer['xor'], $block_size); $ciphertext.= substr($plaintext, $i, $block_size) ^ $key; } } else { @@ -811,7 +822,7 @@ class Crypt_Rijndael { if ($this->continuousBuffer) { $this->encryptIV = $xor; if ($start = strlen($plaintext) % $block_size) { - $buffer = substr($key, $start) . $buffer; + $buffer['xor'] = substr($key, $start) . $buffer['xor']; } } } @@ -841,7 +852,6 @@ class Crypt_Rijndael { $block_size = $this->block_size; $buffer = &$this->debuffer; - $continuousBuffer = $this->continuousBuffer; $plaintext = ''; switch ($this->mode) { case CRYPT_RIJNDAEL_MODE_ECB: @@ -862,7 +872,7 @@ class Crypt_Rijndael { break; case CRYPT_RIJNDAEL_MODE_CTR: $xor = $this->decryptIV; - if (!empty($buffer['ciphertext'])) { + if (strlen($buffer['ciphertext'])) { for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { $block = substr($ciphertext, $i, $block_size); $buffer['ciphertext'].= $this->_encryptBlock($this->_generate_xor($block_size, $xor)); @@ -879,47 +889,58 @@ class Crypt_Rijndael { if ($this->continuousBuffer) { $this->decryptIV = $xor; if ($start = strlen($ciphertext) % $block_size) { - $buffer['ciphertext'] = substr($key, $start) . $buffer['encrypted']; + $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext']; } } break; case CRYPT_RIJNDAEL_MODE_CFB: - if (!empty($buffer['ciphertext'])) { - $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($buffer['ciphertext'])); - $buffer['ciphertext'].= substr($ciphertext, 0, strlen($plaintext)); - if (strlen($buffer['ciphertext']) == $block_size) { - $xor = $this->_encryptBlock($buffer['ciphertext']); - $buffer['ciphertext'] = ''; - } - $start = strlen($plaintext); - $block = $this->decryptIV; - } else { - $plaintext = ''; - $xor = $this->_encryptBlock($this->decryptIV); - $start = 0; - } - - for ($i = $start; $i < strlen($ciphertext); $i+=$block_size) { - $block = substr($ciphertext, $i, $block_size); - $plaintext.= $block ^ $xor; - if ($continuousBuffer && strlen($block) != $block_size) { - $buffer['ciphertext'].= $block; - $block = $xor; - } else if (strlen($block) == $block_size) { - $xor = $this->_encryptBlock($block); - } - } if ($this->continuousBuffer) { - $this->decryptIV = $block; + $iv = &$this->decryptIV; + $pos = &$buffer['pos']; + } else { + $iv = $this->decryptIV; + $pos = 0; + } + $len = strlen($ciphertext); + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = $block_size - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; + } + // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize + $plaintext = substr($iv, $orig_pos) ^ $ciphertext; + $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i); + } + while ($len >= $block_size) { + $iv = $this->_encryptBlock($iv); + $cb = substr($ciphertext, $i, $block_size); + $plaintext.= $iv ^ $cb; + $iv = $cb; + $len-= $block_size; + $i+= $block_size; + } + if ($len) { + $iv = $this->_encryptBlock($iv); + $plaintext.= $iv ^ substr($ciphertext, $i); + $iv = substr_replace($iv, substr($ciphertext, $i), 0, $len); + $pos = $len; } break; case CRYPT_RIJNDAEL_MODE_OFB: $xor = $this->decryptIV; - if (strlen($buffer)) { + if (strlen($buffer['xor'])) { for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { $xor = $this->_encryptBlock($xor); - $buffer.= $xor; - $key = $this->_string_shift($buffer, $block_size); + $buffer['xor'].= $xor; + $key = $this->_string_shift($buffer['xor'], $block_size); $plaintext.= substr($ciphertext, $i, $block_size) ^ $key; } } else { @@ -932,7 +953,7 @@ class Crypt_Rijndael { if ($this->continuousBuffer) { $this->decryptIV = $xor; if ($start = strlen($ciphertext) % $block_size) { - $buffer = substr($key, $start) . $buffer; + $buffer['xor'] = substr($key, $start) . $buffer['xor']; } } } @@ -962,9 +983,9 @@ class Crypt_Rijndael { $c = $this->c; // addRoundKey - $i = 0; + $i = -1; foreach ($words as $word) { - $state[] = $word ^ $w[0][$i++]; + $state[] = $word ^ $w[0][++$i]; } // fips-197.pdf#page=19, "Figure 5. Pseudo Code for the Cipher", states that this loop has four components - @@ -976,31 +997,28 @@ class Crypt_Rijndael { // [1] http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.v316.pdf $temp = array(); - for ($round = 1; $round < $Nr; $round++) { + for ($round = 1; $round < $Nr; ++$round) { $i = 0; // $c[0] == 0 $j = $c[1]; $k = $c[2]; $l = $c[3]; - while ($i < $this->Nb) { - $temp[$i] = $t0[$state[$i] & 0xFF000000] ^ - $t1[$state[$j] & 0x00FF0000] ^ - $t2[$state[$k] & 0x0000FF00] ^ - $t3[$state[$l] & 0x000000FF] ^ + while ($i < $Nb) { + $temp[$i] = $t0[$state[$i] >> 24 & 0x000000FF] ^ + $t1[$state[$j] >> 16 & 0x000000FF] ^ + $t2[$state[$k] >> 8 & 0x000000FF] ^ + $t3[$state[$l] & 0x000000FF] ^ $w[$round][$i]; - $i++; + ++$i; $j = ($j + 1) % $Nb; $k = ($k + 1) % $Nb; $l = ($l + 1) % $Nb; } - - for ($i = 0; $i < $Nb; $i++) { - $state[$i] = $temp[$i]; - } + $state = $temp; } // subWord - for ($i = 0; $i < $Nb; $i++) { + for ($i = 0; $i < $Nb; ++$i) { $state[$i] = $this->_subWord($state[$i]); } @@ -1009,22 +1027,38 @@ class Crypt_Rijndael { $j = $c[1]; $k = $c[2]; $l = $c[3]; - while ($i < $this->Nb) { - $temp[$i] = ($state[$i] & 0xFF000000) ^ - ($state[$j] & 0x00FF0000) ^ - ($state[$k] & 0x0000FF00) ^ + while ($i < $Nb) { + $temp[$i] = ($state[$i] & 0xFF000000) ^ + ($state[$j] & 0x00FF0000) ^ + ($state[$k] & 0x0000FF00) ^ ($state[$l] & 0x000000FF) ^ $w[$Nr][$i]; - $i++; + ++$i; $j = ($j + 1) % $Nb; $k = ($k + 1) % $Nb; $l = ($l + 1) % $Nb; } + + // 100% ugly switch/case code... but ~5% faster (meaning: ~half second faster de/encrypting 1MB text, tested with php5.4.9 on linux/32bit with an AMD Athlon II P360 CPU) then the commented smart code below. Don't know it's worth or not + switch ($Nb) { + case 8: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]); + case 7: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]); + case 6: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]); + case 5: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]); + default: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]); + } + /* $state = $temp; array_unshift($state, 'N*'); return call_user_func_array('pack', $state); + */ } /** @@ -1039,7 +1073,6 @@ class Crypt_Rijndael { $state = array(); $words = unpack('N*word', $in); - $num_states = count($state); $dw = $this->dw; $dt0 = $this->dt0; $dt1 = $this->dt1; @@ -1050,33 +1083,30 @@ class Crypt_Rijndael { $c = $this->c; // addRoundKey - $i = 0; + $i = -1; foreach ($words as $word) { - $state[] = $word ^ $dw[$Nr][$i++]; + $state[] = $word ^ $dw[$Nr][++$i]; } $temp = array(); - for ($round = $Nr - 1; $round > 0; $round--) { + for ($round = $Nr - 1; $round > 0; --$round) { $i = 0; // $c[0] == 0 $j = $Nb - $c[1]; $k = $Nb - $c[2]; $l = $Nb - $c[3]; while ($i < $Nb) { - $temp[$i] = $dt0[$state[$i] & 0xFF000000] ^ - $dt1[$state[$j] & 0x00FF0000] ^ - $dt2[$state[$k] & 0x0000FF00] ^ - $dt3[$state[$l] & 0x000000FF] ^ + $temp[$i] = $dt0[$state[$i] >> 24 & 0x000000FF] ^ + $dt1[$state[$j] >> 16 & 0x000000FF] ^ + $dt2[$state[$k] >> 8 & 0x000000FF] ^ + $dt3[$state[$l] & 0x000000FF] ^ $dw[$round][$i]; - $i++; + ++$i; $j = ($j + 1) % $Nb; $k = ($k + 1) % $Nb; $l = ($l + 1) % $Nb; } - - for ($i = 0; $i < $Nb; $i++) { - $state[$i] = $temp[$i]; - } + $state = $temp; } // invShiftRows + invSubWord + addRoundKey @@ -1091,17 +1121,31 @@ class Crypt_Rijndael { ($state[$j] & 0x00FF0000) | ($state[$k] & 0x0000FF00) | ($state[$l] & 0x000000FF)); - $i++; + ++$i; $j = ($j + 1) % $Nb; $k = ($k + 1) % $Nb; $l = ($l + 1) % $Nb; } + switch ($Nb) { + case 8: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]); + case 7: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]); + case 6: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]); + case 5: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]); + default: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]); + } + /* $state = $temp; array_unshift($state, 'N*'); return call_user_func_array('pack', $state); + */ } /** @@ -1201,10 +1245,10 @@ class Crypt_Rijndael { $j = 0; while ($j < $this->Nb) { $dw = $this->_subWord($this->w[$row][$j]); - $temp[$j] = $this->dt0[$dw & 0xFF000000] ^ - $this->dt1[$dw & 0x00FF0000] ^ - $this->dt2[$dw & 0x0000FF00] ^ - $this->dt3[$dw & 0x000000FF]; + $temp[$j] = $this->dt0[$dw >> 24 & 0x000000FF] ^ + $this->dt1[$dw >> 16 & 0x000000FF] ^ + $this->dt2[$dw >> 8 & 0x000000FF] ^ + $this->dt3[$dw & 0x000000FF]; $j++; } $this->dw[$row] = $temp; @@ -1255,17 +1299,18 @@ class Crypt_Rijndael { $sbox3 = array(); for ($i = 0; $i < 256; $i++) { - $sbox1[$i << 8] = $sbox0[$i] << 8; - $sbox2[$i << 16] = $sbox0[$i] << 16; - $sbox3[$i << 24] = $sbox0[$i] << 24; + $sbox1[] = $sbox0[$i] << 8; + $sbox2[] = $sbox0[$i] << 16; + $sbox3[] = $sbox0[$i] << 24; } } - return $sbox0[$word & 0x000000FF] | - $sbox1[$word & 0x0000FF00] | - $sbox2[$word & 0x00FF0000] | - $sbox3[$word & 0xFF000000]; + return $sbox0[$word & 0x000000FF] | + $sbox1[$word >> 8 & 0x000000FF] | + $sbox2[$word >> 16 & 0x000000FF] | + $sbox3[$word >> 24 & 0x000000FF]; } + /** * Performs inverse S-Box substitutions @@ -1301,16 +1346,16 @@ class Crypt_Rijndael { $sbox3 = array(); for ($i = 0; $i < 256; $i++) { - $sbox1[$i << 8] = $sbox0[$i] << 8; - $sbox2[$i << 16] = $sbox0[$i] << 16; - $sbox3[$i << 24] = $sbox0[$i] << 24; + $sbox1[] = $sbox0[$i] << 8; + $sbox2[] = $sbox0[$i] << 16; + $sbox3[] = $sbox0[$i] << 24; } } - return $sbox0[$word & 0x000000FF] | - $sbox1[$word & 0x0000FF00] | - $sbox2[$word & 0x00FF0000] | - $sbox3[$word & 0xFF000000]; + return $sbox0[$word & 0x000000FF] | + $sbox1[$word >> 8 & 0x000000FF] | + $sbox2[$word >> 16 & 0x000000FF] | + $sbox3[$word >> 24 & 0x000000FF]; } /** @@ -1365,7 +1410,7 @@ class Crypt_Rijndael { if ($length % $this->block_size == 0) { return $text; } else { - $this->_handle_error("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size})"); + user_error("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size})"); $this->padding = true; } } @@ -1454,6 +1499,8 @@ class Crypt_Rijndael { $this->continuousBuffer = false; $this->encryptIV = $this->iv; $this->decryptIV = $this->iv; + $this->enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0); + $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0); } /** @@ -1472,24 +1519,6 @@ class Crypt_Rijndael { $string = substr($string, $index); return $substr; } - - /** - * Error Handler - * - * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. - * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. - * - * @param String $string - * @access private - */ - function _handle_error($err_msg) { - if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { - $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; - throw(new $class($err_msg)); - } else { - user_error($err_msg); - } - } } // vim: ts=4:sw=4:et: diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/TripleDES.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/TripleDES.php index faf8c18ade..3b4c8c3622 100644 --- a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/TripleDES.php +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/TripleDES.php @@ -212,19 +212,19 @@ class Crypt_TripleDES { * Encryption buffer for CTR, OFB and CFB modes * * @see Crypt_TripleDES::encrypt() - * @var String + * @var Array * @access private */ - var $enbuffer = ''; + var $enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true); /** * Decryption buffer for CTR, OFB and CFB modes * * @see Crypt_TripleDES::decrypt() - * @var String + * @var Array * @access private */ - var $debuffer = ''; + var $debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'demcrypt_init' => true); /** * mcrypt resource for CFB mode @@ -287,6 +287,7 @@ class Crypt_TripleDES { break; case CRYPT_DES_MODE_CFB: $this->mode = 'ncfb'; + $this->ecb = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, ''); break; case CRYPT_DES_MODE_OFB: $this->mode = MCRYPT_MODE_NOFB; @@ -296,6 +297,8 @@ class Crypt_TripleDES { $this->paddable = true; $this->mode = MCRYPT_MODE_CBC; } + $this->enmcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, ''); + $this->demcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, ''); break; default: @@ -384,7 +387,7 @@ class Crypt_TripleDES { if (!isset($hash)) { $hash = 'sha1'; } - // WPA and WPA use the SSID as the salt + // WPA and WPA2 use the SSID as the salt if (!isset($salt)) { $salt = 'phpseclib'; } @@ -444,29 +447,24 @@ class Crypt_TripleDES { * @see Crypt_TripleDES::decrypt() * @see Crypt_TripleDES::encrypt() * @access private - * @param Integer $length * @param String $iv */ - function _generate_xor($length, &$iv) + function _generate_xor(&$iv) { - $xor = ''; - $num_blocks = ($length + 7) >> 3; - for ($i = 0; $i < $num_blocks; $i++) { - $xor.= $iv; - for ($j = 4; $j <= 8; $j+=4) { - $temp = substr($iv, -$j, 4); - switch ($temp) { - case "\xFF\xFF\xFF\xFF": - $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4); - break; - case "\x7F\xFF\xFF\xFF": - $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4); - break 2; - default: - extract(unpack('Ncount', $temp)); - $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4); - break 2; - } + $xor = $iv; + for ($j = 4; $j <= 8; $j+=4) { + $temp = substr($iv, -$j, 4); + switch ($temp) { + case "\xFF\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4); + break; + case "\x7F\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4); + break 2; + default: + extract(unpack('Ncount', $temp)); + $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4); + break 2; } } @@ -494,48 +492,64 @@ class Crypt_TripleDES { if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) { if ($this->enchanged) { - if (!isset($this->enmcrypt)) { - $this->enmcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, ''); - } mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV); - if ($this->mode != 'ncfb') { - $this->enchanged = false; + if ($this->mode == 'ncfb') { + mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0"); } + $this->enchanged = false; } - if ($this->mode != 'ncfb') { + if ($this->mode != 'ncfb' || !$this->continuousBuffer) { $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext); } else { - if ($this->enchanged) { - $this->ecb = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, ''); - mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0"); - $this->enchanged = false; - } - - if (strlen($this->enbuffer)) { - $ciphertext = $plaintext ^ substr($this->encryptIV, strlen($this->enbuffer)); - $this->enbuffer.= $ciphertext; - if (strlen($this->enbuffer) == 8) { - $this->encryptIV = $this->enbuffer; - $this->enbuffer = ''; - mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV); + $iv = &$this->encryptIV; + $pos = &$this->enbuffer['pos']; + $len = strlen($plaintext); + $ciphertext = ''; + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = 8 - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; } - $plaintext = substr($plaintext, strlen($ciphertext)); - } else { - $ciphertext = ''; + $ciphertext = substr($iv, $orig_pos) ^ $plaintext; + $iv = substr_replace($iv, $ciphertext, $orig_pos, $i); + $this->enbuffer['enmcrypt_init'] = true; } - - $last_pos = strlen($plaintext) & 0xFFFFFFF8; - $ciphertext.= $last_pos ? mcrypt_generic($this->enmcrypt, substr($plaintext, 0, $last_pos)) : ''; - - if (strlen($plaintext) & 0x7) { - if (strlen($ciphertext)) { - $this->encryptIV = substr($ciphertext, -8); + if ($len >= 8) { + if ($this->enbuffer['enmcrypt_init'] === false || $len > 950) { + if ($this->enbuffer['enmcrypt_init'] === true) { + mcrypt_generic_init($this->enmcrypt, $this->key, $iv); + $this->enbuffer['enmcrypt_init'] = false; + } + $ciphertext.= mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % 8)); + $iv = substr($ciphertext, -8); + $i = strlen($ciphertext); + $len%= 8; + } else { + while ($len >= 8) { + $iv = mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, 8); + $ciphertext.= $iv; + $len-= 8; + $i+= 8; + } } - $this->encryptIV = mcrypt_generic($this->ecb, $this->encryptIV); - $this->enbuffer = substr($plaintext, $last_pos) ^ $this->encryptIV; - $ciphertext.= $this->enbuffer; + } + if ($len) { + $iv = mcrypt_generic($this->ecb, $iv); + $block = $iv ^ substr($plaintext, $i); + $iv = substr_replace($iv, $block, 0, $len); + $ciphertext.= $block; + $pos = $len; } + return $ciphertext; } if (!$this->continuousBuffer) { @@ -591,7 +605,7 @@ class Crypt_TripleDES { if (strlen($buffer['encrypted'])) { for ($i = 0; $i < strlen($plaintext); $i+=8) { $block = substr($plaintext, $i, 8); - $key = $this->_generate_xor(8, $xor); + $key = $this->_generate_xor($xor); $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT); $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT); $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT); @@ -602,7 +616,7 @@ class Crypt_TripleDES { } else { for ($i = 0; $i < strlen($plaintext); $i+=8) { $block = substr($plaintext, $i, 8); - $key = $this->_generate_xor(8, $xor); + $key = $this->_generate_xor($xor); $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT); $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT); $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT); @@ -612,12 +626,12 @@ class Crypt_TripleDES { if ($this->continuousBuffer) { $this->encryptIV = $xor; if ($start = strlen($plaintext) & 7) { - $buffer['encrypted'] = substr($key, $start) . $buffer; + $buffer['encrypted'] = substr($key, $start) . $buffer['encrypted']; } } break; case CRYPT_DES_MODE_CFB: - if (!empty($buffer['xor'])) { + if (strlen($buffer['xor'])) { $ciphertext = $plaintext ^ $buffer['xor']; $iv = $buffer['encrypted'] . $ciphertext; $start = strlen($ciphertext); @@ -651,13 +665,13 @@ class Crypt_TripleDES { break; case CRYPT_DES_MODE_OFB: $xor = $this->encryptIV; - if (strlen($buffer)) { + if (strlen($buffer['xor'])) { for ($i = 0; $i < strlen($plaintext); $i+=8) { $xor = $des[0]->_processBlock($xor, CRYPT_DES_ENCRYPT); $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT); $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT); - $buffer.= $xor; - $key = $this->_string_shift($buffer, 8); + $buffer['xor'].= $xor; + $key = $this->_string_shift($buffer['xor'], 8); $ciphertext.= substr($plaintext, $i, 8) ^ $key; } } else { @@ -672,7 +686,7 @@ class Crypt_TripleDES { if ($this->continuousBuffer) { $this->encryptIV = $xor; if ($start = strlen($plaintext) & 7) { - $buffer = substr($key, $start) . $buffer; + $buffer['xor'] = substr($key, $start) . $buffer['xor']; } } } @@ -702,50 +716,49 @@ class Crypt_TripleDES { if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) { if ($this->dechanged) { - if (!isset($this->demcrypt)) { - $this->demcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, ''); - } mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV); - if ($this->mode != 'ncfb') { - $this->dechanged = false; + if ($this->mode == 'ncfb') { + mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0"); } + $this->dechanged = false; } - if ($this->mode != 'ncfb') { + if ($this->mode != 'ncfb' || !$this->continuousBuffer) { $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext); } else { - if ($this->dechanged) { - $this->ecb = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, ''); - mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0"); - $this->dechanged = false; - } - - if (strlen($this->debuffer)) { - $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($this->debuffer)); - - $this->debuffer.= substr($ciphertext, 0, strlen($plaintext)); - if (strlen($this->debuffer) == 8) { - $this->decryptIV = $this->debuffer; - $this->debuffer = ''; - mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV); + $iv = &$this->decryptIV; + $pos = &$this->debuffer['pos']; + $len = strlen($ciphertext); + $plaintext = ''; + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = 8 - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; } - $ciphertext = substr($ciphertext, strlen($plaintext)); - } else { - $plaintext = ''; + $plaintext = substr($iv, $orig_pos) ^ $ciphertext; + $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i); } - - $last_pos = strlen($ciphertext) & 0xFFFFFFF8; - $plaintext.= $last_pos ? mdecrypt_generic($this->demcrypt, substr($ciphertext, 0, $last_pos)) : ''; - - if (strlen($ciphertext) & 0x7) { - if (strlen($plaintext)) { - $this->decryptIV = substr($ciphertext, $last_pos - 8, 8); - } - $this->decryptIV = mcrypt_generic($this->ecb, $this->decryptIV); - $this->debuffer = substr($ciphertext, $last_pos); - $plaintext.= $this->debuffer ^ $this->decryptIV; + if ($len >= 8) { + $cb = substr($ciphertext, $i, $len - $len % 8); + $plaintext.= mcrypt_generic($this->ecb, $iv . $cb) ^ $cb; + $iv = substr($cb, -8); + $len%= 8; + } + if ($len) { + $iv = mcrypt_generic($this->ecb, $iv); + $cb = substr($ciphertext, -$len); + $plaintext.= $iv ^ $cb; + $iv = substr_replace($iv, $cb, 0, $len); + $pos = $len; } - return $plaintext; } @@ -764,7 +777,7 @@ class Crypt_TripleDES { $des = $this->des; - $buffer = &$this->enbuffer; + $buffer = &$this->debuffer; $continuousBuffer = $this->continuousBuffer; $plaintext = ''; switch ($this->mode) { @@ -796,7 +809,7 @@ class Crypt_TripleDES { if (strlen($buffer['ciphertext'])) { for ($i = 0; $i < strlen($ciphertext); $i+=8) { $block = substr($ciphertext, $i, 8); - $key = $this->_generate_xor(8, $xor); + $key = $this->_generate_xor($xor); $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT); $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT); $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT); @@ -807,7 +820,7 @@ class Crypt_TripleDES { } else { for ($i = 0; $i < strlen($ciphertext); $i+=8) { $block = substr($ciphertext, $i, 8); - $key = $this->_generate_xor(8, $xor); + $key = $this->_generate_xor($xor); $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT); $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT); $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT); @@ -822,17 +835,19 @@ class Crypt_TripleDES { } break; case CRYPT_DES_MODE_CFB: - if (!empty($buffer['ciphertext'])) { + if (strlen($buffer['ciphertext'])) { $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($buffer['ciphertext'])); $buffer['ciphertext'].= substr($ciphertext, 0, strlen($plaintext)); - if (strlen($buffer['ciphertext']) == 8) { + if (strlen($buffer['ciphertext']) != 8) { + $block = $this->decryptIV; + } else { + $block = $buffer['ciphertext']; $xor = $des[0]->_processBlock($buffer['ciphertext'], CRYPT_DES_ENCRYPT); $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT); $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT); $buffer['ciphertext'] = ''; } $start = strlen($plaintext); - $block = $this->decryptIV; } else { $plaintext = ''; $xor = $des[0]->_processBlock($this->decryptIV, CRYPT_DES_ENCRYPT); @@ -859,13 +874,13 @@ class Crypt_TripleDES { break; case CRYPT_DES_MODE_OFB: $xor = $this->decryptIV; - if (strlen($buffer)) { + if (strlen($buffer['xor'])) { for ($i = 0; $i < strlen($ciphertext); $i+=8) { $xor = $des[0]->_processBlock($xor, CRYPT_DES_ENCRYPT); $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT); $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT); - $buffer.= $xor; - $key = $this->_string_shift($buffer, 8); + $buffer['xor'].= $xor; + $key = $this->_string_shift($buffer['xor'], 8); $plaintext.= substr($ciphertext, $i, 8) ^ $key; } } else { @@ -880,7 +895,7 @@ class Crypt_TripleDES { if ($this->continuousBuffer) { $this->decryptIV = $xor; if ($start = strlen($ciphertext) & 7) { - $buffer = substr($key, $start) . $buffer; + $buffer['xor'] = substr($key, $start) . $buffer['xor']; } } } @@ -948,6 +963,10 @@ class Crypt_TripleDES { $this->continuousBuffer = false; $this->encryptIV = $this->iv; $this->decryptIV = $this->iv; + $this->enchanged = true; + $this->dechanged = true; + $this->enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true); + $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'demcrypt_init' => true); if ($this->mode == CRYPT_DES_MODE_3CBC) { $this->des[0]->disableContinuousBuffer(); diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/File/ANSI.php b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ANSI.php index 4f500f9b81..29ad949e10 100644 --- a/apps/files_external/3rdparty/phpseclib/phpseclib/File/ANSI.php +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ANSI.php @@ -409,7 +409,7 @@ class File_ANSI { case 47: $back = 'white'; break; default: - $this->_handle_error('Unsupported attribute: ' . $mod); + user_error('Unsupported attribute: ' . $mod); $this->ansi = ''; break 2; } @@ -537,22 +537,4 @@ class File_ANSI { return '
    ' . $scrollback . '
    '; } - - /** - * Error Handler - * - * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. - * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. - * - * @param String $string - * @access private - */ - function _handle_error($err_msg) { - if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { - $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; - throw(new $class($err_msg)); - } else { - user_error($err_msg); - } - } } diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/File/ASN1.php b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ASN1.php index 201af9082d..766c6e7ebf 100644 --- a/apps/files_external/3rdparty/phpseclib/phpseclib/File/ASN1.php +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ASN1.php @@ -959,7 +959,7 @@ class File_ASN1 { case FILE_ASN1_TYPE_OBJECT_IDENTIFIER: $oid = preg_match('#(?:\d+\.)+#', $source) ? $source : array_search($source, $this->oids); if ($oid === false) { - $this->_handle_error('Invalid OID'); + user_error('Invalid OID'); return false; } $value = ''; @@ -1012,7 +1012,7 @@ class File_ASN1 { $filters = $filters[$part]; } if ($filters === false) { - $this->_handle_error('No filters defined for ' . implode('/', $loc)); + user_error('No filters defined for ' . implode('/', $loc)); return false; } return $this->_encode_der($source, $filters + $mapping); @@ -1036,7 +1036,7 @@ class File_ASN1 { $value = $source ? "\xFF" : "\x00"; break; default: - $this->_handle_error('Mapping provides no type definition for ' . implode('/', $this->location)); + user_error('Mapping provides no type definition for ' . implode('/', $this->location)); return false; } @@ -1274,22 +1274,4 @@ class File_ASN1 { } return $out; } - - /** - * Error Handler - * - * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. - * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. - * - * @param String $string - * @access private - */ - function _handle_error($err_msg) { - if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { - $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; - throw(new $class($err_msg)); - } else { - user_error($err_msg); - } - } } diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/File/X509.php b/apps/files_external/3rdparty/phpseclib/phpseclib/File/X509.php index 9b19b59514..278da62e26 100644 --- a/apps/files_external/3rdparty/phpseclib/phpseclib/File/X509.php +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/File/X509.php @@ -1647,7 +1647,7 @@ class File_X509 { $map = $this->_getMapping($id); if (is_bool($map)) { if (!$map) { - $this->_handle_error($id . ' is not a currently supported extension'); + user_error($id . ' is not a currently supported extension'); unset($extensions[$i]); } } else { @@ -3156,8 +3156,8 @@ class File_X509 { return false; } - $startDate = !empty($this->startDate) ? $this->startDate : @date('M j H:i:s Y T'); - $endDate = !empty($this->endDate) ? $this->endDate : @date('M j H:i:s Y T', strtotime('+1 year')); + $startDate = !empty($this->startDate) ? $this->startDate : @date('D, d M y H:i:s O'); + $endDate = !empty($this->endDate) ? $this->endDate : @date('D, d M y H:i:s O', strtotime('+1 year')); $serialNumber = !empty($this->serialNumber) ? $this->serialNumber : new Math_BigInteger(); $this->currentCert = array( @@ -3329,7 +3329,7 @@ class File_X509 { $currentCert = isset($this->currentCert) ? $this->currentCert : NULL; $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject : NULL; - $thisUpdate = !empty($this->startDate) ? $this->startDate : @date('M j H:i:s Y T'); + $thisUpdate = !empty($this->startDate) ? $this->startDate : @date('D, d M y H:i:s O'); if (isset($crl->currentCert) && is_array($crl->currentCert) && isset($crl->currentCert['tbsCertList'])) { $this->currentCert = $crl->currentCert; @@ -3479,7 +3479,7 @@ class File_X509 { */ function setStartDate($date) { - $this->startDate = @date('M j H:i:s Y T', @strtotime($date)); + $this->startDate = @date('D, d M y H:i:s O', @strtotime($date)); } /** @@ -3503,7 +3503,7 @@ class File_X509 { $temp = chr(FILE_ASN1_TYPE_GENERALIZED_TIME) . $asn1->_encodeLength(strlen($temp)) . $temp; $this->endDate = new File_ASN1_Element($temp); } else { - $this->endDate = @date('M j H:i:s Y T', @strtotime($date)); + $this->endDate = @date('D, d M y H:i:s O', @strtotime($date)); } } @@ -4131,7 +4131,7 @@ class File_X509 { $i = count($rclist); $rclist[] = array('userCertificate' => $serial, - 'revocationDate' => array('generalTime' => @date('M j H:i:s Y T'))); + 'revocationDate' => array('generalTime' => @date('D, d M y H:i:s O'))); return $i; } @@ -4320,22 +4320,4 @@ class File_X509 { return false; } - - /** - * Error Handler - * - * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. - * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. - * - * @param String $string - * @access private - */ - function _handle_error($err_msg) { - if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { - $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; - throw(new $class($err_msg)); - } else { - user_error($err_msg); - } - } } diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Math/BigInteger.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Math/BigInteger.php index 04bcdf4099..d048cb032c 100644 --- a/apps/files_external/3rdparty/phpseclib/phpseclib/Math/BigInteger.php +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Math/BigInteger.php @@ -302,7 +302,7 @@ class Math_BigInteger { } // '0' counts as empty() but when the base is 256 '0' is equal to ord('0') or 48 - // '0' is the only value like this per http://php.net/empty + // '0' is the only value like this per http://php.net/empty if (empty($x) && (abs($base) != 256 || $x !== '0')) { return; } diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP.php index bcef06d1d7..8db087d3d9 100644 --- a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP.php +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP.php @@ -399,7 +399,7 @@ class Net_SFTP extends Net_SSH2 { $response = $this->_get_sftp_packet(); if ($this->packet_type != NET_SFTP_VERSION) { - $this->_handle_error('Expected SSH_FXP_VERSION'); + user_error('Expected SSH_FXP_VERSION'); return false; } @@ -588,7 +588,7 @@ class Net_SFTP extends Net_SSH2 { $this->_logError($response); return false; default: - $this->_handle_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS'); return false; } @@ -645,7 +645,7 @@ class Net_SFTP extends Net_SSH2 { $this->_logError($response); return false; default: - $this->_handle_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); return false; } @@ -655,7 +655,7 @@ class Net_SFTP extends Net_SSH2 { $response = $this->_get_sftp_packet(); if ($this->packet_type != NET_SFTP_STATUS) { - $this->_handle_error('Expected SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_STATUS'); return false; } @@ -736,7 +736,7 @@ class Net_SFTP extends Net_SSH2 { $this->_logError($response); return false; default: - $this->_handle_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); return false; } @@ -785,7 +785,7 @@ class Net_SFTP extends Net_SSH2 { } break 2; default: - $this->_handle_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS'); return false; } } @@ -798,7 +798,7 @@ class Net_SFTP extends Net_SSH2 { // -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.3 $response = $this->_get_sftp_packet(); if ($this->packet_type != NET_SFTP_STATUS) { - $this->_handle_error('Expected SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_STATUS'); return false; } @@ -1001,7 +1001,7 @@ class Net_SFTP extends Net_SSH2 { return false; } - $this->_handle_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS'); return false; } @@ -1094,7 +1094,7 @@ class Net_SFTP extends Net_SSH2 { */ $response = $this->_get_sftp_packet(); if ($this->packet_type != NET_SFTP_STATUS) { - $this->_handle_error('Expected SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_STATUS'); return false; } @@ -1121,7 +1121,7 @@ class Net_SFTP extends Net_SSH2 { return false; } - $this->_handle_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS'); return false; } @@ -1254,7 +1254,7 @@ class Net_SFTP extends Net_SSH2 { $response = $this->_get_sftp_packet(); if ($this->packet_type != NET_SFTP_STATUS) { - $this->_handle_error('Expected SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_STATUS'); return false; } @@ -1293,7 +1293,7 @@ class Net_SFTP extends Net_SSH2 { $response = $this->_get_sftp_packet(); if ($this->packet_type != NET_SFTP_STATUS) { - $this->_handle_error('Expected SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_STATUS'); return false; } @@ -1370,7 +1370,7 @@ class Net_SFTP extends Net_SSH2 { $this->_logError($response); return false; default: - $this->_handle_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); return false; } @@ -1379,7 +1379,7 @@ class Net_SFTP extends Net_SSH2 { // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.2.3 if ($mode & NET_SFTP_LOCAL_FILE) { if (!is_file($data)) { - $this->_handle_error("$data is not a valid file"); + user_error("$data is not a valid file"); return false; } $fp = @fopen($data, 'rb'); @@ -1430,7 +1430,7 @@ class Net_SFTP extends Net_SSH2 { $response = $this->_get_sftp_packet(); if ($this->packet_type != NET_SFTP_STATUS) { - $this->_handle_error('Expected SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_STATUS'); return false; } @@ -1458,7 +1458,7 @@ class Net_SFTP extends Net_SSH2 { while ($i--) { $response = $this->_get_sftp_packet(); if ($this->packet_type != NET_SFTP_STATUS) { - $this->_handle_error('Expected SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_STATUS'); return false; } @@ -1509,7 +1509,7 @@ class Net_SFTP extends Net_SSH2 { $this->_logError($response); return false; default: - $this->_handle_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); return false; } @@ -1548,7 +1548,7 @@ class Net_SFTP extends Net_SSH2 { $this->_logError($response); break 2; default: - $this->_handle_error('Expected SSH_FXP_DATA or SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_DATA or SSH_FXP_STATUS'); if ($local_file !== false) { fclose($fp); } @@ -1575,7 +1575,7 @@ class Net_SFTP extends Net_SSH2 { $response = $this->_get_sftp_packet(); if ($this->packet_type != NET_SFTP_STATUS) { - $this->_handle_error('Expected SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_STATUS'); return false; } @@ -1618,7 +1618,7 @@ class Net_SFTP extends Net_SSH2 { $response = $this->_get_sftp_packet(); if ($this->packet_type != NET_SFTP_STATUS) { - $this->_handle_error('Expected SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_STATUS'); return false; } @@ -1737,7 +1737,7 @@ class Net_SFTP extends Net_SSH2 { $response = $this->_get_sftp_packet(); if ($this->packet_type != NET_SFTP_STATUS) { - $this->_handle_error('Expected SSH_FXP_STATUS'); + user_error('Expected SSH_FXP_STATUS'); return false; } diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php index 50add201b2..8f5c79938e 100644 --- a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php @@ -246,6 +246,14 @@ define('NET_SSH1_LOG_SIMPLE', 1); * Returns the message content */ define('NET_SSH1_LOG_COMPLEX', 2); +/** + * Outputs the content real-time + */ +define('NET_SSH2_LOG_REALTIME', 3); +/** + * Dumps the content real-time to a file + */ +define('NET_SSH2_LOG_REALTIME_FILE', 4); /**#@-*/ /**#@+ @@ -421,6 +429,33 @@ class Net_SSH1 { */ var $message_log = array(); + /** + * Real-time log file pointer + * + * @see Net_SSH1::_append_log() + * @var Resource + * @access private + */ + var $realtime_log_file; + + /** + * Real-time log file size + * + * @see Net_SSH1::_append_log() + * @var Integer + * @access private + */ + var $realtime_log_size; + + /** + * Real-time log file wrap boolean + * + * @see Net_SSH1::_append_log() + * @var Boolean + * @access private + */ + var $realtime_log_wrap; + /** * Interactive Buffer * @@ -430,6 +465,22 @@ class Net_SSH1 { */ var $interactiveBuffer = ''; + /** + * Timeout + * + * @see Net_SSH1::setTimeout() + * @access private + */ + var $timeout; + + /** + * Current Timeout + * + * @see Net_SSH2::_get_channel_packet() + * @access private + */ + var $curTimeout; + /** * Default Constructor. * @@ -467,28 +518,23 @@ class Net_SSH1 { $this->fsock = @fsockopen($host, $port, $errno, $errstr, $timeout); if (!$this->fsock) { - $this->_handle_error(rtrim("Cannot connect to $host. Error $errno. $errstr")); + user_error(rtrim("Cannot connect to $host. Error $errno. $errstr")); return; } $this->server_identification = $init_line = fgets($this->fsock, 255); if (defined('NET_SSH1_LOGGING')) { - $this->protocol_flags_log[] = '<-'; - $this->protocol_flags_log[] = '->'; - - if (NET_SSH1_LOGGING == NET_SSH1_LOG_COMPLEX) { - $this->message_log[] = $this->server_identification; - $this->message_log[] = $this->identifier . "\r\n"; - } + $this->_append_log('<-', $this->server_identification); + $this->_append_log('->', $this->identifier . "\r\n"); } if (!preg_match('#SSH-([0-9\.]+)-(.+)#', $init_line, $parts)) { - $this->_handle_error('Can only connect to SSH servers'); + user_error('Can only connect to SSH servers'); return; } if ($parts[1][0] != 1) { - $this->_handle_error("Cannot connect to SSH $parts[1] servers"); + user_error("Cannot connect to SSH $parts[1] servers"); return; } @@ -496,7 +542,7 @@ class Net_SSH1 { $response = $this->_get_binary_packet(); if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_PUBLIC_KEY) { - $this->_handle_error('Expected SSH_SMSG_PUBLIC_KEY'); + user_error('Expected SSH_SMSG_PUBLIC_KEY'); return; } @@ -581,7 +627,7 @@ class Net_SSH1 { $data = pack('C2a*na*N', NET_SSH1_CMSG_SESSION_KEY, $cipher, $anti_spoofing_cookie, 8 * strlen($double_encrypted_session_key), $double_encrypted_session_key, 0); if (!$this->_send_binary_packet($data)) { - $this->_handle_error('Error sending SSH_CMSG_SESSION_KEY'); + user_error('Error sending SSH_CMSG_SESSION_KEY'); return; } @@ -611,7 +657,7 @@ class Net_SSH1 { $response = $this->_get_binary_packet(); if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_SUCCESS) { - $this->_handle_error('Expected SSH_SMSG_SUCCESS'); + user_error('Expected SSH_SMSG_SUCCESS'); return; } @@ -635,46 +681,65 @@ class Net_SSH1 { $data = pack('CNa*', NET_SSH1_CMSG_USER, strlen($username), $username); if (!$this->_send_binary_packet($data)) { - $this->_handle_error('Error sending SSH_CMSG_USER'); + user_error('Error sending SSH_CMSG_USER'); return false; } $response = $this->_get_binary_packet(); + if ($response === true) { + return false; + } if ($response[NET_SSH1_RESPONSE_TYPE] == NET_SSH1_SMSG_SUCCESS) { $this->bitmap |= NET_SSH1_MASK_LOGIN; return true; } else if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_FAILURE) { - $this->_handle_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE'); + user_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE'); return false; } $data = pack('CNa*', NET_SSH1_CMSG_AUTH_PASSWORD, strlen($password), $password); if (!$this->_send_binary_packet($data)) { - $this->_handle_error('Error sending SSH_CMSG_AUTH_PASSWORD'); + user_error('Error sending SSH_CMSG_AUTH_PASSWORD'); return false; } // remove the username and password from the last logged packet if (defined('NET_SSH1_LOGGING') && NET_SSH1_LOGGING == NET_SSH1_LOG_COMPLEX) { $data = pack('CNa*', NET_SSH1_CMSG_AUTH_PASSWORD, strlen('password'), 'password'); - $this->message_log[count($this->message_log) - 1] = $data; // zzzzz + $this->message_log[count($this->message_log) - 1] = $data; } $response = $this->_get_binary_packet(); + if ($response === true) { + return false; + } if ($response[NET_SSH1_RESPONSE_TYPE] == NET_SSH1_SMSG_SUCCESS) { $this->bitmap |= NET_SSH1_MASK_LOGIN; return true; } else if ($response[NET_SSH1_RESPONSE_TYPE] == NET_SSH1_SMSG_FAILURE) { return false; } else { - $this->_handle_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE'); + user_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE'); return false; } } + /** + * Set Timeout + * + * $ssh->exec('ping 127.0.0.1'); on a Linux host will never return and will run indefinitely. setTimeout() makes it so it'll timeout. + * Setting $timeout to false or 0 will mean there is no timeout. + * + * @param Mixed $timeout + */ + function setTimeout($timeout) + { + $this->timeout = $this->curTimeout = $timeout; + } + /** * Executes a command on a non-interactive shell, returns the output, and quits. * @@ -698,14 +763,14 @@ class Net_SSH1 { function exec($cmd, $block = true) { if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) { - $this->_handle_error('Operation disallowed prior to login()'); + user_error('Operation disallowed prior to login()'); return false; } $data = pack('CNa*', NET_SSH1_CMSG_EXEC_CMD, strlen($cmd), $cmd); if (!$this->_send_binary_packet($data)) { - $this->_handle_error('Error sending SSH_CMSG_EXEC_CMD'); + user_error('Error sending SSH_CMSG_EXEC_CMD'); return false; } @@ -716,10 +781,12 @@ class Net_SSH1 { $output = ''; $response = $this->_get_binary_packet(); - do { - $output.= substr($response[NET_SSH1_RESPONSE_DATA], 4); - $response = $this->_get_binary_packet(); - } while ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_EXITSTATUS); + if ($response !== false) { + do { + $output.= substr($response[NET_SSH1_RESPONSE_DATA], 4); + $response = $this->_get_binary_packet(); + } while (is_array($response) && $response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_EXITSTATUS); + } $data = pack('C', NET_SSH1_CMSG_EXIT_CONFIRMATION); @@ -750,21 +817,24 @@ class Net_SSH1 { $data = pack('CNa*N4C', NET_SSH1_CMSG_REQUEST_PTY, strlen('vt100'), 'vt100', 24, 80, 0, 0, NET_SSH1_TTY_OP_END); if (!$this->_send_binary_packet($data)) { - $this->_handle_error('Error sending SSH_CMSG_REQUEST_PTY'); + user_error('Error sending SSH_CMSG_REQUEST_PTY'); return false; } $response = $this->_get_binary_packet(); + if ($response === true) { + return false; + } if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_SUCCESS) { - $this->_handle_error('Expected SSH_SMSG_SUCCESS'); + user_error('Expected SSH_SMSG_SUCCESS'); return false; } $data = pack('C', NET_SSH1_CMSG_EXEC_SHELL); if (!$this->_send_binary_packet($data)) { - $this->_handle_error('Error sending SSH_CMSG_EXEC_SHELL'); + user_error('Error sending SSH_CMSG_EXEC_SHELL'); return false; } @@ -803,12 +873,12 @@ class Net_SSH1 { function read($expect, $mode = NET_SSH1_READ_SIMPLE) { if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) { - $this->_handle_error('Operation disallowed prior to login()'); + user_error('Operation disallowed prior to login()'); return false; } if (!($this->bitmap & NET_SSH1_MASK_SHELL) && !$this->_initShell()) { - $this->_handle_error('Unable to initiate an interactive shell session'); + user_error('Unable to initiate an interactive shell session'); return false; } @@ -816,13 +886,17 @@ class Net_SSH1 { while (true) { if ($mode == NET_SSH1_READ_REGEX) { preg_match($expect, $this->interactiveBuffer, $matches); - $match = $matches[0]; + $match = isset($matches[0]) ? $matches[0] : ''; } - $pos = strpos($this->interactiveBuffer, $match); + $pos = strlen($match) ? strpos($this->interactiveBuffer, $match) : false; if ($pos !== false) { return $this->_string_shift($this->interactiveBuffer, $pos + strlen($match)); } $response = $this->_get_binary_packet(); + + if ($response === true) { + return $this->_string_shift($this->interactiveBuffer, strlen($this->interactiveBuffer)); + } $this->interactiveBuffer.= substr($response[NET_SSH1_RESPONSE_DATA], 4); } } @@ -838,19 +912,19 @@ class Net_SSH1 { function interactiveWrite($cmd) { if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) { - $this->_handle_error('Operation disallowed prior to login()'); + user_error('Operation disallowed prior to login()'); return false; } if (!($this->bitmap & NET_SSH1_MASK_SHELL) && !$this->_initShell()) { - $this->_handle_error('Unable to initiate an interactive shell session'); + user_error('Unable to initiate an interactive shell session'); return false; } $data = pack('CNa*', NET_SSH1_CMSG_STDIN_DATA, strlen($cmd), $cmd); if (!$this->_send_binary_packet($data)) { - $this->_handle_error('Error sending SSH_CMSG_STDIN'); + user_error('Error sending SSH_CMSG_STDIN'); return false; } @@ -873,12 +947,12 @@ class Net_SSH1 { function interactiveRead() { if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) { - $this->_handle_error('Operation disallowed prior to login()'); + user_error('Operation disallowed prior to login()'); return false; } if (!($this->bitmap & NET_SSH1_MASK_SHELL) && !$this->_initShell()) { - $this->_handle_error('Unable to initiate an interactive shell session'); + user_error('Unable to initiate an interactive shell session'); return false; } @@ -926,8 +1000,11 @@ class Net_SSH1 { if ($this->bitmap) { $data = pack('C', NET_SSH1_CMSG_EOF); $this->_send_binary_packet($data); - + /* $response = $this->_get_binary_packet(); + if ($response === true) { + $response = array(NET_SSH1_RESPONSE_TYPE => -1); + } switch ($response[NET_SSH1_RESPONSE_TYPE]) { case NET_SSH1_SMSG_EXITSTATUS: $data = pack('C', NET_SSH1_CMSG_EXIT_CONFIRMATION); @@ -935,6 +1012,8 @@ class Net_SSH1 { default: $data = pack('CNa*', NET_SSH1_MSG_DISCONNECT, strlen($msg), $msg); } + */ + $data = pack('CNa*', NET_SSH1_MSG_DISCONNECT, strlen($msg), $msg); $this->_send_binary_packet($data); fclose($this->fsock); @@ -957,20 +1036,40 @@ class Net_SSH1 { function _get_binary_packet() { if (feof($this->fsock)) { - //$this->_handle_error('connection closed prematurely'); + //user_error('connection closed prematurely'); return false; } + if ($this->curTimeout) { + $read = array($this->fsock); + $write = $except = NULL; + + $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 + $sec = floor($this->curTimeout); + $usec = 1000000 * ($this->curTimeout - $sec); + // on windows this returns a "Warning: Invalid CRT parameters detected" error + if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) { + //$this->_disconnect('Timeout'); + return true; + } + $elapsed = strtok(microtime(), ' ') + strtok('') - $start; + $this->curTimeout-= $elapsed; + } + + $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 $temp = unpack('Nlength', fread($this->fsock, 4)); $padding_length = 8 - ($temp['length'] & 7); $length = $temp['length'] + $padding_length; - $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 - $raw = fread($this->fsock, $length); + while ($length > 0) { + $temp = fread($this->fsock, $length); + $raw.= $temp; + $length-= strlen($temp); + } $stop = strtok(microtime(), ' ') + strtok(''); - if ($this->crypto !== false) { + if (strlen($raw) && $this->crypto !== false) { $raw = $this->crypto->decrypt($raw); } @@ -981,7 +1080,7 @@ class Net_SSH1 { $temp = unpack('Ncrc', substr($raw, -4)); //if ( $temp['crc'] != $this->_crc($padding . $type . $data) ) { - // $this->_handle_error('Bad CRC in packet from server'); + // user_error('Bad CRC in packet from server'); // return false; //} @@ -989,11 +1088,9 @@ class Net_SSH1 { if (defined('NET_SSH1_LOGGING')) { $temp = isset($this->protocol_flags[$type]) ? $this->protocol_flags[$type] : 'UNKNOWN'; - $this->protocol_flags_log[] = '<- ' . $temp . - ' (' . round($stop - $start, 4) . 's)'; - if (NET_SSH1_LOGGING == NET_SSH1_LOG_COMPLEX) { - $this->message_log[] = $data; - } + $temp = '<- ' . $temp . + ' (' . round($stop - $start, 4) . 's)'; + $this->_append_log($temp, $data); } return array( @@ -1012,25 +1109,18 @@ class Net_SSH1 { * @return Boolean * @access private */ - function _send_binary_packet($data) { + function _send_binary_packet($data) + { if (feof($this->fsock)) { - //$this->_handle_error('connection closed prematurely'); + //user_error('connection closed prematurely'); return false; } - if (defined('NET_SSH1_LOGGING')) { - $temp = isset($this->protocol_flags[ord($data[0])]) ? $this->protocol_flags[ord($data[0])] : 'UNKNOWN'; - $this->protocol_flags_log[] = '-> ' . $temp . - ' (' . round($stop - $start, 4) . 's)'; - if (NET_SSH1_LOGGING == NET_SSH1_LOG_COMPLEX) { - $this->message_log[] = substr($data, 1); - } - } - $length = strlen($data) + 4; $padding = crypt_random_string(8 - ($length & 7)); + $orig = $data; $data = $padding . $data; $data.= pack('N', $this->_crc($data)); @@ -1044,6 +1134,13 @@ class Net_SSH1 { $result = strlen($packet) == fputs($this->fsock, $packet); $stop = strtok(microtime(), ' ') + strtok(''); + if (defined('NET_SSH1_LOGGING')) { + $temp = isset($this->protocol_flags[ord($orig[0])]) ? $this->protocol_flags[ord($orig[0])] : 'UNKNOWN'; + $temp = '-> ' . $temp . + ' (' . round($stop - $start, 4) . 's)'; + $this->_append_log($temp, $orig); + } + return $result; } @@ -1203,16 +1300,15 @@ class Net_SSH1 { // Presumably the part of PKCS#1 they're refering to is "Section 7.2.1 Encryption Operation", // under "7.2 RSAES-PKCS1-v1.5" and "7 Encryption schemes" of the following URL: // ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf - $temp = chr(0) . chr(2); $modulus = $key[1]->toBytes(); $length = strlen($modulus) - strlen($m) - 3; - $temp = ''; - while (strlen($temp) != $length) { - $block = crypt_random_string($length - strlen($temp)); + $random = ''; + while (strlen($random) != $length) { + $block = crypt_random_string($length - strlen($random)); $block = str_replace("\x00", '', $block); - $temp.= $block; + $random.= $block; } - $temp.= chr(0) . $m; + $temp = chr(0) . chr(2) . $random . chr(0) . $m; $m = new Math_BigInteger($temp, 256); $m = $m->modPow($key[0], $key[1]); @@ -1288,7 +1384,7 @@ class Net_SSH1 { $current_log = $message_log[$i]; $j = 0; do { - if (!empty($current_log)) { + if (strlen($current_log)) { $output.= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0 '; } $fragment = $this->_string_shift($current_log, $short_width); @@ -1305,7 +1401,7 @@ class Net_SSH1 { $raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment); $output.= str_pad($hex, $long_width - $short_width, ' ') . $raw . "\r\n"; $j++; - } while (!empty($current_log)); + } while (strlen($current_log)); $output.= "\r\n"; } @@ -1416,20 +1512,66 @@ class Net_SSH1 { } /** - * Error Handler + * Logs data packets * - * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. - * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. + * Makes sure that only the last 1MB worth of packets will be logged * - * @param String $string + * @param String $data * @access private */ - function _handle_error($err_msg) { - if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { - $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; - throw(new $class($err_msg)); - } else { - user_error($err_msg); - } + function _append_log($protocol_flags, $message) + { + switch (NET_SSH1_LOGGING) { + // useful for benchmarks + case NET_SSH1_LOG_SIMPLE: + $this->protocol_flags_log[] = $protocol_flags; + break; + // the most useful log for SSH1 + case NET_SSH1_LOG_COMPLEX: + $this->protocol_flags_log[] = $protocol_flags; + $this->_string_shift($message); + $this->log_size+= strlen($message); + $this->message_log[] = $message; + while ($this->log_size > NET_SSH2_LOG_MAX_SIZE) { + $this->log_size-= strlen(array_shift($this->message_log)); + array_shift($this->protocol_flags_log); + } + break; + // dump the output out realtime; packets may be interspersed with non packets, + // passwords won't be filtered out and select other packets may not be correctly + // identified + case NET_SSH1_LOG_REALTIME: + echo "
    \r\n" . $this->_format_log(array($message), array($protocol_flags)) . "\r\n
    \r\n"; + @flush(); + @ob_flush(); + break; + // basically the same thing as NET_SSH1_LOG_REALTIME with the caveat that NET_SSH1_LOG_REALTIME_FILE + // needs to be defined and that the resultant log file will be capped out at NET_SSH1_LOG_MAX_SIZE. + // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily + // at the beginning of the file + case NET_SSH1_LOG_REALTIME_FILE: + if (!isset($this->realtime_log_file)) { + // PHP doesn't seem to like using constants in fopen() + $filename = NET_SSH2_LOG_REALTIME_FILE; + $fp = fopen($filename, 'w'); + $this->realtime_log_file = $fp; + } + if (!is_resource($this->realtime_log_file)) { + break; + } + $entry = $this->_format_log(array($message), array($protocol_flags)); + if ($this->realtime_log_wrap) { + $temp = "<<< START >>>\r\n"; + $entry.= $temp; + fseek($this->realtime_log_file, ftell($this->realtime_log_file) - strlen($temp)); + } + $this->realtime_log_size+= strlen($entry); + if ($this->realtime_log_size > NET_SSH1_LOG_MAX_SIZE) { + fseek($this->realtime_log_file, 0); + $this->realtime_log_size = strlen($entry); + $this->realtime_log_wrap = true; + } + fputs($this->realtime_log_file, $entry); + } } -} +} \ No newline at end of file diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php index 32ece7a566..43bfbca2db 100644 --- a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php +++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php @@ -663,6 +663,7 @@ class Net_SSH2 { * Real-time log file pointer * * @see Net_SSH2::_append_log() + * @var Resource * @access private */ var $realtime_log_file; @@ -671,6 +672,7 @@ class Net_SSH2 { * Real-time log file size * * @see Net_SSH2::_append_log() + * @var Integer * @access private */ var $realtime_log_size; @@ -679,6 +681,7 @@ class Net_SSH2 { * Has the signature been validated? * * @see Net_SSH2::getServerPublicHostKey() + * @var Boolean * @access private */ var $signature_validated = false; @@ -706,6 +709,14 @@ class Net_SSH2 { */ var $last_packet; + /** + * Exit status returned from ssh if any + * + * @var Integer + * @access private + */ + var $exit_status; + /** * Default Constructor. * @@ -793,7 +804,7 @@ class Net_SSH2 { $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 $this->fsock = @fsockopen($host, $port, $errno, $errstr, $timeout); if (!$this->fsock) { - $this->_handle_error(rtrim("Cannot connect to $host. Error $errno. $errstr")); + user_error(rtrim("Cannot connect to $host. Error $errno. $errstr")); return; } $elapsed = strtok(microtime(), ' ') + strtok('') - $start; @@ -801,7 +812,7 @@ class Net_SSH2 { $timeout-= $elapsed; if ($timeout <= 0) { - $this->_handle_error(rtrim("Cannot connect to $host. Timeout error")); + user_error(rtrim("Cannot connect to $host. Timeout error")); return; } @@ -814,7 +825,7 @@ class Net_SSH2 { // on windows this returns a "Warning: Invalid CRT parameters detected" error // the !count() is done as a workaround for if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) { - $this->_handle_error(rtrim("Cannot connect to $host. Banner timeout")); + user_error(rtrim("Cannot connect to $host. Banner timeout")); return; } @@ -836,7 +847,7 @@ class Net_SSH2 { } if (feof($this->fsock)) { - $this->_handle_error('Connection closed by server'); + user_error('Connection closed by server'); return false; } @@ -855,22 +866,17 @@ class Net_SSH2 { } if (defined('NET_SSH2_LOGGING')) { - $this->message_number_log[] = '<-'; - $this->message_number_log[] = '->'; - - if (NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX) { - $this->message_log[] = $extra . $temp; - $this->message_log[] = $this->identifier . "\r\n"; - } + $this->_append_log('<-', $extra . $temp); + $this->_append_log('->', $this->identifier . "\r\n"); } $this->server_identifier = trim($temp, "\r\n"); - if (!empty($extra)) { + if (strlen($extra)) { $this->errors[] = utf8_decode($extra); } if ($matches[1] != '1.99' && $matches[1] != '2.0') { - $this->_handle_error("Cannot connect to SSH $matches[1] servers"); + user_error("Cannot connect to SSH $matches[1] servers"); return; } @@ -878,12 +884,12 @@ class Net_SSH2 { $response = $this->_get_binary_packet(); if ($response === false) { - $this->_handle_error('Connection closed by server'); + user_error('Connection closed by server'); return; } if (ord($response[0]) != NET_SSH2_MSG_KEXINIT) { - $this->_handle_error('Expected SSH_MSG_KEXINIT'); + user_error('Expected SSH_MSG_KEXINIT'); return; } @@ -1025,7 +1031,7 @@ class Net_SSH2 { // we need to decide upon the symmetric encryption algorithms before we do the diffie-hellman key exchange for ($i = 0; $i < count($encryption_algorithms) && !in_array($encryption_algorithms[$i], $this->encryption_algorithms_server_to_client); $i++); if ($i == count($encryption_algorithms)) { - $this->_handle_error('No compatible server to client encryption algorithms found'); + user_error('No compatible server to client encryption algorithms found'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } @@ -1062,7 +1068,7 @@ class Net_SSH2 { for ($i = 0; $i < count($encryption_algorithms) && !in_array($encryption_algorithms[$i], $this->encryption_algorithms_client_to_server); $i++); if ($i == count($encryption_algorithms)) { - $this->_handle_error('No compatible client to server encryption algorithms found'); + user_error('No compatible client to server encryption algorithms found'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } @@ -1100,7 +1106,7 @@ class Net_SSH2 { // through diffie-hellman key exchange a symmetric key is obtained for ($i = 0; $i < count($kex_algorithms) && !in_array($kex_algorithms[$i], $this->kex_algorithms); $i++); if ($i == count($kex_algorithms)) { - $this->_handle_error('No compatible key exchange algorithms found'); + user_error('No compatible key exchange algorithms found'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } @@ -1152,19 +1158,19 @@ class Net_SSH2 { $data = pack('CNa*', NET_SSH2_MSG_KEXDH_INIT, strlen($eBytes), $eBytes); if (!$this->_send_binary_packet($data)) { - $this->_handle_error('Connection closed by server'); + user_error('Connection closed by server'); return false; } $response = $this->_get_binary_packet(); if ($response === false) { - $this->_handle_error('Connection closed by server'); + user_error('Connection closed by server'); return false; } extract(unpack('Ctype', $this->_string_shift($response, 1))); if ($type != NET_SSH2_MSG_KEXDH_REPLY) { - $this->_handle_error('Expected SSH_MSG_KEXDH_REPLY'); + user_error('Expected SSH_MSG_KEXDH_REPLY'); return false; } @@ -1202,12 +1208,12 @@ class Net_SSH2 { for ($i = 0; $i < count($server_host_key_algorithms) && !in_array($server_host_key_algorithms[$i], $this->server_host_key_algorithms); $i++); if ($i == count($server_host_key_algorithms)) { - $this->_handle_error('No compatible server host key algorithms found'); + user_error('No compatible server host key algorithms found'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } if ($public_key_format != $server_host_key_algorithms[$i] || $this->signature_format != $server_host_key_algorithms[$i]) { - $this->_handle_error('Sever Host Key Algorithm Mismatch'); + user_error('Sever Host Key Algorithm Mismatch'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } @@ -1222,14 +1228,14 @@ class Net_SSH2 { $response = $this->_get_binary_packet(); if ($response === false) { - $this->_handle_error('Connection closed by server'); + user_error('Connection closed by server'); return false; } extract(unpack('Ctype', $this->_string_shift($response, 1))); if ($type != NET_SSH2_MSG_NEWKEYS) { - $this->_handle_error('Expected SSH_MSG_NEWKEYS'); + user_error('Expected SSH_MSG_NEWKEYS'); return false; } @@ -1343,7 +1349,7 @@ class Net_SSH2 { for ($i = 0; $i < count($mac_algorithms) && !in_array($mac_algorithms[$i], $this->mac_algorithms_client_to_server); $i++); if ($i == count($mac_algorithms)) { - $this->_handle_error('No compatible client to server message authentication algorithms found'); + user_error('No compatible client to server message authentication algorithms found'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } @@ -1368,7 +1374,7 @@ class Net_SSH2 { for ($i = 0; $i < count($mac_algorithms) && !in_array($mac_algorithms[$i], $this->mac_algorithms_server_to_client); $i++); if ($i == count($mac_algorithms)) { - $this->_handle_error('No compatible server to client message authentication algorithms found'); + user_error('No compatible server to client message authentication algorithms found'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } @@ -1410,14 +1416,14 @@ class Net_SSH2 { for ($i = 0; $i < count($compression_algorithms) && !in_array($compression_algorithms[$i], $this->compression_algorithms_server_to_client); $i++); if ($i == count($compression_algorithms)) { - $this->_handle_error('No compatible server to client compression algorithms found'); + user_error('No compatible server to client compression algorithms found'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } $this->decompress = $compression_algorithms[$i] == 'zlib'; for ($i = 0; $i < count($compression_algorithms) && !in_array($compression_algorithms[$i], $this->compression_algorithms_client_to_server); $i++); if ($i == count($compression_algorithms)) { - $this->_handle_error('No compatible client to server compression algorithms found'); + user_error('No compatible client to server compression algorithms found'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } $this->compress = $compression_algorithms[$i] == 'zlib'; @@ -1453,14 +1459,14 @@ class Net_SSH2 { $response = $this->_get_binary_packet(); if ($response === false) { - $this->_handle_error('Connection closed by server'); + user_error('Connection closed by server'); return false; } extract(unpack('Ctype', $this->_string_shift($response, 1))); if ($type != NET_SSH2_MSG_SERVICE_ACCEPT) { - $this->_handle_error('Expected SSH_MSG_SERVICE_ACCEPT'); + user_error('Expected SSH_MSG_SERVICE_ACCEPT'); return false; } @@ -1481,7 +1487,7 @@ class Net_SSH2 { $response = $this->_get_binary_packet(); if ($response === false) { - $this->_handle_error('Connection closed by server'); + user_error('Connection closed by server'); return false; } @@ -1517,7 +1523,7 @@ class Net_SSH2 { $response = $this->_get_binary_packet(); if ($response === false) { - $this->_handle_error('Connection closed by server'); + user_error('Connection closed by server'); return false; } @@ -1589,7 +1595,7 @@ class Net_SSH2 { $response = $this->_get_binary_packet(); if ($response === false) { - $this->_handle_error('Connection closed by server'); + user_error('Connection closed by server'); return false; } @@ -1702,7 +1708,7 @@ class Net_SSH2 { $response = $this->_get_binary_packet(); if ($response === false) { - $this->_handle_error('Connection closed by server'); + user_error('Connection closed by server'); return false; } @@ -1737,7 +1743,7 @@ class Net_SSH2 { $response = $this->_get_binary_packet(); if ($response === false) { - $this->_handle_error('Connection closed by server'); + user_error('Connection closed by server'); return false; } @@ -1890,7 +1896,7 @@ class Net_SSH2 { $response = $this->_get_binary_packet(); if ($response === false) { - $this->_handle_error('Connection closed by server'); + user_error('Connection closed by server'); return false; } @@ -1901,7 +1907,7 @@ class Net_SSH2 { break; case NET_SSH2_MSG_CHANNEL_FAILURE: default: - $this->_handle_error('Unable to request pseudo-terminal'); + user_error('Unable to request pseudo-terminal'); return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); } @@ -1942,12 +1948,12 @@ class Net_SSH2 { $this->curTimeout = $this->timeout; if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { - $this->_handle_error('Operation disallowed prior to login()'); + user_error('Operation disallowed prior to login()'); return false; } if (!($this->bitmap & NET_SSH2_MASK_SHELL) && !$this->_initShell()) { - $this->_handle_error('Unable to initiate an interactive shell session'); + user_error('Unable to initiate an interactive shell session'); return false; } @@ -1955,9 +1961,9 @@ class Net_SSH2 { while (true) { if ($mode == NET_SSH2_READ_REGEX) { preg_match($expect, $this->interactiveBuffer, $matches); - $match = isset($matches[0]) ? $matches[0] : array(); + $match = isset($matches[0]) ? $matches[0] : ''; } - $pos = !empty($match) ? strpos($this->interactiveBuffer, $match) : false; + $pos = strlen($match) ? strpos($this->interactiveBuffer, $match) : false; if ($pos !== false) { return $this->_string_shift($this->interactiveBuffer, $pos + strlen($match)); } @@ -1981,12 +1987,12 @@ class Net_SSH2 { function write($cmd) { if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) { - $this->_handle_error('Operation disallowed prior to login()'); + user_error('Operation disallowed prior to login()'); return false; } if (!($this->bitmap & NET_SSH2_MASK_SHELL) && !$this->_initShell()) { - $this->_handle_error('Unable to initiate an interactive shell session'); + user_error('Unable to initiate an interactive shell session'); return false; } @@ -2031,16 +2037,15 @@ class Net_SSH2 { function _get_binary_packet() { if (!is_resource($this->fsock) || feof($this->fsock)) { - $this->_handle_error('Connection closed prematurely'); + user_error('Connection closed prematurely'); $this->bitmask = 0; return false; } $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 $raw = fread($this->fsock, $this->decrypt_block_size); - $stop = strtok(microtime(), ' ') + strtok(''); - if (empty($raw)) { + if (!strlen($raw)) { return ''; } @@ -2048,22 +2053,31 @@ class Net_SSH2 { $raw = $this->decrypt->decrypt($raw); } if ($raw === false) { - $this->_handle_error('Unable to decrypt content'); + user_error('Unable to decrypt content'); return false; } extract(unpack('Npacket_length/Cpadding_length', $this->_string_shift($raw, 5))); $remaining_length = $packet_length + 4 - $this->decrypt_block_size; + + // quoting , + // "implementations SHOULD check that the packet length is reasonable" + // PuTTY uses 0x9000 as the actual max packet size and so to shall we + if ($remaining_length < -$this->decrypt_block_size || $remaining_length > 0x9000 || $remaining_length % $this->decrypt_block_size != 0) { + user_error('Invalid size'); + return false; + } + $buffer = ''; while ($remaining_length > 0) { $temp = fread($this->fsock, $remaining_length); $buffer.= $temp; $remaining_length-= strlen($temp); } - if (!empty($buffer)) { + $stop = strtok(microtime(), ' ') + strtok(''); + if (strlen($buffer)) { $raw.= $this->decrypt !== false ? $this->decrypt->decrypt($buffer) : $buffer; - $buffer = $temp = ''; } $payload = $this->_string_shift($raw, $packet_length - $padding_length - 1); @@ -2072,7 +2086,7 @@ class Net_SSH2 { if ($this->hmac_check !== false) { $hmac = fread($this->fsock, $this->hmac_size); if ($hmac != $this->hmac_check->hash(pack('NNCa*', $this->get_seq_no, $packet_length, $padding_length, $payload . $padding))) { - $this->_handle_error('Invalid HMAC'); + user_error('Invalid HMAC'); return false; } } @@ -2239,11 +2253,11 @@ class Net_SSH2 { $response = $this->_get_binary_packet(); if ($response === false) { - $this->_handle_error('Connection closed by server'); + user_error('Connection closed by server'); return false; } - if (empty($response)) { + if (!strlen($response)) { return ''; } @@ -2261,7 +2275,7 @@ class Net_SSH2 { return $client_channel == $channel ? true : $this->_get_channel_packet($client_channel, $skip_extended); //case NET_SSH2_MSG_CHANNEL_OPEN_FAILURE: default: - $this->_handle_error('Unable to open channel'); + user_error('Unable to open channel'); return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); } break; @@ -2271,7 +2285,7 @@ class Net_SSH2 { return true; //case NET_SSH2_MSG_CHANNEL_FAILURE: default: - $this->_handle_error('Unable to request pseudo-terminal'); + user_error('Unable to request pseudo-terminal'); return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); } case NET_SSH2_MSG_CHANNEL_CLOSE: @@ -2333,6 +2347,8 @@ class Net_SSH2 { $this->errors[count($this->errors)].= "\r\n" . $this->_string_shift($response, $length); } case 'exit-status': + extract(unpack('Cfalse/Nexit_status', $this->_string_shift($response, 5))); + $this->exit_status = $exit_status; // "The channel needs to be closed with SSH_MSG_CHANNEL_CLOSE after this message." // -- http://tools.ietf.org/html/rfc4254#section-6.10 $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel])); @@ -2360,7 +2376,7 @@ class Net_SSH2 { case NET_SSH2_MSG_CHANNEL_EOF: break; default: - $this->_handle_error('Error reading channel data'); + user_error('Error reading channel data'); return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); } } @@ -2379,7 +2395,7 @@ class Net_SSH2 { function _send_binary_packet($data) { if (!is_resource($this->fsock) || feof($this->fsock)) { - $this->_handle_error('Connection closed prematurely'); + user_error('Connection closed prematurely'); $this->bitmask = 0; return false; } @@ -2675,7 +2691,7 @@ class Net_SSH2 { $current_log = $message_log[$i]; $j = 0; do { - if (!empty($current_log)) { + if (strlen($current_log)) { $output.= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0 '; } $fragment = $this->_string_shift($current_log, $short_width); @@ -2692,7 +2708,7 @@ class Net_SSH2 { $raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment); $output.= str_pad($hex, $long_width - $short_width, ' ') . $raw . "\r\n"; $j++; - } while (!empty($current_log)); + } while (strlen($current_log)); $output.= "\r\n"; } @@ -2886,7 +2902,7 @@ class Net_SSH2 { padding, unsigned, and in network byte order). */ $temp = unpack('Nlength', $this->_string_shift($signature, 4)); if ($temp['length'] != 40) { - $this->_handle_error('Invalid signature'); + user_error('Invalid signature'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } @@ -2894,7 +2910,7 @@ class Net_SSH2 { $s = new Math_BigInteger($this->_string_shift($signature, 20), 256); if ($r->compare($q) >= 0 || $s->compare($q) >= 0) { - $this->_handle_error('Invalid signature'); + user_error('Invalid signature'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } @@ -2914,7 +2930,7 @@ class Net_SSH2 { list(, $v) = $v->divide($q); if (!$v->equals($r)) { - $this->_handle_error('Bad server signature'); + user_error('Bad server signature'); return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE); } @@ -2939,7 +2955,7 @@ class Net_SSH2 { $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1); $rsa->loadKey(array('e' => $e, 'n' => $n), CRYPT_RSA_PUBLIC_FORMAT_RAW); if (!$rsa->verify($this->exchange_hash, $signature)) { - $this->_handle_error('Bad server signature'); + user_error('Bad server signature'); return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE); } */ @@ -2954,7 +2970,7 @@ class Net_SSH2 { // also, see SSHRSA.c (rsa2_verifysig) in PuTTy's source. if ($s->compare(new Math_BigInteger()) < 0 || $s->compare($n->subtract(new Math_BigInteger(1))) > 0) { - $this->_handle_error('Invalid signature'); + user_error('Invalid signature'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } @@ -2965,12 +2981,12 @@ class Net_SSH2 { $h = chr(0x01) . str_repeat(chr(0xFF), $nLength - 3 - strlen($h)) . $h; if ($s != $h) { - $this->_handle_error('Bad server signature'); + user_error('Bad server signature'); return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE); } break; default: - $this->_handle_error('Unsupported signature format'); + user_error('Unsupported signature format'); return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE); } @@ -2978,20 +2994,16 @@ class Net_SSH2 { } /** - * Error Handler + * Returns the exit status of an SSH command or false. * - * Throws exceptions if PHPSECLIB_USE_EXCEPTIONS is defined. - * Unless PHPSECLIB_EXCEPTION_CLASS is set it'll throw generic Exceptions. - * - * @param String $string - * @access private + * @return Integer or false + * @access public */ - function _handle_error($err_msg) { - if (defined('PHPSECLIB_USE_EXCEPTIONS') && version_compare(PHP_VERSION, '5.1.0', '>=')) { - $class = defined('PHPSECLIB_EXCEPTION_CLASS') && class_exists(PHPSECLIB_EXCEPTION_CLASS) ? PHPSECLIB_EXCEPTION_CLASS : 'Exception'; - throw(new $class($err_msg)); - } else { - user_error($err_msg); + function getExitStatus() + { + if (is_null($this->exit_status)) { + return false; } + return $this->exit_status; } -} \ No newline at end of file +} diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index 2f62a0ecf8..8a4373132e 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -7,10 +7,10 @@ */ namespace OC\Files\Storage; -set_include_path(get_include_path() . PATH_SEPARATOR . OC_App::getAppPath('files_external') . '/3rdparty/phpseclib/phpseclib'); +set_include_path(get_include_path() . PATH_SEPARATOR . \OC_App::getAppPath('files_external') . '/3rdparty/phpseclib/phpseclib'); require('Net/SFTP.php'); -class SFTP extends OC\Files\Storage\Common { +class SFTP extends \OC\Files\Storage\Common { private $host; private $user; private $password; @@ -34,16 +34,16 @@ class SFTP extends OC\Files\Storage\Common { $host_keys = $this->read_host_keys(); - $this->client = new Net_SFTP($this->host); + $this->client = new \Net_SFTP($this->host); if (!$this->client->login($this->user, $this->password)) { - throw new Exception('Login failed'); + throw new \Exception('Login failed'); } $current_host_key = $this->client->getServerPublicHostKey(); if (array_key_exists($this->host, $host_keys)) { if ($host_keys[$this->host] != $current_host_key) { - throw new Exception('Host public key does not match known key'); + throw new \Exception('Host public key does not match known key'); } } else { $host_keys[$this->host] = $current_host_key; @@ -53,7 +53,7 @@ class SFTP extends OC\Files\Storage\Common { public function test() { if (!isset($params['host']) || !isset($params['user']) || !isset($params['password'])) { - throw new Exception("Required parameters not set"); + throw new \Exception("Required parameters not set"); } } @@ -69,7 +69,7 @@ class SFTP extends OC\Files\Storage\Common { $storage_view->getAbsolutePath('') . 'ssh_host_keys'; } - } catch (Exception $e) { + } catch (\Exception $e) { } return false; } @@ -83,7 +83,7 @@ class SFTP extends OC\Files\Storage\Common { } fclose($fp); return true; - } catch (Exception $e) { + } catch (\Exception $e) { return false; } } @@ -106,7 +106,7 @@ class SFTP extends OC\Files\Storage\Common { return array_combine($hosts, $keys); } } - } catch (Exception $e) { + } catch (\Exception $e) { } return array(); } @@ -114,7 +114,7 @@ class SFTP extends OC\Files\Storage\Common { public function mkdir($path) { try { return $this->client->mkdir($this->abs_path($path)); - } catch (Exception $e) { + } catch (\Exception $e) { return false; } } @@ -122,7 +122,7 @@ class SFTP extends OC\Files\Storage\Common { public function rmdir($path) { try { return $this->client->delete($this->abs_path($path), true); - } catch (Exception $e) { + } catch (\Exception $e) { return false; } } @@ -140,7 +140,7 @@ class SFTP extends OC\Files\Storage\Common { } \OC\Files\Stream\Dir::register($id, $dir_stream); return opendir('fakedir://' . $id); - } catch(Exception $e) { + } catch(\Exception $e) { return false; } } @@ -150,7 +150,7 @@ class SFTP extends OC\Files\Storage\Common { $stat = $this->client->stat($this->abs_path($path)); if ($stat['type'] == NET_SFTP_TYPE_REGULAR) return 'file'; if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) return 'dir'; - } catch (Exeption $e) { + } catch (\Exeption $e) { } return false; } @@ -166,7 +166,7 @@ class SFTP extends OC\Files\Storage\Common { public function file_exists($path) { try { return $this->client->stat($this->abs_path($path)) === false ? false : true; - } catch (Exception $e) { + } catch (\Exception $e) { return false; } } @@ -174,7 +174,7 @@ class SFTP extends OC\Files\Storage\Common { public function unlink($path) { try { return $this->client->delete($this->abs_path($path), true); - } catch (Exception $e) { + } catch (\Exception $e) { return false; } } @@ -191,7 +191,7 @@ class SFTP extends OC\Files\Storage\Common { } else { $ext=''; } - $tmp = OC_Helper::tmpFile($ext); + $tmp = \OC_Helper::tmpFile($ext); $this->getFile($abs_path, $tmp); return fopen($tmp, $mode); @@ -212,7 +212,7 @@ class SFTP extends OC\Files\Storage\Common { } else { $ext=''; } - $tmpFile=OC_Helper::tmpFile($ext); + $tmpFile=\OC_Helper::tmpFile($ext); \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack')); if ($this->file_exists($path)) { $this->getFile($abs_path, $tmpFile); @@ -220,7 +220,7 @@ class SFTP extends OC\Files\Storage\Common { self::$tempFiles[$tmpFile]=$abs_path; return fopen('close://'.$tmpFile, $mode); } - } catch (Exception $e) { + } catch (\Exception $e) { } return false; } @@ -245,7 +245,7 @@ class SFTP extends OC\Files\Storage\Common { } else { return false; } - } catch (Exception $e) { + } catch (\Exception $e) { return false; } return true; @@ -262,7 +262,7 @@ class SFTP extends OC\Files\Storage\Common { public function rename($source, $target) { try { return $this->client->rename($this->abs_path($source), $this->abs_path($target)); - } catch (Exception $e) { + } catch (\Exception $e) { return false; } } @@ -275,10 +275,9 @@ class SFTP extends OC\Files\Storage\Common { $size = $stat ? $stat['size'] : 0; return array('mtime' => $mtime, 'size' => $size, 'ctime' => -1); - } catch (Exception $e) { + } catch (\Exception $e) { return false; } } } -?> diff --git a/apps/files_external/tests/sftp.php b/apps/files_external/tests/sftp.php new file mode 100644 index 0000000000..16964e2087 --- /dev/null +++ b/apps/files_external/tests/sftp.php @@ -0,0 +1,43 @@ +. + */ + +namespace Test\Files\Storage; + +class SFTP extends Storage { + private $config; + + public function setUp() { + $id = uniqid(); + $this->config = include('files_external/tests/config.php'); + if ( ! is_array($this->config) or ! isset($this->config['sftp']) or ! $this->config['sftp']['run']) { + $this->markTestSkipped('SFTP backend not configured'); + } + $this->config['sftp']['root'] .= '/' . $id; //make sure we have an new empty folder to work in + $this->instance = new \OC\Files\Storage\SFTP($this->config['sftp']); + } + + public function tearDown() { + if ($this->instance) { + $this->instance->rmdir('/'); + } + } +} \ No newline at end of file From bf4a073dca9cd44ca7a05a411ecf80b43db7f545 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Sun, 10 Feb 2013 12:38:16 +0100 Subject: [PATCH 115/719] count divs in actions instead of action div itself (is set to 100%) --- apps/files/js/files.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 5c5b430a8d..918182162d 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -685,9 +685,10 @@ $(document).ready(function() { breadcrumbsWidth += $(breadcrumb).get(0).offsetWidth; }); - if ($('#controls .actions').length > 0) { - breadcrumbsWidth += $('#controls .actions').get(0).offsetWidth; - } + + $.each($('#controls .actions>div'), function(index, action) { + breadcrumbsWidth += $(action).get(0).offsetWidth; + }); function resizeBreadcrumbs(firstRun) { var width = $(this).width(); From e63c4e3ea8478a128bad758d90e256a04f19ddb6 Mon Sep 17 00:00:00 2001 From: Tom Needham Date: Sun, 10 Feb 2013 12:41:27 +0100 Subject: [PATCH 116/719] Change capabilities exposure for files_versions since it extends files --- apps/files_versions/lib/capabilities.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/files_versions/lib/capabilities.php b/apps/files_versions/lib/capabilities.php index 1592c2b06e..3251a07b6a 100644 --- a/apps/files_versions/lib/capabilities.php +++ b/apps/files_versions/lib/capabilities.php @@ -13,12 +13,11 @@ class Capabilities { public static function getCapabilities() { return new \OC_OCS_Result(array( 'capabilities' => array( - 'files_versions' => array( + 'files' => array( 'versioning' => true, ), ), )); } -} -?> \ No newline at end of file +} \ No newline at end of file From 28498e1af4beb018a83123145459ccf5365c54ef Mon Sep 17 00:00:00 2001 From: Tom Needham Date: Sun, 10 Feb 2013 12:44:59 +0100 Subject: [PATCH 117/719] Code style and remove OAuth code --- lib/api.php | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/lib/api.php b/lib/api.php index 8fa4d764ab..5f2e83c9ce 100644 --- a/lib/api.php +++ b/lib/api.php @@ -33,6 +33,7 @@ class OC_API { const USER_AUTH = 1; const SUBADMIN_AUTH = 2; const ADMIN_AUTH = 3; + /** * API Response Codes */ @@ -40,15 +41,6 @@ class OC_API { const RESPOND_SERVER_ERROR = 996; const RESPOND_NOT_FOUND = 998; const RESPOND_UNKNOWN_ERROR = 999; - - private static $server; - - /** - * initialises the OAuth store and server - */ - private static function init() { - self::$server = new OC_OAuth_Server(new OC_OAuth_Store()); - } /** * api actions @@ -156,9 +148,9 @@ class OC_API { } } // Remove any error responses if there is one shipped response that succeeded - if(!empty($shipped['succeeded'])){ + if(!empty($shipped['succeeded'])) { $responses = array_merge($shipped['succeeded'], $thirdparty['succeeded']); - } else if(!empty($shipped['failed'])){ + } else if(!empty($shipped['failed'])) { // Which shipped response do we use if they all failed? // They may have failed for different reasons (different status codes) // Which reponse code should we return? From 6d74aa0d00cd19a008059705071ebd9fa759a9ea Mon Sep 17 00:00:00 2001 From: Tom Needham Date: Sun, 10 Feb 2013 12:46:41 +0100 Subject: [PATCH 118/719] more code style --- lib/ocs/cloud.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ocs/cloud.php b/lib/ocs/cloud.php index 9ae4b4c8eb..132d923d96 100644 --- a/lib/ocs/cloud.php +++ b/lib/ocs/cloud.php @@ -24,7 +24,7 @@ class OC_OCS_Cloud { - public static function getCapabilities($parameters){ + public static function getCapabilities($parameters) { $result = array(); list($major, $minor, $micro) = OC_Util::getVersion(); $result['version'] = array( From 41ec976fd74320c379f95d05d3a490310f06402e Mon Sep 17 00:00:00 2001 From: Administrator Date: Sun, 10 Feb 2013 13:07:59 +0100 Subject: [PATCH 119/719] Bugfixes and cleanup MS SQL Server installation --- core/js/setup.js | 4 +- core/setup.php | 2 +- core/templates/installation.php | 2 +- lib/db.php | 36 +++--- lib/setup.php | 191 +++++++++++++++++++++----------- 5 files changed, 148 insertions(+), 87 deletions(-) diff --git a/core/js/setup.js b/core/js/setup.js index fb6e7c5097..cb8392d0a3 100644 --- a/core/js/setup.js +++ b/core/js/setup.js @@ -5,7 +5,7 @@ $(document).ready(function() { mysql:!!$('#hasMySQL').val(), postgresql:!!$('#hasPostgreSQL').val(), oracle:!!$('#hasOracle').val(), - mssql:!!$('#hasMSSQL').val() + mssql:!!$('#hasMSSQL').val() }; $('#selectDbType').buttonset(); @@ -43,7 +43,7 @@ $(document).ready(function() { $('#dbhostlabel').show(250); }); - $('#mssql').click(function() { + $('#mssql').click(function() { $('#use_other_db').slideDown(250); $('#dbhost').show(250); $('#dbhostlabel').show(250); diff --git a/core/setup.php b/core/setup.php index 0da9b35a35..6ea16cdcc4 100644 --- a/core/setup.php +++ b/core/setup.php @@ -27,7 +27,7 @@ $opts = array( 'hasMySQL' => $hasMySQL, 'hasPostgreSQL' => $hasPostgreSQL, 'hasOracle' => $hasOracle, - 'hasMSSQLServer' => $hasMSSQL, + 'hasMSSQL' => $hasMSSQL, 'directory' => $datadir, 'secureRNG' => OC_Util::secureRNG_available(), 'htaccessWorking' => OC_Util::ishtaccessworking(), diff --git a/core/templates/installation.php b/core/templates/installation.php index 6a6370785d..4a41527c90 100644 --- a/core/templates/installation.php +++ b/core/templates/installation.php @@ -107,7 +107,7 @@

    MS SQL t( 'will be used' ); ?>.

    - + /> diff --git a/lib/db.php b/lib/db.php index 58f46c1171..c3ff481e19 100644 --- a/lib/db.php +++ b/lib/db.php @@ -284,7 +284,7 @@ class OC_DB { $dsn['database'] = $user; } break; - case 'mssql': + case 'mssql': $dsn = array( 'phptype' => 'sqlsrv', 'username' => $user, @@ -292,7 +292,7 @@ class OC_DB { 'hostspec' => $host, 'database' => $name ); - break; + break; default: return false; } @@ -920,28 +920,30 @@ class PDOStatementWrapper{ * make execute return the result instead of a bool */ public function execute($input=array()) { - $this->lastArguments=$input; - if(count($input)>0) { - if (!isset($type)) { - $type = OC_Config::getValue( "dbtype", "sqlite" ); - } - - if ($type == 'mssql') { - $this->tryFixSubstringLastArgumentDataForMSSQL($input); - } - + $this->lastArguments = $input; + if (count($input) > 0) { + + if (!isset($type)) { + $type = OC_Config::getValue( "dbtype", "sqlite" ); + } + + if ($type == 'mssql') { + $input = $this->tryFixSubstringLastArgumentDataForMSSQL($input); + } + $result=$this->statement->execute($input); - }else{ + } else { $result=$this->statement->execute(); } - if($result) { + + if ($result) { return $this; - }else{ + } else { return false; } } - private function tryFixSubstringLastArgumentDataForMSSQL(&$input) { + private function tryFixSubstringLastArgumentDataForMSSQL($input) { $query = $this->statement->queryString; $pos = stripos ($query, 'SUBSTRING'); @@ -1013,6 +1015,8 @@ class PDOStatementWrapper{ $this->statement = $PDO->prepare($newQuery); $this->lastArguments = $input; + + return $input; } catch (PDOException $e){ $entry = 'PDO DB Error: "'.$e->getMessage().'"
    '; $entry .= 'Offending command was: '.$this->statement->queryString .'
    '; diff --git a/lib/setup.php b/lib/setup.php index d4ea26354e..3efad79cfa 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -610,98 +610,155 @@ class OC_Setup { self::mssql_createDatabase($dbname, $masterConnection); - self::mssql_createDBUser($dbuser, $dbpass, $masterConnection); + self::mssql_createDBUser($dbuser, $dbname, $masterConnection); sqlsrv_close($masterConnection); - $connectionInfo = array( "Database" => $dbname, "UID" => $dbuser, "PWD" => $dbpass); - - $connection = @sqlsrv_connect($dbhost, $connectionInfo); - - //fill the database if needed - $query="SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{$dbname}' AND TABLE_NAME = '{$dbtableprefix}users'"; - $result = sqlsrv_query($connection, $query); - if($result) { - $row=sqlsrv_fetch_array($result); - } - - if(!$result or $row[0] == 0) { - OC_DB::createDbFromStructure('db_structure.xml'); - } - - sqlsrv_close($connection); + self::mssql_createDatabaseStructure($dbname, $dbuser, $dbpass); } private static function mssql_createDBLogin($name, $password, $connection) { $query = "SELECT * FROM master.sys.server_principals WHERE name = '".$name."';"; $result = sqlsrv_query($connection, $query); - if ($result) { + if ($result === false) { + if ( ($errors = sqlsrv_errors() ) != null) { + $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
    '; + } else { + $entry = ''; + } + $entry.='Offending command was: '.$query.'
    '; + echo($entry); + } else { $row = sqlsrv_fetch_array($result); - } - if (!$result or $row[0] == 0) { - $query = "CREATE LOGIN [".$name."] WITH PASSWORD = '".$password."';"; - $result = sqlsrv_query($connection, $query); - if (!$result or $result === false) { - if ( ($errors = sqlsrv_errors() ) != null) { - $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
    '; - } else { - $entry = ''; - } - $entry.='Offending command was: '.$query.'
    '; - echo($entry); - } + if ($row === false) { + if ( ($errors = sqlsrv_errors() ) != null) { + $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
    '; + } else { + $entry = ''; + } + $entry.='Offending command was: '.$query.'
    '; + echo($entry); + } else { + if ($row == null) { + $query = "CREATE LOGIN [".$name."] WITH PASSWORD = '".$password."';"; + $result = sqlsrv_query($connection, $query); + if (!$result or $result === false) { + if ( ($errors = sqlsrv_errors() ) != null) { + $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
    '; + } else { + $entry = ''; + } + $entry.='Offending command was: '.$query.'
    '; + echo($entry); + } + } + } } } private static function mssql_createDBUser($name, $dbname, $connection) { $query = "SELECT * FROM [".$dbname."].sys.database_principals WHERE name = '".$name."';"; $result = sqlsrv_query($connection, $query); - if($result) { - $row=sqlsrv_fetch_array($result); + if ($result === false) { + if ( ($errors = sqlsrv_errors() ) != null) { + $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
    '; + } else { + $entry = ''; + } + $entry.='Offending command was: '.$query.'
    '; + echo($entry); + } else { + $row = sqlsrv_fetch_array($result); + + if ($row === false) { + if ( ($errors = sqlsrv_errors() ) != null) { + $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
    '; + } else { + $entry = ''; + } + $entry.='Offending command was: '.$query.'
    '; + echo($entry); + } else { + if ($row == null) { + $query = "USE [".$dbname."]; CREATE USER [".$name."] FOR LOGIN [".$name."];"; + $result = sqlsrv_query($connection, $query); + if (!$result || $result === false) { + if ( ($errors = sqlsrv_errors() ) != null) { + $entry = 'DB Error: "'.print_r(sqlsrv_errors()).'"
    '; + } else { + $entry = ''; + } + $entry.='Offending command was: '.$query.'
    '; + echo($entry); + } + } + + $query = "USE [".$dbname."]; EXEC sp_addrolemember 'db_owner', '".$name."';"; + $result = sqlsrv_query($connection, $query); + if (!$result || $result === false) { + if ( ($errors = sqlsrv_errors() ) != null) { + $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
    '; + } else { + $entry = ''; + } + $entry.='Offending command was: '.$query.'
    '; + echo($entry); + } + } } - - if (!$result or $row[0] == 0) { - $query = "USE [".$dbname."]; CREATE USER [".$name."] FOR LOGIN [".$name."];"; - $result = sqlsrv_query($connection, $query); - if (!$result or $result === false) { - if ( ($errors = sqlsrv_errors() ) != null) { - $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
    '; - } else { - $entry = ''; - } - $entry.='Offending command was: '.$query.'
    '; - echo($entry); - } - } - - $query = "USE [".$dbname."]; EXEC sp_addrolemember 'db_owner', '".$name."';"; - $result = sqlsrv_query($connection, $query); - if (!$result or $result === false) { - if ( ($errors = sqlsrv_errors() ) != null) { - $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
    '; - } else { - $entry = ''; - } - $entry.='Offending command was: '.$query.'
    '; - echo($entry); - } } private static function mssql_createDatabase($dbname, $connection) { $query = "CREATE DATABASE [".$dbname."];"; $result = sqlsrv_query($connection, $query); - if (!$result or $result === false) { - if ( ($errors = sqlsrv_errors() ) != null) { - $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
    '; - } else { - $entry = ''; - } - $entry.='Offending command was: '.$query.'
    '; - echo($entry); + if (!$result || $result === false) { + if ( ($errors = sqlsrv_errors() ) != null) { + $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
    '; + } else { + $entry = ''; + } + $entry.='Offending command was: '.$query.'
    '; + echo($entry); } } + private static function mssql_createDatabaseStructure($dbname, $dbuser, $dbpass) { + $connectionInfo = array( "Database" => $dbname, "UID" => $dbuser, "PWD" => $dbpass); + + $connection = @sqlsrv_connect($dbhost, $connectionInfo); + + //fill the database if needed + $query = "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{$dbname}' AND TABLE_NAME = '{$dbtableprefix}users'"; + $result = sqlsrv_query($connection, $query); + if ($result === false) { + if ( ($errors = sqlsrv_errors() ) != null) { + $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
    '; + } else { + $entry = ''; + } + $entry.='Offending command was: '.$query.'
    '; + echo($entry); + } else { + $row = sqlsrv_fetch_array($result); + + if ($row === false) { + if ( ($errors = sqlsrv_errors() ) != null) { + $entry='DB Error: "'.print_r(sqlsrv_errors()).'"
    '; + } else { + $entry = ''; + } + $entry.='Offending command was: '.$query.'
    '; + echo($entry); + } else { + if ($row == null) { + OC_DB::createDbFromStructure('db_structure.xml'); + } + } + } + + sqlsrv_close($connection); + } /** * create .htaccess files for apache hosts From 421bacc33ac1625a920e71cbb065894ee39ed930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Kj=C3=B6lhede?= Date: Sun, 10 Feb 2013 13:11:29 +0100 Subject: [PATCH 120/719] Final changes from icewind1991 --- apps/files_external/lib/sftp.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index 8a4373132e..551a5a64ef 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -49,6 +49,10 @@ class SFTP extends \OC\Files\Storage\Common { $host_keys[$this->host] = $current_host_key; $this->write_host_keys($host_keys); } + + if(!$this->file_exists('')){ + $this->mkdir(''); + } } public function test() { @@ -56,6 +60,10 @@ class SFTP extends \OC\Files\Storage\Common { throw new \Exception("Required parameters not set"); } } + + public function getId(){ + return 'sftp::' . $this->user . '@' . $this->host . '/' . $this->root; + } private function abs_path($path) { return $this->root . $this->cleanPath($path); From 121c1f2fc04d44e7033790c02d2b7b360c38870b Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sun, 10 Feb 2013 13:55:20 +0100 Subject: [PATCH 121/719] wrap etags in quotes when doing a propfind on a folder --- lib/connector/sabre/directory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php index b210602bbf..c4062170d5 100644 --- a/lib/connector/sabre/directory.php +++ b/lib/connector/sabre/directory.php @@ -121,7 +121,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa $paths = array(); foreach($folder_content as $info) { $paths[] = $this->path.'/'.$info['name']; - $properties[$this->path.'/'.$info['name']][self::GETETAG_PROPERTYNAME] = $info['etag']; + $properties[$this->path.'/'.$info['name']][self::GETETAG_PROPERTYNAME] = '"' . $info['etag'] . '"'; } if(count($paths)>0) { // From 1b10032556c6188fc5310168083042e07e8c8b59 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Sun, 10 Feb 2013 14:03:40 +0100 Subject: [PATCH 122/719] Use sanitizeHTML instead of stripslashes + htmlspecialchars --- lib/helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/helper.php b/lib/helper.php index a0fbdd1039..124ab9da96 100644 --- a/lib/helper.php +++ b/lib/helper.php @@ -437,7 +437,7 @@ class OC_Helper { public static function init_var($s, $d="") { $r = $d; if(isset($_REQUEST[$s]) && !empty($_REQUEST[$s])) - $r = stripslashes(htmlspecialchars($_REQUEST[$s])); + $r = OC_Util::sanitizeHTML($_REQUEST[$s]); return $r; } From 4e5a3fbcafcaa0cdaba351dfb307b0000179c832 Mon Sep 17 00:00:00 2001 From: Administrator Date: Sun, 10 Feb 2013 14:08:00 +0100 Subject: [PATCH 123/719] - Fixed indentations. - Fixed a bug in legacy.php: there was an error that was not checked for if the table 'fscache' did not exist in the database. --- lib/db.php | 144 ++++++++++++++++++------------------- lib/files/cache/legacy.php | 6 ++ 2 files changed, 78 insertions(+), 72 deletions(-) diff --git a/lib/db.php b/lib/db.php index c3ff481e19..3ccd51737a 100644 --- a/lib/db.php +++ b/lib/db.php @@ -943,95 +943,95 @@ class PDOStatementWrapper{ } } - private function tryFixSubstringLastArgumentDataForMSSQL($input) { - $query = $this->statement->queryString; - $pos = stripos ($query, 'SUBSTRING'); - - if ( $pos === false) { - return; - } - - try { - $newQuery = ''; + private function tryFixSubstringLastArgumentDataForMSSQL($input) { + $query = $this->statement->queryString; + $pos = stripos ($query, 'SUBSTRING'); - $cArg = 0; + if ( $pos === false) { + return; + } - $inSubstring = false; + try { + $newQuery = ''; - // Create new query - for ($i = 0; $i < strlen ($query); $i++) { - if ($inSubstring == false) { - // Defines when we should start inserting values - if (substr ($query, $i, 9) == 'SUBSTRING') { - $inSubstring = true; - } - } else { - // Defines when we should stop inserting values - if (substr ($query, $i, 1) == ')') { - $inSubstring = false; - } - } + $cArg = 0; - if (substr ($query, $i, 1) == '?') { - // We found a question mark - if ($inSubstring) { - $newQuery .= $input[$cArg]; + $inSubstring = false; - // - // Remove from input array - // - array_splice ($input, $cArg, 1); - } else { - $newQuery .= substr ($query, $i, 1); - $cArg++; - } - } else { - $newQuery .= substr ($query, $i, 1); - } - } + // Create new query + for ($i = 0; $i < strlen ($query); $i++) { + if ($inSubstring == false) { + // Defines when we should start inserting values + if (substr ($query, $i, 9) == 'SUBSTRING') { + $inSubstring = true; + } + } else { + // Defines when we should stop inserting values + if (substr ($query, $i, 1) == ')') { + $inSubstring = false; + } + } - // The global data we need - $name = OC_Config::getValue( "dbname", "owncloud" ); - $host = OC_Config::getValue( "dbhost", "" ); - $user = OC_Config::getValue( "dbuser", "" ); - $pass = OC_Config::getValue( "dbpassword", "" ); - if (strpos($host,':')) { - list($host, $port) = explode(':', $host, 2); - } else { - $port = false; - } - $opts = array(); + if (substr ($query, $i, 1) == '?') { + // We found a question mark + if ($inSubstring) { + $newQuery .= $input[$cArg]; - if ($port) { - $dsn = 'sqlsrv:Server='.$host.','.$port.';Database='.$name; - } else { - $dsn = 'sqlsrv:Server='.$host.';Database='.$name; - } + // + // Remove from input array + // + array_splice ($input, $cArg, 1); + } else { + $newQuery .= substr ($query, $i, 1); + $cArg++; + } + } else { + $newQuery .= substr ($query, $i, 1); + } + } - $PDO = new PDO($dsn, $user, $pass, $opts); - $PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); - $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + // The global data we need + $name = OC_Config::getValue( "dbname", "owncloud" ); + $host = OC_Config::getValue( "dbhost", "" ); + $user = OC_Config::getValue( "dbuser", "" ); + $pass = OC_Config::getValue( "dbpassword", "" ); + if (strpos($host,':')) { + list($host, $port) = explode(':', $host, 2); + } else { + $port = false; + } + $opts = array(); - $this->statement = $PDO->prepare($newQuery); + if ($port) { + $dsn = 'sqlsrv:Server='.$host.','.$port.';Database='.$name; + } else { + $dsn = 'sqlsrv:Server='.$host.';Database='.$name; + } - $this->lastArguments = $input; - - return $input; - } catch (PDOException $e){ + $PDO = new PDO($dsn, $user, $pass, $opts); + $PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); + $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + + $this->statement = $PDO->prepare($newQuery); + + $this->lastArguments = $input; + + return $input; + } catch (PDOException $e){ $entry = 'PDO DB Error: "'.$e->getMessage().'"
    '; $entry .= 'Offending command was: '.$this->statement->queryString .'
    '; $entry .= 'Input parameters: ' .print_r($input, true).'
    '; $entry .= 'Stack trace: ' .$e->getTraceAsString().'
    '; OC_Log::write('core', $entry, OC_Log::FATAL); - OC_User::setUserId(null); + OC_User::setUserId(null); - // send http status 503 - header('HTTP/1.1 503 Service Temporarily Unavailable'); - header('Status: 503 Service Temporarily Unavailable'); - OC_Template::printErrorPage('Failed to connect to database'); - die ($entry); + // send http status 503 + header('HTTP/1.1 503 Service Temporarily Unavailable'); + header('Status: 503 Service Temporarily Unavailable'); + OC_Template::printErrorPage('Failed to connect to database'); + die ($entry); } - } + } /** * provide numRows diff --git a/lib/files/cache/legacy.php b/lib/files/cache/legacy.php index 33d4b8e7c9..bdc3cbf00b 100644 --- a/lib/files/cache/legacy.php +++ b/lib/files/cache/legacy.php @@ -51,6 +51,12 @@ class Legacy { $this->cacheHasItems = false; return false; } + + if ($result === false || property_exists($result, 'error_message_prefix')) { + $this->cacheHasItems = false; + return false; + } + $this->cacheHasItems = (bool)$result->fetchRow(); return $this->cacheHasItems; } From 46103e62d2bb893daabd1e3e36e49bf857d144eb Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Sun, 10 Feb 2013 14:09:49 +0100 Subject: [PATCH 124/719] Coding style --- lib/helper.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/helper.php b/lib/helper.php index 124ab9da96..2713ffed45 100644 --- a/lib/helper.php +++ b/lib/helper.php @@ -436,8 +436,9 @@ class OC_Helper { //FIXME: should also check for value validation (i.e. the email is an email). public static function init_var($s, $d="") { $r = $d; - if(isset($_REQUEST[$s]) && !empty($_REQUEST[$s])) + if(isset($_REQUEST[$s]) && !empty($_REQUEST[$s])) { $r = OC_Util::sanitizeHTML($_REQUEST[$s]); + } return $r; } From 1263511a179fb1508f41207d61d76739e087b239 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Sun, 10 Feb 2013 14:16:45 +0100 Subject: [PATCH 125/719] append .part to put files --- lib/connector/sabre/file.php | 8 +++++++- lib/files/cache/scanner.php | 18 +++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php index 1c18a39174..521c5f0571 100644 --- a/lib/connector/sabre/file.php +++ b/lib/connector/sabre/file.php @@ -45,7 +45,13 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D */ public function put($data) { - \OC\Files\Filesystem::file_put_contents($this->path,$data); + // mark file as partial while uploading (ignored by the scanner) + $partpath = $this->path . '.part'; + + \OC\Files\Filesystem::file_put_contents($partpath, $data); + + // rename to correct path + \OC\Files\Filesystem::rename($partpath, $this->path); return OC_Connector_Sabre_Node::getETagPropertyForPath($this->path); } diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php index 9a5546dce3..5a9a119458 100644 --- a/lib/files/cache/scanner.php +++ b/lib/files/cache/scanner.php @@ -97,7 +97,7 @@ class Scanner { if ($this->storage->is_dir($path) && ($dh = $this->storage->opendir($path))) { \OC_DB::beginTransaction(); while ($file = readdir($dh)) { - if ($file !== '.' and $file !== '..') { + if (!$this->isIgnoredFile($file)) { $child = ($path) ? $path . '/' . $file : $file; $data = $this->scanFile($child); if ($data) { @@ -133,6 +133,22 @@ class Scanner { } return $size; } + + /** + * @brief check if the file should be ignored when scanning + * NOTE: files with a '.part' extension are ignored as well! + * prevents unfinished put requests to be scanned + * @param String $file + * @return boolean + */ + private function isIgnoredFile($file) { + if ($file === '.' || $file === '..' + || pathinfo($file,PATHINFO_EXTENSION) === 'part') + { + return true; + } + return false; + } /** * walk over any folders that are not fully scanned yet and scan them From ff09a1f37baa5ad5bd63c57ec5384e3ffbc38ad0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Sun, 10 Feb 2013 14:17:18 +0100 Subject: [PATCH 126/719] don't use OC_FilesystemView() --- apps/files_versions/lib/hooks.php | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/apps/files_versions/lib/hooks.php b/apps/files_versions/lib/hooks.php index dc02c605c4..6c87eba423 100644 --- a/apps/files_versions/lib/hooks.php +++ b/apps/files_versions/lib/hooks.php @@ -20,13 +20,10 @@ class Hooks { public static function write_hook( $params ) { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { - - $versions = new Storage( new \OC\Files\View('') ); - $path = $params[\OC\Files\Filesystem::signal_param_path]; - - if($path<>'') $versions->store( $path ); - + if($path<>'') { + Storage::store($path); + } } } @@ -40,12 +37,10 @@ class Hooks { */ public static function remove_hook($params) { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { - - $versions = new Storage( new \OC_FilesystemView('') ); - $path = $params[\OC\Files\Filesystem::signal_param_path]; - - if($path<>'') $versions->delete( $path ); + if($path<>'') { + Storage::delete($path); + } } } @@ -59,13 +54,11 @@ class Hooks { */ public static function rename_hook($params) { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { - - $versions = new Storage( new \OC_FilesystemView('') ); - $oldpath = $params['oldpath']; $newpath = $params['newpath']; - - if($oldpath<>'' && $newpath<>'') $versions->rename( $oldpath, $newpath ); + if($oldpath<>'' && $newpath<>'') { + Storage::rename( $oldpath, $newpath ); + } } } From f141f8b523f71351841f64ab1e4782b4535ca1b7 Mon Sep 17 00:00:00 2001 From: Tom Needham Date: Sun, 10 Feb 2013 14:42:23 +0100 Subject: [PATCH 127/719] Add further capabilities to /cloud/capabilitites api call --- apps/files/appinfo/app.php | 2 ++ apps/files/appinfo/routes.php | 5 ++++- apps/files/lib/capabilities.php | 24 ++++++++++++++++++++++ apps/files_encryption/appinfo/app.php | 1 + apps/files_encryption/appinfo/routes.php | 9 ++++++++ apps/files_encryption/lib/capabilities.php | 23 +++++++++++++++++++++ 6 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 apps/files/lib/capabilities.php create mode 100644 apps/files_encryption/appinfo/routes.php create mode 100644 apps/files_encryption/lib/capabilities.php diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php index da17a7f2cc..6535a9b7ba 100644 --- a/apps/files/appinfo/app.php +++ b/apps/files/appinfo/app.php @@ -1,4 +1,6 @@ create('download', 'download{file}') ->requirements(array('file' => '.*')) - ->actionInclude('files/download.php'); \ No newline at end of file + ->actionInclude('files/download.php'); + +// Register with the capabilities API +OC_API::register('get', '/cloud/capabilities', array('OCA\Files\Capabilities', 'getCapabilities'), 'files', OC_API::USER_AUTH); \ No newline at end of file diff --git a/apps/files/lib/capabilities.php b/apps/files/lib/capabilities.php new file mode 100644 index 0000000000..90a5e2f4eb --- /dev/null +++ b/apps/files/lib/capabilities.php @@ -0,0 +1,24 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCA\Files; + +class Capabilities { + + public static function getCapabilities() { + return new \OC_OCS_Result(array( + 'capabilities' => array( + 'files' => array( + 'bigfilechunking' => true, + 'undelete' => true, + ), + ), + )); + } + +} \ No newline at end of file diff --git a/apps/files_encryption/appinfo/app.php b/apps/files_encryption/appinfo/app.php index f83109a18e..3c100b4957 100644 --- a/apps/files_encryption/appinfo/app.php +++ b/apps/files_encryption/appinfo/app.php @@ -7,6 +7,7 @@ OC::$CLASSPATH['OCA\Encryption\Keymanager'] = 'apps/files_encryption/lib/keymana OC::$CLASSPATH['OCA\Encryption\Stream'] = 'apps/files_encryption/lib/stream.php'; OC::$CLASSPATH['OCA\Encryption\Proxy'] = 'apps/files_encryption/lib/proxy.php'; OC::$CLASSPATH['OCA\Encryption\Session'] = 'apps/files_encryption/lib/session.php'; +OC::$CLASSPATH['OCA\Encryption\Capabilities'] = 'apps/files_encryption/lib/capabilities.php'; OC_FileProxy::register( new OCA\Encryption\Proxy() ); diff --git a/apps/files_encryption/appinfo/routes.php b/apps/files_encryption/appinfo/routes.php new file mode 100644 index 0000000000..ab83432a4b --- /dev/null +++ b/apps/files_encryption/appinfo/routes.php @@ -0,0 +1,9 @@ + + * This file is licensed under the Affero General Public License version 3 or later. + * See the COPYING-README file. + */ + +// Register with the capabilities API +OC_API::register('get', '/cloud/capabilities', array('OCA\Encryption\Capabilities', 'getCapabilities'), 'files_encryption', OC_API::USER_AUTH); \ No newline at end of file diff --git a/apps/files_encryption/lib/capabilities.php b/apps/files_encryption/lib/capabilities.php new file mode 100644 index 0000000000..72baddcd04 --- /dev/null +++ b/apps/files_encryption/lib/capabilities.php @@ -0,0 +1,23 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCA\Encryption; + +class Capabilities { + + public static function getCapabilities() { + return new \OC_OCS_Result(array( + 'capabilities' => array( + 'files' => array( + 'encryption' => true, + ), + ), + )); + } + +} \ No newline at end of file From d8fee28b3becfff155c73395c96d76a0315788a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Sun, 10 Feb 2013 14:43:31 +0100 Subject: [PATCH 128/719] add switch to enable/disable the possibility to change the display name by the user --- config/config.sample.php | 3 +++ lib/user.php | 10 ++++++---- settings/ajax/changedisplayname.php | 4 ++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/config/config.sample.php b/config/config.sample.php index cfef3d5117..2f394c41a3 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -114,6 +114,9 @@ $CONFIG = array( /* How long should ownCloud keep deleted files in the trash bin, default value: 180 days */ 'trashbin_retention_obligation' => 180, +/* allow user to change his display name, if it is supported by the back-end */ +'allow_user_to_change_display_name' => true, + /* Check 3rdparty apps for malicious code fragments */ "appcodechecker" => "", diff --git a/lib/user.php b/lib/user.php index 9dc8cca97a..37b4611888 100644 --- a/lib/user.php +++ b/lib/user.php @@ -445,10 +445,12 @@ class OC_User { * Check whether a specified user can change his display name */ public static function canUserChangeDisplayName($uid) { - foreach(self::$_usedBackends as $backend) { - if($backend->implementsActions(OC_USER_BACKEND_SET_DISPLAYNAME)) { - if($backend->userExists($uid)) { - return true; + if (OC_Config::getValue('allow_user_to_change_display_name', true)) { + foreach(self::$_usedBackends as $backend) { + if($backend->implementsActions(OC_USER_BACKEND_SET_DISPLAYNAME)) { + if($backend->userExists($uid)) { + return true; + } } } } diff --git a/settings/ajax/changedisplayname.php b/settings/ajax/changedisplayname.php index 8f2ff865bd..6946233076 100644 --- a/settings/ajax/changedisplayname.php +++ b/settings/ajax/changedisplayname.php @@ -15,6 +15,10 @@ if(OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)) { $userstatus = 'subadmin'; } +if ($username == OC_User::getUser() && OC_User::canUserChangeDisplayName($username)) { + $userstatus = 'changeOwnDisplayName'; +} + if(is_null($userstatus)) { OC_JSON::error( array( "data" => array( "message" => $l->t("Authentication error") ))); exit(); From 513bf0b99957e9d7ed29d63ed9ff36d8214a0692 Mon Sep 17 00:00:00 2001 From: hkjolhede Date: Sun, 10 Feb 2013 15:37:05 +0100 Subject: [PATCH 129/719] Update apps/files_external/lib/config.php Corrected minor error --- apps/files_external/lib/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 47f0810ec5..d78c69e83d 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -105,7 +105,7 @@ class OC_Mount_Config { 'root' => '&Root', 'secure' => '!Secure https://')); - $backends['OC_Filestorage_SFTP']=array( + $backends['\OC\Files\Storage\SFTP']=array( 'backend' => 'SFTP', 'configuration' => array( 'host' => 'URL', From 3292dc3eea1340a9fb41b52015e64aced31c6210 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sun, 10 Feb 2013 16:44:00 +0100 Subject: [PATCH 130/719] Cache: allow file sizes >2GB --- db_structure.xml | 2 +- lib/util.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/db_structure.xml b/db_structure.xml index f353ae0809..3ce41096d9 100644 --- a/db_structure.xml +++ b/db_structure.xml @@ -266,7 +266,7 @@ integer true - 4 + 8 diff --git a/lib/util.php b/lib/util.php index a5fe4cb175..7950586b58 100755 --- a/lib/util.php +++ b/lib/util.php @@ -74,7 +74,7 @@ class OC_Util { */ public static function getVersion() { // hint: We only can count up. So the internal version number of ownCloud 4.5 will be 4.90.0. This is not visible to the user - return array(4, 91, 9); + return array(4, 91, 10); } /** From f58ed7a509da54fcd29e21dc6fc75528822157a4 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Sun, 10 Feb 2013 17:31:12 +0100 Subject: [PATCH 131/719] no need to implement createUser in web dav auth --- apps/user_webdavauth/user_webdavauth.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/apps/user_webdavauth/user_webdavauth.php b/apps/user_webdavauth/user_webdavauth.php index 1459781a3b..dd34e0ad2f 100755 --- a/apps/user_webdavauth/user_webdavauth.php +++ b/apps/user_webdavauth/user_webdavauth.php @@ -28,12 +28,6 @@ class OC_USER_WEBDAVAUTH extends OC_User_Backend { $this->webdavauth_url = OC_Config::getValue( "user_webdavauth_url" ); } - public function createUser() { - // Can't create user - OC_Log::write('OC_USER_WEBDAVAUTH', 'Not possible to create users from web frontend using WebDAV user backend', 3); - return false; - } - public function deleteUser($uid) { // Can't delete user OC_Log::write('OC_USER_WEBDAVAUTH', 'Not possible to delete users from web frontend using WebDAV user backend', 3); From 0c4487d292e1f308bfacb8dcd16ea195f442fbdb Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Sun, 10 Feb 2013 18:06:18 +0100 Subject: [PATCH 132/719] add big white icons for lightbox, slideshow etc --- core/img/actions/view-close.png | Bin 0 -> 434 bytes core/img/actions/view-close.svg | 73 +++++++++++++++++++++++++++++ core/img/actions/view-next.png | Bin 0 -> 341 bytes core/img/actions/view-next.svg | 73 +++++++++++++++++++++++++++++ core/img/actions/view-pause.png | Bin 0 -> 206 bytes core/img/actions/view-pause.svg | 72 ++++++++++++++++++++++++++++ core/img/actions/view-play.png | Bin 0 -> 274 bytes core/img/actions/view-play.svg | 73 +++++++++++++++++++++++++++++ core/img/actions/view-previous.png | Bin 0 -> 356 bytes core/img/actions/view-previous.svg | 73 +++++++++++++++++++++++++++++ 10 files changed, 364 insertions(+) create mode 100644 core/img/actions/view-close.png create mode 100644 core/img/actions/view-close.svg create mode 100644 core/img/actions/view-next.png create mode 100644 core/img/actions/view-next.svg create mode 100644 core/img/actions/view-pause.png create mode 100644 core/img/actions/view-pause.svg create mode 100644 core/img/actions/view-play.png create mode 100644 core/img/actions/view-play.svg create mode 100644 core/img/actions/view-previous.png create mode 100644 core/img/actions/view-previous.svg diff --git a/core/img/actions/view-close.png b/core/img/actions/view-close.png new file mode 100644 index 0000000000000000000000000000000000000000..80339d78229a0047c048fb1560cdd11f86aebbec GIT binary patch literal 434 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8!3Q zuY)k7lg8`{prB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&3=E9=o-U3d z5v^~-5B4515Rm!wxV(SL1htBI_B@sn(It#7QjL5+F0rT{X#V|Sx3t_%j{B#|#2BOI zPMN3_d9uRTIy--kq-VvVqT1go2|@`17nok~?1_2Pd*noO%Db$}s_p1e;|C|=7!DZ58X{o`g^cP=iiJiFZhMy8R~fT`vVyxn18rEj4)Gs@U|fT=;Q{^ a1H3bR?f!Dk>`w!RFN3G6pUXO@geCxb<*-`- literal 0 HcmV?d00001 diff --git a/core/img/actions/view-close.svg b/core/img/actions/view-close.svg new file mode 100644 index 0000000000..45d6697608 --- /dev/null +++ b/core/img/actions/view-close.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/core/img/actions/view-next.png b/core/img/actions/view-next.png new file mode 100644 index 0000000000000000000000000000000000000000..b76bea06713c6bd66eb4913a70f8ce88b55d5829 GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8!3Q zuY)k7lg8`{prB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt-24T^vIq zTAxn8$mwLrqgwlff8{(W+^StGs_*HY8nR2%EHa?YW6VKR9*>|tv + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/core/img/actions/view-pause.png b/core/img/actions/view-pause.png new file mode 100644 index 0000000000000000000000000000000000000000..64264ff9281a2114a7c662b93c96018ba5da9777 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8!3Q zuY)k7lg8`{prB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt{61`ZhFLzxp`n4*_#Ue>v+%lVps@^|u6{1-oD!M + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/core/img/actions/view-play.png b/core/img/actions/view-play.png new file mode 100644 index 0000000000000000000000000000000000000000..0080d45b5cdc57d396bba4ade8c42b36ea197edd GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8!3Q zuY)k7lg8`{prB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt=tYE{-7) zt#7Y8@--;%xLka6(!$DIIy|RCC}Vl>PM z&A5X9{7Pfy7Kbo~brWP8xLueRIO#BOwJ;hu&R`Hd!n}d?Ba4os5<{@Zuk$Z1M^E@B zv`qH!7XFD^XBcK25@S$Z!x(Vbnqm3}t^=kv%q=ayMIPMYt>@dp*t^~>$=Y_O63}T3 Mp00i_>zopr00O&OV*mgE literal 0 HcmV?d00001 diff --git a/core/img/actions/view-play.svg b/core/img/actions/view-play.svg new file mode 100644 index 0000000000..0bdc63bf7e --- /dev/null +++ b/core/img/actions/view-play.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/core/img/actions/view-previous.png b/core/img/actions/view-previous.png new file mode 100644 index 0000000000000000000000000000000000000000..82943c23a59ca65b54c2882c4a2ea8901fb42998 GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8!3Q zuY)k7lg8`{prB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt&HdT^vIq zTAxlo%X`Rx$1V5@tHlPU$p*aM0&NLWYKd)LItLyWGEQt3wp{l*?9im8&l2kO*L^l; z$n?FvcGW%shkrZHG5DYVqm!Lvqdg(mYkE>m#~KIA;s$Gjtfc7z^$gXyd$#`&w)pns zgGfE&@_ROMj~LRu_4Gf^-a1L{(W}1s+zOrLrGI1?JooH=yq00oj+Kvf875gsSjT<3 z+W+|M|0Z9PL~f-V$!!XU%od5c+z7kV#9`f&C9v>#A+ORGr=Vtzy_2pgIO#7n<+yt4 vL!Ed`_s1oiQnHNu1TK|dW&82@`bTMx8sYxS+$Wa+JgTe~DWM4f=Q)Ri literal 0 HcmV?d00001 diff --git a/core/img/actions/view-previous.svg b/core/img/actions/view-previous.svg new file mode 100644 index 0000000000..df1f49511d --- /dev/null +++ b/core/img/actions/view-previous.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + From c5e17e099a5ba679304582f55a15ff895fc7a853 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Sun, 10 Feb 2013 18:31:33 +0100 Subject: [PATCH 133/719] split close and delete icon, add red hover for delete --- core/img/actions/close.png | Bin 0 -> 275 bytes core/img/actions/close.svg | 73 ++++++++++++++++++++++++++++++ core/img/actions/delete-hover.png | Bin 0 -> 344 bytes core/img/actions/delete-hover.svg | 73 ++++++++++++++++++++++++++++++ 4 files changed, 146 insertions(+) create mode 100644 core/img/actions/close.png create mode 100644 core/img/actions/close.svg create mode 100644 core/img/actions/delete-hover.png create mode 100644 core/img/actions/delete-hover.svg diff --git a/core/img/actions/close.png b/core/img/actions/close.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0c782882deaa4f9ecf1676592ddba0cc9aacbc GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4%Pm*(PLD+t=F;b z*eX3n(MkRcKXtZMbAR7WZg&GK3{-9d P-NxYQ>gTe~DWM4f<>O_1 literal 0 HcmV?d00001 diff --git a/core/img/actions/close.svg b/core/img/actions/close.svg new file mode 100644 index 0000000000..6a6d98e34a --- /dev/null +++ b/core/img/actions/close.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/core/img/actions/delete-hover.png b/core/img/actions/delete-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..08b15510d926eaddb2c59558120a8d0166c58486 GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4=Gf;VtKX`z#wqYcD@^#L>V2&u z?a%Y*X}NMMr?+46H}|+?=KWWpb()2TqIbOKEj=lYxW=zseXd=`aZ7eIDSwEw6hHe_ zfL${riN)&GtFhZsrz4H%IZen}1DSs|8{dBRx}aXrG)M7VMcWL8>zn^YeO}Fc*nGqMSz(J~)m}90 jE1H&GkpK68`Y*EYV`njxgN@xNA`Jsf+ literal 0 HcmV?d00001 diff --git a/core/img/actions/delete-hover.svg b/core/img/actions/delete-hover.svg new file mode 100644 index 0000000000..63cacd5e38 --- /dev/null +++ b/core/img/actions/delete-hover.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + From dbb4be903c52db5a241aa5765412a3bb875097c2 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Sun, 10 Feb 2013 21:52:57 +0100 Subject: [PATCH 134/719] LDAP: change generation of internal names. Use UUID for users. Change to sequential numbers for groups as they are still used as display names --- apps/user_ldap/lib/access.php | 119 ++++++++++++++++++++++++++++------ 1 file changed, 100 insertions(+), 19 deletions(-) diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php index 68cbe4a5e7..ab6915d839 100644 --- a/apps/user_ldap/lib/access.php +++ b/apps/user_ldap/lib/access.php @@ -293,6 +293,10 @@ abstract class Access { $query->execute(array($dn, $uuid)); return $component; } + } else { + //If the UUID can't be detected something is foul. + \OCP\Util::writeLog('user_ldap', 'Cannot determine UUID for '.$dn.'. Skipping.', \OCP\Util::INFO); + return false; } if(is_null($ldapname)) { @@ -303,21 +307,24 @@ abstract class Access { } $ldapname = $ldapname[0]; } - $ldapname = $this->sanitizeUsername($ldapname); + $intname = $isUser ? $this->sanitizeUsername($uuid) : $this->sanitizeUsername($ldapname); //a new user/group! Add it only if it doesn't conflict with other backend's users or existing groups - if(($isUser && !\OCP\User::userExists($ldapname, 'OCA\\user_ldap\\USER_LDAP')) || (!$isUser && !\OC_Group::groupExists($ldapname))) { - if($this->mapComponent($dn, $ldapname, $isUser)) { - return $ldapname; + //disabling Cache is required to avoid that the new user is cached as not-existing in fooExists check + $originalTTL = $this->connection->ldapCacheTTL; + $this->connection->setConfiguration(array('ldapCacheTTL' => 0)); + if(($isUser && !\OCP\User::userExists($intname)) + || (!$isUser && !\OC_Group::groupExists($intname))) { + if($this->mapComponent($dn, $intname, $isUser)) { + $this->connection->setConfiguration(array('ldapCacheTTL' => $originalTTL)); + return $intname; } } + $this->connection->setConfiguration(array('ldapCacheTTL' => $originalTTL)); - //doh! There is a conflict. We need to distinguish between users/groups. Adding indexes is an idea, but not much of a help for the user. The DN is ugly, but for now the only reasonable way. But we transform it to a readable format and remove the first part to only give the path where this object is located. - $oc_name = $this->alternateOwnCloudName($ldapname, $dn); - if(($isUser && !\OCP\User::userExists($oc_name)) || (!$isUser && !\OC_Group::groupExists($oc_name))) { - if($this->mapComponent($dn, $oc_name, $isUser)) { - return $oc_name; - } + $altname = $this->createAltInternalOwnCloudName($intname, $isUser); + if($this->mapComponent($dn, $altname, $isUser)) { + return $altname; } //if everything else did not help.. @@ -400,18 +407,92 @@ abstract class Access { } /** - * @brief creates a hopefully unique name for owncloud based on the display name and the dn of the LDAP object + * @brief creates a unique name for internal ownCloud use for users. Don't call it directly. * @param $name the display name of the object - * @param $dn the dn of the object - * @returns string with with the name to use in ownCloud + * @returns string with with the name to use in ownCloud or false if unsuccessful * - * creates a hopefully unique name for owncloud based on the display name and the dn of the LDAP object + * Instead of using this method directly, call + * createAltInternalOwnCloudName($name, true) */ - private function alternateOwnCloudName($name, $dn) { - $ufn = ldap_dn2ufn($dn); - $name = $name . '@' . trim(\OCP\Util::mb_substr_replace($ufn, '', 0, mb_strpos($ufn, ',', 0, 'UTF-8'), 'UTF-8')); - $name = $this->sanitizeUsername($name); - return $name; + private function _createAltInternalOwnCloudNameForUsers($name) { + $attempts = 0; + //while loop is just a precaution. If a name is not generated within + //20 attempts, something else is very wrong. Avoids infinite loop. + while($attempts < 20){ + $altName = $name . '_' . uniqid(); + if(\OCP\User::userExists($altName)) { + return $altName; + } + $attempts++; + } + return false; + } + + /** + * @brief creates a unique name for internal ownCloud use for groups. Don't call it directly. + * @param $name the display name of the object + * @returns string with with the name to use in ownCloud or false if unsuccessful. + * + * Instead of using this method directly, call + * createAltInternalOwnCloudName($name, false) + * + * Group names are also used as display names, so we do a sequential + * numbering, e.g. Developers_42 when there are 41 other groups called + * "Developers" + */ + private function _createAltInternalOwnCloudNameForGroups($name) { + $query = \OCP\DB::prepare(' + SELECT `owncloud_name` + FROM `'.$this->getMapTable(false).'` + WHERE `owncloud_name` LIKE ? + '); + + $usedNames = array(); + $res = $query->execute(array($name.'_%')); + while($row = $res->fetchRow()) { + $usedNames[] = $row['owncloud_name']; + } + if(!($usedNames) || count($usedNames) == 0) { + $lastNo = 1; //will become name_2 + } else { + natsort($usedNames); + $lastname = array_pop($usedNames); + $lastNo = intval(substr($lastname, strrpos($lastname, '_') + 1)); + } + $altName = $name.'_'.strval($lastNo+1); + unset($usedNames); + + $attempts = 1; + while($attempts < 21){ + //Pro forma check to be really sure it is unique + //while loop is just a precaution. If a name is not generated within + //20 attempts, something else is very wrong. Avoids infinite loop. + if(!\OC_Group::groupExists($altName)) { + return $altName; + } + $altName = $name . '_' . $lastNo + $attempts; + $attempts++; + } + return false; + } + + /** + * @brief creates a unique name for internal ownCloud use. + * @param $name the display name of the object + * @param $isUser boolean, whether name should be created for a user (true) or a group (false) + * @returns string with with the name to use in ownCloud or false if unsuccessful + */ + private function createAltInternalOwnCloudName($name, $isUser) { + $originalTTL = $this->connection->ldapCacheTTL; + $this->connection->setConfiguration(array('ldapCacheTTL' => 0)); + if($isUser) { + $altName = $this->_createAltInternalOwnCloudNameForUsers($name); + } else { + $altName = $this->_createAltInternalOwnCloudNameForGroups($name); + } + $this->connection->setConfiguration(array('ldapCacheTTL' => $originalTTL)); + + return $altName; } /** From afc9fe419aee034999fcaa9ace05c0043189154d Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Sun, 10 Feb 2013 21:53:27 +0100 Subject: [PATCH 135/719] adjust copyright --- apps/user_ldap/lib/access.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php index ab6915d839..057ae17c30 100644 --- a/apps/user_ldap/lib/access.php +++ b/apps/user_ldap/lib/access.php @@ -4,7 +4,7 @@ * ownCloud – LDAP Access * * @author Arthur Schiwon - * @copyright 2012 Arthur Schiwon blizzz@owncloud.com + * @copyright 2012, 2013 Arthur Schiwon blizzz@owncloud.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE From 04146f2059e2d038177db544ea9f37a124f0781e Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Mon, 11 Feb 2013 00:04:49 +0100 Subject: [PATCH 136/719] [tx-robot] updated from transifex --- apps/files/l10n/ca.php | 1 + apps/files/l10n/cs_CZ.php | 1 + apps/files/l10n/es.php | 2 + apps/files/l10n/fi_FI.php | 2 + apps/files/l10n/fr.php | 1 + apps/files/l10n/it.php | 1 + apps/files/l10n/lv.php | 5 +++ apps/files/l10n/pt_PT.php | 1 + apps/files/l10n/zh_TW.php | 3 ++ apps/files_encryption/l10n/pt_PT.php | 3 ++ apps/files_trashbin/l10n/pt_PT.php | 3 ++ apps/files_versions/l10n/pt_PT.php | 8 ++++ apps/user_ldap/l10n/pt_PT.php | 1 + core/l10n/es.php | 2 + core/l10n/fr.php | 2 + core/l10n/lv.php | 2 + core/l10n/pt_PT.php | 3 ++ core/l10n/zh_TW.php | 4 ++ l10n/af_ZA/settings.po | 14 +++---- l10n/ar/settings.po | 14 +++---- l10n/bg_BG/settings.po | 14 +++---- l10n/bn_BD/settings.po | 14 +++---- l10n/ca/files.po | 22 +++++------ l10n/ca/lib.po | 11 +++--- l10n/ca/settings.po | 16 +++----- l10n/cs_CZ/files.po | 22 +++++------ l10n/cs_CZ/lib.po | 10 ++--- l10n/cs_CZ/settings.po | 16 +++----- l10n/da/settings.po | 14 +++---- l10n/de/settings.po | 14 +++---- l10n/de_DE/settings.po | 16 +++----- l10n/el/settings.po | 14 +++---- l10n/eo/settings.po | 14 +++---- l10n/es/core.po | 55 +++++++++++++------------- l10n/es/files.po | 25 ++++++------ l10n/es/lib.po | 11 +++--- l10n/es/settings.po | 16 +++----- l10n/es_AR/settings.po | 14 +++---- l10n/et_EE/settings.po | 14 +++---- l10n/eu/settings.po | 14 +++---- l10n/fa/settings.po | 14 +++---- l10n/fi_FI/files.po | 24 ++++++------ l10n/fi_FI/lib.po | 8 ++-- l10n/fi_FI/settings.po | 22 +++++------ l10n/fr/core.po | 55 +++++++++++++------------- l10n/fr/files.po | 24 ++++++------ l10n/fr/lib.po | 11 +++--- l10n/fr/settings.po | 16 +++----- l10n/gl/settings.po | 14 +++---- l10n/he/settings.po | 14 +++---- l10n/hi/settings.po | 14 +++---- l10n/hr/settings.po | 14 +++---- l10n/hu_HU/settings.po | 14 +++---- l10n/ia/settings.po | 14 +++---- l10n/id/settings.po | 14 +++---- l10n/is/settings.po | 14 +++---- l10n/it/files.po | 22 +++++------ l10n/it/lib.po | 10 ++--- l10n/it/settings.po | 16 +++----- l10n/ja_JP/settings.po | 16 +++----- l10n/ka_GE/settings.po | 14 +++---- l10n/ko/settings.po | 14 +++---- l10n/ku_IQ/settings.po | 14 +++---- l10n/lb/settings.po | 14 +++---- l10n/lt_LT/settings.po | 14 +++---- l10n/lv/core.po | 54 +++++++++++++------------- l10n/lv/files.po | 30 +++++++------- l10n/lv/lib.po | 10 ++--- l10n/lv/settings.po | 16 +++----- l10n/mk/settings.po | 14 +++---- l10n/ms_MY/settings.po | 14 +++---- l10n/nb_NO/settings.po | 14 +++---- l10n/nl/settings.po | 16 +++----- l10n/nn_NO/settings.po | 14 +++---- l10n/oc/settings.po | 14 +++---- l10n/pl/settings.po | 14 +++---- l10n/pl_PL/settings.po | 14 +++---- l10n/pt_BR/settings.po | 14 +++---- l10n/pt_PT/core.po | 56 +++++++++++++-------------- l10n/pt_PT/files.po | 22 +++++------ l10n/pt_PT/files_encryption.po | 12 +++--- l10n/pt_PT/files_trashbin.po | 12 +++--- l10n/pt_PT/files_versions.po | 23 +++++------ l10n/pt_PT/lib.po | 11 +++--- l10n/pt_PT/settings.po | 22 +++++------ l10n/pt_PT/user_ldap.po | 8 ++-- l10n/ro/settings.po | 14 +++---- l10n/ru/settings.po | 16 +++----- l10n/ru_RU/settings.po | 14 +++---- l10n/si_LK/settings.po | 14 +++---- l10n/sk/settings.po | 16 +++----- l10n/sk_SK/settings.po | 14 +++---- l10n/sl/settings.po | 14 +++---- l10n/sr/settings.po | 14 +++---- l10n/sr@latin/settings.po | 14 +++---- l10n/sv/settings.po | 14 +++---- l10n/sw_KE/settings.po | 16 +++----- l10n/ta_LK/settings.po | 14 +++---- l10n/templates/core.pot | 28 +++++++------- l10n/templates/files.pot | 16 ++++---- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 6 +-- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_trashbin.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/settings.pot | 10 ++--- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- l10n/th_TH/settings.po | 14 +++---- l10n/tr/settings.po | 14 +++---- l10n/uk/settings.po | 16 +++----- l10n/vi/settings.po | 14 +++---- l10n/zh_CN.GB2312/settings.po | 14 +++---- l10n/zh_CN/settings.po | 14 +++---- l10n/zh_HK/settings.po | 14 +++---- l10n/zh_TW/core.po | 58 ++++++++++++++-------------- l10n/zh_TW/files.po | 26 ++++++------- l10n/zh_TW/lib.po | 10 ++--- l10n/zh_TW/settings.po | 22 +++++------ lib/l10n/ca.php | 2 + lib/l10n/cs_CZ.php | 2 + lib/l10n/es.php | 2 + lib/l10n/fi_FI.php | 1 + lib/l10n/fr.php | 2 + lib/l10n/it.php | 2 + lib/l10n/lv.php | 2 + lib/l10n/pt_PT.php | 2 + lib/l10n/zh_TW.php | 2 + settings/l10n/ar.php | 1 - settings/l10n/bg_BG.php | 1 - settings/l10n/bn_BD.php | 1 - settings/l10n/ca.php | 1 - settings/l10n/cs_CZ.php | 1 - settings/l10n/da.php | 1 - settings/l10n/de.php | 1 - settings/l10n/de_DE.php | 1 - settings/l10n/el.php | 1 - settings/l10n/eo.php | 1 - settings/l10n/es.php | 1 - settings/l10n/es_AR.php | 1 - settings/l10n/et_EE.php | 1 - settings/l10n/eu.php | 1 - settings/l10n/fa.php | 1 - settings/l10n/fi_FI.php | 5 ++- settings/l10n/fr.php | 1 - settings/l10n/gl.php | 1 - settings/l10n/he.php | 1 - settings/l10n/hr.php | 1 - settings/l10n/hu_HU.php | 1 - settings/l10n/ia.php | 1 - settings/l10n/id.php | 1 - settings/l10n/is.php | 1 - settings/l10n/it.php | 1 - settings/l10n/ja_JP.php | 1 - settings/l10n/ka_GE.php | 1 - settings/l10n/ko.php | 1 - settings/l10n/lb.php | 1 - settings/l10n/lt_LT.php | 1 - settings/l10n/lv.php | 1 - settings/l10n/mk.php | 1 - settings/l10n/ms_MY.php | 1 - settings/l10n/nb_NO.php | 1 - settings/l10n/nl.php | 1 - settings/l10n/nn_NO.php | 1 - settings/l10n/oc.php | 1 - settings/l10n/pl.php | 1 - settings/l10n/pt_BR.php | 1 - settings/l10n/pt_PT.php | 5 ++- settings/l10n/ro.php | 1 - settings/l10n/ru.php | 1 - settings/l10n/ru_RU.php | 1 - settings/l10n/si_LK.php | 1 - settings/l10n/sk_SK.php | 1 - settings/l10n/sl.php | 1 - settings/l10n/sr.php | 1 - settings/l10n/sr@latin.php | 1 - settings/l10n/sv.php | 1 - settings/l10n/ta_LK.php | 1 - settings/l10n/th_TH.php | 1 - settings/l10n/tr.php | 1 - settings/l10n/uk.php | 1 - settings/l10n/vi.php | 1 - settings/l10n/zh_CN.GB2312.php | 1 - settings/l10n/zh_CN.php | 1 - settings/l10n/zh_TW.php | 5 ++- 186 files changed, 779 insertions(+), 1014 deletions(-) diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php index ecfc6abc8d..6655633bbd 100644 --- a/apps/files/l10n/ca.php +++ b/apps/files/l10n/ca.php @@ -60,6 +60,7 @@ "Text file" => "Fitxer de text", "Folder" => "Carpeta", "From link" => "Des d'enllaç", +"Trash bin" => "Paperera", "Cancel upload" => "Cancel·la la pujada", "Nothing in here. Upload something!" => "Res per aquí. Pugeu alguna cosa!", "Download" => "Baixa", diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php index 7376056e4c..d2306838bd 100644 --- a/apps/files/l10n/cs_CZ.php +++ b/apps/files/l10n/cs_CZ.php @@ -60,6 +60,7 @@ "Text file" => "Textový soubor", "Folder" => "Složka", "From link" => "Z odkazu", +"Trash bin" => "Koš", "Cancel upload" => "Zrušit odesílání", "Nothing in here. Upload something!" => "Žádný obsah. Nahrajte něco.", "Download" => "Stáhnout", diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php index 9c4d304f7d..4ebbdb21e3 100644 --- a/apps/files/l10n/es.php +++ b/apps/files/l10n/es.php @@ -10,6 +10,7 @@ "No file was uploaded" => "No se ha subido ningún archivo", "Missing a temporary folder" => "Falta un directorio temporal", "Failed to write to disk" => "La escritura en disco ha fallado", +"Not enough storage available" => "No hay suficiente espacio disponible", "Invalid directory." => "Directorio invalido.", "Files" => "Archivos", "Delete permanently" => "Eliminar permanentemente", @@ -59,6 +60,7 @@ "Text file" => "Archivo de texto", "Folder" => "Carpeta", "From link" => "Desde el enlace", +"Trash bin" => "Papelera de reciclaje", "Cancel upload" => "Cancelar subida", "Nothing in here. Upload something!" => "Aquí no hay nada. ¡Sube algo!", "Download" => "Descargar", diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php index 031591d713..cd7ce66dc4 100644 --- a/apps/files/l10n/fi_FI.php +++ b/apps/files/l10n/fi_FI.php @@ -12,6 +12,7 @@ "Not enough storage available" => "Tallennustilaa ei ole riittävästi käytettävissä", "Invalid directory." => "Virheellinen kansio.", "Files" => "Tiedostot", +"Delete permanently" => "Poista pysyvästi", "Delete" => "Poista", "Rename" => "Nimeä uudelleen", "Pending" => "Odottaa", @@ -53,6 +54,7 @@ "Text file" => "Tekstitiedosto", "Folder" => "Kansio", "From link" => "Linkistä", +"Trash bin" => "Roskakori", "Cancel upload" => "Peru lähetys", "Nothing in here. Upload something!" => "Täällä ei ole mitään. Lähetä tänne jotakin!", "Download" => "Lataa", diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php index e2af33da77..3e8945f345 100644 --- a/apps/files/l10n/fr.php +++ b/apps/files/l10n/fr.php @@ -60,6 +60,7 @@ "Text file" => "Fichier texte", "Folder" => "Dossier", "From link" => "Depuis le lien", +"Trash bin" => "Corbeille", "Cancel upload" => "Annuler l'envoi", "Nothing in here. Upload something!" => "Il n'y a rien ici ! Envoyez donc quelque chose :)", "Download" => "Télécharger", diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php index 583a0ca7f7..23372439a2 100644 --- a/apps/files/l10n/it.php +++ b/apps/files/l10n/it.php @@ -60,6 +60,7 @@ "Text file" => "File di testo", "Folder" => "Cartella", "From link" => "Da collegamento", +"Trash bin" => "Cestino", "Cancel upload" => "Annulla invio", "Nothing in here. Upload something!" => "Non c'è niente qui. Carica qualcosa!", "Download" => "Scarica", diff --git a/apps/files/l10n/lv.php b/apps/files/l10n/lv.php index ef4928d978..b7d0073562 100644 --- a/apps/files/l10n/lv.php +++ b/apps/files/l10n/lv.php @@ -1,4 +1,7 @@ "Nevarēja pārvietot %s — jau eksistē datne ar tādu nosaukumu", +"Could not move %s" => "Nevarēja pārvietot %s", +"Unable to rename file" => "Nevarēja pārsaukt datni", "No file was uploaded. Unknown error" => "Netika augšupielādēta neviena datne. Nezināma kļūda", "There is no error, the file uploaded with success" => "Augšupielāde pabeigta bez kļūdām", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Augšupielādētā datne pārsniedz upload_max_filesize norādījumu php.ini datnē:", @@ -7,6 +10,7 @@ "No file was uploaded" => "Neviena datne netika augšupielādēta", "Missing a temporary folder" => "Trūkst pagaidu mapes", "Failed to write to disk" => "Neizdevās saglabāt diskā", +"Not enough storage available" => "Nav pietiekami daudz vietas", "Invalid directory." => "Nederīga direktorija.", "Files" => "Datnes", "Delete permanently" => "Dzēst pavisam", @@ -56,6 +60,7 @@ "Text file" => "Teksta datne", "Folder" => "Mape", "From link" => "No saites", +"Trash bin" => "Miskaste", "Cancel upload" => "Atcelt augšupielādi", "Nothing in here. Upload something!" => "Te vēl nekas nav. Rīkojies, sāc augšupielādēt!", "Download" => "Lejupielādēt", diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php index e036b3dacb..80dc774d65 100644 --- a/apps/files/l10n/pt_PT.php +++ b/apps/files/l10n/pt_PT.php @@ -60,6 +60,7 @@ "Text file" => "Ficheiro de texto", "Folder" => "Pasta", "From link" => "Da ligação", +"Trash bin" => "Reciclagem", "Cancel upload" => "Cancelar envio", "Nothing in here. Upload something!" => "Vazio. Envie alguma coisa!", "Download" => "Transferir", diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php index 0c029c8815..5249dfdbc5 100644 --- a/apps/files/l10n/zh_TW.php +++ b/apps/files/l10n/zh_TW.php @@ -10,8 +10,10 @@ "No file was uploaded" => "無已上傳檔案", "Missing a temporary folder" => "遺失暫存資料夾", "Failed to write to disk" => "寫入硬碟失敗", +"Not enough storage available" => "儲存空間不足", "Invalid directory." => "無效的資料夾。", "Files" => "檔案", +"Delete permanently" => "永久刪除", "Delete" => "刪除", "Rename" => "重新命名", "Pending" => "等候中", @@ -58,6 +60,7 @@ "Text file" => "文字檔", "Folder" => "資料夾", "From link" => "從連結", +"Trash bin" => "回收筒", "Cancel upload" => "取消上傳", "Nothing in here. Upload something!" => "沒有任何東西。請上傳內容!", "Download" => "下載", diff --git a/apps/files_encryption/l10n/pt_PT.php b/apps/files_encryption/l10n/pt_PT.php index 75ecd7f4da..1c46011fc1 100644 --- a/apps/files_encryption/l10n/pt_PT.php +++ b/apps/files_encryption/l10n/pt_PT.php @@ -1,4 +1,7 @@ "Encriptação", +"File encryption is enabled." => "A encriptação de ficheiros está ligada", +"The following file types will not be encrypted:" => "Os seguintes ficheiros não serão encriptados:", +"Exclude the following file types from encryption:" => "Excluir da encriptação os seguintes tipos de ficheiro:", "None" => "Nenhum" ); diff --git a/apps/files_trashbin/l10n/pt_PT.php b/apps/files_trashbin/l10n/pt_PT.php index 79930315b0..978ab452d6 100644 --- a/apps/files_trashbin/l10n/pt_PT.php +++ b/apps/files_trashbin/l10n/pt_PT.php @@ -1,5 +1,8 @@ "Não foi possível eliminar %s de forma permanente", +"Couldn't restore %s" => "Não foi possível restaurar %s", "perform restore operation" => "Restaurar", +"delete file permanently" => "Eliminar permanentemente o(s) ficheiro(s)", "Name" => "Nome", "Deleted" => "Apagado", "1 folder" => "1 pasta", diff --git a/apps/files_versions/l10n/pt_PT.php b/apps/files_versions/l10n/pt_PT.php index dc1bde08ca..629809f955 100644 --- a/apps/files_versions/l10n/pt_PT.php +++ b/apps/files_versions/l10n/pt_PT.php @@ -1,5 +1,13 @@ "Não foi possível reverter: %s", +"success" => "Sucesso", +"File %s was reverted to version %s" => "O ficheiro %s foi revertido para a versão %s", +"failure" => "Falha", +"File %s could not be reverted to version %s" => "Não foi possível reverter o ficheiro %s para a versão %s", +"No old versions available" => "Não existem versões mais antigas", +"No path specified" => "Nenhum caminho especificado", "History" => "Histórico", +"Revert a file to a previous version by clicking on its revert button" => "Reverter um ficheiro para uma versão anterior clicando no seu botão reverter.", "Files Versioning" => "Versionamento de Ficheiros", "Enable" => "Activar" ); diff --git a/apps/user_ldap/l10n/pt_PT.php b/apps/user_ldap/l10n/pt_PT.php index 058e7ba253..bfe6656b3b 100644 --- a/apps/user_ldap/l10n/pt_PT.php +++ b/apps/user_ldap/l10n/pt_PT.php @@ -43,6 +43,7 @@ "Disable Main Server" => "Desactivar servidor principal", "When switched on, ownCloud will only connect to the replica server." => "Se estiver ligado, o ownCloud vai somente ligar-se a este servidor de réplicas.", "Use TLS" => "Usar TLS", +"Do not use it additionally for LDAPS connections, it will fail." => "Não utilize para adicionar ligações LDAP, irá falhar!", "Case insensitve LDAP server (Windows)" => "Servidor LDAP (Windows) não sensível a maiúsculas.", "Turn off SSL certificate validation." => "Desligar a validação de certificado SSL.", "If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Se a ligação apenas funcionar com está opção, importe o certificado SSL do servidor LDAP para o seu servidor do ownCloud.", diff --git a/core/l10n/es.php b/core/l10n/es.php index a95d408a0b..6e6c56205b 100644 --- a/core/l10n/es.php +++ b/core/l10n/es.php @@ -109,6 +109,8 @@ "Security Warning" => "Advertencia de seguridad", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "No está disponible un generador de números aleatorios seguro, por favor habilite la extensión OpenSSL de PHP.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sin un generador de números aleatorios seguro un atacante podría predecir los tokens de reinicio de su contraseña y tomar control de su cuenta.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Su directorio de datos y sus archivos están probablemente accesibles a través de internet ya que el archivo .htaccess no está funcionando.", +"For information how to properly configure your server, please see the documentation." => "Para información sobre cómo configurar adecuadamente su servidor, por favor vea la documentación.", "Create an admin account" => "Crea una cuenta de administrador", "Advanced" => "Avanzado", "Data folder" => "Directorio de almacenamiento", diff --git a/core/l10n/fr.php b/core/l10n/fr.php index ad8ff0a6fc..630d541b11 100644 --- a/core/l10n/fr.php +++ b/core/l10n/fr.php @@ -109,6 +109,8 @@ "Security Warning" => "Avertissement de sécurité", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Aucun générateur de nombre aléatoire sécurisé n'est disponible, veuillez activer l'extension PHP OpenSSL", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sans générateur de nombre aléatoire sécurisé, un attaquant peut être en mesure de prédire les jetons de réinitialisation du mot de passe, et ainsi prendre le contrôle de votre compte utilisateur.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Votre répertoire data est certainement accessible depuis l'internet car le fichier .htaccess ne semble pas fonctionner", +"For information how to properly configure your server, please see the documentation." => "Pour les informations de configuration de votre serveur, veuillez lire la documentation.", "Create an admin account" => "Créer un compte administrateur", "Advanced" => "Avancé", "Data folder" => "Répertoire des données", diff --git a/core/l10n/lv.php b/core/l10n/lv.php index bc2306774a..78be7df9aa 100644 --- a/core/l10n/lv.php +++ b/core/l10n/lv.php @@ -109,6 +109,8 @@ "Security Warning" => "Brīdinājums par drošību", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nav pieejams drošs nejaušu skaitļu ģenerators. Lūdzu, aktivējiet PHP OpenSSL paplašinājumu.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez droša nejaušu skaitļu ģeneratora uzbrucējs var paredzēt paroļu atjaunošanas marķierus un pārņem jūsu kontu.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Visticamāk, jūsu datu direktorija un datnes ir pieejamas no interneta, jo .htaccess datne nedarbojas.", +"For information how to properly configure your server, please see the documentation." => "Lai uzzinātu, kā pareizi jākonfigurē šis serveris, skatiet dokumentāciju.", "Create an admin account" => "Izveidot administratora kontu", "Advanced" => "Paplašināti", "Data folder" => "Datu mape", diff --git a/core/l10n/pt_PT.php b/core/l10n/pt_PT.php index 3fb3361b2d..1a17161ae5 100644 --- a/core/l10n/pt_PT.php +++ b/core/l10n/pt_PT.php @@ -5,6 +5,7 @@ "User %s shared the folder \"%s\" with you. It is available for download here: %s" => "O utilizador %s partilhou a pasta \"%s\" consigo. Está disponível para download aqui: %s", "Category type not provided." => "Tipo de categoria não fornecido", "No category to add?" => "Nenhuma categoria para adicionar?", +"This category already exists: %s" => "A categoria já existe: %s", "Object type not provided." => "Tipo de objecto não fornecido", "%s ID not provided." => "ID %s não fornecido", "Error adding %s to favorites." => "Erro a adicionar %s aos favoritos", @@ -108,6 +109,8 @@ "Security Warning" => "Aviso de Segurança", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Não existe nenhum gerador seguro de números aleatórios, por favor, active a extensão OpenSSL no PHP.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sem nenhum gerador seguro de números aleatórios, uma pessoa mal intencionada pode prever a sua password, reiniciar as seguranças adicionais e tomar conta da sua conta. ", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "A pasta de dados do ownCloud e os respectivos ficheiros, estarão provavelmente acessíveis a partir da internet, pois o ficheiros .htaccess não funciona.", +"For information how to properly configure your server, please see the documentation." => "Para obter informações de como configurar correctamente o servidor, veja em: documentation.", "Create an admin account" => "Criar uma conta administrativa", "Advanced" => "Avançado", "Data folder" => "Pasta de dados", diff --git a/core/l10n/zh_TW.php b/core/l10n/zh_TW.php index 58d2aca409..96142d2068 100644 --- a/core/l10n/zh_TW.php +++ b/core/l10n/zh_TW.php @@ -5,6 +5,7 @@ "User %s shared the folder \"%s\" with you. It is available for download here: %s" => "用戶 %s 與您分享了資料夾 \"%s\" ,您可以從這裡下載它: %s", "Category type not provided." => "未提供分類類型。", "No category to add?" => "沒有可增加的分類?", +"This category already exists: %s" => "分類已經存在: %s", "Object type not provided." => "不支援的物件類型", "%s ID not provided." => "未提供 %s ID 。", "Error adding %s to favorites." => "加入 %s 到最愛時發生錯誤。", @@ -108,6 +109,8 @@ "Security Warning" => "安全性警告", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "沒有可用的亂數產生器,請啟用 PHP 中的 OpenSSL 擴充功能。", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "若沒有安全的亂數產生器,攻擊者可能可以預測密碼重設信物,然後控制您的帳戶。", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "您的資料目錄看起來可以被 Internet 公開存取,因為 .htaccess 設定並未生效。", +"For information how to properly configure your server, please see the documentation." => "請參考說明文件以瞭解如何正確設定您的伺服器。", "Create an admin account" => "建立一個管理者帳號", "Advanced" => "進階", "Data folder" => "資料夾", @@ -127,6 +130,7 @@ "Lost your password?" => "忘記密碼?", "remember" => "記住", "Log in" => "登入", +"Alternative Logins" => "替代登入方法", "prev" => "上一頁", "next" => "下一頁", "Updating ownCloud to version %s, this may take a while." => "正在將 Owncloud 升級至版本 %s ,這可能需要一點時間。" diff --git a/l10n/af_ZA/settings.po b/l10n/af_ZA/settings.po index a768c32d6c..292ab46b0e 100644 --- a/l10n/af_ZA/settings.po +++ b/l10n/af_ZA/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n" "MIME-Version: 1.0\n" @@ -21,12 +21,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -80,7 +80,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -213,10 +213,6 @@ msgstr "" msgid "New password" msgstr "Nuwe wagwoord" -#: templates/personal.php:28 -msgid "show" -msgstr "" - #: templates/personal.php:29 msgid "Change password" msgstr "" diff --git a/l10n/ar/settings.po b/l10n/ar/settings.po index e3785a9b5a..317e68fa4a 100644 --- a/l10n/ar/settings.po +++ b/l10n/ar/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n" "MIME-Version: 1.0\n" @@ -24,12 +24,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "فشل تحميل القائمة من الآب ستور" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "لم يتم التأكد من الشخصية بنجاح" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -83,7 +83,7 @@ msgstr "فشل إضافة المستخدم الى المجموعة %s" msgid "Unable to remove user from group %s" msgstr "فشل إزالة المستخدم من المجموعة %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -216,10 +216,6 @@ msgstr "كلمات السر الحالية" msgid "New password" msgstr "كلمات سر جديدة" -#: templates/personal.php:28 -msgid "show" -msgstr "أظهر" - #: templates/personal.php:29 msgid "Change password" msgstr "عدل كلمة السر" diff --git a/l10n/bg_BG/settings.po b/l10n/bg_BG/settings.po index ee7d41ac66..66e0bc07fe 100644 --- a/l10n/bg_BG/settings.po +++ b/l10n/bg_BG/settings.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 10:40+0000\n" -"Last-Translator: Stefan Ilivanov \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,12 +24,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Възникна проблем с идентификацията" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -216,10 +216,6 @@ msgstr "Текуща парола" msgid "New password" msgstr "Нова парола" -#: templates/personal.php:28 -msgid "show" -msgstr "показва" - #: templates/personal.php:29 msgid "Change password" msgstr "Промяна на паролата" diff --git a/l10n/bn_BD/settings.po b/l10n/bn_BD/settings.po index 946bd8cd25..3e31663a3d 100644 --- a/l10n/bn_BD/settings.po +++ b/l10n/bn_BD/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n" "MIME-Version: 1.0\n" @@ -22,12 +22,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "অ্যাপস্টোর থেকে তালিকা লোড করতে সক্ষম নয়" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "অনুমোদন ঘটিত সমস্যা" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -81,7 +81,7 @@ msgstr " %s গোষ্ঠীতে ব্যবহারকারী যোগ msgid "Unable to remove user from group %s" msgstr "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -214,10 +214,6 @@ msgstr "বর্তমান কূটশব্দ" msgid "New password" msgstr "নতুন কূটশব্দ" -#: templates/personal.php:28 -msgid "show" -msgstr "প্রদর্শন" - #: templates/personal.php:29 msgid "Change password" msgstr "কূটশব্দ পরিবর্তন করুন" diff --git a/l10n/ca/files.po b/l10n/ca/files.po index 8cb4b510b4..6442aaa9c9 100644 --- a/l10n/ca/files.po +++ b/l10n/ca/files.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 15:40+0000\n" +"Last-Translator: rogerc \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -199,31 +199,31 @@ msgstr "La URL no pot ser buida" msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nom de carpeta no vàlid. L'ús de 'Shared' està reservat per Owncloud" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "Nom" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "Mida" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "Modificat" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "1 carpeta" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "{count} carpetes" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "1 fitxer" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "{count} fitxers" @@ -281,7 +281,7 @@ msgstr "Des d'enllaç" #: templates/index.php:40 msgid "Trash bin" -msgstr "" +msgstr "Paperera" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/ca/lib.po b/l10n/ca/lib.po index 72c7829833..055312186f 100644 --- a/l10n/ca/lib.po +++ b/l10n/ca/lib.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# , 2013. # , 2012-2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 15:40+0000\n" +"Last-Translator: rogerc \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -90,12 +91,12 @@ msgstr "Imatges" msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament." #: setup.php:625 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Comproveu les guies d'instal·lació." #: template.php:113 msgid "seconds ago" diff --git a/l10n/ca/settings.po b/l10n/ca/settings.po index 3234dabdad..cc9de05cb2 100644 --- a/l10n/ca/settings.po +++ b/l10n/ca/settings.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 15:20+0000\n" -"Last-Translator: rogerc \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -27,12 +27,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "No s'ha pogut carregar la llista des de l'App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Error d'autenticació" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "No s'ha pogut canviar el nom a mostrar" @@ -86,7 +86,7 @@ msgstr "No es pot afegir l'usuari al grup %s" msgid "Unable to remove user from group %s" msgstr "No es pot eliminar l'usuari del grup %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "No s'ha pogut actualitzar l'aplicació." @@ -219,10 +219,6 @@ msgstr "Contrasenya actual" msgid "New password" msgstr "Contrasenya nova" -#: templates/personal.php:28 -msgid "show" -msgstr "mostra" - #: templates/personal.php:29 msgid "Change password" msgstr "Canvia la contrasenya" diff --git a/l10n/cs_CZ/files.po b/l10n/cs_CZ/files.po index 05a14c9121..c6ea61394f 100644 --- a/l10n/cs_CZ/files.po +++ b/l10n/cs_CZ/files.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 10:40+0000\n" +"Last-Translator: Tomáš Chvátal \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -195,31 +195,31 @@ msgstr "URL nemůže být prázdná" msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Neplatný název složky. Použití 'Shared' je rezervováno pro vnitřní potřeby Owncloud" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "Název" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "Velikost" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "Změněno" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "1 složka" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "{count} složky" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "1 soubor" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "{count} soubory" @@ -277,7 +277,7 @@ msgstr "Z odkazu" #: templates/index.php:40 msgid "Trash bin" -msgstr "" +msgstr "Koš" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/cs_CZ/lib.po b/l10n/cs_CZ/lib.po index d64f30979f..2ef101c13c 100644 --- a/l10n/cs_CZ/lib.po +++ b/l10n/cs_CZ/lib.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 10:50+0000\n" +"Last-Translator: Tomáš Chvátal \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -91,12 +91,12 @@ msgstr "Obrázky" msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "Váš webový server není správně nastaven pro umožnění synchronizace, protože rozhraní WebDAV je rozbité." #: setup.php:625 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Zkonzultujte, prosím, průvodce instalací." #: template.php:113 msgid "seconds ago" diff --git a/l10n/cs_CZ/settings.po b/l10n/cs_CZ/settings.po index edfcef8add..d78f97af88 100644 --- a/l10n/cs_CZ/settings.po +++ b/l10n/cs_CZ/settings.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 12:41+0000\n" -"Last-Translator: Tomáš Chvátal \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -27,12 +27,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Nelze načíst seznam z App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Chyba ověření" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "Nelze změnit zobrazované jméno" @@ -86,7 +86,7 @@ msgstr "Nelze přidat uživatele do skupiny %s" msgid "Unable to remove user from group %s" msgstr "Nelze odstranit uživatele ze skupiny %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "Nelze aktualizovat aplikaci." @@ -219,10 +219,6 @@ msgstr "Současné heslo" msgid "New password" msgstr "Nové heslo" -#: templates/personal.php:28 -msgid "show" -msgstr "zobrazit" - #: templates/personal.php:29 msgid "Change password" msgstr "Změnit heslo" diff --git a/l10n/da/settings.po b/l10n/da/settings.po index b2be1f6379..d743660c24 100644 --- a/l10n/da/settings.po +++ b/l10n/da/settings.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n" "MIME-Version: 1.0\n" @@ -31,12 +31,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Kunne ikke indlæse listen fra App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Adgangsfejl" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -90,7 +90,7 @@ msgstr "Brugeren kan ikke tilføjes til gruppen %s" msgid "Unable to remove user from group %s" msgstr "Brugeren kan ikke fjernes fra gruppen %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -223,10 +223,6 @@ msgstr "Nuværende adgangskode" msgid "New password" msgstr "Ny adgangskode" -#: templates/personal.php:28 -msgid "show" -msgstr "vis" - #: templates/personal.php:29 msgid "Change password" msgstr "Skift kodeord" diff --git a/l10n/de/settings.po b/l10n/de/settings.po index 701892688c..6ae8b00eda 100644 --- a/l10n/de/settings.po +++ b/l10n/de/settings.po @@ -26,8 +26,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" @@ -40,12 +40,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Die Liste der Anwendungen im Store konnte nicht geladen werden." -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Fehler bei der Anmeldung" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -99,7 +99,7 @@ msgstr "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden" msgid "Unable to remove user from group %s" msgstr "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -232,10 +232,6 @@ msgstr "Aktuelles Passwort" msgid "New password" msgstr "Neues Passwort" -#: templates/personal.php:28 -msgid "show" -msgstr "zeigen" - #: templates/personal.php:29 msgid "Change password" msgstr "Passwort ändern" diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po index e198138298..7d2e04f58b 100644 --- a/l10n/de_DE/settings.po +++ b/l10n/de_DE/settings.po @@ -29,9 +29,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 08:10+0000\n" -"Last-Translator: Susi <>\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"Last-Translator: I Robot \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -43,12 +43,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Die Liste der Anwendungen im Store konnte nicht geladen werden." -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Fehler bei der Anmeldung" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "Das Ändern des Anzeigenamens ist nicht möglich" @@ -102,7 +102,7 @@ msgstr "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden" msgid "Unable to remove user from group %s" msgstr "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "Die App konnte nicht geupdated werden." @@ -235,10 +235,6 @@ msgstr "Aktuelles Passwort" msgid "New password" msgstr "Neues Passwort" -#: templates/personal.php:28 -msgid "show" -msgstr "zeigen" - #: templates/personal.php:29 msgid "Change password" msgstr "Passwort ändern" diff --git a/l10n/el/settings.po b/l10n/el/settings.po index c6c5dfb10f..5a14d240bb 100644 --- a/l10n/el/settings.po +++ b/l10n/el/settings.po @@ -19,8 +19,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" @@ -33,12 +33,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Σφάλμα στην φόρτωση της λίστας από το App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Σφάλμα πιστοποίησης" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -92,7 +92,7 @@ msgstr "Αδυναμία προσθήκη χρήστη στην ομάδα %s" msgid "Unable to remove user from group %s" msgstr "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -225,10 +225,6 @@ msgstr "Τρέχων συνθηματικό" msgid "New password" msgstr "Νέο συνθηματικό" -#: templates/personal.php:28 -msgid "show" -msgstr "εμφάνιση" - #: templates/personal.php:29 msgid "Change password" msgstr "Αλλαγή συνθηματικού" diff --git a/l10n/eo/settings.po b/l10n/eo/settings.po index d48c43e7b6..3ffe8c68b7 100644 --- a/l10n/eo/settings.po +++ b/l10n/eo/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" @@ -24,12 +24,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Ne eblis ŝargi liston el aplikaĵovendejo" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Aŭtentiga eraro" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -83,7 +83,7 @@ msgstr "Ne eblis aldoni la uzanton al la grupo %s" msgid "Unable to remove user from group %s" msgstr "Ne eblis forigi la uzantan el la grupo %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -216,10 +216,6 @@ msgstr "Nuna pasvorto" msgid "New password" msgstr "Nova pasvorto" -#: templates/personal.php:28 -msgid "show" -msgstr "montri" - #: templates/personal.php:29 msgid "Change password" msgstr "Ŝanĝi la pasvorton" diff --git a/l10n/es/core.po b/l10n/es/core.po index ff3f6b2cd5..4b75e189da 100644 --- a/l10n/es/core.po +++ b/l10n/es/core.po @@ -6,6 +6,7 @@ # Felix Liberio , 2013. # , 2012. # Javier Llorente , 2012. +# , 2013. # , 2011-2013. # , 2012. # oSiNaReF <>, 2012. @@ -20,9 +21,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 11:30+0000\n" +"Last-Translator: juanman \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -169,59 +170,59 @@ msgstr "Noviembre" msgid "December" msgstr "Diciembre" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "Ajustes" -#: js/js.js:764 +#: js/js.js:767 msgid "seconds ago" msgstr "hace segundos" -#: js/js.js:765 +#: js/js.js:768 msgid "1 minute ago" msgstr "hace 1 minuto" -#: js/js.js:766 +#: js/js.js:769 msgid "{minutes} minutes ago" msgstr "hace {minutes} minutos" -#: js/js.js:767 +#: js/js.js:770 msgid "1 hour ago" msgstr "Hace 1 hora" -#: js/js.js:768 +#: js/js.js:771 msgid "{hours} hours ago" msgstr "Hace {hours} horas" -#: js/js.js:769 +#: js/js.js:772 msgid "today" msgstr "hoy" -#: js/js.js:770 +#: js/js.js:773 msgid "yesterday" msgstr "ayer" -#: js/js.js:771 +#: js/js.js:774 msgid "{days} days ago" msgstr "hace {days} días" -#: js/js.js:772 +#: js/js.js:775 msgid "last month" msgstr "mes pasado" -#: js/js.js:773 +#: js/js.js:776 msgid "{months} months ago" msgstr "Hace {months} meses" -#: js/js.js:774 +#: js/js.js:777 msgid "months ago" msgstr "hace meses" -#: js/js.js:775 +#: js/js.js:778 msgid "last year" msgstr "año pasado" -#: js/js.js:776 +#: js/js.js:779 msgid "years ago" msgstr "hace años" @@ -251,8 +252,8 @@ msgid "The object type is not specified." msgstr "El tipo de objeto no se ha especificado." #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "Fallo" @@ -272,7 +273,7 @@ msgstr "Compartir" msgid "Shared" msgstr "Compartido" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "Error compartiendo" @@ -368,23 +369,23 @@ msgstr "eliminar" msgid "share" msgstr "compartir" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "Protegido por contraseña" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "Error al eliminar la fecha de caducidad" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "Error estableciendo fecha de caducidad" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "Enviando..." -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "Correo electrónico enviado" @@ -500,14 +501,14 @@ msgstr "Sin un generador de números aleatorios seguro un atacante podría prede msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "Su directorio de datos y sus archivos están probablemente accesibles a través de internet ya que el archivo .htaccess no está funcionando." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Para información sobre cómo configurar adecuadamente su servidor, por favor vea la documentación." #: templates/installation.php:36 msgid "Create an admin account" diff --git a/l10n/es/files.po b/l10n/es/files.po index cbad49ad5c..369ddba9fe 100644 --- a/l10n/es/files.po +++ b/l10n/es/files.po @@ -7,6 +7,7 @@ # Agustin Ferrario , 2013. # , 2012. # Javier Llorente , 2012. +# , 2013. # , 2012-2013. # , 2013. # Rubén Trujillo , 2012. @@ -17,9 +18,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 11:30+0000\n" +"Last-Translator: juanman \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -78,7 +79,7 @@ msgstr "La escritura en disco ha fallado" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "No hay suficiente espacio disponible" #: ajax/upload.php:83 msgid "Invalid directory." @@ -202,31 +203,31 @@ msgstr "La URL no puede estar vacía." msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nombre de carpeta invalido. El uso de \"Shared\" esta reservado para Owncloud" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "Nombre" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "Tamaño" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "Modificado" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "1 carpeta" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "{count} carpetas" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "1 archivo" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "{count} archivos" @@ -284,7 +285,7 @@ msgstr "Desde el enlace" #: templates/index.php:40 msgid "Trash bin" -msgstr "" +msgstr "Papelera de reciclaje" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/es/lib.po b/l10n/es/lib.po index bbee949d21..a327c7a27d 100644 --- a/l10n/es/lib.po +++ b/l10n/es/lib.po @@ -4,6 +4,7 @@ # # Translators: # Agustin Ferrario , 2013. +# , 2013. # , 2012. # Raul Fernandez Garcia , 2012. # Rubén Trujillo , 2012. @@ -12,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 11:20+0000\n" +"Last-Translator: juanman \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -94,12 +95,12 @@ msgstr "Imágenes" msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando." #: setup.php:625 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Por favor, vuelva a comprobar las guías de instalación." #: template.php:113 msgid "seconds ago" diff --git a/l10n/es/settings.po b/l10n/es/settings.po index ef23546dea..28a2afba54 100644 --- a/l10n/es/settings.po +++ b/l10n/es/settings.po @@ -20,9 +20,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 00:30+0000\n" -"Last-Translator: msvladimir \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -34,12 +34,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Imposible cargar la lista desde el App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Error de autenticación" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "Incapaz de cambiar el nombre" @@ -93,7 +93,7 @@ msgstr "Imposible añadir el usuario al grupo %s" msgid "Unable to remove user from group %s" msgstr "Imposible eliminar al usuario del grupo %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "No se puedo actualizar la aplicacion." @@ -226,10 +226,6 @@ msgstr "Contraseña actual" msgid "New password" msgstr "Nueva contraseña:" -#: templates/personal.php:28 -msgid "show" -msgstr "mostrar" - #: templates/personal.php:29 msgid "Change password" msgstr "Cambiar contraseña" diff --git a/l10n/es_AR/settings.po b/l10n/es_AR/settings.po index a9d2e183b6..f70c009075 100644 --- a/l10n/es_AR/settings.po +++ b/l10n/es_AR/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" @@ -24,12 +24,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Imposible cargar la lista desde el App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Error al autenticar" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -83,7 +83,7 @@ msgstr "No fue posible añadir el usuario al grupo %s" msgid "Unable to remove user from group %s" msgstr "No es posible eliminar al usuario del grupo %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -216,10 +216,6 @@ msgstr "Contraseña actual" msgid "New password" msgstr "Nueva contraseña:" -#: templates/personal.php:28 -msgid "show" -msgstr "mostrar" - #: templates/personal.php:29 msgid "Change password" msgstr "Cambiar contraseña" diff --git a/l10n/et_EE/settings.po b/l10n/et_EE/settings.po index bd9993e5eb..601caf374a 100644 --- a/l10n/et_EE/settings.po +++ b/l10n/et_EE/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n" "MIME-Version: 1.0\n" @@ -23,12 +23,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "App Sotre'i nimekirja laadimine ebaõnnestus" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Autentimise viga" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -82,7 +82,7 @@ msgstr "Kasutajat ei saa lisada gruppi %s" msgid "Unable to remove user from group %s" msgstr "Kasutajat ei saa eemaldada grupist %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -215,10 +215,6 @@ msgstr "Praegune parool" msgid "New password" msgstr "Uus parool" -#: templates/personal.php:28 -msgid "show" -msgstr "näita" - #: templates/personal.php:29 msgid "Change password" msgstr "Muuda parooli" diff --git a/l10n/eu/settings.po b/l10n/eu/settings.po index b605292a8a..de1a02251e 100644 --- a/l10n/eu/settings.po +++ b/l10n/eu/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" @@ -25,12 +25,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Ezin izan da App Dendatik zerrenda kargatu" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Autentifikazio errorea" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -84,7 +84,7 @@ msgstr "Ezin izan da erabiltzailea %s taldera gehitu" msgid "Unable to remove user from group %s" msgstr "Ezin izan da erabiltzailea %s taldetik ezabatu" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -217,10 +217,6 @@ msgstr "Uneko pasahitza" msgid "New password" msgstr "Pasahitz berria" -#: templates/personal.php:28 -msgid "show" -msgstr "erakutsi" - #: templates/personal.php:29 msgid "Change password" msgstr "Aldatu pasahitza" diff --git a/l10n/fa/settings.po b/l10n/fa/settings.po index f38f77bf14..9b19251208 100644 --- a/l10n/fa/settings.po +++ b/l10n/fa/settings.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" @@ -26,12 +26,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "قادر به بارگذاری لیست از فروشگاه اپ نیستم" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "خطا در اعتبار سنجی" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -85,7 +85,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -218,10 +218,6 @@ msgstr "گذرواژه کنونی" msgid "New password" msgstr "گذرواژه جدید" -#: templates/personal.php:28 -msgid "show" -msgstr "نمایش" - #: templates/personal.php:29 msgid "Change password" msgstr "تغییر گذر واژه" diff --git a/l10n/fi_FI/files.po b/l10n/fi_FI/files.po index 6a00c9da8d..cbc9351025 100644 --- a/l10n/fi_FI/files.po +++ b/l10n/fi_FI/files.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 10:40+0000\n" +"Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -85,7 +85,7 @@ msgstr "Tiedostot" #: js/fileactions.js:116 msgid "Delete permanently" -msgstr "" +msgstr "Poista pysyvästi" #: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" @@ -197,31 +197,31 @@ msgstr "Verkko-osoite ei voi olla tyhjä" msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "Nimi" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "Koko" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "Muutettu" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "1 kansio" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "{count} kansiota" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "1 tiedosto" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "{count} tiedostoa" @@ -279,7 +279,7 @@ msgstr "Linkistä" #: templates/index.php:40 msgid "Trash bin" -msgstr "" +msgstr "Roskakori" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/fi_FI/lib.po b/l10n/fi_FI/lib.po index 733af91389..524ae12f75 100644 --- a/l10n/fi_FI/lib.po +++ b/l10n/fi_FI/lib.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 10:40+0000\n" +"Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -95,7 +95,7 @@ msgstr "" #: setup.php:625 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Lue tarkasti asennusohjeet." #: template.php:113 msgid "seconds ago" diff --git a/l10n/fi_FI/settings.po b/l10n/fi_FI/settings.po index f31845d910..e5363fcee7 100644 --- a/l10n/fi_FI/settings.po +++ b/l10n/fi_FI/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" @@ -24,14 +24,14 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Ei pystytä lataamaan listaa sovellusvarastosta (App Store)" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Todennusvirhe" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" -msgstr "" +msgstr "Näyttönimen muuttaminen epäonnistui" #: ajax/creategroup.php:10 msgid "Group already exists" @@ -83,7 +83,7 @@ msgstr "Käyttäjän tai ryhmän %s lisääminen ei onnistu" msgid "Unable to remove user from group %s" msgstr "Käyttäjän poistaminen ryhmästä %s ei onnistu" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "Sovelluksen päivitys epäonnistui." @@ -216,10 +216,6 @@ msgstr "Nykyinen salasana" msgid "New password" msgstr "Uusi salasana" -#: templates/personal.php:28 -msgid "show" -msgstr "näytä" - #: templates/personal.php:29 msgid "Change password" msgstr "Vaihda salasana" @@ -230,15 +226,15 @@ msgstr "Näyttönimi" #: templates/personal.php:42 msgid "Your display name was changed" -msgstr "" +msgstr "Näyttönimesi muutettiin" #: templates/personal.php:43 msgid "Unable to change your display name" -msgstr "" +msgstr "Näyttönimen muuttaminen epäonnistui" #: templates/personal.php:46 msgid "Change display name" -msgstr "" +msgstr "Muuta näyttönimeä" #: templates/personal.php:55 msgid "Email" diff --git a/l10n/fr/core.po b/l10n/fr/core.po index 1454975ea7..62f0878214 100644 --- a/l10n/fr/core.po +++ b/l10n/fr/core.po @@ -14,15 +14,16 @@ # Nahir Mohamed , 2012. # , 2012. # , 2012. +# Robert Di Rosa <>, 2013. # , 2011. # Romain DEP. , 2012-2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 11:00+0000\n" +"Last-Translator: Robert Di Rosa <>\n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -169,59 +170,59 @@ msgstr "novembre" msgid "December" msgstr "décembre" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "Paramètres" -#: js/js.js:764 +#: js/js.js:767 msgid "seconds ago" msgstr "il y a quelques secondes" -#: js/js.js:765 +#: js/js.js:768 msgid "1 minute ago" msgstr "il y a une minute" -#: js/js.js:766 +#: js/js.js:769 msgid "{minutes} minutes ago" msgstr "il y a {minutes} minutes" -#: js/js.js:767 +#: js/js.js:770 msgid "1 hour ago" msgstr "Il y a une heure" -#: js/js.js:768 +#: js/js.js:771 msgid "{hours} hours ago" msgstr "Il y a {hours} heures" -#: js/js.js:769 +#: js/js.js:772 msgid "today" msgstr "aujourd'hui" -#: js/js.js:770 +#: js/js.js:773 msgid "yesterday" msgstr "hier" -#: js/js.js:771 +#: js/js.js:774 msgid "{days} days ago" msgstr "il y a {days} jours" -#: js/js.js:772 +#: js/js.js:775 msgid "last month" msgstr "le mois dernier" -#: js/js.js:773 +#: js/js.js:776 msgid "{months} months ago" msgstr "Il y a {months} mois" -#: js/js.js:774 +#: js/js.js:777 msgid "months ago" msgstr "il y a plusieurs mois" -#: js/js.js:775 +#: js/js.js:778 msgid "last year" msgstr "l'année dernière" -#: js/js.js:776 +#: js/js.js:779 msgid "years ago" msgstr "il y a plusieurs années" @@ -251,8 +252,8 @@ msgid "The object type is not specified." msgstr "Le type d'objet n'est pas spécifié." #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "Erreur" @@ -272,7 +273,7 @@ msgstr "Partager" msgid "Shared" msgstr "Partagé" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "Erreur lors de la mise en partage" @@ -368,23 +369,23 @@ msgstr "supprimer" msgid "share" msgstr "partager" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "Protégé par un mot de passe" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "Une erreur est survenue pendant la suppression de la date d'expiration" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "Erreur lors de la spécification de la date d'expiration" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "En cours d'envoi ..." -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "Email envoyé" @@ -500,14 +501,14 @@ msgstr "Sans générateur de nombre aléatoire sécurisé, un attaquant peut êt msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "Votre répertoire data est certainement accessible depuis l'internet car le fichier .htaccess ne semble pas fonctionner" #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Pour les informations de configuration de votre serveur, veuillez lire la documentation." #: templates/installation.php:36 msgid "Create an admin account" diff --git a/l10n/fr/files.po b/l10n/fr/files.po index 2ed2310480..1f984617ca 100644 --- a/l10n/fr/files.po +++ b/l10n/fr/files.po @@ -14,16 +14,16 @@ # Guillaume Paumier , 2012. # , 2012. # Nahir Mohamed , 2012. -# Robert Di Rosa <>, 2012. +# Robert Di Rosa <>, 2012-2013. # , 2011. # Romain DEP. , 2012-2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 11:00+0000\n" +"Last-Translator: Robert Di Rosa <>\n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -206,31 +206,31 @@ msgstr "L'URL ne peut-être vide" msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nom de dossier invalide. L'utilisation du mot 'Shared' est réservée à Owncloud" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "Nom" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "Taille" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "Modifié" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "1 dossier" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "{count} dossiers" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "1 fichier" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "{count} fichiers" @@ -288,7 +288,7 @@ msgstr "Depuis le lien" #: templates/index.php:40 msgid "Trash bin" -msgstr "" +msgstr "Corbeille" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/fr/lib.po b/l10n/fr/lib.po index ab80f084df..9138f2a9a0 100644 --- a/l10n/fr/lib.po +++ b/l10n/fr/lib.po @@ -4,14 +4,15 @@ # # Translators: # Geoffrey Guerrier , 2012. +# Robert Di Rosa <>, 2013. # Romain DEP. , 2012-2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 17:40+0000\n" +"Last-Translator: Romain DEP. \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -91,12 +92,12 @@ msgstr "Images" msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "Votre serveur web, n'est pas correctement configuré pour permettre la synchronisation des fichiers, car l'interface WebDav ne fonctionne pas comme il faut." #: setup.php:625 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Veuillez vous référer au guide d'installation." #: template.php:113 msgid "seconds ago" diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po index edf75b638a..e9bd5d1095 100644 --- a/l10n/fr/settings.po +++ b/l10n/fr/settings.po @@ -24,9 +24,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 14:01+0000\n" -"Last-Translator: Romain DEP. \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"Last-Translator: I Robot \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -38,12 +38,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Impossible de charger la liste depuis l'App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Erreur d'authentification" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "Impossible de modifier le nom d'affichage" @@ -97,7 +97,7 @@ msgstr "Impossible d'ajouter l'utilisateur au groupe %s" msgid "Unable to remove user from group %s" msgstr "Impossible de supprimer l'utilisateur du groupe %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "Impossible de mettre à jour l'application" @@ -230,10 +230,6 @@ msgstr "Mot de passe actuel" msgid "New password" msgstr "Nouveau mot de passe" -#: templates/personal.php:28 -msgid "show" -msgstr "Afficher" - #: templates/personal.php:29 msgid "Change password" msgstr "Changer de mot de passe" diff --git a/l10n/gl/settings.po b/l10n/gl/settings.po index ca408e9994..f4022c9f2b 100644 --- a/l10n/gl/settings.po +++ b/l10n/gl/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" @@ -24,12 +24,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Non foi posíbel cargar a lista desde a App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Produciuse un erro de autenticación" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -83,7 +83,7 @@ msgstr "Non é posíbel engadir o usuario ao grupo %s" msgid "Unable to remove user from group %s" msgstr "Non é posíbel eliminar o usuario do grupo %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -216,10 +216,6 @@ msgstr "Contrasinal actual" msgid "New password" msgstr "Novo contrasinal" -#: templates/personal.php:28 -msgid "show" -msgstr "amosar" - #: templates/personal.php:29 msgid "Change password" msgstr "Cambiar o contrasinal" diff --git a/l10n/he/settings.po b/l10n/he/settings.po index 018aebd9f6..2fee13d929 100644 --- a/l10n/he/settings.po +++ b/l10n/he/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n" "MIME-Version: 1.0\n" @@ -25,12 +25,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "לא ניתן לטעון רשימה מה־App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "שגיאת הזדהות" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -84,7 +84,7 @@ msgstr "לא ניתן להוסיף משתמש לקבוצה %s" msgid "Unable to remove user from group %s" msgstr "לא ניתן להסיר משתמש מהקבוצה %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -217,10 +217,6 @@ msgstr "ססמה נוכחית" msgid "New password" msgstr "ססמה חדשה" -#: templates/personal.php:28 -msgid "show" -msgstr "הצגה" - #: templates/personal.php:29 msgid "Change password" msgstr "שינוי ססמה" diff --git a/l10n/hi/settings.po b/l10n/hi/settings.po index b0e88f95c9..86afd8794e 100644 --- a/l10n/hi/settings.po +++ b/l10n/hi/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n" "MIME-Version: 1.0\n" @@ -21,12 +21,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -80,7 +80,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -213,10 +213,6 @@ msgstr "" msgid "New password" msgstr "नया पासवर्ड" -#: templates/personal.php:28 -msgid "show" -msgstr "" - #: templates/personal.php:29 msgid "Change password" msgstr "" diff --git a/l10n/hr/settings.po b/l10n/hr/settings.po index 062d280811..38cc52f1a3 100644 --- a/l10n/hr/settings.po +++ b/l10n/hr/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n" "MIME-Version: 1.0\n" @@ -24,12 +24,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Nemogićnost učitavanja liste sa Apps Stora" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Greška kod autorizacije" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -83,7 +83,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -216,10 +216,6 @@ msgstr "Trenutna lozinka" msgid "New password" msgstr "Nova lozinka" -#: templates/personal.php:28 -msgid "show" -msgstr "prikaz" - #: templates/personal.php:29 msgid "Change password" msgstr "Izmjena lozinke" diff --git a/l10n/hu_HU/settings.po b/l10n/hu_HU/settings.po index d544d5d95b..a0057f4b4a 100644 --- a/l10n/hu_HU/settings.po +++ b/l10n/hu_HU/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" @@ -24,12 +24,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Nem tölthető le a lista az App Store-ból" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Azonosítási hiba" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -83,7 +83,7 @@ msgstr "A felhasználó nem adható hozzá ehhez a csoporthoz: %s" msgid "Unable to remove user from group %s" msgstr "A felhasználó nem távolítható el ebből a csoportból: %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -216,10 +216,6 @@ msgstr "A jelenlegi jelszó" msgid "New password" msgstr "Az új jelszó" -#: templates/personal.php:28 -msgid "show" -msgstr "lássam" - #: templates/personal.php:29 msgid "Change password" msgstr "A jelszó megváltoztatása" diff --git a/l10n/ia/settings.po b/l10n/ia/settings.po index 47c4885728..a68c1ff556 100644 --- a/l10n/ia/settings.po +++ b/l10n/ia/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n" "MIME-Version: 1.0\n" @@ -23,12 +23,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -82,7 +82,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -215,10 +215,6 @@ msgstr "Contrasigno currente" msgid "New password" msgstr "Nove contrasigno" -#: templates/personal.php:28 -msgid "show" -msgstr "monstrar" - #: templates/personal.php:29 msgid "Change password" msgstr "Cambiar contrasigno" diff --git a/l10n/id/settings.po b/l10n/id/settings.po index 2787995bd7..60ef068bce 100644 --- a/l10n/id/settings.po +++ b/l10n/id/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" @@ -25,12 +25,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "autentikasi bermasalah" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -84,7 +84,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -217,10 +217,6 @@ msgstr "Password saat ini" msgid "New password" msgstr "kata kunci baru" -#: templates/personal.php:28 -msgid "show" -msgstr "perlihatkan" - #: templates/personal.php:29 msgid "Change password" msgstr "Rubah password" diff --git a/l10n/is/settings.po b/l10n/is/settings.po index fea2c37878..72097fa936 100644 --- a/l10n/is/settings.po +++ b/l10n/is/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n" "MIME-Version: 1.0\n" @@ -22,12 +22,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Ekki tókst að hlaða lista frá forrita síðu" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Villa við auðkenningu" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -81,7 +81,7 @@ msgstr "Ekki tókst að bæta notenda við hópinn %s" msgid "Unable to remove user from group %s" msgstr "Ekki tókst að fjarlægja notanda úr hópnum %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -214,10 +214,6 @@ msgstr "Núverandi lykilorð" msgid "New password" msgstr "Nýtt lykilorð" -#: templates/personal.php:28 -msgid "show" -msgstr "sýna" - #: templates/personal.php:29 msgid "Change password" msgstr "Breyta lykilorði" diff --git a/l10n/it/files.po b/l10n/it/files.po index bcd2745015..206c29c048 100644 --- a/l10n/it/files.po +++ b/l10n/it/files.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-09 23:50+0000\n" +"Last-Translator: Vincenzo Reale \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -196,31 +196,31 @@ msgstr "L'URL non può essere vuoto." msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nome della cartella non valido. L'uso di 'Shared' è riservato da ownCloud" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "Nome" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "Dimensione" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "Modificato" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "1 cartella" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "{count} cartelle" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "1 file" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "{count} file" @@ -278,7 +278,7 @@ msgstr "Da collegamento" #: templates/index.php:40 msgid "Trash bin" -msgstr "" +msgstr "Cestino" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/it/lib.po b/l10n/it/lib.po index 5e8f171bac..f181c1149e 100644 --- a/l10n/it/lib.po +++ b/l10n/it/lib.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-09 23:50+0000\n" +"Last-Translator: Vincenzo Reale \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -90,12 +90,12 @@ msgstr "Immagini" msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata." #: setup.php:625 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Leggi attentamente le guide d'installazione." #: template.php:113 msgid "seconds ago" diff --git a/l10n/it/settings.po b/l10n/it/settings.po index 769e953dd0..30430dd4bf 100644 --- a/l10n/it/settings.po +++ b/l10n/it/settings.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-06 23:21+0000\n" -"Last-Translator: Vincenzo Reale \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -28,12 +28,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Impossibile caricare l'elenco dall'App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Errore di autenticazione" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "Impossibile cambiare il nome visualizzato" @@ -87,7 +87,7 @@ msgstr "Impossibile aggiungere l'utente al gruppo %s" msgid "Unable to remove user from group %s" msgstr "Impossibile rimuovere l'utente dal gruppo %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "Impossibile aggiornate l'applicazione." @@ -220,10 +220,6 @@ msgstr "Password attuale" msgid "New password" msgstr "Nuova password" -#: templates/personal.php:28 -msgid "show" -msgstr "mostra" - #: templates/personal.php:29 msgid "Change password" msgstr "Modifica password" diff --git a/l10n/ja_JP/settings.po b/l10n/ja_JP/settings.po index d8f0f19d63..851cc61113 100644 --- a/l10n/ja_JP/settings.po +++ b/l10n/ja_JP/settings.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 02:20+0000\n" -"Last-Translator: Daisuke Deguchi \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,12 +26,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "アプリストアからリストをロードできません" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "認証エラー" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "表示名を変更できません" @@ -85,7 +85,7 @@ msgstr "ユーザをグループ %s に追加できません" msgid "Unable to remove user from group %s" msgstr "ユーザをグループ %s から削除できません" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "アプリを更新出来ませんでした。" @@ -218,10 +218,6 @@ msgstr "現在のパスワード" msgid "New password" msgstr "新しいパスワード" -#: templates/personal.php:28 -msgid "show" -msgstr "表示" - #: templates/personal.php:29 msgid "Change password" msgstr "パスワードを変更" diff --git a/l10n/ka_GE/settings.po b/l10n/ka_GE/settings.po index 2f73884030..a715d2a7d2 100644 --- a/l10n/ka_GE/settings.po +++ b/l10n/ka_GE/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n" "MIME-Version: 1.0\n" @@ -22,12 +22,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "აპლიკაციების სია ვერ ჩამოიტვირთა App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "ავთენტიფიკაციის შეცდომა" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -81,7 +81,7 @@ msgstr "მომხმარებლის დამატება ვერ msgid "Unable to remove user from group %s" msgstr "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -214,10 +214,6 @@ msgstr "მიმდინარე პაროლი" msgid "New password" msgstr "ახალი პაროლი" -#: templates/personal.php:28 -msgid "show" -msgstr "გამოაჩინე" - #: templates/personal.php:29 msgid "Change password" msgstr "პაროლის შეცვლა" diff --git a/l10n/ko/settings.po b/l10n/ko/settings.po index 65a8c9d6e2..a3e3db39bf 100644 --- a/l10n/ko/settings.po +++ b/l10n/ko/settings.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n" "MIME-Version: 1.0\n" @@ -26,12 +26,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "앱 스토어에서 목록을 가져올 수 없습니다" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "인증 오류" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -85,7 +85,7 @@ msgstr "그룹 %s에 사용자를 추가할 수 없습니다." msgid "Unable to remove user from group %s" msgstr "그룹 %s에서 사용자를 삭제할 수 없습니다." -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -218,10 +218,6 @@ msgstr "현재 암호" msgid "New password" msgstr "새 암호" -#: templates/personal.php:28 -msgid "show" -msgstr "보이기" - #: templates/personal.php:29 msgid "Change password" msgstr "암호 변경" diff --git a/l10n/ku_IQ/settings.po b/l10n/ku_IQ/settings.po index 7973f6b16d..99e3162d7b 100644 --- a/l10n/ku_IQ/settings.po +++ b/l10n/ku_IQ/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n" "MIME-Version: 1.0\n" @@ -21,12 +21,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -80,7 +80,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -213,10 +213,6 @@ msgstr "" msgid "New password" msgstr "وشەی نهێنی نوێ" -#: templates/personal.php:28 -msgid "show" -msgstr "" - #: templates/personal.php:29 msgid "Change password" msgstr "" diff --git a/l10n/lb/settings.po b/l10n/lb/settings.po index 021e271d8f..e0e6727bc7 100644 --- a/l10n/lb/settings.po +++ b/l10n/lb/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n" "MIME-Version: 1.0\n" @@ -22,12 +22,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Konnt Lescht net vum App Store lueden" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Authentifikatioun's Fehler" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -81,7 +81,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -214,10 +214,6 @@ msgstr "Momentan 't Passwuert" msgid "New password" msgstr "Neit Passwuert" -#: templates/personal.php:28 -msgid "show" -msgstr "weisen" - #: templates/personal.php:29 msgid "Change password" msgstr "Passwuert änneren" diff --git a/l10n/lt_LT/settings.po b/l10n/lt_LT/settings.po index e1ef964d69..6bf8bea3a4 100644 --- a/l10n/lt_LT/settings.po +++ b/l10n/lt_LT/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n" "MIME-Version: 1.0\n" @@ -23,12 +23,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Neįmanoma įkelti sąrašo iš Programų Katalogo" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Autentikacijos klaida" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -82,7 +82,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -215,10 +215,6 @@ msgstr "Dabartinis slaptažodis" msgid "New password" msgstr "Naujas slaptažodis" -#: templates/personal.php:28 -msgid "show" -msgstr "rodyti" - #: templates/personal.php:29 msgid "Change password" msgstr "Pakeisti slaptažodį" diff --git a/l10n/lv/core.po b/l10n/lv/core.po index c64e2073ed..3b10e4c5c0 100644 --- a/l10n/lv/core.po +++ b/l10n/lv/core.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 14:21+0000\n" +"Last-Translator: Rūdolfs Mazurs \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -158,59 +158,59 @@ msgstr "Novembris" msgid "December" msgstr "Decembris" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "Iestatījumi" -#: js/js.js:764 +#: js/js.js:767 msgid "seconds ago" msgstr "sekundes atpakaļ" -#: js/js.js:765 +#: js/js.js:768 msgid "1 minute ago" msgstr "pirms 1 minūtes" -#: js/js.js:766 +#: js/js.js:769 msgid "{minutes} minutes ago" msgstr "pirms {minutes} minūtēm" -#: js/js.js:767 +#: js/js.js:770 msgid "1 hour ago" msgstr "pirms 1 stundas" -#: js/js.js:768 +#: js/js.js:771 msgid "{hours} hours ago" msgstr "pirms {hours} stundām" -#: js/js.js:769 +#: js/js.js:772 msgid "today" msgstr "šodien" -#: js/js.js:770 +#: js/js.js:773 msgid "yesterday" msgstr "vakar" -#: js/js.js:771 +#: js/js.js:774 msgid "{days} days ago" msgstr "pirms {days} dienām" -#: js/js.js:772 +#: js/js.js:775 msgid "last month" msgstr "pagājušajā mēnesī" -#: js/js.js:773 +#: js/js.js:776 msgid "{months} months ago" msgstr "pirms {months} mēnešiem" -#: js/js.js:774 +#: js/js.js:777 msgid "months ago" msgstr "mēnešus atpakaļ" -#: js/js.js:775 +#: js/js.js:778 msgid "last year" msgstr "gājušajā gadā" -#: js/js.js:776 +#: js/js.js:779 msgid "years ago" msgstr "gadus atpakaļ" @@ -240,8 +240,8 @@ msgid "The object type is not specified." msgstr "Nav norādīts objekta tips." #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "Kļūda" @@ -261,7 +261,7 @@ msgstr "Dalīties" msgid "Shared" msgstr "Kopīgs" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "Kļūda, daloties" @@ -357,23 +357,23 @@ msgstr "dzēst" msgid "share" msgstr "dalīties" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "Aizsargāts ar paroli" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "Kļūda, noņemot termiņa datumu" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "Kļūda, iestatot termiņa datumu" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "Sūta..." -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "Vēstule nosūtīta" @@ -489,14 +489,14 @@ msgstr "Bez droša nejaušu skaitļu ģeneratora uzbrucējs var paredzēt paroļ msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "Visticamāk, jūsu datu direktorija un datnes ir pieejamas no interneta, jo .htaccess datne nedarbojas." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Lai uzzinātu, kā pareizi jākonfigurē šis serveris, skatiet dokumentāciju." #: templates/installation.php:36 msgid "Create an admin account" diff --git a/l10n/lv/files.po b/l10n/lv/files.po index 5d8e608d16..348038ee69 100644 --- a/l10n/lv/files.po +++ b/l10n/lv/files.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 14:21+0000\n" +"Last-Translator: Rūdolfs Mazurs \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,16 +23,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Nevarēja pārvietot %s — jau eksistē datne ar tādu nosaukumu" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Nevarēja pārvietot %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Nevarēja pārsaukt datni" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -71,7 +71,7 @@ msgstr "Neizdevās saglabāt diskā" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Nav pietiekami daudz vietas" #: ajax/upload.php:83 msgid "Invalid directory." @@ -195,31 +195,31 @@ msgstr "URL nevar būt tukšs." msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nederīgs mapes nosaukums. “Koplietots” izmantojums ir rezervēts ownCloud servisam." -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "Nosaukums" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "Izmērs" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "Mainīts" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "1 mape" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "{count} mapes" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "1 datne" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "{count} datnes" @@ -277,7 +277,7 @@ msgstr "No saites" #: templates/index.php:40 msgid "Trash bin" -msgstr "" +msgstr "Miskaste" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/lv/lib.po b/l10n/lv/lib.po index fe42b134fa..4f0a8d9cea 100644 --- a/l10n/lv/lib.po +++ b/l10n/lv/lib.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 14:21+0000\n" +"Last-Translator: Rūdolfs Mazurs \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -90,12 +90,12 @@ msgstr "Attēli" msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "Jūsu serveris vēl nav pareizi iestatīts, lai ļautu sinhronizēt datnes, jo izskatās, ka WebDAV saskarne ir salauzta." #: setup.php:625 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Lūdzu, vēlreiz pārbaudiet instalēšanas palīdzību." #: template.php:113 msgid "seconds ago" diff --git a/l10n/lv/settings.po b/l10n/lv/settings.po index 2cd29ffc5a..be79edd912 100644 --- a/l10n/lv/settings.po +++ b/l10n/lv/settings.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 04:30+0000\n" -"Last-Translator: Rūdolfs Mazurs \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,12 +24,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Nevar lejupielādēt sarakstu no lietotņu veikala" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Autentifikācijas kļūda" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "Nevarēja mainīt redzamo vārdu" @@ -83,7 +83,7 @@ msgstr "Nevar pievienot lietotāju grupai %s" msgid "Unable to remove user from group %s" msgstr "Nevar izņemt lietotāju no grupas %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "Nevarēja atjaunināt lietotni." @@ -216,10 +216,6 @@ msgstr "Pašreizējā parole" msgid "New password" msgstr "Jauna parole" -#: templates/personal.php:28 -msgid "show" -msgstr "parādīt" - #: templates/personal.php:29 msgid "Change password" msgstr "Mainīt paroli" diff --git a/l10n/mk/settings.po b/l10n/mk/settings.po index f441c26ada..dfdae53b05 100644 --- a/l10n/mk/settings.po +++ b/l10n/mk/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n" "MIME-Version: 1.0\n" @@ -24,12 +24,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Неможам да вчитам листа од App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Грешка во автентикација" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -83,7 +83,7 @@ msgstr "Неможе да додадам корисник во група %s" msgid "Unable to remove user from group %s" msgstr "Неможе да избришам корисник од група %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -216,10 +216,6 @@ msgstr "Моментална лозинка" msgid "New password" msgstr "Нова лозинка" -#: templates/personal.php:28 -msgid "show" -msgstr "прикажи" - #: templates/personal.php:29 msgid "Change password" msgstr "Смени лозинка" diff --git a/l10n/ms_MY/settings.po b/l10n/ms_MY/settings.po index b04dd7bcb1..a845175201 100644 --- a/l10n/ms_MY/settings.po +++ b/l10n/ms_MY/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n" "MIME-Version: 1.0\n" @@ -25,12 +25,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Ralat pengesahan" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -84,7 +84,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -217,10 +217,6 @@ msgstr "Kata laluan semasa" msgid "New password" msgstr "Kata laluan baru" -#: templates/personal.php:28 -msgid "show" -msgstr "Papar" - #: templates/personal.php:29 msgid "Change password" msgstr "Ubah kata laluan" diff --git a/l10n/nb_NO/settings.po b/l10n/nb_NO/settings.po index f96018e116..f25a8d17ad 100644 --- a/l10n/nb_NO/settings.po +++ b/l10n/nb_NO/settings.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -29,12 +29,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Lasting av liste fra App Store feilet." -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Autentikasjonsfeil" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -88,7 +88,7 @@ msgstr "Kan ikke legge bruker til gruppen %s" msgid "Unable to remove user from group %s" msgstr "Kan ikke slette bruker fra gruppen %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -221,10 +221,6 @@ msgstr "Nåværende passord" msgid "New password" msgstr "Nytt passord" -#: templates/personal.php:28 -msgid "show" -msgstr "vis" - #: templates/personal.php:29 msgid "Change password" msgstr "Endre passord" diff --git a/l10n/nl/settings.po b/l10n/nl/settings.po index 2e6ae9ed37..29757d8ffb 100644 --- a/l10n/nl/settings.po +++ b/l10n/nl/settings.po @@ -18,9 +18,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 14:00+0000\n" -"Last-Translator: André Koot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -32,12 +32,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Kan de lijst niet van de App store laden" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Authenticatie fout" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "Kon de weergavenaam niet wijzigen" @@ -91,7 +91,7 @@ msgstr "Niet in staat om gebruiker toe te voegen aan groep %s" msgid "Unable to remove user from group %s" msgstr "Niet in staat om gebruiker te verwijderen uit groep %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "Kon de app niet bijwerken." @@ -224,10 +224,6 @@ msgstr "Huidig wachtwoord" msgid "New password" msgstr "Nieuw wachtwoord" -#: templates/personal.php:28 -msgid "show" -msgstr "weergeven" - #: templates/personal.php:29 msgid "Change password" msgstr "Wijzig wachtwoord" diff --git a/l10n/nn_NO/settings.po b/l10n/nn_NO/settings.po index 0d0f12e96e..2db598c4b3 100644 --- a/l10n/nn_NO/settings.po +++ b/l10n/nn_NO/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n" "MIME-Version: 1.0\n" @@ -23,12 +23,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Klarer ikkje å laste inn liste fra App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Feil i autentisering" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -82,7 +82,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -215,10 +215,6 @@ msgstr "Passord" msgid "New password" msgstr "Nytt passord" -#: templates/personal.php:28 -msgid "show" -msgstr "vis" - #: templates/personal.php:29 msgid "Change password" msgstr "Endra passord" diff --git a/l10n/oc/settings.po b/l10n/oc/settings.po index 2c3d180e39..2aa4e254a4 100644 --- a/l10n/oc/settings.po +++ b/l10n/oc/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n" "MIME-Version: 1.0\n" @@ -22,12 +22,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Pas possible de cargar la tièra dempuèi App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Error d'autentificacion" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -81,7 +81,7 @@ msgstr "Pas capable d'apondre un usancièr al grop %s" msgid "Unable to remove user from group %s" msgstr "Pas capable de tira un usancièr del grop %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -214,10 +214,6 @@ msgstr "Senhal en cors" msgid "New password" msgstr "Senhal novèl" -#: templates/personal.php:28 -msgid "show" -msgstr "mòstra" - #: templates/personal.php:29 msgid "Change password" msgstr "Cambia lo senhal" diff --git a/l10n/pl/settings.po b/l10n/pl/settings.po index 7849faf367..614e8163ae 100644 --- a/l10n/pl/settings.po +++ b/l10n/pl/settings.po @@ -18,8 +18,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" @@ -32,12 +32,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Nie mogę załadować listy aplikacji" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Błąd uwierzytelniania" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -91,7 +91,7 @@ msgstr "Nie można dodać użytkownika do grupy %s" msgid "Unable to remove user from group %s" msgstr "Nie można usunąć użytkownika z grupy %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -224,10 +224,6 @@ msgstr "Bieżące hasło" msgid "New password" msgstr "Nowe hasło" -#: templates/personal.php:28 -msgid "show" -msgstr "Wyświetlanie" - #: templates/personal.php:29 msgid "Change password" msgstr "Zmień hasło" diff --git a/l10n/pl_PL/settings.po b/l10n/pl_PL/settings.po index 991c4808c5..68b10e8e13 100644 --- a/l10n/pl_PL/settings.po +++ b/l10n/pl_PL/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" "MIME-Version: 1.0\n" @@ -21,12 +21,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -80,7 +80,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -213,10 +213,6 @@ msgstr "" msgid "New password" msgstr "" -#: templates/personal.php:28 -msgid "show" -msgstr "" - #: templates/personal.php:29 msgid "Change password" msgstr "" diff --git a/l10n/pt_BR/settings.po b/l10n/pt_BR/settings.po index de48363261..ec1d231b92 100644 --- a/l10n/pt_BR/settings.po +++ b/l10n/pt_BR/settings.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -31,12 +31,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Não foi possível carregar lista da App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Erro de autenticação" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -90,7 +90,7 @@ msgstr "Não foi possível adicionar usuário ao grupo %s" msgid "Unable to remove user from group %s" msgstr "Não foi possível remover usuário do grupo %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -223,10 +223,6 @@ msgstr "Senha atual" msgid "New password" msgstr "Nova senha" -#: templates/personal.php:28 -msgid "show" -msgstr "mostrar" - #: templates/personal.php:29 msgid "Change password" msgstr "Alterar senha" diff --git a/l10n/pt_PT/core.po b/l10n/pt_PT/core.po index 720a1bc3a2..7b19a97058 100644 --- a/l10n/pt_PT/core.po +++ b/l10n/pt_PT/core.po @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 14:21+0000\n" +"Last-Translator: Mouxy \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -60,7 +60,7 @@ msgstr "Nenhuma categoria para adicionar?" #: ajax/vcategories/add.php:37 #, php-format msgid "This category already exists: %s" -msgstr "" +msgstr "A categoria já existe: %s" #: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27 #: ajax/vcategories/favorites.php:24 @@ -164,59 +164,59 @@ msgstr "Novembro" msgid "December" msgstr "Dezembro" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "Definições" -#: js/js.js:764 +#: js/js.js:767 msgid "seconds ago" msgstr "Minutos atrás" -#: js/js.js:765 +#: js/js.js:768 msgid "1 minute ago" msgstr "Há 1 minuto" -#: js/js.js:766 +#: js/js.js:769 msgid "{minutes} minutes ago" msgstr "{minutes} minutos atrás" -#: js/js.js:767 +#: js/js.js:770 msgid "1 hour ago" msgstr "Há 1 hora" -#: js/js.js:768 +#: js/js.js:771 msgid "{hours} hours ago" msgstr "Há {hours} horas atrás" -#: js/js.js:769 +#: js/js.js:772 msgid "today" msgstr "hoje" -#: js/js.js:770 +#: js/js.js:773 msgid "yesterday" msgstr "ontem" -#: js/js.js:771 +#: js/js.js:774 msgid "{days} days ago" msgstr "{days} dias atrás" -#: js/js.js:772 +#: js/js.js:775 msgid "last month" msgstr "ultímo mês" -#: js/js.js:773 +#: js/js.js:776 msgid "{months} months ago" msgstr "Há {months} meses atrás" -#: js/js.js:774 +#: js/js.js:777 msgid "months ago" msgstr "meses atrás" -#: js/js.js:775 +#: js/js.js:778 msgid "last year" msgstr "ano passado" -#: js/js.js:776 +#: js/js.js:779 msgid "years ago" msgstr "anos atrás" @@ -246,8 +246,8 @@ msgid "The object type is not specified." msgstr "O tipo de objecto não foi especificado" #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "Erro" @@ -267,7 +267,7 @@ msgstr "Partilhar" msgid "Shared" msgstr "Partilhado" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "Erro ao partilhar" @@ -363,23 +363,23 @@ msgstr "apagar" msgid "share" msgstr "partilhar" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "Protegido com palavra-passe" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "Erro ao retirar a data de expiração" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "Erro ao aplicar a data de expiração" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "A Enviar..." -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "E-mail enviado" @@ -495,14 +495,14 @@ msgstr "Sem nenhum gerador seguro de números aleatórios, uma pessoa mal intenc msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "A pasta de dados do ownCloud e os respectivos ficheiros, estarão provavelmente acessíveis a partir da internet, pois o ficheiros .htaccess não funciona." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Para obter informações de como configurar correctamente o servidor, veja em: documentation." #: templates/installation.php:36 msgid "Create an admin account" diff --git a/l10n/pt_PT/files.po b/l10n/pt_PT/files.po index b38fea5335..9e6b511ab9 100644 --- a/l10n/pt_PT/files.po +++ b/l10n/pt_PT/files.po @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 14:21+0000\n" +"Last-Translator: Mouxy \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -200,31 +200,31 @@ msgstr "O URL não pode estar vazio." msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nome de pasta inválido. O Uso de 'shared' é reservado para o ownCloud" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "Nome" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "Tamanho" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "Modificado" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "1 pasta" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "{count} pastas" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "1 ficheiro" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "{count} ficheiros" @@ -282,7 +282,7 @@ msgstr "Da ligação" #: templates/index.php:40 msgid "Trash bin" -msgstr "" +msgstr "Reciclagem" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/pt_PT/files_encryption.po b/l10n/pt_PT/files_encryption.po index 460ced18d4..461a5030b7 100644 --- a/l10n/pt_PT/files_encryption.po +++ b/l10n/pt_PT/files_encryption.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:09+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 14:21+0000\n" +"Last-Translator: Mouxy \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,15 +25,15 @@ msgstr "Encriptação" #: templates/settings-personal.php:7 msgid "File encryption is enabled." -msgstr "" +msgstr "A encriptação de ficheiros está ligada" #: templates/settings-personal.php:11 msgid "The following file types will not be encrypted:" -msgstr "" +msgstr "Os seguintes ficheiros não serão encriptados:" #: templates/settings.php:7 msgid "Exclude the following file types from encryption:" -msgstr "" +msgstr "Excluir da encriptação os seguintes tipos de ficheiro:" #: templates/settings.php:12 msgid "None" diff --git a/l10n/pt_PT/files_trashbin.po b/l10n/pt_PT/files_trashbin.po index 5f79fd3206..5e720d8b5c 100644 --- a/l10n/pt_PT/files_trashbin.po +++ b/l10n/pt_PT/files_trashbin.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 14:21+0000\n" +"Last-Translator: Mouxy \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,12 +21,12 @@ msgstr "" #: ajax/delete.php:22 #, php-format msgid "Couldn't delete %s permanently" -msgstr "" +msgstr "Não foi possível eliminar %s de forma permanente" #: ajax/undelete.php:41 #, php-format msgid "Couldn't restore %s" -msgstr "" +msgstr "Não foi possível restaurar %s" #: js/trash.js:7 js/trash.js:94 msgid "perform restore operation" @@ -34,7 +34,7 @@ msgstr "Restaurar" #: js/trash.js:33 msgid "delete file permanently" -msgstr "" +msgstr "Eliminar permanentemente o(s) ficheiro(s)" #: js/trash.js:125 templates/index.php:17 msgid "Name" diff --git a/l10n/pt_PT/files_versions.po b/l10n/pt_PT/files_versions.po index 48cc4e4416..9e0c86ead3 100644 --- a/l10n/pt_PT/files_versions.po +++ b/l10n/pt_PT/files_versions.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Daniel Pinto , 2013. # Duarte Velez Grilo , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 14:21+0000\n" +"Last-Translator: Mouxy \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,33 +22,33 @@ msgstr "" #: ajax/rollbackVersion.php:15 #, php-format msgid "Could not revert: %s" -msgstr "" +msgstr "Não foi possível reverter: %s" #: history.php:40 msgid "success" -msgstr "" +msgstr "Sucesso" #: history.php:42 #, php-format msgid "File %s was reverted to version %s" -msgstr "" +msgstr "O ficheiro %s foi revertido para a versão %s" #: history.php:49 msgid "failure" -msgstr "" +msgstr "Falha" #: history.php:51 #, php-format msgid "File %s could not be reverted to version %s" -msgstr "" +msgstr "Não foi possível reverter o ficheiro %s para a versão %s" #: history.php:68 msgid "No old versions available" -msgstr "" +msgstr "Não existem versões mais antigas" #: history.php:73 msgid "No path specified" -msgstr "" +msgstr "Nenhum caminho especificado" #: js/versions.js:16 msgid "History" @@ -55,7 +56,7 @@ msgstr "Histórico" #: templates/history.php:20 msgid "Revert a file to a previous version by clicking on its revert button" -msgstr "" +msgstr "Reverter um ficheiro para uma versão anterior clicando no seu botão reverter." #: templates/settings.php:3 msgid "Files Versioning" diff --git a/l10n/pt_PT/lib.po b/l10n/pt_PT/lib.po index db06396ca9..7f3eebc2de 100644 --- a/l10n/pt_PT/lib.po +++ b/l10n/pt_PT/lib.po @@ -4,14 +4,15 @@ # # Translators: # , 2012-2013. +# Daniel Pinto , 2013. # Duarte Velez Grilo , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 14:21+0000\n" +"Last-Translator: Mouxy \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -91,12 +92,12 @@ msgstr "Imagens" msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas." #: setup.php:625 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Por favor verifique installation guides." #: template.php:113 msgid "seconds ago" diff --git a/l10n/pt_PT/settings.po b/l10n/pt_PT/settings.po index 8c1833afc0..9f04757a83 100644 --- a/l10n/pt_PT/settings.po +++ b/l10n/pt_PT/settings.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" @@ -29,14 +29,14 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Incapaz de carregar a lista da App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Erro de autenticação" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" -msgstr "" +msgstr "Não foi possível alterar o nome" #: ajax/creategroup.php:10 msgid "Group already exists" @@ -88,7 +88,7 @@ msgstr "Impossível acrescentar utilizador ao grupo %s" msgid "Unable to remove user from group %s" msgstr "Impossível apagar utilizador do grupo %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "Não foi possível actualizar a aplicação." @@ -221,10 +221,6 @@ msgstr "Palavra-chave actual" msgid "New password" msgstr "Nova palavra-chave" -#: templates/personal.php:28 -msgid "show" -msgstr "mostrar" - #: templates/personal.php:29 msgid "Change password" msgstr "Alterar palavra-chave" @@ -235,15 +231,15 @@ msgstr "Nome público" #: templates/personal.php:42 msgid "Your display name was changed" -msgstr "" +msgstr "O seu nome foi alterado" #: templates/personal.php:43 msgid "Unable to change your display name" -msgstr "" +msgstr "Não foi possível alterar o seu nome" #: templates/personal.php:46 msgid "Change display name" -msgstr "" +msgstr "Alterar nome" #: templates/personal.php:55 msgid "Email" diff --git a/l10n/pt_PT/user_ldap.po b/l10n/pt_PT/user_ldap.po index 643d61ad73..3a798d9e6a 100644 --- a/l10n/pt_PT/user_ldap.po +++ b/l10n/pt_PT/user_ldap.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 14:21+0000\n" +"Last-Translator: Mouxy \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -219,7 +219,7 @@ msgstr "Usar TLS" #: templates/settings.php:38 msgid "Do not use it additionally for LDAPS connections, it will fail." -msgstr "" +msgstr "Não utilize para adicionar ligações LDAP, irá falhar!" #: templates/settings.php:39 msgid "Case insensitve LDAP server (Windows)" diff --git a/l10n/ro/settings.po b/l10n/ro/settings.po index a54bf6ea81..53b608c053 100644 --- a/l10n/ro/settings.po +++ b/l10n/ro/settings.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n" "MIME-Version: 1.0\n" @@ -28,12 +28,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Imposibil de încărcat lista din App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Eroare de autentificare" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -87,7 +87,7 @@ msgstr "Nu s-a putut adăuga utilizatorul la grupul %s" msgid "Unable to remove user from group %s" msgstr "Nu s-a putut elimina utilizatorul din grupul %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -220,10 +220,6 @@ msgstr "Parola curentă" msgid "New password" msgstr "Noua parolă" -#: templates/personal.php:28 -msgid "show" -msgstr "afișează" - #: templates/personal.php:29 msgid "Change password" msgstr "Schimbă parola" diff --git a/l10n/ru/settings.po b/l10n/ru/settings.po index b0831ab57a..1bb91218cb 100644 --- a/l10n/ru/settings.po +++ b/l10n/ru/settings.po @@ -21,9 +21,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 07:10+0000\n" -"Last-Translator: Langaru \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -35,12 +35,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Загрузка из App Store запрещена" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Ошибка авторизации" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "Невозможно изменить отображаемое имя" @@ -94,7 +94,7 @@ msgstr "Невозможно добавить пользователя в гру msgid "Unable to remove user from group %s" msgstr "Невозможно удалить пользователя из группы %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "Невозможно обновить приложение" @@ -227,10 +227,6 @@ msgstr "Текущий пароль" msgid "New password" msgstr "Новый пароль" -#: templates/personal.php:28 -msgid "show" -msgstr "показать" - #: templates/personal.php:29 msgid "Change password" msgstr "Сменить пароль" diff --git a/l10n/ru_RU/settings.po b/l10n/ru_RU/settings.po index 184b4e73c6..0c0232363b 100644 --- a/l10n/ru_RU/settings.po +++ b/l10n/ru_RU/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" @@ -23,12 +23,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Невозможно загрузить список из App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Ошибка авторизации" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -82,7 +82,7 @@ msgstr "Невозможно добавить пользователя в гру msgid "Unable to remove user from group %s" msgstr "Невозможно удалить пользователя из группы %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -215,10 +215,6 @@ msgstr "Текущий пароль" msgid "New password" msgstr "Новый пароль" -#: templates/personal.php:28 -msgid "show" -msgstr "показать" - #: templates/personal.php:29 msgid "Change password" msgstr "Изменить пароль" diff --git a/l10n/si_LK/settings.po b/l10n/si_LK/settings.po index 223283dfa9..12dc3ef730 100644 --- a/l10n/si_LK/settings.po +++ b/l10n/si_LK/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" "MIME-Version: 1.0\n" @@ -24,12 +24,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "සත්‍යාපන දෝෂයක්" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -83,7 +83,7 @@ msgstr "පරිශීලකයා %s කණ්ඩායමට එකතු ක msgid "Unable to remove user from group %s" msgstr "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -216,10 +216,6 @@ msgstr "වත්මන් මුරපදය" msgid "New password" msgstr "නව මුරපදය" -#: templates/personal.php:28 -msgid "show" -msgstr "ප්‍රදර්ශනය කිරීම" - #: templates/personal.php:29 msgid "Change password" msgstr "මුරපදය වෙනස් කිරීම" diff --git a/l10n/sk/settings.po b/l10n/sk/settings.po index 8ae555c067..b75c78b6f4 100644 --- a/l10n/sk/settings.po +++ b/l10n/sk/settings.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2011-07-25 16:05+0000\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,12 +21,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -80,7 +80,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -213,10 +213,6 @@ msgstr "" msgid "New password" msgstr "" -#: templates/personal.php:28 -msgid "show" -msgstr "" - #: templates/personal.php:29 msgid "Change password" msgstr "" diff --git a/l10n/sk_SK/settings.po b/l10n/sk_SK/settings.po index 3ba6310290..9862a581cc 100644 --- a/l10n/sk_SK/settings.po +++ b/l10n/sk_SK/settings.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" @@ -27,12 +27,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Nie je možné nahrať zoznam z App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Chyba pri autentifikácii" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -86,7 +86,7 @@ msgstr "Nie je možné pridať užívateľa do skupiny %s" msgid "Unable to remove user from group %s" msgstr "Nie je možné odstrániť používateľa zo skupiny %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "Nemožno aktualizovať aplikáciu." @@ -219,10 +219,6 @@ msgstr "Aktuálne heslo" msgid "New password" msgstr "Nové heslo" -#: templates/personal.php:28 -msgid "show" -msgstr "zobraziť" - #: templates/personal.php:29 msgid "Change password" msgstr "Zmeniť heslo" diff --git a/l10n/sl/settings.po b/l10n/sl/settings.po index 9046223ab3..d806bf7c5a 100644 --- a/l10n/sl/settings.po +++ b/l10n/sl/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n" "MIME-Version: 1.0\n" @@ -25,12 +25,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Ni mogoče naložiti seznama iz App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Napaka overitve" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -84,7 +84,7 @@ msgstr "Uporabnika ni mogoče dodati k skupini %s" msgid "Unable to remove user from group %s" msgstr "Uporabnika ni mogoče odstraniti iz skupine %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -217,10 +217,6 @@ msgstr "Trenutno geslo" msgid "New password" msgstr "Novo geslo" -#: templates/personal.php:28 -msgid "show" -msgstr "pokaži" - #: templates/personal.php:29 msgid "Change password" msgstr "Spremeni geslo" diff --git a/l10n/sr/settings.po b/l10n/sr/settings.po index 57f48decd5..ed8fbed9d0 100644 --- a/l10n/sr/settings.po +++ b/l10n/sr/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" @@ -23,12 +23,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Грешка приликом учитавања списка из Складишта Програма" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Грешка при аутентификацији" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -82,7 +82,7 @@ msgstr "Не могу да додам корисника у групу %s" msgid "Unable to remove user from group %s" msgstr "Не могу да уклоним корисника из групе %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -215,10 +215,6 @@ msgstr "Тренутна лозинка" msgid "New password" msgstr "Нова лозинка" -#: templates/personal.php:28 -msgid "show" -msgstr "прикажи" - #: templates/personal.php:29 msgid "Change password" msgstr "Измени лозинку" diff --git a/l10n/sr@latin/settings.po b/l10n/sr@latin/settings.po index f5f05886b6..7be26c74f1 100644 --- a/l10n/sr@latin/settings.po +++ b/l10n/sr@latin/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n" "MIME-Version: 1.0\n" @@ -22,12 +22,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Greška pri autentifikaciji" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -81,7 +81,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -214,10 +214,6 @@ msgstr "Trenutna lozinka" msgid "New password" msgstr "Nova lozinka" -#: templates/personal.php:28 -msgid "show" -msgstr "prikaži" - #: templates/personal.php:29 msgid "Change password" msgstr "Izmeni lozinku" diff --git a/l10n/sv/settings.po b/l10n/sv/settings.po index c51345d430..46e0324111 100644 --- a/l10n/sv/settings.po +++ b/l10n/sv/settings.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" @@ -30,12 +30,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Kan inte ladda listan från App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Autentiseringsfel" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -89,7 +89,7 @@ msgstr "Kan inte lägga till användare i gruppen %s" msgid "Unable to remove user from group %s" msgstr "Kan inte radera användare från gruppen %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "Kunde inte uppdatera appen" @@ -222,10 +222,6 @@ msgstr "Nuvarande lösenord" msgid "New password" msgstr "Nytt lösenord" -#: templates/personal.php:28 -msgid "show" -msgstr "visa" - #: templates/personal.php:29 msgid "Change password" msgstr "Ändra lösenord" diff --git a/l10n/sw_KE/settings.po b/l10n/sw_KE/settings.po index ebfabb7d98..d01fd6408b 100644 --- a/l10n/sw_KE/settings.po +++ b/l10n/sw_KE/settings.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2011-07-25 16:05+0000\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,12 +21,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -80,7 +80,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -213,10 +213,6 @@ msgstr "" msgid "New password" msgstr "" -#: templates/personal.php:28 -msgid "show" -msgstr "" - #: templates/personal.php:29 msgid "Change password" msgstr "" diff --git a/l10n/ta_LK/settings.po b/l10n/ta_LK/settings.po index 6e3983c95c..6fefbd5fc8 100644 --- a/l10n/ta_LK/settings.po +++ b/l10n/ta_LK/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" "MIME-Version: 1.0\n" @@ -22,12 +22,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "செயலி சேமிப்பிலிருந்து பட்டியலை ஏற்றமுடியாதுள்ளது" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "அத்தாட்சிப்படுத்தலில் வழு" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -81,7 +81,7 @@ msgstr "குழு %s இல் பயனாளரை சேர்க்க msgid "Unable to remove user from group %s" msgstr "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -214,10 +214,6 @@ msgstr "தற்போதைய கடவுச்சொல்" msgid "New password" msgstr "புதிய கடவுச்சொல்" -#: templates/personal.php:28 -msgid "show" -msgstr "காட்டு" - #: templates/personal.php:29 msgid "Change password" msgstr "கடவுச்சொல்லை மாற்றுக" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index 6a00507c5f..e56930e017 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -160,55 +160,55 @@ msgstr "" msgid "Settings" msgstr "" -#: js/js.js:766 +#: js/js.js:767 msgid "seconds ago" msgstr "" -#: js/js.js:767 +#: js/js.js:768 msgid "1 minute ago" msgstr "" -#: js/js.js:768 +#: js/js.js:769 msgid "{minutes} minutes ago" msgstr "" -#: js/js.js:769 +#: js/js.js:770 msgid "1 hour ago" msgstr "" -#: js/js.js:770 +#: js/js.js:771 msgid "{hours} hours ago" msgstr "" -#: js/js.js:771 +#: js/js.js:772 msgid "today" msgstr "" -#: js/js.js:772 +#: js/js.js:773 msgid "yesterday" msgstr "" -#: js/js.js:773 +#: js/js.js:774 msgid "{days} days ago" msgstr "" -#: js/js.js:774 +#: js/js.js:775 msgid "last month" msgstr "" -#: js/js.js:775 +#: js/js.js:776 msgid "{months} months ago" msgstr "" -#: js/js.js:776 +#: js/js.js:777 msgid "months ago" msgstr "" -#: js/js.js:777 +#: js/js.js:778 msgid "last year" msgstr "" -#: js/js.js:778 +#: js/js.js:779 msgid "years ago" msgstr "" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index e106765f56..3d8c84c894 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -192,31 +192,31 @@ msgstr "" msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index b0e79f0c42..b00f8418bd 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index f3455db032..d2e014c2d7 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,13 +41,13 @@ msgstr "" msgid "Error configuring Google Drive storage" msgstr "" -#: lib/config.php:405 +#: lib/config.php:413 msgid "" "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " "is not possible. Please ask your system administrator to install it." msgstr "" -#: lib/config.php:406 +#: lib/config.php:414 msgid "" "Warning: The FTP support in PHP is not enabled or installed. Mounting " "of FTP shares is not possible. Please ask your system administrator to " diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index b6979782de..362ecf7353 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index cd80ec0918..ab52cbdde8 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 6aa08a41e5..6dea4891f9 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 87ad3ae49f..4364f23399 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index 7c27552622..6191e877aa 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,12 +21,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -214,10 +214,6 @@ msgstr "" msgid "New password" msgstr "" -#: templates/personal.php:28 -msgid "show" -msgstr "" - #: templates/personal.php:29 msgid "Change password" msgstr "" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index d255549329..bf744d12ba 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index 2208724aa9..2db89d5668 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/th_TH/settings.po b/l10n/th_TH/settings.po index a04a575b53..7bcf49a4ff 100644 --- a/l10n/th_TH/settings.po +++ b/l10n/th_TH/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n" "MIME-Version: 1.0\n" @@ -24,12 +24,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "ไม่สามารถโหลดรายการจาก App Store ได้" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "เกิดข้อผิดพลาดเกี่ยวกับสิทธิ์การเข้าใช้งาน" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -83,7 +83,7 @@ msgstr "ไม่สามารถเพิ่มผู้ใช้งานเ msgid "Unable to remove user from group %s" msgstr "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "ไม่สามารถอัพเดทแอปฯ" @@ -216,10 +216,6 @@ msgstr "รหัสผ่านปัจจุบัน" msgid "New password" msgstr "รหัสผ่านใหม่" -#: templates/personal.php:28 -msgid "show" -msgstr "แสดง" - #: templates/personal.php:29 msgid "Change password" msgstr "เปลี่ยนรหัสผ่าน" diff --git a/l10n/tr/settings.po b/l10n/tr/settings.po index 0b51576c5a..29f5d1c732 100644 --- a/l10n/tr/settings.po +++ b/l10n/tr/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -25,12 +25,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "App Store'dan liste yüklenemiyor" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Eşleşme hata" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -84,7 +84,7 @@ msgstr "Kullanıcı %s grubuna eklenemiyor" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -217,10 +217,6 @@ msgstr "Mevcut parola" msgid "New password" msgstr "Yeni parola" -#: templates/personal.php:28 -msgid "show" -msgstr "göster" - #: templates/personal.php:29 msgid "Change password" msgstr "Parola değiştir" diff --git a/l10n/uk/settings.po b/l10n/uk/settings.po index 1646712c69..78514de2dc 100644 --- a/l10n/uk/settings.po +++ b/l10n/uk/settings.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 15:20+0000\n" -"Last-Translator: volodya327 \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,12 +25,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Не вдалося завантажити список з App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Помилка автентифікації" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "Не вдалося змінити зображене ім'я" @@ -84,7 +84,7 @@ msgstr "Не вдалося додати користувача у групу %s msgid "Unable to remove user from group %s" msgstr "Не вдалося видалити користувача із групи %s" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "Не вдалося оновити програму. " @@ -217,10 +217,6 @@ msgstr "Поточний пароль" msgid "New password" msgstr "Новий пароль" -#: templates/personal.php:28 -msgid "show" -msgstr "показати" - #: templates/personal.php:29 msgid "Change password" msgstr "Змінити пароль" diff --git a/l10n/vi/settings.po b/l10n/vi/settings.po index 4b2e2d498d..13b84537a4 100644 --- a/l10n/vi/settings.po +++ b/l10n/vi/settings.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 18:50+0000\n" -"Last-Translator: saosangm \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -28,12 +28,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Không thể tải danh sách ứng dụng từ App Store" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "Lỗi xác thực" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "Không thể thay đổi tên hiển thị" @@ -220,10 +220,6 @@ msgstr "Mật khẩu cũ" msgid "New password" msgstr "Mật khẩu mới " -#: templates/personal.php:28 -msgid "show" -msgstr "Hiện" - #: templates/personal.php:29 msgid "Change password" msgstr "Đổi mật khẩu" diff --git a/l10n/zh_CN.GB2312/settings.po b/l10n/zh_CN.GB2312/settings.po index 3335b00012..55d149d2f0 100644 --- a/l10n/zh_CN.GB2312/settings.po +++ b/l10n/zh_CN.GB2312/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n" "MIME-Version: 1.0\n" @@ -23,12 +23,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "不能从App Store 中加载列表" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "认证错误" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -82,7 +82,7 @@ msgstr "未能添加用户到群组 %s" msgid "Unable to remove user from group %s" msgstr "未能将用户从群组 %s 移除" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -215,10 +215,6 @@ msgstr "现在的密码" msgid "New password" msgstr "新密码" -#: templates/personal.php:28 -msgid "show" -msgstr "展示" - #: templates/personal.php:29 msgid "Change password" msgstr "改变密码" diff --git a/l10n/zh_CN/settings.po b/l10n/zh_CN/settings.po index 51c13db879..c667c480d3 100644 --- a/l10n/zh_CN/settings.po +++ b/l10n/zh_CN/settings.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -27,12 +27,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "无法从应用商店载入列表" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "认证错误" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -86,7 +86,7 @@ msgstr "无法把用户添加到组 %s" msgid "Unable to remove user from group %s" msgstr "无法从组%s中移除用户" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -219,10 +219,6 @@ msgstr "当前密码" msgid "New password" msgstr "新密码" -#: templates/personal.php:28 -msgid "show" -msgstr "显示" - #: templates/personal.php:29 msgid "Change password" msgstr "修改密码" diff --git a/l10n/zh_HK/settings.po b/l10n/zh_HK/settings.po index e9501109c5..5c055bf08c 100644 --- a/l10n/zh_HK/settings.po +++ b/l10n/zh_HK/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n" "MIME-Version: 1.0\n" @@ -21,12 +21,12 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" msgstr "" @@ -80,7 +80,7 @@ msgstr "" msgid "Unable to remove user from group %s" msgstr "" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "" @@ -213,10 +213,6 @@ msgstr "" msgid "New password" msgstr "" -#: templates/personal.php:28 -msgid "show" -msgstr "" - #: templates/personal.php:29 msgid "Change password" msgstr "" diff --git a/l10n/zh_TW/core.po b/l10n/zh_TW/core.po index e060611cd6..183982cbe9 100644 --- a/l10n/zh_TW/core.po +++ b/l10n/zh_TW/core.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 23:12+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 06:20+0000\n" +"Last-Translator: pellaeon \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -57,7 +57,7 @@ msgstr "沒有可增加的分類?" #: ajax/vcategories/add.php:37 #, php-format msgid "This category already exists: %s" -msgstr "" +msgstr "分類已經存在: %s" #: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27 #: ajax/vcategories/favorites.php:24 @@ -161,59 +161,59 @@ msgstr "十一月" msgid "December" msgstr "十二月" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "設定" -#: js/js.js:764 +#: js/js.js:767 msgid "seconds ago" msgstr "幾秒前" -#: js/js.js:765 +#: js/js.js:768 msgid "1 minute ago" msgstr "1 分鐘前" -#: js/js.js:766 +#: js/js.js:769 msgid "{minutes} minutes ago" msgstr "{minutes} 分鐘前" -#: js/js.js:767 +#: js/js.js:770 msgid "1 hour ago" msgstr "1 個小時前" -#: js/js.js:768 +#: js/js.js:771 msgid "{hours} hours ago" msgstr "{hours} 小時前" -#: js/js.js:769 +#: js/js.js:772 msgid "today" msgstr "今天" -#: js/js.js:770 +#: js/js.js:773 msgid "yesterday" msgstr "昨天" -#: js/js.js:771 +#: js/js.js:774 msgid "{days} days ago" msgstr "{days} 天前" -#: js/js.js:772 +#: js/js.js:775 msgid "last month" msgstr "上個月" -#: js/js.js:773 +#: js/js.js:776 msgid "{months} months ago" msgstr "{months} 個月前" -#: js/js.js:774 +#: js/js.js:777 msgid "months ago" msgstr "幾個月前" -#: js/js.js:775 +#: js/js.js:778 msgid "last year" msgstr "去年" -#: js/js.js:776 +#: js/js.js:779 msgid "years ago" msgstr "幾年前" @@ -243,8 +243,8 @@ msgid "The object type is not specified." msgstr "未指定物件類型。" #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "錯誤" @@ -264,7 +264,7 @@ msgstr "分享" msgid "Shared" msgstr "已分享" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "分享時發生錯誤" @@ -360,23 +360,23 @@ msgstr "刪除" msgid "share" msgstr "分享" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "受密碼保護" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "解除過期日設定失敗" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "錯誤的到期日設定" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "正在寄出..." -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "Email 已寄出" @@ -492,14 +492,14 @@ msgstr "若沒有安全的亂數產生器,攻擊者可能可以預測密碼重 msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "您的資料目錄看起來可以被 Internet 公開存取,因為 .htaccess 設定並未生效。" #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "請參考說明文件以瞭解如何正確設定您的伺服器。" #: templates/installation.php:36 msgid "Create an admin account" @@ -582,7 +582,7 @@ msgstr "登入" #: templates/login.php:49 msgid "Alternative Logins" -msgstr "" +msgstr "替代登入方法" #: templates/part.pagenavi.php:3 msgid "prev" diff --git a/l10n/zh_TW/files.po b/l10n/zh_TW/files.po index 230cb56828..0ff4e1b4dd 100644 --- a/l10n/zh_TW/files.po +++ b/l10n/zh_TW/files.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 06:20+0000\n" +"Last-Translator: pellaeon \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -74,7 +74,7 @@ msgstr "寫入硬碟失敗" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "儲存空間不足" #: ajax/upload.php:83 msgid "Invalid directory." @@ -86,7 +86,7 @@ msgstr "檔案" #: js/fileactions.js:116 msgid "Delete permanently" -msgstr "" +msgstr "永久刪除" #: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" @@ -198,31 +198,31 @@ msgstr "URL 不能為空白." msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "無效的資料夾名稱,'Shared' 的使用被 Owncloud 保留" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "名稱" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "大小" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "修改" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "1 個資料夾" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "{count} 個資料夾" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "1 個檔案" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "{count} 個檔案" @@ -280,7 +280,7 @@ msgstr "從連結" #: templates/index.php:40 msgid "Trash bin" -msgstr "" +msgstr "回收筒" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/zh_TW/lib.po b/l10n/zh_TW/lib.po index 97f9bbed32..6b309b3bfb 100644 --- a/l10n/zh_TW/lib.po +++ b/l10n/zh_TW/lib.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 06:20+0000\n" +"Last-Translator: pellaeon \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -93,12 +93,12 @@ msgstr "圖片" msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "您的網頁伺服器尚未被正確設定來進行檔案同步,因為您的 WebDAV 界面似乎無法使用。" #: setup.php:625 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "請參考安裝指南。" #: template.php:113 msgid "seconds ago" diff --git a/l10n/zh_TW/settings.po b/l10n/zh_TW/settings.po index b1edf5e539..4eef5b37e4 100644 --- a/l10n/zh_TW/settings.po +++ b/l10n/zh_TW/settings.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-07 00:07+0100\n" -"PO-Revision-Date: 2013-02-06 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"PO-Revision-Date: 2013-02-10 23:03+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" @@ -29,14 +29,14 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "無法從 App Store 讀取清單" -#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15 +#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15 #: ajax/togglegroups.php:18 msgid "Authentication error" msgstr "認證錯誤" -#: ajax/changedisplayname.php:28 +#: ajax/changedisplayname.php:32 msgid "Unable to change display name" -msgstr "" +msgstr "無法更改顯示名稱" #: ajax/creategroup.php:10 msgid "Group already exists" @@ -88,7 +88,7 @@ msgstr "使用者加入群組%s錯誤" msgid "Unable to remove user from group %s" msgstr "使用者移出群組%s錯誤" -#: ajax/updateapp.php:13 +#: ajax/updateapp.php:14 msgid "Couldn't update app." msgstr "無法更新應用程式" @@ -221,10 +221,6 @@ msgstr "目前密碼" msgid "New password" msgstr "新密碼" -#: templates/personal.php:28 -msgid "show" -msgstr "顯示" - #: templates/personal.php:29 msgid "Change password" msgstr "變更密碼" @@ -235,15 +231,15 @@ msgstr "顯示名稱" #: templates/personal.php:42 msgid "Your display name was changed" -msgstr "" +msgstr "已更改顯示名稱" #: templates/personal.php:43 msgid "Unable to change your display name" -msgstr "" +msgstr "無法更改您的顯示名稱" #: templates/personal.php:46 msgid "Change display name" -msgstr "" +msgstr "更改顯示名稱" #: templates/personal.php:55 msgid "Email" diff --git a/lib/l10n/ca.php b/lib/l10n/ca.php index f6401fa39b..d34220f8f5 100644 --- a/lib/l10n/ca.php +++ b/lib/l10n/ca.php @@ -16,6 +16,8 @@ "Files" => "Fitxers", "Text" => "Text", "Images" => "Imatges", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament.", +"Please double check the installation guides." => "Comproveu les guies d'instal·lació.", "seconds ago" => "segons enrere", "1 minute ago" => "fa 1 minut", "%d minutes ago" => "fa %d minuts", diff --git a/lib/l10n/cs_CZ.php b/lib/l10n/cs_CZ.php index 2c823194b9..f3fd1a2481 100644 --- a/lib/l10n/cs_CZ.php +++ b/lib/l10n/cs_CZ.php @@ -16,6 +16,8 @@ "Files" => "Soubory", "Text" => "Text", "Images" => "Obrázky", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Váš webový server není správně nastaven pro umožnění synchronizace, protože rozhraní WebDAV je rozbité.", +"Please double check the installation guides." => "Zkonzultujte, prosím, průvodce instalací.", "seconds ago" => "před vteřinami", "1 minute ago" => "před 1 minutou", "%d minutes ago" => "před %d minutami", diff --git a/lib/l10n/es.php b/lib/l10n/es.php index 8bbc8a8f7b..f3b03b5665 100644 --- a/lib/l10n/es.php +++ b/lib/l10n/es.php @@ -16,6 +16,8 @@ "Files" => "Archivos", "Text" => "Texto", "Images" => "Imágenes", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.", +"Please double check the installation guides." => "Por favor, vuelva a comprobar las guías de instalación.", "seconds ago" => "hace segundos", "1 minute ago" => "hace 1 minuto", "%d minutes ago" => "hace %d minutos", diff --git a/lib/l10n/fi_FI.php b/lib/l10n/fi_FI.php index b8d4b13743..fb94dd8404 100644 --- a/lib/l10n/fi_FI.php +++ b/lib/l10n/fi_FI.php @@ -16,6 +16,7 @@ "Files" => "Tiedostot", "Text" => "Teksti", "Images" => "Kuvat", +"Please double check the installation guides." => "Lue tarkasti asennusohjeet.", "seconds ago" => "sekuntia sitten", "1 minute ago" => "1 minuutti sitten", "%d minutes ago" => "%d minuuttia sitten", diff --git a/lib/l10n/fr.php b/lib/l10n/fr.php index c6bf8f7f9c..852fe1ddc4 100644 --- a/lib/l10n/fr.php +++ b/lib/l10n/fr.php @@ -16,6 +16,8 @@ "Files" => "Fichiers", "Text" => "Texte", "Images" => "Images", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Votre serveur web, n'est pas correctement configuré pour permettre la synchronisation des fichiers, car l'interface WebDav ne fonctionne pas comme il faut.", +"Please double check the installation guides." => "Veuillez vous référer au guide d'installation.", "seconds ago" => "à l'instant", "1 minute ago" => "il y a 1 minute", "%d minutes ago" => "il y a %d minutes", diff --git a/lib/l10n/it.php b/lib/l10n/it.php index eb404db7fb..d339bd5b1c 100644 --- a/lib/l10n/it.php +++ b/lib/l10n/it.php @@ -16,6 +16,8 @@ "Files" => "File", "Text" => "Testo", "Images" => "Immagini", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata.", +"Please double check the installation guides." => "Leggi attentamente le guide d'installazione.", "seconds ago" => "secondi fa", "1 minute ago" => "1 minuto fa", "%d minutes ago" => "%d minuti fa", diff --git a/lib/l10n/lv.php b/lib/l10n/lv.php index 9f2a0dea74..cc70f760a2 100644 --- a/lib/l10n/lv.php +++ b/lib/l10n/lv.php @@ -16,6 +16,8 @@ "Files" => "Datnes", "Text" => "Teksts", "Images" => "Attēli", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Jūsu serveris vēl nav pareizi iestatīts, lai ļautu sinhronizēt datnes, jo izskatās, ka WebDAV saskarne ir salauzta.", +"Please double check the installation guides." => "Lūdzu, vēlreiz pārbaudiet instalēšanas palīdzību.", "seconds ago" => "sekundes atpakaļ", "1 minute ago" => "pirms 1 minūtes", "%d minutes ago" => "pirms %d minūtēm", diff --git a/lib/l10n/pt_PT.php b/lib/l10n/pt_PT.php index e35bb489c4..67b8078ddf 100644 --- a/lib/l10n/pt_PT.php +++ b/lib/l10n/pt_PT.php @@ -16,6 +16,8 @@ "Files" => "Ficheiros", "Text" => "Texto", "Images" => "Imagens", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas.", +"Please double check the installation guides." => "Por favor verifique installation guides.", "seconds ago" => "há alguns segundos", "1 minute ago" => "há 1 minuto", "%d minutes ago" => "há %d minutos", diff --git a/lib/l10n/zh_TW.php b/lib/l10n/zh_TW.php index 62ab8fedd5..91b0329e24 100644 --- a/lib/l10n/zh_TW.php +++ b/lib/l10n/zh_TW.php @@ -16,6 +16,8 @@ "Files" => "檔案", "Text" => "文字", "Images" => "圖片", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "您的網頁伺服器尚未被正確設定來進行檔案同步,因為您的 WebDAV 界面似乎無法使用。", +"Please double check the installation guides." => "請參考安裝指南。", "seconds ago" => "幾秒前", "1 minute ago" => "1 分鐘前", "%d minutes ago" => "%d 分鐘前", diff --git a/settings/l10n/ar.php b/settings/l10n/ar.php index 499c237eb7..37fd713257 100644 --- a/settings/l10n/ar.php +++ b/settings/l10n/ar.php @@ -40,7 +40,6 @@ "Unable to change your password" => "لم يتم تعديل كلمة السر بنجاح", "Current password" => "كلمات السر الحالية", "New password" => "كلمات سر جديدة", -"show" => "أظهر", "Change password" => "عدل كلمة السر", "Email" => "العنوان البريدي", "Your email address" => "عنوانك البريدي", diff --git a/settings/l10n/bg_BG.php b/settings/l10n/bg_BG.php index 418546a630..6849f1f4c3 100644 --- a/settings/l10n/bg_BG.php +++ b/settings/l10n/bg_BG.php @@ -12,7 +12,6 @@ "Unable to change your password" => "Промяната на паролата не беше извършена", "Current password" => "Текуща парола", "New password" => "Нова парола", -"show" => "показва", "Change password" => "Промяна на паролата", "Email" => "E-mail", "Your email address" => "Вашия email адрес", diff --git a/settings/l10n/bn_BD.php b/settings/l10n/bn_BD.php index fc90036536..1de264d13e 100644 --- a/settings/l10n/bn_BD.php +++ b/settings/l10n/bn_BD.php @@ -40,7 +40,6 @@ "Unable to change your password" => "আপনার কূটশব্দটি পরিবর্তন করতে সক্ষম নয়", "Current password" => "বর্তমান কূটশব্দ", "New password" => "নতুন কূটশব্দ", -"show" => "প্রদর্শন", "Change password" => "কূটশব্দ পরিবর্তন করুন", "Email" => "ই-মেইল ", "Your email address" => "আপনার ই-মেইল ঠিকানা", diff --git a/settings/l10n/ca.php b/settings/l10n/ca.php index 301ead2802..552a2f4e5a 100644 --- a/settings/l10n/ca.php +++ b/settings/l10n/ca.php @@ -47,7 +47,6 @@ "Unable to change your password" => "No s'ha pogut canviar la contrasenya", "Current password" => "Contrasenya actual", "New password" => "Contrasenya nova", -"show" => "mostra", "Change password" => "Canvia la contrasenya", "Display Name" => "Nom a mostrar", "Your display name was changed" => "El vostre nom a mostrar ha canviat", diff --git a/settings/l10n/cs_CZ.php b/settings/l10n/cs_CZ.php index 30f44dfefc..68c68f779b 100644 --- a/settings/l10n/cs_CZ.php +++ b/settings/l10n/cs_CZ.php @@ -47,7 +47,6 @@ "Unable to change your password" => "Vaše heslo nelze změnit", "Current password" => "Současné heslo", "New password" => "Nové heslo", -"show" => "zobrazit", "Change password" => "Změnit heslo", "Display Name" => "Zobrazované jméno", "Your display name was changed" => "Vaše zobrazované jméno bylo změněno", diff --git a/settings/l10n/da.php b/settings/l10n/da.php index 294bd91821..ed577d9aa3 100644 --- a/settings/l10n/da.php +++ b/settings/l10n/da.php @@ -40,7 +40,6 @@ "Unable to change your password" => "Ude af stand til at ændre dit kodeord", "Current password" => "Nuværende adgangskode", "New password" => "Ny adgangskode", -"show" => "vis", "Change password" => "Skift kodeord", "Email" => "Email", "Your email address" => "Din emailadresse", diff --git a/settings/l10n/de.php b/settings/l10n/de.php index b7ace81cf5..3c377a5636 100644 --- a/settings/l10n/de.php +++ b/settings/l10n/de.php @@ -41,7 +41,6 @@ "Unable to change your password" => "Passwort konnte nicht geändert werden", "Current password" => "Aktuelles Passwort", "New password" => "Neues Passwort", -"show" => "zeigen", "Change password" => "Passwort ändern", "Display Name" => "Anzeigename", "Email" => "E-Mail", diff --git a/settings/l10n/de_DE.php b/settings/l10n/de_DE.php index ab8c791bbe..f80917165f 100644 --- a/settings/l10n/de_DE.php +++ b/settings/l10n/de_DE.php @@ -47,7 +47,6 @@ "Unable to change your password" => "Das Passwort konnte nicht geändert werden", "Current password" => "Aktuelles Passwort", "New password" => "Neues Passwort", -"show" => "zeigen", "Change password" => "Passwort ändern", "Display Name" => "Anzeigename", "Your display name was changed" => "Dein Anzeigename wurde geändert", diff --git a/settings/l10n/el.php b/settings/l10n/el.php index 925ecf695a..3698cfd4d5 100644 --- a/settings/l10n/el.php +++ b/settings/l10n/el.php @@ -40,7 +40,6 @@ "Unable to change your password" => "Δεν ήταν δυνατή η αλλαγή του κωδικού πρόσβασης", "Current password" => "Τρέχων συνθηματικό", "New password" => "Νέο συνθηματικό", -"show" => "εμφάνιση", "Change password" => "Αλλαγή συνθηματικού", "Email" => "Email", "Your email address" => "Η διεύθυνση ηλεκτρονικού ταχυδρομείου σας", diff --git a/settings/l10n/eo.php b/settings/l10n/eo.php index f84526c3c9..c4673f3a31 100644 --- a/settings/l10n/eo.php +++ b/settings/l10n/eo.php @@ -40,7 +40,6 @@ "Unable to change your password" => "Ne eblis ŝanĝi vian pasvorton", "Current password" => "Nuna pasvorto", "New password" => "Nova pasvorto", -"show" => "montri", "Change password" => "Ŝanĝi la pasvorton", "Email" => "Retpoŝto", "Your email address" => "Via retpoŝta adreso", diff --git a/settings/l10n/es.php b/settings/l10n/es.php index 1b4fd6ac7a..ffbe94bd83 100644 --- a/settings/l10n/es.php +++ b/settings/l10n/es.php @@ -47,7 +47,6 @@ "Unable to change your password" => "No se ha podido cambiar tu contraseña", "Current password" => "Contraseña actual", "New password" => "Nueva contraseña:", -"show" => "mostrar", "Change password" => "Cambiar contraseña", "Display Name" => "Nombre a mostrar", "Your display name was changed" => "Su nombre fue cambiado", diff --git a/settings/l10n/es_AR.php b/settings/l10n/es_AR.php index a33d9e8063..102ca8f536 100644 --- a/settings/l10n/es_AR.php +++ b/settings/l10n/es_AR.php @@ -40,7 +40,6 @@ "Unable to change your password" => "No fue posible cambiar tu contraseña", "Current password" => "Contraseña actual", "New password" => "Nueva contraseña:", -"show" => "mostrar", "Change password" => "Cambiar contraseña", "Display Name" => "Nombre a mostrar", "Email" => "Correo electrónico", diff --git a/settings/l10n/et_EE.php b/settings/l10n/et_EE.php index df5b707fcd..bcdfd8dc95 100644 --- a/settings/l10n/et_EE.php +++ b/settings/l10n/et_EE.php @@ -29,7 +29,6 @@ "Unable to change your password" => "Sa ei saa oma parooli muuta", "Current password" => "Praegune parool", "New password" => "Uus parool", -"show" => "näita", "Change password" => "Muuda parooli", "Email" => "E-post", "Your email address" => "Sinu e-posti aadress", diff --git a/settings/l10n/eu.php b/settings/l10n/eu.php index 1be2c7940b..d7df03616d 100644 --- a/settings/l10n/eu.php +++ b/settings/l10n/eu.php @@ -40,7 +40,6 @@ "Unable to change your password" => "Ezin izan da zure pasahitza aldatu", "Current password" => "Uneko pasahitza", "New password" => "Pasahitz berria", -"show" => "erakutsi", "Change password" => "Aldatu pasahitza", "Display Name" => "Bistaratze Izena", "Email" => "E-Posta", diff --git a/settings/l10n/fa.php b/settings/l10n/fa.php index d4290f6dee..48f9e9a45c 100644 --- a/settings/l10n/fa.php +++ b/settings/l10n/fa.php @@ -29,7 +29,6 @@ "Unable to change your password" => "ناتوان در تغییر گذرواژه", "Current password" => "گذرواژه کنونی", "New password" => "گذرواژه جدید", -"show" => "نمایش", "Change password" => "تغییر گذر واژه", "Email" => "پست الکترونیکی", "Your email address" => "پست الکترونیکی شما", diff --git a/settings/l10n/fi_FI.php b/settings/l10n/fi_FI.php index 9f1feb74a1..6619c116d3 100644 --- a/settings/l10n/fi_FI.php +++ b/settings/l10n/fi_FI.php @@ -1,6 +1,7 @@ "Ei pystytä lataamaan listaa sovellusvarastosta (App Store)", "Authentication error" => "Todennusvirhe", +"Unable to change display name" => "Näyttönimen muuttaminen epäonnistui", "Group already exists" => "Ryhmä on jo olemassa", "Unable to add group" => "Ryhmän lisäys epäonnistui", "Could not enable app. " => "Sovelluksen käyttöönotto epäonnistui.", @@ -46,9 +47,11 @@ "Unable to change your password" => "Salasanaasi ei voitu vaihtaa", "Current password" => "Nykyinen salasana", "New password" => "Uusi salasana", -"show" => "näytä", "Change password" => "Vaihda salasana", "Display Name" => "Näyttönimi", +"Your display name was changed" => "Näyttönimesi muutettiin", +"Unable to change your display name" => "Näyttönimen muuttaminen epäonnistui", +"Change display name" => "Muuta näyttönimeä", "Email" => "Sähköposti", "Your email address" => "Sähköpostiosoitteesi", "Fill in an email address to enable password recovery" => "Anna sähköpostiosoitteesi, jotta unohdettu salasana on mahdollista palauttaa", diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php index a47acb6435..67f80063b5 100644 --- a/settings/l10n/fr.php +++ b/settings/l10n/fr.php @@ -47,7 +47,6 @@ "Unable to change your password" => "Impossible de changer votre mot de passe", "Current password" => "Mot de passe actuel", "New password" => "Nouveau mot de passe", -"show" => "Afficher", "Change password" => "Changer de mot de passe", "Display Name" => "Nom affiché", "Your display name was changed" => "Votre nom d'affichage a bien été modifié", diff --git a/settings/l10n/gl.php b/settings/l10n/gl.php index 997ac53de7..c4f6e65953 100644 --- a/settings/l10n/gl.php +++ b/settings/l10n/gl.php @@ -40,7 +40,6 @@ "Unable to change your password" => "Non é posíbel cambiar o seu contrasinal", "Current password" => "Contrasinal actual", "New password" => "Novo contrasinal", -"show" => "amosar", "Change password" => "Cambiar o contrasinal", "Email" => "Correo", "Your email address" => "O seu enderezo de correo", diff --git a/settings/l10n/he.php b/settings/l10n/he.php index be776d4fa2..13f2b68534 100644 --- a/settings/l10n/he.php +++ b/settings/l10n/he.php @@ -39,7 +39,6 @@ "Unable to change your password" => "לא ניתן לשנות את הססמה שלך", "Current password" => "ססמה נוכחית", "New password" => "ססמה חדשה", -"show" => "הצגה", "Change password" => "שינוי ססמה", "Email" => "דוא״ל", "Your email address" => "כתובת הדוא״ל שלך", diff --git a/settings/l10n/hr.php b/settings/l10n/hr.php index f55cdcc687..4b8a48b4f2 100644 --- a/settings/l10n/hr.php +++ b/settings/l10n/hr.php @@ -18,7 +18,6 @@ "Unable to change your password" => "Nemoguće promijeniti lozinku", "Current password" => "Trenutna lozinka", "New password" => "Nova lozinka", -"show" => "prikaz", "Change password" => "Izmjena lozinke", "Email" => "e-mail adresa", "Your email address" => "Vaša e-mail adresa", diff --git a/settings/l10n/hu_HU.php b/settings/l10n/hu_HU.php index 23d6c3f5f7..a97ff41ffd 100644 --- a/settings/l10n/hu_HU.php +++ b/settings/l10n/hu_HU.php @@ -40,7 +40,6 @@ "Unable to change your password" => "A jelszó nem változtatható meg", "Current password" => "A jelenlegi jelszó", "New password" => "Az új jelszó", -"show" => "lássam", "Change password" => "A jelszó megváltoztatása", "Email" => "Email", "Your email address" => "Az Ön email címe", diff --git a/settings/l10n/ia.php b/settings/l10n/ia.php index fe26eea5e2..220db7b957 100644 --- a/settings/l10n/ia.php +++ b/settings/l10n/ia.php @@ -10,7 +10,6 @@ "Unable to change your password" => "Non pote cambiar tu contrasigno", "Current password" => "Contrasigno currente", "New password" => "Nove contrasigno", -"show" => "monstrar", "Change password" => "Cambiar contrasigno", "Email" => "E-posta", "Your email address" => "Tu adresse de e-posta", diff --git a/settings/l10n/id.php b/settings/l10n/id.php index 181450e58b..ce1a1581a8 100644 --- a/settings/l10n/id.php +++ b/settings/l10n/id.php @@ -18,7 +18,6 @@ "Unable to change your password" => "Tidak dapat merubah password anda", "Current password" => "Password saat ini", "New password" => "kata kunci baru", -"show" => "perlihatkan", "Change password" => "Rubah password", "Email" => "Email", "Your email address" => "Alamat email anda", diff --git a/settings/l10n/is.php b/settings/l10n/is.php index 75f46a0192..3afe88b5d8 100644 --- a/settings/l10n/is.php +++ b/settings/l10n/is.php @@ -40,7 +40,6 @@ "Unable to change your password" => "Ekki tókst að breyta lykilorðinu þínu", "Current password" => "Núverandi lykilorð", "New password" => "Nýtt lykilorð", -"show" => "sýna", "Change password" => "Breyta lykilorði", "Email" => "Netfang", "Your email address" => "Netfangið þitt", diff --git a/settings/l10n/it.php b/settings/l10n/it.php index 7f860f69ed..934816be02 100644 --- a/settings/l10n/it.php +++ b/settings/l10n/it.php @@ -47,7 +47,6 @@ "Unable to change your password" => "Modifica password non riuscita", "Current password" => "Password attuale", "New password" => "Nuova password", -"show" => "mostra", "Change password" => "Modifica password", "Display Name" => "Nome visualizzato", "Your display name was changed" => "Il tuo nome visualizzato è stato cambiato", diff --git a/settings/l10n/ja_JP.php b/settings/l10n/ja_JP.php index d255b67033..abd1dd2d05 100644 --- a/settings/l10n/ja_JP.php +++ b/settings/l10n/ja_JP.php @@ -47,7 +47,6 @@ "Unable to change your password" => "パスワードを変更することができません", "Current password" => "現在のパスワード", "New password" => "新しいパスワード", -"show" => "表示", "Change password" => "パスワードを変更", "Display Name" => "表示名", "Your display name was changed" => "あなたの表示名を変更しました", diff --git a/settings/l10n/ka_GE.php b/settings/l10n/ka_GE.php index 0fc42d4272..bb4e4a82fe 100644 --- a/settings/l10n/ka_GE.php +++ b/settings/l10n/ka_GE.php @@ -29,7 +29,6 @@ "Unable to change your password" => "თქვენი პაროლი არ შეიცვალა", "Current password" => "მიმდინარე პაროლი", "New password" => "ახალი პაროლი", -"show" => "გამოაჩინე", "Change password" => "პაროლის შეცვლა", "Email" => "იმეილი", "Your email address" => "თქვენი იმეილ მისამართი", diff --git a/settings/l10n/ko.php b/settings/l10n/ko.php index a542b35fee..7c8071048d 100644 --- a/settings/l10n/ko.php +++ b/settings/l10n/ko.php @@ -40,7 +40,6 @@ "Unable to change your password" => "암호를 변경할 수 없음", "Current password" => "현재 암호", "New password" => "새 암호", -"show" => "보이기", "Change password" => "암호 변경", "Display Name" => "표시 이름", "Email" => "이메일", diff --git a/settings/l10n/lb.php b/settings/l10n/lb.php index 5ef88f2789..c78052fdde 100644 --- a/settings/l10n/lb.php +++ b/settings/l10n/lb.php @@ -18,7 +18,6 @@ "Unable to change your password" => "Konnt däin Passwuert net änneren", "Current password" => "Momentan 't Passwuert", "New password" => "Neit Passwuert", -"show" => "weisen", "Change password" => "Passwuert änneren", "Email" => "Email", "Your email address" => "Deng Email Adress", diff --git a/settings/l10n/lt_LT.php b/settings/l10n/lt_LT.php index e514e7f775..e676699477 100644 --- a/settings/l10n/lt_LT.php +++ b/settings/l10n/lt_LT.php @@ -22,7 +22,6 @@ "Unable to change your password" => "Neįmanoma pakeisti slaptažodžio", "Current password" => "Dabartinis slaptažodis", "New password" => "Naujas slaptažodis", -"show" => "rodyti", "Change password" => "Pakeisti slaptažodį", "Email" => "El. paštas", "Your email address" => "Jūsų el. pašto adresas", diff --git a/settings/l10n/lv.php b/settings/l10n/lv.php index 03977206f7..0870c75a34 100644 --- a/settings/l10n/lv.php +++ b/settings/l10n/lv.php @@ -47,7 +47,6 @@ "Unable to change your password" => "Nevar nomainīt jūsu paroli", "Current password" => "Pašreizējā parole", "New password" => "Jauna parole", -"show" => "parādīt", "Change password" => "Mainīt paroli", "Display Name" => "Redzamais vārds", "Your display name was changed" => "Jūsu redzamais vārds tika mainīts", diff --git a/settings/l10n/mk.php b/settings/l10n/mk.php index aba63bc057..4268f35bbd 100644 --- a/settings/l10n/mk.php +++ b/settings/l10n/mk.php @@ -39,7 +39,6 @@ "Unable to change your password" => "Вашата лозинка неможе да се смени", "Current password" => "Моментална лозинка", "New password" => "Нова лозинка", -"show" => "прикажи", "Change password" => "Смени лозинка", "Email" => "Е-пошта", "Your email address" => "Вашата адреса за е-пошта", diff --git a/settings/l10n/ms_MY.php b/settings/l10n/ms_MY.php index 95c1d01e3b..0af06d65a6 100644 --- a/settings/l10n/ms_MY.php +++ b/settings/l10n/ms_MY.php @@ -18,7 +18,6 @@ "Unable to change your password" => "Gagal mengubah kata laluan anda ", "Current password" => "Kata laluan semasa", "New password" => "Kata laluan baru", -"show" => "Papar", "Change password" => "Ubah kata laluan", "Email" => "Emel", "Your email address" => "Alamat emel anda", diff --git a/settings/l10n/nb_NO.php b/settings/l10n/nb_NO.php index caf0a55186..2969cdc17f 100644 --- a/settings/l10n/nb_NO.php +++ b/settings/l10n/nb_NO.php @@ -35,7 +35,6 @@ "Unable to change your password" => "Kunne ikke endre passordet ditt", "Current password" => "Nåværende passord", "New password" => "Nytt passord", -"show" => "vis", "Change password" => "Endre passord", "Email" => "E-post", "Your email address" => "Din e-postadresse", diff --git a/settings/l10n/nl.php b/settings/l10n/nl.php index 6c256b9388..3bddff8222 100644 --- a/settings/l10n/nl.php +++ b/settings/l10n/nl.php @@ -47,7 +47,6 @@ "Unable to change your password" => "Niet in staat om uw wachtwoord te wijzigen", "Current password" => "Huidig wachtwoord", "New password" => "Nieuw wachtwoord", -"show" => "weergeven", "Change password" => "Wijzig wachtwoord", "Display Name" => "Weergavenaam", "Your display name was changed" => "Uw weergavenaam is gewijzigd", diff --git a/settings/l10n/nn_NO.php b/settings/l10n/nn_NO.php index 8faa2d02ca..1fb1d0763a 100644 --- a/settings/l10n/nn_NO.php +++ b/settings/l10n/nn_NO.php @@ -16,7 +16,6 @@ "Unable to change your password" => "Klarte ikkje å endra passordet", "Current password" => "Passord", "New password" => "Nytt passord", -"show" => "vis", "Change password" => "Endra passord", "Email" => "Epost", "Your email address" => "Din epost addresse", diff --git a/settings/l10n/oc.php b/settings/l10n/oc.php index 9accb3acba..662b16fd16 100644 --- a/settings/l10n/oc.php +++ b/settings/l10n/oc.php @@ -27,7 +27,6 @@ "Unable to change your password" => "Pas possible de cambiar ton senhal", "Current password" => "Senhal en cors", "New password" => "Senhal novèl", -"show" => "mòstra", "Change password" => "Cambia lo senhal", "Email" => "Corrièl", "Your email address" => "Ton adreiça de corrièl", diff --git a/settings/l10n/pl.php b/settings/l10n/pl.php index a06b39e7bd..d3675061c8 100644 --- a/settings/l10n/pl.php +++ b/settings/l10n/pl.php @@ -40,7 +40,6 @@ "Unable to change your password" => "Nie można zmienić hasła", "Current password" => "Bieżące hasło", "New password" => "Nowe hasło", -"show" => "Wyświetlanie", "Change password" => "Zmień hasło", "Email" => "E-mail", "Your email address" => "Adres e-mail użytkownika", diff --git a/settings/l10n/pt_BR.php b/settings/l10n/pt_BR.php index 5a8281446d..4b7f088d39 100644 --- a/settings/l10n/pt_BR.php +++ b/settings/l10n/pt_BR.php @@ -39,7 +39,6 @@ "Unable to change your password" => "Não é possivel alterar a sua senha", "Current password" => "Senha atual", "New password" => "Nova senha", -"show" => "mostrar", "Change password" => "Alterar senha", "Display Name" => "Nome de Exibição", "Email" => "E-mail", diff --git a/settings/l10n/pt_PT.php b/settings/l10n/pt_PT.php index 03982fd5e8..fe0c225d0a 100644 --- a/settings/l10n/pt_PT.php +++ b/settings/l10n/pt_PT.php @@ -1,6 +1,7 @@ "Incapaz de carregar a lista da App Store", "Authentication error" => "Erro de autenticação", +"Unable to change display name" => "Não foi possível alterar o nome", "Group already exists" => "O grupo já existe", "Unable to add group" => "Impossível acrescentar o grupo", "Could not enable app. " => "Não foi possível activar a app.", @@ -46,9 +47,11 @@ "Unable to change your password" => "Não foi possivel alterar a sua palavra-chave", "Current password" => "Palavra-chave actual", "New password" => "Nova palavra-chave", -"show" => "mostrar", "Change password" => "Alterar palavra-chave", "Display Name" => "Nome público", +"Your display name was changed" => "O seu nome foi alterado", +"Unable to change your display name" => "Não foi possível alterar o seu nome", +"Change display name" => "Alterar nome", "Email" => "endereço de email", "Your email address" => "O seu endereço de email", "Fill in an email address to enable password recovery" => "Preencha com o seu endereço de email para ativar a recuperação da palavra-chave", diff --git a/settings/l10n/ro.php b/settings/l10n/ro.php index dcc55a843d..beb1b36118 100644 --- a/settings/l10n/ro.php +++ b/settings/l10n/ro.php @@ -40,7 +40,6 @@ "Unable to change your password" => "Imposibil de-ați schimbat parola", "Current password" => "Parola curentă", "New password" => "Noua parolă", -"show" => "afișează", "Change password" => "Schimbă parola", "Email" => "Email", "Your email address" => "Adresa ta de email", diff --git a/settings/l10n/ru.php b/settings/l10n/ru.php index 4c01951c50..c5b1043419 100644 --- a/settings/l10n/ru.php +++ b/settings/l10n/ru.php @@ -47,7 +47,6 @@ "Unable to change your password" => "Невозможно сменить пароль", "Current password" => "Текущий пароль", "New password" => "Новый пароль", -"show" => "показать", "Change password" => "Сменить пароль", "Display Name" => "Отображаемое имя", "Your display name was changed" => "Ваше отображаемое имя было изменено", diff --git a/settings/l10n/ru_RU.php b/settings/l10n/ru_RU.php index 7dde545e2e..f0183e9712 100644 --- a/settings/l10n/ru_RU.php +++ b/settings/l10n/ru_RU.php @@ -40,7 +40,6 @@ "Unable to change your password" => "Невозможно изменить Ваш пароль", "Current password" => "Текущий пароль", "New password" => "Новый пароль", -"show" => "показать", "Change password" => "Изменить пароль", "Email" => "Электронная почта", "Your email address" => "Адрес Вашей электронной почты", diff --git a/settings/l10n/si_LK.php b/settings/l10n/si_LK.php index b2613290f9..80b37054fe 100644 --- a/settings/l10n/si_LK.php +++ b/settings/l10n/si_LK.php @@ -25,7 +25,6 @@ "Unable to change your password" => "මුර පදය වෙනස් කළ නොහැකි විය", "Current password" => "වත්මන් මුරපදය", "New password" => "නව මුරපදය", -"show" => "ප්‍රදර්ශනය කිරීම", "Change password" => "මුරපදය වෙනස් කිරීම", "Email" => "විද්‍යුත් තැපෑල", "Your email address" => "ඔබගේ විද්‍යුත් තැපෑල", diff --git a/settings/l10n/sk_SK.php b/settings/l10n/sk_SK.php index 162e4d3d01..bed91d1090 100644 --- a/settings/l10n/sk_SK.php +++ b/settings/l10n/sk_SK.php @@ -46,7 +46,6 @@ "Unable to change your password" => "Nie je možné zmeniť vaše heslo", "Current password" => "Aktuálne heslo", "New password" => "Nové heslo", -"show" => "zobraziť", "Change password" => "Zmeniť heslo", "Display Name" => "Zobrazované meno", "Email" => "Email", diff --git a/settings/l10n/sl.php b/settings/l10n/sl.php index 8f4fb9435e..f91615c9ab 100644 --- a/settings/l10n/sl.php +++ b/settings/l10n/sl.php @@ -40,7 +40,6 @@ "Unable to change your password" => "Gesla ni mogoče spremeniti.", "Current password" => "Trenutno geslo", "New password" => "Novo geslo", -"show" => "pokaži", "Change password" => "Spremeni geslo", "Email" => "Elektronska pošta", "Your email address" => "Vaš elektronski poštni naslov", diff --git a/settings/l10n/sr.php b/settings/l10n/sr.php index 1b12a0178d..d26d63eec4 100644 --- a/settings/l10n/sr.php +++ b/settings/l10n/sr.php @@ -31,7 +31,6 @@ "Unable to change your password" => "Не могу да изменим вашу лозинку", "Current password" => "Тренутна лозинка", "New password" => "Нова лозинка", -"show" => "прикажи", "Change password" => "Измени лозинку", "Email" => "Е-пошта", "Your email address" => "Ваша адреса е-поште", diff --git a/settings/l10n/sr@latin.php b/settings/l10n/sr@latin.php index 942594eb02..0dadb667c7 100644 --- a/settings/l10n/sr@latin.php +++ b/settings/l10n/sr@latin.php @@ -8,7 +8,6 @@ "Unable to change your password" => "Ne mogu da izmenim vašu lozinku", "Current password" => "Trenutna lozinka", "New password" => "Nova lozinka", -"show" => "prikaži", "Change password" => "Izmeni lozinku", "Email" => "E-mail", "Language" => "Jezik", diff --git a/settings/l10n/sv.php b/settings/l10n/sv.php index fb8c7854e9..801e9a018f 100644 --- a/settings/l10n/sv.php +++ b/settings/l10n/sv.php @@ -46,7 +46,6 @@ "Unable to change your password" => "Kunde inte ändra ditt lösenord", "Current password" => "Nuvarande lösenord", "New password" => "Nytt lösenord", -"show" => "visa", "Change password" => "Ändra lösenord", "Display Name" => "Visat namn", "Email" => "E-post", diff --git a/settings/l10n/ta_LK.php b/settings/l10n/ta_LK.php index 5e94df0dfb..c834626bd8 100644 --- a/settings/l10n/ta_LK.php +++ b/settings/l10n/ta_LK.php @@ -30,7 +30,6 @@ "Unable to change your password" => "உங்களுடைய கடவுச்சொல்லை மாற்றமுடியாது", "Current password" => "தற்போதைய கடவுச்சொல்", "New password" => "புதிய கடவுச்சொல்", -"show" => "காட்டு", "Change password" => "கடவுச்சொல்லை மாற்றுக", "Email" => "மின்னஞ்சல்", "Your email address" => "உங்களுடைய மின்னஞ்சல் முகவரி", diff --git a/settings/l10n/th_TH.php b/settings/l10n/th_TH.php index 309dbc2657..324680c187 100644 --- a/settings/l10n/th_TH.php +++ b/settings/l10n/th_TH.php @@ -46,7 +46,6 @@ "Unable to change your password" => "ไม่สามารถเปลี่ยนรหัสผ่านของคุณได้", "Current password" => "รหัสผ่านปัจจุบัน", "New password" => "รหัสผ่านใหม่", -"show" => "แสดง", "Change password" => "เปลี่ยนรหัสผ่าน", "Display Name" => "ชื่อที่ต้องการแสดง", "Email" => "อีเมล์", diff --git a/settings/l10n/tr.php b/settings/l10n/tr.php index db55491612..8c0b98bf99 100644 --- a/settings/l10n/tr.php +++ b/settings/l10n/tr.php @@ -36,7 +36,6 @@ "Unable to change your password" => "Parolanız değiştirilemiyor", "Current password" => "Mevcut parola", "New password" => "Yeni parola", -"show" => "göster", "Change password" => "Parola değiştir", "Email" => "Eposta", "Your email address" => "Eposta adresiniz", diff --git a/settings/l10n/uk.php b/settings/l10n/uk.php index 7186b2684e..ff882df18e 100644 --- a/settings/l10n/uk.php +++ b/settings/l10n/uk.php @@ -47,7 +47,6 @@ "Unable to change your password" => "Не вдалося змінити Ваш пароль", "Current password" => "Поточний пароль", "New password" => "Новий пароль", -"show" => "показати", "Change password" => "Змінити пароль", "Display Name" => "Показати Ім'я", "Your display name was changed" => "Ваше ім'я було змінене", diff --git a/settings/l10n/vi.php b/settings/l10n/vi.php index 1b967b27b0..f660b078bf 100644 --- a/settings/l10n/vi.php +++ b/settings/l10n/vi.php @@ -47,7 +47,6 @@ "Unable to change your password" => "Không thể đổi mật khẩu", "Current password" => "Mật khẩu cũ", "New password" => "Mật khẩu mới ", -"show" => "Hiện", "Change password" => "Đổi mật khẩu", "Display Name" => "Tên hiển thị", "Your display name was changed" => "Tên hiển thị của bạn đã được thay đổi", diff --git a/settings/l10n/zh_CN.GB2312.php b/settings/l10n/zh_CN.GB2312.php index c7d73ae2de..95a79e467c 100644 --- a/settings/l10n/zh_CN.GB2312.php +++ b/settings/l10n/zh_CN.GB2312.php @@ -29,7 +29,6 @@ "Unable to change your password" => "不能改变你的密码", "Current password" => "现在的密码", "New password" => "新密码", -"show" => "展示", "Change password" => "改变密码", "Email" => "Email", "Your email address" => "你的email地址", diff --git a/settings/l10n/zh_CN.php b/settings/l10n/zh_CN.php index 40c571a876..df0e11dd15 100644 --- a/settings/l10n/zh_CN.php +++ b/settings/l10n/zh_CN.php @@ -40,7 +40,6 @@ "Unable to change your password" => "无法修改密码", "Current password" => "当前密码", "New password" => "新密码", -"show" => "显示", "Change password" => "修改密码", "Email" => "电子邮件", "Your email address" => "您的电子邮件", diff --git a/settings/l10n/zh_TW.php b/settings/l10n/zh_TW.php index ecff21604f..b1037f0849 100644 --- a/settings/l10n/zh_TW.php +++ b/settings/l10n/zh_TW.php @@ -1,6 +1,7 @@ "無法從 App Store 讀取清單", "Authentication error" => "認證錯誤", +"Unable to change display name" => "無法更改顯示名稱", "Group already exists" => "群組已存在", "Unable to add group" => "群組增加失敗", "Could not enable app. " => "未能啟動此app", @@ -46,9 +47,11 @@ "Unable to change your password" => "無法變更你的密碼", "Current password" => "目前密碼", "New password" => "新密碼", -"show" => "顯示", "Change password" => "變更密碼", "Display Name" => "顯示名稱", +"Your display name was changed" => "已更改顯示名稱", +"Unable to change your display name" => "無法更改您的顯示名稱", +"Change display name" => "更改顯示名稱", "Email" => "電子郵件", "Your email address" => "你的電子郵件信箱", "Fill in an email address to enable password recovery" => "請填入電子郵件信箱以便回復密碼", From 8e3b8c7f47ab12e1612d3fa025e6b9eb7f5ffdb3 Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Sun, 10 Feb 2013 19:09:58 -0500 Subject: [PATCH 137/719] Proper fix for shared links --- apps/files_sharing/lib/sharedstorage.php | 2 +- apps/files_sharing/public.php | 45 +++++++++++++----------- lib/files/filesystem.php | 4 +-- lib/util.php | 2 +- 4 files changed, 29 insertions(+), 24 deletions(-) diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index ea28ca69b9..65812b7e2f 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -390,7 +390,7 @@ class Shared extends \OC\Files\Storage\Common { } public static function setup($options) { - if (\OCP\Share::getItemsSharedWith('file')) { + if (!\OCP\User::isLoggedIn() || \OCP\User::getUser() != $options['user'] || \OCP\Share::getItemsSharedWith('file')) { $user_dir = $options['user_dir']; \OC\Files\Filesystem::mount('\OC\Files\Storage\Shared', array('sharedFolder' => '/Shared'), $user_dir.'/Shared/'); } diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index 29b7b3dee7..47e074edb8 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -11,14 +11,26 @@ if (isset($_GET['t'])) { $type = $linkItem['item_type']; $fileSource = $linkItem['file_source']; $shareOwner = $linkItem['uid_owner']; - if (OCP\User::userExists($shareOwner) && $fileSource != -1) { - OC_Util::setupFS($shareOwner); - $path = $linkItem['file_target']; + $fileOwner = null; + $path = null; + if (isset($linkItem['parent'])) { + $parent = $linkItem['parent']; + while (isset($parent)) { + $query = \OC_DB::prepare('SELECT `parent`, `uid_owner` FROM `*PREFIX*share` WHERE `id` = ?', 1); + $item = $query->execute(array($parent))->fetchRow(); + if (isset($item['parent'])) { + $parent = $item['parent']; + } else { + $fileOwner = $item['uid_owner']; + break; + } + } } else { - header('HTTP/1.0 404 Not Found'); - $tmpl = new OCP\Template('', '404', 'guest'); - $tmpl->printPage(); - exit(); + $fileOwner = $shareOwner; + } + if (isset($fileOwner)) { + OC_Util::setupFS($fileOwner); + $path = \OC\Files\Filesystem::getPath($linkItem['file_source']); } } } else { @@ -55,7 +67,7 @@ if (isset($_GET['t'])) { } } -if ($linkItem) { +if (isset($path)) { if (!isset($linkItem['item_type'])) { OCP\Util::writeLog('share', 'No item type set for share id: ' . $linkItem['id'], \OCP\Util::ERROR); header('HTTP/1.0 404 Not Found'); @@ -123,20 +135,12 @@ if ($linkItem) { $file = basename($path); // Download the file if (isset($_GET['download'])) { - if (isset($_GET['path']) && $_GET['path'] !== '') { - if (isset($_GET['files'])) { // download selected files - OC_Files::get($path, $_GET['files'], $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); - } else { - if (isset($_GET['path']) && $_GET['path'] != '') { // download a file from a shared directory - OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); - } else { // download the whole shared directory - OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); - } - } - } else { // download a single shared file + if (isset($_GET['files'])) { // download selected files + OC_Files::get($dir, $_GET['files'], $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); + } else { OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); } - + exit(); } else { OCP\Util::addStyle('files_sharing', 'public'); OCP\Util::addScript('files_sharing', 'public'); @@ -147,6 +151,7 @@ if ($linkItem) { $tmpl->assign('dir', $dir); $tmpl->assign('filename', $file); $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path)); + $tmpl->assign('fileTarget', basename($linkItem['file_target'])); $urlLinkIdentifiers= (isset($token)?'&t='.$token:'') .(isset($_GET['dir'])?'&dir='.$_GET['dir']:'') .(isset($_GET['file'])?'&file='.$_GET['file']:''); diff --git a/lib/files/filesystem.php b/lib/files/filesystem.php index 71bf3d8708..a0c3c4b9b7 100644 --- a/lib/files/filesystem.php +++ b/lib/files/filesystem.php @@ -190,14 +190,14 @@ class Filesystem { } } - static public function init($root) { + static public function init($user, $root) { if (self::$defaultInstance) { return false; } self::$defaultInstance = new View($root); //load custom mount config - self::initMountPoints(); + self::initMountPoints($user); self::$loaded = true; diff --git a/lib/util.php b/lib/util.php index a5fe4cb175..54a3f63404 100755 --- a/lib/util.php +++ b/lib/util.php @@ -51,7 +51,7 @@ class OC_Util { mkdir( $userdirectory, 0755, true ); } //jail the user into his "home" directory - \OC\Files\Filesystem::init($user_dir); + \OC\Files\Filesystem::init($user, $user_dir); $quotaProxy=new OC_FileProxy_Quota(); $fileOperationProxy = new OC_FileProxy_FileOperations(); From 0d3c58d6b6bb9a3070294de398542b6c453a6190 Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Sun, 10 Feb 2013 19:13:13 -0500 Subject: [PATCH 138/719] Replace filename key with fileTarget in template --- apps/files_sharing/templates/public.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php index 71fca09ed6..7776fd63b3 100644 --- a/apps/files_sharing/templates/public.php +++ b/apps/files_sharing/templates/public.php @@ -6,9 +6,9 @@ ownCloud
    - t('%s shared the folder %s with you', array($_['displayName'], $_['filename'])) ?> + t('%s shared the folder %s with you', array($_['displayName'], $_['fileTarget'])) ?> - t('%s shared the file %s with you', array($_['displayName'], $_['filename'])) ?> + t('%s shared the file %s with you', array($_['displayName'], $_['fileTarget'])) ?> Download" />t('Download')?> @@ -26,7 +26,7 @@
    • - t('No preview available for').' '.$_['filename']; ?>
      + t('No preview available for').' '.$_['fileTarget']; ?>
      Download" />t('Download')?>
    From 56df48b40f0eb69dff014ef1cc43a2ef9c095506 Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Sun, 10 Feb 2013 19:14:20 -0500 Subject: [PATCH 139/719] Remove additional old compatibility code --- apps/files_sharing/public.php | 35 +---------------------------------- 1 file changed, 1 insertion(+), 34 deletions(-) diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index 47e074edb8..dfaf4c00a6 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -33,40 +33,7 @@ if (isset($_GET['t'])) { $path = \OC\Files\Filesystem::getPath($linkItem['file_source']); } } -} else { - if (isset($_GET['file']) || isset($_GET['dir'])) { - OCP\Util::writeLog('share', 'Missing token, trying fallback file/dir links', \OCP\Util::DEBUG); - if (isset($_GET['dir'])) { - $type = 'folder'; - $path = $_GET['dir']; - if (strlen($path) > 1 and substr($path, -1, 1) === '/') { - $path = substr($path, 0, -1); - } - $baseDir = $path; - $dir = $baseDir; - } else { - $type = 'file'; - $path = $_GET['file']; - if (strlen($path) > 1 and substr($path, -1, 1) === '/') { - $path = substr($path, 0, -1); - } - } - $shareOwner = substr($path, 1, strpos($path, '/', 1) - 1); - - if (OCP\User::userExists($shareOwner)) { - OC_Util::setupFS($shareOwner); - $fileSource = getId($path); - if ($fileSource != -1) { - $linkItem = OCP\Share::getItemSharedWithByLink($type, $fileSource, $shareOwner); - $pathAndUser['path'] = $path; - $path_parts = explode('/', $path, 5); - $pathAndUser['user'] = $path_parts[1]; - $fileOwner = $path_parts[1]; - } - } - } -} - +} if (isset($path)) { if (!isset($linkItem['item_type'])) { OCP\Util::writeLog('share', 'No item type set for share id: ' . $linkItem['id'], \OCP\Util::ERROR); From a6bd086867a616216fc53b81ed7d41a9cb816c2e Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Sun, 10 Feb 2013 20:01:25 -0500 Subject: [PATCH 140/719] Set permissions to read only --- apps/files_sharing/public.php | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index dfaf4c00a6..2862ad510e 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -142,6 +142,7 @@ if (isset($path)) { } } $i['directory'] = $dir; + $i['permissions'] = OCP\PERMISSION_READ; $files[] = $i; } // Make breadcrumb From d2332f60f31600641189f03bdecaa82a0f889da5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Sun, 10 Feb 2013 11:05:43 +0100 Subject: [PATCH 141/719] add a custom header clients can use to skip a n additional propset request --- lib/connector/sabre/file.php | 6 ++++++ lib/request.php | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php index 521c5f0571..63c581f30c 100644 --- a/lib/connector/sabre/file.php +++ b/lib/connector/sabre/file.php @@ -52,6 +52,12 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D // rename to correct path \OC\Files\Filesystem::rename($partpath, $this->path); + + //allow sync clients to send the mtime along in a header + $mtime = OC_Request::hasModificationTime(); + if ($mtime !== false) { + \OC\Files\Filesystem::touch($this->path,$mtime); + } return OC_Connector_Sabre_Node::getETagPropertyForPath($this->path); } diff --git a/lib/request.php b/lib/request.php index 1661a1406c..3c668b02c5 100755 --- a/lib/request.php +++ b/lib/request.php @@ -149,4 +149,16 @@ class OC_Request { return 'gzip'; return false; } + + /** + * @brief Check if the requester sent along an mtime + * @returns false or an mtime + */ + static public function hasModificationTime () { + if (isset($_SERVER['HTTP_X_OC_MTIME'])) { + return $_SERVER['HTTP_X_OC_MTIME']; + } else { + return false; + } + } } From 2644003bf1f82eb812981d27237ec0ce4e026604 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Sun, 10 Feb 2013 11:44:34 +0100 Subject: [PATCH 142/719] send back 'X-OC-MTime: accepted' when X-OC-MTime was applied --- lib/connector/sabre/file.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php index 63c581f30c..279615b923 100644 --- a/lib/connector/sabre/file.php +++ b/lib/connector/sabre/file.php @@ -56,7 +56,9 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D //allow sync clients to send the mtime along in a header $mtime = OC_Request::hasModificationTime(); if ($mtime !== false) { - \OC\Files\Filesystem::touch($this->path,$mtime); + if(\OC\Files\Filesystem::touch($this->path, $mtime)) { + header('X-OC-MTime: accepted'); + } } return OC_Connector_Sabre_Node::getETagPropertyForPath($this->path); From 72a2075b1c25409a2bccde62809eff76812b9a25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Mon, 11 Feb 2013 09:43:26 +0100 Subject: [PATCH 143/719] readd renaming and mtime handling to new directory nodes --- lib/connector/sabre/directory.php | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php index c4062170d5..d8d74b922a 100644 --- a/lib/connector/sabre/directory.php +++ b/lib/connector/sabre/directory.php @@ -62,7 +62,23 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa } } else { $newPath = $this->path . '/' . $name; - \OC\Files\Filesystem::file_put_contents($newPath, $data); + + // mark file as partial while uploading (ignored by the scanner) + $partpath = $newPath . '.part'; + + \OC\Files\Filesystem::file_put_contents($partpath, $data); + + // rename to correct path + \OC\Files\Filesystem::rename($partpath, $newPath); + + // allow sync clients to send the mtime along in a header + $mtime = OC_Request::hasModificationTime(); + if ($mtime !== false) { + if(\OC\Files\Filesystem::touch($newPath, $mtime)) { + header('X-OC-MTime: accepted'); + } + } + return OC_Connector_Sabre_Node::getETagPropertyForPath($newPath); } From 806522d0073cecb2c72ec41f7ae5009024fb7512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Sun, 10 Feb 2013 16:18:52 +0100 Subject: [PATCH 144/719] also rename file when it has not been present before --- lib/connector/sabre/directory.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php index d8d74b922a..6465dcbac3 100644 --- a/lib/connector/sabre/directory.php +++ b/lib/connector/sabre/directory.php @@ -65,9 +65,9 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa // mark file as partial while uploading (ignored by the scanner) $partpath = $newPath . '.part'; - + \OC\Files\Filesystem::file_put_contents($partpath, $data); - + // rename to correct path \OC\Files\Filesystem::rename($partpath, $newPath); From 15ab2fd52aa3d2971682406a0add82ba453f82f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Sun, 10 Feb 2013 17:09:31 +0100 Subject: [PATCH 145/719] check Content-Length to detect aborted uploads --- lib/connector/sabre/directory.php | 10 ++++++++++ lib/connector/sabre/file.php | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php index 6465dcbac3..a5676d656e 100644 --- a/lib/connector/sabre/directory.php +++ b/lib/connector/sabre/directory.php @@ -68,6 +68,16 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa \OC\Files\Filesystem::file_put_contents($partpath, $data); + //detect aborted upload + if (isset($_SERVER['CONTENT_LENGTH']) + && \OC\Files\Filesystem::filesize($partpath) != $_SERVER['CONTENT_LENGTH']) + { + throw new Sabre_DAV_Exception_BadRequest( + 'expected filesize ' . $_SERVER['CONTENT_LENGTH']. + ' got ' . \OC\Files\Filesystem::filesize($partpath) + ); + } + // rename to correct path \OC\Files\Filesystem::rename($partpath, $newPath); diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php index 279615b923..ab342fa2c6 100644 --- a/lib/connector/sabre/file.php +++ b/lib/connector/sabre/file.php @@ -50,6 +50,15 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D \OC\Files\Filesystem::file_put_contents($partpath, $data); + //detect aborted upload + if (isset($_SERVER['CONTENT_LENGTH']) + && \OC\Files\Filesystem::filesize($partpath) != $_SERVER['CONTENT_LENGTH']) + { + throw new Sabre_DAV_Exception_BadRequest( + 'expected filesize ' . $_SERVER['CONTENT_LENGTH']. + ' got ' . \OC\Files\Filesystem::filesize($partpath) + ); + } // rename to correct path \OC\Files\Filesystem::rename($partpath, $this->path); From 2cb2991c049387290d6ba71a08381aeac4de2fe3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Sun, 10 Feb 2013 18:17:10 +0100 Subject: [PATCH 146/719] delete partial file when file upload is aborted --- lib/connector/sabre/directory.php | 15 ++++++++------- lib/connector/sabre/file.php | 16 +++++++++------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php index a5676d656e..f924511535 100644 --- a/lib/connector/sabre/directory.php +++ b/lib/connector/sabre/directory.php @@ -69,13 +69,14 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa \OC\Files\Filesystem::file_put_contents($partpath, $data); //detect aborted upload - if (isset($_SERVER['CONTENT_LENGTH']) - && \OC\Files\Filesystem::filesize($partpath) != $_SERVER['CONTENT_LENGTH']) - { - throw new Sabre_DAV_Exception_BadRequest( - 'expected filesize ' . $_SERVER['CONTENT_LENGTH']. - ' got ' . \OC\Files\Filesystem::filesize($partpath) - ); + if (isset($_SERVER['CONTENT_LENGTH'])) { + $expected = $_SERVER['CONTENT_LENGTH']; + $actual = \OC\Files\Filesystem::filesize($partpath); + if ($actual != $expected) { + \OC\Files\Filesystem::unlink($partpath); + throw new Sabre_DAV_Exception_BadRequest( + 'expected filesize ' . $expected . ' got ' . $actual); + } } // rename to correct path diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php index ab342fa2c6..e5436f0ad1 100644 --- a/lib/connector/sabre/file.php +++ b/lib/connector/sabre/file.php @@ -51,14 +51,16 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D \OC\Files\Filesystem::file_put_contents($partpath, $data); //detect aborted upload - if (isset($_SERVER['CONTENT_LENGTH']) - && \OC\Files\Filesystem::filesize($partpath) != $_SERVER['CONTENT_LENGTH']) - { - throw new Sabre_DAV_Exception_BadRequest( - 'expected filesize ' . $_SERVER['CONTENT_LENGTH']. - ' got ' . \OC\Files\Filesystem::filesize($partpath) - ); + if (isset($_SERVER['CONTENT_LENGTH'])) { + $expected = $_SERVER['CONTENT_LENGTH']; + $actual = \OC\Files\Filesystem::filesize($partpath); + if ($actual != $expected) { + \OC\Files\Filesystem::unlink($partpath); + throw new Sabre_DAV_Exception_BadRequest( + 'expected filesize ' . $expected . ' got ' . $actual); + } } + // rename to correct path \OC\Files\Filesystem::rename($partpath, $this->path); From d7d9e2a15a4039d6fbb272a63b17ee9cbd01bf51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Mon, 11 Feb 2013 10:20:31 +0100 Subject: [PATCH 147/719] fix positioning of password label, add autofocus to password field --- apps/files_sharing/templates/authenticate.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/files_sharing/templates/authenticate.php b/apps/files_sharing/templates/authenticate.php index 9695caebf1..6bce6857ac 100644 --- a/apps/files_sharing/templates/authenticate.php +++ b/apps/files_sharing/templates/authenticate.php @@ -1,8 +1,8 @@
    -

    +

    - +

    From 99f41de7de4e96f5d490cfc8f3b962171d201587 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Mon, 11 Feb 2013 10:31:01 +0100 Subject: [PATCH 148/719] only check content lenght on PUT to make litmus happy --- lib/connector/sabre/directory.php | 16 +++++++++------- lib/connector/sabre/file.php | 16 +++++++++------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php index f924511535..e29059d039 100644 --- a/lib/connector/sabre/directory.php +++ b/lib/connector/sabre/directory.php @@ -69,13 +69,15 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa \OC\Files\Filesystem::file_put_contents($partpath, $data); //detect aborted upload - if (isset($_SERVER['CONTENT_LENGTH'])) { - $expected = $_SERVER['CONTENT_LENGTH']; - $actual = \OC\Files\Filesystem::filesize($partpath); - if ($actual != $expected) { - \OC\Files\Filesystem::unlink($partpath); - throw new Sabre_DAV_Exception_BadRequest( - 'expected filesize ' . $expected . ' got ' . $actual); + if (isset ($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'PUT' ) { + if (isset($_SERVER['CONTENT_LENGTH'])) { + $expected = $_SERVER['CONTENT_LENGTH']; + $actual = \OC\Files\Filesystem::filesize($partpath); + if ($actual != $expected) { + \OC\Files\Filesystem::unlink($partpath); + throw new Sabre_DAV_Exception_BadRequest( + 'expected filesize ' . $expected . ' got ' . $actual); + } } } diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php index e5436f0ad1..61165d9956 100644 --- a/lib/connector/sabre/file.php +++ b/lib/connector/sabre/file.php @@ -51,13 +51,15 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D \OC\Files\Filesystem::file_put_contents($partpath, $data); //detect aborted upload - if (isset($_SERVER['CONTENT_LENGTH'])) { - $expected = $_SERVER['CONTENT_LENGTH']; - $actual = \OC\Files\Filesystem::filesize($partpath); - if ($actual != $expected) { - \OC\Files\Filesystem::unlink($partpath); - throw new Sabre_DAV_Exception_BadRequest( - 'expected filesize ' . $expected . ' got ' . $actual); + if (isset ($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'PUT' ) { + if (isset($_SERVER['CONTENT_LENGTH'])) { + $expected = $_SERVER['CONTENT_LENGTH']; + $actual = \OC\Files\Filesystem::filesize($partpath); + if ($actual != $expected) { + \OC\Files\Filesystem::unlink($partpath); + throw new Sabre_DAV_Exception_BadRequest( + 'expected filesize ' . $expected . ' got ' . $actual); + } } } From ad360296b940c20b57da9316b079497e0c1c1256 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 11 Feb 2013 11:06:09 +0100 Subject: [PATCH 149/719] Update tests and apps to the new \OC\Files\Filesystem::init signature --- apps/files_encryption/hooks/hooks.php | 2 +- lib/filesystem.php | 4 ++-- lib/ocs/cloud.php | 2 +- tests/lib/files/cache/updater.php | 2 +- tests/lib/files/filesystem.php | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/hooks/hooks.php index 7e4f677ce9..2731d5a92f 100644 --- a/apps/files_encryption/hooks/hooks.php +++ b/apps/files_encryption/hooks/hooks.php @@ -40,7 +40,7 @@ class Hooks { // Manually initialise Filesystem{} singleton with correct // fake root path, in order to avoid fatal webdav errors - \OC\Files\Filesystem::init( $params['uid'] . '/' . 'files' . '/' ); + \OC\Files\Filesystem::init( $params['uid'], $params['uid'] . '/' . 'files' . '/' ); $view = new \OC_FilesystemView( '/' ); diff --git a/lib/filesystem.php b/lib/filesystem.php index 57cca90230..e86bea6bff 100644 --- a/lib/filesystem.php +++ b/lib/filesystem.php @@ -58,8 +58,8 @@ class OC_Filesystem { /** * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem */ - static public function init($root) { - return \OC\Files\Filesystem::init($root); + static public function init($user, $root) { + return \OC\Files\Filesystem::init($user, $root); } /** diff --git a/lib/ocs/cloud.php b/lib/ocs/cloud.php index 179ed8f310..820d24a8e0 100644 --- a/lib/ocs/cloud.php +++ b/lib/ocs/cloud.php @@ -45,7 +45,7 @@ class OC_OCS_Cloud { if(OC_User::userExists($parameters['user'])) { // calculate the disc space $userDir = '/'.$parameters['user'].'/files'; - \OC\Files\Filesystem::init($useDir); + \OC\Files\Filesystem::init($parameters['user'], $userDir); $rootInfo = \OC\Files\Filesystem::getFileInfo(''); $sharedInfo = \OC\Files\Filesystem::getFileInfo('/Shared'); $used = $rootInfo['size'] - $sharedInfo['size']; diff --git a/tests/lib/files/cache/updater.php b/tests/lib/files/cache/updater.php index b83dd0c26e..7a79f45a20 100644 --- a/tests/lib/files/cache/updater.php +++ b/tests/lib/files/cache/updater.php @@ -45,7 +45,7 @@ class Updater extends \PHPUnit_Framework_TestCase { if (!self::$user) { if (!\OC\Files\Filesystem::getView()) { self::$user = uniqid(); - \OC\Files\Filesystem::init('/' . self::$user . '/files'); + \OC\Files\Filesystem::init(self::$user, '/' . self::$user . '/files'); } else { self::$user = \OC_User::getUser(); } diff --git a/tests/lib/files/filesystem.php b/tests/lib/files/filesystem.php index fd116af2d2..6ce45e6178 100644 --- a/tests/lib/files/filesystem.php +++ b/tests/lib/files/filesystem.php @@ -82,7 +82,7 @@ class Filesystem extends \PHPUnit_Framework_TestCase { $user = \OC_User::getUser(); }else{ $user=uniqid(); - \OC\Files\Filesystem::init('/'.$user.'/files'); + \OC\Files\Filesystem::init($user, '/'.$user.'/files'); } \OC_Hook::clear('OC_Filesystem'); \OC_Hook::connect('OC_Filesystem', 'post_write', $this, 'dummyHook'); From d0a005ea979f7f6ddc6ed28b8b346878ce3f41b9 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 11 Feb 2013 11:20:51 +0100 Subject: [PATCH 150/719] Sharing: fix position of file list in public link view of folder --- apps/files_sharing/css/public.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css index 492014344f..110a0028a0 100644 --- a/apps/files_sharing/css/public.css +++ b/apps/files_sharing/css/public.css @@ -34,9 +34,8 @@ body { background:#eee; border-bottom:1px solid #f8f8f8; min-height:30em; - padding-top:2em; text-align:center; - margin:50px auto; + margin:45px auto; } #noPreview { @@ -60,6 +59,7 @@ p.info a { #imgframe { height:75%; padding-bottom:2em; + padding-top:2em; width:80%; margin:0 auto; } @@ -67,4 +67,4 @@ p.info a { #imgframe img { max-height:100%; max-width:100%; -} \ No newline at end of file +} From 762688762f0b4536087d8d6e8bd8d1c9562f00d1 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 11 Feb 2013 11:38:52 +0100 Subject: [PATCH 151/719] Share: fix downloading files from a public shared folder --- apps/files_sharing/public.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index 2862ad510e..04dcbd680e 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -92,7 +92,7 @@ if (isset($path)) { } } $basePath = $path; - if (isset($_GET['path']) && \OC\Files\Filesystem::isReadable($_GET['path'])) { + if (isset($_GET['path']) && \OC\Files\Filesystem::isReadable($basePath . $_GET['path'])) { $getPath = \OC\Files\Filesystem::normalizePath($_GET['path']); $path .= $getPath; } else { From 7842b416d1c85a723368148ea9cbe6d34378af69 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 11 Feb 2013 11:44:18 +0100 Subject: [PATCH 152/719] Share: fix breadcrumbs for public shared folder --- apps/files_sharing/public.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index 04dcbd680e..4b53609741 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -148,7 +148,7 @@ if (isset($path)) { // Make breadcrumb $breadcrumb = array(); $pathtohere = ''; - foreach (explode('/', $dir) as $i) { + foreach (explode('/', $getPath) as $i) { if ($i != '') { $pathtohere .= '/' . $i; $breadcrumb[] = array('dir' => $pathtohere, 'name' => $i); From bbf672f4532b6c94354256e71a324830829c1dea Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 11 Feb 2013 11:48:49 +0100 Subject: [PATCH 153/719] Share: fix nested subfolders in public shared folders --- apps/files_sharing/public.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index 4b53609741..ac889cd2dc 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -115,7 +115,6 @@ if (isset($path)) { $tmpl = new OCP\Template('files_sharing', 'public', 'base'); $tmpl->assign('uidOwner', $shareOwner); $tmpl->assign('displayName', \OCP\User::getDisplayName($shareOwner)); - $tmpl->assign('dir', $dir); $tmpl->assign('filename', $file); $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path)); $tmpl->assign('fileTarget', basename($linkItem['file_target'])); @@ -124,6 +123,8 @@ if (isset($path)) { .(isset($_GET['file'])?'&file='.$_GET['file']:''); // Show file list if (\OC\Files\Filesystem::is_dir($path)) { + $tmpl->assign('dir', $getPath); + OCP\Util::addStyle('files', 'files'); OCP\Util::addScript('files', 'files'); OCP\Util::addScript('files', 'filelist'); @@ -141,7 +142,7 @@ if (isset($path)) { $i['extension'] = ''; } } - $i['directory'] = $dir; + $i['directory'] = $getPath; $i['permissions'] = OCP\PERMISSION_READ; $files[] = $i; } @@ -165,7 +166,7 @@ if (isset($path)) { $folder = new OCP\Template('files', 'index', ''); $folder->assign('fileList', $list->fetchPage(), false); $folder->assign('breadcrumb', $breadcrumbNav->fetchPage(), false); - $folder->assign('dir', basename($dir)); + $folder->assign('dir', $getPath); $folder->assign('isCreatable', false); $folder->assign('permissions', 0); $folder->assign('files', $files); @@ -177,6 +178,8 @@ if (isset($path)) { $tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=' . urlencode($getPath)); } else { + $tmpl->assign('dir', $dir); + // Show file preview if viewer is available if ($type == 'file') { $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download'); From 7fa9181a2697d343fce30124792fae664c9c0510 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 11 Feb 2013 11:50:41 +0100 Subject: [PATCH 154/719] Share: fix sorting of files in public shared folder --- apps/files_sharing/public.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index ac889cd2dc..b478ac8a4a 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -3,6 +3,16 @@ $RUNTIME_NOSETUPFS = true; // Load other apps for file previews OC_App::loadApps(); +function fileCmp($a, $b) { + if ($a['type'] == 'dir' and $b['type'] != 'dir') { + return -1; + } elseif ($a['type'] != 'dir' and $b['type'] == 'dir') { + return 1; + } else { + return strnatcasecmp($a['name'], $b['name']); + } +} + if (isset($_GET['t'])) { $token = $_GET['t']; $linkItem = OCP\Share::getShareByToken($token); @@ -146,6 +156,8 @@ if (isset($path)) { $i['permissions'] = OCP\PERMISSION_READ; $files[] = $i; } + usort($files, "fileCmp"); + // Make breadcrumb $breadcrumb = array(); $pathtohere = ''; From a1db280a464f3fd92b4ed19e676c4b3b013f88c8 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 11 Feb 2013 11:54:44 +0100 Subject: [PATCH 155/719] Share: fix downloading selected files from public shared folder --- apps/files_sharing/public.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index b478ac8a4a..38d598f778 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -113,7 +113,7 @@ if (isset($path)) { // Download the file if (isset($_GET['download'])) { if (isset($_GET['files'])) { // download selected files - OC_Files::get($dir, $_GET['files'], $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); + OC_Files::get($path, $_GET['files'], $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); } else { OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); } From a7bfee576b3bb797d422942c14604c2443692bbe Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 11 Feb 2013 11:58:55 +0100 Subject: [PATCH 156/719] Fix breadcrumbs overlapping into the content, preventing the select all checkbox from being clickable in subfolders --- core/css/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/css/styles.css b/core/css/styles.css index d18c782c08..f6bf652f07 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -325,7 +325,7 @@ a.bookmarklet { background-color:#ddd; border:1px solid #ccc; padding:5px;paddin .help-iframe {width: 100%; height: 100%; margin: 0;padding: 0; border: 0; overflow: auto;} /* ---- BREADCRUMB ---- */ -div.crumb { float:left; display:block; background:url('../img/breadcrumb.svg') no-repeat right 0; padding:.75em 1.5em 0 1em; height:2.9em; } +div.crumb { float:left; display:block; background:url('../img/breadcrumb.svg') no-repeat right 0; padding:.75em 1.5em 0 1em; height:2.9em; -moz-box-sizing:border-box; box-sizing:border-box; } div.crumb:first-child { padding:10px 20px 10px 5px; } div.crumb.last { font-weight:bold; background:none; padding-right:10px; } div.crumb a{ padding: 0.9em 0 0.7em 0; } From 25b5b39e7aaf2931e1c726982bf6c82951f0ce3b Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 11 Feb 2013 12:23:53 +0100 Subject: [PATCH 157/719] Files: fix width of table header when files are selected --- apps/files/css/files.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/files/css/files.css b/apps/files/css/files.css index 620fe8606b..1dae49c1cf 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -25,7 +25,7 @@ #trash { height:17px; margin: 0 1em; z-index:1010; float: right; } -#upload { +#upload { height:27px; padding:0; margin-left:0.2em; overflow:hidden; } #upload a { @@ -74,8 +74,9 @@ table th#headerDate, table td.date { min-width:11em; padding:0 .1em 0 1em; text- /* Multiselect bar */ table.multiselect { top:63px; } -table.multiselect thead { position:fixed; top:82px; z-index:1; } +table.multiselect thead { position:fixed; top:82px; z-index:1; -moz-box-sizing: border-box; box-sizing: border-box; left: 0; padding-left: 64px; width:100%; } table.multiselect thead th { background:rgba(230,230,230,.8); color:#000; font-weight:bold; border-bottom:0; } +table.multiselect #headerName { width: 100%; } table td.selection, table th.selection, table td.fileaction { width:2em; text-align:center; } table td.filename a.name { display:block; height:1.5em; vertical-align:middle; margin-left:3em; } table tr[data-type="dir"] td.filename a.name span.nametext {font-weight:bold; } From d0d6d973a9672e2da874e79836a6cc78cd73892d Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 11 Feb 2013 12:35:39 +0100 Subject: [PATCH 158/719] Share: fix table head color for public shared folders --- apps/files_sharing/css/public.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css index 110a0028a0..13f42b130d 100644 --- a/apps/files_sharing/css/public.css +++ b/apps/files_sharing/css/public.css @@ -68,3 +68,7 @@ p.info a { max-height:100%; max-width:100%; } + +thead{ + background-color: white; +} From 2b586eb91c66af7fb58b24db1de7eab4139179f2 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Mon, 11 Feb 2013 12:40:17 +0100 Subject: [PATCH 159/719] correct target blank from image to link --- settings/templates/personal.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/settings/templates/personal.php b/settings/templates/personal.php index bc9db0f2b8..4f8f01adc8 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -12,14 +12,14 @@

    t('Get the apps to sync your files');?>

    - - + + - - + + - - + +
    From 47341eb4bd3209f5c1f837fc5b864e2cbf3123bc Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Mon, 11 Feb 2013 12:41:14 +0100 Subject: [PATCH 160/719] spaces to tabs --- settings/templates/personal.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/settings/templates/personal.php b/settings/templates/personal.php index 4f8f01adc8..adc7b529ea 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -11,16 +11,16 @@
    -

    t('Get the apps to sync your files');?>

    - - - - - - - - - +

    t('Get the apps to sync your files');?>

    + + + + + + + + +
    From 40d8a2531dcb5de1aeb5008f9907e1f2cf9aac2d Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Mon, 11 Feb 2013 12:49:52 +0100 Subject: [PATCH 161/719] move CSS to correct location, move and format php --- settings/css/settings.css | 12 ++++++++---- settings/templates/personal.php | 12 +++--------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/settings/css/settings.css b/settings/css/settings.css index a767ba4165..d18a2657c8 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -5,7 +5,15 @@ select#languageinput, select#timezone { width:15em; } input#openid, input#webdav { width:20em; } + /* PERSONAL */ + +/* Sync clients */ +.clientsbox { margin:12px; text-align:center; } +.clientsbox h1 { font-size:40px; font-weight:bold; margin:50px 0 20px; } +.clientsbox h2 { font-size:20px; font-weight:bold; margin:35px 0 10px; } +.clientsbox center { margin-top:10px; } + #passworderror { display:none; } #passwordchanged { display:none; } #displaynameerror { display:none; } @@ -76,7 +84,3 @@ table.shareAPI td { padding-bottom: 0.8em; } /* HELP */ .pressed {background-color:#DDD;} -.clientsbox { margin:12px; text-align:center; } -.clientsbox h1 { font-size:40px; font-weight:bold; margin:50px 0 20px; } -.clientsbox h2 { font-size:20px; font-weight:bold; margin:35px 0 10px; } - diff --git a/settings/templates/personal.php b/settings/templates/personal.php index adc7b529ea..6b3e8acbf0 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -21,18 +21,12 @@ + +
    t('Show First Run Wizard again');?>
    +
    - - -
    t('Show First Run Wizard again');?>
    - - Date: Mon, 11 Feb 2013 13:11:43 +0100 Subject: [PATCH 162/719] fixed argument for translation --- lib/setup.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/setup.php b/lib/setup.php index 01aa9eb019..035f1b6b8e 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -50,16 +50,16 @@ class OC_Setup { if(empty($options['dbuser'])) { - $error[] = $l->t("$dbprettyname enter the database username."); + $error[] = $l->t("%s enter the database username.", array($dbprettyname)); } if(empty($options['dbname'])) { - $error[] = $l->t("$dbprettyname enter the database name."); + $error[] = $l->t("%s enter the database name.", array($dbprettyname)); } if(substr_count($options['dbname'], '.') >= 1) { - $error[] = $l->t("$dbprettyname you may not use dots in the database name"); + $error[] = $l->t("%s you may not use dots in the database name", array($dbprettyname)); } if($dbtype != 'oci' && empty($options['dbhost'])) { - $error[] = $l->t("$dbprettyname set the database host."); + $error[] = $l->t("%s set the database host.", array($dbprettyname)); } } From 56d10e9054c5f2699e3e0df00bd71a40f53be738 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sun, 10 Feb 2013 18:15:23 +0100 Subject: [PATCH 163/719] Cache: simplify scanner logic a bit when handeling with unknown folder sizes --- lib/files/cache/scanner.php | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php index 5a9a119458..ff37c94424 100644 --- a/lib/files/cache/scanner.php +++ b/lib/files/cache/scanner.php @@ -101,18 +101,16 @@ class Scanner { $child = ($path) ? $path . '/' . $file : $file; $data = $this->scanFile($child); if ($data) { - if ($data['mimetype'] === 'httpd/unix-directory') { + if ($data['size'] === -1) { if ($recursive === self::SCAN_RECURSIVE) { $childQueue[] = $child; $data['size'] = 0; } else { - $data['size'] = -1; + $size = -1; } - } else { } - if ($data['size'] === -1) { - $size = -1; - } elseif ($size !== -1) { + + if ($size !== -1) { $size += $data['size']; } } @@ -133,7 +131,7 @@ class Scanner { } return $size; } - + /** * @brief check if the file should be ignored when scanning * NOTE: files with a '.part' extension are ignored as well! @@ -143,8 +141,8 @@ class Scanner { */ private function isIgnoredFile($file) { if ($file === '.' || $file === '..' - || pathinfo($file,PATHINFO_EXTENSION) === 'part') - { + || pathinfo($file, PATHINFO_EXTENSION) === 'part' + ) { return true; } return false; From 299649b40e1a87eee7bcead74b269fe8c452e04d Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sun, 10 Feb 2013 18:24:24 +0100 Subject: [PATCH 164/719] Cache: reuse known folder sizes when doing a shallow scan --- lib/files/cache/scanner.php | 10 +++++++--- tests/lib/files/cache/watcher.php | 1 - 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php index ff37c94424..b27b3555c9 100644 --- a/lib/files/cache/scanner.php +++ b/lib/files/cache/scanner.php @@ -58,9 +58,10 @@ class Scanner { * scan a single file and store it in the cache * * @param string $file + * @param bool $checkExisting check existing folder sizes in the cache instead of always using -1 for folder size * @return array with metadata of the scanned file */ - public function scanFile($file) { + public function scanFile($file, $checkExisting = false) { \OC_Hook::emit('\OC\Files\Cache\Scanner', 'scan_file', array('path' => $file, 'storage' => $this->storageId)); $data = $this->getData($file); if ($data) { @@ -73,7 +74,10 @@ class Scanner { $this->scanFile($parent); } } - $id = $this->cache->put($file, $data); + if ($data['size'] === -1 and $cacheData = $this->cache->get($file)) { + $data['size'] = $cacheData['size']; + } + $this->cache->put($file, $data); } return $data; } @@ -99,7 +103,7 @@ class Scanner { while ($file = readdir($dh)) { if (!$this->isIgnoredFile($file)) { $child = ($path) ? $path . '/' . $file : $file; - $data = $this->scanFile($child); + $data = $this->scanFile($child, $recursive === self::SCAN_SHALLOW); if ($data) { if ($data['size'] === -1) { if ($recursive === self::SCAN_RECURSIVE) { diff --git a/tests/lib/files/cache/watcher.php b/tests/lib/files/cache/watcher.php index e8a1689cab..8ef6ab44d1 100644 --- a/tests/lib/files/cache/watcher.php +++ b/tests/lib/files/cache/watcher.php @@ -76,7 +76,6 @@ class Watcher extends \PHPUnit_Framework_TestCase { $updater->checkUpdate(''); $entry = $cache->get('foo.txt'); - $this->assertEquals(-1, $entry['size']); $this->assertEquals('httpd/unix-directory', $entry['mimetype']); $this->assertFalse($cache->inCache('folder')); $this->assertFalse($cache->inCache('folder/bar.txt')); From d84c3cd014fd73930cd15aee64d57aad3383b2aa Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 11 Feb 2013 13:24:56 +0100 Subject: [PATCH 165/719] Cache: actually use parameter --- lib/files/cache/scanner.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php index b27b3555c9..ec21626442 100644 --- a/lib/files/cache/scanner.php +++ b/lib/files/cache/scanner.php @@ -74,7 +74,7 @@ class Scanner { $this->scanFile($parent); } } - if ($data['size'] === -1 and $cacheData = $this->cache->get($file)) { + if ($checkExisting and $data['size'] === -1 and $cacheData = $this->cache->get($file)) { $data['size'] = $cacheData['size']; } $this->cache->put($file, $data); From 2921d2fb785f265bb3bf17873ada304145d49aec Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 11 Feb 2013 13:27:34 +0100 Subject: [PATCH 166/719] Cache: don't create a new etag when the mtime hasn't changed --- lib/files/cache/scanner.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php index ec21626442..7f19261d97 100644 --- a/lib/files/cache/scanner.php +++ b/lib/files/cache/scanner.php @@ -76,6 +76,9 @@ class Scanner { } if ($checkExisting and $data['size'] === -1 and $cacheData = $this->cache->get($file)) { $data['size'] = $cacheData['size']; + if ($data['mtime'] === $cacheData['mtime']) { + $data['etag'] = $cacheData['etag']; + } } $this->cache->put($file, $data); } From c544a631d52c9750fb4342577b68303245abc9ee Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Mon, 11 Feb 2013 14:14:37 +0100 Subject: [PATCH 167/719] fixing indent --- lib/setup.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/setup.php b/lib/setup.php index 035f1b6b8e..cfaf728866 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -382,7 +382,7 @@ class OC_Setup { $result = pg_query($connection, $query); if(!$result) { $entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '
    '; - $entry .= $l->t('Offending command was: "%s"', array($query)) . '
    '; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
    '; echo($entry); } @@ -520,14 +520,14 @@ class OC_Setup { $stmt = oci_parse($connection, $query); if (!$stmt) { $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '
    '; - $entry .= $l->t('Offending command was: "%s"', array($query)) . '
    '; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
    '; echo($entry); } oci_bind_by_name($stmt, ':un', $name); $result = oci_execute($stmt); if(!$result) { $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '
    '; - $entry .= $l->t('Offending command was: "%s"', array($query)) . '
    '; + $entry .= $l->t('Offending command was: "%s"', array($query)) . '
    '; echo($entry); } From e68e5cc849b625dccc38b903fd19e418d62d1c22 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 11 Feb 2013 15:18:14 +0100 Subject: [PATCH 168/719] Split editable select code used for quota selection into a jquery plugin --- core/js/singleselect.js | 76 ++++ settings/css/settings.css | 1 - settings/js/users.js | 792 ++++++++++++++++------------------- settings/templates/users.php | 62 ++- settings/users.php | 1 + 5 files changed, 475 insertions(+), 457 deletions(-) create mode 100644 core/js/singleselect.js diff --git a/core/js/singleselect.js b/core/js/singleselect.js new file mode 100644 index 0000000000..1a018b7414 --- /dev/null +++ b/core/js/singleselect.js @@ -0,0 +1,76 @@ +(function ($) { + $.fn.singleSelect = function () { + return this.each(function (i, select) { + var input = $(''); + select = $(select); + input.css('position', 'absolute'); + input.css(select.offset()); + input.css({ + 'box-sizing': 'border-box', + '-moz-box-sizing': 'border-box', + 'margin': 0, + 'width': (select.width() - 5) + 'px', + 'height': (select.outerHeight() - 2) + 'px', + 'border': 'none', + 'box-shadow': 'none', + 'margin-top': '1px', + 'margin-left': '1px', + 'z-index': 1000 + }); + input.hide(); + $('body').append(input); + + select.on('change', function (event) { + var value = $(this).val(), + newAttr = $('option:selected', $(this)).attr('data-new'); + if (!(typeof newAttr !== 'undefined' && newAttr !== false)) { + input.hide(); + select.data('previous', value); + } else { + event.stopImmediatePropagation(); + input.show(); + select.css('background-color', 'white'); + input.focus(); + } + }); + + $(select).data('previous', $(select).val()); + + input.on('change', function () { + var value = $(this).val(); + if (value) { + select.children().attr('selected', null); + var existingOption = select.children().filter(function (i, option) { + return ($(option).val() == value); + }); + if (existingOption.length) { + existingOption.attr('selected', 'selected'); + } else { + var option = $('
    -
    - -
    +
    diff --git a/settings/users.php b/settings/users.php index ab7a7aed73..7fcd1d3ed0 100644 --- a/settings/users.php +++ b/settings/users.php @@ -11,6 +11,7 @@ OC_App::loadApps(); // We have some javascript foo! OC_Util::addScript( 'settings', 'users' ); OC_Util::addScript( 'core', 'multiselect' ); +OC_Util::addScript( 'core', 'singleselect' ); OC_Util::addScript('core', 'jquery.inview'); OC_Util::addStyle( 'settings', 'settings' ); OC_App::setActiveNavigationEntry( 'core_users' ); From 45ed0c601003b1f2ebd9e5bb301080b37d43080e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Mon, 11 Feb 2013 15:37:01 +0100 Subject: [PATCH 169/719] if you add/remove more than one user from the share dialog replacing 'Share' with 'Shared' will lead to a string with more and more trailing 'd's --- core/js/share.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/js/share.js b/core/js/share.js index 58cb787b6d..6d1c395404 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -26,7 +26,7 @@ OC.Share={ var action = $(file).find('.fileactions .action').filterAttr('data-action', 'Share'); action.find('img').attr('src', image); action.addClass('permanent'); - action.html(action.html().replace(t('core', 'Share'), t('core', 'Shared'))); + action.html(t('core', 'Shared')); } var dir = $('#dir').val(); if (dir.length > 1) { @@ -40,7 +40,7 @@ OC.Share={ if (img.attr('src') != OC.imagePath('core', 'actions/public')) { img.attr('src', image); action.addClass('permanent'); - action.html(action.html().replace(t('core', 'Share'), t('core', 'Shared'))); + action.html(t('core', 'Shared')); } } last = path; @@ -87,10 +87,10 @@ OC.Share={ action.find('img').attr('src', image); if (shares) { action.addClass('permanent'); - action.html(action.html().replace(t('core', 'Share'), t('core', 'Shared'))); + action.html(t('core', 'Shared')); } else { action.removeClass('permanent'); - action.html(action.html().replace(t('core', 'Shared'), t('core', 'Share'))); + action.html(t('core', 'Share')); } } if (shares) { From 39d19a927404431bd744cffac6789b956d156b3c Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Mon, 11 Feb 2013 15:42:41 +0100 Subject: [PATCH 170/719] [tx-robot] updated from transifex --- apps/files/l10n/gl.php | 66 +++++++++-------- apps/files/l10n/ru_RU.php | 5 ++ apps/files/l10n/sk_SK.php | 11 +-- apps/files/l10n/sv.php | 2 + apps/files_encryption/l10n/gl.php | 5 +- apps/files_encryption/l10n/sk_SK.php | 6 +- apps/files_external/l10n/sk_SK.php | 6 +- apps/files_trashbin/l10n/gl.php | 6 ++ apps/files_trashbin/l10n/sk_SK.php | 1 + apps/files_trashbin/l10n/sv.php | 3 + apps/files_versions/l10n/sk_SK.php | 7 +- apps/files_versions/l10n/sv.php | 8 ++ apps/user_ldap/l10n/sk_SK.php | 7 +- apps/user_ldap/l10n/sv.php | 1 + apps/user_webdavauth/l10n/gl.php | 2 +- core/l10n/sk_SK.php | 4 +- core/l10n/sv.php | 4 + l10n/af_ZA/lib.po | 94 +++++++++++++++++++++++- l10n/af_ZA/settings.po | 70 ++++++++---------- l10n/ar/lib.po | 94 +++++++++++++++++++++++- l10n/ar/settings.po | 60 +++++++-------- l10n/bg_BG/lib.po | 94 +++++++++++++++++++++++- l10n/bg_BG/settings.po | 70 ++++++++---------- l10n/bn_BD/lib.po | 94 +++++++++++++++++++++++- l10n/bn_BD/settings.po | 60 +++++++-------- l10n/ca/lib.po | 96 ++++++++++++++++++++++-- l10n/ca/settings.po | 60 +++++++-------- l10n/cs_CZ/lib.po | 96 ++++++++++++++++++++++-- l10n/cs_CZ/settings.po | 60 +++++++-------- l10n/da/lib.po | 94 +++++++++++++++++++++++- l10n/da/settings.po | 60 +++++++-------- l10n/de/lib.po | 94 +++++++++++++++++++++++- l10n/de/settings.po | 60 +++++++-------- l10n/de_DE/lib.po | 94 +++++++++++++++++++++++- l10n/de_DE/settings.po | 60 +++++++-------- l10n/el/lib.po | 94 +++++++++++++++++++++++- l10n/el/settings.po | 60 +++++++-------- l10n/eo/lib.po | 94 +++++++++++++++++++++++- l10n/eo/settings.po | 60 +++++++-------- l10n/es/lib.po | 96 ++++++++++++++++++++++-- l10n/es/settings.po | 60 +++++++-------- l10n/es_AR/lib.po | 94 +++++++++++++++++++++++- l10n/es_AR/settings.po | 60 +++++++-------- l10n/et_EE/lib.po | 94 +++++++++++++++++++++++- l10n/et_EE/settings.po | 56 ++++++-------- l10n/eu/lib.po | 94 +++++++++++++++++++++++- l10n/eu/settings.po | 60 +++++++-------- l10n/fa/lib.po | 94 +++++++++++++++++++++++- l10n/fa/settings.po | 90 +++++++++++------------ l10n/fi_FI/lib.po | 96 ++++++++++++++++++++++-- l10n/fi_FI/settings.po | 60 +++++++-------- l10n/fr/lib.po | 96 ++++++++++++++++++++++-- l10n/fr/settings.po | 60 +++++++-------- l10n/gl/core.po | 48 ++++++------ l10n/gl/files.po | 93 +++++++++++------------ l10n/gl/files_encryption.po | 15 ++-- l10n/gl/files_trashbin.po | 19 ++--- l10n/gl/lib.po | 105 +++++++++++++++++++++++--- l10n/gl/settings.po | 60 +++++++-------- l10n/gl/user_webdavauth.po | 11 +-- l10n/he/lib.po | 94 +++++++++++++++++++++++- l10n/he/settings.po | 60 +++++++-------- l10n/hi/lib.po | 94 +++++++++++++++++++++++- l10n/hi/settings.po | 70 ++++++++---------- l10n/hr/lib.po | 94 +++++++++++++++++++++++- l10n/hr/settings.po | 70 ++++++++---------- l10n/hu_HU/lib.po | 94 +++++++++++++++++++++++- l10n/hu_HU/settings.po | 60 +++++++-------- l10n/ia/lib.po | 94 +++++++++++++++++++++++- l10n/ia/settings.po | 70 ++++++++---------- l10n/id/lib.po | 94 +++++++++++++++++++++++- l10n/id/settings.po | 70 ++++++++---------- l10n/is/lib.po | 94 +++++++++++++++++++++++- l10n/is/settings.po | 60 +++++++-------- l10n/it/lib.po | 96 ++++++++++++++++++++++-- l10n/it/settings.po | 62 +++++++--------- l10n/ja_JP/lib.po | 94 +++++++++++++++++++++++- l10n/ja_JP/settings.po | 60 +++++++-------- l10n/ka_GE/lib.po | 94 +++++++++++++++++++++++- l10n/ka_GE/settings.po | 56 ++++++-------- l10n/ko/lib.po | 94 +++++++++++++++++++++++- l10n/ko/settings.po | 60 +++++++-------- l10n/ku_IQ/lib.po | 94 +++++++++++++++++++++++- l10n/ku_IQ/settings.po | 70 ++++++++---------- l10n/lb/lib.po | 94 +++++++++++++++++++++++- l10n/lb/settings.po | 70 ++++++++---------- l10n/lt_LT/lib.po | 94 +++++++++++++++++++++++- l10n/lt_LT/settings.po | 56 ++++++-------- l10n/lv/lib.po | 96 ++++++++++++++++++++++-- l10n/lv/settings.po | 60 +++++++-------- l10n/mk/lib.po | 94 +++++++++++++++++++++++- l10n/mk/settings.po | 60 +++++++-------- l10n/ms_MY/lib.po | 94 +++++++++++++++++++++++- l10n/ms_MY/settings.po | 70 ++++++++---------- l10n/nb_NO/lib.po | 94 +++++++++++++++++++++++- l10n/nb_NO/settings.po | 60 +++++++-------- l10n/nl/lib.po | 94 +++++++++++++++++++++++- l10n/nl/settings.po | 60 +++++++-------- l10n/nn_NO/lib.po | 94 +++++++++++++++++++++++- l10n/nn_NO/settings.po | 70 ++++++++---------- l10n/oc/lib.po | 94 +++++++++++++++++++++++- l10n/oc/settings.po | 56 ++++++-------- l10n/pl/lib.po | 94 +++++++++++++++++++++++- l10n/pl/settings.po | 60 +++++++-------- l10n/pl_PL/lib.po | 94 +++++++++++++++++++++++- l10n/pl_PL/settings.po | 70 ++++++++---------- l10n/pt_BR/lib.po | 94 +++++++++++++++++++++++- l10n/pt_BR/settings.po | 60 +++++++-------- l10n/pt_PT/lib.po | 96 ++++++++++++++++++++++-- l10n/pt_PT/settings.po | 60 +++++++-------- l10n/ro/lib.po | 94 +++++++++++++++++++++++- l10n/ro/settings.po | 60 +++++++-------- l10n/ru/lib.po | 94 +++++++++++++++++++++++- l10n/ru/settings.po | 60 +++++++-------- l10n/ru_RU/files.po | 30 ++++---- l10n/ru_RU/lib.po | 99 +++++++++++++++++++++++-- l10n/ru_RU/settings.po | 60 +++++++-------- l10n/si_LK/lib.po | 94 +++++++++++++++++++++++- l10n/si_LK/settings.po | 56 ++++++-------- l10n/sk/lib.po | 94 +++++++++++++++++++++++- l10n/sk/settings.po | 70 ++++++++---------- l10n/sk_SK/core.po | 56 +++++++------- l10n/sk_SK/files.po | 32 ++++---- l10n/sk_SK/files_encryption.po | 12 +-- l10n/sk_SK/files_external.po | 20 ++--- l10n/sk_SK/files_trashbin.po | 8 +- l10n/sk_SK/files_versions.po | 17 +++-- l10n/sk_SK/lib.po | 106 ++++++++++++++++++++++++--- l10n/sk_SK/settings.po | 84 ++++++++++----------- l10n/sk_SK/user_ldap.po | 14 ++-- l10n/sl/lib.po | 94 +++++++++++++++++++++++- l10n/sl/settings.po | 60 +++++++-------- l10n/sr/lib.po | 94 +++++++++++++++++++++++- l10n/sr/settings.po | 56 ++++++-------- l10n/sr@latin/lib.po | 94 +++++++++++++++++++++++- l10n/sr@latin/settings.po | 70 ++++++++---------- l10n/sv/core.po | 58 +++++++-------- l10n/sv/files.po | 24 +++--- l10n/sv/files_trashbin.po | 13 ++-- l10n/sv/files_versions.po | 24 +++--- l10n/sv/lib.po | 98 +++++++++++++++++++++++-- l10n/sv/settings.po | 80 +++++++++----------- l10n/sv/user_ldap.po | 8 +- l10n/sw_KE/lib.po | 94 +++++++++++++++++++++++- l10n/sw_KE/settings.po | 70 ++++++++---------- l10n/ta_LK/lib.po | 94 +++++++++++++++++++++++- l10n/ta_LK/settings.po | 56 ++++++-------- l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_trashbin.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 92 ++++++++++++++++++++++- l10n/templates/settings.pot | 68 ++++++++--------- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- l10n/th_TH/lib.po | 94 +++++++++++++++++++++++- l10n/th_TH/settings.po | 60 +++++++-------- l10n/tr/lib.po | 94 +++++++++++++++++++++++- l10n/tr/settings.po | 60 +++++++-------- l10n/uk/lib.po | 94 +++++++++++++++++++++++- l10n/uk/settings.po | 60 +++++++-------- l10n/vi/lib.po | 94 +++++++++++++++++++++++- l10n/vi/settings.po | 60 +++++++-------- l10n/zh_CN.GB2312/lib.po | 94 +++++++++++++++++++++++- l10n/zh_CN.GB2312/settings.po | 56 ++++++-------- l10n/zh_CN/lib.po | 94 +++++++++++++++++++++++- l10n/zh_CN/settings.po | 60 +++++++-------- l10n/zh_HK/lib.po | 94 +++++++++++++++++++++++- l10n/zh_HK/settings.po | 70 ++++++++---------- l10n/zh_TW/lib.po | 96 ++++++++++++++++++++++-- l10n/zh_TW/settings.po | 60 +++++++-------- lib/l10n/gl.php | 8 +- lib/l10n/ru_RU.php | 2 + lib/l10n/sk_SK.php | 10 ++- lib/l10n/sv.php | 2 + settings/l10n/ar.php | 4 - settings/l10n/bn_BD.php | 4 - settings/l10n/ca.php | 4 - settings/l10n/cs_CZ.php | 4 - settings/l10n/da.php | 4 - settings/l10n/de.php | 4 - settings/l10n/de_DE.php | 4 - settings/l10n/el.php | 4 - settings/l10n/eo.php | 4 - settings/l10n/es.php | 4 - settings/l10n/es_AR.php | 4 - settings/l10n/et_EE.php | 1 - settings/l10n/eu.php | 4 - settings/l10n/fa.php | 13 +++- settings/l10n/fi_FI.php | 4 - settings/l10n/fr.php | 4 - settings/l10n/gl.php | 4 - settings/l10n/he.php | 4 - settings/l10n/hr.php | 1 - settings/l10n/hu_HU.php | 4 - settings/l10n/ia.php | 1 - settings/l10n/id.php | 1 - settings/l10n/is.php | 4 - settings/l10n/it.php | 5 +- settings/l10n/ja_JP.php | 4 - settings/l10n/ka_GE.php | 1 - settings/l10n/ko.php | 4 - settings/l10n/lb.php | 1 - settings/l10n/lt_LT.php | 1 - settings/l10n/lv.php | 4 - settings/l10n/mk.php | 4 - settings/l10n/ms_MY.php | 1 - settings/l10n/nb_NO.php | 4 - settings/l10n/nl.php | 4 - settings/l10n/nn_NO.php | 1 - settings/l10n/oc.php | 1 - settings/l10n/pl.php | 4 - settings/l10n/pt_BR.php | 4 - settings/l10n/pt_PT.php | 4 - settings/l10n/ro.php | 4 - settings/l10n/ru.php | 4 - settings/l10n/ru_RU.php | 4 - settings/l10n/si_LK.php | 1 - settings/l10n/sk_SK.php | 14 ++-- settings/l10n/sl.php | 4 - settings/l10n/sr.php | 1 - settings/l10n/sr@latin.php | 1 - settings/l10n/sv.php | 8 +- settings/l10n/ta_LK.php | 1 - settings/l10n/th_TH.php | 4 - settings/l10n/tr.php | 4 - settings/l10n/uk.php | 4 - settings/l10n/vi.php | 4 - settings/l10n/zh_CN.GB2312.php | 1 - settings/l10n/zh_CN.php | 4 - settings/l10n/zh_TW.php | 4 - 234 files changed, 8064 insertions(+), 3085 deletions(-) diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php index 4713da934a..e2a4c2f592 100644 --- a/apps/files/l10n/gl.php +++ b/apps/files/l10n/gl.php @@ -1,19 +1,21 @@ "Non se moveu %s - Xa existe un ficheiro con ese nome.", -"Could not move %s" => "Non se puido mover %s", -"Unable to rename file" => "Non se pode renomear o ficheiro", -"No file was uploaded. Unknown error" => "Non se subiu ningún ficheiro. Erro descoñecido.", -"There is no error, the file uploaded with success" => "Non hai erros. O ficheiro enviouse correctamente", -"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro subido excede a directiva indicada polo tamaño_máximo_de_subida de php.ini", -"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "O ficheiro enviado supera a directiva MAX_FILE_SIZE que foi indicada no formulario HTML", +"Could not move %s" => "Non foi posíbel mover %s", +"Unable to rename file" => "Non é posíbel renomear o ficheiro", +"No file was uploaded. Unknown error" => "Non foi enviado ningún ficheiro. Produciuse un erro descoñecido.", +"There is no error, the file uploaded with success" => "Non se produciu ningún erro. O ficheiro enviouse correctamente", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro enviado excede a directiva indicada por upload_max_filesize de php.ini:", +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "O ficheiro enviado excede a directiva MAX_FILE_SIZE que foi indicada no formulario HTML", "The uploaded file was only partially uploaded" => "O ficheiro enviado foi só parcialmente enviado", "No file was uploaded" => "Non se enviou ningún ficheiro", "Missing a temporary folder" => "Falta un cartafol temporal", -"Failed to write to disk" => "Erro ao escribir no disco", +"Failed to write to disk" => "Produciuse un erro ao escribir no disco", +"Not enough storage available" => "Non hai espazo de almacenamento abondo", "Invalid directory." => "O directorio é incorrecto.", "Files" => "Ficheiros", +"Delete permanently" => "Eliminar permanentemente", "Delete" => "Eliminar", -"Rename" => "Mudar o nome", +"Rename" => "Renomear", "Pending" => "Pendentes", "{new_name} already exists" => "xa existe un {new_name}", "replace" => "substituír", @@ -21,19 +23,23 @@ "cancel" => "cancelar", "replaced {new_name}" => "substituír {new_name}", "undo" => "desfacer", -"replaced {new_name} with {old_name}" => "substituír {new_name} polo {old_name}", -"'.' is an invalid file name." => "'.' é un nonme de ficheiro non válido", -"File name cannot be empty." => "O nome de ficheiro non pode estar baldeiro", -"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome non válido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non se permiten.", -"Unable to upload your file as it is a directory or has 0 bytes" => "Non se puido subir o ficheiro pois ou é un directorio ou ten 0 bytes", -"Upload Error" => "Erro na subida", +"replaced {new_name} with {old_name}" => "substituír {new_name} por {old_name}", +"perform delete operation" => "realizar a operación de eliminación", +"'.' is an invalid file name." => "«.» é un nome de ficheiro incorrecto", +"File name cannot be empty." => "O nome de ficheiro non pode estar baleiro", +"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome incorrecto, non se permite «\\», «/», «<», «>», «:», «\"», «|», «?» e «*».", +"Your storage is full, files can not be updated or synced anymore!" => "O seu espazo de almacenamento está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!", +"Your storage is almost full ({usedSpacePercent}%)" => "O seu espazo de almacenamento está case cheo ({usedSpacePercent}%)", +"Your download is being prepared. This might take some time if the files are big." => "Está a prepararse a súa descarga. Isto pode levar bastante tempo se os ficheiros son grandes.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Non foi posíbel enviar o ficheiro pois ou é un directorio ou ten 0 bytes", +"Upload Error" => "Produciuse un erro no envío", "Close" => "Pechar", -"1 file uploading" => "1 ficheiro subíndose", -"{count} files uploading" => "{count} ficheiros subíndose", -"Upload cancelled." => "Subida cancelada.", -"File upload is in progress. Leaving the page now will cancel the upload." => "A subida do ficheiro está en curso. Saír agora da páxina cancelará a subida.", -"URL cannot be empty." => "URL non pode quedar baleiro.", -"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome de cartafol non válido. O uso de 'Shared' está reservado por Owncloud", +"1 file uploading" => "Enviándose 1 ficheiro", +"{count} files uploading" => "Enviandose {count} ficheiros", +"Upload cancelled." => "Envío cancelado.", +"File upload is in progress. Leaving the page now will cancel the upload." => "O envío do ficheiro está en proceso. Saír agora da páxina cancelará o envío.", +"URL cannot be empty." => "O URL non pode quedar baleiro.", +"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome de cartafol incorrecto. O uso de «Shared» está reservado por Owncloud", "Name" => "Nome", "Size" => "Tamaño", "Modified" => "Modificado", @@ -43,23 +49,25 @@ "{count} files" => "{count} ficheiros", "Upload" => "Enviar", "File handling" => "Manexo de ficheiro", -"Maximum upload size" => "Tamaño máximo de envío", -"max. possible: " => "máx. posible: ", +"Maximum upload size" => "Tamaño máximo do envío", +"max. possible: " => "máx. posíbel: ", "Needed for multi-file and folder downloads." => "Precísase para a descarga de varios ficheiros e cartafoles.", "Enable ZIP-download" => "Habilitar a descarga-ZIP", "0 is unlimited" => "0 significa ilimitado", -"Maximum input size for ZIP files" => "Tamaño máximo de descarga para os ZIP", +"Maximum input size for ZIP files" => "Tamaño máximo de descarga para os ficheiros ZIP", "Save" => "Gardar", "New" => "Novo", "Text file" => "Ficheiro de texto", "Folder" => "Cartafol", -"From link" => "Dende a ligazón", -"Cancel upload" => "Cancelar a subida", -"Nothing in here. Upload something!" => "Nada por aquí. Envía algo.", +"From link" => "Desde a ligazón", +"Trash bin" => "Cesto do lixo", +"Cancel upload" => "Cancelar o envío", +"Nothing in here. Upload something!" => "Aquí non hai nada por aquí. Envíe algo.", "Download" => "Descargar", "Unshare" => "Deixar de compartir", "Upload too large" => "Envío demasiado grande", -"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que trata de subir superan o tamaño máximo permitido neste servidor", -"Files are being scanned, please wait." => "Estanse analizando os ficheiros. Agarda.", -"Current scanning" => "Análise actual" +"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que tenta enviar exceden do tamaño máximo permitido neste servidor", +"Files are being scanned, please wait." => "Estanse analizando os ficheiros. Agarde.", +"Current scanning" => "Análise actual", +"Upgrading filesystem cache..." => "Anovando a caché do sistema de ficheiros..." ); diff --git a/apps/files/l10n/ru_RU.php b/apps/files/l10n/ru_RU.php index c019328bb6..b635444212 100644 --- a/apps/files/l10n/ru_RU.php +++ b/apps/files/l10n/ru_RU.php @@ -1,4 +1,7 @@ "Неполучается перенести %s - Файл с таким именем уже существует", +"Could not move %s" => "Неполучается перенести %s ", +"Unable to rename file" => "Невозможно переименовать файл", "No file was uploaded. Unknown error" => "Файл не был загружен. Неизвестная ошибка", "There is no error, the file uploaded with success" => "Ошибка отсутствует, файл загружен успешно.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Размер загружаемого файла превышает upload_max_filesize директиву в php.ini:", @@ -7,6 +10,7 @@ "No file was uploaded" => "Файл не был загружен", "Missing a temporary folder" => "Отсутствует временная папка", "Failed to write to disk" => "Не удалось записать на диск", +"Not enough storage available" => "Недостаточно места в хранилище", "Invalid directory." => "Неверный каталог.", "Files" => "Файлы", "Delete permanently" => "Удалить навсегда", @@ -56,6 +60,7 @@ "Text file" => "Текстовый файл", "Folder" => "Папка", "From link" => "По ссылке", +"Trash bin" => "Корзина", "Cancel upload" => "Отмена загрузки", "Nothing in here. Upload something!" => "Здесь ничего нет. Загрузите что-нибудь!", "Download" => "Загрузить", diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php index 0d2db9813b..64ba7420d3 100644 --- a/apps/files/l10n/sk_SK.php +++ b/apps/files/l10n/sk_SK.php @@ -11,7 +11,7 @@ "Missing a temporary folder" => "Chýbajúci dočasný priečinok", "Failed to write to disk" => "Zápis na disk sa nepodaril", "Not enough storage available" => "Nedostatok dostupného úložného priestoru", -"Invalid directory." => "Neplatný adresár", +"Invalid directory." => "Neplatný priečinok", "Files" => "Súbory", "Delete permanently" => "Zmazať trvalo", "Delete" => "Odstrániť", @@ -39,7 +39,7 @@ "Upload cancelled." => "Odosielanie zrušené", "File upload is in progress. Leaving the page now will cancel the upload." => "Opustenie stránky zruší práve prebiehajúce odosielanie súboru.", "URL cannot be empty." => "URL nemôže byť prázdne", -"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Neplatné meno adresára. Používanie mena 'Shared' je vyhradené len pre Owncloud", +"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Neplatné meno priečinka. Používanie mena 'Shared' je vyhradené len pre Owncloud", "Name" => "Meno", "Size" => "Veľkosť", "Modified" => "Upravené", @@ -48,10 +48,10 @@ "1 file" => "1 súbor", "{count} files" => "{count} súborov", "Upload" => "Odoslať", -"File handling" => "Nastavenie správanie k súborom", +"File handling" => "Nastavenie správania sa k súborom", "Maximum upload size" => "Maximálna veľkosť odosielaného súboru", "max. possible: " => "najväčšie možné:", -"Needed for multi-file and folder downloads." => "Vyžadované pre sťahovanie viacerých súborov a adresárov.", +"Needed for multi-file and folder downloads." => "Vyžadované pre sťahovanie viacerých súborov a priečinkov.", "Enable ZIP-download" => "Povoliť sťahovanie ZIP súborov", "0 is unlimited" => "0 znamená neobmedzené", "Maximum input size for ZIP files" => "Najväčšia veľkosť ZIP súborov", @@ -60,6 +60,7 @@ "Text file" => "Textový súbor", "Folder" => "Priečinok", "From link" => "Z odkazu", +"Trash bin" => "Kôš", "Cancel upload" => "Zrušiť odosielanie", "Nothing in here. Upload something!" => "Žiadny súbor. Nahrajte niečo!", "Download" => "Stiahnuť", @@ -67,6 +68,6 @@ "Upload too large" => "Odosielaný súbor je príliš veľký", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server.", "Files are being scanned, please wait." => "Čakajte, súbory sú prehľadávané.", -"Current scanning" => "Práve prehliadané", +"Current scanning" => "Práve prezerané", "Upgrading filesystem cache..." => "Aktualizujem medzipamäť súborového systému..." ); diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php index d95701e908..5e484ec130 100644 --- a/apps/files/l10n/sv.php +++ b/apps/files/l10n/sv.php @@ -13,6 +13,7 @@ "Not enough storage available" => "Inte tillräckligt med lagringsutrymme tillgängligt", "Invalid directory." => "Felaktig mapp.", "Files" => "Filer", +"Delete permanently" => "Radera permanent", "Delete" => "Radera", "Rename" => "Byt namn", "Pending" => "Väntar", @@ -59,6 +60,7 @@ "Text file" => "Textfil", "Folder" => "Mapp", "From link" => "Från länk", +"Trash bin" => "Papperskorg", "Cancel upload" => "Avbryt uppladdning", "Nothing in here. Upload something!" => "Ingenting här. Ladda upp något!", "Download" => "Ladda ner", diff --git a/apps/files_encryption/l10n/gl.php b/apps/files_encryption/l10n/gl.php index b240990f3d..3210f71545 100644 --- a/apps/files_encryption/l10n/gl.php +++ b/apps/files_encryption/l10n/gl.php @@ -1,4 +1,7 @@ "Cifrado", -"None" => "Nada" +"File encryption is enabled." => "O cifrado de ficheiros está activado", +"The following file types will not be encrypted:" => "Os seguintes tipos de ficheiros non van seren cifrados:", +"Exclude the following file types from encryption:" => "Excluír os seguintes tipos de ficheiros do cifrado:", +"None" => "Ningún" ); diff --git a/apps/files_encryption/l10n/sk_SK.php b/apps/files_encryption/l10n/sk_SK.php index 004c3b129a..bebb623471 100644 --- a/apps/files_encryption/l10n/sk_SK.php +++ b/apps/files_encryption/l10n/sk_SK.php @@ -1,7 +1,7 @@ "Šifrovanie", -"File encryption is enabled." => "Kryptovanie súborov nastavené.", -"The following file types will not be encrypted:" => "Uvedené typy súborov nebudú kryptované:", -"Exclude the following file types from encryption:" => "Nekryptovať uvedené typy súborov", +"File encryption is enabled." => "Šifrovanie súborov nastavené.", +"The following file types will not be encrypted:" => "Uvedené typy súborov nebudú šifrované:", +"Exclude the following file types from encryption:" => "Nešifrovať uvedené typy súborov", "None" => "Žiadne" ); diff --git a/apps/files_external/l10n/sk_SK.php b/apps/files_external/l10n/sk_SK.php index 0b6878a542..d464d192ff 100644 --- a/apps/files_external/l10n/sk_SK.php +++ b/apps/files_external/l10n/sk_SK.php @@ -15,12 +15,12 @@ "Applicable" => "Aplikovateľné", "Add mount point" => "Pridať prípojný bod", "None set" => "Žiadne nastavené", -"All Users" => "Všetci užívatelia", +"All Users" => "Všetci používatelia", "Groups" => "Skupiny", -"Users" => "Užívatelia", +"Users" => "Používatelia", "Delete" => "Odstrániť", "Enable User External Storage" => "Povoliť externé úložisko", -"Allow users to mount their own external storage" => "Povoliť užívateľom pripojiť ich vlastné externé úložisko", +"Allow users to mount their own external storage" => "Povoliť používateľom pripojiť ich vlastné externé úložisko", "SSL root certificates" => "Koreňové SSL certifikáty", "Import Root Certificate" => "Importovať koreňový certifikát" ); diff --git a/apps/files_trashbin/l10n/gl.php b/apps/files_trashbin/l10n/gl.php index bdc3187b20..ad9f6802e6 100644 --- a/apps/files_trashbin/l10n/gl.php +++ b/apps/files_trashbin/l10n/gl.php @@ -1,8 +1,14 @@ "Non foi posíbel eliminar %s permanente", +"Couldn't restore %s" => "Non foi posíbel restaurar %s", +"perform restore operation" => "realizar a operación de restauración", +"delete file permanently" => "eliminar o ficheiro permanentemente", "Name" => "Nome", +"Deleted" => "Eliminado", "1 folder" => "1 cartafol", "{count} folders" => "{count} cartafoles", "1 file" => "1 ficheiro", "{count} files" => "{count} ficheiros", +"Nothing in here. Your trash bin is empty!" => "Aquí non hai nada. O cesto do lixo está baleiro!", "Restore" => "Restablecer" ); diff --git a/apps/files_trashbin/l10n/sk_SK.php b/apps/files_trashbin/l10n/sk_SK.php index 759850783e..b86e5d86e4 100644 --- a/apps/files_trashbin/l10n/sk_SK.php +++ b/apps/files_trashbin/l10n/sk_SK.php @@ -1,4 +1,5 @@ "Nemožno zmazať %s navždy", "Couldn't restore %s" => "Nemožno obnoviť %s", "perform restore operation" => "vykonať obnovu", "delete file permanently" => "trvalo zmazať súbor", diff --git a/apps/files_trashbin/l10n/sv.php b/apps/files_trashbin/l10n/sv.php index 5bde85e705..53bb7a6ce0 100644 --- a/apps/files_trashbin/l10n/sv.php +++ b/apps/files_trashbin/l10n/sv.php @@ -1,5 +1,8 @@ "Kunde inte radera %s permanent", +"Couldn't restore %s" => "Kunde inte återställa %s", "perform restore operation" => "utför återställning", +"delete file permanently" => "radera filen permanent", "Name" => "Namn", "Deleted" => "Raderad", "1 folder" => "1 mapp", diff --git a/apps/files_versions/l10n/sk_SK.php b/apps/files_versions/l10n/sk_SK.php index 8a59286b5a..8b46e93bb9 100644 --- a/apps/files_versions/l10n/sk_SK.php +++ b/apps/files_versions/l10n/sk_SK.php @@ -1,10 +1,13 @@ "uspech", -"File %s was reverted to version %s" => "Subror %s bol vrateny na verziu %s", +"Could not revert: %s" => "Nemožno obnoviť: %s", +"success" => "úspech", +"File %s was reverted to version %s" => "Súbor %s bol obnovený na verziu %s", "failure" => "chyba", +"File %s could not be reverted to version %s" => "Súbor %s nemohol byť obnovený na verziu %s", "No old versions available" => "Nie sú dostupné žiadne staršie verzie", "No path specified" => "Nevybrali ste cestu", "History" => "História", +"Revert a file to a previous version by clicking on its revert button" => "Obnovte súbor do predošlej verzie kliknutím na tlačítko obnoviť", "Files Versioning" => "Vytváranie verzií súborov", "Enable" => "Zapnúť" ); diff --git a/apps/files_versions/l10n/sv.php b/apps/files_versions/l10n/sv.php index 6788d1fb0f..853644848f 100644 --- a/apps/files_versions/l10n/sv.php +++ b/apps/files_versions/l10n/sv.php @@ -1,5 +1,13 @@ "Kunde inte återställa: %s", +"success" => "lyckades", +"File %s was reverted to version %s" => "Filen %s återställdes till version %s", +"failure" => "misslyckades", +"File %s could not be reverted to version %s" => "Filen %s kunde inte återställas till version %s", +"No old versions available" => "Inga gamla versioner finns tillgängliga", +"No path specified" => "Ingen sökväg angiven", "History" => "Historik", +"Revert a file to a previous version by clicking on its revert button" => "Återställ en fil till en tidigare version genom att klicka på knappen", "Files Versioning" => "Versionshantering av filer", "Enable" => "Aktivera" ); diff --git a/apps/user_ldap/l10n/sk_SK.php b/apps/user_ldap/l10n/sk_SK.php index af8ff0307a..727765a150 100644 --- a/apps/user_ldap/l10n/sk_SK.php +++ b/apps/user_ldap/l10n/sk_SK.php @@ -11,8 +11,8 @@ "Connection test failed" => "Test pripojenia zlyhal", "Do you really want to delete the current Server Configuration?" => "Naozaj chcete zmazať súčasné nastavenie servera?", "Confirm Deletion" => "Potvrdiť vymazanie", -"Warning: Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "Upozornenie: Aplikácie user_ldap a user_webdavauth nie sú kompatibilné. Môže nastávať neočakávané správanie. Požiadajte správcu systému aby jednu z nich zakázal.", -"Warning: The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "Upozornenie: nie je nainštalovaný LDAP modul pre PHP, backend vrstva nebude fungovať. Požádejte správcu systému aby ho nainštaloval.", +"Warning: Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "Upozornenie: Aplikácie user_ldap a user_webdavauth nie sú kompatibilné. Môže nastávať neočakávané správanie. Požiadajte administrátora systému aby jednu z nich zakázal.", +"Warning: The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "Upozornenie: nie je nainštalovaný LDAP modul pre PHP, backend vrstva nebude fungovať. Požádejte administrátora systému aby ho nainštaloval.", "Server configuration" => "Nastavenia servera", "Add Server Configuration" => "Pridať nastavenia servera.", "Host" => "Hostiteľ", @@ -43,6 +43,7 @@ "Disable Main Server" => "Zakázať hlavný server", "When switched on, ownCloud will only connect to the replica server." => "Pri zapnutí sa ownCloud pripojí len k záložnému serveru.", "Use TLS" => "Použi TLS", +"Do not use it additionally for LDAPS connections, it will fail." => "Nepoužívajte pre pripojenie LDAPS, zlyhá.", "Case insensitve LDAP server (Windows)" => "LDAP server nerozlišuje veľkosť znakov (Windows)", "Turn off SSL certificate validation." => "Vypnúť overovanie SSL certifikátu.", "If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Ak pripojenie pracuje len s touto možnosťou, tak importujte SSL certifikát LDAP serveru do vášho servera ownCloud.", @@ -60,7 +61,7 @@ "Base Group Tree" => "Základný skupinový strom", "One Group Base DN per line" => "Jedna skupinová základná DN na riadok", "Group Search Attributes" => "Atribúty vyhľadávania skupín", -"Group-Member association" => "Asociácia člena skupiny", +"Group-Member association" => "Priradenie člena skupiny", "Special Attributes" => "Špeciálne atribúty", "in bytes" => "v bajtoch", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Nechajte prázdne pre používateľské meno (predvolené). Inak uveďte atribút LDAP/AD.", diff --git a/apps/user_ldap/l10n/sv.php b/apps/user_ldap/l10n/sv.php index c100fc94af..702912f9c6 100644 --- a/apps/user_ldap/l10n/sv.php +++ b/apps/user_ldap/l10n/sv.php @@ -43,6 +43,7 @@ "Disable Main Server" => "Inaktivera huvudserver", "When switched on, ownCloud will only connect to the replica server." => "När denna är påkopplad kommer ownCloud att koppla upp till replika-servern, endast.", "Use TLS" => "Använd TLS", +"Do not use it additionally for LDAPS connections, it will fail." => "Använd inte för LDAPS-anslutningar, det kommer inte att fungera.", "Case insensitve LDAP server (Windows)" => "LDAP-servern är okänslig för gemener och versaler (Windows)", "Turn off SSL certificate validation." => "Stäng av verifiering av SSL-certifikat.", "If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Om anslutningen bara fungerar med det här alternativet, importera LDAP-serverns SSL-certifikat i din ownCloud-server.", diff --git a/apps/user_webdavauth/l10n/gl.php b/apps/user_webdavauth/l10n/gl.php index a6b8355c07..f63a7cb0ce 100644 --- a/apps/user_webdavauth/l10n/gl.php +++ b/apps/user_webdavauth/l10n/gl.php @@ -1,5 +1,5 @@ "Autenticación WebDAV", "URL: http://" => "URL: http://", -"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud enviará as credenciais do usuario a esta URL. Este conector comproba a resposta e interpretará os códigos de estado 401 e 403 como credenciais non válidas, e todas as outras respostas como credenciais válidas." +"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud enviará as credenciais do usuario a este URL. Este engadido comproba a resposta e interpretará os códigos de estado HTTP 401 e 403 como credenciais incorrectas, e todas as outras respostas como credenciais correctas." ); diff --git a/core/l10n/sk_SK.php b/core/l10n/sk_SK.php index 26f04c1bce..ef0b7c26ce 100644 --- a/core/l10n/sk_SK.php +++ b/core/l10n/sk_SK.php @@ -69,7 +69,7 @@ "Set expiration date" => "Nastaviť dátum expirácie", "Expiration date" => "Dátum expirácie", "Share via email:" => "Zdieľať cez e-mail:", -"No people found" => "Užívateľ nenájdený", +"No people found" => "Používateľ nenájdený", "Resharing is not allowed" => "Zdieľanie už zdieľanej položky nie je povolené", "Shared in {item} with {user}" => "Zdieľané v {item} s {user}", "Unshare" => "Zrušiť zdieľanie", @@ -109,6 +109,8 @@ "Security Warning" => "Bezpečnostné varovanie", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nie je dostupný žiadny bezpečný generátor náhodných čísel, prosím, povoľte rozšírenie OpenSSL v PHP.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez bezpečného generátora náhodných čísel môže útočník predpovedať token pre obnovu hesla a prevziať kontrolu nad vaším kontom.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Váš priečinok s dátami a súbormi je dostupný z internetu, lebo súbor .htaccess nefunguje.", +"For information how to properly configure your server, please see the documentation." => "Pre informácie, ako správne nastaviť Váš server sa pozrite do dokumentácie.", "Create an admin account" => "Vytvoriť administrátorský účet", "Advanced" => "Pokročilé", "Data folder" => "Priečinok dát", diff --git a/core/l10n/sv.php b/core/l10n/sv.php index bc96c23713..ff0006ee19 100644 --- a/core/l10n/sv.php +++ b/core/l10n/sv.php @@ -5,6 +5,7 @@ "User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Användare %s delade mappen \"%s\" med dig. Den finns att ladda ner här: %s", "Category type not provided." => "Kategorityp inte angiven.", "No category to add?" => "Ingen kategori att lägga till?", +"This category already exists: %s" => "Denna kategori finns redan: %s", "Object type not provided." => "Objekttyp inte angiven.", "%s ID not provided." => "%s ID inte angiven.", "Error adding %s to favorites." => "Fel vid tillägg av %s till favoriter.", @@ -108,6 +109,8 @@ "Security Warning" => "Säkerhetsvarning", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ingen säker slumptalsgenerator finns tillgänglig. Du bör aktivera PHP OpenSSL-tillägget.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Utan en säker slumptalsgenerator kan angripare få möjlighet att förutsäga lösenordsåterställningar och ta över ditt konto.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Din datakatalog och filer är förmodligen tillgängliga från Internet, eftersom .htaccess-filen inte fungerar.", +"For information how to properly configure your server, please see the documentation." => "För information hur man korrekt konfigurera servern, var god se documentation.", "Create an admin account" => "Skapa ett administratörskonto", "Advanced" => "Avancerat", "Data folder" => "Datamapp", @@ -127,6 +130,7 @@ "Lost your password?" => "Glömt ditt lösenord?", "remember" => "kom ihåg", "Log in" => "Logga in", +"Alternative Logins" => "Alternativa inloggningar", "prev" => "föregående", "next" => "nästa", "Updating ownCloud to version %s, this may take a while." => "Uppdaterar ownCloud till version %s, detta kan ta en stund." diff --git a/l10n/af_ZA/lib.po b/l10n/af_ZA/lib.po index 67a6f17cf0..fb18d96801 100644 --- a/l10n/af_ZA/lib.po +++ b/l10n/af_ZA/lib.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:41+0000\n" "Last-Translator: I Robot \n" "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n" "MIME-Version: 1.0\n" @@ -85,13 +85,99 @@ msgstr "" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/af_ZA/settings.po b/l10n/af_ZA/settings.po index 292ab46b0e..6418c5c70f 100644 --- a/l10n/af_ZA/settings.po +++ b/l10n/af_ZA/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n" "MIME-Version: 1.0\n" @@ -177,95 +177,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "Wagwoord" - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "Wagwoord" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nuwe wagwoord" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n" "MIME-Version: 1.0\n" @@ -85,13 +85,99 @@ msgstr "معلومات إضافية" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/ar/settings.po b/l10n/ar/settings.po index 317e68fa4a..2a33d8939d 100644 --- a/l10n/ar/settings.po +++ b/l10n/ar/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n" "MIME-Version: 1.0\n" @@ -180,95 +180,87 @@ msgstr "دعم تجاري" msgid "You have used %s of the available %s" msgstr "تم إستهلاك %s من المتوفر %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "الزبائن" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "تحميل عملاء سطح المكتب" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "تحميل عميل آندرويد" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "تحميل عميل آي أو أس" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "كلمات السر" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "لقد تم تغيير كلمة السر" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "لم يتم تعديل كلمة السر بنجاح" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "كلمات السر الحالية" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "كلمات سر جديدة" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "عدل كلمة السر" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "العنوان البريدي" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "عنوانك البريدي" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "أدخل عنوانك البريدي لتفعيل استرجاع كلمة المرور" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "اللغة" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "ساعد في الترجمه" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "إستخدم هذا العنوان للإتصال بـ ownCloud في مدير الملفات" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "إصدار" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" @@ -86,13 +86,99 @@ msgstr "Текст" msgid "Images" msgstr "Снимки" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/bg_BG/settings.po b/l10n/bg_BG/settings.po index 66e0bc07fe..475c91347d 100644 --- a/l10n/bg_BG/settings.po +++ b/l10n/bg_BG/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" @@ -180,95 +180,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "Парола" - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "Парола" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Промяната на паролата не беше извършена" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Текуща парола" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Нова парола" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Промяна на паролата" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "E-mail" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Вашия email адрес" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Език" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Помогнете с превода" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n" "MIME-Version: 1.0\n" @@ -85,13 +85,99 @@ msgstr "" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/bn_BD/settings.po b/l10n/bn_BD/settings.po index 3e31663a3d..778831c83a 100644 --- a/l10n/bn_BD/settings.po +++ b/l10n/bn_BD/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n" "MIME-Version: 1.0\n" @@ -178,95 +178,87 @@ msgstr "বাণিজ্যিক সাপোর্ট" msgid "You have used %s of the available %s" msgstr "আপনি ব্যবহার করছেন %s, সুলভ %s এর মধ্যে।" -#: templates/personal.php:12 -msgid "Clients" -msgstr "ক্লায়েন্ট" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "ডেস্কটপ ক্লায়েন্ট ডাউনলোড করুন" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "অ্যান্ড্রয়েড ক্লায়েন্ট ডাউনলোড করুন" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "iOS ক্লায়েন্ট ডাউনলোড করুন" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "কূটশব্দ" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "আপনার কূটশব্দটি পরিবর্তন করা হয়েছে " -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "আপনার কূটশব্দটি পরিবর্তন করতে সক্ষম নয়" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "বর্তমান কূটশব্দ" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "নতুন কূটশব্দ" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "কূটশব্দ পরিবর্তন করুন" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "ই-মেইল " -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "আপনার ই-মেইল ঠিকানা" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "কূটশব্দ পূনরূদ্ধার সক্রিয় করার জন্য ই-মেইল ঠিকানাটি পূরণ করুন" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "ভাষা" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "অনুবাদ করতে সহায়তা করুন" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "আপনার ownCloud এ সংযুক্ত হতে এই ঠিকানাটি আপনার ফাইল ব্যবস্থাপকে ব্যবহার করুন" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "ভার্সন" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:41+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -87,13 +87,99 @@ msgstr "Text" msgid "Images" msgstr "Imatges" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament." -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "Comproveu les guies d'instal·lació." diff --git a/l10n/ca/settings.po b/l10n/ca/settings.po index cc9de05cb2..d13394e2a8 100644 --- a/l10n/ca/settings.po +++ b/l10n/ca/settings.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" @@ -183,95 +183,87 @@ msgstr "Suport comercial" msgid "You have used %s of the available %s" msgstr "Heu utilitzat %s d'un total disponible de %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Clients" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Baixa clients d'escriptori" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr " Baixa el client per Android" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Baixa el client per iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Contrasenya" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "La seva contrasenya s'ha canviat" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "No s'ha pogut canviar la contrasenya" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Contrasenya actual" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Contrasenya nova" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Canvia la contrasenya" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Nom a mostrar" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "El vostre nom a mostrar ha canviat" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "No s'ha pogut canviar el vostre nom a mostrar" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "Canvia el nom a mostrar" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Correu electrònic" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Correu electrònic" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Ompliu el correu electrònic per activar la recuperació de contrasenya" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Idioma" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Ajudeu-nos amb la traducció" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Useu aquesta adreça per connectar amb ownCloud des del gestor de fitxers" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Versió" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -87,13 +87,99 @@ msgstr "Text" msgid "Images" msgstr "Obrázky" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "Váš webový server není správně nastaven pro umožnění synchronizace, protože rozhraní WebDAV je rozbité." -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "Zkonzultujte, prosím, průvodce instalací." diff --git a/l10n/cs_CZ/settings.po b/l10n/cs_CZ/settings.po index d78f97af88..0333417b3b 100644 --- a/l10n/cs_CZ/settings.po +++ b/l10n/cs_CZ/settings.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" @@ -183,95 +183,87 @@ msgstr "Placená podpora" msgid "You have used %s of the available %s" msgstr "Používáte %s z %s dostupných" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Klienti" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Stáhnout klienty pro počítač" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Stáhnout klienta pro android" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Stáhnout klienta pro iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Heslo" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Vaše heslo bylo změněno" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Vaše heslo nelze změnit" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Současné heslo" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nové heslo" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Změnit heslo" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Zobrazované jméno" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "Vaše zobrazované jméno bylo změněno" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "Nelze změnit vaše zobrazované jméno" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "Změnit zobrazované jméno" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "E-mail" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Vaše e-mailová adresa" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Pro povolení změny hesla vyplňte adresu e-mailu" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Jazyk" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Pomoci s překladem" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Použijte tuto adresu pro připojení k vašemu ownCloud skrze správce souborů" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Verze" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n" "MIME-Version: 1.0\n" @@ -88,13 +88,99 @@ msgstr "SMS" msgid "Images" msgstr "Billeder" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/da/settings.po b/l10n/da/settings.po index d743660c24..9160a7711a 100644 --- a/l10n/da/settings.po +++ b/l10n/da/settings.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n" "MIME-Version: 1.0\n" @@ -187,95 +187,87 @@ msgstr "Kommerciel support" msgid "You have used %s of the available %s" msgstr "Du har brugt %s af den tilgængelige %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Klienter" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Hent Desktop Klienter" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Hent Android Klient" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Hent iOS Klient" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Kodeord" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Din adgangskode blev ændret" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Ude af stand til at ændre dit kodeord" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Nuværende adgangskode" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Ny adgangskode" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Skift kodeord" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Email" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Din emailadresse" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Indtast en emailadresse for at kunne få påmindelse om adgangskode" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Sprog" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Hjælp med oversættelsen" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Brug denne adresse til at oprette forbindelse til din ownCloud i din filstyring" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Version" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" @@ -92,13 +92,99 @@ msgstr "Text" msgid "Images" msgstr "Bilder" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/de/settings.po b/l10n/de/settings.po index 6ae8b00eda..45b80edf9d 100644 --- a/l10n/de/settings.po +++ b/l10n/de/settings.po @@ -26,8 +26,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" @@ -196,95 +196,87 @@ msgstr "Kommerzieller Support" msgid "You have used %s of the available %s" msgstr "Du verwendest %s der verfügbaren %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Clients" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Desktop-Client herunterladen" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Android-Client herunterladen" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "iOS-Client herunterladen" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Passwort" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Dein Passwort wurde geändert." -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Passwort konnte nicht geändert werden" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Aktuelles Passwort" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Neues Passwort" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Passwort ändern" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Anzeigename" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "E-Mail" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Deine E-Mail-Adresse" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Trage eine E-Mail-Adresse ein, um die Passwort-Wiederherstellung zu aktivieren." -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Sprache" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Hilf bei der Übersetzung" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Verwende diese Adresse, um Deinen Dateimanager mit Deiner ownCloud zu verbinden" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Version" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" @@ -93,13 +93,99 @@ msgstr "Text" msgid "Images" msgstr "Bilder" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po index 7d2e04f58b..2e63866f19 100644 --- a/l10n/de_DE/settings.po +++ b/l10n/de_DE/settings.po @@ -29,8 +29,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" @@ -199,95 +199,87 @@ msgstr "Kommerzieller Support" msgid "You have used %s of the available %s" msgstr "Sie verwenden %s der verfügbaren %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Clients" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Desktop-Client herunterladen" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Android-Client herunterladen" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "iOS-Client herunterladen" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Passwort" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Ihr Passwort wurde geändert." -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Das Passwort konnte nicht geändert werden" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Aktuelles Passwort" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Neues Passwort" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Passwort ändern" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Anzeigename" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "Dein Anzeigename wurde geändert" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "Das Ändern deines Anzeigenamens ist nicht möglich" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "Anzeigenamen ändern" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "E-Mail" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Ihre E-Mail-Adresse" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Bitte tragen Sie eine E-Mail-Adresse ein, um die Passwort-Wiederherstellung zu aktivieren." -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Sprache" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Helfen Sie bei der Übersetzung" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Verwenden Sie diese Adresse, um Ihren Dateimanager mit Ihrer ownCloud zu verbinden" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Version" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" @@ -87,13 +87,99 @@ msgstr "Κείμενο" msgid "Images" msgstr "Εικόνες" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/el/settings.po b/l10n/el/settings.po index 5a14d240bb..69ad471da5 100644 --- a/l10n/el/settings.po +++ b/l10n/el/settings.po @@ -19,8 +19,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" @@ -189,95 +189,87 @@ msgstr "Εμπορική Υποστήριξη" msgid "You have used %s of the available %s" msgstr "Χρησιμοποιήσατε %s από διαθέσιμα %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Πελάτες" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Λήψη Προγραμμάτων για Σταθερούς Υπολογιστές" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Λήψη Προγράμματος Android" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Λήψη Προγράμματος iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Συνθηματικό" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Το συνθηματικό σας έχει αλλάξει" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Δεν ήταν δυνατή η αλλαγή του κωδικού πρόσβασης" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Τρέχων συνθηματικό" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Νέο συνθηματικό" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Αλλαγή συνθηματικού" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Email" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Η διεύθυνση ηλεκτρονικού ταχυδρομείου σας" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Συμπληρώστε μια διεύθυνση ηλεκτρονικού ταχυδρομείου για να ενεργοποιηθεί η ανάκτηση συνθηματικού" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Γλώσσα" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Βοηθήστε στη μετάφραση" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Χρήση αυτής της διεύθυνσης για σύνδεση στο ownCloud με τον διαχειριστή αρχείων σας" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Έκδοση" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" @@ -86,13 +86,99 @@ msgstr "Teksto" msgid "Images" msgstr "Bildoj" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/eo/settings.po b/l10n/eo/settings.po index 3ffe8c68b7..b01137e99a 100644 --- a/l10n/eo/settings.po +++ b/l10n/eo/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" @@ -180,95 +180,87 @@ msgstr "Komerca subteno" msgid "You have used %s of the available %s" msgstr "Vi uzas %s el la haveblaj %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Klientoj" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Elŝuti labortablajn klientojn" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Elŝuti Android-klienton" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Elŝuti iOS-klienton" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Pasvorto" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Via pasvorto ŝanĝiĝis" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Ne eblis ŝanĝi vian pasvorton" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Nuna pasvorto" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nova pasvorto" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Ŝanĝi la pasvorton" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Retpoŝto" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Via retpoŝta adreso" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Enigu retpoŝtadreson por kapabligi pasvortan restaŭron" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Lingvo" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Helpu traduki" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Uzu ĉi tiun adreson por konekti al via ownCloud vian dosieradministrilon" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Eldono" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:41+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -91,13 +91,99 @@ msgstr "Texto" msgid "Images" msgstr "Imágenes" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando." -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "Por favor, vuelva a comprobar las guías de instalación." diff --git a/l10n/es/settings.po b/l10n/es/settings.po index 28a2afba54..404c0a4025 100644 --- a/l10n/es/settings.po +++ b/l10n/es/settings.po @@ -20,8 +20,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" @@ -190,95 +190,87 @@ msgstr "Soporte Comercial" msgid "You have used %s of the available %s" msgstr "Ha usado %s de %s disponibles" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Clientes" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Descargar clientes de escritorio" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Descargar cliente para android" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Descargar cliente para iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Contraseña" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Su contraseña ha sido cambiada" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "No se ha podido cambiar tu contraseña" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Contraseña actual" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nueva contraseña:" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Cambiar contraseña" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Nombre a mostrar" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "Su nombre fue cambiado" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "Incapaz de cambiar su nombre" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "Cambiar nombre" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Correo electrónico" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Tu dirección de correo" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Escribe una dirección de correo electrónico para restablecer la contraseña" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Idioma" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Ayúdanos a traducir" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Use esta dirección para conectarse a su cuenta de ownCloud en el administrador de archivos" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Version" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" @@ -87,13 +87,99 @@ msgstr "Texto" msgid "Images" msgstr "Imágenes" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/es_AR/settings.po b/l10n/es_AR/settings.po index f70c009075..008d05eb17 100644 --- a/l10n/es_AR/settings.po +++ b/l10n/es_AR/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" @@ -180,95 +180,87 @@ msgstr "Soporte comercial" msgid "You have used %s of the available %s" msgstr "Usaste %s de los %s disponibles" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Clientes" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Descargar clientes de escritorio" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Descargar cliente de Android" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Descargar cliente de iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Contraseña" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Tu contraseña fue cambiada" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "No fue posible cambiar tu contraseña" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Contraseña actual" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nueva contraseña:" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Cambiar contraseña" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Nombre a mostrar" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Correo electrónico" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Tu dirección de e-mail" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Escribí una dirección de correo electrónico para restablecer la contraseña" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Idioma" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Ayudanos a traducir" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Utiliza esta dirección para conectarte con ownCloud en tu Administrador de Archivos" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Versión" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n" "MIME-Version: 1.0\n" @@ -86,13 +86,99 @@ msgstr "Tekst" msgid "Images" msgstr "Pildid" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/et_EE/settings.po b/l10n/et_EE/settings.po index 601caf374a..9b6a08fafc 100644 --- a/l10n/et_EE/settings.po +++ b/l10n/et_EE/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n" "MIME-Version: 1.0\n" @@ -179,95 +179,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Kliendid" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" +msgid "Get the apps to sync your files" msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Parool" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Sinu parooli on muudetud" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Sa ei saa oma parooli muuta" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Praegune parool" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Uus parool" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Muuda parooli" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "E-post" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Sinu e-posti aadress" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Parooli taastamise sisse lülitamiseks sisesta e-posti aadress" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Keel" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Aita tõlkida" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" @@ -87,13 +87,99 @@ msgstr "Testua" msgid "Images" msgstr "Irudiak" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/eu/settings.po b/l10n/eu/settings.po index de1a02251e..2051f739da 100644 --- a/l10n/eu/settings.po +++ b/l10n/eu/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" @@ -181,95 +181,87 @@ msgstr "Babes komertziala" msgid "You have used %s of the available %s" msgstr "Dagoeneko %s erabili duzu eskuragarri duzun %setatik" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Bezeroak" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Deskargatu mahaigainerako bezeroak" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Deskargatu Android bezeroa" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Deskargatu iOS bezeroa" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Pasahitza" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Zere pasahitza aldatu da" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Ezin izan da zure pasahitza aldatu" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Uneko pasahitza" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Pasahitz berria" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Aldatu pasahitza" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Bistaratze Izena" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "E-Posta" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Zure e-posta" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Idatz ezazu e-posta bat pasahitza berreskuratu ahal izateko" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Hizkuntza" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Lagundu itzultzen" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Erabili helbide hau zure fitxategi kudeatzailean zure ownCloudera konektatzeko" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Bertsioa" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" @@ -87,13 +87,99 @@ msgstr "متن" msgid "Images" msgstr "تصاویر" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/fa/settings.po b/l10n/fa/settings.po index 9b19251208..60d6c3d51d 100644 --- a/l10n/fa/settings.po +++ b/l10n/fa/settings.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" @@ -33,7 +33,7 @@ msgstr "خطا در اعتبار سنجی" #: ajax/changedisplayname.php:32 msgid "Unable to change display name" -msgstr "" +msgstr "امکان تغییر نام نمایشی شما وجود ندارد" #: ajax/creategroup.php:10 msgid "Group already exists" @@ -73,7 +73,7 @@ msgstr "درخواست غیر قابل قبول" #: ajax/togglegroups.php:12 msgid "Admins can't remove themself from the admin group" -msgstr "" +msgstr "مدیران نمی توانند خود را از گروه مدیریت حذف کنند" #: ajax/togglegroups.php:28 #, php-format @@ -155,11 +155,11 @@ msgstr "به روز رسانی" #: templates/help.php:3 msgid "User Documentation" -msgstr "" +msgstr "مستندات کاربر" #: templates/help.php:4 msgid "Administrator Documentation" -msgstr "" +msgstr "مستندات مدیر" #: templates/help.php:6 msgid "Online Documentation" @@ -175,102 +175,94 @@ msgstr "" #: templates/help.php:11 msgid "Commercial Support" -msgstr "" +msgstr "پشتیبانی تجاری" #: templates/personal.php:8 #, php-format msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "مشتریان" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" +msgid "Get the apps to sync your files" msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "گذرواژه" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "رمز عبور شما تغییر یافت" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "ناتوان در تغییر گذرواژه" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "گذرواژه کنونی" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "گذرواژه جدید" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "تغییر گذر واژه" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" -msgstr "" - -#: templates/personal.php:42 -msgid "Your display name was changed" -msgstr "" - -#: templates/personal.php:43 -msgid "Unable to change your display name" -msgstr "" - -#: templates/personal.php:46 -msgid "Change display name" -msgstr "" +msgstr "نام نمایشی" #: templates/personal.php:55 +msgid "Your display name was changed" +msgstr "نام نمایشی شما تغییر یافت" + +#: templates/personal.php:56 +msgid "Unable to change your display name" +msgstr "امکان تغییر نام نمایشی شما وجود ندارد" + +#: templates/personal.php:59 +msgid "Change display name" +msgstr "تغییر نام نمایشی" + +#: templates/personal.php:68 msgid "Email" msgstr "پست الکترونیکی" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "پست الکترونیکی شما" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "پست الکترونیکی را پرکنید تا بازیابی گذرواژه فعال شود" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "زبان" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "به ترجمه آن کمک کنید" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "نسخه" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -86,13 +86,99 @@ msgstr "Teksti" msgid "Images" msgstr "Kuvat" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "Lue tarkasti asennusohjeet." diff --git a/l10n/fi_FI/settings.po b/l10n/fi_FI/settings.po index e5363fcee7..cf2066d2f0 100644 --- a/l10n/fi_FI/settings.po +++ b/l10n/fi_FI/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" @@ -180,95 +180,87 @@ msgstr "Kaupallinen tuki" msgid "You have used %s of the available %s" msgstr "Käytössäsi on %s/%s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Asiakkaat" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Lataa työpöytäsovelluksia" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Lataa Android-sovellus" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Lataa iOS-sovellus" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Salasana" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Salasanasi vaihdettiin" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Salasanaasi ei voitu vaihtaa" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Nykyinen salasana" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Uusi salasana" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Vaihda salasana" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Näyttönimi" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "Näyttönimesi muutettiin" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "Näyttönimen muuttaminen epäonnistui" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "Muuta näyttönimeä" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Sähköposti" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Sähköpostiosoitteesi" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Anna sähköpostiosoitteesi, jotta unohdettu salasana on mahdollista palauttaa" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Kieli" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Auta kääntämisessä" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Käytä tätä osoitetta yhdistäessäsi ownCloudiisi tiedostonhallintaa käyttäen" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Versio" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:41+0000\n" +"Last-Translator: I Robot \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -88,13 +88,99 @@ msgstr "Texte" msgid "Images" msgstr "Images" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "Votre serveur web, n'est pas correctement configuré pour permettre la synchronisation des fichiers, car l'interface WebDav ne fonctionne pas comme il faut." -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "Veuillez vous référer au guide d'installation." diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po index e9bd5d1095..0875712ecf 100644 --- a/l10n/fr/settings.po +++ b/l10n/fr/settings.po @@ -24,8 +24,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" @@ -194,95 +194,87 @@ msgstr "Support commercial" msgid "You have used %s of the available %s" msgstr "Vous avez utilisé %s des %s disponibles" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Clients" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Télécharger le client de synchronisation pour votre ordinateur" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Télécharger le client Android" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Télécharger le client iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Mot de passe" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Votre mot de passe a été changé" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Impossible de changer votre mot de passe" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Mot de passe actuel" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nouveau mot de passe" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Changer de mot de passe" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Nom affiché" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "Votre nom d'affichage a bien été modifié" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "Impossible de modifier votre nom d'affichage" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "Changer le nom affiché" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "E-mail" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Votre adresse e-mail" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Entrez votre adresse e-mail pour permettre la réinitialisation du mot de passe" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Langue" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Aidez à traduire" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Utiliser cette adresse pour vous connecter à ownCloud dans votre gestionnaire de fichiers" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Version" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" @@ -159,59 +159,59 @@ msgstr "novembro" msgid "December" msgstr "decembro" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "Configuracións" -#: js/js.js:764 +#: js/js.js:767 msgid "seconds ago" msgstr "segundos atrás" -#: js/js.js:765 +#: js/js.js:768 msgid "1 minute ago" msgstr "hai 1 minuto" -#: js/js.js:766 +#: js/js.js:769 msgid "{minutes} minutes ago" msgstr "hai {minutes} minutos" -#: js/js.js:767 +#: js/js.js:770 msgid "1 hour ago" msgstr "hai 1 hora" -#: js/js.js:768 +#: js/js.js:771 msgid "{hours} hours ago" msgstr "hai {hours} horas" -#: js/js.js:769 +#: js/js.js:772 msgid "today" msgstr "hoxe" -#: js/js.js:770 +#: js/js.js:773 msgid "yesterday" msgstr "onte" -#: js/js.js:771 +#: js/js.js:774 msgid "{days} days ago" msgstr "hai {days} días" -#: js/js.js:772 +#: js/js.js:775 msgid "last month" msgstr "último mes" -#: js/js.js:773 +#: js/js.js:776 msgid "{months} months ago" msgstr "hai {months} meses" -#: js/js.js:774 +#: js/js.js:777 msgid "months ago" msgstr "meses atrás" -#: js/js.js:775 +#: js/js.js:778 msgid "last year" msgstr "último ano" -#: js/js.js:776 +#: js/js.js:779 msgid "years ago" msgstr "anos atrás" @@ -241,8 +241,8 @@ msgid "The object type is not specified." msgstr "Non se especificou o tipo de obxecto." #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "Erro" @@ -262,7 +262,7 @@ msgstr "Compartir" msgid "Shared" msgstr "" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "Produciuse un erro ao compartir" @@ -358,23 +358,23 @@ msgstr "eliminar" msgid "share" msgstr "compartir" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "Protexido con contrasinal" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "Produciuse un erro ao retirar a data de caducidade" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "Produciuse un erro ao definir a data de caducidade" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "Enviando..." -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "Correo enviado" diff --git a/l10n/gl/files.po b/l10n/gl/files.po index 4440639947..469ef89426 100644 --- a/l10n/gl/files.po +++ b/l10n/gl/files.po @@ -4,14 +4,15 @@ # # Translators: # antiparvos , 2012-2013. +# , 2013. # Xosé M. Lamas , 2012-2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 11:40+0000\n" +"Last-Translator: mbouzada \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -27,30 +28,30 @@ msgstr "Non se moveu %s - Xa existe un ficheiro con ese nome." #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "Non se puido mover %s" +msgstr "Non foi posíbel mover %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "Non se pode renomear o ficheiro" +msgstr "Non é posíbel renomear o ficheiro" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" -msgstr "Non se subiu ningún ficheiro. Erro descoñecido." +msgstr "Non foi enviado ningún ficheiro. Produciuse un erro descoñecido." #: ajax/upload.php:26 msgid "There is no error, the file uploaded with success" -msgstr "Non hai erros. O ficheiro enviouse correctamente" +msgstr "Non se produciu ningún erro. O ficheiro enviouse correctamente" #: ajax/upload.php:27 msgid "" "The uploaded file exceeds the upload_max_filesize directive in php.ini: " -msgstr "O ficheiro subido excede a directiva indicada polo tamaño_máximo_de_subida de php.ini" +msgstr "O ficheiro enviado excede a directiva indicada por upload_max_filesize de php.ini:" #: ajax/upload.php:29 msgid "" "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in " "the HTML form" -msgstr "O ficheiro enviado supera a directiva MAX_FILE_SIZE que foi indicada no formulario HTML" +msgstr "O ficheiro enviado excede a directiva MAX_FILE_SIZE que foi indicada no formulario HTML" #: ajax/upload.php:31 msgid "The uploaded file was only partially uploaded" @@ -66,11 +67,11 @@ msgstr "Falta un cartafol temporal" #: ajax/upload.php:34 msgid "Failed to write to disk" -msgstr "Erro ao escribir no disco" +msgstr "Produciuse un erro ao escribir no disco" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Non hai espazo de almacenamento abondo" #: ajax/upload.php:83 msgid "Invalid directory." @@ -82,7 +83,7 @@ msgstr "Ficheiros" #: js/fileactions.js:116 msgid "Delete permanently" -msgstr "" +msgstr "Eliminar permanentemente" #: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" @@ -90,7 +91,7 @@ msgstr "Eliminar" #: js/fileactions.js:184 msgid "Rename" -msgstr "Mudar o nome" +msgstr "Renomear" #: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407 #: js/files.js:438 @@ -123,47 +124,47 @@ msgstr "desfacer" #: js/filelist.js:297 msgid "replaced {new_name} with {old_name}" -msgstr "substituír {new_name} polo {old_name}" +msgstr "substituír {new_name} por {old_name}" #: js/filelist.js:322 msgid "perform delete operation" -msgstr "" +msgstr "realizar a operación de eliminación" #: js/files.js:52 msgid "'.' is an invalid file name." -msgstr "'.' é un nonme de ficheiro non válido" +msgstr "«.» é un nome de ficheiro incorrecto" #: js/files.js:56 msgid "File name cannot be empty." -msgstr "O nome de ficheiro non pode estar baldeiro" +msgstr "O nome de ficheiro non pode estar baleiro" #: js/files.js:64 msgid "" "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not " "allowed." -msgstr "Nome non válido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non se permiten." +msgstr "Nome incorrecto, non se permite «\\», «/», «<», «>», «:», «\"», «|», «?» e «*»." #: js/files.js:78 msgid "Your storage is full, files can not be updated or synced anymore!" -msgstr "" +msgstr "O seu espazo de almacenamento está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!" #: js/files.js:82 msgid "Your storage is almost full ({usedSpacePercent}%)" -msgstr "" +msgstr "O seu espazo de almacenamento está case cheo ({usedSpacePercent}%)" #: js/files.js:224 msgid "" "Your download is being prepared. This might take some time if the files are " "big." -msgstr "" +msgstr "Está a prepararse a súa descarga. Isto pode levar bastante tempo se os ficheiros son grandes." #: js/files.js:261 msgid "Unable to upload your file as it is a directory or has 0 bytes" -msgstr "Non se puido subir o ficheiro pois ou é un directorio ou ten 0 bytes" +msgstr "Non foi posíbel enviar o ficheiro pois ou é un directorio ou ten 0 bytes" #: js/files.js:261 msgid "Upload Error" -msgstr "Erro na subida" +msgstr "Produciuse un erro no envío" #: js/files.js:272 msgid "Close" @@ -171,54 +172,54 @@ msgstr "Pechar" #: js/files.js:311 msgid "1 file uploading" -msgstr "1 ficheiro subíndose" +msgstr "Enviándose 1 ficheiro" #: js/files.js:314 js/files.js:369 js/files.js:384 msgid "{count} files uploading" -msgstr "{count} ficheiros subíndose" +msgstr "Enviandose {count} ficheiros" #: js/files.js:387 js/files.js:422 msgid "Upload cancelled." -msgstr "Subida cancelada." +msgstr "Envío cancelado." #: js/files.js:496 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." -msgstr "A subida do ficheiro está en curso. Saír agora da páxina cancelará a subida." +msgstr "O envío do ficheiro está en proceso. Saír agora da páxina cancelará o envío." #: js/files.js:569 msgid "URL cannot be empty." -msgstr "URL non pode quedar baleiro." +msgstr "O URL non pode quedar baleiro." #: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" -msgstr "Nome de cartafol non válido. O uso de 'Shared' está reservado por Owncloud" +msgstr "Nome de cartafol incorrecto. O uso de «Shared» está reservado por Owncloud" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "Nome" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "Tamaño" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "Modificado" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "1 cartafol" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "{count} cartafoles" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "1 ficheiro" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "{count} ficheiros" @@ -232,11 +233,11 @@ msgstr "Manexo de ficheiro" #: templates/admin.php:7 msgid "Maximum upload size" -msgstr "Tamaño máximo de envío" +msgstr "Tamaño máximo do envío" #: templates/admin.php:10 msgid "max. possible: " -msgstr "máx. posible: " +msgstr "máx. posíbel: " #: templates/admin.php:15 msgid "Needed for multi-file and folder downloads." @@ -252,7 +253,7 @@ msgstr "0 significa ilimitado" #: templates/admin.php:22 msgid "Maximum input size for ZIP files" -msgstr "Tamaño máximo de descarga para os ZIP" +msgstr "Tamaño máximo de descarga para os ficheiros ZIP" #: templates/admin.php:26 msgid "Save" @@ -272,19 +273,19 @@ msgstr "Cartafol" #: templates/index.php:14 msgid "From link" -msgstr "Dende a ligazón" +msgstr "Desde a ligazón" #: templates/index.php:40 msgid "Trash bin" -msgstr "" +msgstr "Cesto do lixo" #: templates/index.php:46 msgid "Cancel upload" -msgstr "Cancelar a subida" +msgstr "Cancelar o envío" #: templates/index.php:59 msgid "Nothing in here. Upload something!" -msgstr "Nada por aquí. Envía algo." +msgstr "Aquí non hai nada por aquí. Envíe algo." #: templates/index.php:73 msgid "Download" @@ -302,11 +303,11 @@ msgstr "Envío demasiado grande" msgid "" "The files you are trying to upload exceed the maximum size for file uploads " "on this server." -msgstr "Os ficheiros que trata de subir superan o tamaño máximo permitido neste servidor" +msgstr "Os ficheiros que tenta enviar exceden do tamaño máximo permitido neste servidor" #: templates/index.php:112 msgid "Files are being scanned, please wait." -msgstr "Estanse analizando os ficheiros. Agarda." +msgstr "Estanse analizando os ficheiros. Agarde." #: templates/index.php:115 msgid "Current scanning" @@ -314,4 +315,4 @@ msgstr "Análise actual" #: templates/upgrade.php:2 msgid "Upgrading filesystem cache..." -msgstr "" +msgstr "Anovando a caché do sistema de ficheiros..." diff --git a/l10n/gl/files_encryption.po b/l10n/gl/files_encryption.po index ae8181660a..0f66e72f33 100644 --- a/l10n/gl/files_encryption.po +++ b/l10n/gl/files_encryption.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# , 2013. # Xosé M. Lamas , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:09+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 10:01+0000\n" +"Last-Translator: mbouzada \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,16 +25,16 @@ msgstr "Cifrado" #: templates/settings-personal.php:7 msgid "File encryption is enabled." -msgstr "" +msgstr "O cifrado de ficheiros está activado" #: templates/settings-personal.php:11 msgid "The following file types will not be encrypted:" -msgstr "" +msgstr "Os seguintes tipos de ficheiros non van seren cifrados:" #: templates/settings.php:7 msgid "Exclude the following file types from encryption:" -msgstr "" +msgstr "Excluír os seguintes tipos de ficheiros do cifrado:" #: templates/settings.php:12 msgid "None" -msgstr "Nada" +msgstr "Ningún" diff --git a/l10n/gl/files_trashbin.po b/l10n/gl/files_trashbin.po index 9e9dd72adb..b1c8fe7992 100644 --- a/l10n/gl/files_trashbin.po +++ b/l10n/gl/files_trashbin.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 11:20+0000\n" +"Last-Translator: mbouzada \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,20 +21,20 @@ msgstr "" #: ajax/delete.php:22 #, php-format msgid "Couldn't delete %s permanently" -msgstr "" +msgstr "Non foi posíbel eliminar %s permanente" #: ajax/undelete.php:41 #, php-format msgid "Couldn't restore %s" -msgstr "" +msgstr "Non foi posíbel restaurar %s" #: js/trash.js:7 js/trash.js:94 msgid "perform restore operation" -msgstr "" +msgstr "realizar a operación de restauración" #: js/trash.js:33 msgid "delete file permanently" -msgstr "" +msgstr "eliminar o ficheiro permanentemente" #: js/trash.js:125 templates/index.php:17 msgid "Name" @@ -41,7 +42,7 @@ msgstr "Nome" #: js/trash.js:126 templates/index.php:27 msgid "Deleted" -msgstr "" +msgstr "Eliminado" #: js/trash.js:135 msgid "1 folder" @@ -61,7 +62,7 @@ msgstr "{count} ficheiros" #: templates/index.php:9 msgid "Nothing in here. Your trash bin is empty!" -msgstr "" +msgstr "Aquí non hai nada. O cesto do lixo está baleiro!" #: templates/index.php:20 templates/index.php:22 msgid "Restore" diff --git a/l10n/gl/lib.po b/l10n/gl/lib.po index dfe0a1f310..12ac1761ec 100644 --- a/l10n/gl/lib.po +++ b/l10n/gl/lib.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# , 2013. # , 2012. # Miguel Branco , 2012. # Xosé M. Lamas , 2012-2013. @@ -10,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" @@ -46,7 +47,7 @@ msgstr "Administración" #: files.php:202 msgid "ZIP download is turned off." -msgstr "As descargas ZIP están desactivadas" +msgstr "As descargas ZIP están desactivadas." #: files.php:203 msgid "Files need to be downloaded one by one." @@ -62,7 +63,7 @@ msgstr "Os ficheiros seleccionados son demasiado grandes como para xerar un fich #: helper.php:226 msgid "couldn't be determined" -msgstr "non puido ser determinado" +msgstr "non foi posíbel determinalo" #: json.php:28 msgid "Application is not enabled" @@ -88,20 +89,106 @@ msgstr "Texto" msgid "Images" msgstr "Imaxes" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "O seu servidor web non está aínda configurado adecuadamente para permitir a sincronización de ficheiros xa que semella que a interface WebDAV non está a funcionar." -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Volva comprobar as guías de instalación" #: template.php:113 msgid "seconds ago" -msgstr "hai segundos" +msgstr "segundos atrás" #: template.php:114 msgid "1 minute ago" diff --git a/l10n/gl/settings.po b/l10n/gl/settings.po index f4022c9f2b..1668054b2e 100644 --- a/l10n/gl/settings.po +++ b/l10n/gl/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" @@ -180,95 +180,87 @@ msgstr "Asistencia comercial" msgid "You have used %s of the available %s" msgstr "Te en uso %s do total dispoñíbel de %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Clientes" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Descargar clientes para escritorio" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Descargar clientes para Android" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Descargar clientes ra iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Contrasinal" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "O seu contrasinal foi cambiado" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Non é posíbel cambiar o seu contrasinal" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Contrasinal actual" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Novo contrasinal" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Cambiar o contrasinal" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Correo" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "O seu enderezo de correo" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Escriba un enderezo de correo para activar a recuperación do contrasinal" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Idioma" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Axude na tradución" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Utilice este enderezo para conectarse ao seu ownCloud co administrador de ficheiros" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Versión" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the , 2013. # , 2012. # Miguel Branco, 2012. # Xosé M. Lamas , 2013. @@ -10,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-19 00:04+0100\n" -"PO-Revision-Date: 2013-01-18 06:15+0000\n" -"Last-Translator: Xosé M. Lamas \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 11:20+0000\n" +"Last-Translator: mbouzada \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -28,9 +29,9 @@ msgstr "Autenticación WebDAV" msgid "URL: http://" msgstr "URL: http://" -#: templates/settings.php:6 +#: templates/settings.php:7 msgid "" "ownCloud will send the user credentials to this URL. This plugin checks the " "response and will interpret the HTTP statuscodes 401 and 403 as invalid " "credentials, and all other responses as valid credentials." -msgstr "ownCloud enviará as credenciais do usuario a esta URL. Este conector comproba a resposta e interpretará os códigos de estado 401 e 403 como credenciais non válidas, e todas as outras respostas como credenciais válidas." +msgstr "ownCloud enviará as credenciais do usuario a este URL. Este engadido comproba a resposta e interpretará os códigos de estado HTTP 401 e 403 como credenciais incorrectas, e todas as outras respostas como credenciais correctas." diff --git a/l10n/he/lib.po b/l10n/he/lib.po index fbafbd81e4..499a5bf35a 100644 --- a/l10n/he/lib.po +++ b/l10n/he/lib.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n" "MIME-Version: 1.0\n" @@ -87,13 +87,99 @@ msgstr "טקסט" msgid "Images" msgstr "תמונות" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/he/settings.po b/l10n/he/settings.po index 2fee13d929..be030e636c 100644 --- a/l10n/he/settings.po +++ b/l10n/he/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n" "MIME-Version: 1.0\n" @@ -181,95 +181,87 @@ msgstr "תמיכה בתשלום" msgid "You have used %s of the available %s" msgstr "השתמשת ב־%s מתוך %s הזמינים לך" -#: templates/personal.php:12 -msgid "Clients" -msgstr "לקוחות" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "הורד לתוכנה למחשב" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "הורד תוכנה לאנדרואיד" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "הורד תוכנה לiOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "ססמה" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "הססמה שלך הוחלפה" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "לא ניתן לשנות את הססמה שלך" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "ססמה נוכחית" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "ססמה חדשה" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "שינוי ססמה" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "דוא״ל" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "כתובת הדוא״ל שלך" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "נא למלא את כתובת הדוא״ל שלך כדי לאפשר שחזור ססמה" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "פה" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "עזרה בתרגום" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "השתמש בכתובת זאת על מנת להתחבר אל ownCloud דרך סייר קבצים." -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "גרסא" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n" "MIME-Version: 1.0\n" @@ -85,13 +85,99 @@ msgstr "" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/hi/settings.po b/l10n/hi/settings.po index 86afd8794e..2388add5fd 100644 --- a/l10n/hi/settings.po +++ b/l10n/hi/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n" "MIME-Version: 1.0\n" @@ -177,95 +177,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "पासवर्ड" - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "पासवर्ड" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "नया पासवर्ड" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n" "MIME-Version: 1.0\n" @@ -85,13 +85,99 @@ msgstr "Tekst" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/hr/settings.po b/l10n/hr/settings.po index 38cc52f1a3..842287d3fc 100644 --- a/l10n/hr/settings.po +++ b/l10n/hr/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n" "MIME-Version: 1.0\n" @@ -180,95 +180,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Klijenti" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "Lozinka" - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "Lozinka" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Nemoguće promijeniti lozinku" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Trenutna lozinka" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nova lozinka" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Izmjena lozinke" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "e-mail adresa" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Vaša e-mail adresa" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Ispunite vase e-mail adresa kako bi se omogućilo oporavak lozinke" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Jezik" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Pomoć prevesti" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" @@ -88,13 +88,99 @@ msgstr "Szöveg" msgid "Images" msgstr "Képek" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/hu_HU/settings.po b/l10n/hu_HU/settings.po index a0057f4b4a..858bd01dcd 100644 --- a/l10n/hu_HU/settings.po +++ b/l10n/hu_HU/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" @@ -180,95 +180,87 @@ msgstr "Megvásárolható támogatás" msgid "You have used %s of the available %s" msgstr "Az Ön tárterület-felhasználása jelenleg: %s. Maximálisan ennyi áll rendelkezésére: %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Kliensek" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Desktop kliensprogramok letöltése" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Android kliens letöltése" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "iOS kliens letöltése" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Jelszó" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "A jelszava megváltozott" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "A jelszó nem változtatható meg" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "A jelenlegi jelszó" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Az új jelszó" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "A jelszó megváltoztatása" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Email" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Az Ön email címe" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Adja meg az email címét, hogy jelszó-emlékeztetőt kérhessen, ha elfelejtette a jelszavát!" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Nyelv" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Segítsen a fordításban!" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Ennek a címnek a megadásával a WebDAV-protokollon keresztül saját gépének fájlkezelőjével is is elérheti az állományait." -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Verzió" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n" "MIME-Version: 1.0\n" @@ -85,13 +85,99 @@ msgstr "Texto" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/ia/settings.po b/l10n/ia/settings.po index a68c1ff556..e63d5efd07 100644 --- a/l10n/ia/settings.po +++ b/l10n/ia/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n" "MIME-Version: 1.0\n" @@ -179,95 +179,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Clientes" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "Contrasigno" - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "Contrasigno" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Non pote cambiar tu contrasigno" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Contrasigno currente" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nove contrasigno" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Cambiar contrasigno" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "E-posta" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Tu adresse de e-posta" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Linguage" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Adjuta a traducer" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" @@ -87,13 +87,99 @@ msgstr "teks" msgid "Images" msgstr "Gambar" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/id/settings.po b/l10n/id/settings.po index 60ef068bce..78a5b777e3 100644 --- a/l10n/id/settings.po +++ b/l10n/id/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" @@ -181,95 +181,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Klien" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "Password" - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "Password" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Tidak dapat merubah password anda" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Password saat ini" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "kata kunci baru" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Rubah password" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Email" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Alamat email anda" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Masukkan alamat email untuk mengaktifkan pemulihan password" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Bahasa" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Bantu menerjemahkan" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n" "MIME-Version: 1.0\n" @@ -86,13 +86,99 @@ msgstr "Texti" msgid "Images" msgstr "Myndir" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/is/settings.po b/l10n/is/settings.po index 72097fa936..985e8df4f9 100644 --- a/l10n/is/settings.po +++ b/l10n/is/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n" "MIME-Version: 1.0\n" @@ -178,95 +178,87 @@ msgstr "Borgaður stuðningur" msgid "You have used %s of the available %s" msgstr "Þú hefur notað %s af tiltæku %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Notendahugbúnaður" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Hlaða niður notendahugbúnaði" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Hlaða niður Andoid hugbúnaði" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Hlaða niður iOS hugbúnaði" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Lykilorð" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Lykilorði þínu hefur verið breytt" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Ekki tókst að breyta lykilorðinu þínu" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Núverandi lykilorð" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nýtt lykilorð" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Breyta lykilorði" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Netfang" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Netfangið þitt" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Sláðu inn netfangið þitt til að virkja endurheimt á lykilorði" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Tungumál" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Hjálpa við þýðingu" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Notaðu þessa vefslóð til að tengjast ownCloud svæðinu þínu" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Útgáfa" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -86,13 +86,99 @@ msgstr "Testo" msgid "Images" msgstr "Immagini" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata." -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "Leggi attentamente le guide d'installazione." diff --git a/l10n/it/settings.po b/l10n/it/settings.po index 30430dd4bf..59d52e0b9d 100644 --- a/l10n/it/settings.po +++ b/l10n/it/settings.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:41+0000\n" +"Last-Translator: Vincenzo Reale \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -184,95 +184,87 @@ msgstr "Supporto commerciale" msgid "You have used %s of the available %s" msgstr "Hai utilizzato %s dei %s disponibili" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Client" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Scarica client desktop" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Scarica client Android" +msgid "Get the apps to sync your files" +msgstr "Scarica le applicazioni per sincronizzare i tuoi file" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Scarica client iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Password" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "La tua password è cambiata" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Modifica password non riuscita" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Password attuale" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nuova password" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Modifica password" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Nome visualizzato" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "Il tuo nome visualizzato è stato cambiato" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "Impossibile cambiare il tuo nome visualizzato" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "Cambia il nome visualizzato" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Email" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Il tuo indirizzo email" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Inserisci il tuo indirizzo email per abilitare il recupero della password" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Lingua" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Migliora la traduzione" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Usa questo indirizzo per connetterti al tuo ownCloud dal tuo gestore file" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Versione" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" @@ -87,13 +87,99 @@ msgstr "TTY TDD" msgid "Images" msgstr "画像" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/ja_JP/settings.po b/l10n/ja_JP/settings.po index 851cc61113..a106c52986 100644 --- a/l10n/ja_JP/settings.po +++ b/l10n/ja_JP/settings.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" @@ -182,95 +182,87 @@ msgstr "コマーシャルサポート" msgid "You have used %s of the available %s" msgstr "現在、%s / %s を利用しています" -#: templates/personal.php:12 -msgid "Clients" -msgstr "顧客" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "デスクトップクライアントをダウンロード" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Androidクライアントをダウンロード" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "iOSクライアントをダウンロード" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "パスワード" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "パスワードを変更しました" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "パスワードを変更することができません" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "現在のパスワード" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "新しいパスワード" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "パスワードを変更" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "表示名" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "あなたの表示名を変更しました" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "あなたの表示名を変更できません" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "表示名を変更" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Email" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "あなたのメールアドレス" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "※パスワード回復を有効にするにはメールアドレスの入力が必要です" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "言語" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "翻訳に協力する" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "ファイルマネージャでownCloudに接続する際はこのアドレスを利用してください" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "バージョン" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n" "MIME-Version: 1.0\n" @@ -86,13 +86,99 @@ msgstr "ტექსტი" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/ka_GE/settings.po b/l10n/ka_GE/settings.po index a715d2a7d2..39d86db4d3 100644 --- a/l10n/ka_GE/settings.po +++ b/l10n/ka_GE/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n" "MIME-Version: 1.0\n" @@ -178,95 +178,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "კლიენტები" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" +msgid "Get the apps to sync your files" msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "პაროლი" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "თქვენი პაროლი შეიცვალა" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "თქვენი პაროლი არ შეიცვალა" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "მიმდინარე პაროლი" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "ახალი პაროლი" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "პაროლის შეცვლა" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "იმეილი" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "თქვენი იმეილ მისამართი" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "შეავსეთ იმეილ მისამართის ველი პაროლის აღსადგენად" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "ენა" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "თარგმნის დახმარება" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n" "MIME-Version: 1.0\n" @@ -88,13 +88,99 @@ msgstr "텍스트" msgid "Images" msgstr "그림" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/ko/settings.po b/l10n/ko/settings.po index a3e3db39bf..967be75964 100644 --- a/l10n/ko/settings.po +++ b/l10n/ko/settings.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n" "MIME-Version: 1.0\n" @@ -182,95 +182,87 @@ msgstr "상업용 지원" msgid "You have used %s of the available %s" msgstr "현재 공간 %s/%s을(를) 사용 중입니다" -#: templates/personal.php:12 -msgid "Clients" -msgstr "클라이언트" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "데스크톱 클라이언트 다운로드" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "안드로이드 클라이언트 다운로드" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "iOS 클라이언트 다운로드" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "암호" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "암호가 변경되었습니다" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "암호를 변경할 수 없음" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "현재 암호" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "새 암호" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "암호 변경" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "표시 이름" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "이메일" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "이메일 주소" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "암호 찾기 기능을 사용하려면 이메일 주소를 입력하십시오." -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "언어" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "번역 돕기" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "파일 관리자에서 ownCloud에 접속하려면 이 주소를 사용하십시오." -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "버전" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n" "MIME-Version: 1.0\n" @@ -85,13 +85,99 @@ msgstr "" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/ku_IQ/settings.po b/l10n/ku_IQ/settings.po index 99e3162d7b..0b5761e3cb 100644 --- a/l10n/ku_IQ/settings.po +++ b/l10n/ku_IQ/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n" "MIME-Version: 1.0\n" @@ -177,95 +177,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "وشەی تێپەربو" - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "وشەی تێپەربو" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "وشەی نهێنی نوێ" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "ئیمه‌یل" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n" "MIME-Version: 1.0\n" @@ -85,13 +85,99 @@ msgstr "SMS" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/lb/settings.po b/l10n/lb/settings.po index e0e6727bc7..635adeed39 100644 --- a/l10n/lb/settings.po +++ b/l10n/lb/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n" "MIME-Version: 1.0\n" @@ -178,95 +178,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Clienten" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "Passwuert" - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "Passwuert" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Konnt däin Passwuert net änneren" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Momentan 't Passwuert" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Neit Passwuert" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Passwuert änneren" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Email" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Deng Email Adress" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Gëff eng Email Adress an fir d'Passwuert recovery ze erlaben" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Sprooch" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Hëllef iwwersetzen" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n" "MIME-Version: 1.0\n" @@ -87,13 +87,99 @@ msgstr "Žinučių" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/lt_LT/settings.po b/l10n/lt_LT/settings.po index 6bf8bea3a4..8b73d9d720 100644 --- a/l10n/lt_LT/settings.po +++ b/l10n/lt_LT/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n" "MIME-Version: 1.0\n" @@ -179,95 +179,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Klientai" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" +msgid "Get the apps to sync your files" msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Slaptažodis" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Jūsų slaptažodis buvo pakeistas" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Neįmanoma pakeisti slaptažodžio" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Dabartinis slaptažodis" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Naujas slaptažodis" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Pakeisti slaptažodį" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "El. paštas" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Jūsų el. pašto adresas" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Pamiršto slaptažodžio atkūrimui įveskite savo el. pašto adresą" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Kalba" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Padėkite išversti" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -86,13 +86,99 @@ msgstr "Teksts" msgid "Images" msgstr "Attēli" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "Jūsu serveris vēl nav pareizi iestatīts, lai ļautu sinhronizēt datnes, jo izskatās, ka WebDAV saskarne ir salauzta." -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "Lūdzu, vēlreiz pārbaudiet instalēšanas palīdzību." diff --git a/l10n/lv/settings.po b/l10n/lv/settings.po index be79edd912..7356dc0471 100644 --- a/l10n/lv/settings.po +++ b/l10n/lv/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" @@ -180,95 +180,87 @@ msgstr "Komerciālais atbalsts" msgid "You have used %s of the available %s" msgstr "Jūs lietojat %s no pieejamajiem %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Klienti" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Lejupielādēt darbvirsmas klientus" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Lejupielādēt Android klientu" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Lejupielādēt iOS klientu" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Parole" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Jūru parole tika nomainīta" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Nevar nomainīt jūsu paroli" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Pašreizējā parole" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Jauna parole" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Mainīt paroli" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Redzamais vārds" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "Jūsu redzamais vārds tika mainīts" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "Nevarēja mainīt jūsu redzamo vārdu" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "Mainīt redzamo vārdu" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "E-pasts" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Jūsu e-pasta adrese" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Ievadiet epasta adresi, lai vēlāk varētu atgūt paroli, ja būs nepieciešamība" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Valoda" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Palīdzi tulkot" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Izmanto šo adresi, lai, izmantojot datņu pārvaldnieku, savienotos ar savu ownCloud" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Versija" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n" "MIME-Version: 1.0\n" @@ -86,13 +86,99 @@ msgstr "Текст" msgid "Images" msgstr "Слики" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/mk/settings.po b/l10n/mk/settings.po index dfdae53b05..a53f1fbe2c 100644 --- a/l10n/mk/settings.po +++ b/l10n/mk/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n" "MIME-Version: 1.0\n" @@ -180,95 +180,87 @@ msgstr "Комерцијална подршка" msgid "You have used %s of the available %s" msgstr "Имате искористено %s од достапните %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Клиенти" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Преземи клиенти за десктоп" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Преземи клиент за Андроид" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Преземи iOS клиент" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Лозинка" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Вашата лозинка беше променета." -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Вашата лозинка неможе да се смени" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Моментална лозинка" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Нова лозинка" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Смени лозинка" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Е-пошта" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Вашата адреса за е-пошта" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Пополни ја адресата за е-пошта за да може да ја обновуваш лозинката" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Јазик" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Помогни во преводот" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Користете ја оваа адреса да " -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Верзија" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n" "MIME-Version: 1.0\n" @@ -85,13 +85,99 @@ msgstr "Teks" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/ms_MY/settings.po b/l10n/ms_MY/settings.po index a845175201..9ddacb0a78 100644 --- a/l10n/ms_MY/settings.po +++ b/l10n/ms_MY/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n" "MIME-Version: 1.0\n" @@ -181,95 +181,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "klien" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "Kata laluan " - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "Kata laluan " + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Gagal mengubah kata laluan anda " -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Kata laluan semasa" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Kata laluan baru" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Ubah kata laluan" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Emel" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Alamat emel anda" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Isi alamat emel anda untuk membolehkan pemulihan kata laluan" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Bahasa" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Bantu terjemah" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -90,13 +90,99 @@ msgstr "Tekst" msgid "Images" msgstr "Bilder" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/nb_NO/settings.po b/l10n/nb_NO/settings.po index f25a8d17ad..d032a85c9b 100644 --- a/l10n/nb_NO/settings.po +++ b/l10n/nb_NO/settings.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -185,95 +185,87 @@ msgstr "Kommersiell støtte" msgid "You have used %s of the available %s" msgstr "Du har brukt %s av tilgjengelig %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Klienter" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Last ned skrivebordsklienter" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Last ned Android-klient" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Last ned iOS-klient" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Passord" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Passord har blitt endret" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Kunne ikke endre passordet ditt" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Nåværende passord" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nytt passord" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Endre passord" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "E-post" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Din e-postadresse" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Oppi epostadressen du vil tilbakestille passordet for" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Språk" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Bidra til oversettelsen" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Versjon" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" @@ -89,13 +89,99 @@ msgstr "Tekst" msgid "Images" msgstr "Afbeeldingen" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/nl/settings.po b/l10n/nl/settings.po index 29757d8ffb..272cfe71ac 100644 --- a/l10n/nl/settings.po +++ b/l10n/nl/settings.po @@ -18,8 +18,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" @@ -188,95 +188,87 @@ msgstr "Commerciële ondersteuning" msgid "You have used %s of the available %s" msgstr "U heeft %s van de %s beschikbaren gebruikt" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Klanten" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Download Desktop Clients" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Download Android Client" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Download iOS Client" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Wachtwoord" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Je wachtwoord is veranderd" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Niet in staat om uw wachtwoord te wijzigen" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Huidig wachtwoord" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nieuw wachtwoord" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Wijzig wachtwoord" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Weergavenaam" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "Uw weergavenaam is gewijzigd" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "Kon de weergavenaam niet wijzigen" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "Wijzig weergavenaam" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "E-mailadres" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Uw e-mailadres" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Vul een e-mailadres in om wachtwoord reset uit te kunnen voeren" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Taal" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Help met vertalen" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Gebruik dit adres om te verbinden met uw ownCloud in uw bestandsbeheer" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Versie" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n" "MIME-Version: 1.0\n" @@ -85,13 +85,99 @@ msgstr "Tekst" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/nn_NO/settings.po b/l10n/nn_NO/settings.po index 2db598c4b3..3fc74b3f42 100644 --- a/l10n/nn_NO/settings.po +++ b/l10n/nn_NO/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n" "MIME-Version: 1.0\n" @@ -179,95 +179,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Klientar" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "Passord" - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "Passord" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Klarte ikkje å endra passordet" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Passord" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nytt passord" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Endra passord" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Epost" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Din epost addresse" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Fyll inn din e-post addresse for og kunne motta passord tilbakestilling" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Språk" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Hjelp oss å oversett" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n" "MIME-Version: 1.0\n" @@ -86,13 +86,99 @@ msgstr "" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/oc/settings.po b/l10n/oc/settings.po index 2aa4e254a4..040e8f2d8e 100644 --- a/l10n/oc/settings.po +++ b/l10n/oc/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n" "MIME-Version: 1.0\n" @@ -178,95 +178,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Practica" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" +msgid "Get the apps to sync your files" msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Senhal" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Ton senhal a cambiat" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Pas possible de cambiar ton senhal" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Senhal en cors" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Senhal novèl" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Cambia lo senhal" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Corrièl" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Ton adreiça de corrièl" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Emplena una adreiça de corrièl per permetre lo mandadís del senhal perdut" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Lenga" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Ajuda a la revirada" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" @@ -88,13 +88,99 @@ msgstr "Połączenie tekstowe" msgid "Images" msgstr "Obrazy" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/pl/settings.po b/l10n/pl/settings.po index 614e8163ae..4b2274a584 100644 --- a/l10n/pl/settings.po +++ b/l10n/pl/settings.po @@ -18,8 +18,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" @@ -188,95 +188,87 @@ msgstr "Wsparcie komercyjne" msgid "You have used %s of the available %s" msgstr "Korzystasz z %s z dostępnych %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Klienci" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Pobierz klienta dla Komputera" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Pobierz klienta dla Androida" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Pobierz klienta dla iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Hasło" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Twoje hasło zostało zmienione" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Nie można zmienić hasła" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Bieżące hasło" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nowe hasło" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Zmień hasło" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "E-mail" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Adres e-mail użytkownika" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Proszę wprowadzić adres e-mail, aby uzyskać możliwość odzyskania hasła" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Język" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Pomóż w tłumaczeniu" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Użyj tego adresu aby podłączyć zasób ownCloud w menedżerze plików" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Wersja" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" "MIME-Version: 1.0\n" @@ -85,13 +85,99 @@ msgstr "" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/pl_PL/settings.po b/l10n/pl_PL/settings.po index 68b10e8e13..bc0086b23a 100644 --- a/l10n/pl_PL/settings.po +++ b/l10n/pl_PL/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" "MIME-Version: 1.0\n" @@ -177,95 +177,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "" - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Email" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -88,13 +88,99 @@ msgstr "Texto" msgid "Images" msgstr "Imagens" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/pt_BR/settings.po b/l10n/pt_BR/settings.po index ec1d231b92..9613f0dcd1 100644 --- a/l10n/pt_BR/settings.po +++ b/l10n/pt_BR/settings.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -187,95 +187,87 @@ msgstr "Suporte Comercial" msgid "You have used %s of the available %s" msgstr "Você usou %s do seu espaço de %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Clientes" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Baixar Clientes Desktop" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Baixar Cliente Android" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Baixar Cliente iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Senha" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Sua senha foi alterada" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Não é possivel alterar a sua senha" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Senha atual" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nova senha" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Alterar senha" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Nome de Exibição" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "E-mail" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Seu endereço de e-mail" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Preencha um endereço de e-mail para habilitar a recuperação de senha" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Idioma" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Ajude a traduzir" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Usar este endereço para conectar-se ao seu ownCloud no seu gerenciador de arquivos" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Versão" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:41+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -88,13 +88,99 @@ msgstr "Texto" msgid "Images" msgstr "Imagens" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas." -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "Por favor verifique installation guides." diff --git a/l10n/pt_PT/settings.po b/l10n/pt_PT/settings.po index 9f04757a83..b7d330e5f7 100644 --- a/l10n/pt_PT/settings.po +++ b/l10n/pt_PT/settings.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" @@ -185,95 +185,87 @@ msgstr "Suporte Comercial" msgid "You have used %s of the available %s" msgstr "Usou %s do disponivel %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Clientes" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Transferir os clientes de sincronização" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Transferir o cliente android" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Transferir o cliente iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Palavra-chave" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "A sua palavra-passe foi alterada" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Não foi possivel alterar a sua palavra-chave" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Palavra-chave actual" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nova palavra-chave" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Alterar palavra-chave" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Nome público" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "O seu nome foi alterado" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "Não foi possível alterar o seu nome" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "Alterar nome" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "endereço de email" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "O seu endereço de email" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Preencha com o seu endereço de email para ativar a recuperação da palavra-chave" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Idioma" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Ajude a traduzir" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Use este endereço no seu gestor de ficheiros para ligar à sua ownCloud" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Versão" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n" "MIME-Version: 1.0\n" @@ -88,13 +88,99 @@ msgstr "Text" msgid "Images" msgstr "Imagini" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/ro/settings.po b/l10n/ro/settings.po index 53b608c053..e078fbdc93 100644 --- a/l10n/ro/settings.po +++ b/l10n/ro/settings.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n" "MIME-Version: 1.0\n" @@ -184,95 +184,87 @@ msgstr "Suport comercial" msgid "You have used %s of the available %s" msgstr "Ați utilizat %s din %s disponibile" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Clienți" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Descarcă client desktop" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Descarcă client Android" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Descarcă client iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Parolă" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Parola a fost modificată" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Imposibil de-ați schimbat parola" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Parola curentă" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Noua parolă" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Schimbă parola" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Email" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Adresa ta de email" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Completează o adresă de mail pentru a-ți putea recupera parola" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Limba" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Ajută la traducere" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Folosește această adresă pentru a conecta ownCloud cu managerul de fișiere" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Versiunea" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" @@ -91,13 +91,99 @@ msgstr "Текст" msgid "Images" msgstr "Изображения" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/ru/settings.po b/l10n/ru/settings.po index 1bb91218cb..6f05b087c5 100644 --- a/l10n/ru/settings.po +++ b/l10n/ru/settings.po @@ -21,8 +21,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" @@ -191,95 +191,87 @@ msgstr "Коммерческая поддержка" msgid "You have used %s of the available %s" msgstr "Вы использовали %s из доступных %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Клиенты" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Загрузка приложений для компьютера" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Загрузка Android-приложения" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Загрузка iOS-приложения" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Пароль" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Ваш пароль изменён" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Невозможно сменить пароль" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Текущий пароль" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Новый пароль" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Сменить пароль" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Отображаемое имя" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "Ваше отображаемое имя было изменено" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "Невозможно изменить Ваше отображаемое имя" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "Изменить отображаемое имя" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "e-mail" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Ваш адрес электронной почты" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Введите адрес электронной почты, чтобы появилась возможность восстановления пароля" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Язык" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Помочь с переводом" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Используйте этот URL для подключения файлового менеджера к Вашему хранилищу" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Версия" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 12:30+0000\n" +"Last-Translator: Langaru \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,16 +24,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Неполучается перенести %s - Файл с таким именем уже существует" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Неполучается перенести %s " #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Невозможно переименовать файл" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -72,7 +72,7 @@ msgstr "Не удалось записать на диск" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Недостаточно места в хранилище" #: ajax/upload.php:83 msgid "Invalid directory." @@ -196,31 +196,31 @@ msgstr "URL не должен быть пустым." msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Неверное имя папки. Использование наименования 'Опубликовано' зарезервировано Owncloud" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "Имя" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "Размер" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "Изменен" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "1 папка" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "{количество} папок" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "1 файл" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "{количество} файлов" @@ -278,7 +278,7 @@ msgstr "По ссылке" #: templates/index.php:40 msgid "Trash bin" -msgstr "" +msgstr "Корзина" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/ru_RU/lib.po b/l10n/ru_RU/lib.po index 7ea63fa247..b05be551ad 100644 --- a/l10n/ru_RU/lib.po +++ b/l10n/ru_RU/lib.po @@ -5,12 +5,13 @@ # Translators: # , 2013. # , 2012. +# Дмитрий , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:41+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" @@ -87,16 +88,102 @@ msgstr "Текст" msgid "Images" msgstr "Изображения" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "Ваш веб сервер ещё не достаточно точно настроен для возможности синхронизации, т.к. похоже, что интерфейс WebDAV сломан." -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Пожалуйста проверте дважды гиды по установке." #: template.php:113 msgid "seconds ago" diff --git a/l10n/ru_RU/settings.po b/l10n/ru_RU/settings.po index 0c0232363b..1a793ea0e6 100644 --- a/l10n/ru_RU/settings.po +++ b/l10n/ru_RU/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" @@ -179,95 +179,87 @@ msgstr "Коммерческая поддержка" msgid "You have used %s of the available %s" msgstr "Вы использовали %s из возможных %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Клиенты" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Загрузка десктопных клиентов" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Загрузить клиент под Android " +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Загрузить клиент под iOS " +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Пароль" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Ваш пароль был изменен" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Невозможно изменить Ваш пароль" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Текущий пароль" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Новый пароль" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Изменить пароль" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Электронная почта" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Адрес Вашей электронной почты" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Введите адрес электронной почты для возможности восстановления пароля" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Язык" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Помогите перевести" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Используйте этот адрес для подключения к ownCloud в Вашем файловом менеджере" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Версия" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" "MIME-Version: 1.0\n" @@ -87,13 +87,99 @@ msgstr "පෙළ" msgid "Images" msgstr "අනු රූ" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/si_LK/settings.po b/l10n/si_LK/settings.po index 12dc3ef730..251d262f66 100644 --- a/l10n/si_LK/settings.po +++ b/l10n/si_LK/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" "MIME-Version: 1.0\n" @@ -180,95 +180,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "සේවාලාභීන්" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" +msgid "Get the apps to sync your files" msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "මුරපදය" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "ඔබගේ මුර පදය වෙනස් කෙරුණි" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "මුර පදය වෙනස් කළ නොහැකි විය" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "වත්මන් මුරපදය" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "නව මුරපදය" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "මුරපදය වෙනස් කිරීම" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "විද්‍යුත් තැපෑල" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "ඔබගේ විද්‍යුත් තැපෑල" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "මුරපද ප්‍රතිස්ථාපනය සඳහා විද්‍යුත් තැපැල් විස්තර ලබා දෙන්න" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "භාෂාව" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "පරිවර්ථන සහය" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n" "MIME-Version: 1.0\n" @@ -85,13 +85,99 @@ msgstr "" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/sk/settings.po b/l10n/sk/settings.po index b75c78b6f4..30c5368436 100644 --- a/l10n/sk/settings.po +++ b/l10n/sk/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n" "MIME-Version: 1.0\n" @@ -177,95 +177,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "" - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 13:30+0000\n" +"Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -163,59 +163,59 @@ msgstr "November" msgid "December" msgstr "December" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "Nastavenia" -#: js/js.js:764 +#: js/js.js:767 msgid "seconds ago" msgstr "pred sekundami" -#: js/js.js:765 +#: js/js.js:768 msgid "1 minute ago" msgstr "pred minútou" -#: js/js.js:766 +#: js/js.js:769 msgid "{minutes} minutes ago" msgstr "pred {minutes} minútami" -#: js/js.js:767 +#: js/js.js:770 msgid "1 hour ago" msgstr "Pred 1 hodinou." -#: js/js.js:768 +#: js/js.js:771 msgid "{hours} hours ago" msgstr "Pred {hours} hodinami." -#: js/js.js:769 +#: js/js.js:772 msgid "today" msgstr "dnes" -#: js/js.js:770 +#: js/js.js:773 msgid "yesterday" msgstr "včera" -#: js/js.js:771 +#: js/js.js:774 msgid "{days} days ago" msgstr "pred {days} dňami" -#: js/js.js:772 +#: js/js.js:775 msgid "last month" msgstr "minulý mesiac" -#: js/js.js:773 +#: js/js.js:776 msgid "{months} months ago" msgstr "Pred {months} mesiacmi." -#: js/js.js:774 +#: js/js.js:777 msgid "months ago" msgstr "pred mesiacmi" -#: js/js.js:775 +#: js/js.js:778 msgid "last year" msgstr "minulý rok" -#: js/js.js:776 +#: js/js.js:779 msgid "years ago" msgstr "pred rokmi" @@ -245,8 +245,8 @@ msgid "The object type is not specified." msgstr "Nešpecifikovaný typ objektu." #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "Chyba" @@ -266,7 +266,7 @@ msgstr "Zdieľaj" msgid "Shared" msgstr "Zdieľané" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "Chyba počas zdieľania" @@ -324,7 +324,7 @@ msgstr "Zdieľať cez e-mail:" #: js/share.js:229 msgid "No people found" -msgstr "Užívateľ nenájdený" +msgstr "Používateľ nenájdený" #: js/share.js:256 msgid "Resharing is not allowed" @@ -362,23 +362,23 @@ msgstr "zmazať" msgid "share" msgstr "zdieľať" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "Chránené heslom" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "Chyba pri odstraňovaní dátumu vypršania platnosti" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "Chyba pri nastavení dátumu vypršania platnosti" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "Odosielam ..." -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "Email odoslaný" @@ -494,14 +494,14 @@ msgstr "Bez bezpečného generátora náhodných čísel môže útočník predp msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "Váš priečinok s dátami a súbormi je dostupný z internetu, lebo súbor .htaccess nefunguje." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Pre informácie, ako správne nastaviť Váš server sa pozrite do dokumentácie." #: templates/installation.php:36 msgid "Create an admin account" diff --git a/l10n/sk_SK/files.po b/l10n/sk_SK/files.po index 3c052399e2..e7c654c382 100644 --- a/l10n/sk_SK/files.po +++ b/l10n/sk_SK/files.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 13:50+0000\n" +"Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -78,7 +78,7 @@ msgstr "Nedostatok dostupného úložného priestoru" #: ajax/upload.php:83 msgid "Invalid directory." -msgstr "Neplatný adresár" +msgstr "Neplatný priečinok" #: appinfo/app.php:10 msgid "Files" @@ -196,33 +196,33 @@ msgstr "URL nemôže byť prázdne" #: js/files.js:574 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" -msgstr "Neplatné meno adresára. Používanie mena 'Shared' je vyhradené len pre Owncloud" +msgstr "Neplatné meno priečinka. Používanie mena 'Shared' je vyhradené len pre Owncloud" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "Meno" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "Veľkosť" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "Upravené" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "1 priečinok" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "{count} priečinkov" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "1 súbor" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "{count} súborov" @@ -232,7 +232,7 @@ msgstr "Odoslať" #: templates/admin.php:5 msgid "File handling" -msgstr "Nastavenie správanie k súborom" +msgstr "Nastavenie správania sa k súborom" #: templates/admin.php:7 msgid "Maximum upload size" @@ -244,7 +244,7 @@ msgstr "najväčšie možné:" #: templates/admin.php:15 msgid "Needed for multi-file and folder downloads." -msgstr "Vyžadované pre sťahovanie viacerých súborov a adresárov." +msgstr "Vyžadované pre sťahovanie viacerých súborov a priečinkov." #: templates/admin.php:17 msgid "Enable ZIP-download" @@ -280,7 +280,7 @@ msgstr "Z odkazu" #: templates/index.php:40 msgid "Trash bin" -msgstr "" +msgstr "Kôš" #: templates/index.php:46 msgid "Cancel upload" @@ -314,7 +314,7 @@ msgstr "Čakajte, súbory sú prehľadávané." #: templates/index.php:115 msgid "Current scanning" -msgstr "Práve prehliadané" +msgstr "Práve prezerané" #: templates/upgrade.php:2 msgid "Upgrading filesystem cache..." diff --git a/l10n/sk_SK/files_encryption.po b/l10n/sk_SK/files_encryption.po index a03aa2a725..232ee99f2f 100644 --- a/l10n/sk_SK/files_encryption.po +++ b/l10n/sk_SK/files_encryption.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:09+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 13:10+0000\n" +"Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,15 +26,15 @@ msgstr "Šifrovanie" #: templates/settings-personal.php:7 msgid "File encryption is enabled." -msgstr "Kryptovanie súborov nastavené." +msgstr "Šifrovanie súborov nastavené." #: templates/settings-personal.php:11 msgid "The following file types will not be encrypted:" -msgstr "Uvedené typy súborov nebudú kryptované:" +msgstr "Uvedené typy súborov nebudú šifrované:" #: templates/settings.php:7 msgid "Exclude the following file types from encryption:" -msgstr "Nekryptovať uvedené typy súborov" +msgstr "Nešifrovať uvedené typy súborov" #: templates/settings.php:12 msgid "None" diff --git a/l10n/sk_SK/files_external.po b/l10n/sk_SK/files_external.po index 56de6320ff..92807a28e1 100644 --- a/l10n/sk_SK/files_external.po +++ b/l10n/sk_SK/files_external.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-31 00:27+0100\n" -"PO-Revision-Date: 2013-01-30 06:20+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 13:30+0000\n" "Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" @@ -28,11 +28,11 @@ msgstr "Prístup povolený" msgid "Error configuring Dropbox storage" msgstr "Chyba pri konfigurácii úložiska Dropbox" -#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:41 +#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40 msgid "Grant access" msgstr "Povoliť prístup" -#: js/dropbox.js:73 js/google.js:73 +#: js/dropbox.js:73 js/google.js:72 msgid "Fill out all required fields" msgstr "Vyplňte všetky vyžadované kolónky" @@ -40,17 +40,17 @@ msgstr "Vyplňte všetky vyžadované kolónky" msgid "Please provide a valid Dropbox app key and secret." msgstr "Zadajte platný kľúč aplikácie a heslo Dropbox" -#: js/google.js:26 js/google.js:74 js/google.js:79 +#: js/google.js:26 js/google.js:73 js/google.js:78 msgid "Error configuring Google Drive storage" msgstr "Chyba pri konfigurácii úložiska Google drive" -#: lib/config.php:405 +#: lib/config.php:413 msgid "" "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " "is not possible. Please ask your system administrator to install it." msgstr "Upozornenie: \"smbclient\" nie je nainštalovaný. Nie je možné pripojenie oddielov CIFS/SMB. Požiadajte administrátora systému, nech ho nainštaluje." -#: lib/config.php:406 +#: lib/config.php:414 msgid "" "Warning: The FTP support in PHP is not enabled or installed. Mounting" " of FTP shares is not possible. Please ask your system administrator to " @@ -91,7 +91,7 @@ msgstr "Žiadne nastavené" #: templates/settings.php:86 msgid "All Users" -msgstr "Všetci užívatelia" +msgstr "Všetci používatelia" #: templates/settings.php:87 msgid "Groups" @@ -99,7 +99,7 @@ msgstr "Skupiny" #: templates/settings.php:95 msgid "Users" -msgstr "Užívatelia" +msgstr "Používatelia" #: templates/settings.php:108 templates/settings.php:109 #: templates/settings.php:144 templates/settings.php:145 @@ -112,7 +112,7 @@ msgstr "Povoliť externé úložisko" #: templates/settings.php:125 msgid "Allow users to mount their own external storage" -msgstr "Povoliť užívateľom pripojiť ich vlastné externé úložisko" +msgstr "Povoliť používateľom pripojiť ich vlastné externé úložisko" #: templates/settings.php:136 msgid "SSL root certificates" diff --git a/l10n/sk_SK/files_trashbin.po b/l10n/sk_SK/files_trashbin.po index 93a413261a..220a875b8d 100644 --- a/l10n/sk_SK/files_trashbin.po +++ b/l10n/sk_SK/files_trashbin.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 22:50+0000\n" -"Last-Translator: georg007 \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 10:30+0000\n" +"Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,7 +22,7 @@ msgstr "" #: ajax/delete.php:22 #, php-format msgid "Couldn't delete %s permanently" -msgstr "" +msgstr "Nemožno zmazať %s navždy" #: ajax/undelete.php:41 #, php-format diff --git a/l10n/sk_SK/files_versions.po b/l10n/sk_SK/files_versions.po index 90a6c26e24..5cf9366ed6 100644 --- a/l10n/sk_SK/files_versions.po +++ b/l10n/sk_SK/files_versions.po @@ -4,14 +4,15 @@ # # Translators: # georg , 2013. +# Marián Hvolka , 2013. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-09 00:12+0100\n" -"PO-Revision-Date: 2013-02-08 22:40+0000\n" -"Last-Translator: georg007 \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 13:10+0000\n" +"Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,16 +23,16 @@ msgstr "" #: ajax/rollbackVersion.php:15 #, php-format msgid "Could not revert: %s" -msgstr "" +msgstr "Nemožno obnoviť: %s" #: history.php:40 msgid "success" -msgstr "uspech" +msgstr "úspech" #: history.php:42 #, php-format msgid "File %s was reverted to version %s" -msgstr "Subror %s bol vrateny na verziu %s" +msgstr "Súbor %s bol obnovený na verziu %s" #: history.php:49 msgid "failure" @@ -40,7 +41,7 @@ msgstr "chyba" #: history.php:51 #, php-format msgid "File %s could not be reverted to version %s" -msgstr "" +msgstr "Súbor %s nemohol byť obnovený na verziu %s" #: history.php:68 msgid "No old versions available" @@ -56,7 +57,7 @@ msgstr "História" #: templates/history.php:20 msgid "Revert a file to a previous version by clicking on its revert button" -msgstr "" +msgstr "Obnovte súbor do predošlej verzie kliknutím na tlačítko obnoviť" #: templates/settings.php:3 msgid "Files Versioning" diff --git a/l10n/sk_SK/lib.po b/l10n/sk_SK/lib.po index 37ba5198f6..ea523d5244 100644 --- a/l10n/sk_SK/lib.po +++ b/l10n/sk_SK/lib.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" @@ -35,7 +35,7 @@ msgstr "Nastavenia" #: app.php:356 msgid "Users" -msgstr "Užívatelia" +msgstr "Používatelia" #: app.php:363 msgid "Apps" @@ -43,7 +43,7 @@ msgstr "Aplikácie" #: app.php:365 msgid "Admin" -msgstr "Správca" +msgstr "Administrátor" #: files.php:202 msgid "ZIP download is turned off." @@ -59,7 +59,7 @@ msgstr "Späť na súbory" #: files.php:227 msgid "Selected files too large to generate zip file." -msgstr "Zvolené súbory sú príliž veľké na vygenerovanie zip súboru." +msgstr "Zvolené súbory sú príliš veľké na vygenerovanie zip súboru." #: helper.php:226 msgid "couldn't be determined" @@ -89,16 +89,102 @@ msgstr "Text" msgid "Images" msgstr "Obrázky" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "Váš webový server nie je správne nastavený na synchronizáciu, pretože rozhranie WebDAV je poškodené." -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Prosím skontrolujte inštalačnú príručku." #: template.php:113 msgid "seconds ago" @@ -155,7 +241,7 @@ msgstr "pred rokmi" #: updater.php:75 #, php-format msgid "%s is available. Get more information" -msgstr "%s je dostupné. Získať viac informácií" +msgstr "%s je dostupné. Získať pre viac informácií" #: updater.php:77 msgid "up to date" diff --git a/l10n/sk_SK/settings.po b/l10n/sk_SK/settings.po index 9862a581cc..5a760e8d26 100644 --- a/l10n/sk_SK/settings.po +++ b/l10n/sk_SK/settings.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" @@ -34,7 +34,7 @@ msgstr "Chyba pri autentifikácii" #: ajax/changedisplayname.php:32 msgid "Unable to change display name" -msgstr "" +msgstr "Nemožno zmeniť zobrazované meno" #: ajax/creategroup.php:10 msgid "Group already exists" @@ -79,7 +79,7 @@ msgstr "Administrátori nesmú odstrániť sami seba zo skupiny admin" #: ajax/togglegroups.php:28 #, php-format msgid "Unable to add user to group %s" -msgstr "Nie je možné pridať užívateľa do skupiny %s" +msgstr "Nie je možné pridať používateľa do skupiny %s" #: ajax/togglegroups.php:34 #, php-format @@ -112,7 +112,7 @@ msgstr "Aktualizujem..." #: js/apps.js:87 msgid "Error while updating app" -msgstr "hyba pri aktualizácii aplikácie" +msgstr "chyba pri aktualizácii aplikácie" #: js/apps.js:87 msgid "Error" @@ -160,7 +160,7 @@ msgstr "Príručka používateľa" #: templates/help.php:4 msgid "Administrator Documentation" -msgstr "Príručka správcu" +msgstr "Príručka administrátora" #: templates/help.php:6 msgid "Online Documentation" @@ -183,95 +183,87 @@ msgstr "Komerčná podpora" msgid "You have used %s of the available %s" msgstr "Použili ste %s z %s dostupných " -#: templates/personal.php:12 -msgid "Clients" -msgstr "Klienti" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Stiahnuť desktopového klienta" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Stiahnuť Android klienta" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Stiahnuť iOS klienta" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Heslo" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Heslo bolo zmenené" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Nie je možné zmeniť vaše heslo" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Aktuálne heslo" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nové heslo" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Zmeniť heslo" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Zobrazované meno" -#: templates/personal.php:42 -msgid "Your display name was changed" -msgstr "" - -#: templates/personal.php:43 -msgid "Unable to change your display name" -msgstr "" - -#: templates/personal.php:46 -msgid "Change display name" -msgstr "" - #: templates/personal.php:55 +msgid "Your display name was changed" +msgstr "Vaše zobrazované meno bolo zmenené" + +#: templates/personal.php:56 +msgid "Unable to change your display name" +msgstr "Nemožno zmeniť Vaše zobrazované meno" + +#: templates/personal.php:59 +msgid "Change display name" +msgstr "Zmeniť zobrazované meno" + +#: templates/personal.php:68 msgid "Email" msgstr "Email" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Vaša emailová adresa" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Vyplňte emailovú adresu pre aktivovanie obnovy hesla" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Jazyk" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Pomôcť s prekladom" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Použite túto adresu pre pripojenie vášho ownCloud k súborovému správcovi" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Verzia" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 13:20+0000\n" +"Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -76,13 +76,13 @@ msgid "" "Warning: Apps user_ldap and user_webdavauth are incompatible. You may" " experience unexpected behaviour. Please ask your system administrator to " "disable one of them." -msgstr "Upozornenie: Aplikácie user_ldap a user_webdavauth nie sú kompatibilné. Môže nastávať neočakávané správanie. Požiadajte správcu systému aby jednu z nich zakázal." +msgstr "Upozornenie: Aplikácie user_ldap a user_webdavauth nie sú kompatibilné. Môže nastávať neočakávané správanie. Požiadajte administrátora systému aby jednu z nich zakázal." #: templates/settings.php:11 msgid "" "Warning: The PHP LDAP module is not installed, the backend will not " "work. Please ask your system administrator to install it." -msgstr "Upozornenie: nie je nainštalovaný LDAP modul pre PHP, backend vrstva nebude fungovať. Požádejte správcu systému aby ho nainštaloval." +msgstr "Upozornenie: nie je nainštalovaný LDAP modul pre PHP, backend vrstva nebude fungovať. Požádejte administrátora systému aby ho nainštaloval." #: templates/settings.php:15 msgid "Server configuration" @@ -216,7 +216,7 @@ msgstr "Použi TLS" #: templates/settings.php:38 msgid "Do not use it additionally for LDAPS connections, it will fail." -msgstr "" +msgstr "Nepoužívajte pre pripojenie LDAPS, zlyhá." #: templates/settings.php:39 msgid "Case insensitve LDAP server (Windows)" @@ -290,7 +290,7 @@ msgstr "Atribúty vyhľadávania skupín" #: templates/settings.php:51 msgid "Group-Member association" -msgstr "Asociácia člena skupiny" +msgstr "Priradenie člena skupiny" #: templates/settings.php:53 msgid "Special Attributes" diff --git a/l10n/sl/lib.po b/l10n/sl/lib.po index e0c60dd5cd..e3f61a640a 100644 --- a/l10n/sl/lib.po +++ b/l10n/sl/lib.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n" "MIME-Version: 1.0\n" @@ -87,13 +87,99 @@ msgstr "Besedilo" msgid "Images" msgstr "Slike" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/sl/settings.po b/l10n/sl/settings.po index d806bf7c5a..ab5a76c3f1 100644 --- a/l10n/sl/settings.po +++ b/l10n/sl/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n" "MIME-Version: 1.0\n" @@ -181,95 +181,87 @@ msgstr "Komercialna podpora" msgid "You have used %s of the available %s" msgstr "Uporabljate %s od razpoložljivih %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Stranka" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Prenesi namizne odjemalce" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Prenesi Android odjemalec" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Prenesi iOS odjemalec" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Geslo" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Vaše geslo je spremenjeno" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Gesla ni mogoče spremeniti." -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Trenutno geslo" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Novo geslo" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Spremeni geslo" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Elektronska pošta" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Vaš elektronski poštni naslov" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Vpišite vaš elektronski naslov in s tem omogočite obnovitev gesla" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Jezik" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Pomagajte pri prevajanju" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Uporabite ta naslov za povezavo do ownCloud v vašem upravljalniku datotek." -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Različica" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" @@ -88,13 +88,99 @@ msgstr "Текст" msgid "Images" msgstr "Слике" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/sr/settings.po b/l10n/sr/settings.po index ed8fbed9d0..0a1a7be07b 100644 --- a/l10n/sr/settings.po +++ b/l10n/sr/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" @@ -179,95 +179,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "Искористили сте %s од дозвољених %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Клијенти" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" +msgid "Get the apps to sync your files" msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Лозинка" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Лозинка је промењена" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Не могу да изменим вашу лозинку" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Тренутна лозинка" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Нова лозинка" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Измени лозинку" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Е-пошта" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Ваша адреса е-поште" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Ун" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Језик" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr " Помозите у превођењу" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n" "MIME-Version: 1.0\n" @@ -85,13 +85,99 @@ msgstr "Tekst" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/sr@latin/settings.po b/l10n/sr@latin/settings.po index 7be26c74f1..fa71e64abc 100644 --- a/l10n/sr@latin/settings.po +++ b/l10n/sr@latin/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n" "MIME-Version: 1.0\n" @@ -178,95 +178,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Klijenti" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "Lozinka" - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "Lozinka" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Ne mogu da izmenim vašu lozinku" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Trenutna lozinka" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nova lozinka" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Izmeni lozinku" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "E-mail" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Jezik" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 07:00+0000\n" +"Last-Translator: Magnus Höglund \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -59,7 +59,7 @@ msgstr "Ingen kategori att lägga till?" #: ajax/vcategories/add.php:37 #, php-format msgid "This category already exists: %s" -msgstr "" +msgstr "Denna kategori finns redan: %s" #: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27 #: ajax/vcategories/favorites.php:24 @@ -163,59 +163,59 @@ msgstr "November" msgid "December" msgstr "December" -#: js/js.js:284 +#: js/js.js:286 msgid "Settings" msgstr "Inställningar" -#: js/js.js:764 +#: js/js.js:767 msgid "seconds ago" msgstr "sekunder sedan" -#: js/js.js:765 +#: js/js.js:768 msgid "1 minute ago" msgstr "1 minut sedan" -#: js/js.js:766 +#: js/js.js:769 msgid "{minutes} minutes ago" msgstr "{minutes} minuter sedan" -#: js/js.js:767 +#: js/js.js:770 msgid "1 hour ago" msgstr "1 timme sedan" -#: js/js.js:768 +#: js/js.js:771 msgid "{hours} hours ago" msgstr "{hours} timmar sedan" -#: js/js.js:769 +#: js/js.js:772 msgid "today" msgstr "i dag" -#: js/js.js:770 +#: js/js.js:773 msgid "yesterday" msgstr "i går" -#: js/js.js:771 +#: js/js.js:774 msgid "{days} days ago" msgstr "{days} dagar sedan" -#: js/js.js:772 +#: js/js.js:775 msgid "last month" msgstr "förra månaden" -#: js/js.js:773 +#: js/js.js:776 msgid "{months} months ago" msgstr "{months} månader sedan" -#: js/js.js:774 +#: js/js.js:777 msgid "months ago" msgstr "månader sedan" -#: js/js.js:775 +#: js/js.js:778 msgid "last year" msgstr "förra året" -#: js/js.js:776 +#: js/js.js:779 msgid "years ago" msgstr "år sedan" @@ -245,8 +245,8 @@ msgid "The object type is not specified." msgstr "Objekttypen är inte specificerad." #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571 -#: js/share.js:583 +#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582 +#: js/share.js:594 msgid "Error" msgstr "Fel" @@ -266,7 +266,7 @@ msgstr "Dela" msgid "Shared" msgstr "Delad" -#: js/share.js:141 js/share.js:611 +#: js/share.js:141 js/share.js:622 msgid "Error while sharing" msgstr "Fel vid delning" @@ -362,23 +362,23 @@ msgstr "radera" msgid "share" msgstr "dela" -#: js/share.js:373 js/share.js:558 +#: js/share.js:373 js/share.js:569 msgid "Password protected" msgstr "Lösenordsskyddad" -#: js/share.js:571 +#: js/share.js:582 msgid "Error unsetting expiration date" msgstr "Fel vid borttagning av utgångsdatum" -#: js/share.js:583 +#: js/share.js:594 msgid "Error setting expiration date" msgstr "Fel vid sättning av utgångsdatum" -#: js/share.js:598 +#: js/share.js:609 msgid "Sending ..." msgstr "Skickar ..." -#: js/share.js:609 +#: js/share.js:620 msgid "Email sent" msgstr "E-post skickat" @@ -494,14 +494,14 @@ msgstr "Utan en säker slumptalsgenerator kan angripare få möjlighet att föru msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "Din datakatalog och filer är förmodligen tillgängliga från Internet, eftersom .htaccess-filen inte fungerar." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "För information hur man korrekt konfigurera servern, var god se documentation." #: templates/installation.php:36 msgid "Create an admin account" @@ -584,7 +584,7 @@ msgstr "Logga in" #: templates/login.php:49 msgid "Alternative Logins" -msgstr "" +msgstr "Alternativa inloggningar" #: templates/part.pagenavi.php:3 msgid "prev" diff --git a/l10n/sv/files.po b/l10n/sv/files.po index edb0d69b80..b22a0cb981 100644 --- a/l10n/sv/files.po +++ b/l10n/sv/files.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 07:00+0000\n" +"Last-Translator: Magnus Höglund \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -87,7 +87,7 @@ msgstr "Filer" #: js/fileactions.js:116 msgid "Delete permanently" -msgstr "" +msgstr "Radera permanent" #: js/fileactions.js:118 templates/index.php:91 templates/index.php:92 msgid "Delete" @@ -199,31 +199,31 @@ msgstr "URL kan inte vara tom." msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Ogiltigt mappnamn. Användande av 'Shared' är reserverat av ownCloud" -#: js/files.js:947 templates/index.php:67 +#: js/files.js:948 templates/index.php:67 msgid "Name" msgstr "Namn" -#: js/files.js:948 templates/index.php:78 +#: js/files.js:949 templates/index.php:78 msgid "Size" msgstr "Storlek" -#: js/files.js:949 templates/index.php:80 +#: js/files.js:950 templates/index.php:80 msgid "Modified" msgstr "Ändrad" -#: js/files.js:968 +#: js/files.js:969 msgid "1 folder" msgstr "1 mapp" -#: js/files.js:970 +#: js/files.js:971 msgid "{count} folders" msgstr "{count} mappar" -#: js/files.js:978 +#: js/files.js:979 msgid "1 file" msgstr "1 fil" -#: js/files.js:980 +#: js/files.js:981 msgid "{count} files" msgstr "{count} filer" @@ -281,7 +281,7 @@ msgstr "Från länk" #: templates/index.php:40 msgid "Trash bin" -msgstr "" +msgstr "Papperskorg" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/sv/files_trashbin.po b/l10n/sv/files_trashbin.po index 177e741225..625d864e93 100644 --- a/l10n/sv/files_trashbin.po +++ b/l10n/sv/files_trashbin.po @@ -4,13 +4,14 @@ # # Translators: # André , 2013. +# Magnus Höglund , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 07:10+0000\n" +"Last-Translator: Magnus Höglund \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,12 +22,12 @@ msgstr "" #: ajax/delete.php:22 #, php-format msgid "Couldn't delete %s permanently" -msgstr "" +msgstr "Kunde inte radera %s permanent" #: ajax/undelete.php:41 #, php-format msgid "Couldn't restore %s" -msgstr "" +msgstr "Kunde inte återställa %s" #: js/trash.js:7 js/trash.js:94 msgid "perform restore operation" @@ -34,7 +35,7 @@ msgstr "utför återställning" #: js/trash.js:33 msgid "delete file permanently" -msgstr "" +msgstr "radera filen permanent" #: js/trash.js:125 templates/index.php:17 msgid "Name" diff --git a/l10n/sv/files_versions.po b/l10n/sv/files_versions.po index 5efefb7d13..3930feca0f 100644 --- a/l10n/sv/files_versions.po +++ b/l10n/sv/files_versions.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Magnus Höglund , 2012. +# Magnus Höglund , 2012-2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 07:20+0000\n" +"Last-Translator: Magnus Höglund \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,33 +21,33 @@ msgstr "" #: ajax/rollbackVersion.php:15 #, php-format msgid "Could not revert: %s" -msgstr "" +msgstr "Kunde inte återställa: %s" #: history.php:40 msgid "success" -msgstr "" +msgstr "lyckades" #: history.php:42 #, php-format msgid "File %s was reverted to version %s" -msgstr "" +msgstr "Filen %s återställdes till version %s" #: history.php:49 msgid "failure" -msgstr "" +msgstr "misslyckades" #: history.php:51 #, php-format msgid "File %s could not be reverted to version %s" -msgstr "" +msgstr "Filen %s kunde inte återställas till version %s" #: history.php:68 msgid "No old versions available" -msgstr "" +msgstr "Inga gamla versioner finns tillgängliga" #: history.php:73 msgid "No path specified" -msgstr "" +msgstr "Ingen sökväg angiven" #: js/versions.js:16 msgid "History" @@ -55,7 +55,7 @@ msgstr "Historik" #: templates/history.php:20 msgid "Revert a file to a previous version by clicking on its revert button" -msgstr "" +msgstr "Återställ en fil till en tidigare version genom att klicka på knappen" #: templates/settings.php:3 msgid "Files Versioning" diff --git a/l10n/sv/lib.po b/l10n/sv/lib.po index 9d898da301..591d546eab 100644 --- a/l10n/sv/lib.po +++ b/l10n/sv/lib.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" @@ -87,16 +87,102 @@ msgstr "Text" msgid "Images" msgstr "Bilder" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "Din webbserver är inte korrekt konfigurerad för att tillåta filsynkronisering eftersom WebDAV inte verkar fungera." -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Var god kontrollera installationsguiden." #: template.php:113 msgid "seconds ago" diff --git a/l10n/sv/settings.po b/l10n/sv/settings.po index 46e0324111..cb1609d700 100644 --- a/l10n/sv/settings.po +++ b/l10n/sv/settings.po @@ -7,7 +7,7 @@ # Christer Eriksson , 2012. # Daniel Sandman , 2012. # , 2011. -# Magnus Höglund , 2012. +# Magnus Höglund , 2012-2013. # , 2012. # , 2012. # , 2011, 2012. @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" @@ -37,7 +37,7 @@ msgstr "Autentiseringsfel" #: ajax/changedisplayname.php:32 msgid "Unable to change display name" -msgstr "" +msgstr "Kan inte ändra visningsnamn" #: ajax/creategroup.php:10 msgid "Group already exists" @@ -186,95 +186,87 @@ msgstr "Kommersiell support" msgid "You have used %s of the available %s" msgstr "Du har använt %s av tillgängliga %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Kunder" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Ladda ner skrivbordsklienter" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Ladda ner klient för Android" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Ladda ner klient för iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Lösenord" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Ditt lösenord har ändrats" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Kunde inte ändra ditt lösenord" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Nuvarande lösenord" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Nytt lösenord" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Ändra lösenord" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Visat namn" -#: templates/personal.php:42 -msgid "Your display name was changed" -msgstr "" - -#: templates/personal.php:43 -msgid "Unable to change your display name" -msgstr "" - -#: templates/personal.php:46 -msgid "Change display name" -msgstr "" - #: templates/personal.php:55 +msgid "Your display name was changed" +msgstr "Ditt visningsnamn har ändrats" + +#: templates/personal.php:56 +msgid "Unable to change your display name" +msgstr "Kan inte ändra ditt visningsnamn" + +#: templates/personal.php:59 +msgid "Change display name" +msgstr "Ändra visningsnamn" + +#: templates/personal.php:68 msgid "Email" msgstr "E-post" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Din e-postadress" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Fyll i en e-postadress för att aktivera återställning av lösenord" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Språk" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Hjälp att översätta" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Använd denna adress för att ansluta till ownCloud i din filhanterare" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Version" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 07:00+0000\n" +"Last-Translator: Magnus Höglund \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -217,7 +217,7 @@ msgstr "Använd TLS" #: templates/settings.php:38 msgid "Do not use it additionally for LDAPS connections, it will fail." -msgstr "" +msgstr "Använd inte för LDAPS-anslutningar, det kommer inte att fungera." #: templates/settings.php:39 msgid "Case insensitve LDAP server (Windows)" diff --git a/l10n/sw_KE/lib.po b/l10n/sw_KE/lib.po index 239e879ce3..803852d429 100644 --- a/l10n/sw_KE/lib.po +++ b/l10n/sw_KE/lib.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:41+0000\n" "Last-Translator: I Robot \n" "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n" "MIME-Version: 1.0\n" @@ -85,13 +85,99 @@ msgstr "" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/sw_KE/settings.po b/l10n/sw_KE/settings.po index d01fd6408b..d3c967e603 100644 --- a/l10n/sw_KE/settings.po +++ b/l10n/sw_KE/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n" "MIME-Version: 1.0\n" @@ -177,95 +177,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "" - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" "MIME-Version: 1.0\n" @@ -86,13 +86,99 @@ msgstr "உரை" msgid "Images" msgstr "படங்கள்" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/ta_LK/settings.po b/l10n/ta_LK/settings.po index 6fefbd5fc8..f7bb0ba28b 100644 --- a/l10n/ta_LK/settings.po +++ b/l10n/ta_LK/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" "MIME-Version: 1.0\n" @@ -178,95 +178,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "நீங்கள் %s இலுள்ள %sபயன்படுத்தியுள்ளீர்கள்" -#: templates/personal.php:12 -msgid "Clients" -msgstr "வாடிக்கையாளர்கள்" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" +msgid "Get the apps to sync your files" msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "கடவுச்சொல்" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "உங்களுடைய கடவுச்சொல் மாற்றப்பட்டுள்ளது" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "உங்களுடைய கடவுச்சொல்லை மாற்றமுடியாது" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "தற்போதைய கடவுச்சொல்" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "புதிய கடவுச்சொல்" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "கடவுச்சொல்லை மாற்றுக" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "மின்னஞ்சல்" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "உங்களுடைய மின்னஞ்சல் முகவரி" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "கடவுச்சொல் மீள் பெறுவதை இயலுமைப்படுத்துவதற்கு மின்னஞ்சல் முகவரியை இயலுமைப்படுத்துக" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "மொழி" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "மொழிபெயர்க்க உதவி" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index 3d8c84c894..30a4a6ba24 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index b00f8418bd..e25b518d99 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index d2e014c2d7..4c6eb5a33f 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index 362ecf7353..3a315bea68 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index ab52cbdde8..210c8f9948 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 6dea4891f9..5c206f287f 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 4364f23399..a4a716ac8f 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -85,13 +85,99 @@ msgstr "" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index 6191e877aa..7b4a163323 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -178,95 +178,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "" - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index 2db89d5668..100a693ef2 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/th_TH/lib.po b/l10n/th_TH/lib.po index 5e486a7842..b7a10f4fd2 100644 --- a/l10n/th_TH/lib.po +++ b/l10n/th_TH/lib.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:08+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n" "MIME-Version: 1.0\n" @@ -86,13 +86,99 @@ msgstr "ข้อความ" msgid "Images" msgstr "รูปภาพ" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/th_TH/settings.po b/l10n/th_TH/settings.po index 7bcf49a4ff..5e720fb100 100644 --- a/l10n/th_TH/settings.po +++ b/l10n/th_TH/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n" "MIME-Version: 1.0\n" @@ -180,95 +180,87 @@ msgstr "บริการลูกค้าแบบเสียค่าใช msgid "You have used %s of the available %s" msgstr "คุณได้ใช้งานไปแล้ว %s จากจำนวนที่สามารถใช้ได้ %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "ลูกค้า" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "ดาวน์โหลดโปรแกรมไคลเอนต์สำหรับเครื่องเดสก์ท็อป" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "ดาวน์โหลดโปรแกรมไคลเอนต์สำหรับแอนดรอยด์" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "ดาวน์โหลดโปรแกรมไคลเอนต์สำหรับ iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "รหัสผ่าน" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "รหัสผ่านของคุณถูกเปลี่ยนแล้ว" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "ไม่สามารถเปลี่ยนรหัสผ่านของคุณได้" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "รหัสผ่านปัจจุบัน" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "รหัสผ่านใหม่" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "เปลี่ยนรหัสผ่าน" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "ชื่อที่ต้องการแสดง" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "อีเมล์" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "ที่อยู่อีเมล์ของคุณ" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "กรอกที่อยู่อีเมล์ของคุณเพื่อเปิดให้มีการกู้คืนรหัสผ่านได้" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "ภาษา" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "ช่วยกันแปล" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "ใช้ที่อยู่นี้เพื่อเชื่อมต่อกับ ownCloud ในโปรแกรมจัดการไฟล์ของคุณ" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "รุ่น" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -87,13 +87,99 @@ msgstr "Metin" msgid "Images" msgstr "Resimler" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/tr/settings.po b/l10n/tr/settings.po index 29f5d1c732..eb9e58d145 100644 --- a/l10n/tr/settings.po +++ b/l10n/tr/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -181,95 +181,87 @@ msgstr "Ticari Destek" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Müşteriler" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Masaüstü İstemcilerini İndir" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Android İstemcisini İndir" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "iOS İstemcisini İndir" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Parola" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Şifreniz değiştirildi" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Parolanız değiştirilemiyor" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Mevcut parola" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Yeni parola" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Parola değiştir" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Eposta" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Eposta adresiniz" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Parola sıfırlamayı aktifleştirmek için eposta adresi girin" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Dil" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Çevirilere yardım edin" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Sürüm" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" @@ -89,13 +89,99 @@ msgstr "Текст" msgid "Images" msgstr "Зображення" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/uk/settings.po b/l10n/uk/settings.po index 78514de2dc..e4c718c3f1 100644 --- a/l10n/uk/settings.po +++ b/l10n/uk/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" @@ -181,95 +181,87 @@ msgstr "Комерційна підтримка" msgid "You have used %s of the available %s" msgstr "Ви використали %s із доступних %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "Клієнти" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Завантажити клієнт для ПК" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Завантажити клієнт для Android" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Завантажити клієнт для iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Пароль" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Ваш пароль змінено" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Не вдалося змінити Ваш пароль" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Поточний пароль" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Новий пароль" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Змінити пароль" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Показати Ім'я" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "Ваше ім'я було змінене" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "Неможливо змінити ваше зображене ім'я" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "Змінити зображене ім'я" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Ел.пошта" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Ваша адреса електронної пошти" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Введіть адресу електронної пошти для відновлення паролю" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Мова" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Допомогти з перекладом" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Використовуйте цю адресу для під'єднання до вашого ownCloud у вашому файловому менеджері" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Версія" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" @@ -89,13 +89,99 @@ msgstr "Văn bản" msgid "Images" msgstr "Hình ảnh" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/vi/settings.po b/l10n/vi/settings.po index 13b84537a4..588c1af1ed 100644 --- a/l10n/vi/settings.po +++ b/l10n/vi/settings.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" @@ -184,95 +184,87 @@ msgstr "Hỗ trợ có phí" msgid "You have used %s of the available %s" msgstr "Bạn đã sử dụng %s có sẵn %s " -#: templates/personal.php:12 -msgid "Clients" -msgstr "Khách hàng" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "Download bộ cài trên desktop" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "Download bộ cài trên Android" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "Download bộ cài trên iOS" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "Mật khẩu" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "Mật khẩu của bạn đã được thay đổi." -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "Không thể đổi mật khẩu" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "Mật khẩu cũ" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "Mật khẩu mới " -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "Đổi mật khẩu" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "Tên hiển thị" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "Tên hiển thị của bạn đã được thay đổi" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "Không thể thay đổi tên hiển thị của bạn" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "Thay đổi tên hiển thị" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Email" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "Email của bạn" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "Nhập địa chỉ email của bạn để khôi phục lại mật khẩu" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "Ngôn ngữ" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "Hỗ trợ dịch thuật" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "Sử dụng địa chỉ này để kết nối ownCloud của bạn trong trình quản lý file của bạn" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "Phiên bản" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n" "MIME-Version: 1.0\n" @@ -86,13 +86,99 @@ msgstr "文本" msgid "Images" msgstr "图片" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/zh_CN.GB2312/settings.po b/l10n/zh_CN.GB2312/settings.po index 55d149d2f0..f58a1429cc 100644 --- a/l10n/zh_CN.GB2312/settings.po +++ b/l10n/zh_CN.GB2312/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n" "MIME-Version: 1.0\n" @@ -179,95 +179,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "客户" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" +msgid "Get the apps to sync your files" msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "密码" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "您的密码以变更" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "不能改变你的密码" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "现在的密码" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "新密码" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "改变密码" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "Email" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "你的email地址" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "输入一个邮箱地址以激活密码恢复功能" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "语言" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "帮助翻译" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -87,13 +87,99 @@ msgstr "文本" msgid "Images" msgstr "图像" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/zh_CN/settings.po b/l10n/zh_CN/settings.po index c667c480d3..8c5e0d1de9 100644 --- a/l10n/zh_CN/settings.po +++ b/l10n/zh_CN/settings.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -183,95 +183,87 @@ msgstr "商业支持" msgid "You have used %s of the available %s" msgstr "你已使用 %s,有效空间 %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "客户" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "下载桌面客户端" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "下载 Android 客户端" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "下载 iOS 客户端" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "密码" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "密码已修改" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "无法修改密码" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "当前密码" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "新密码" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "修改密码" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "电子邮件" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "您的电子邮件" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "填写电子邮件地址以启用密码恢复功能" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "语言" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "帮助翻译" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "用该地址来连接文件管理器中的 ownCloud" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "版本" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n" "MIME-Version: 1.0\n" @@ -85,13 +85,99 @@ msgstr "" msgid "Images" msgstr "" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "" diff --git a/l10n/zh_HK/settings.po b/l10n/zh_HK/settings.po index 5c055bf08c..9dc37b8910 100644 --- a/l10n/zh_HK/settings.po +++ b/l10n/zh_HK/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n" "MIME-Version: 1.0\n" @@ -177,95 +177,87 @@ msgstr "" msgid "You have used %s of the available %s" msgstr "" -#: templates/personal.php:12 -msgid "Clients" -msgstr "" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "" - -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "" - -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 -msgid "Password" -msgstr "" - -#: templates/personal.php:24 -msgid "Your password was changed" +msgid "Get the apps to sync your files" msgstr "" #: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" + +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 +msgid "Password" +msgstr "" + +#: templates/personal.php:37 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the \n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:40+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -89,13 +89,99 @@ msgstr "文字" msgid "Images" msgstr "圖片" -#: setup.php:624 +#: setup.php:34 +msgid "Set an admin username." +msgstr "" + +#: setup.php:37 +msgid "Set an admin password." +msgstr "" + +#: setup.php:40 +msgid "Specify a data folder." +msgstr "" + +#: setup.php:53 +#, php-format +msgid "%s enter the database username." +msgstr "" + +#: setup.php:56 +#, php-format +msgid "%s enter the database name." +msgstr "" + +#: setup.php:59 +#, php-format +msgid "%s you may not use dots in the database name" +msgstr "" + +#: setup.php:62 +#, php-format +msgid "%s set the database host." +msgstr "" + +#: setup.php:126 setup.php:291 setup.php:336 +msgid "PostgreSQL username and/or password not valid" +msgstr "" + +#: setup.php:127 setup.php:150 setup.php:204 +msgid "You need to enter either an existing account or the administrator." +msgstr "" + +#: setup.php:149 setup.php:423 setup.php:489 +msgid "Oracle username and/or password not valid" +msgstr "" + +#: setup.php:203 +msgid "MySQL username and/or password not valid" +msgstr "" + +#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 +#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 +#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 +#: setup.php:579 +#, php-format +msgid "DB Error: \"%s\"" +msgstr "" + +#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 +#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 +#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#, php-format +msgid "Offending command was: \"%s\"" +msgstr "" + +#: setup.php:270 +#, php-format +msgid "MySQL user '%s'@'localhost' exists already." +msgstr "" + +#: setup.php:271 +msgid "Drop this user from MySQL" +msgstr "" + +#: setup.php:276 +#, php-format +msgid "MySQL user '%s'@'%%' already exists" +msgstr "" + +#: setup.php:277 +msgid "Drop this user from MySQL." +msgstr "" + +#: setup.php:548 setup.php:580 +#, php-format +msgid "Offending command was: \"%s\", name: %s, password: %s" +msgstr "" + +#: setup.php:644 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "您的網頁伺服器尚未被正確設定來進行檔案同步,因為您的 WebDAV 界面似乎無法使用。" -#: setup.php:625 +#: setup.php:645 #, php-format msgid "Please double check the installation guides." msgstr "請參考安裝指南。" diff --git a/l10n/zh_TW/settings.po b/l10n/zh_TW/settings.po index 4eef5b37e4..6561fdcf05 100644 --- a/l10n/zh_TW/settings.po +++ b/l10n/zh_TW/settings.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 00:03+0100\n" -"PO-Revision-Date: 2013-02-10 23:03+0000\n" +"POT-Creation-Date: 2013-02-11 15:39+0100\n" +"PO-Revision-Date: 2013-02-11 14:39+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" @@ -185,95 +185,87 @@ msgstr "商用支援" msgid "You have used %s of the available %s" msgstr "您已經使用了 %s ,目前可用空間為 %s" -#: templates/personal.php:12 -msgid "Clients" -msgstr "客戶" - -#: templates/personal.php:13 -msgid "Download Desktop Clients" -msgstr "下載桌面客戶端" - #: templates/personal.php:14 -msgid "Download Android Client" -msgstr "下載 Android 客戶端" +msgid "Get the apps to sync your files" +msgstr "" -#: templates/personal.php:15 -msgid "Download iOS Client" -msgstr "下載 iOS 客戶端" +#: templates/personal.php:25 +msgid "Show First Run Wizard again" +msgstr "" -#: templates/personal.php:23 templates/users.php:23 templates/users.php:81 +#: templates/personal.php:36 templates/users.php:23 templates/users.php:81 msgid "Password" msgstr "密碼" -#: templates/personal.php:24 +#: templates/personal.php:37 msgid "Your password was changed" msgstr "你的密碼已更改" -#: templates/personal.php:25 +#: templates/personal.php:38 msgid "Unable to change your password" msgstr "無法變更你的密碼" -#: templates/personal.php:26 +#: templates/personal.php:39 msgid "Current password" msgstr "目前密碼" -#: templates/personal.php:27 +#: templates/personal.php:40 msgid "New password" msgstr "新密碼" -#: templates/personal.php:29 +#: templates/personal.php:42 msgid "Change password" msgstr "變更密碼" -#: templates/personal.php:41 templates/users.php:80 +#: templates/personal.php:54 templates/users.php:80 msgid "Display Name" msgstr "顯示名稱" -#: templates/personal.php:42 +#: templates/personal.php:55 msgid "Your display name was changed" msgstr "已更改顯示名稱" -#: templates/personal.php:43 +#: templates/personal.php:56 msgid "Unable to change your display name" msgstr "無法更改您的顯示名稱" -#: templates/personal.php:46 +#: templates/personal.php:59 msgid "Change display name" msgstr "更改顯示名稱" -#: templates/personal.php:55 +#: templates/personal.php:68 msgid "Email" msgstr "電子郵件" -#: templates/personal.php:56 +#: templates/personal.php:69 msgid "Your email address" msgstr "你的電子郵件信箱" -#: templates/personal.php:57 +#: templates/personal.php:70 msgid "Fill in an email address to enable password recovery" msgstr "請填入電子郵件信箱以便回復密碼" -#: templates/personal.php:63 templates/personal.php:64 +#: templates/personal.php:76 templates/personal.php:77 msgid "Language" msgstr "語言" -#: templates/personal.php:69 +#: templates/personal.php:82 msgid "Help translate" msgstr "幫助翻譯" -#: templates/personal.php:74 +#: templates/personal.php:87 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:76 +#: templates/personal.php:89 msgid "Use this address to connect to your ownCloud in your file manager" msgstr "在您的檔案管理員中使用這個地址來連線到 ownCloud" -#: templates/personal.php:85 +#: templates/personal.php:98 msgid "Version" msgstr "版本" -#: templates/personal.php:87 +#: templates/personal.php:100 msgid "" "Developed by the ownCloud community, the "Usuarios", "Apps" => "Aplicativos", "Admin" => "Administración", -"ZIP download is turned off." => "As descargas ZIP están desactivadas", +"ZIP download is turned off." => "As descargas ZIP están desactivadas.", "Files need to be downloaded one by one." => "Os ficheiros necesitan seren descargados de un en un.", "Back to Files" => "Volver aos ficheiros", "Selected files too large to generate zip file." => "Os ficheiros seleccionados son demasiado grandes como para xerar un ficheiro zip.", -"couldn't be determined" => "non puido ser determinado", +"couldn't be determined" => "non foi posíbel determinalo", "Application is not enabled" => "O aplicativo non está activado", "Authentication error" => "Produciuse un erro na autenticación", "Token expired. Please reload page." => "Testemuña caducada. Recargue a páxina.", "Files" => "Ficheiros", "Text" => "Texto", "Images" => "Imaxes", -"seconds ago" => "hai segundos", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "O seu servidor web non está aínda configurado adecuadamente para permitir a sincronización de ficheiros xa que semella que a interface WebDAV non está a funcionar.", +"Please double check the installation guides." => "Volva comprobar as guías de instalación", +"seconds ago" => "segundos atrás", "1 minute ago" => "hai 1 minuto", "%d minutes ago" => "hai %d minutos", "1 hour ago" => "Vai 1 hora", diff --git a/lib/l10n/ru_RU.php b/lib/l10n/ru_RU.php index 03da09236e..de77056366 100644 --- a/lib/l10n/ru_RU.php +++ b/lib/l10n/ru_RU.php @@ -16,6 +16,8 @@ "Files" => "Файлы", "Text" => "Текст", "Images" => "Изображения", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ваш веб сервер ещё не достаточно точно настроен для возможности синхронизации, т.к. похоже, что интерфейс WebDAV сломан.", +"Please double check the installation guides." => "Пожалуйста проверте дважды гиды по установке.", "seconds ago" => "секунд назад", "1 minute ago" => "1 минуту назад", "%d minutes ago" => "%d минут назад", diff --git a/lib/l10n/sk_SK.php b/lib/l10n/sk_SK.php index 81f23ffdc5..16df7f2e19 100644 --- a/lib/l10n/sk_SK.php +++ b/lib/l10n/sk_SK.php @@ -2,13 +2,13 @@ "Help" => "Pomoc", "Personal" => "Osobné", "Settings" => "Nastavenia", -"Users" => "Užívatelia", +"Users" => "Používatelia", "Apps" => "Aplikácie", -"Admin" => "Správca", +"Admin" => "Administrátor", "ZIP download is turned off." => "Sťahovanie súborov ZIP je vypnuté.", "Files need to be downloaded one by one." => "Súbory musia byť nahrávané jeden za druhým.", "Back to Files" => "Späť na súbory", -"Selected files too large to generate zip file." => "Zvolené súbory sú príliž veľké na vygenerovanie zip súboru.", +"Selected files too large to generate zip file." => "Zvolené súbory sú príliš veľké na vygenerovanie zip súboru.", "couldn't be determined" => "nedá sa zistiť", "Application is not enabled" => "Aplikácia nie je zapnutá", "Authentication error" => "Chyba autentifikácie", @@ -16,6 +16,8 @@ "Files" => "Súbory", "Text" => "Text", "Images" => "Obrázky", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Váš webový server nie je správne nastavený na synchronizáciu, pretože rozhranie WebDAV je poškodené.", +"Please double check the installation guides." => "Prosím skontrolujte inštalačnú príručku.", "seconds ago" => "pred sekundami", "1 minute ago" => "pred 1 minútou", "%d minutes ago" => "pred %d minútami", @@ -28,7 +30,7 @@ "%d months ago" => "Pred %d mesiacmi.", "last year" => "minulý rok", "years ago" => "pred rokmi", -"%s is available. Get more information" => "%s je dostupné. Získať viac informácií", +"%s is available. Get more information" => "%s je dostupné. Získať pre viac informácií", "up to date" => "aktuálny", "updates check is disabled" => "sledovanie aktualizácií je vypnuté", "Could not find category \"%s\"" => "Nemožno nájsť danú kategóriu \"%s\"" diff --git a/lib/l10n/sv.php b/lib/l10n/sv.php index 36f00636b2..63ca60e89c 100644 --- a/lib/l10n/sv.php +++ b/lib/l10n/sv.php @@ -16,6 +16,8 @@ "Files" => "Filer", "Text" => "Text", "Images" => "Bilder", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Din webbserver är inte korrekt konfigurerad för att tillåta filsynkronisering eftersom WebDAV inte verkar fungera.", +"Please double check the installation guides." => "Var god kontrollera installationsguiden.", "seconds ago" => "sekunder sedan", "1 minute ago" => "1 minut sedan", "%d minutes ago" => "%d minuter sedan", diff --git a/settings/l10n/ar.php b/settings/l10n/ar.php index 37fd713257..509e7918f5 100644 --- a/settings/l10n/ar.php +++ b/settings/l10n/ar.php @@ -31,10 +31,6 @@ "Bugtracker" => "تعقب علة", "Commercial Support" => "دعم تجاري", "You have used %s of the available %s" => "تم إستهلاك %s من المتوفر %s", -"Clients" => "الزبائن", -"Download Desktop Clients" => "تحميل عملاء سطح المكتب", -"Download Android Client" => "تحميل عميل آندرويد", -"Download iOS Client" => "تحميل عميل آي أو أس", "Password" => "كلمات السر", "Your password was changed" => "لقد تم تغيير كلمة السر", "Unable to change your password" => "لم يتم تعديل كلمة السر بنجاح", diff --git a/settings/l10n/bn_BD.php b/settings/l10n/bn_BD.php index 1de264d13e..00bd3d0b0d 100644 --- a/settings/l10n/bn_BD.php +++ b/settings/l10n/bn_BD.php @@ -31,10 +31,6 @@ "Bugtracker" => "বাগট্র্যাকার", "Commercial Support" => "বাণিজ্যিক সাপোর্ট", "You have used %s of the available %s" => "আপনি ব্যবহার করছেন %s, সুলভ %s এর মধ্যে।", -"Clients" => "ক্লায়েন্ট", -"Download Desktop Clients" => "ডেস্কটপ ক্লায়েন্ট ডাউনলোড করুন", -"Download Android Client" => "অ্যান্ড্রয়েড ক্লায়েন্ট ডাউনলোড করুন", -"Download iOS Client" => "iOS ক্লায়েন্ট ডাউনলোড করুন", "Password" => "কূটশব্দ", "Your password was changed" => "আপনার কূটশব্দটি পরিবর্তন করা হয়েছে ", "Unable to change your password" => "আপনার কূটশব্দটি পরিবর্তন করতে সক্ষম নয়", diff --git a/settings/l10n/ca.php b/settings/l10n/ca.php index 552a2f4e5a..df1dd93ca6 100644 --- a/settings/l10n/ca.php +++ b/settings/l10n/ca.php @@ -38,10 +38,6 @@ "Bugtracker" => "Seguiment d'errors", "Commercial Support" => "Suport comercial", "You have used %s of the available %s" => "Heu utilitzat %s d'un total disponible de %s", -"Clients" => "Clients", -"Download Desktop Clients" => "Baixa clients d'escriptori", -"Download Android Client" => " Baixa el client per Android", -"Download iOS Client" => "Baixa el client per iOS", "Password" => "Contrasenya", "Your password was changed" => "La seva contrasenya s'ha canviat", "Unable to change your password" => "No s'ha pogut canviar la contrasenya", diff --git a/settings/l10n/cs_CZ.php b/settings/l10n/cs_CZ.php index 68c68f779b..de1917e5ab 100644 --- a/settings/l10n/cs_CZ.php +++ b/settings/l10n/cs_CZ.php @@ -38,10 +38,6 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "Placená podpora", "You have used %s of the available %s" => "Používáte %s z %s dostupných", -"Clients" => "Klienti", -"Download Desktop Clients" => "Stáhnout klienty pro počítač", -"Download Android Client" => "Stáhnout klienta pro android", -"Download iOS Client" => "Stáhnout klienta pro iOS", "Password" => "Heslo", "Your password was changed" => "Vaše heslo bylo změněno", "Unable to change your password" => "Vaše heslo nelze změnit", diff --git a/settings/l10n/da.php b/settings/l10n/da.php index ed577d9aa3..0353eb2fba 100644 --- a/settings/l10n/da.php +++ b/settings/l10n/da.php @@ -31,10 +31,6 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "Kommerciel support", "You have used %s of the available %s" => "Du har brugt %s af den tilgængelige %s", -"Clients" => "Klienter", -"Download Desktop Clients" => "Hent Desktop Klienter", -"Download Android Client" => "Hent Android Klient", -"Download iOS Client" => "Hent iOS Klient", "Password" => "Kodeord", "Your password was changed" => "Din adgangskode blev ændret", "Unable to change your password" => "Ude af stand til at ændre dit kodeord", diff --git a/settings/l10n/de.php b/settings/l10n/de.php index 3c377a5636..4e12e8e27a 100644 --- a/settings/l10n/de.php +++ b/settings/l10n/de.php @@ -32,10 +32,6 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "Kommerzieller Support", "You have used %s of the available %s" => "Du verwendest %s der verfügbaren %s", -"Clients" => "Clients", -"Download Desktop Clients" => "Desktop-Client herunterladen", -"Download Android Client" => "Android-Client herunterladen", -"Download iOS Client" => "iOS-Client herunterladen", "Password" => "Passwort", "Your password was changed" => "Dein Passwort wurde geändert.", "Unable to change your password" => "Passwort konnte nicht geändert werden", diff --git a/settings/l10n/de_DE.php b/settings/l10n/de_DE.php index f80917165f..1e17251a0d 100644 --- a/settings/l10n/de_DE.php +++ b/settings/l10n/de_DE.php @@ -38,10 +38,6 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "Kommerzieller Support", "You have used %s of the available %s" => "Sie verwenden %s der verfügbaren %s", -"Clients" => "Clients", -"Download Desktop Clients" => "Desktop-Client herunterladen", -"Download Android Client" => "Android-Client herunterladen", -"Download iOS Client" => "iOS-Client herunterladen", "Password" => "Passwort", "Your password was changed" => "Ihr Passwort wurde geändert.", "Unable to change your password" => "Das Passwort konnte nicht geändert werden", diff --git a/settings/l10n/el.php b/settings/l10n/el.php index 3698cfd4d5..a33deda7f3 100644 --- a/settings/l10n/el.php +++ b/settings/l10n/el.php @@ -31,10 +31,6 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "Εμπορική Υποστήριξη", "You have used %s of the available %s" => "Χρησιμοποιήσατε %s από διαθέσιμα %s", -"Clients" => "Πελάτες", -"Download Desktop Clients" => "Λήψη Προγραμμάτων για Σταθερούς Υπολογιστές", -"Download Android Client" => "Λήψη Προγράμματος Android", -"Download iOS Client" => "Λήψη Προγράμματος iOS", "Password" => "Συνθηματικό", "Your password was changed" => "Το συνθηματικό σας έχει αλλάξει", "Unable to change your password" => "Δεν ήταν δυνατή η αλλαγή του κωδικού πρόσβασης", diff --git a/settings/l10n/eo.php b/settings/l10n/eo.php index c4673f3a31..e43aaa673f 100644 --- a/settings/l10n/eo.php +++ b/settings/l10n/eo.php @@ -31,10 +31,6 @@ "Bugtracker" => "Cimoraportejo", "Commercial Support" => "Komerca subteno", "You have used %s of the available %s" => "Vi uzas %s el la haveblaj %s", -"Clients" => "Klientoj", -"Download Desktop Clients" => "Elŝuti labortablajn klientojn", -"Download Android Client" => "Elŝuti Android-klienton", -"Download iOS Client" => "Elŝuti iOS-klienton", "Password" => "Pasvorto", "Your password was changed" => "Via pasvorto ŝanĝiĝis", "Unable to change your password" => "Ne eblis ŝanĝi vian pasvorton", diff --git a/settings/l10n/es.php b/settings/l10n/es.php index ffbe94bd83..ff69a367ad 100644 --- a/settings/l10n/es.php +++ b/settings/l10n/es.php @@ -38,10 +38,6 @@ "Bugtracker" => "Rastreador de Bugs", "Commercial Support" => "Soporte Comercial", "You have used %s of the available %s" => "Ha usado %s de %s disponibles", -"Clients" => "Clientes", -"Download Desktop Clients" => "Descargar clientes de escritorio", -"Download Android Client" => "Descargar cliente para android", -"Download iOS Client" => "Descargar cliente para iOS", "Password" => "Contraseña", "Your password was changed" => "Su contraseña ha sido cambiada", "Unable to change your password" => "No se ha podido cambiar tu contraseña", diff --git a/settings/l10n/es_AR.php b/settings/l10n/es_AR.php index 102ca8f536..4c5daa4e05 100644 --- a/settings/l10n/es_AR.php +++ b/settings/l10n/es_AR.php @@ -31,10 +31,6 @@ "Bugtracker" => "Informar errores", "Commercial Support" => "Soporte comercial", "You have used %s of the available %s" => "Usaste %s de los %s disponibles", -"Clients" => "Clientes", -"Download Desktop Clients" => "Descargar clientes de escritorio", -"Download Android Client" => "Descargar cliente de Android", -"Download iOS Client" => "Descargar cliente de iOS", "Password" => "Contraseña", "Your password was changed" => "Tu contraseña fue cambiada", "Unable to change your password" => "No fue posible cambiar tu contraseña", diff --git a/settings/l10n/et_EE.php b/settings/l10n/et_EE.php index bcdfd8dc95..3822dc594d 100644 --- a/settings/l10n/et_EE.php +++ b/settings/l10n/et_EE.php @@ -23,7 +23,6 @@ "See application page at apps.owncloud.com" => "Vaata rakenduste lehte aadressil apps.owncloud.com", "-licensed by " => "-litsenseeritud ", "Update" => "Uuenda", -"Clients" => "Kliendid", "Password" => "Parool", "Your password was changed" => "Sinu parooli on muudetud", "Unable to change your password" => "Sa ei saa oma parooli muuta", diff --git a/settings/l10n/eu.php b/settings/l10n/eu.php index d7df03616d..a3efce7be6 100644 --- a/settings/l10n/eu.php +++ b/settings/l10n/eu.php @@ -31,10 +31,6 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "Babes komertziala", "You have used %s of the available %s" => "Dagoeneko %s erabili duzu eskuragarri duzun %setatik", -"Clients" => "Bezeroak", -"Download Desktop Clients" => "Deskargatu mahaigainerako bezeroak", -"Download Android Client" => "Deskargatu Android bezeroa", -"Download iOS Client" => "Deskargatu iOS bezeroa", "Password" => "Pasahitza", "Your password was changed" => "Zere pasahitza aldatu da", "Unable to change your password" => "Ezin izan da zure pasahitza aldatu", diff --git a/settings/l10n/fa.php b/settings/l10n/fa.php index 48f9e9a45c..5c5d312a87 100644 --- a/settings/l10n/fa.php +++ b/settings/l10n/fa.php @@ -1,6 +1,7 @@ "قادر به بارگذاری لیست از فروشگاه اپ نیستم", "Authentication error" => "خطا در اعتبار سنجی", +"Unable to change display name" => "امکان تغییر نام نمایشی شما وجود ندارد", "Group already exists" => "این گروه در حال حاضر موجود است", "Unable to add group" => "افزودن گروه امکان پذیر نیست", "Email saved" => "ایمیل ذخیره شد", @@ -9,6 +10,7 @@ "Unable to delete user" => "حذف کاربر امکان پذیر نیست", "Language changed" => "زبان تغییر کرد", "Invalid request" => "درخواست غیر قابل قبول", +"Admins can't remove themself from the admin group" => "مدیران نمی توانند خود را از گروه مدیریت حذف کنند", "Disable" => "غیرفعال", "Enable" => "فعال", "Please wait...." => "لطفا صبر کنید ...", @@ -22,26 +24,35 @@ "Select an App" => "یک برنامه انتخاب کنید", "See application page at apps.owncloud.com" => "صفحه این اٌپ را در apps.owncloud.com ببینید", "Update" => "به روز رسانی", +"User Documentation" => "مستندات کاربر", +"Administrator Documentation" => "مستندات مدیر", "Forum" => "انجمن", -"Clients" => "مشتریان", +"Commercial Support" => "پشتیبانی تجاری", "Password" => "گذرواژه", "Your password was changed" => "رمز عبور شما تغییر یافت", "Unable to change your password" => "ناتوان در تغییر گذرواژه", "Current password" => "گذرواژه کنونی", "New password" => "گذرواژه جدید", "Change password" => "تغییر گذر واژه", +"Display Name" => "نام نمایشی", +"Your display name was changed" => "نام نمایشی شما تغییر یافت", +"Unable to change your display name" => "امکان تغییر نام نمایشی شما وجود ندارد", +"Change display name" => "تغییر نام نمایشی", "Email" => "پست الکترونیکی", "Your email address" => "پست الکترونیکی شما", "Fill in an email address to enable password recovery" => "پست الکترونیکی را پرکنید تا بازیابی گذرواژه فعال شود", "Language" => "زبان", "Help translate" => "به ترجمه آن کمک کنید", "Version" => "نسخه", +"Login Name" => "نام کاربری", "Groups" => "گروه ها", "Create" => "ایجاد کردن", "Default Storage" => "ذخیره سازی پیش فرض", "Unlimited" => "نامحدود", "Other" => "سایر", "Storage" => "حافظه", +"change display name" => "تغییر نام نمایشی", +"set new password" => "تنظیم کلمه عبور جدید", "Default" => "پیش فرض", "Delete" => "پاک کردن" ); diff --git a/settings/l10n/fi_FI.php b/settings/l10n/fi_FI.php index 6619c116d3..a42b50ec95 100644 --- a/settings/l10n/fi_FI.php +++ b/settings/l10n/fi_FI.php @@ -38,10 +38,6 @@ "Bugtracker" => "Ohjelmistovirheiden jäljitys", "Commercial Support" => "Kaupallinen tuki", "You have used %s of the available %s" => "Käytössäsi on %s/%s", -"Clients" => "Asiakkaat", -"Download Desktop Clients" => "Lataa työpöytäsovelluksia", -"Download Android Client" => "Lataa Android-sovellus", -"Download iOS Client" => "Lataa iOS-sovellus", "Password" => "Salasana", "Your password was changed" => "Salasanasi vaihdettiin", "Unable to change your password" => "Salasanaasi ei voitu vaihtaa", diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php index 67f80063b5..1f1cb3eb1f 100644 --- a/settings/l10n/fr.php +++ b/settings/l10n/fr.php @@ -38,10 +38,6 @@ "Bugtracker" => "Suivi de bugs", "Commercial Support" => "Support commercial", "You have used %s of the available %s" => "Vous avez utilisé %s des %s disponibles", -"Clients" => "Clients", -"Download Desktop Clients" => "Télécharger le client de synchronisation pour votre ordinateur", -"Download Android Client" => "Télécharger le client Android", -"Download iOS Client" => "Télécharger le client iOS", "Password" => "Mot de passe", "Your password was changed" => "Votre mot de passe a été changé", "Unable to change your password" => "Impossible de changer votre mot de passe", diff --git a/settings/l10n/gl.php b/settings/l10n/gl.php index c4f6e65953..53aaf8eb3f 100644 --- a/settings/l10n/gl.php +++ b/settings/l10n/gl.php @@ -31,10 +31,6 @@ "Bugtracker" => "Seguemento de fallos", "Commercial Support" => "Asistencia comercial", "You have used %s of the available %s" => "Te en uso %s do total dispoñíbel de %s", -"Clients" => "Clientes", -"Download Desktop Clients" => "Descargar clientes para escritorio", -"Download Android Client" => "Descargar clientes para Android", -"Download iOS Client" => "Descargar clientes ra iOS", "Password" => "Contrasinal", "Your password was changed" => "O seu contrasinal foi cambiado", "Unable to change your password" => "Non é posíbel cambiar o seu contrasinal", diff --git a/settings/l10n/he.php b/settings/l10n/he.php index 13f2b68534..40f8210087 100644 --- a/settings/l10n/he.php +++ b/settings/l10n/he.php @@ -30,10 +30,6 @@ "Forum" => "פורום", "Commercial Support" => "תמיכה בתשלום", "You have used %s of the available %s" => "השתמשת ב־%s מתוך %s הזמינים לך", -"Clients" => "לקוחות", -"Download Desktop Clients" => "הורד לתוכנה למחשב", -"Download Android Client" => "הורד תוכנה לאנדרואיד", -"Download iOS Client" => "הורד תוכנה לiOS", "Password" => "ססמה", "Your password was changed" => "הססמה שלך הוחלפה", "Unable to change your password" => "לא ניתן לשנות את הססמה שלך", diff --git a/settings/l10n/hr.php b/settings/l10n/hr.php index 4b8a48b4f2..32175bbb74 100644 --- a/settings/l10n/hr.php +++ b/settings/l10n/hr.php @@ -13,7 +13,6 @@ "Add your App" => "Dodajte vašu aplikaciju", "Select an App" => "Odaberite Aplikaciju", "See application page at apps.owncloud.com" => "Pogledajte stranicu s aplikacijama na apps.owncloud.com", -"Clients" => "Klijenti", "Password" => "Lozinka", "Unable to change your password" => "Nemoguće promijeniti lozinku", "Current password" => "Trenutna lozinka", diff --git a/settings/l10n/hu_HU.php b/settings/l10n/hu_HU.php index a97ff41ffd..ae1a179b58 100644 --- a/settings/l10n/hu_HU.php +++ b/settings/l10n/hu_HU.php @@ -31,10 +31,6 @@ "Bugtracker" => "Hibabejelentések", "Commercial Support" => "Megvásárolható támogatás", "You have used %s of the available %s" => "Az Ön tárterület-felhasználása jelenleg: %s. Maximálisan ennyi áll rendelkezésére: %s", -"Clients" => "Kliensek", -"Download Desktop Clients" => "Desktop kliensprogramok letöltése", -"Download Android Client" => "Android kliens letöltése", -"Download iOS Client" => "iOS kliens letöltése", "Password" => "Jelszó", "Your password was changed" => "A jelszava megváltozott", "Unable to change your password" => "A jelszó nem változtatható meg", diff --git a/settings/l10n/ia.php b/settings/l10n/ia.php index 220db7b957..502dbfefab 100644 --- a/settings/l10n/ia.php +++ b/settings/l10n/ia.php @@ -5,7 +5,6 @@ "Add your App" => "Adder tu application", "Select an App" => "Selectionar un app", "Update" => "Actualisar", -"Clients" => "Clientes", "Password" => "Contrasigno", "Unable to change your password" => "Non pote cambiar tu contrasigno", "Current password" => "Contrasigno currente", diff --git a/settings/l10n/id.php b/settings/l10n/id.php index ce1a1581a8..8b0b280796 100644 --- a/settings/l10n/id.php +++ b/settings/l10n/id.php @@ -13,7 +13,6 @@ "Select an App" => "Pilih satu aplikasi", "See application page at apps.owncloud.com" => "Lihat halaman aplikasi di apps.owncloud.com", "Update" => "Pembaruan", -"Clients" => "Klien", "Password" => "Password", "Unable to change your password" => "Tidak dapat merubah password anda", "Current password" => "Password saat ini", diff --git a/settings/l10n/is.php b/settings/l10n/is.php index 3afe88b5d8..fffd8124d3 100644 --- a/settings/l10n/is.php +++ b/settings/l10n/is.php @@ -31,10 +31,6 @@ "Bugtracker" => "Villubókhald", "Commercial Support" => "Borgaður stuðningur", "You have used %s of the available %s" => "Þú hefur notað %s af tiltæku %s", -"Clients" => "Notendahugbúnaður", -"Download Desktop Clients" => "Hlaða niður notendahugbúnaði", -"Download Android Client" => "Hlaða niður Andoid hugbúnaði", -"Download iOS Client" => "Hlaða niður iOS hugbúnaði", "Password" => "Lykilorð", "Your password was changed" => "Lykilorði þínu hefur verið breytt", "Unable to change your password" => "Ekki tókst að breyta lykilorðinu þínu", diff --git a/settings/l10n/it.php b/settings/l10n/it.php index 934816be02..45821cb7b2 100644 --- a/settings/l10n/it.php +++ b/settings/l10n/it.php @@ -38,10 +38,7 @@ "Bugtracker" => "Sistema di tracciamento bug", "Commercial Support" => "Supporto commerciale", "You have used %s of the available %s" => "Hai utilizzato %s dei %s disponibili", -"Clients" => "Client", -"Download Desktop Clients" => "Scarica client desktop", -"Download Android Client" => "Scarica client Android", -"Download iOS Client" => "Scarica client iOS", +"Get the apps to sync your files" => "Scarica le applicazioni per sincronizzare i tuoi file", "Password" => "Password", "Your password was changed" => "La tua password è cambiata", "Unable to change your password" => "Modifica password non riuscita", diff --git a/settings/l10n/ja_JP.php b/settings/l10n/ja_JP.php index abd1dd2d05..04ab6b5e18 100644 --- a/settings/l10n/ja_JP.php +++ b/settings/l10n/ja_JP.php @@ -38,10 +38,6 @@ "Bugtracker" => "バグトラッカー", "Commercial Support" => "コマーシャルサポート", "You have used %s of the available %s" => "現在、%s / %s を利用しています", -"Clients" => "顧客", -"Download Desktop Clients" => "デスクトップクライアントをダウンロード", -"Download Android Client" => "Androidクライアントをダウンロード", -"Download iOS Client" => "iOSクライアントをダウンロード", "Password" => "パスワード", "Your password was changed" => "パスワードを変更しました", "Unable to change your password" => "パスワードを変更することができません", diff --git a/settings/l10n/ka_GE.php b/settings/l10n/ka_GE.php index bb4e4a82fe..5f33972a80 100644 --- a/settings/l10n/ka_GE.php +++ b/settings/l10n/ka_GE.php @@ -23,7 +23,6 @@ "See application page at apps.owncloud.com" => "ნახეთ აპლიკაციის გვერდი apps.owncloud.com –ზე", "-licensed by " => "-ლიცენსირებულია ", "Update" => "განახლება", -"Clients" => "კლიენტები", "Password" => "პაროლი", "Your password was changed" => "თქვენი პაროლი შეიცვალა", "Unable to change your password" => "თქვენი პაროლი არ შეიცვალა", diff --git a/settings/l10n/ko.php b/settings/l10n/ko.php index 7c8071048d..0afaef0015 100644 --- a/settings/l10n/ko.php +++ b/settings/l10n/ko.php @@ -31,10 +31,6 @@ "Bugtracker" => "버그 트래커", "Commercial Support" => "상업용 지원", "You have used %s of the available %s" => "현재 공간 %s/%s을(를) 사용 중입니다", -"Clients" => "클라이언트", -"Download Desktop Clients" => "데스크톱 클라이언트 다운로드", -"Download Android Client" => "안드로이드 클라이언트 다운로드", -"Download iOS Client" => "iOS 클라이언트 다운로드", "Password" => "암호", "Your password was changed" => "암호가 변경되었습니다", "Unable to change your password" => "암호를 변경할 수 없음", diff --git a/settings/l10n/lb.php b/settings/l10n/lb.php index c78052fdde..eec8994913 100644 --- a/settings/l10n/lb.php +++ b/settings/l10n/lb.php @@ -13,7 +13,6 @@ "Add your App" => "Setz deng App bei", "Select an App" => "Wiel eng Applikatioun aus", "See application page at apps.owncloud.com" => "Kuck dir d'Applicatioun's Säit op apps.owncloud.com un", -"Clients" => "Clienten", "Password" => "Passwuert", "Unable to change your password" => "Konnt däin Passwuert net änneren", "Current password" => "Momentan 't Passwuert", diff --git a/settings/l10n/lt_LT.php b/settings/l10n/lt_LT.php index e676699477..d86b4eff9b 100644 --- a/settings/l10n/lt_LT.php +++ b/settings/l10n/lt_LT.php @@ -16,7 +16,6 @@ "Select an App" => "Pasirinkite programą", "-licensed by " => "- autorius", "Update" => "Atnaujinti", -"Clients" => "Klientai", "Password" => "Slaptažodis", "Your password was changed" => "Jūsų slaptažodis buvo pakeistas", "Unable to change your password" => "Neįmanoma pakeisti slaptažodžio", diff --git a/settings/l10n/lv.php b/settings/l10n/lv.php index 0870c75a34..4ea926f8b8 100644 --- a/settings/l10n/lv.php +++ b/settings/l10n/lv.php @@ -38,10 +38,6 @@ "Bugtracker" => "Kļūdu sekotājs", "Commercial Support" => "Komerciālais atbalsts", "You have used %s of the available %s" => "Jūs lietojat %s no pieejamajiem %s", -"Clients" => "Klienti", -"Download Desktop Clients" => "Lejupielādēt darbvirsmas klientus", -"Download Android Client" => "Lejupielādēt Android klientu", -"Download iOS Client" => "Lejupielādēt iOS klientu", "Password" => "Parole", "Your password was changed" => "Jūru parole tika nomainīta", "Unable to change your password" => "Nevar nomainīt jūsu paroli", diff --git a/settings/l10n/mk.php b/settings/l10n/mk.php index 4268f35bbd..6307a2a1af 100644 --- a/settings/l10n/mk.php +++ b/settings/l10n/mk.php @@ -30,10 +30,6 @@ "Forum" => "Форум", "Commercial Support" => "Комерцијална подршка", "You have used %s of the available %s" => "Имате искористено %s од достапните %s", -"Clients" => "Клиенти", -"Download Desktop Clients" => "Преземи клиенти за десктоп", -"Download Android Client" => "Преземи клиент за Андроид", -"Download iOS Client" => "Преземи iOS клиент", "Password" => "Лозинка", "Your password was changed" => "Вашата лозинка беше променета.", "Unable to change your password" => "Вашата лозинка неможе да се смени", diff --git a/settings/l10n/ms_MY.php b/settings/l10n/ms_MY.php index 0af06d65a6..c573979d87 100644 --- a/settings/l10n/ms_MY.php +++ b/settings/l10n/ms_MY.php @@ -13,7 +13,6 @@ "Select an App" => "Pilih aplikasi", "See application page at apps.owncloud.com" => "Lihat halaman applikasi di apps.owncloud.com", "Update" => "Kemaskini", -"Clients" => "klien", "Password" => "Kata laluan ", "Unable to change your password" => "Gagal mengubah kata laluan anda ", "Current password" => "Kata laluan semasa", diff --git a/settings/l10n/nb_NO.php b/settings/l10n/nb_NO.php index 2969cdc17f..96831eb2d6 100644 --- a/settings/l10n/nb_NO.php +++ b/settings/l10n/nb_NO.php @@ -26,10 +26,6 @@ "Administrator Documentation" => "Administratordokumentasjon", "Commercial Support" => "Kommersiell støtte", "You have used %s of the available %s" => "Du har brukt %s av tilgjengelig %s", -"Clients" => "Klienter", -"Download Desktop Clients" => "Last ned skrivebordsklienter", -"Download Android Client" => "Last ned Android-klient", -"Download iOS Client" => "Last ned iOS-klient", "Password" => "Passord", "Your password was changed" => "Passord har blitt endret", "Unable to change your password" => "Kunne ikke endre passordet ditt", diff --git a/settings/l10n/nl.php b/settings/l10n/nl.php index 3bddff8222..84b70d9d32 100644 --- a/settings/l10n/nl.php +++ b/settings/l10n/nl.php @@ -38,10 +38,6 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "Commerciële ondersteuning", "You have used %s of the available %s" => "U heeft %s van de %s beschikbaren gebruikt", -"Clients" => "Klanten", -"Download Desktop Clients" => "Download Desktop Clients", -"Download Android Client" => "Download Android Client", -"Download iOS Client" => "Download iOS Client", "Password" => "Wachtwoord", "Your password was changed" => "Je wachtwoord is veranderd", "Unable to change your password" => "Niet in staat om uw wachtwoord te wijzigen", diff --git a/settings/l10n/nn_NO.php b/settings/l10n/nn_NO.php index 1fb1d0763a..c3e1c83c99 100644 --- a/settings/l10n/nn_NO.php +++ b/settings/l10n/nn_NO.php @@ -11,7 +11,6 @@ "__language_name__" => "Nynorsk", "Select an App" => "Vel ein applikasjon", "Update" => "Oppdater", -"Clients" => "Klientar", "Password" => "Passord", "Unable to change your password" => "Klarte ikkje å endra passordet", "Current password" => "Passord", diff --git a/settings/l10n/oc.php b/settings/l10n/oc.php index 662b16fd16..0e09acbd18 100644 --- a/settings/l10n/oc.php +++ b/settings/l10n/oc.php @@ -21,7 +21,6 @@ "Select an App" => "Selecciona una applicacion", "See application page at apps.owncloud.com" => "Agacha la pagina d'applications en cò de apps.owncloud.com", "-licensed by " => "-licençiat per ", -"Clients" => "Practica", "Password" => "Senhal", "Your password was changed" => "Ton senhal a cambiat", "Unable to change your password" => "Pas possible de cambiar ton senhal", diff --git a/settings/l10n/pl.php b/settings/l10n/pl.php index d3675061c8..2fd921ef0f 100644 --- a/settings/l10n/pl.php +++ b/settings/l10n/pl.php @@ -31,10 +31,6 @@ "Bugtracker" => "Zgłaszanie błędów", "Commercial Support" => "Wsparcie komercyjne", "You have used %s of the available %s" => "Korzystasz z %s z dostępnych %s", -"Clients" => "Klienci", -"Download Desktop Clients" => "Pobierz klienta dla Komputera", -"Download Android Client" => "Pobierz klienta dla Androida", -"Download iOS Client" => "Pobierz klienta dla iOS", "Password" => "Hasło", "Your password was changed" => "Twoje hasło zostało zmienione", "Unable to change your password" => "Nie można zmienić hasła", diff --git a/settings/l10n/pt_BR.php b/settings/l10n/pt_BR.php index 4b7f088d39..01904d9766 100644 --- a/settings/l10n/pt_BR.php +++ b/settings/l10n/pt_BR.php @@ -30,10 +30,6 @@ "Forum" => "Fórum", "Commercial Support" => "Suporte Comercial", "You have used %s of the available %s" => "Você usou %s do seu espaço de %s", -"Clients" => "Clientes", -"Download Desktop Clients" => "Baixar Clientes Desktop", -"Download Android Client" => "Baixar Cliente Android", -"Download iOS Client" => "Baixar Cliente iOS", "Password" => "Senha", "Your password was changed" => "Sua senha foi alterada", "Unable to change your password" => "Não é possivel alterar a sua senha", diff --git a/settings/l10n/pt_PT.php b/settings/l10n/pt_PT.php index fe0c225d0a..3dc53eb2ad 100644 --- a/settings/l10n/pt_PT.php +++ b/settings/l10n/pt_PT.php @@ -38,10 +38,6 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "Suporte Comercial", "You have used %s of the available %s" => "Usou %s do disponivel %s", -"Clients" => "Clientes", -"Download Desktop Clients" => "Transferir os clientes de sincronização", -"Download Android Client" => "Transferir o cliente android", -"Download iOS Client" => "Transferir o cliente iOS", "Password" => "Palavra-chave", "Your password was changed" => "A sua palavra-passe foi alterada", "Unable to change your password" => "Não foi possivel alterar a sua palavra-chave", diff --git a/settings/l10n/ro.php b/settings/l10n/ro.php index beb1b36118..249395f33f 100644 --- a/settings/l10n/ro.php +++ b/settings/l10n/ro.php @@ -31,10 +31,6 @@ "Bugtracker" => "Urmărire bug-uri", "Commercial Support" => "Suport comercial", "You have used %s of the available %s" => "Ați utilizat %s din %s disponibile", -"Clients" => "Clienți", -"Download Desktop Clients" => "Descarcă client desktop", -"Download Android Client" => "Descarcă client Android", -"Download iOS Client" => "Descarcă client iOS", "Password" => "Parolă", "Your password was changed" => "Parola a fost modificată", "Unable to change your password" => "Imposibil de-ați schimbat parola", diff --git a/settings/l10n/ru.php b/settings/l10n/ru.php index c5b1043419..1d457db745 100644 --- a/settings/l10n/ru.php +++ b/settings/l10n/ru.php @@ -38,10 +38,6 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "Коммерческая поддержка", "You have used %s of the available %s" => "Вы использовали %s из доступных %s", -"Clients" => "Клиенты", -"Download Desktop Clients" => "Загрузка приложений для компьютера", -"Download Android Client" => "Загрузка Android-приложения", -"Download iOS Client" => "Загрузка iOS-приложения", "Password" => "Пароль", "Your password was changed" => "Ваш пароль изменён", "Unable to change your password" => "Невозможно сменить пароль", diff --git a/settings/l10n/ru_RU.php b/settings/l10n/ru_RU.php index f0183e9712..c5e595226b 100644 --- a/settings/l10n/ru_RU.php +++ b/settings/l10n/ru_RU.php @@ -31,10 +31,6 @@ "Bugtracker" => "Отслеживание ошибок", "Commercial Support" => "Коммерческая поддержка", "You have used %s of the available %s" => "Вы использовали %s из возможных %s", -"Clients" => "Клиенты", -"Download Desktop Clients" => "Загрузка десктопных клиентов", -"Download Android Client" => "Загрузить клиент под Android ", -"Download iOS Client" => "Загрузить клиент под iOS ", "Password" => "Пароль", "Your password was changed" => "Ваш пароль был изменен", "Unable to change your password" => "Невозможно изменить Ваш пароль", diff --git a/settings/l10n/si_LK.php b/settings/l10n/si_LK.php index 80b37054fe..a188b13534 100644 --- a/settings/l10n/si_LK.php +++ b/settings/l10n/si_LK.php @@ -19,7 +19,6 @@ "More Apps" => "තවත් යෙදුම්", "Select an App" => "යෙදුමක් තොරන්න", "Update" => "යාවත්කාල කිරීම", -"Clients" => "සේවාලාභීන්", "Password" => "මුරපදය", "Your password was changed" => "ඔබගේ මුර පදය වෙනස් කෙරුණි", "Unable to change your password" => "මුර පදය වෙනස් කළ නොහැකි විය", diff --git a/settings/l10n/sk_SK.php b/settings/l10n/sk_SK.php index bed91d1090..bb13f0c9ce 100644 --- a/settings/l10n/sk_SK.php +++ b/settings/l10n/sk_SK.php @@ -1,6 +1,7 @@ "Nie je možné nahrať zoznam z App Store", "Authentication error" => "Chyba pri autentifikácii", +"Unable to change display name" => "Nemožno zmeniť zobrazované meno", "Group already exists" => "Skupina už existuje", "Unable to add group" => "Nie je možné pridať skupinu", "Could not enable app. " => "Nie je možné zapnúť aplikáciu.", @@ -11,7 +12,7 @@ "Language changed" => "Jazyk zmenený", "Invalid request" => "Neplatná požiadavka", "Admins can't remove themself from the admin group" => "Administrátori nesmú odstrániť sami seba zo skupiny admin", -"Unable to add user to group %s" => "Nie je možné pridať užívateľa do skupiny %s", +"Unable to add user to group %s" => "Nie je možné pridať používateľa do skupiny %s", "Unable to remove user from group %s" => "Nie je možné odstrániť používateľa zo skupiny %s", "Couldn't update app." => "Nemožno aktualizovať aplikáciu.", "Update to {appversion}" => "Aktualizovať na {appversion}", @@ -19,7 +20,7 @@ "Enable" => "Povoliť", "Please wait...." => "Čakajte prosím...", "Updating...." => "Aktualizujem...", -"Error while updating app" => "hyba pri aktualizácii aplikácie", +"Error while updating app" => "chyba pri aktualizácii aplikácie", "Error" => "Chyba", "Updated" => "Aktualizované", "Saving..." => "Ukladám...", @@ -31,16 +32,12 @@ "-licensed by " => "-licencované ", "Update" => "Aktualizovať", "User Documentation" => "Príručka používateľa", -"Administrator Documentation" => "Príručka správcu", +"Administrator Documentation" => "Príručka administrátora", "Online Documentation" => "Online príručka", "Forum" => "Fórum", "Bugtracker" => "Bugtracker", "Commercial Support" => "Komerčná podpora", "You have used %s of the available %s" => "Použili ste %s z %s dostupných ", -"Clients" => "Klienti", -"Download Desktop Clients" => "Stiahnuť desktopového klienta", -"Download Android Client" => "Stiahnuť Android klienta", -"Download iOS Client" => "Stiahnuť iOS klienta", "Password" => "Heslo", "Your password was changed" => "Heslo bolo zmenené", "Unable to change your password" => "Nie je možné zmeniť vaše heslo", @@ -48,6 +45,9 @@ "New password" => "Nové heslo", "Change password" => "Zmeniť heslo", "Display Name" => "Zobrazované meno", +"Your display name was changed" => "Vaše zobrazované meno bolo zmenené", +"Unable to change your display name" => "Nemožno zmeniť Vaše zobrazované meno", +"Change display name" => "Zmeniť zobrazované meno", "Email" => "Email", "Your email address" => "Vaša emailová adresa", "Fill in an email address to enable password recovery" => "Vyplňte emailovú adresu pre aktivovanie obnovy hesla", diff --git a/settings/l10n/sl.php b/settings/l10n/sl.php index f91615c9ab..b545f45522 100644 --- a/settings/l10n/sl.php +++ b/settings/l10n/sl.php @@ -31,10 +31,6 @@ "Bugtracker" => "Sistem za sledenje napakam", "Commercial Support" => "Komercialna podpora", "You have used %s of the available %s" => "Uporabljate %s od razpoložljivih %s", -"Clients" => "Stranka", -"Download Desktop Clients" => "Prenesi namizne odjemalce", -"Download Android Client" => "Prenesi Android odjemalec", -"Download iOS Client" => "Prenesi iOS odjemalec", "Password" => "Geslo", "Your password was changed" => "Vaše geslo je spremenjeno", "Unable to change your password" => "Gesla ni mogoče spremeniti.", diff --git a/settings/l10n/sr.php b/settings/l10n/sr.php index d26d63eec4..f081843535 100644 --- a/settings/l10n/sr.php +++ b/settings/l10n/sr.php @@ -25,7 +25,6 @@ "-licensed by " => "-лиценцирао ", "Update" => "Ажурирај", "You have used %s of the available %s" => "Искористили сте %s од дозвољених %s", -"Clients" => "Клијенти", "Password" => "Лозинка", "Your password was changed" => "Лозинка је промењена", "Unable to change your password" => "Не могу да изменим вашу лозинку", diff --git a/settings/l10n/sr@latin.php b/settings/l10n/sr@latin.php index 0dadb667c7..190e3e5609 100644 --- a/settings/l10n/sr@latin.php +++ b/settings/l10n/sr@latin.php @@ -3,7 +3,6 @@ "Language changed" => "Jezik je izmenjen", "Invalid request" => "Neispravan zahtev", "Select an App" => "Izaberite program", -"Clients" => "Klijenti", "Password" => "Lozinka", "Unable to change your password" => "Ne mogu da izmenim vašu lozinku", "Current password" => "Trenutna lozinka", diff --git a/settings/l10n/sv.php b/settings/l10n/sv.php index 801e9a018f..c32b839f05 100644 --- a/settings/l10n/sv.php +++ b/settings/l10n/sv.php @@ -1,6 +1,7 @@ "Kan inte ladda listan från App Store", "Authentication error" => "Autentiseringsfel", +"Unable to change display name" => "Kan inte ändra visningsnamn", "Group already exists" => "Gruppen finns redan", "Unable to add group" => "Kan inte lägga till grupp", "Could not enable app. " => "Kunde inte aktivera appen.", @@ -37,10 +38,6 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "Kommersiell support", "You have used %s of the available %s" => "Du har använt %s av tillgängliga %s", -"Clients" => "Kunder", -"Download Desktop Clients" => "Ladda ner skrivbordsklienter", -"Download Android Client" => "Ladda ner klient för Android", -"Download iOS Client" => "Ladda ner klient för iOS", "Password" => "Lösenord", "Your password was changed" => "Ditt lösenord har ändrats", "Unable to change your password" => "Kunde inte ändra ditt lösenord", @@ -48,6 +45,9 @@ "New password" => "Nytt lösenord", "Change password" => "Ändra lösenord", "Display Name" => "Visat namn", +"Your display name was changed" => "Ditt visningsnamn har ändrats", +"Unable to change your display name" => "Kan inte ändra ditt visningsnamn", +"Change display name" => "Ändra visningsnamn", "Email" => "E-post", "Your email address" => "Din e-postadress", "Fill in an email address to enable password recovery" => "Fyll i en e-postadress för att aktivera återställning av lösenord", diff --git a/settings/l10n/ta_LK.php b/settings/l10n/ta_LK.php index c834626bd8..8811b349aa 100644 --- a/settings/l10n/ta_LK.php +++ b/settings/l10n/ta_LK.php @@ -24,7 +24,6 @@ "-licensed by " => "-அனுமதி பெற்ற ", "Update" => "இற்றைப்படுத்தல்", "You have used %s of the available %s" => "நீங்கள் %s இலுள்ள %sபயன்படுத்தியுள்ளீர்கள்", -"Clients" => "வாடிக்கையாளர்கள்", "Password" => "கடவுச்சொல்", "Your password was changed" => "உங்களுடைய கடவுச்சொல் மாற்றப்பட்டுள்ளது", "Unable to change your password" => "உங்களுடைய கடவுச்சொல்லை மாற்றமுடியாது", diff --git a/settings/l10n/th_TH.php b/settings/l10n/th_TH.php index 324680c187..071d136d7d 100644 --- a/settings/l10n/th_TH.php +++ b/settings/l10n/th_TH.php @@ -37,10 +37,6 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "บริการลูกค้าแบบเสียค่าใช้จ่าย", "You have used %s of the available %s" => "คุณได้ใช้งานไปแล้ว %s จากจำนวนที่สามารถใช้ได้ %s", -"Clients" => "ลูกค้า", -"Download Desktop Clients" => "ดาวน์โหลดโปรแกรมไคลเอนต์สำหรับเครื่องเดสก์ท็อป", -"Download Android Client" => "ดาวน์โหลดโปรแกรมไคลเอนต์สำหรับแอนดรอยด์", -"Download iOS Client" => "ดาวน์โหลดโปรแกรมไคลเอนต์สำหรับ iOS", "Password" => "รหัสผ่าน", "Your password was changed" => "รหัสผ่านของคุณถูกเปลี่ยนแล้ว", "Unable to change your password" => "ไม่สามารถเปลี่ยนรหัสผ่านของคุณได้", diff --git a/settings/l10n/tr.php b/settings/l10n/tr.php index 8c0b98bf99..98a7d41f0a 100644 --- a/settings/l10n/tr.php +++ b/settings/l10n/tr.php @@ -27,10 +27,6 @@ "Forum" => "Forum", "Bugtracker" => "Hata Takip Sistemi", "Commercial Support" => "Ticari Destek", -"Clients" => "Müşteriler", -"Download Desktop Clients" => "Masaüstü İstemcilerini İndir", -"Download Android Client" => "Android İstemcisini İndir", -"Download iOS Client" => "iOS İstemcisini İndir", "Password" => "Parola", "Your password was changed" => "Şifreniz değiştirildi", "Unable to change your password" => "Parolanız değiştirilemiyor", diff --git a/settings/l10n/uk.php b/settings/l10n/uk.php index ff882df18e..4e8c0aefd0 100644 --- a/settings/l10n/uk.php +++ b/settings/l10n/uk.php @@ -38,10 +38,6 @@ "Bugtracker" => "БагТрекер", "Commercial Support" => "Комерційна підтримка", "You have used %s of the available %s" => "Ви використали %s із доступних %s", -"Clients" => "Клієнти", -"Download Desktop Clients" => "Завантажити клієнт для ПК", -"Download Android Client" => "Завантажити клієнт для Android", -"Download iOS Client" => "Завантажити клієнт для iOS", "Password" => "Пароль", "Your password was changed" => "Ваш пароль змінено", "Unable to change your password" => "Не вдалося змінити Ваш пароль", diff --git a/settings/l10n/vi.php b/settings/l10n/vi.php index f660b078bf..2adc87f457 100644 --- a/settings/l10n/vi.php +++ b/settings/l10n/vi.php @@ -38,10 +38,6 @@ "Bugtracker" => "Hệ ghi nhận lỗi", "Commercial Support" => "Hỗ trợ có phí", "You have used %s of the available %s" => "Bạn đã sử dụng %s có sẵn %s ", -"Clients" => "Khách hàng", -"Download Desktop Clients" => "Download bộ cài trên desktop", -"Download Android Client" => "Download bộ cài trên Android", -"Download iOS Client" => "Download bộ cài trên iOS", "Password" => "Mật khẩu", "Your password was changed" => "Mật khẩu của bạn đã được thay đổi.", "Unable to change your password" => "Không thể đổi mật khẩu", diff --git a/settings/l10n/zh_CN.GB2312.php b/settings/l10n/zh_CN.GB2312.php index 95a79e467c..b54a2df555 100644 --- a/settings/l10n/zh_CN.GB2312.php +++ b/settings/l10n/zh_CN.GB2312.php @@ -23,7 +23,6 @@ "See application page at apps.owncloud.com" => "在owncloud.com上查看应用程序", "-licensed by " => "授权协议 ", "Update" => "更新", -"Clients" => "客户", "Password" => "密码", "Your password was changed" => "您的密码以变更", "Unable to change your password" => "不能改变你的密码", diff --git a/settings/l10n/zh_CN.php b/settings/l10n/zh_CN.php index df0e11dd15..ec2a6b28c9 100644 --- a/settings/l10n/zh_CN.php +++ b/settings/l10n/zh_CN.php @@ -31,10 +31,6 @@ "Bugtracker" => "问题跟踪器", "Commercial Support" => "商业支持", "You have used %s of the available %s" => "你已使用 %s,有效空间 %s", -"Clients" => "客户", -"Download Desktop Clients" => "下载桌面客户端", -"Download Android Client" => "下载 Android 客户端", -"Download iOS Client" => "下载 iOS 客户端", "Password" => "密码", "Your password was changed" => "密码已修改", "Unable to change your password" => "无法修改密码", diff --git a/settings/l10n/zh_TW.php b/settings/l10n/zh_TW.php index b1037f0849..7188b78cca 100644 --- a/settings/l10n/zh_TW.php +++ b/settings/l10n/zh_TW.php @@ -38,10 +38,6 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "商用支援", "You have used %s of the available %s" => "您已經使用了 %s ,目前可用空間為 %s", -"Clients" => "客戶", -"Download Desktop Clients" => "下載桌面客戶端", -"Download Android Client" => "下載 Android 客戶端", -"Download iOS Client" => "下載 iOS 客戶端", "Password" => "密碼", "Your password was changed" => "你的密碼已更改", "Unable to change your password" => "無法變更你的密碼", From 89bc26210ae653020e5fdaf9696f506c169bffb6 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 6 Dec 2012 19:55:30 +0100 Subject: [PATCH 171/719] [files_external] removing function as it's the same in the base class - THX Robin Conflicts: apps/files_external/lib/smb.php --- apps/files_external/lib/smb.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php index 96778b0b2e..58abcd43f5 100644 --- a/apps/files_external/lib/smb.php +++ b/apps/files_external/lib/smb.php @@ -59,11 +59,6 @@ class SMB extends \OC\Files\Storage\StreamWrapper{ } } - public function filetype($path) { - // using opendir causes the same amount of requests and caches the content of the folder in one go - return (bool)@$this->opendir($path) ? 'dir' : 'file'; - } - /** * check if a file or folder has been updated since $time * @param string $path From f512dea3bed0f86a53766e321f8bc64545db1721 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 6 Dec 2012 22:23:39 +0100 Subject: [PATCH 172/719] [files_external] fixing some undefined index --- apps/files_external/ajax/removeMountPoint.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/apps/files_external/ajax/removeMountPoint.php b/apps/files_external/ajax/removeMountPoint.php index aa44642620..2f5dbcfdba 100644 --- a/apps/files_external/ajax/removeMountPoint.php +++ b/apps/files_external/ajax/removeMountPoint.php @@ -3,6 +3,15 @@ OCP\JSON::checkAppEnabled('files_external'); OCP\JSON::callCheck(); +if (!isset($_POST['isPersonal'])) + return; +if (!isset($_POST['mountPoint'])) + return; +if (!isset($_POST['mountType'])) + return; +if (!isset($_POST['applicable'])) + return; + if ($_POST['isPersonal'] == 'true') { OCP\JSON::checkLoggedIn(); $isPersonal = true; @@ -10,4 +19,5 @@ if ($_POST['isPersonal'] == 'true') { OCP\JSON::checkAdminUser(); $isPersonal = false; } + OC_Mount_Config::removeMountPoint($_POST['mountPoint'], $_POST['mountType'], $_POST['applicable'], $isPersonal); From 7776d047b2fa90529ed2bf053e47ff66ddd4818d Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Mon, 11 Feb 2013 15:49:49 +0100 Subject: [PATCH 173/719] [files_external] fix config gui for all users backport of 9e05781ec22c3f4e6b89b188332242b03088736e --- apps/files_external/templates/settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index 78ca1c87fe..df8d7d6e2b 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -83,7 +83,7 @@
    t('Mount point'); ?>t('Backend'); ?>t('Folder name'); ?>t('External storage'); ?> t('Configuration'); ?> From f9a6ed6c73bd4f20cb7a504aa9c20e95fe860d7f Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 14 Feb 2013 10:59:30 +0100 Subject: [PATCH 216/719] fix navigation icons SVG replacement, also hover and active opacity for IE --- core/css/styles.css | 25 +++++++++++++++---------- core/templates/layout.user.php | 2 +- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/core/css/styles.css b/core/css/styles.css index b41c205c21..c88a45fd46 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -151,7 +151,7 @@ input[type="submit"].enabled { background:#66f866; border:1px solid #5e5; -moz-b #adminlogin, #adminpass, #user, #password { width:11.7em!important; padding-left:1.8em; } #adminlogin+label+img, #adminpass-icon, #user+label+img, #password-icon { position:absolute; left:1.25em; top:1.65em; - opacity:.3; + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; filter:alpha(opacity=30); opacity:.3; } #adminpass-icon, #password-icon { top:1.1em; } input[name="password-clone"] { padding-left:1.8em; width:11.7em !important; } @@ -191,10 +191,11 @@ label.infield { cursor:text !important; top:1.05em; left:.85em; } #show { position:absolute; right:1em; top:.8em; float:right; } #show, #personal-show { display:none; } #show + label { right:1em; top:1.25em!important; } -#show:checked + label, #personal-show:checked + label { opacity:.8; } +#show:checked + label, #personal-show:checked + label { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; filter:alpha(opacity=80); opacity:.8; } #show + label, #personal-show + label { position:absolute!important; height:14px; width:24px; - background-image:url("../img/actions/toggle.png"); background-repeat:no-repeat; opacity:.3; + background-image:url("../img/actions/toggle.png"); background-repeat:no-repeat; + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; filter:alpha(opacity=30); opacity:.3; } #pass2, input[name="personal-password-clone"] { padding:0.6em 2.5em 0.4em 0.4em; width:8em;} #personal-show + label { margin-top:1em; margin-left:-3em; } @@ -234,25 +235,29 @@ fieldset.warning a { color:#b94a48 !important; font-weight:bold; } #navigation a { display:block; padding:8px 0 4px; text-decoration:none; font-size:10px; text-align:center; - color:#fff; text-shadow:#000 0 -1px 0; opacity:.5; + color:#fff; text-shadow:#000 0 -1px 0; + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; filter:alpha(opacity=50); opacity:.5; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; // ellipsize long app names } - #navigation a:hover, #navigation a:focus { opacity:.8; } - #navigation a.active { opacity:1; } + #navigation a:hover, #navigation a:focus { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; filter:alpha(opacity=80); opacity:.8; } + #navigation a.active { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; } #navigation .icon { display:block; width:32px; height:32px; margin:0 16px 0; } #navigation li:first-child a { padding-top:16px; } #settings { float:right; margin-top:7px; color:#bbb; text-shadow:0 -1px 0 #000; } #expand { padding:15px; cursor:pointer; font-weight:bold; } #expand:hover, #expand:focus, #expand:active { color:#fff; } -#expand img { opacity:.7; margin-bottom:-2px; } -#expand:hover img, #expand:focus img, #expand:active img { opacity:1; } +#expand img { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70); opacity:.7; margin-bottom:-2px; } +#expand:hover img, #expand:focus img, #expand:active img { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; } #expanddiv { position:absolute; right:0; top:45px; z-index:76; display:none; background-color:#444; border-bottom-left-radius:7px; box-shadow: 0 0 20px rgb(29,45,68); } - #expanddiv a { display:block; color:#fff; text-shadow:0 -1px 0 #000; padding:0 8px; opacity:.7; } + #expanddiv a { + display:block; color:#fff; text-shadow:0 -1px 0 #000; padding:0 8px; + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70);opacity:.7; + } #expanddiv a img { margin-bottom:-3px; } - #expanddiv a:hover, #expanddiv a:focus, #expanddiv a:active { opacity:1; } + #expanddiv a:hover, #expanddiv a:focus, #expanddiv a:active { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; } /* VARIOUS REUSABLE SELECTORS */ diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index c8b580b5fd..282c3b20f6 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -61,7 +61,7 @@
  • class="active"> - +
  • From 87b98dab25bec98c9018364a827427e2e9ac7782 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Thu, 14 Feb 2013 11:56:41 +0100 Subject: [PATCH 217/719] use new filesystem to mount users home --- apps/files_versions/lib/versions.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php index b54bc4a442..9f021bc4f8 100644 --- a/apps/files_versions/lib/versions.php +++ b/apps/files_versions/lib/versions.php @@ -57,9 +57,19 @@ class Storage { */ public function store($filename) { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { - list($uid, $filename) = self::getUidAndFilename($filename); - $files_view = new \OC\Files\View('/'.\OCP\User::getUser() .'/files'); - $users_view = new \OC\Files\View('/'.\OCP\User::getUser()); + $owner = \OC\Files\Filesystem::getOwner($filename); + if ( $owner != \OCP\User::getUser() ) { + $datadir = \OC_Config::getValue( "datadirectory", \OC::$SERVERROOT."/data" ); + \OC\Files\Filesystem::mount( '\OC\Files\Storage\Local', array('datadir'=>$datadir), '/'.$owner ); + $info = \OC\Files\Filesystem::getFileInfo($filename); + $id = $info['fileid']; + error_log("id: $id"); + $path = \OC\Files\Filesystem::getPath($id); + error_log("new path: $path"); + } + + $files_view = new \OC\Files\View('/'.$uid .'/files'); + $users_view = new \OC\Files\View('/'.$uid); //check if source file already exist as version to avoid recursions. // todo does this check work? From a03d70209fabbb3d2ae7137a6edde1f0712cd9e1 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 14 Feb 2013 12:06:16 +0100 Subject: [PATCH 218/719] fixing undefined originalEvent --- apps/files/js/jquery-visibility.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/apps/files/js/jquery-visibility.js b/apps/files/js/jquery-visibility.js index a824bf6873..18f57d1f2b 100644 --- a/apps/files/js/jquery-visibility.js +++ b/apps/files/js/jquery-visibility.js @@ -3,7 +3,7 @@ var prefix, property, -// In Opera, `'onfocusin' in document == true`, hence the extra `hasFocus` check to detect IE-like behavior + // In Opera, `'onfocusin' in document == true`, hence the extra `hasFocus` check to detect IE-like behavior eventName = 'onfocusin' in document && 'hasFocus' in document ? 'focusin focusout' : 'focus blur', prefixes = ['', 'moz', 'ms', 'o', 'webkit'], $support = $.support, @@ -19,12 +19,11 @@ $(/blur$/.test(eventName) ? window : document).on(eventName, function (event) { var type = event.type, - originalEvent = event.originalEvent, - toElement = originalEvent.toElement; -// If it’s a `{focusin,focusout}` event (IE), `fromElement` and `toElement` should both be `null` or `undefined`; -// else, the page visibility hasn’t changed, but the user just clicked somewhere in the doc. -// In IE9, we need to check the `relatedTarget` property instead. - if (!/^focus./.test(type) || (toElement == undefined && originalEvent.fromElement == undefined && originalEvent.relatedTarget == undefined)) { + originalEvent = event.originalEvent; + // If it’s a `{focusin,focusout}` event (IE), `fromElement` and `toElement` should both be `null` or `undefined`; + // else, the page visibility hasn’t changed, but the user just clicked somewhere in the doc. + // In IE9, we need to check the `relatedTarget` property instead. + if (!/^focus./.test(type) || originalEvent == undefined || (originalEvent.toElement == undefined && originalEvent.fromElement == undefined && originalEvent.relatedTarget == undefined)) { $event.trigger((property && document[property] || /^(?:blur|focusout)$/.test(type) ? 'hide' : 'show') + '.visibility'); } }); From 8877087b5716fde078bab4d303240498f02dd48b Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 14 Feb 2013 12:16:51 +0100 Subject: [PATCH 219/719] adding a compatibility.js as a single source to define all fallback function declarations --- core/js/compatibility.js | 25 +++++++++++++++++++++++++ lib/base.php | 1 + 2 files changed, 26 insertions(+) create mode 100644 core/js/compatibility.js diff --git a/core/js/compatibility.js b/core/js/compatibility.js new file mode 100644 index 0000000000..3e9178f320 --- /dev/null +++ b/core/js/compatibility.js @@ -0,0 +1,25 @@ + +//https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind +if (!Function.prototype.bind) { + Function.prototype.bind = function (oThis) { + if (typeof this !== "function") { + // closest thing possible to the ECMAScript 5 internal IsCallable function + throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); + } + + var aArgs = Array.prototype.slice.call(arguments, 1), + fToBind = this, + fNOP = function () {}, + fBound = function () { + return fToBind.apply(this instanceof fNOP && oThis + ? this + : oThis, + aArgs.concat(Array.prototype.slice.call(arguments))); + }; + + fNOP.prototype = this.prototype; + fBound.prototype = new fNOP(); + + return fBound; + }; +} diff --git a/lib/base.php b/lib/base.php index c60a97100f..fd9a1d4112 100644 --- a/lib/base.php +++ b/lib/base.php @@ -278,6 +278,7 @@ class OC { OC_Util::addScript("jquery-showpassword"); OC_Util::addScript("jquery.infieldlabel"); OC_Util::addScript("jquery-tipsy"); + OC_Util::addScript("compatibility"); OC_Util::addScript("oc-dialogs"); OC_Util::addScript("js"); OC_Util::addScript("eventsource"); From 8065c73339fe624a2b833cbb283887d4e2e58bdf Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 14 Feb 2013 12:17:14 +0100 Subject: [PATCH 220/719] fixing eventsource.js for IE8 --- core/js/eventsource.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/core/js/eventsource.js b/core/js/eventsource.js index f783ade7ae..ce8c8387c8 100644 --- a/core/js/eventsource.js +++ b/core/js/eventsource.js @@ -87,8 +87,10 @@ OC.EventSource.prototype={ useFallBack:false, fallBackCallBack:function(type,data){ if(type){ - for(var i=0;i Date: Thu, 14 Feb 2013 12:32:14 +0100 Subject: [PATCH 221/719] call 'Trash bin' 'Deleted files' --- apps/files/templates/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php index 60756db401..c7bf0d21c1 100644 --- a/apps/files/templates/index.php +++ b/apps/files/templates/index.php @@ -37,7 +37,7 @@
    From e643742eb3428c6a0cf6322f09152f22d00e0502 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 14 Feb 2013 12:59:26 +0100 Subject: [PATCH 222/719] adding prototype trim as fallback for IE8 --- core/js/compatibility.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/js/compatibility.js b/core/js/compatibility.js index 3e9178f320..0cfeefab87 100644 --- a/core/js/compatibility.js +++ b/core/js/compatibility.js @@ -23,3 +23,10 @@ if (!Function.prototype.bind) { return fBound; }; } + +//https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/Trim +if(!String.prototype.trim) { + String.prototype.trim = function () { + return this.replace(/^\s+|\s+$/g,''); + }; +} \ No newline at end of file From 022993c09865b90993c869053a3217e2700a6f22 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 14 Feb 2013 12:59:59 +0100 Subject: [PATCH 223/719] fixing javascript errors IE8 in user management --- settings/js/users.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/settings/js/users.js b/settings/js/users.js index a70cf18ead..da18b4be83 100644 --- a/settings/js/users.js +++ b/settings/js/users.js @@ -92,11 +92,12 @@ var UserList = { UserList.applyMultiplySelect(subadminSelect); } if (tr.find('td.remove img').length == 0 && OC.currentUser != username) { - var rm_img = $('', { - class: 'svg action', + var rm_img = $('').attr({ src: OC.imagePath('core', 'actions/delete') }); - var rm_link = $('', { class: 'action delete', href: '#', 'original-title': t('settings', 'Delete')}).append(rm_img); + var rm_link = $('') + .attr({ href: '#', 'original-title': t('settings', 'Delete')}) + .append(rm_img); tr.find('td.remove').append(rm_link); } else if (OC.currentUser == username) { tr.find('td.remove a').remove(); From ae172ce7de767096b83f2626f889bc402c5a27c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Thu, 14 Feb 2013 13:01:02 +0100 Subject: [PATCH 224/719] improved description of the trash bin app --- apps/files_trashbin/appinfo/info.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/files_trashbin/appinfo/info.xml b/apps/files_trashbin/appinfo/info.xml index 9b48612636..e421733960 100644 --- a/apps/files_trashbin/appinfo/info.xml +++ b/apps/files_trashbin/appinfo/info.xml @@ -1,8 +1,8 @@ files_trashbin - Trash - Trash bin + Trash bin + Keep a copy of deleted files so that they can be restored if needed AGPL Bjoern Schiessle true From e8190c6511113e2602476cc8ba35c73d8ee39fc0 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 14 Feb 2013 13:01:51 +0100 Subject: [PATCH 225/719] fix user delete button not showing in IE, another SVG replacement issue --- settings/templates/users.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/templates/users.php b/settings/templates/users.php index 09a6ae7280..53a66fb468 100644 --- a/settings/templates/users.php +++ b/settings/templates/users.php @@ -159,7 +159,7 @@ $_['subadmingroups'] = array_flip($items);
    - +
    + From 5a8e0f2048d6b2ef1d271fc8ca05c6d5bd338aed Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Sat, 16 Feb 2013 19:56:56 +0100 Subject: [PATCH 277/719] Extra position check for multiselect dropdown. Fix app/issues/575 --- core/js/multiselect.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/js/multiselect.js b/core/js/multiselect.js index 623c6e0f7e..bc4223feb6 100644 --- a/core/js/multiselect.js +++ b/core/js/multiselect.js @@ -266,8 +266,9 @@ } list.append(list.find('li.creator')); var pos=button.position(); - if($(document).height() > (button.offset().top+button.outerHeight() + list.children().length * button.height()) - || $(document).height()/2 > pos.top + if(($(document).height() > (button.offset().top+button.outerHeight() + list.children().length * button.height()) + && $(document).height() - button.offset().top > (button.offset().top+button.outerHeight() + list.children().length * button.height())) + || $(document).height()/2 > button.offset().top ) { list.css({ top:pos.top+button.outerHeight()-5, From 50759607e4a94c63ae02bf6302acd191913bc834 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Sat, 16 Feb 2013 17:42:06 -0500 Subject: [PATCH 278/719] add file_exists method to files_trashbin app --- apps/files_trashbin/lib/trash.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index d88dc1ac25..8cb44d0a68 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -246,8 +246,19 @@ class Trashbin { return $size; } - - + + /** + * check to see whether a file exists in trashbin + * @param $file path to the file to check + * @return true if file exists, otherwise false + */ + public static function file_exists($file) { + $user = \OCP\User::getUser(); + $view = new \OC_FilesystemView('/'.$user); + $target = \OC_Filesystem::normalizePath('files_trashbin/'.$file); + return $view->file_exists($target); + } + /** * clean up the trash bin * @param max. available disk space for trashbin From 4b4b1f86925248a36c4cc62e91905e605b891e70 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Sat, 16 Feb 2013 17:44:51 -0500 Subject: [PATCH 279/719] Properly delete empty directories in Trashbin Instead of checking delted file size, we do a real check. this fixes #1688 --- apps/files_trashbin/ajax/delete.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/files_trashbin/ajax/delete.php b/apps/files_trashbin/ajax/delete.php index 7a6bd1342e..f41482bef5 100644 --- a/apps/files_trashbin/ajax/delete.php +++ b/apps/files_trashbin/ajax/delete.php @@ -15,7 +15,9 @@ if ($path_parts['dirname'] == '.') { $timestamp = null; } -if (OCA\Files_Trashbin\Trashbin::delete($filename, $timestamp)) { +OCA\Files_Trashbin\Trashbin::delete($filename, $timestamp); + +if (!OCA\Files_Trashbin\Trashbin::file_exists($filename)) { OCP\JSON::success(array("data" => array("filename" => $file))); } else { $l = OC_L10N::get('files_trashbin'); From c8e7b14ab38bf7d630a4cac9091ba134a427f068 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sun, 17 Feb 2013 00:26:17 +0100 Subject: [PATCH 280/719] [tx-robot] updated from transifex --- apps/files/l10n/ca.php | 1 + apps/files/l10n/fi_FI.php | 1 + apps/files/l10n/ru.php | 1 + apps/files_encryption/l10n/de_DE.php | 4 +-- apps/files_trashbin/l10n/de_DE.php | 4 +-- apps/files_versions/l10n/de_DE.php | 4 +-- apps/user_ldap/l10n/de_DE.php | 28 +++++++++---------- apps/user_webdavauth/l10n/de_DE.php | 2 +- core/l10n/be.php | 6 +++++ core/l10n/de_DE.php | 32 +++++++++++----------- l10n/be/core.po | 15 ++++++----- l10n/ca/files.po | 8 +++--- l10n/de_DE/core.po | 40 ++++++++++++++-------------- l10n/de_DE/files.po | 6 ++--- l10n/de_DE/files_encryption.po | 12 ++++----- l10n/de_DE/files_trashbin.po | 13 ++++----- l10n/de_DE/files_versions.po | 12 ++++----- l10n/de_DE/lib.po | 6 ++--- l10n/de_DE/settings.po | 28 +++++++++---------- l10n/de_DE/user_ldap.po | 36 ++++++++++++------------- l10n/de_DE/user_webdavauth.po | 13 ++++----- l10n/fi_FI/files.po | 8 +++--- l10n/fr/settings.po | 38 +++++++++++++------------- l10n/ru/files.po | 8 +++--- l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 4 +-- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_trashbin.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/settings.pot | 2 +- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- settings/l10n/de_DE.php | 10 +++++-- settings/l10n/fr.php | 10 +++++++ 37 files changed, 199 insertions(+), 171 deletions(-) create mode 100644 core/l10n/be.php diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php index ecfc6abc8d..5869b7df8c 100644 --- a/apps/files/l10n/ca.php +++ b/apps/files/l10n/ca.php @@ -60,6 +60,7 @@ "Text file" => "Fitxer de text", "Folder" => "Carpeta", "From link" => "Des d'enllaç", +"Deleted files" => "Fitxers esborrats", "Cancel upload" => "Cancel·la la pujada", "Nothing in here. Upload something!" => "Res per aquí. Pugeu alguna cosa!", "Download" => "Baixa", diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php index 81ac32c09f..ba6e3ecb4a 100644 --- a/apps/files/l10n/fi_FI.php +++ b/apps/files/l10n/fi_FI.php @@ -54,6 +54,7 @@ "Text file" => "Tekstitiedosto", "Folder" => "Kansio", "From link" => "Linkistä", +"Deleted files" => "Poistetut tiedostot", "Cancel upload" => "Peru lähetys", "Nothing in here. Upload something!" => "Täällä ei ole mitään. Lähetä tänne jotakin!", "Download" => "Lataa", diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php index 803b34e99c..7bfd93c9e4 100644 --- a/apps/files/l10n/ru.php +++ b/apps/files/l10n/ru.php @@ -60,6 +60,7 @@ "Text file" => "Текстовый файл", "Folder" => "Папка", "From link" => "Из ссылки", +"Deleted files" => "Удалённые файлы", "Cancel upload" => "Отмена загрузки", "Nothing in here. Upload something!" => "Здесь ничего нет. Загрузите что-нибудь!", "Download" => "Скачать", diff --git a/apps/files_encryption/l10n/de_DE.php b/apps/files_encryption/l10n/de_DE.php index b942c659f9..4f08b98eb2 100644 --- a/apps/files_encryption/l10n/de_DE.php +++ b/apps/files_encryption/l10n/de_DE.php @@ -1,7 +1,7 @@ "Verschlüsselung", "File encryption is enabled." => "Datei-Verschlüsselung ist aktiviert", -"The following file types will not be encrypted:" => "Die folgenden Datei-Typen werden nicht verschlüsselt:", -"Exclude the following file types from encryption:" => "Die folgenden Datei-Typen von der Verschlüsselung ausnehmen:", +"The following file types will not be encrypted:" => "Die folgenden Dateitypen werden nicht verschlüsselt:", +"Exclude the following file types from encryption:" => "Die folgenden Dateitypen von der Verschlüsselung ausnehmen:", "None" => "Keine" ); diff --git a/apps/files_trashbin/l10n/de_DE.php b/apps/files_trashbin/l10n/de_DE.php index 7cb1834141..6d944b3580 100644 --- a/apps/files_trashbin/l10n/de_DE.php +++ b/apps/files_trashbin/l10n/de_DE.php @@ -1,7 +1,7 @@ "Konnte %s nicht permanent löschen", +"Couldn't delete %s permanently" => "Konnte %s nicht entgültig löschen", "Couldn't restore %s" => "Konnte %s nicht wiederherstellen", -"perform restore operation" => "Führe die Wiederherstellung aus", +"perform restore operation" => "Wiederherstellung ausführen", "delete file permanently" => "Datei entgültig löschen", "Name" => "Name", "Deleted" => "Gelöscht", diff --git a/apps/files_versions/l10n/de_DE.php b/apps/files_versions/l10n/de_DE.php index 1cf2a63a1d..ba849c5ea8 100644 --- a/apps/files_versions/l10n/de_DE.php +++ b/apps/files_versions/l10n/de_DE.php @@ -4,10 +4,10 @@ "File %s was reverted to version %s" => "Die Datei %s wurde zur Version %s zurückgesetzt", "failure" => "Fehlgeschlagen", "File %s could not be reverted to version %s" => "Die Datei %s konnte nicht zur Version %s zurückgesetzt werden", -"No old versions available" => "keine älteren Versionen verfügbar", +"No old versions available" => "Keine älteren Versionen verfügbar", "No path specified" => "Kein Pfad angegeben", "History" => "Historie", -"Revert a file to a previous version by clicking on its revert button" => "Setze eine Datei durch Klicken, auf den Zurücksetzen-Button, auf einer frühere Version zurück", +"Revert a file to a previous version by clicking on its revert button" => "Setze eine Datei durch Klicken auf den Zurücksetzen-Button auf eine frühere Version zurück", "Files Versioning" => "Dateiversionierung", "Enable" => "Aktivieren" ); diff --git a/apps/user_ldap/l10n/de_DE.php b/apps/user_ldap/l10n/de_DE.php index 69faf5dc45..45edda2deb 100644 --- a/apps/user_ldap/l10n/de_DE.php +++ b/apps/user_ldap/l10n/de_DE.php @@ -1,20 +1,20 @@ "Das Löschen der Server-Konfiguration schlug fehl", -"The configuration is valid and the connection could be established!" => "Die Konfiguration ist valide und eine Verbindung konnte hergestellt werden!", -"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Die Konfiguration ist valide, aber das Herstellen einer Verbindung schlug fehl. Bitte überprüfen Sie die Server-Einstellungen und Zertifikate.", -"The configuration is invalid. Please look in the ownCloud log for further details." => "Die Konfiguration ist nicht valide. Weitere Details können Sie im ownCloud-Log nachlesen.", +"The configuration is valid and the connection could be established!" => "Die Konfiguration ist gültig und die Verbindung konnte hergestellt werden!", +"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Die Konfiguration ist gültig, aber das Herstellen der Verbindung schlug fehl. Bitte überprüfen Sie die Server-Einstellungen und Zertifikate.", +"The configuration is invalid. Please look in the ownCloud log for further details." => "Die Konfiguration ist ungültig. Weitere Details können Sie im ownCloud-Log nachlesen.", "Deletion failed" => "Löschen fehlgeschlagen", -"Take over settings from recent server configuration?" => "Sollen die Einstellungen der letzten Server-Konfiguration übernommen werden?", +"Take over settings from recent server configuration?" => "Sollen die Einstellungen der letzten Serverkonfiguration übernommen werden?", "Keep settings?" => "Einstellungen behalten?", -"Cannot add server configuration" => "Das Hinzufügen der Server-Konfiguration schlug fehl", -"Connection test succeeded" => "Verbindungs-Test erfolgreich", -"Connection test failed" => "Verbindungs-Test fehlgeschlagen", -"Do you really want to delete the current Server Configuration?" => "Möchten Sie wirklich die Server-Konfiguration löschen?", +"Cannot add server configuration" => "Das Hinzufügen der Serverkonfiguration schlug fehl", +"Connection test succeeded" => "Verbindungstest erfolgreich", +"Connection test failed" => "Verbindungstest fehlgeschlagen", +"Do you really want to delete the current Server Configuration?" => "Möchten Sie die Serverkonfiguration wirklich löschen?", "Confirm Deletion" => "Löschung bestätigen", "Warning: Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "Warnung: Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann demzufolge zu unerwarteten Verhalten kommen. Bitten Sie Ihren Systemadministator eine der beiden Anwendungen zu deaktivieren.", "Warning: The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "Warnung: Da das PHP-Modul für LDAP ist nicht installiert, das Backend wird nicht funktionieren. Bitten Sie Ihren Systemadministrator das Modul zu installieren.", -"Server configuration" => "Server-Konfiguration", -"Add Server Configuration" => "Server-Konfiguration hinzufügen", +"Server configuration" => "Serverkonfiguration", +"Add Server Configuration" => "Serverkonfiguration hinzufügen", "Host" => "Host", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "Sie können das Protokoll auslassen, außer wenn Sie SSL benötigen. Beginnen Sie dann mit ldaps://", "Base DN" => "Basis-DN", @@ -33,7 +33,7 @@ "Group Filter" => "Gruppen-Filter", "Defines the filter to apply, when retrieving groups." => "Definiert den Filter für die Anfrage der Gruppen.", "without any placeholder, e.g. \"objectClass=posixGroup\"." => "ohne Platzhalter, z.B.: \"objectClass=posixGroup\"", -"Connection Settings" => "Verbindungs-Einstellungen", +"Connection Settings" => "Verbindungseinstellungen", "Configuration Active" => "Konfiguration aktiv", "When unchecked, this configuration will be skipped." => "Wenn nicht angehakt, wird diese Konfiguration übersprungen.", "Port" => "Port", @@ -41,7 +41,7 @@ "Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Optionaler Backup Host. Es muss ein Replikat des eigentlichen LDAP/AD Servers sein.", "Backup (Replica) Port" => "Back-Up (Replikation) Port", "Disable Main Server" => "Hauptserver deaktivieren", -"When switched on, ownCloud will only connect to the replica server." => "Wenn eingeschaltet wird sich ownCloud nur mit dem Replilat-Server verbinden.", +"When switched on, ownCloud will only connect to the replica server." => "Wenn eingeschaltet wird sich ownCloud nur mit dem Replikat-Server verbinden.", "Use TLS" => "Nutze TLS", "Do not use it additionally for LDAPS connections, it will fail." => "Benutze es nicht zusätzlich für LDAPS Verbindungen, es wird scheitern.", "Case insensitve LDAP server (Windows)" => "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)", @@ -49,7 +49,7 @@ "If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Falls die Verbindung es erfordert, muss das SSL-Zertifikat des LDAP-Server importiert werden.", "Not recommended, use for testing only." => "Nicht empfohlen, nur zu Testzwecken.", "in seconds. A change empties the cache." => "in Sekunden. Eine Änderung leert den Cache.", -"Directory Settings" => "Verzeichnis-Einstellungen", +"Directory Settings" => "Verzeichniseinstellungen", "User Display Name Field" => "Feld für den Anzeigenamen des Benutzers", "The LDAP attribute to use to generate the user`s ownCloud name." => "Das LDAP-Attribut für die Generierung des Benutzernamens in ownCloud. ", "Base User Tree" => "Basis-Benutzerbaum", @@ -62,7 +62,7 @@ "One Group Base DN per line" => "Ein Gruppen Base DN pro Zeile", "Group Search Attributes" => "Gruppen-Suche Eigenschaften", "Group-Member association" => "Assoziation zwischen Gruppe und Benutzer", -"Special Attributes" => "besondere Eigenschaften", +"Special Attributes" => "Besondere Eigenschaften", "in bytes" => "in Bytes", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfall trage ein LDAP/AD-Attribut ein.", "Help" => "Hilfe" diff --git a/apps/user_webdavauth/l10n/de_DE.php b/apps/user_webdavauth/l10n/de_DE.php index 8f67575fc0..bd5d328e47 100644 --- a/apps/user_webdavauth/l10n/de_DE.php +++ b/apps/user_webdavauth/l10n/de_DE.php @@ -1,5 +1,5 @@ "WebDAV Authentifizierung", "URL: http://" => "URL: http://", -"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud sendet die Benutzerdaten an diese URL. Dieses Plugin prüft die Antwort und wird die Statuscodes 401 und 403 als ungültige Daten interpretieren und alle anderen Antworten als gültige Daten." +"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud sendet die Benutzerdaten an diese URL. Dieses Plugin prüft die Antwort und wird die Statuscodes 401 und 403 als ungültige Daten und alle anderen Antworten als gültige Daten interpretieren." ); diff --git a/core/l10n/be.php b/core/l10n/be.php new file mode 100644 index 0000000000..ecf16e5d6a --- /dev/null +++ b/core/l10n/be.php @@ -0,0 +1,6 @@ + "Дасведчаны", +"Finish setup" => "Завяршыць ўстаноўку.", +"prev" => "Папярэдняя", +"next" => "Далей" +); diff --git a/core/l10n/de_DE.php b/core/l10n/de_DE.php index b099510d0d..3430525894 100644 --- a/core/l10n/de_DE.php +++ b/core/l10n/de_DE.php @@ -1,8 +1,8 @@ "Der Nutzer %s hat eine Datei für Sie freigegeben", -"User %s shared a folder with you" => "%s hat ein Verzeichnis für Sie freigegeben", -"User %s shared the file \"%s\" with you. It is available for download here: %s" => "%s hat eine Datei \"%s\" für Sie freigegeben. Sie ist zum Download hier ferfügbar: %s", -"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s hat eine Verzeichnis \"%s\" für Sie freigegeben. Es ist zum Download hier ferfügbar: %s", +"User %s shared a file with you" => "Der Nutzer %s hat eine Datei mit Ihnen geteilt", +"User %s shared a folder with you" => "%s hat einen Ordner mit Ihnen geteilt", +"User %s shared the file \"%s\" with you. It is available for download here: %s" => "%s hat die Datei \"%s\" mit Ihnen geteilt. Sie ist hier zum Download verfügbar: %s", +"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s hat den Ordner \"%s\" mit Ihnen geteilt. Er ist hier zum Download verfügbar: %s", "Category type not provided." => "Kategorie nicht angegeben.", "No category to add?" => "Keine Kategorie hinzuzufügen?", "This category already exists: %s" => "Die Kategorie '%s' existiert bereits.", @@ -53,32 +53,32 @@ "Error" => "Fehler", "The app name is not specified." => "Der App-Name ist nicht angegeben.", "The required file {file} is not installed!" => "Die benötigte Datei {file} ist nicht installiert.", -"Shared" => "Freigegeben", -"Share" => "Freigeben", -"Error while sharing" => "Fehler bei der Freigabe", -"Error while unsharing" => "Fehler bei der Aufhebung der Freigabe", +"Shared" => "Geteilt", +"Share" => "Teilen", +"Error while sharing" => "Fehler beim Teilen", +"Error while unsharing" => "Fehler bei der Aufhebung der Teilung", "Error while changing permissions" => "Fehler bei der Änderung der Rechte", -"Shared with you and the group {group} by {owner}" => "Durch {owner} für Sie und die Gruppe {group} freigegeben.", -"Shared with you by {owner}" => "Durch {owner} für Sie freigegeben.", -"Share with" => "Freigeben für", -"Share with link" => "Über einen Link freigeben", +"Shared with you and the group {group} by {owner}" => "Von {owner} mit Ihnen und der Gruppe {group} geteilt.", +"Shared with you by {owner}" => "Von {owner} mit Ihnen geteilt.", +"Share with" => "Teilen mit", +"Share with link" => "Über einen Link teilen", "Password protect" => "Passwortschutz", "Password" => "Passwort", "Email link to person" => "Link per E-Mail verschicken", "Send" => "Senden", "Set expiration date" => "Setze ein Ablaufdatum", "Expiration date" => "Ablaufdatum", -"Share via email:" => "Mittels einer E-Mail freigeben:", +"Share via email:" => "Mittels einer E-Mail teilen:", "No people found" => "Niemand gefunden", "Resharing is not allowed" => "Das Weiterverteilen ist nicht erlaubt", "Shared in {item} with {user}" => "Freigegeben in {item} von {user}", -"Unshare" => "Freigabe aufheben", +"Unshare" => "Teilung aufheben", "can edit" => "kann bearbeiten", "access control" => "Zugriffskontrolle", "create" => "erstellen", "update" => "aktualisieren", "delete" => "löschen", -"share" => "freigeben", +"share" => "teilen", "Password protected" => "Durch ein Passwort geschützt", "Error unsetting expiration date" => "Fehler beim Entfernen des Ablaufdatums", "Error setting expiration date" => "Fehler beim Setzen des Ablaufdatums", @@ -110,7 +110,7 @@ "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Es ist kein sicherer Zufallszahlengenerator verfügbar, bitte aktivieren Sie die PHP-Erweiterung für OpenSSL.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Ohne einen sicheren Zufallszahlengenerator sind Angreifer in der Lage, die Tokens für das Zurücksetzen der Passwörter vorherzusehen und Ihr Konto zu übernehmen.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Dein Daten-Verzeichnis und deine Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.", -"For information how to properly configure your server, please see the documentation." => "Bitte lesen Sie die Dokumentation für Informationen, wie Sie Ihren Server wahrscheinlich konfigurieren.", +"For information how to properly configure your server, please see the documentation." => "Bitte lesen Sie die Dokumentation für Informationen, wie Sie Ihren Server konfigurieren.", "Create an admin account" => "Administrator-Konto anlegen", "Advanced" => "Fortgeschritten", "Data folder" => "Datenverzeichnis", diff --git a/l10n/be/core.po b/l10n/be/core.po index e5b4699d86..dcb31520cd 100644 --- a/l10n/be/core.po +++ b/l10n/be/core.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Семён Гариленко <2507496@gmail.com>, 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" -"PO-Revision-Date: 2011-07-25 16:05+0000\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2013-02-17 00:25+0100\n" +"PO-Revision-Date: 2013-02-16 19:10+0000\n" +"Last-Translator: Сёмка Гавриленко <2507496@gmail.com>\n" "Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -502,7 +503,7 @@ msgstr "" #: templates/installation.php:52 msgid "Advanced" -msgstr "" +msgstr "Дасведчаны" #: templates/installation.php:54 msgid "Data folder" @@ -539,7 +540,7 @@ msgstr "" #: templates/installation.php:136 msgid "Finish setup" -msgstr "" +msgstr "Завяршыць ўстаноўку." #: templates/layout.guest.php:33 msgid "web services under your control" @@ -581,11 +582,11 @@ msgstr "" #: templates/part.pagenavi.php:3 msgid "prev" -msgstr "" +msgstr "Папярэдняя" #: templates/part.pagenavi.php:20 msgid "next" -msgstr "" +msgstr "Далей" #: templates/update.php:3 #, php-format diff --git a/l10n/ca/files.po b/l10n/ca/files.po index 722be0b3c8..e1b0cc93f8 100644 --- a/l10n/ca/files.po +++ b/l10n/ca/files.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"PO-Revision-Date: 2013-02-16 11:00+0000\n" +"Last-Translator: rogerc \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -281,7 +281,7 @@ msgstr "Des d'enllaç" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Fitxers esborrats" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/de_DE/core.po b/l10n/de_DE/core.po index a8ffe8861e..b471458f11 100644 --- a/l10n/de_DE/core.po +++ b/l10n/de_DE/core.po @@ -26,10 +26,10 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:31+0000\n" -"Last-Translator: stefanniedermann \n" -"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" +"POT-Creation-Date: 2013-02-17 00:25+0100\n" +"PO-Revision-Date: 2013-02-16 23:00+0000\n" +"Last-Translator: Marcel Kühlhorn \n" +"Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -39,26 +39,26 @@ msgstr "" #: ajax/share.php:85 #, php-format msgid "User %s shared a file with you" -msgstr "Der Nutzer %s hat eine Datei für Sie freigegeben" +msgstr "Der Nutzer %s hat eine Datei mit Ihnen geteilt" #: ajax/share.php:87 #, php-format msgid "User %s shared a folder with you" -msgstr "%s hat ein Verzeichnis für Sie freigegeben" +msgstr "%s hat einen Ordner mit Ihnen geteilt" #: ajax/share.php:89 #, php-format msgid "" "User %s shared the file \"%s\" with you. It is available for download here: " "%s" -msgstr "%s hat eine Datei \"%s\" für Sie freigegeben. Sie ist zum Download hier ferfügbar: %s" +msgstr "%s hat die Datei \"%s\" mit Ihnen geteilt. Sie ist hier zum Download verfügbar: %s" #: ajax/share.php:91 #, php-format msgid "" "User %s shared the folder \"%s\" with you. It is available for download " "here: %s" -msgstr "%s hat eine Verzeichnis \"%s\" für Sie freigegeben. Es ist zum Download hier ferfügbar: %s" +msgstr "%s hat den Ordner \"%s\" mit Ihnen geteilt. Er ist hier zum Download verfügbar: %s" #: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25 msgid "Category type not provided." @@ -272,19 +272,19 @@ msgstr "Die benötigte Datei {file} ist nicht installiert." #: js/share.js:29 js/share.js:43 js/share.js:90 msgid "Shared" -msgstr "Freigegeben" +msgstr "Geteilt" #: js/share.js:93 msgid "Share" -msgstr "Freigeben" +msgstr "Teilen" #: js/share.js:141 js/share.js:622 msgid "Error while sharing" -msgstr "Fehler bei der Freigabe" +msgstr "Fehler beim Teilen" #: js/share.js:152 msgid "Error while unsharing" -msgstr "Fehler bei der Aufhebung der Freigabe" +msgstr "Fehler bei der Aufhebung der Teilung" #: js/share.js:159 msgid "Error while changing permissions" @@ -292,19 +292,19 @@ msgstr "Fehler bei der Änderung der Rechte" #: js/share.js:168 msgid "Shared with you and the group {group} by {owner}" -msgstr "Durch {owner} für Sie und die Gruppe {group} freigegeben." +msgstr "Von {owner} mit Ihnen und der Gruppe {group} geteilt." #: js/share.js:170 msgid "Shared with you by {owner}" -msgstr "Durch {owner} für Sie freigegeben." +msgstr "Von {owner} mit Ihnen geteilt." #: js/share.js:175 msgid "Share with" -msgstr "Freigeben für" +msgstr "Teilen mit" #: js/share.js:180 msgid "Share with link" -msgstr "Über einen Link freigeben" +msgstr "Über einen Link teilen" #: js/share.js:183 msgid "Password protect" @@ -332,7 +332,7 @@ msgstr "Ablaufdatum" #: js/share.js:227 msgid "Share via email:" -msgstr "Mittels einer E-Mail freigeben:" +msgstr "Mittels einer E-Mail teilen:" #: js/share.js:229 msgid "No people found" @@ -348,7 +348,7 @@ msgstr "Freigegeben in {item} von {user}" #: js/share.js:313 msgid "Unshare" -msgstr "Freigabe aufheben" +msgstr "Teilung aufheben" #: js/share.js:325 msgid "can edit" @@ -372,7 +372,7 @@ msgstr "löschen" #: js/share.js:339 msgid "share" -msgstr "freigeben" +msgstr "teilen" #: js/share.js:373 js/share.js:569 msgid "Password protected" @@ -513,7 +513,7 @@ msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "Bitte lesen Sie die Dokumentation für Informationen, wie Sie Ihren Server wahrscheinlich konfigurieren." +msgstr "Bitte lesen Sie die Dokumentation für Informationen, wie Sie Ihren Server konfigurieren." #: templates/installation.php:36 msgid "Create an admin account" diff --git a/l10n/de_DE/files.po b/l10n/de_DE/files.po index f7896897c3..192ed3dbb8 100644 --- a/l10n/de_DE/files.po +++ b/l10n/de_DE/files.po @@ -32,9 +32,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" -"PO-Revision-Date: 2013-02-15 10:50+0000\n" -"Last-Translator: robN \n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"PO-Revision-Date: 2013-02-16 16:30+0000\n" +"Last-Translator: Marcel Kühlhorn \n" "Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/l10n/de_DE/files_encryption.po b/l10n/de_DE/files_encryption.po index a4b8388e60..f69dc4f485 100644 --- a/l10n/de_DE/files_encryption.po +++ b/l10n/de_DE/files_encryption.po @@ -13,10 +13,10 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:09+0000\n" -"Last-Translator: I Robot \n" -"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"PO-Revision-Date: 2013-02-16 23:00+0000\n" +"Last-Translator: Marcel Kühlhorn \n" +"Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -33,11 +33,11 @@ msgstr "Datei-Verschlüsselung ist aktiviert" #: templates/settings-personal.php:11 msgid "The following file types will not be encrypted:" -msgstr "Die folgenden Datei-Typen werden nicht verschlüsselt:" +msgstr "Die folgenden Dateitypen werden nicht verschlüsselt:" #: templates/settings.php:7 msgid "Exclude the following file types from encryption:" -msgstr "Die folgenden Datei-Typen von der Verschlüsselung ausnehmen:" +msgstr "Die folgenden Dateitypen von der Verschlüsselung ausnehmen:" #: templates/settings.php:12 msgid "None" diff --git a/l10n/de_DE/files_trashbin.po b/l10n/de_DE/files_trashbin.po index d9e42dce66..0a68526442 100644 --- a/l10n/de_DE/files_trashbin.po +++ b/l10n/de_DE/files_trashbin.po @@ -4,6 +4,7 @@ # # Translators: # I Robot , 2013. +# Marcel Kühlhorn , 2013. # Phillip Schichtel , 2013. # , 2013. # Susi <>, 2013. @@ -11,10 +12,10 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:43+0000\n" -"Last-Translator: stefanniedermann \n" -"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"PO-Revision-Date: 2013-02-16 13:51+0000\n" +"Last-Translator: Marcel Kühlhorn \n" +"Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -24,7 +25,7 @@ msgstr "" #: ajax/delete.php:22 #, php-format msgid "Couldn't delete %s permanently" -msgstr "Konnte %s nicht permanent löschen" +msgstr "Konnte %s nicht entgültig löschen" #: ajax/undelete.php:41 #, php-format @@ -33,7 +34,7 @@ msgstr "Konnte %s nicht wiederherstellen" #: js/trash.js:7 js/trash.js:94 msgid "perform restore operation" -msgstr "Führe die Wiederherstellung aus" +msgstr "Wiederherstellung ausführen" #: js/trash.js:33 msgid "delete file permanently" diff --git a/l10n/de_DE/files_versions.po b/l10n/de_DE/files_versions.po index 8ea9b51ed6..a9ddf034b6 100644 --- a/l10n/de_DE/files_versions.po +++ b/l10n/de_DE/files_versions.po @@ -16,10 +16,10 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" -"PO-Revision-Date: 2013-02-14 10:50+0000\n" -"Last-Translator: robN \n" -"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"PO-Revision-Date: 2013-02-16 23:10+0000\n" +"Last-Translator: Marcel Kühlhorn \n" +"Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,7 +51,7 @@ msgstr "Die Datei %s konnte nicht zur Version %s zurückgesetzt werden" #: history.php:68 msgid "No old versions available" -msgstr "keine älteren Versionen verfügbar" +msgstr "Keine älteren Versionen verfügbar" #: history.php:73 msgid "No path specified" @@ -63,7 +63,7 @@ msgstr "Historie" #: templates/history.php:20 msgid "Revert a file to a previous version by clicking on its revert button" -msgstr "Setze eine Datei durch Klicken, auf den Zurücksetzen-Button, auf einer frühere Version zurück" +msgstr "Setze eine Datei durch Klicken auf den Zurücksetzen-Button auf eine frühere Version zurück" #: templates/settings.php:3 msgid "Files Versioning" diff --git a/l10n/de_DE/lib.po b/l10n/de_DE/lib.po index 630cd9fa41..564fc444d5 100644 --- a/l10n/de_DE/lib.po +++ b/l10n/de_DE/lib.po @@ -17,10 +17,10 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" -"PO-Revision-Date: 2013-02-14 13:00+0000\n" +"POT-Creation-Date: 2013-02-17 00:25+0100\n" +"PO-Revision-Date: 2013-02-16 22:56+0000\n" "Last-Translator: Marcel Kühlhorn \n" -"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" +"Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po index 77ae2f776f..5482f3ee32 100644 --- a/l10n/de_DE/settings.po +++ b/l10n/de_DE/settings.po @@ -13,7 +13,7 @@ # Lukas Reschke , 2013. # , 2012. # , 2012. -# Marcel Kühlhorn , 2012. +# Marcel Kühlhorn , 2012-2013. # , 2012. # , 2012. # Phi Lieb <>, 2012. @@ -30,10 +30,10 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" -"PO-Revision-Date: 2013-02-14 13:00+0000\n" -"Last-Translator: robN \n" -"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" +"POT-Creation-Date: 2013-02-17 00:25+0100\n" +"PO-Revision-Date: 2013-02-16 23:25+0000\n" +"Last-Translator: Marcel Kühlhorn \n" +"Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -170,11 +170,11 @@ msgstr "Löschen" #: js/users.js:191 msgid "add group" -msgstr "Gruppe konnte nicht hinzugefügt werden" +msgstr "Gruppe hinzufügen" #: js/users.js:352 msgid "A valid username must be provided" -msgstr "" +msgstr "Es muss ein gültiger Benutzername angegeben werden" #: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" @@ -182,9 +182,9 @@ msgstr "Beim Erstellen des Benutzers ist ein Fehler aufgetreten" #: js/users.js:358 msgid "A valid password must be provided" -msgstr "" +msgstr "Es muss ein gültiges Passwort angegeben werden" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "Deutsch (Förmlich: Sie)" @@ -209,7 +209,7 @@ msgstr "" msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "Ihr Web-Server ist wahrscheinlich noch nicht konfiguriert, Datei-Synchronisation zu erlauben, weil die WebDAV-Schnittstelle vermutlich defekt ist." +msgstr "Ihr Web-Server ist noch nicht konfiguriert noch nicht für Datei-Synchronisation bereit weil die WebDAV-Schnittstelle vermutlich defekt ist." #: templates/admin.php:33 #, php-format @@ -218,17 +218,17 @@ msgstr "Bitte prüfen Sie die Instalationsanleitungen." #: templates/admin.php:44 msgid "Module 'fileinfo' missing" -msgstr "" +msgstr "Das Modul 'fileinfo' fehlt" #: templates/admin.php:47 msgid "" "The PHP module 'fileinfo' is missing. We strongly recommend to enable this " "module to get best results with mime-type detection." -msgstr "" +msgstr "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen Ihnen dieses Modul zu aktivieren um die besten Resultate bei der Bestimmung der Dateitypen zu erzielen." #: templates/admin.php:58 msgid "Locale not working" -msgstr "" +msgstr "Lokalisierung funktioniert nicht" #: templates/admin.php:61 msgid "" @@ -254,7 +254,7 @@ msgstr "" #: templates/admin.php:89 msgid "Cron" -msgstr "" +msgstr "Cron" #: templates/admin.php:98 msgid "Execute one task with each page loaded" diff --git a/l10n/de_DE/user_ldap.po b/l10n/de_DE/user_ldap.po index 18580dda23..a2eb0d878e 100644 --- a/l10n/de_DE/user_ldap.po +++ b/l10n/de_DE/user_ldap.po @@ -18,10 +18,10 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:43+0000\n" -"Last-Translator: stefanniedermann \n" -"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"PO-Revision-Date: 2013-02-16 23:20+0000\n" +"Last-Translator: Marcel Kühlhorn \n" +"Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -34,19 +34,19 @@ msgstr "Das Löschen der Server-Konfiguration schlug fehl" #: ajax/testConfiguration.php:35 msgid "The configuration is valid and the connection could be established!" -msgstr "Die Konfiguration ist valide und eine Verbindung konnte hergestellt werden!" +msgstr "Die Konfiguration ist gültig und die Verbindung konnte hergestellt werden!" #: ajax/testConfiguration.php:37 msgid "" "The configuration is valid, but the Bind failed. Please check the server " "settings and credentials." -msgstr "Die Konfiguration ist valide, aber das Herstellen einer Verbindung schlug fehl. Bitte überprüfen Sie die Server-Einstellungen und Zertifikate." +msgstr "Die Konfiguration ist gültig, aber das Herstellen der Verbindung schlug fehl. Bitte überprüfen Sie die Server-Einstellungen und Zertifikate." #: ajax/testConfiguration.php:40 msgid "" "The configuration is invalid. Please look in the ownCloud log for further " "details." -msgstr "Die Konfiguration ist nicht valide. Weitere Details können Sie im ownCloud-Log nachlesen." +msgstr "Die Konfiguration ist ungültig. Weitere Details können Sie im ownCloud-Log nachlesen." #: js/settings.js:66 msgid "Deletion failed" @@ -54,7 +54,7 @@ msgstr "Löschen fehlgeschlagen" #: js/settings.js:82 msgid "Take over settings from recent server configuration?" -msgstr "Sollen die Einstellungen der letzten Server-Konfiguration übernommen werden?" +msgstr "Sollen die Einstellungen der letzten Serverkonfiguration übernommen werden?" #: js/settings.js:83 msgid "Keep settings?" @@ -62,19 +62,19 @@ msgstr "Einstellungen behalten?" #: js/settings.js:97 msgid "Cannot add server configuration" -msgstr "Das Hinzufügen der Server-Konfiguration schlug fehl" +msgstr "Das Hinzufügen der Serverkonfiguration schlug fehl" #: js/settings.js:121 msgid "Connection test succeeded" -msgstr "Verbindungs-Test erfolgreich" +msgstr "Verbindungstest erfolgreich" #: js/settings.js:126 msgid "Connection test failed" -msgstr "Verbindungs-Test fehlgeschlagen" +msgstr "Verbindungstest fehlgeschlagen" #: js/settings.js:136 msgid "Do you really want to delete the current Server Configuration?" -msgstr "Möchten Sie wirklich die Server-Konfiguration löschen?" +msgstr "Möchten Sie die Serverkonfiguration wirklich löschen?" #: js/settings.js:137 msgid "Confirm Deletion" @@ -95,11 +95,11 @@ msgstr "Warnung: Da das PHP-Modul für LDAP ist nicht installiert, das Ba #: templates/settings.php:15 msgid "Server configuration" -msgstr "Server-Konfiguration" +msgstr "Serverkonfiguration" #: templates/settings.php:17 msgid "Add Server Configuration" -msgstr "Server-Konfiguration hinzufügen" +msgstr "Serverkonfiguration hinzufügen" #: templates/settings.php:21 msgid "Host" @@ -183,7 +183,7 @@ msgstr "ohne Platzhalter, z.B.: \"objectClass=posixGroup\"" #: templates/settings.php:31 msgid "Connection Settings" -msgstr "Verbindungs-Einstellungen" +msgstr "Verbindungseinstellungen" #: templates/settings.php:33 msgid "Configuration Active" @@ -217,7 +217,7 @@ msgstr "Hauptserver deaktivieren" #: templates/settings.php:37 msgid "When switched on, ownCloud will only connect to the replica server." -msgstr "Wenn eingeschaltet wird sich ownCloud nur mit dem Replilat-Server verbinden." +msgstr "Wenn eingeschaltet wird sich ownCloud nur mit dem Replikat-Server verbinden." #: templates/settings.php:38 msgid "Use TLS" @@ -251,7 +251,7 @@ msgstr "in Sekunden. Eine Änderung leert den Cache." #: templates/settings.php:43 msgid "Directory Settings" -msgstr "Verzeichnis-Einstellungen" +msgstr "Verzeichniseinstellungen" #: templates/settings.php:45 msgid "User Display Name Field" @@ -303,7 +303,7 @@ msgstr "Assoziation zwischen Gruppe und Benutzer" #: templates/settings.php:53 msgid "Special Attributes" -msgstr "besondere Eigenschaften" +msgstr "Besondere Eigenschaften" #: templates/settings.php:56 msgid "in bytes" diff --git a/l10n/de_DE/user_webdavauth.po b/l10n/de_DE/user_webdavauth.po index 2d01d1e91e..3592cedb14 100644 --- a/l10n/de_DE/user_webdavauth.po +++ b/l10n/de_DE/user_webdavauth.po @@ -4,16 +4,17 @@ # # Translators: # , 2012-2013. +# Marcel Kühlhorn , 2013. # , 2012. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-16 00:19+0100\n" -"PO-Revision-Date: 2013-01-15 22:23+0000\n" -"Last-Translator: a.tangemann \n" -"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"PO-Revision-Date: 2013-02-16 14:00+0000\n" +"Last-Translator: Marcel Kühlhorn \n" +"Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -28,9 +29,9 @@ msgstr "WebDAV Authentifizierung" msgid "URL: http://" msgstr "URL: http://" -#: templates/settings.php:6 +#: templates/settings.php:7 msgid "" "ownCloud will send the user credentials to this URL. This plugin checks the " "response and will interpret the HTTP statuscodes 401 and 403 as invalid " "credentials, and all other responses as valid credentials." -msgstr "ownCloud sendet die Benutzerdaten an diese URL. Dieses Plugin prüft die Antwort und wird die Statuscodes 401 und 403 als ungültige Daten interpretieren und alle anderen Antworten als gültige Daten." +msgstr "ownCloud sendet die Benutzerdaten an diese URL. Dieses Plugin prüft die Antwort und wird die Statuscodes 401 und 403 als ungültige Daten und alle anderen Antworten als gültige Daten interpretieren." diff --git a/l10n/fi_FI/files.po b/l10n/fi_FI/files.po index e42625a78a..60fc1271eb 100644 --- a/l10n/fi_FI/files.po +++ b/l10n/fi_FI/files.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"PO-Revision-Date: 2013-02-16 10:40+0000\n" +"Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -279,7 +279,7 @@ msgstr "Linkistä" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Poistetut tiedostot" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po index b165922be0..3681ab7e40 100644 --- a/l10n/fr/settings.po +++ b/l10n/fr/settings.po @@ -14,7 +14,7 @@ # Jan-Christoph Borchardt , 2011. # , 2012. # , 2012. -# Nahir Mohamed , 2012. +# Nahir Mohamed , 2012-2013. # , 2012. # Robert Di Rosa <>, 2012. # , 2011, 2012. @@ -24,9 +24,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-17 00:25+0100\n" +"PO-Revision-Date: 2013-02-16 19:10+0000\n" +"Last-Translator: Nahir Mohamed \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -162,23 +162,23 @@ msgstr "Groupe Admin" msgid "Delete" msgstr "Supprimer" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" msgstr "ajouter un groupe" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" msgstr "Un nom d'utilisateur valide doit être saisi" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" msgstr "Erreur lors de la création de l'utilisateur" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" msgstr "Un mot de passe valide doit être saisi" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "Français" @@ -276,19 +276,19 @@ msgstr "Activer l'API de partage" #: templates/admin.php:132 msgid "Allow apps to use the Share API" -msgstr "" +msgstr "Autoriser les applications à utiliser l'API de partage" #: templates/admin.php:139 msgid "Allow links" -msgstr "" +msgstr "Autoriser les liens" #: templates/admin.php:140 msgid "Allow users to share items to the public with links" -msgstr "" +msgstr "Autoriser les utilisateurs à partager des éléments publiquement à l'aide de liens" #: templates/admin.php:147 msgid "Allow resharing" -msgstr "" +msgstr "Autoriser le repartage" #: templates/admin.php:148 msgid "Allow users to share items shared with them again" @@ -304,30 +304,30 @@ msgstr "" #: templates/admin.php:165 msgid "Security" -msgstr "" +msgstr "Sécurité" #: templates/admin.php:178 msgid "Enforce HTTPS" -msgstr "" +msgstr "Forcer HTTPS" #: templates/admin.php:179 msgid "" "Enforces the clients to connect to ownCloud via an encrypted connection." -msgstr "" +msgstr "Forcer les clients à se connecter à Owncloud via une connexion chiffrée." #: templates/admin.php:182 msgid "" "Please connect to this ownCloud instance via HTTPS to enable or disable the " "SSL enforcement." -msgstr "" +msgstr "Merci de vous connecter à cette instance Owncloud en HTTPS pour activer ou désactiver SSL." #: templates/admin.php:192 msgid "Log" -msgstr "" +msgstr "Log" #: templates/admin.php:193 msgid "Log level" -msgstr "" +msgstr "Niveau de log" #: templates/admin.php:220 msgid "More" diff --git a/l10n/ru/files.po b/l10n/ru/files.po index fcc6d86ae4..6214f74516 100644 --- a/l10n/ru/files.po +++ b/l10n/ru/files.po @@ -21,9 +21,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"PO-Revision-Date: 2013-02-16 18:50+0000\n" +"Last-Translator: Langaru \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -288,7 +288,7 @@ msgstr "Из ссылки" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Удалённые файлы" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index 2822af0fa6..50f1af05b6 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"POT-Creation-Date: 2013-02-17 00:25+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index fd84b8854b..71954fdbcd 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index f3a9c41f44..0c073a307c 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index b1555b2cfe..18b776ea2c 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -115,6 +115,6 @@ msgstr "" msgid "SSL root certificates" msgstr "" -#: templates/settings.php:153 +#: templates/settings.php:154 msgid "Import Root Certificate" msgstr "" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index 078d6a894d..1d3b14bb15 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index ca7dd1f208..04f88ffe32 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 56ffebb83e..2c0f327e1d 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index b1b060a1e2..56633541bc 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"POT-Creation-Date: 2013-02-17 00:25+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index 1c27a1ae28..ccb82adc96 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"POT-Creation-Date: 2013-02-17 00:25+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index 29a637c80d..139967bb8b 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index 59d943daf4..419f2f574c 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" +"POT-Creation-Date: 2013-02-17 00:24+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/settings/l10n/de_DE.php b/settings/l10n/de_DE.php index cf94701958..b97dfdc38b 100644 --- a/settings/l10n/de_DE.php +++ b/settings/l10n/de_DE.php @@ -30,13 +30,19 @@ "Groups" => "Gruppen", "Group Admin" => "Gruppenadministrator", "Delete" => "Löschen", -"add group" => "Gruppe konnte nicht hinzugefügt werden", +"add group" => "Gruppe hinzufügen", +"A valid username must be provided" => "Es muss ein gültiger Benutzername angegeben werden", "Error creating user" => "Beim Erstellen des Benutzers ist ein Fehler aufgetreten", +"A valid password must be provided" => "Es muss ein gültiges Passwort angegeben werden", "__language_name__" => "Deutsch (Förmlich: Sie)", "Security Warning" => "Sicherheitshinweis", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich über das Internet erreichbar. Die von ownCloud bereitgestellte .htaccess Datei funktioniert nicht. Wir empfehlen Ihnen dringend, Ihren Webserver so zu konfigurieren, dass das Datenverzeichnis nicht mehr über das Internet erreichbar ist. Alternativ können Sie auch das Datenverzeichnis aus dem Dokumentenverzeichnis des Webservers verschieben.", -"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ihr Web-Server ist wahrscheinlich noch nicht konfiguriert, Datei-Synchronisation zu erlauben, weil die WebDAV-Schnittstelle vermutlich defekt ist.", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ihr Web-Server ist noch nicht konfiguriert noch nicht für Datei-Synchronisation bereit weil die WebDAV-Schnittstelle vermutlich defekt ist.", "Please double check the installation guides." => "Bitte prüfen Sie die Instalationsanleitungen.", +"Module 'fileinfo' missing" => "Das Modul 'fileinfo' fehlt", +"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen Ihnen dieses Modul zu aktivieren um die besten Resultate bei der Bestimmung der Dateitypen zu erzielen.", +"Locale not working" => "Lokalisierung funktioniert nicht", +"Cron" => "Cron", "Execute one task with each page loaded" => "Führe eine Aufgabe bei jedem Laden der Seite aus", "Sharing" => "Teilen", "Enable Share API" => "Teilen-API aktivieren", diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php index 7276f56f2b..19d3a243c9 100644 --- a/settings/l10n/fr.php +++ b/settings/l10n/fr.php @@ -51,6 +51,16 @@ "Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "Utilise le service cron du système. Appelle le fichier cron.php du répertoire owncloud toutes les minutes grâce à une tâche cron du système.", "Sharing" => "Partage", "Enable Share API" => "Activer l'API de partage", +"Allow apps to use the Share API" => "Autoriser les applications à utiliser l'API de partage", +"Allow links" => "Autoriser les liens", +"Allow users to share items to the public with links" => "Autoriser les utilisateurs à partager des éléments publiquement à l'aide de liens", +"Allow resharing" => "Autoriser le repartage", +"Security" => "Sécurité", +"Enforce HTTPS" => "Forcer HTTPS", +"Enforces the clients to connect to ownCloud via an encrypted connection." => "Forcer les clients à se connecter à Owncloud via une connexion chiffrée.", +"Please connect to this ownCloud instance via HTTPS to enable or disable the SSL enforcement." => "Merci de vous connecter à cette instance Owncloud en HTTPS pour activer ou désactiver SSL.", +"Log" => "Log", +"Log level" => "Niveau de log", "More" => "Plus", "Version" => "Version", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Développé par la communauté ownCloud, le code source est publié sous license AGPL.", From 451daf3ab14edde76f4d04e6fe41519cf517fe47 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sun, 17 Feb 2013 20:09:03 +0100 Subject: [PATCH 281/719] Keep user quota into account when the storage backend has unkown free space --- lib/fileproxy/quota.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/fileproxy/quota.php b/lib/fileproxy/quota.php index 07d1d250e4..3dac3264fb 100644 --- a/lib/fileproxy/quota.php +++ b/lib/fileproxy/quota.php @@ -62,21 +62,21 @@ class OC_FileProxy_Quota extends OC_FileProxy{ * @var string $internalPath */ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($path); - $owner=$storage->getOwner($internalPath); + $owner = $storage->getOwner($internalPath); if (!$owner) { return -1; } - $totalSpace=$this->getQuota($owner); - if($totalSpace==-1) { + $totalSpace = $this->getQuota($owner); + if($totalSpace == -1) { return -1; } $view = new \OC\Files\View("/".$owner."/files"); - $rootInfo=$view->getFileInfo('/'); - $usedSpace=isset($rootInfo['size'])?$rootInfo['size']:0; - return $totalSpace-$usedSpace; + $rootInfo = $view->getFileInfo('/'); + $usedSpace = isset($rootInfo['size'])?$rootInfo['size']:0; + return $totalSpace - $usedSpace; } public function postFree_space($path, $space) { @@ -84,6 +84,9 @@ class OC_FileProxy_Quota extends OC_FileProxy{ if($free==-1) { return $space; } + if ($space < 0){ + return $free; + } return min($free, $space); } From 3b9796bfcce38e6e4138ffc68f5a2ff6e34492a0 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Mon, 18 Feb 2013 00:06:45 +0100 Subject: [PATCH 282/719] [tx-robot] updated from transifex --- apps/files/l10n/de.php | 7 +- apps/files/l10n/el.php | 1 + apps/files/l10n/eu.php | 1 + apps/files/l10n/hu_HU.php | 1 + apps/files_versions/l10n/de.php | 2 +- apps/user_ldap/l10n/de.php | 2 +- apps/user_ldap/l10n/el.php | 15 +++ apps/user_ldap/l10n/eu.php | 1 + apps/user_webdavauth/l10n/de.php | 2 +- core/l10n/de.php | 30 +++--- core/l10n/el.php | 6 ++ l10n/de/core.po | 36 +++---- l10n/de/files.po | 16 +-- l10n/de/files_encryption.po | 6 +- l10n/de/files_trashbin.po | 6 +- l10n/de/files_versions.po | 8 +- l10n/de/lib.po | 66 ++++++------- l10n/de/settings.po | 18 ++-- l10n/de/user_ldap.po | 118 +++++++++++----------- l10n/de/user_webdavauth.po | 13 +-- l10n/de_DE/lib.po | 4 +- l10n/de_DE/settings.po | 24 ++--- l10n/el/core.po | 19 ++-- l10n/el/files.po | 8 +- l10n/el/lib.po | 89 ++++++++--------- l10n/el/settings.po | 47 ++++----- l10n/el/user_ldap.po | 147 ++++++++++++++-------------- l10n/eu/files.po | 8 +- l10n/eu/settings.po | 18 ++-- l10n/eu/user_ldap.po | 116 +++++++++++----------- l10n/gl/settings.po | 32 +++--- l10n/hu_HU/files.po | 8 +- l10n/ru/lib.po | 79 +++++++-------- l10n/ru/settings.po | 18 ++-- l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 6 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_trashbin.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/settings.pot | 2 +- l10n/templates/user_ldap.pot | 112 ++++++++++----------- l10n/templates/user_webdavauth.pot | 2 +- l10n/zh_TW/settings.po | 23 ++--- lib/l10n/de.php | 4 +- lib/l10n/el.php | 13 +++ lib/l10n/ru.php | 8 ++ settings/l10n/de_DE.php | 11 ++- settings/l10n/el.php | 15 +++ settings/l10n/eu.php | 1 + settings/l10n/gl.php | 12 +++ settings/l10n/ru.php | 2 + settings/l10n/zh_TW.php | 3 + 55 files changed, 649 insertions(+), 551 deletions(-) diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php index d96e512ece..20fdd2f815 100644 --- a/apps/files/l10n/de.php +++ b/apps/files/l10n/de.php @@ -1,7 +1,7 @@ "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits.", -"Could not move %s" => "Konnte %s nicht verschieben", -"Unable to rename file" => "Konnte Datei nicht umbenennen", +"Could not move %s - File with this name already exists" => "%s konnte nicht verschoben werden - eine Datei mit diesem Namen existiert bereits.", +"Could not move %s" => "%s konnte nicht verschoben werden", +"Unable to rename file" => "Die Datei konnte nicht umbenannt werden", "No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler", "There is no error, the file uploaded with success" => "Datei fehlerfrei hochgeladen.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini", @@ -60,6 +60,7 @@ "Text file" => "Textdatei", "Folder" => "Ordner", "From link" => "Von einem Link", +"Deleted files" => "Gelöschte Dateien", "Cancel upload" => "Upload abbrechen", "Nothing in here. Upload something!" => "Alles leer. Lade etwas hoch!", "Download" => "Herunterladen", diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php index 2a110afa96..60456d180d 100644 --- a/apps/files/l10n/el.php +++ b/apps/files/l10n/el.php @@ -60,6 +60,7 @@ "Text file" => "Αρχείο κειμένου", "Folder" => "Φάκελος", "From link" => "Από σύνδεσμο", +"Deleted files" => "Διαγραμμένα αρχεία", "Cancel upload" => "Ακύρωση αποστολής", "Nothing in here. Upload something!" => "Δεν υπάρχει τίποτα εδώ. Ανέβασε κάτι!", "Download" => "Λήψη", diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php index 10f19cf4cb..796f1c4009 100644 --- a/apps/files/l10n/eu.php +++ b/apps/files/l10n/eu.php @@ -60,6 +60,7 @@ "Text file" => "Testu fitxategia", "Folder" => "Karpeta", "From link" => "Estekatik", +"Deleted files" => "Ezabatutako fitxategiak", "Cancel upload" => "Ezeztatu igoera", "Nothing in here. Upload something!" => "Ez dago ezer. Igo zerbait!", "Download" => "Deskargatu", diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php index 9eed324415..7a11c303f5 100644 --- a/apps/files/l10n/hu_HU.php +++ b/apps/files/l10n/hu_HU.php @@ -60,6 +60,7 @@ "Text file" => "Szövegfájl", "Folder" => "Mappa", "From link" => "Feltöltés linkről", +"Deleted files" => "Törölt fájlok", "Cancel upload" => "A feltöltés megszakítása", "Nothing in here. Upload something!" => "Itt nincs semmi. Töltsön fel valamit!", "Download" => "Letöltés", diff --git a/apps/files_versions/l10n/de.php b/apps/files_versions/l10n/de.php index f62043dade..d7427fbbbf 100644 --- a/apps/files_versions/l10n/de.php +++ b/apps/files_versions/l10n/de.php @@ -7,7 +7,7 @@ "No old versions available" => "Keine älteren Versionen verfügbar", "No path specified" => "Kein Pfad angegeben", "History" => "Historie", -"Revert a file to a previous version by clicking on its revert button" => "Setzen Sie eine Datei durch klicken auf den Zurücksetzen Button zurück", +"Revert a file to a previous version by clicking on its revert button" => "Setze eine Datei durch klicken auf den Zurücksetzen Button zurück", "Files Versioning" => "Dateiversionierung", "Enable" => "Aktivieren" ); diff --git a/apps/user_ldap/l10n/de.php b/apps/user_ldap/l10n/de.php index a1da7d49cb..182025e8fb 100644 --- a/apps/user_ldap/l10n/de.php +++ b/apps/user_ldap/l10n/de.php @@ -12,7 +12,7 @@ "Do you really want to delete the current Server Configuration?" => "Wollen Sie die aktuelle Serverkonfiguration wirklich löschen?", "Confirm Deletion" => "Löschung bestätigen", "Warning: Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "Warnung: Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann demzufolge zu unerwarteten Verhalten kommen. Bitte Deinen Systemadministator eine der beiden Anwendungen zu deaktivieren.", -"Warning: The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "Warnung: Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitten Sie Ihren Systemadministrator das Modul zu installieren.", +"Warning: The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "Warnung: Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte deinen Systemadministrator das Modul zu installieren.", "Server configuration" => "Serverkonfiguration", "Add Server Configuration" => "Serverkonfiguration hinzufügen", "Host" => "Host", diff --git a/apps/user_ldap/l10n/el.php b/apps/user_ldap/l10n/el.php index 7c0940dc09..96ec818043 100644 --- a/apps/user_ldap/l10n/el.php +++ b/apps/user_ldap/l10n/el.php @@ -1,6 +1,19 @@ "Αποτυχία διαγραφής ρυθμίσεων διακομιστή", +"The configuration is valid and the connection could be established!" => "Οι ρυθμίσεις είναι έγκυρες και η σύνδεση μπορεί να πραγματοποιηθεί!", +"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Οι ρυθμίσεις είναι έγκυρες, αλλά απέτυχε η σύνδεση. Παρακαλώ ελέγξτε τις ρυθμίσεις του διακομιστή και τα διαπιστευτήρια.", +"The configuration is invalid. Please look in the ownCloud log for further details." => "Μη έγκυρες ρυθμίσεις. Παρακαλώ ελέγξτε τις καταγραφές του ownCloud για περισσότερες λεπτομέρειες.", "Deletion failed" => "Η διαγραφή απέτυχε", +"Keep settings?" => "Διατήρηση ρυθμίσεων;", +"Cannot add server configuration" => "Αδυναμία προσθήκης ρυθμίσεων διακομιστή", +"Connection test succeeded" => "Επιτυχημένη δοκιμαστική σύνδεση", +"Connection test failed" => "Αποτυχημένη δοκιμαστική σύνδεσης.", +"Do you really want to delete the current Server Configuration?" => "Θέλετε να διαγράψετε τις τρέχουσες ρυθμίσεις του διακομιστή;", +"Confirm Deletion" => "Επιβεβαίωση Διαγραφής", "Warning: Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "Προσοχή: Οι εφαρμογές user_ldap και user_webdavauth είναι ασύμβατες. Μπορεί να αντιμετωπίσετε απρόβλεπτη συμπεριφορά. Παρακαλώ ζητήστε από τον διαχειριστή συστήματος να απενεργοποιήσει μία από αυτές.", +"Warning: The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "Προσοχή: Το άρθρωμα PHP LDAP δεν είναι εγκατεστημένο και το σύστημα υποστήριξης δεν θα δουλέψει. Παρακαλώ ζητήστε από τον διαχειριστή συστήματος να το εγκαταστήσει.", +"Server configuration" => "Ρυθμίσεις Διακομιστή", +"Add Server Configuration" => "Προσθήκη Ρυθμίσεων Διακομιστή", "Host" => "Διακομιστής", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "Μπορείτε να παραλείψετε το πρωτόκολλο, εκτός αν απαιτείται SSL. Σε αυτή την περίπτωση ξεκινήστε με ldaps://", "Base DN" => "Base DN", @@ -18,6 +31,7 @@ "Group Filter" => "Group Filter", "Defines the filter to apply, when retrieving groups." => "Καθορίζει το φίλτρο που θα ισχύει κατά την ανάκτηση ομάδων.", "without any placeholder, e.g. \"objectClass=posixGroup\"." => "χωρίς κάποια μεταβλητή, π.χ. \"objectClass=ΟμάδαPosix\".", +"Connection Settings" => "Ρυθμίσεις Σύνδεσης", "Port" => "Θύρα", "Use TLS" => "Χρήση TLS", "Case insensitve LDAP server (Windows)" => "LDAP server (Windows) με διάκριση πεζών-ΚΕΦΑΛΑΙΩΝ", @@ -25,6 +39,7 @@ "If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Εάν η σύνδεση δουλεύει μόνο με αυτή την επιλογή, εισάγετε το LDAP SSL πιστοποιητικό του διακομιστή στον ownCloud server σας.", "Not recommended, use for testing only." => "Δεν προτείνεται, χρήση μόνο για δοκιμές.", "in seconds. A change empties the cache." => "σε δευτερόλεπτα. Μια αλλαγή αδειάζει την μνήμη cache.", +"Directory Settings" => "Ρυθμίσεις Καταλόγου", "User Display Name Field" => "Πεδίο Ονόματος Χρήστη", "The LDAP attribute to use to generate the user`s ownCloud name." => "Η ιδιότητα LDAP που θα χρησιμοποιείται για τη δημιουργία του ονόματος χρήστη του ownCloud.", "Base User Tree" => "Base User Tree", diff --git a/apps/user_ldap/l10n/eu.php b/apps/user_ldap/l10n/eu.php index 7ab4d00e75..46d93dc3a4 100644 --- a/apps/user_ldap/l10n/eu.php +++ b/apps/user_ldap/l10n/eu.php @@ -4,6 +4,7 @@ "The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Konfigurazioa ongi dago, baina Bind-ek huts egin du. Mesedez egiaztatu zerbitzariaren ezarpenak eta kredentzialak.", "The configuration is invalid. Please look in the ownCloud log for further details." => "Konfigurazioa ez dago ongi. Mesedez ikusi ownCloud-en egunerokoa informazio gehiago eskuratzeko.", "Deletion failed" => "Ezabaketak huts egin du", +"Take over settings from recent server configuration?" => "oraintsuko zerbitzariaren konfigurazioaren ezarpenen ardura hartu?", "Keep settings?" => "Mantendu ezarpenak?", "Cannot add server configuration" => "Ezin da zerbitzariaren konfigurazioa gehitu", "Connection test succeeded" => "Konexio froga ongi burutu da", diff --git a/apps/user_webdavauth/l10n/de.php b/apps/user_webdavauth/l10n/de.php index f893bddc71..c86ff44e55 100644 --- a/apps/user_webdavauth/l10n/de.php +++ b/apps/user_webdavauth/l10n/de.php @@ -1,5 +1,5 @@ "WebDAV Authentifikation", "URL: http://" => "URL: http://", -"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud wird die Benutzer-Anmeldedaten an diese URL schicken. Dieses Plugin prüft die Anmeldedaten auf ihre Gültigkeit und interpretiert die HTTP Statusfehler 401 und 403 als ungültige, sowie alle Anderen als gültige Anmeldedaten." +"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud sendet die Benutzerdaten an diese URL. Dieses Plugin prüft die Antwort und wird die Statuscodes 401 und 403 als ungültige Daten und alle anderen Antworten als gültige Daten interpretieren." ); diff --git a/core/l10n/de.php b/core/l10n/de.php index c18cf7259c..f1e892fee4 100644 --- a/core/l10n/de.php +++ b/core/l10n/de.php @@ -1,8 +1,8 @@ "Der Nutzer %s hat eine Datei für Dich freigegeben", -"User %s shared a folder with you" => "%s hat ein Verzeichnis für Dich freigegeben", -"User %s shared the file \"%s\" with you. It is available for download here: %s" => "%s hat eine Datei \"%s\" für Dich freigegeben. Sie ist zum Download hier ferfügbar: %s", -"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s hat eine Verzeichnis \"%s\" für Dich freigegeben. Es ist zum Download hier ferfügbar: %s", +"User %s shared a file with you" => "Der Nutzer %s hat eine Datei mit dir geteilt", +"User %s shared a folder with you" => "%s hat ein Verzeichnis mit dir geteilt", +"User %s shared the file \"%s\" with you. It is available for download here: %s" => "%s hat die Datei \"%s\" mit dir geteilt. Sie ist hier zum Download verfügbar: %s", +"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s hat den Ordner \"%s\" mit dir geteilt. Er ist hier zum Download verfügbar: %s", "Category type not provided." => "Kategorie nicht angegeben.", "No category to add?" => "Keine Kategorie hinzuzufügen?", "This category already exists: %s" => "Die Kategorie '%s' existiert bereits.", @@ -53,32 +53,32 @@ "Error" => "Fehler", "The app name is not specified." => "Der App-Name ist nicht angegeben.", "The required file {file} is not installed!" => "Die benötigte Datei {file} ist nicht installiert.", -"Shared" => "Freigegeben", -"Share" => "Freigeben", -"Error while sharing" => "Fehler beim Freigeben", -"Error while unsharing" => "Fehler beim Aufheben der Freigabe", +"Shared" => "Geteilt", +"Share" => "Teilen", +"Error while sharing" => "Fehler beim Teilen", +"Error while unsharing" => "Fehler beim Aufheben der Teilung", "Error while changing permissions" => "Fehler beim Ändern der Rechte", -"Shared with you and the group {group} by {owner}" => "{owner} hat dies für Dich und die Gruppe {group} freigegeben", -"Shared with you by {owner}" => "{owner} hat dies für Dich freigegeben", -"Share with" => "Freigeben für", -"Share with link" => "Über einen Link freigeben", +"Shared with you and the group {group} by {owner}" => "{owner} hat dies mit dir und der Gruppe {group} geteilt", +"Shared with you by {owner}" => "{owner} hat dies mit dir geteilt", +"Share with" => "Teilen mit", +"Share with link" => "Über einen Link teilen", "Password protect" => "Passwortschutz", "Password" => "Passwort", "Email link to person" => "Link per E-Mail verschicken", "Send" => "Senden", "Set expiration date" => "Setze ein Ablaufdatum", "Expiration date" => "Ablaufdatum", -"Share via email:" => "Über eine E-Mail freigeben:", +"Share via email:" => "Über eine E-Mail teilen:", "No people found" => "Niemand gefunden", "Resharing is not allowed" => "Weiterverteilen ist nicht erlaubt", "Shared in {item} with {user}" => "Für {user} in {item} freigegeben", -"Unshare" => "Freigabe aufheben", +"Unshare" => "Teilung aufheben", "can edit" => "kann bearbeiten", "access control" => "Zugriffskontrolle", "create" => "erstellen", "update" => "aktualisieren", "delete" => "löschen", -"share" => "freigeben", +"share" => "teilen", "Password protected" => "Durch ein Passwort geschützt", "Error unsetting expiration date" => "Fehler beim entfernen des Ablaufdatums", "Error setting expiration date" => "Fehler beim Setzen des Ablaufdatums", diff --git a/core/l10n/el.php b/core/l10n/el.php index 54720f5ecb..62d1256933 100644 --- a/core/l10n/el.php +++ b/core/l10n/el.php @@ -53,6 +53,7 @@ "Error" => "Σφάλμα", "The app name is not specified." => "Δεν καθορίστηκε το όνομα της εφαρμογής.", "The required file {file} is not installed!" => "Το απαιτούμενο αρχείο {file} δεν εγκαταστάθηκε!", +"Shared" => "Κοινόχρηστα", "Share" => "Διαμοιρασμός", "Error while sharing" => "Σφάλμα κατά τον διαμοιρασμό", "Error while unsharing" => "Σφάλμα κατά το σταμάτημα του διαμοιρασμού", @@ -83,6 +84,8 @@ "Error setting expiration date" => "Σφάλμα κατά τον ορισμό ημ. λήξης", "Sending ..." => "Αποστολή...", "Email sent" => "Το Email απεστάλη ", +"The update was unsuccessful. Please report this issue to the ownCloud community." => "Η ενημέρωση ήταν ανεπιτυχής. Παρακαλώ στείλτε αναφορά στην κοινότητα ownCloud.", +"The update was successful. Redirecting you to ownCloud now." => "Η ενημέρωση ήταν επιτυχής. Μετάβαση στο ownCloud.", "ownCloud password reset" => "Επαναφορά συνθηματικού ownCloud", "Use the following link to reset your password: {link}" => "Χρησιμοποιήστε τον ακόλουθο σύνδεσμο για να επανεκδόσετε τον κωδικό: {link}", "You will receive a link to reset your password via Email." => "Θα λάβετε ένα σύνδεσμο για να επαναφέρετε τον κωδικό πρόσβασής σας μέσω ηλεκτρονικού ταχυδρομείου.", @@ -106,6 +109,8 @@ "Security Warning" => "Προειδοποίηση Ασφαλείας", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Δεν είναι διαθέσιμο το πρόσθετο δημιουργίας τυχαίων αριθμών ασφαλείας, παρακαλώ ενεργοποιήστε το πρόσθετο της PHP, OpenSSL.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Χωρίς το πρόσθετο δημιουργίας τυχαίων αριθμών ασφαλείας, μπορεί να διαρρεύσει ο λογαριασμός σας από επιθέσεις στο διαδίκτυο.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανό προσβάσιμα από το internet γιατί δεν δουλεύει το αρχείο .htaccess.", +"For information how to properly configure your server, please see the documentation." => "Για πληροφορίες σχετικά με την σωστή ρύθμιση του διακομιστή σας, δείτε στην τεκμηρίωση.", "Create an admin account" => "Δημιουργήστε έναν λογαριασμό διαχειριστή", "Advanced" => "Για προχωρημένους", "Data folder" => "Φάκελος δεδομένων", @@ -125,6 +130,7 @@ "Lost your password?" => "Ξεχάσατε το συνθηματικό σας;", "remember" => "απομνημόνευση", "Log in" => "Είσοδος", +"Alternative Logins" => "Εναλλακτικές Συνδέσεις", "prev" => "προηγούμενο", "next" => "επόμενο", "Updating ownCloud to version %s, this may take a while." => "Ενημερώνοντας το ownCloud στην έκδοση %s,μπορεί να πάρει λίγο χρόνο." diff --git a/l10n/de/core.po b/l10n/de/core.po index 7c7862c863..bb7deec1e6 100644 --- a/l10n/de/core.po +++ b/l10n/de/core.po @@ -23,10 +23,10 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 21:40+0000\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 14:10+0000\n" "Last-Translator: Marcel Kühlhorn \n" -"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" +"Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -36,26 +36,26 @@ msgstr "" #: ajax/share.php:85 #, php-format msgid "User %s shared a file with you" -msgstr "Der Nutzer %s hat eine Datei für Dich freigegeben" +msgstr "Der Nutzer %s hat eine Datei mit dir geteilt" #: ajax/share.php:87 #, php-format msgid "User %s shared a folder with you" -msgstr "%s hat ein Verzeichnis für Dich freigegeben" +msgstr "%s hat ein Verzeichnis mit dir geteilt" #: ajax/share.php:89 #, php-format msgid "" "User %s shared the file \"%s\" with you. It is available for download here: " "%s" -msgstr "%s hat eine Datei \"%s\" für Dich freigegeben. Sie ist zum Download hier ferfügbar: %s" +msgstr "%s hat die Datei \"%s\" mit dir geteilt. Sie ist hier zum Download verfügbar: %s" #: ajax/share.php:91 #, php-format msgid "" "User %s shared the folder \"%s\" with you. It is available for download " "here: %s" -msgstr "%s hat eine Verzeichnis \"%s\" für Dich freigegeben. Es ist zum Download hier ferfügbar: %s" +msgstr "%s hat den Ordner \"%s\" mit dir geteilt. Er ist hier zum Download verfügbar: %s" #: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25 msgid "Category type not provided." @@ -269,19 +269,19 @@ msgstr "Die benötigte Datei {file} ist nicht installiert." #: js/share.js:29 js/share.js:43 js/share.js:90 msgid "Shared" -msgstr "Freigegeben" +msgstr "Geteilt" #: js/share.js:93 msgid "Share" -msgstr "Freigeben" +msgstr "Teilen" #: js/share.js:141 js/share.js:622 msgid "Error while sharing" -msgstr "Fehler beim Freigeben" +msgstr "Fehler beim Teilen" #: js/share.js:152 msgid "Error while unsharing" -msgstr "Fehler beim Aufheben der Freigabe" +msgstr "Fehler beim Aufheben der Teilung" #: js/share.js:159 msgid "Error while changing permissions" @@ -289,19 +289,19 @@ msgstr "Fehler beim Ändern der Rechte" #: js/share.js:168 msgid "Shared with you and the group {group} by {owner}" -msgstr "{owner} hat dies für Dich und die Gruppe {group} freigegeben" +msgstr "{owner} hat dies mit dir und der Gruppe {group} geteilt" #: js/share.js:170 msgid "Shared with you by {owner}" -msgstr "{owner} hat dies für Dich freigegeben" +msgstr "{owner} hat dies mit dir geteilt" #: js/share.js:175 msgid "Share with" -msgstr "Freigeben für" +msgstr "Teilen mit" #: js/share.js:180 msgid "Share with link" -msgstr "Über einen Link freigeben" +msgstr "Über einen Link teilen" #: js/share.js:183 msgid "Password protect" @@ -329,7 +329,7 @@ msgstr "Ablaufdatum" #: js/share.js:227 msgid "Share via email:" -msgstr "Über eine E-Mail freigeben:" +msgstr "Über eine E-Mail teilen:" #: js/share.js:229 msgid "No people found" @@ -345,7 +345,7 @@ msgstr "Für {user} in {item} freigegeben" #: js/share.js:313 msgid "Unshare" -msgstr "Freigabe aufheben" +msgstr "Teilung aufheben" #: js/share.js:325 msgid "can edit" @@ -369,7 +369,7 @@ msgstr "löschen" #: js/share.js:339 msgid "share" -msgstr "freigeben" +msgstr "teilen" #: js/share.js:373 js/share.js:569 msgid "Password protected" diff --git a/l10n/de/files.po b/l10n/de/files.po index 0d7576ef62..2acad72935 100644 --- a/l10n/de/files.po +++ b/l10n/de/files.po @@ -28,10 +28,10 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" -"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 13:50+0000\n" +"Last-Translator: Marcel Kühlhorn \n" +"Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -41,16 +41,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits." +msgstr "%s konnte nicht verschoben werden - eine Datei mit diesem Namen existiert bereits." #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "Konnte %s nicht verschieben" +msgstr "%s konnte nicht verschoben werden" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "Konnte Datei nicht umbenennen" +msgstr "Die Datei konnte nicht umbenannt werden" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -295,7 +295,7 @@ msgstr "Von einem Link" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Gelöschte Dateien" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/de/files_encryption.po b/l10n/de/files_encryption.po index 7c707e5f89..3cfd6711a2 100644 --- a/l10n/de/files_encryption.po +++ b/l10n/de/files_encryption.po @@ -9,10 +9,10 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 22:10+0000\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 14:12+0000\n" "Last-Translator: Marcel Kühlhorn \n" -"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" +"Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/l10n/de/files_trashbin.po b/l10n/de/files_trashbin.po index 177c56d3b8..1aa1fd8154 100644 --- a/l10n/de/files_trashbin.po +++ b/l10n/de/files_trashbin.po @@ -10,10 +10,10 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 21:50+0000\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 14:23+0000\n" "Last-Translator: Marcel Kühlhorn \n" -"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" +"Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/l10n/de/files_versions.po b/l10n/de/files_versions.po index 5926d03cb4..51c809db1b 100644 --- a/l10n/de/files_versions.po +++ b/l10n/de/files_versions.po @@ -13,10 +13,10 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 22:10+0000\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 14:20+0000\n" "Last-Translator: Marcel Kühlhorn \n" -"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" +"Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -60,7 +60,7 @@ msgstr "Historie" #: templates/history.php:20 msgid "Revert a file to a previous version by clicking on its revert button" -msgstr "Setzen Sie eine Datei durch klicken auf den Zurücksetzen Button zurück" +msgstr "Setze eine Datei durch klicken auf den Zurücksetzen Button zurück" #: templates/settings.php:3 msgid "Files Versioning" diff --git a/l10n/de/lib.po b/l10n/de/lib.po index c13aaaa349..ba89f5ea5f 100644 --- a/l10n/de/lib.po +++ b/l10n/de/lib.po @@ -14,37 +14,37 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 20:50+0000\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 14:10+0000\n" "Last-Translator: Marcel Kühlhorn \n" -"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" +"Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:339 +#: app.php:349 msgid "Help" msgstr "Hilfe" -#: app.php:346 +#: app.php:362 msgid "Personal" msgstr "Persönlich" -#: app.php:351 +#: app.php:373 msgid "Settings" msgstr "Einstellungen" -#: app.php:356 +#: app.php:385 msgid "Users" msgstr "Benutzer" -#: app.php:363 +#: app.php:398 msgid "Apps" msgstr "Apps" -#: app.php:365 +#: app.php:406 msgid "Admin" msgstr "Administrator" @@ -56,15 +56,15 @@ msgstr "Der ZIP-Download ist deaktiviert." msgid "Files need to be downloaded one by one." msgstr "Die Dateien müssen einzeln heruntergeladen werden." -#: files.php:203 files.php:228 +#: files.php:204 files.php:231 msgid "Back to Files" msgstr "Zurück zu \"Dateien\"" -#: files.php:227 +#: files.php:228 msgid "Selected files too large to generate zip file." msgstr "Die gewählten Dateien sind zu groß, um eine ZIP-Datei zu erstellen." -#: helper.php:226 +#: helper.php:228 msgid "couldn't be determined" msgstr "Konnte nicht festgestellt werden" @@ -124,15 +124,15 @@ msgstr "%s Der Datenbank-Name darf keine Punkte enthalten" msgid "%s set the database host." msgstr "%s setze den Datenbank-Host" -#: setup.php:126 setup.php:291 setup.php:336 +#: setup.php:126 setup.php:294 setup.php:339 msgid "PostgreSQL username and/or password not valid" msgstr "PostgreSQL Benutzername und/oder Passwort ungültig" #: setup.php:127 setup.php:150 setup.php:204 msgid "You need to enter either an existing account or the administrator." -msgstr "Sie müssen entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben." +msgstr "Du musst entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben." -#: setup.php:149 setup.php:423 setup.php:489 +#: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" msgstr "Oracle Benutzername und/oder Passwort ungültig" @@ -140,54 +140,54 @@ msgstr "Oracle Benutzername und/oder Passwort ungültig" msgid "MySQL username and/or password not valid" msgstr "MySQL Benutzername und/oder Passwort ungültig" -#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 -#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 -#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 -#: setup.php:579 +#: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 +#: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 +#: setup.php:545 setup.php:552 setup.php:561 setup.php:569 setup.php:578 +#: setup.php:584 #, php-format msgid "DB Error: \"%s\"" msgstr "DB Fehler: \"%s\"" -#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 -#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 -#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 +#: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 +#: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" msgstr "Fehlerhafter Befehl war: \"%s\"" -#: setup.php:270 +#: setup.php:273 #, php-format msgid "MySQL user '%s'@'localhost' exists already." msgstr "MySQL Benutzer '%s'@'localhost' existiert bereits." -#: setup.php:271 +#: setup.php:274 msgid "Drop this user from MySQL" msgstr "Lösche diesen Benutzer von MySQL" -#: setup.php:276 +#: setup.php:279 #, php-format msgid "MySQL user '%s'@'%%' already exists" msgstr "MySQL Benutzer '%s'@'%%' existiert bereits" -#: setup.php:277 +#: setup.php:280 msgid "Drop this user from MySQL." msgstr "Lösche diesen Benutzer von MySQL." -#: setup.php:548 setup.php:580 +#: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" msgstr "Fehlerhafter Befehl war: \"%s\", Name: %s, Passwort: %s" -#: setup.php:644 +#: setup.php:649 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "Dein Web-Server ist noch nicht für Datei-Synchronisation bereit, weil die WebDAV-Schnittstelle vermutlich defekt ist." -#: setup.php:645 +#: setup.php:651 #, php-format msgid "Please double check the installation guides." -msgstr "Bitte prüfen Sie die Instalationsanleitungen." +msgstr "Bitte prüfe die Instalationsanleitungen." #: template.php:113 msgid "seconds ago" @@ -241,16 +241,16 @@ msgstr "Letztes Jahr" msgid "years ago" msgstr "Vor Jahren" -#: updater.php:75 +#: updater.php:78 #, php-format msgid "%s is available. Get more information" msgstr "%s ist verfügbar. Weitere Informationen" -#: updater.php:77 +#: updater.php:81 msgid "up to date" msgstr "aktuell" -#: updater.php:80 +#: updater.php:84 msgid "updates check is disabled" msgstr "Die Update-Überprüfung ist ausgeschaltet" diff --git a/l10n/de/settings.po b/l10n/de/settings.po index 927cfec9c7..736ddb0719 100644 --- a/l10n/de/settings.po +++ b/l10n/de/settings.po @@ -26,10 +26,10 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" -"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 14:31+0000\n" +"Last-Translator: Marcel Kühlhorn \n" +"Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -164,23 +164,23 @@ msgstr "Gruppenadministrator" msgid "Delete" msgstr "Löschen" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" msgstr "Gruppe hinzufügen" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" msgstr "Es muss ein gültiger Benutzername angegeben werden" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" msgstr "Beim anlegen des Benutzers ist ein Fehler aufgetreten" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" msgstr "Es muss ein gültiges Passwort angegeben werden" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "Deutsch (Persönlich)" diff --git a/l10n/de/user_ldap.po b/l10n/de/user_ldap.po index b4bd8a2d9b..431c6be2ae 100644 --- a/l10n/de/user_ldap.po +++ b/l10n/de/user_ldap.po @@ -16,10 +16,10 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 22:01+0000\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 14:20+0000\n" "Last-Translator: Marcel Kühlhorn \n" -"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" +"Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -30,17 +30,17 @@ msgstr "" msgid "Failed to delete the server configuration" msgstr "Löschen der Serverkonfiguration fehlgeschlagen" -#: ajax/testConfiguration.php:35 +#: ajax/testConfiguration.php:36 msgid "The configuration is valid and the connection could be established!" msgstr "Die Konfiguration war erfolgreich, die Verbindung konnte hergestellt werden!" -#: ajax/testConfiguration.php:37 +#: ajax/testConfiguration.php:39 msgid "" "The configuration is valid, but the Bind failed. Please check the server " "settings and credentials." msgstr "Die Konfiguration ist gültig aber die Verbindung ist fehlgeschlagen. Bitte überprüfen Sie die Servereinstellungen und die Anmeldeinformationen." -#: ajax/testConfiguration.php:40 +#: ajax/testConfiguration.php:43 msgid "" "The configuration is invalid. Please look in the ownCloud log for further " "details." @@ -89,230 +89,230 @@ msgstr "Warnung: Die Anwendungen user_ldap und user_webdavauth sind inkom msgid "" "Warning: The PHP LDAP module is not installed, the backend will not " "work. Please ask your system administrator to install it." -msgstr "Warnung: Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitten Sie Ihren Systemadministrator das Modul zu installieren." +msgstr "Warnung: Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte deinen Systemadministrator das Modul zu installieren." #: templates/settings.php:15 msgid "Server configuration" msgstr "Serverkonfiguration" -#: templates/settings.php:17 +#: templates/settings.php:18 msgid "Add Server Configuration" msgstr "Serverkonfiguration hinzufügen" -#: templates/settings.php:21 +#: templates/settings.php:23 msgid "Host" msgstr "Host" -#: templates/settings.php:21 +#: templates/settings.php:25 msgid "" "You can omit the protocol, except you require SSL. Then start with ldaps://" msgstr "Du kannst das Protokoll auslassen, außer wenn Du SSL benötigst. Beginne dann mit ldaps://" -#: templates/settings.php:22 +#: templates/settings.php:26 msgid "Base DN" msgstr "Basis-DN" -#: templates/settings.php:22 +#: templates/settings.php:27 msgid "One Base DN per line" msgstr "Ein Base DN pro Zeile" -#: templates/settings.php:22 +#: templates/settings.php:28 msgid "You can specify Base DN for users and groups in the Advanced tab" msgstr "Du kannst Basis-DN für Benutzer und Gruppen in dem \"Erweitert\"-Reiter konfigurieren" -#: templates/settings.php:23 +#: templates/settings.php:30 msgid "User DN" msgstr "Benutzer-DN" -#: templates/settings.php:23 +#: templates/settings.php:32 msgid "" "The DN of the client user with which the bind shall be done, e.g. " "uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password " "empty." msgstr "Der DN des Benutzers für LDAP-Bind, z.B.: uid=agent,dc=example,dc=com. Für anonymen Zugriff lasse DN und Passwort leer." -#: templates/settings.php:24 +#: templates/settings.php:33 msgid "Password" msgstr "Passwort" -#: templates/settings.php:24 +#: templates/settings.php:36 msgid "For anonymous access, leave DN and Password empty." msgstr "Lasse die Felder von DN und Passwort für anonymen Zugang leer." -#: templates/settings.php:25 +#: templates/settings.php:37 msgid "User Login Filter" msgstr "Benutzer-Login-Filter" -#: templates/settings.php:25 +#: templates/settings.php:40 #, php-format msgid "" "Defines the filter to apply, when login is attempted. %%uid replaces the " "username in the login action." msgstr "Bestimmt den angewendeten Filter, wenn eine Anmeldung versucht wird. %%uid ersetzt den Benutzernamen bei dem Anmeldeversuch." -#: templates/settings.php:25 +#: templates/settings.php:41 #, php-format msgid "use %%uid placeholder, e.g. \"uid=%%uid\"" msgstr "verwende %%uid Platzhalter, z. B. \"uid=%%uid\"" -#: templates/settings.php:26 +#: templates/settings.php:42 msgid "User List Filter" msgstr "Benutzer-Filter-Liste" -#: templates/settings.php:26 +#: templates/settings.php:45 msgid "Defines the filter to apply, when retrieving users." msgstr "Definiert den Filter für die Anfrage der Benutzer." -#: templates/settings.php:26 +#: templates/settings.php:46 msgid "without any placeholder, e.g. \"objectClass=person\"." msgstr "ohne Platzhalter, z.B.: \"objectClass=person\"" -#: templates/settings.php:27 +#: templates/settings.php:47 msgid "Group Filter" msgstr "Gruppen-Filter" -#: templates/settings.php:27 +#: templates/settings.php:50 msgid "Defines the filter to apply, when retrieving groups." msgstr "Definiert den Filter für die Anfrage der Gruppen." -#: templates/settings.php:27 +#: templates/settings.php:51 msgid "without any placeholder, e.g. \"objectClass=posixGroup\"." msgstr "ohne Platzhalter, z.B.: \"objectClass=posixGroup\"" -#: templates/settings.php:31 +#: templates/settings.php:55 msgid "Connection Settings" msgstr "Verbindungseinstellungen" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "Configuration Active" msgstr "Konfiguration aktiv" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "When unchecked, this configuration will be skipped." msgstr "Konfiguration wird übersprungen wenn deaktiviert" -#: templates/settings.php:34 +#: templates/settings.php:58 msgid "Port" msgstr "Port" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "Backup (Replica) Host" msgstr "Backup Host (Kopie)" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "" "Give an optional backup host. It must be a replica of the main LDAP/AD " "server." msgstr "Gib einen optionalen Backup Host an. Es muss sich um eine kopie des Haupt LDAP/AD Servers handeln." -#: templates/settings.php:36 +#: templates/settings.php:60 msgid "Backup (Replica) Port" msgstr "Backup Port" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "Disable Main Server" msgstr "Hauptserver deaktivieren" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "When switched on, ownCloud will only connect to the replica server." msgstr "Wenn aktiviert wird ownCloud ausschließlich den Backupserver verwenden" -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Use TLS" msgstr "Nutze TLS" -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Do not use it additionally for LDAPS connections, it will fail." msgstr "Benutze es nicht zusätzlich für LDAPS Verbindungen, es wird scheitern." -#: templates/settings.php:39 +#: templates/settings.php:63 msgid "Case insensitve LDAP server (Windows)" msgstr "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)" -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Turn off SSL certificate validation." msgstr "Schalte die SSL-Zertifikatsprüfung aus." -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "" "If connection only works with this option, import the LDAP server's SSL " "certificate in your ownCloud server." msgstr "Falls die Verbindung es erfordert, muss das SSL-Zertifikat des LDAP-Server importiert werden." -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Not recommended, use for testing only." msgstr "Nicht empfohlen, nur zu Testzwecken." -#: templates/settings.php:41 +#: templates/settings.php:65 msgid "in seconds. A change empties the cache." msgstr "in Sekunden. Eine Änderung leert den Cache." -#: templates/settings.php:43 +#: templates/settings.php:67 msgid "Directory Settings" msgstr "Ordnereinstellungen" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "User Display Name Field" msgstr "Feld für den Anzeigenamen des Benutzers" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "The LDAP attribute to use to generate the user`s ownCloud name." msgstr "Das LDAP-Attribut für die Generierung des Benutzernamens in ownCloud. " -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "Base User Tree" msgstr "Basis-Benutzerbaum" -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "One User Base DN per line" msgstr "Ein Benutzer Base DN pro Zeile" -#: templates/settings.php:47 +#: templates/settings.php:71 msgid "User Search Attributes" msgstr "Benutzersucheigenschaften" -#: templates/settings.php:47 templates/settings.php:50 +#: templates/settings.php:71 templates/settings.php:74 msgid "Optional; one attribute per line" msgstr "Optional, eine Eigenschaft pro Zeile" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "Group Display Name Field" msgstr "Feld für den Anzeigenamen der Gruppe" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "The LDAP attribute to use to generate the groups`s ownCloud name." msgstr "Das LDAP-Attribut für die Generierung des Gruppennamens in ownCloud. " -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "Base Group Tree" msgstr "Basis-Gruppenbaum" -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "One Group Base DN per line" msgstr "Ein Gruppen Base DN pro Zeile" -#: templates/settings.php:50 +#: templates/settings.php:74 msgid "Group Search Attributes" msgstr "Gruppensucheigenschaften" -#: templates/settings.php:51 +#: templates/settings.php:75 msgid "Group-Member association" msgstr "Assoziation zwischen Gruppe und Benutzer" -#: templates/settings.php:53 +#: templates/settings.php:77 msgid "Special Attributes" msgstr "Spezielle Eigenschaften" -#: templates/settings.php:56 +#: templates/settings.php:80 msgid "in bytes" msgstr "in Bytes" -#: templates/settings.php:58 +#: templates/settings.php:82 msgid "" "Leave empty for user name (default). Otherwise, specify an LDAP/AD " "attribute." msgstr "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfall trage ein LDAP/AD-Attribut ein." -#: templates/settings.php:62 +#: templates/settings.php:86 msgid "Help" msgstr "Hilfe" diff --git a/l10n/de/user_webdavauth.po b/l10n/de/user_webdavauth.po index 3bc6180a30..139f573438 100644 --- a/l10n/de/user_webdavauth.po +++ b/l10n/de/user_webdavauth.po @@ -4,16 +4,17 @@ # # Translators: # , 2012. +# Marcel Kühlhorn , 2013. # , 2013. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-16 00:19+0100\n" -"PO-Revision-Date: 2013-01-15 00:30+0000\n" -"Last-Translator: AndryXY \n" -"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 13:50+0000\n" +"Last-Translator: Marcel Kühlhorn \n" +"Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -28,9 +29,9 @@ msgstr "WebDAV Authentifikation" msgid "URL: http://" msgstr "URL: http://" -#: templates/settings.php:6 +#: templates/settings.php:7 msgid "" "ownCloud will send the user credentials to this URL. This plugin checks the " "response and will interpret the HTTP statuscodes 401 and 403 as invalid " "credentials, and all other responses as valid credentials." -msgstr "ownCloud wird die Benutzer-Anmeldedaten an diese URL schicken. Dieses Plugin prüft die Anmeldedaten auf ihre Gültigkeit und interpretiert die HTTP Statusfehler 401 und 403 als ungültige, sowie alle Anderen als gültige Anmeldedaten." +msgstr "ownCloud sendet die Benutzerdaten an diese URL. Dieses Plugin prüft die Antwort und wird die Statuscodes 401 und 403 als ungültige Daten und alle anderen Antworten als gültige Daten interpretieren." diff --git a/l10n/de_DE/lib.po b/l10n/de_DE/lib.po index 564fc444d5..1d9413b7ea 100644 --- a/l10n/de_DE/lib.po +++ b/l10n/de_DE/lib.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-17 00:25+0100\n" -"PO-Revision-Date: 2013-02-16 22:56+0000\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-16 23:30+0000\n" "Last-Translator: Marcel Kühlhorn \n" "Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po index 5482f3ee32..9fe6f6813a 100644 --- a/l10n/de_DE/settings.po +++ b/l10n/de_DE/settings.po @@ -30,8 +30,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-17 00:25+0100\n" -"PO-Revision-Date: 2013-02-16 23:25+0000\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-16 23:40+0000\n" "Last-Translator: Marcel Kühlhorn \n" "Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" @@ -203,7 +203,7 @@ msgstr "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich über das Inte #: templates/admin.php:29 msgid "Setup Warning" -msgstr "" +msgstr "Einrichtungswarnung" #: templates/admin.php:32 msgid "" @@ -236,11 +236,11 @@ msgid "" "\"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with" " certain characters in file names. We strongly suggest to install the " "required packages on your system to support en_US.UTF-8/en_US.UTF8." -msgstr "" +msgstr "Dieser ownCloud Server kann die Ländereinstellung nicht auf \"de_DE.UTF-8\"/\"de_DE.UTF8\" ändern. Dies bedeutet dass es Probleme mit bestimmten Zeichen in Dateinamen geben könnte. Wir empfehlen die für de_DE.UTF-8/de_DE.UTF8 benötigten Pakete auf ihrem System zu installieren." #: templates/admin.php:72 msgid "Internet connection not working" -msgstr "" +msgstr "Keine Netzwerkverbindung" #: templates/admin.php:75 msgid "" @@ -250,7 +250,7 @@ msgid "" "remote and sending of notification emails might also not work. We suggest to" " enable internet connection for this server if you want to have all features" " of ownCloud." -msgstr "" +msgstr "Dieser ownCloud Server hat keine funktionierende Netzwerkverbindung. Dies bedeutet das einige Funktionen wie das einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Netzwerkverbindung für diesen Server zu aktivieren wenn Sie alle Funktionen von ownCloud nutzen wollen." #: templates/admin.php:89 msgid "Cron" @@ -264,13 +264,13 @@ msgstr "Führe eine Aufgabe bei jedem Laden der Seite aus" msgid "" "cron.php is registered at a webcron service. Call the cron.php page in the " "owncloud root once a minute over http." -msgstr "" +msgstr "cron.php ist bei einem Webcron-Service registriert. Die cron.php Seite im ownCloud Wurzelverzeichniss wird einmal pro Minute über http abgerufen." #: templates/admin.php:118 msgid "" "Use systems cron service. Call the cron.php file in the owncloud folder via " "a system cronjob once a minute." -msgstr "" +msgstr "Nutze den Cron Systemdienst. Rufe die Datei cron.php im ownCloud Ordner einmal pro Minute über einen Cronjob auf." #: templates/admin.php:125 msgid "Sharing" @@ -294,19 +294,19 @@ msgstr "Erlaube es Benutzern, Items per öffentlichem Link zu teilen" #: templates/admin.php:147 msgid "Allow resharing" -msgstr "Erlaube weiterteilen" +msgstr "Erlaube weiterverteilen" #: templates/admin.php:148 msgid "Allow users to share items shared with them again" -msgstr "" +msgstr "Erlaubt Nutzern mit ihnen geteilte Inhalte erneut zu teilen" #: templates/admin.php:155 msgid "Allow users to share with anyone" -msgstr "" +msgstr "Erlaube Nutzern mit jedem zu teilen" #: templates/admin.php:158 msgid "Allow users to only share with users in their groups" -msgstr "" +msgstr "Erlaube Nutzern nur mit Nutzern in ihrer Gruppe zu teilen" #: templates/admin.php:165 msgid "Security" diff --git a/l10n/el/core.po b/l10n/el/core.po index 7752a3076e..acf7f9910b 100644 --- a/l10n/el/core.po +++ b/l10n/el/core.po @@ -6,6 +6,7 @@ # axil Pι , 2012. # Dimitris M. , 2012-2013. # Efstathios Iosifidis , 2012. +# Efstathios Iosifidis , 2013. # Efstathios Iosifidis , 2012. # Marios Bekatoros <>, 2012. # , 2011. @@ -15,9 +16,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:32+0000\n" -"Last-Translator: Dimitris M. \n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 12:50+0000\n" +"Last-Translator: Efstathios Iosifidis \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -261,7 +262,7 @@ msgstr "Το απαιτούμενο αρχείο {file} δεν εγκαταστ #: js/share.js:29 js/share.js:43 js/share.js:90 msgid "Shared" -msgstr "" +msgstr "Κοινόχρηστα" #: js/share.js:93 msgid "Share" @@ -388,11 +389,11 @@ msgid "" "The update was unsuccessful. Please report this issue to the ownCloud " "community." -msgstr "" +msgstr "Η ενημέρωση ήταν ανεπιτυχής. Παρακαλώ στείλτε αναφορά στην κοινότητα ownCloud." #: js/update.js:18 msgid "The update was successful. Redirecting you to ownCloud now." -msgstr "" +msgstr "Η ενημέρωση ήταν επιτυχής. Μετάβαση στο ownCloud." #: lostpassword/controller.php:47 msgid "ownCloud password reset" @@ -495,14 +496,14 @@ msgstr "Χωρίς το πρόσθετο δημιουργίας τυχαίων msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανό προσβάσιμα από το internet γιατί δεν δουλεύει το αρχείο .htaccess." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Για πληροφορίες σχετικά με την σωστή ρύθμιση του διακομιστή σας, δείτε στην τεκμηρίωση." #: templates/installation.php:36 msgid "Create an admin account" @@ -585,7 +586,7 @@ msgstr "Είσοδος" #: templates/login.php:49 msgid "Alternative Logins" -msgstr "" +msgstr "Εναλλακτικές Συνδέσεις" #: templates/part.pagenavi.php:3 msgid "prev" diff --git a/l10n/el/files.po b/l10n/el/files.po index 3f60220fd5..0a760250dd 100644 --- a/l10n/el/files.po +++ b/l10n/el/files.po @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 12:10+0000\n" +"Last-Translator: Efstathios Iosifidis \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -282,7 +282,7 @@ msgstr "Από σύνδεσμο" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Διαγραμμένα αρχεία" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/el/lib.po b/l10n/el/lib.po index 9d54c6a083..40c97ff663 100644 --- a/l10n/el/lib.po +++ b/l10n/el/lib.po @@ -3,15 +3,16 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Efstathios Iosifidis , 2013. # Efstathios Iosifidis , 2012. # , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 15:39+0100\n" -"PO-Revision-Date: 2013-02-11 14:41+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 12:50+0000\n" +"Last-Translator: Efstathios Iosifidis \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,27 +20,27 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app.php:339 +#: app.php:349 msgid "Help" msgstr "Βοήθεια" -#: app.php:346 +#: app.php:362 msgid "Personal" msgstr "Προσωπικά" -#: app.php:351 +#: app.php:373 msgid "Settings" msgstr "Ρυθμίσεις" -#: app.php:356 +#: app.php:385 msgid "Users" msgstr "Χρήστες" -#: app.php:363 +#: app.php:398 msgid "Apps" msgstr "Εφαρμογές" -#: app.php:365 +#: app.php:406 msgid "Admin" msgstr "Διαχειριστής" @@ -51,15 +52,15 @@ msgstr "Η λήψη ZIP απενεργοποιήθηκε." msgid "Files need to be downloaded one by one." msgstr "Τα αρχεία πρέπει να ληφθούν ένα-ένα." -#: files.php:203 files.php:228 +#: files.php:204 files.php:231 msgid "Back to Files" msgstr "Πίσω στα Αρχεία" -#: files.php:227 +#: files.php:228 msgid "Selected files too large to generate zip file." msgstr "Τα επιλεγμένα αρχεία είναι μεγάλα ώστε να δημιουργηθεί αρχείο zip." -#: helper.php:226 +#: helper.php:228 msgid "couldn't be determined" msgstr "δεν μπορούσε να προσδιορισθεί" @@ -89,15 +90,15 @@ msgstr "Εικόνες" #: setup.php:34 msgid "Set an admin username." -msgstr "" +msgstr "Εισάγετε όνομα χρήστη διαχειριστή." #: setup.php:37 msgid "Set an admin password." -msgstr "" +msgstr "Εισάγετε συνθηματικό διαχειριστή." #: setup.php:40 msgid "Specify a data folder." -msgstr "" +msgstr "Καθορίστε τον φάκελο δεδομένων." #: setup.php:53 #, php-format @@ -119,70 +120,70 @@ msgstr "" msgid "%s set the database host." msgstr "" -#: setup.php:126 setup.php:291 setup.php:336 +#: setup.php:126 setup.php:294 setup.php:339 msgid "PostgreSQL username and/or password not valid" -msgstr "" +msgstr "Μη έγκυρος χρήστης και/ή συνθηματικό της PostgreSQL" #: setup.php:127 setup.php:150 setup.php:204 msgid "You need to enter either an existing account or the administrator." msgstr "" -#: setup.php:149 setup.php:423 setup.php:489 +#: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" -msgstr "" +msgstr "Μη έγκυρος χρήστης και/ή συνθηματικό της Oracle" #: setup.php:203 msgid "MySQL username and/or password not valid" -msgstr "" +msgstr "Μη έγκυρος χρήστης και/ή συνθηματικό της MySQL" -#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 -#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 -#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 -#: setup.php:579 +#: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 +#: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 +#: setup.php:545 setup.php:552 setup.php:561 setup.php:569 setup.php:578 +#: setup.php:584 #, php-format msgid "DB Error: \"%s\"" -msgstr "" +msgstr "Σφάλμα Βάσης Δεδομένων: \"%s\"" -#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 -#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 -#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 +#: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 +#: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" msgstr "" -#: setup.php:270 +#: setup.php:273 #, php-format msgid "MySQL user '%s'@'localhost' exists already." -msgstr "" +msgstr "Υπάρχει ήδη ο χρήστης '%s'@'localhost' της MySQL." -#: setup.php:271 +#: setup.php:274 msgid "Drop this user from MySQL" -msgstr "" +msgstr "Απόρριψη αυτού του χρήστη από την MySQL" -#: setup.php:276 +#: setup.php:279 #, php-format msgid "MySQL user '%s'@'%%' already exists" -msgstr "" +msgstr "Ο χρήστης '%s'@'%%' της MySQL υπάρχει ήδη" -#: setup.php:277 +#: setup.php:280 msgid "Drop this user from MySQL." -msgstr "" +msgstr "Απόρριψη αυτού του χρήστη από την MySQL" -#: setup.php:548 setup.php:580 +#: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" msgstr "" -#: setup.php:644 +#: setup.php:649 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων γιατί η διεπαφή WebDAV πιθανόν να είναι κατεστραμμένη." -#: setup.php:645 +#: setup.php:651 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Ελέγξτε ξανά τις οδηγίες εγκατάστασης." #: template.php:113 msgid "seconds ago" @@ -236,16 +237,16 @@ msgstr "τον προηγούμενο χρόνο" msgid "years ago" msgstr "χρόνια πριν" -#: updater.php:75 +#: updater.php:78 #, php-format msgid "%s is available. Get more information" msgstr "%s είναι διαθέσιμα. Δείτε περισσότερες πληροφορίες" -#: updater.php:77 +#: updater.php:81 msgid "up to date" msgstr "ενημερωμένο" -#: updater.php:80 +#: updater.php:84 msgid "updates check is disabled" msgstr "ο έλεγχος ενημερώσεων είναι απενεργοποιημένος" diff --git a/l10n/el/settings.po b/l10n/el/settings.po index 525b3614e7..6c417dcbf3 100644 --- a/l10n/el/settings.po +++ b/l10n/el/settings.po @@ -5,6 +5,7 @@ # Translators: # Dimitris M. , 2012. # Efstathios Iosifidis , 2012. +# Efstathios Iosifidis , 2013. # Efstathios Iosifidis , 2012. # , 2012. # , 2012. @@ -19,9 +20,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 12:30+0000\n" +"Last-Translator: Efstathios Iosifidis \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -94,7 +95,7 @@ msgstr "Αδυναμία αφαίρεσης χρήστη από την ομάδ #: ajax/updateapp.php:14 msgid "Couldn't update app." -msgstr "" +msgstr "Αδυναμία ενημέρωσης εφαρμογής" #: js/apps.js:30 msgid "Update to {appversion}" @@ -110,15 +111,15 @@ msgstr "Ενεργοποίηση" #: js/apps.js:55 msgid "Please wait...." -msgstr "" +msgstr "Παρακαλώ περιμένετε..." #: js/apps.js:84 msgid "Updating...." -msgstr "" +msgstr "Ενημέρωση..." #: js/apps.js:87 msgid "Error while updating app" -msgstr "" +msgstr "Σφάλμα κατά την ενημέρωση της εφαρμογής" #: js/apps.js:87 msgid "Error" @@ -126,7 +127,7 @@ msgstr "Σφάλμα" #: js/apps.js:90 msgid "Updated" -msgstr "" +msgstr "Ενημερώθηκε" #: js/personal.js:96 msgid "Saving..." @@ -142,7 +143,7 @@ msgstr "αναίρεση" #: js/users.js:62 msgid "Unable to remove user" -msgstr "" +msgstr "Αδυναμία αφαίρεση χρήστη" #: js/users.js:75 templates/users.php:26 templates/users.php:80 #: templates/users.php:105 @@ -157,23 +158,23 @@ msgstr "Ομάδα Διαχειριστών" msgid "Delete" msgstr "Διαγραφή" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" -msgstr "" +msgstr "προσθήκη ομάδας" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" msgstr "" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" -msgstr "" +msgstr "Σφάλμα δημιουργίας χρήστη" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" msgstr "" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "__όνομα_γλώσσας__" @@ -192,18 +193,18 @@ msgstr "Ο κατάλογος data και τα αρχεία σας πιθανό #: templates/admin.php:29 msgid "Setup Warning" -msgstr "" +msgstr "Ρύθμιση Προειδοποίησης" #: templates/admin.php:32 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων γιατί η διεπαφή WebDAV πιθανόν να είναι κατεστραμμένη." #: templates/admin.php:33 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Ελέγξτε ξανά τις οδηγίες εγκατάστασης." #: templates/admin.php:44 msgid "Module 'fileinfo' missing" @@ -243,7 +244,7 @@ msgstr "" #: templates/admin.php:89 msgid "Cron" -msgstr "" +msgstr "Cron" #: templates/admin.php:98 msgid "Execute one task with each page loaded" @@ -299,7 +300,7 @@ msgstr "" #: templates/admin.php:165 msgid "Security" -msgstr "" +msgstr "Ασφάλεια" #: templates/admin.php:178 msgid "Enforce HTTPS" @@ -318,7 +319,7 @@ msgstr "" #: templates/admin.php:192 msgid "Log" -msgstr "" +msgstr "Καταγραφές" #: templates/admin.php:193 msgid "Log level" @@ -397,7 +398,7 @@ msgstr "Χρησιμοποιήσατε %s από διαθέσι #: templates/personal.php:14 msgid "Get the apps to sync your files" -msgstr "" +msgstr "Λήψη της εφαρμογής για συγχρονισμό των αρχείων σας" #: templates/personal.php:25 msgid "Show First Run Wizard again" diff --git a/l10n/el/user_ldap.po b/l10n/el/user_ldap.po index 972b0601df..2f51712882 100644 --- a/l10n/el/user_ldap.po +++ b/l10n/el/user_ldap.po @@ -6,15 +6,16 @@ # , 2012. # Dimitris M. , 2012. # Efstathios Iosifidis , 2012. +# Efstathios Iosifidis , 2013. # Konstantinos Tzanidis , 2012. # Marios Bekatoros <>, 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 13:00+0000\n" +"Last-Translator: Efstathios Iosifidis \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,23 +25,23 @@ msgstr "" #: ajax/deleteConfiguration.php:34 msgid "Failed to delete the server configuration" -msgstr "" +msgstr "Αποτυχία διαγραφής ρυθμίσεων διακομιστή" -#: ajax/testConfiguration.php:35 +#: ajax/testConfiguration.php:36 msgid "The configuration is valid and the connection could be established!" -msgstr "" +msgstr "Οι ρυθμίσεις είναι έγκυρες και η σύνδεση μπορεί να πραγματοποιηθεί!" -#: ajax/testConfiguration.php:37 +#: ajax/testConfiguration.php:39 msgid "" "The configuration is valid, but the Bind failed. Please check the server " "settings and credentials." -msgstr "" +msgstr "Οι ρυθμίσεις είναι έγκυρες, αλλά απέτυχε η σύνδεση. Παρακαλώ ελέγξτε τις ρυθμίσεις του διακομιστή και τα διαπιστευτήρια." -#: ajax/testConfiguration.php:40 +#: ajax/testConfiguration.php:43 msgid "" "The configuration is invalid. Please look in the ownCloud log for further " "details." -msgstr "" +msgstr "Μη έγκυρες ρυθμίσεις. Παρακαλώ ελέγξτε τις καταγραφές του ownCloud για περισσότερες λεπτομέρειες." #: js/settings.js:66 msgid "Deletion failed" @@ -52,27 +53,27 @@ msgstr "" #: js/settings.js:83 msgid "Keep settings?" -msgstr "" +msgstr "Διατήρηση ρυθμίσεων;" #: js/settings.js:97 msgid "Cannot add server configuration" -msgstr "" +msgstr "Αδυναμία προσθήκης ρυθμίσεων διακομιστή" #: js/settings.js:121 msgid "Connection test succeeded" -msgstr "" +msgstr "Επιτυχημένη δοκιμαστική σύνδεση" #: js/settings.js:126 msgid "Connection test failed" -msgstr "" +msgstr "Αποτυχημένη δοκιμαστική σύνδεσης." #: js/settings.js:136 msgid "Do you really want to delete the current Server Configuration?" -msgstr "" +msgstr "Θέλετε να διαγράψετε τις τρέχουσες ρυθμίσεις του διακομιστή;" #: js/settings.js:137 msgid "Confirm Deletion" -msgstr "" +msgstr "Επιβεβαίωση Διαγραφής" #: templates/settings.php:8 msgid "" @@ -85,230 +86,230 @@ msgstr "Προσοχή: Οι εφαρμογές user_ldap και user_web msgid "" "Warning: The PHP LDAP module is not installed, the backend will not " "work. Please ask your system administrator to install it." -msgstr "" +msgstr "Προσοχή: Το άρθρωμα PHP LDAP δεν είναι εγκατεστημένο και το σύστημα υποστήριξης δεν θα δουλέψει. Παρακαλώ ζητήστε από τον διαχειριστή συστήματος να το εγκαταστήσει." #: templates/settings.php:15 msgid "Server configuration" -msgstr "" +msgstr "Ρυθμίσεις Διακομιστή" -#: templates/settings.php:17 +#: templates/settings.php:18 msgid "Add Server Configuration" -msgstr "" +msgstr "Προσθήκη Ρυθμίσεων Διακομιστή" -#: templates/settings.php:21 +#: templates/settings.php:23 msgid "Host" msgstr "Διακομιστής" -#: templates/settings.php:21 +#: templates/settings.php:25 msgid "" "You can omit the protocol, except you require SSL. Then start with ldaps://" msgstr "Μπορείτε να παραλείψετε το πρωτόκολλο, εκτός αν απαιτείται SSL. Σε αυτή την περίπτωση ξεκινήστε με ldaps://" -#: templates/settings.php:22 +#: templates/settings.php:26 msgid "Base DN" msgstr "Base DN" -#: templates/settings.php:22 +#: templates/settings.php:27 msgid "One Base DN per line" msgstr "" -#: templates/settings.php:22 +#: templates/settings.php:28 msgid "You can specify Base DN for users and groups in the Advanced tab" msgstr "Μπορείτε να καθορίσετε το Base DN για χρήστες και ομάδες από την καρτέλα Προηγμένες ρυθμίσεις" -#: templates/settings.php:23 +#: templates/settings.php:30 msgid "User DN" msgstr "User DN" -#: templates/settings.php:23 +#: templates/settings.php:32 msgid "" "The DN of the client user with which the bind shall be done, e.g. " "uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password " "empty." msgstr "Το DN του χρήστη πελάτη με το οποίο θα πρέπει να γίνει η σύνδεση, π.χ. uid=agent,dc=example,dc=com. Για χρήση χωρίς πιστοποίηση, αφήστε το DN και τον Κωδικό κενά." -#: templates/settings.php:24 +#: templates/settings.php:33 msgid "Password" msgstr "Συνθηματικό" -#: templates/settings.php:24 +#: templates/settings.php:36 msgid "For anonymous access, leave DN and Password empty." msgstr "Για ανώνυμη πρόσβαση, αφήστε κενά τα πεδία DN και Pasword." -#: templates/settings.php:25 +#: templates/settings.php:37 msgid "User Login Filter" msgstr "User Login Filter" -#: templates/settings.php:25 +#: templates/settings.php:40 #, php-format msgid "" "Defines the filter to apply, when login is attempted. %%uid replaces the " "username in the login action." msgstr "Καθορίζει το φίλτρο που θα ισχύει κατά την προσπάθεια σύνδεσης χρήστη. %%uid αντικαθιστά το όνομα χρήστη κατά τη σύνδεση. " -#: templates/settings.php:25 +#: templates/settings.php:41 #, php-format msgid "use %%uid placeholder, e.g. \"uid=%%uid\"" msgstr "χρησιμοποιήστε τη μεταβλητή %%uid, π.χ. \"uid=%%uid\"" -#: templates/settings.php:26 +#: templates/settings.php:42 msgid "User List Filter" msgstr "User List Filter" -#: templates/settings.php:26 +#: templates/settings.php:45 msgid "Defines the filter to apply, when retrieving users." msgstr "Καθορίζει το φίλτρο που θα ισχύει κατά την ανάκτηση επαφών." -#: templates/settings.php:26 +#: templates/settings.php:46 msgid "without any placeholder, e.g. \"objectClass=person\"." msgstr "χωρίς κάποια μεταβλητή, π.χ. \"objectClass=άτομο\"." -#: templates/settings.php:27 +#: templates/settings.php:47 msgid "Group Filter" msgstr "Group Filter" -#: templates/settings.php:27 +#: templates/settings.php:50 msgid "Defines the filter to apply, when retrieving groups." msgstr "Καθορίζει το φίλτρο που θα ισχύει κατά την ανάκτηση ομάδων." -#: templates/settings.php:27 +#: templates/settings.php:51 msgid "without any placeholder, e.g. \"objectClass=posixGroup\"." msgstr "χωρίς κάποια μεταβλητή, π.χ. \"objectClass=ΟμάδαPosix\"." -#: templates/settings.php:31 +#: templates/settings.php:55 msgid "Connection Settings" -msgstr "" +msgstr "Ρυθμίσεις Σύνδεσης" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "Configuration Active" msgstr "" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "When unchecked, this configuration will be skipped." msgstr "" -#: templates/settings.php:34 +#: templates/settings.php:58 msgid "Port" msgstr "Θύρα" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "Backup (Replica) Host" msgstr "" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "" "Give an optional backup host. It must be a replica of the main LDAP/AD " "server." msgstr "" -#: templates/settings.php:36 +#: templates/settings.php:60 msgid "Backup (Replica) Port" msgstr "" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "Disable Main Server" msgstr "" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "When switched on, ownCloud will only connect to the replica server." msgstr "" -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Use TLS" msgstr "Χρήση TLS" -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Do not use it additionally for LDAPS connections, it will fail." msgstr "" -#: templates/settings.php:39 +#: templates/settings.php:63 msgid "Case insensitve LDAP server (Windows)" msgstr "LDAP server (Windows) με διάκριση πεζών-ΚΕΦΑΛΑΙΩΝ" -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Turn off SSL certificate validation." msgstr "Απενεργοποίηση επικύρωσης πιστοποιητικού SSL." -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "" "If connection only works with this option, import the LDAP server's SSL " "certificate in your ownCloud server." msgstr "Εάν η σύνδεση δουλεύει μόνο με αυτή την επιλογή, εισάγετε το LDAP SSL πιστοποιητικό του διακομιστή στον ownCloud server σας." -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Not recommended, use for testing only." msgstr "Δεν προτείνεται, χρήση μόνο για δοκιμές." -#: templates/settings.php:41 +#: templates/settings.php:65 msgid "in seconds. A change empties the cache." msgstr "σε δευτερόλεπτα. Μια αλλαγή αδειάζει την μνήμη cache." -#: templates/settings.php:43 +#: templates/settings.php:67 msgid "Directory Settings" -msgstr "" +msgstr "Ρυθμίσεις Καταλόγου" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "User Display Name Field" msgstr "Πεδίο Ονόματος Χρήστη" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "The LDAP attribute to use to generate the user`s ownCloud name." msgstr "Η ιδιότητα LDAP που θα χρησιμοποιείται για τη δημιουργία του ονόματος χρήστη του ownCloud." -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "Base User Tree" msgstr "Base User Tree" -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "One User Base DN per line" msgstr "" -#: templates/settings.php:47 +#: templates/settings.php:71 msgid "User Search Attributes" msgstr "" -#: templates/settings.php:47 templates/settings.php:50 +#: templates/settings.php:71 templates/settings.php:74 msgid "Optional; one attribute per line" msgstr "" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "Group Display Name Field" msgstr "Group Display Name Field" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "The LDAP attribute to use to generate the groups`s ownCloud name." msgstr "Η ιδιότητα LDAP που θα χρησιμοποιείται για τη δημιουργία του ονόματος ομάδας του ownCloud." -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "Base Group Tree" msgstr "Base Group Tree" -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "One Group Base DN per line" msgstr "" -#: templates/settings.php:50 +#: templates/settings.php:74 msgid "Group Search Attributes" msgstr "" -#: templates/settings.php:51 +#: templates/settings.php:75 msgid "Group-Member association" msgstr "Group-Member association" -#: templates/settings.php:53 +#: templates/settings.php:77 msgid "Special Attributes" msgstr "" -#: templates/settings.php:56 +#: templates/settings.php:80 msgid "in bytes" msgstr "σε bytes" -#: templates/settings.php:58 +#: templates/settings.php:82 msgid "" "Leave empty for user name (default). Otherwise, specify an LDAP/AD " "attribute." msgstr "Αφήστε το κενό για το όνομα χρήστη (προεπιλογή). Διαφορετικά, συμπληρώστε μία ιδιότητα LDAP/AD." -#: templates/settings.php:62 +#: templates/settings.php:86 msgid "Help" msgstr "Βοήθεια" diff --git a/l10n/eu/files.po b/l10n/eu/files.po index 27a31c2ac4..0e4427c982 100644 --- a/l10n/eu/files.po +++ b/l10n/eu/files.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 12:30+0000\n" +"Last-Translator: asieriko \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -278,7 +278,7 @@ msgstr "Estekatik" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Ezabatutako fitxategiak" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/eu/settings.po b/l10n/eu/settings.po index 7e26109a3f..7a56399da9 100644 --- a/l10n/eu/settings.po +++ b/l10n/eu/settings.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 12:30+0000\n" +"Last-Translator: asieriko \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -149,23 +149,23 @@ msgstr "Talde administradorea" msgid "Delete" msgstr "Ezabatu" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" msgstr "gehitu taldea" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" msgstr "Baliozko erabiltzaile izena eman behar da" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" msgstr "Errore bat egon da erabiltzailea sortzean" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" msgstr "Baliozko pasahitza eman behar da" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "Euskera" @@ -217,7 +217,7 @@ msgid "" "\"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with" " certain characters in file names. We strongly suggest to install the " "required packages on your system to support en_US.UTF-8/en_US.UTF8." -msgstr "" +msgstr "OwnClud zerbitzari honek ezin du sistemaren lokala \"en_US.UTF-8\"/\"en.US.UTF-8\" ezarri. Honek esan nahi du fitxategi izen batzuekin arazoak egon daitezkeela. Aholkatzen dugu zure sistemak en_US.UTF-8/en_US.UTF8 lokala onartzeko behar diren paketeak instala ditzazun." #: templates/admin.php:72 msgid "Internet connection not working" diff --git a/l10n/eu/user_ldap.po b/l10n/eu/user_ldap.po index 23c282efa1..9f66eee4ec 100644 --- a/l10n/eu/user_ldap.po +++ b/l10n/eu/user_ldap.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 22:33+0000\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 12:30+0000\n" "Last-Translator: asieriko \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" @@ -23,17 +23,17 @@ msgstr "" msgid "Failed to delete the server configuration" msgstr "Zerbitzariaren konfigurazioa ezabatzeak huts egin du" -#: ajax/testConfiguration.php:35 +#: ajax/testConfiguration.php:36 msgid "The configuration is valid and the connection could be established!" msgstr "Konfigurazioa egokia da eta konexioa ezarri daiteke!" -#: ajax/testConfiguration.php:37 +#: ajax/testConfiguration.php:39 msgid "" "The configuration is valid, but the Bind failed. Please check the server " "settings and credentials." msgstr "Konfigurazioa ongi dago, baina Bind-ek huts egin du. Mesedez egiaztatu zerbitzariaren ezarpenak eta kredentzialak." -#: ajax/testConfiguration.php:40 +#: ajax/testConfiguration.php:43 msgid "" "The configuration is invalid. Please look in the ownCloud log for further " "details." @@ -45,7 +45,7 @@ msgstr "Ezabaketak huts egin du" #: js/settings.js:82 msgid "Take over settings from recent server configuration?" -msgstr "" +msgstr "oraintsuko zerbitzariaren konfigurazioaren ezarpenen ardura hartu?" #: js/settings.js:83 msgid "Keep settings?" @@ -88,224 +88,224 @@ msgstr "Abisua: PHPk behar duen LDAP modulua ez dago instalaturik, motorr msgid "Server configuration" msgstr "Zerbitzariaren konfigurazioa" -#: templates/settings.php:17 +#: templates/settings.php:18 msgid "Add Server Configuration" msgstr "Gehitu Zerbitzariaren Konfigurazioa" -#: templates/settings.php:21 +#: templates/settings.php:23 msgid "Host" msgstr "Hostalaria" -#: templates/settings.php:21 +#: templates/settings.php:25 msgid "" "You can omit the protocol, except you require SSL. Then start with ldaps://" msgstr "Protokoloa ez da beharrezkoa, SSL behar baldin ez baduzu. Honela bada hasi ldaps://" -#: templates/settings.php:22 +#: templates/settings.php:26 msgid "Base DN" msgstr "Oinarrizko DN" -#: templates/settings.php:22 +#: templates/settings.php:27 msgid "One Base DN per line" msgstr "DN Oinarri bat lerroko" -#: templates/settings.php:22 +#: templates/settings.php:28 msgid "You can specify Base DN for users and groups in the Advanced tab" msgstr "Erabiltzaile eta taldeentzako Oinarrizko DN zehaztu dezakezu Aurreratu fitxan" -#: templates/settings.php:23 +#: templates/settings.php:30 msgid "User DN" msgstr "Erabiltzaile DN" -#: templates/settings.php:23 +#: templates/settings.php:32 msgid "" "The DN of the client user with which the bind shall be done, e.g. " "uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password " "empty." msgstr "Lotura egingo den bezero erabiltzailearen DNa, adb. uid=agent,dc=example,dc=com. Sarrera anonimoak gaitzeko utzi DN eta Pasahitza hutsik." -#: templates/settings.php:24 +#: templates/settings.php:33 msgid "Password" msgstr "Pasahitza" -#: templates/settings.php:24 +#: templates/settings.php:36 msgid "For anonymous access, leave DN and Password empty." msgstr "Sarrera anonimoak gaitzeko utzi DN eta Pasahitza hutsik." -#: templates/settings.php:25 +#: templates/settings.php:37 msgid "User Login Filter" msgstr "Erabiltzaileen saioa hasteko iragazkia" -#: templates/settings.php:25 +#: templates/settings.php:40 #, php-format msgid "" "Defines the filter to apply, when login is attempted. %%uid replaces the " "username in the login action." msgstr "Saioa hastean erabiliko den iragazkia zehazten du. %%uid-ek erabiltzaile izena ordezkatzen du saioa hasterakoan." -#: templates/settings.php:25 +#: templates/settings.php:41 #, php-format msgid "use %%uid placeholder, e.g. \"uid=%%uid\"" msgstr "erabili %%uid txantiloia, adb. \"uid=%%uid\"" -#: templates/settings.php:26 +#: templates/settings.php:42 msgid "User List Filter" msgstr "Erabiltzaile zerrendaren Iragazkia" -#: templates/settings.php:26 +#: templates/settings.php:45 msgid "Defines the filter to apply, when retrieving users." msgstr "Erabiltzaileak jasotzen direnean ezarriko den iragazkia zehazten du." -#: templates/settings.php:26 +#: templates/settings.php:46 msgid "without any placeholder, e.g. \"objectClass=person\"." msgstr "txantiloirik gabe, adb. \"objectClass=person\"." -#: templates/settings.php:27 +#: templates/settings.php:47 msgid "Group Filter" msgstr "Taldeen iragazkia" -#: templates/settings.php:27 +#: templates/settings.php:50 msgid "Defines the filter to apply, when retrieving groups." msgstr "Taldeak jasotzen direnean ezarriko den iragazkia zehazten du." -#: templates/settings.php:27 +#: templates/settings.php:51 msgid "without any placeholder, e.g. \"objectClass=posixGroup\"." msgstr "txantiloirik gabe, adb. \"objectClass=posixGroup\"." -#: templates/settings.php:31 +#: templates/settings.php:55 msgid "Connection Settings" msgstr "Konexio Ezarpenak" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "Configuration Active" msgstr "Konfigurazio Aktiboa" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "When unchecked, this configuration will be skipped." msgstr "Markatuta ez dagoenean, konfigurazio hau ez da kontutan hartuko." -#: templates/settings.php:34 +#: templates/settings.php:58 msgid "Port" msgstr "Portua" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "Backup (Replica) Host" msgstr "Babeskopia (Replica) Ostalaria" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "" "Give an optional backup host. It must be a replica of the main LDAP/AD " "server." msgstr "Eman babeskopia ostalari gehigarri bat. LDAP/AD zerbitzari nagusiaren replica bat izan behar da." -#: templates/settings.php:36 +#: templates/settings.php:60 msgid "Backup (Replica) Port" msgstr "Babeskopia (Replica) Ataka" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "Disable Main Server" msgstr "Desgaitu Zerbitzari Nagusia" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "When switched on, ownCloud will only connect to the replica server." msgstr "Markatuta dagoenean, ownCloud bakarrik replica zerbitzarira konektatuko da." -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Use TLS" msgstr "Erabili TLS" -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Do not use it additionally for LDAPS connections, it will fail." msgstr "Ez erabili LDAPS konexioetarako, huts egingo du." -#: templates/settings.php:39 +#: templates/settings.php:63 msgid "Case insensitve LDAP server (Windows)" msgstr "Maiuskulak eta minuskulak ezberditzen ez dituen LDAP zerbitzaria (windows)" -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Turn off SSL certificate validation." msgstr "Ezgaitu SSL ziurtagirien egiaztapena." -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "" "If connection only works with this option, import the LDAP server's SSL " "certificate in your ownCloud server." msgstr "Konexioa aukera hau ezinbestekoa badu, inportatu LDAP zerbitzariaren SSL ziurtagiria zure ownCloud zerbitzarian." -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Not recommended, use for testing only." msgstr "Ez da aholkatzen, erabili bakarrik frogak egiteko." -#: templates/settings.php:41 +#: templates/settings.php:65 msgid "in seconds. A change empties the cache." msgstr "segundutan. Aldaketak katxea husten du." -#: templates/settings.php:43 +#: templates/settings.php:67 msgid "Directory Settings" msgstr "Karpetaren Ezarpenak" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "User Display Name Field" msgstr "Erabiltzaileen bistaratzeko izena duen eremua" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "The LDAP attribute to use to generate the user`s ownCloud name." msgstr "ownCloud erabiltzailearen izena sortzeko erabiliko den LDAP atributua" -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "Base User Tree" msgstr "Oinarrizko Erabiltzaile Zuhaitza" -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "One User Base DN per line" msgstr "Erabiltzaile DN Oinarri bat lerroko" -#: templates/settings.php:47 +#: templates/settings.php:71 msgid "User Search Attributes" msgstr "Erabili Bilaketa Atributuak " -#: templates/settings.php:47 templates/settings.php:50 +#: templates/settings.php:71 templates/settings.php:74 msgid "Optional; one attribute per line" msgstr "Aukerakoa; atributu bat lerro bakoitzeko" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "Group Display Name Field" msgstr "Taldeen bistaratzeko izena duen eremua" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "The LDAP attribute to use to generate the groups`s ownCloud name." msgstr "ownCloud taldearen izena sortzeko erabiliko den LDAP atributua" -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "Base Group Tree" msgstr "Oinarrizko Talde Zuhaitza" -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "One Group Base DN per line" msgstr "Talde DN Oinarri bat lerroko" -#: templates/settings.php:50 +#: templates/settings.php:74 msgid "Group Search Attributes" msgstr "Taldekatu Bilaketa Atributuak " -#: templates/settings.php:51 +#: templates/settings.php:75 msgid "Group-Member association" msgstr "Talde-Kide elkarketak" -#: templates/settings.php:53 +#: templates/settings.php:77 msgid "Special Attributes" msgstr "Atributu Bereziak" -#: templates/settings.php:56 +#: templates/settings.php:80 msgid "in bytes" msgstr "bytetan" -#: templates/settings.php:58 +#: templates/settings.php:82 msgid "" "Leave empty for user name (default). Otherwise, specify an LDAP/AD " "attribute." msgstr "Utzi hutsik erabiltzaile izenarako (lehentsia). Bestela zehaztu LDAP/AD atributua." -#: templates/settings.php:62 +#: templates/settings.php:86 msgid "Help" msgstr "Laguntza" diff --git a/l10n/gl/settings.po b/l10n/gl/settings.po index 0cfda98251..a05c2158b5 100644 --- a/l10n/gl/settings.po +++ b/l10n/gl/settings.po @@ -4,15 +4,17 @@ # # Translators: # antiparvos , 2012. +# , 2012-2013. # , 2013. # , 2012. +# Miguel Anxo Bouzada , 2013. # Xosé M. Lamas , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" -"PO-Revision-Date: 2013-02-14 09:10+0000\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 19:20+0000\n" "Last-Translator: mbouzada \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" @@ -32,7 +34,7 @@ msgstr "Produciuse un erro de autenticación" #: ajax/changedisplayname.php:32 msgid "Unable to change display name" -msgstr "" +msgstr "Non é posíbel cambiar o nome visíbel" #: ajax/creategroup.php:10 msgid "Group already exists" @@ -165,7 +167,7 @@ msgstr "Produciuse un erro ao crear o usuario" msgid "A valid password must be provided" msgstr "Debe fornecer un contrasinal" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "Galego" @@ -209,7 +211,7 @@ msgstr "Non se atopou o módulo de PHP «fileinfo». É recomendábel activar es #: templates/admin.php:58 msgid "Locale not working" -msgstr "" +msgstr "A configuración rexional non funciona" #: templates/admin.php:61 msgid "" @@ -217,11 +219,11 @@ msgid "" "\"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with" " certain characters in file names. We strongly suggest to install the " "required packages on your system to support en_US.UTF-8/en_US.UTF8." -msgstr "" +msgstr "Este servidor ownCloud non pode estabelecer a configuración rexional do sistema a «en_US.UTF-8\"/\"en_US.UTF8». Isto significa que poden xurdir problemas con certos caracteres nos nomes de ficheiro. Recomendámoslle que instale os paquetes necesarios no sistema para admitir en_US.UTF-8/en_US.UTF8." #: templates/admin.php:72 msgid "Internet connection not working" -msgstr "" +msgstr "A conexión á Internet non funciona" #: templates/admin.php:75 msgid "" @@ -231,11 +233,11 @@ msgid "" "remote and sending of notification emails might also not work. We suggest to" " enable internet connection for this server if you want to have all features" " of ownCloud." -msgstr "" +msgstr "Este servidor ownCloud non ten conexión a Internet. Isto significa que algunhas das funcionalidades como a montaxe de almacenamento externo, as notificacións sobre actualizacións ou instalación de aplicativos de terceiros non funcionan. O acceso aos ficheiros de forma remota e o envío de mensaxes de notificación poderían non funcionar. Suxerímoslle que active a conexión a Internet deste servidor se quere dispor de todas as funcionalidades de ownCloud." #: templates/admin.php:89 msgid "Cron" -msgstr "" +msgstr "Cron" #: templates/admin.php:98 msgid "Execute one task with each page loaded" @@ -245,13 +247,13 @@ msgstr "Executar unha tarefa con cada páxina cargada" msgid "" "cron.php is registered at a webcron service. Call the cron.php page in the " "owncloud root once a minute over http." -msgstr "" +msgstr "cron.php está rexistrado nun servizo de WebCron. Chame á página cron.php na raíz ownCloud unha vez por minuto a través de HTTP." #: templates/admin.php:118 msgid "" "Use systems cron service. Call the cron.php file in the owncloud folder via " "a system cronjob once a minute." -msgstr "" +msgstr "Use o servizo de sistema cron. Chame ao ficheiro cron.php no catfaol owncloud a través dun sistema de cronjob unna vez por minuto." #: templates/admin.php:125 msgid "Sharing" @@ -425,15 +427,15 @@ msgstr "Amosar o nome" #: templates/personal.php:55 msgid "Your display name was changed" -msgstr "" +msgstr "O seu nome visíbel foi cambiado" #: templates/personal.php:56 msgid "Unable to change your display name" -msgstr "" +msgstr "Non é posíbel cambiar o seu nome visíbel" #: templates/personal.php:59 msgid "Change display name" -msgstr "" +msgstr "Cambiar o nome visíbel" #: templates/personal.php:68 msgid "Email" @@ -489,7 +491,7 @@ msgstr "Almacenamento" #: templates/users.php:95 msgid "change display name" -msgstr "" +msgstr "cambiar o nome visíbel" #: templates/users.php:99 msgid "set new password" diff --git a/l10n/hu_HU/files.po b/l10n/hu_HU/files.po index ea2e55fc37..e9dbc61712 100644 --- a/l10n/hu_HU/files.po +++ b/l10n/hu_HU/files.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 08:50+0000\n" +"Last-Translator: Laszlo Tornoci \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -281,7 +281,7 @@ msgstr "Feltöltés linkről" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Törölt fájlok" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/ru/lib.po b/l10n/ru/lib.po index 48b7c38872..2ea6cd0776 100644 --- a/l10n/ru/lib.po +++ b/l10n/ru/lib.po @@ -10,13 +10,14 @@ # , 2012. # Sergey , 2013. # , 2012. +# Дмитрий , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:36+0000\n" -"Last-Translator: Denis \n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 20:30+0000\n" +"Last-Translator: Langaru \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,27 +25,27 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: app.php:339 +#: app.php:349 msgid "Help" msgstr "Помощь" -#: app.php:346 +#: app.php:362 msgid "Personal" msgstr "Личное" -#: app.php:351 +#: app.php:373 msgid "Settings" msgstr "Настройки" -#: app.php:356 +#: app.php:385 msgid "Users" msgstr "Пользователи" -#: app.php:363 +#: app.php:398 msgid "Apps" msgstr "Приложения" -#: app.php:365 +#: app.php:406 msgid "Admin" msgstr "Admin" @@ -56,15 +57,15 @@ msgstr "ZIP-скачивание отключено." msgid "Files need to be downloaded one by one." msgstr "Файлы должны быть загружены по одному." -#: files.php:203 files.php:228 +#: files.php:204 files.php:231 msgid "Back to Files" msgstr "Назад к файлам" -#: files.php:227 +#: files.php:228 msgid "Selected files too large to generate zip file." msgstr "Выбранные файлы слишком велики, чтобы создать zip файл." -#: helper.php:226 +#: helper.php:228 msgid "couldn't be determined" msgstr "Невозможно установить" @@ -107,24 +108,24 @@ msgstr "Указать папку данных." #: setup.php:53 #, php-format msgid "%s enter the database username." -msgstr "" +msgstr "%s введите имя пользователя базы данных." #: setup.php:56 #, php-format msgid "%s enter the database name." -msgstr "" +msgstr "%s введите имя базы данных." #: setup.php:59 #, php-format msgid "%s you may not use dots in the database name" -msgstr "" +msgstr "%s Вы не можете использовать точки в имени базы данных" #: setup.php:62 #, php-format msgid "%s set the database host." -msgstr "" +msgstr "%s задайте хост базы данных." -#: setup.php:126 setup.php:291 setup.php:336 +#: setup.php:126 setup.php:294 setup.php:339 msgid "PostgreSQL username and/or password not valid" msgstr "Неверное имя пользователя и/или пароль PostgreSQL" @@ -132,7 +133,7 @@ msgstr "Неверное имя пользователя и/или пароль msgid "You need to enter either an existing account or the administrator." msgstr "Вы должны войти или в существующий аккаунт или под администратором." -#: setup.php:149 setup.php:423 setup.php:489 +#: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" msgstr "Неверное имя пользователя и/или пароль Oracle" @@ -140,54 +141,54 @@ msgstr "Неверное имя пользователя и/или пароль msgid "MySQL username and/or password not valid" msgstr "Неверное имя пользователя и/или пароль MySQL" -#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 -#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 -#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 -#: setup.php:579 +#: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 +#: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 +#: setup.php:545 setup.php:552 setup.php:561 setup.php:569 setup.php:578 +#: setup.php:584 #, php-format msgid "DB Error: \"%s\"" msgstr "Ошибка БД: \"%s\"" -#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 -#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 -#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 +#: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 +#: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" -msgstr "" +msgstr "Вызываемая команда была: \"%s\"" -#: setup.php:270 +#: setup.php:273 #, php-format msgid "MySQL user '%s'@'localhost' exists already." msgstr "Пользователь MySQL '%s'@'localhost' уже существует." -#: setup.php:271 +#: setup.php:274 msgid "Drop this user from MySQL" msgstr "Удалить этого пользователя из MySQL" -#: setup.php:276 +#: setup.php:279 #, php-format msgid "MySQL user '%s'@'%%' already exists" msgstr "Пользователь MySQL '%s'@'%%' уже существует" -#: setup.php:277 +#: setup.php:280 msgid "Drop this user from MySQL." msgstr "Удалить этого пользователя из MySQL." -#: setup.php:548 setup.php:580 +#: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" -msgstr "" +msgstr "Вызываемая команда была: \"%s\", имя: %s, пароль: %s" -#: setup.php:644 +#: setup.php:649 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "Ваш веб сервер до сих пор не настроен правильно для возможности синхронизации файлов, похоже что проблема в неисправности интерфейса WebDAV." -#: setup.php:645 +#: setup.php:651 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Пожалуйста, дважды просмотрите инструкции по установке." #: template.php:113 msgid "seconds ago" @@ -241,16 +242,16 @@ msgstr "в прошлом году" msgid "years ago" msgstr "годы назад" -#: updater.php:75 +#: updater.php:78 #, php-format msgid "%s is available. Get more information" msgstr "Возможно обновление до %s. Подробнее" -#: updater.php:77 +#: updater.php:81 msgid "up to date" msgstr "актуальная версия" -#: updater.php:80 +#: updater.php:84 msgid "updates check is disabled" msgstr "проверка обновлений отключена" diff --git a/l10n/ru/settings.po b/l10n/ru/settings.po index 4374f73dfa..5686b6c766 100644 --- a/l10n/ru/settings.po +++ b/l10n/ru/settings.po @@ -22,8 +22,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 20:30+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" @@ -160,23 +160,23 @@ msgstr "Группа Администраторы" msgid "Delete" msgstr "Удалить" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" msgstr "" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" msgstr "" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" msgstr "" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" msgstr "" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "Русский " @@ -201,12 +201,12 @@ msgstr "" msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "Ваш веб сервер до сих пор не настроен правильно для возможности синхронизации файлов, похоже что проблема в неисправности интерфейса WebDAV." #: templates/admin.php:33 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Пожалуйста, дважды просмотрите инструкции по установке." #: templates/admin.php:44 msgid "Module 'fileinfo' missing" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index 50f1af05b6..50af374e0d 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-17 00:25+0100\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index 71954fdbcd..68faae5f7a 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index 0c073a307c..0e87a9cadf 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index 18b776ea2c..1c08282555 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,13 +41,13 @@ msgstr "" msgid "Error configuring Google Drive storage" msgstr "" -#: lib/config.php:413 +#: lib/config.php:418 msgid "" "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " "is not possible. Please ask your system administrator to install it." msgstr "" -#: lib/config.php:414 +#: lib/config.php:421 msgid "" "Warning: The FTP support in PHP is not enabled or installed. Mounting " "of FTP shares is not possible. Please ask your system administrator to " diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index 1d3b14bb15..035f07db37 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index 04f88ffe32..9ae14c07fb 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 2c0f327e1d..956fa27aa6 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 56633541bc..b7a4e24525 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-17 00:25+0100\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index ccb82adc96..f2ed4a30fd 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-17 00:25+0100\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index 139967bb8b..defbacb6a4 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,17 +21,17 @@ msgstr "" msgid "Failed to delete the server configuration" msgstr "" -#: ajax/testConfiguration.php:35 +#: ajax/testConfiguration.php:36 msgid "The configuration is valid and the connection could be established!" msgstr "" -#: ajax/testConfiguration.php:37 +#: ajax/testConfiguration.php:39 msgid "" "The configuration is valid, but the Bind failed. Please check the server " "settings and credentials." msgstr "" -#: ajax/testConfiguration.php:40 +#: ajax/testConfiguration.php:43 msgid "" "The configuration is invalid. Please look in the ownCloud log for further " "details." @@ -86,222 +86,222 @@ msgstr "" msgid "Server configuration" msgstr "" -#: templates/settings.php:17 +#: templates/settings.php:18 msgid "Add Server Configuration" msgstr "" -#: templates/settings.php:21 +#: templates/settings.php:23 msgid "Host" msgstr "" -#: templates/settings.php:21 +#: templates/settings.php:25 msgid "" "You can omit the protocol, except you require SSL. Then start with ldaps://" msgstr "" -#: templates/settings.php:22 +#: templates/settings.php:26 msgid "Base DN" msgstr "" -#: templates/settings.php:22 +#: templates/settings.php:27 msgid "One Base DN per line" msgstr "" -#: templates/settings.php:22 +#: templates/settings.php:28 msgid "You can specify Base DN for users and groups in the Advanced tab" msgstr "" -#: templates/settings.php:23 +#: templates/settings.php:30 msgid "User DN" msgstr "" -#: templates/settings.php:23 +#: templates/settings.php:32 msgid "" "The DN of the client user with which the bind shall be done, e.g. uid=agent," "dc=example,dc=com. For anonymous access, leave DN and Password empty." msgstr "" -#: templates/settings.php:24 +#: templates/settings.php:33 msgid "Password" msgstr "" -#: templates/settings.php:24 +#: templates/settings.php:36 msgid "For anonymous access, leave DN and Password empty." msgstr "" -#: templates/settings.php:25 +#: templates/settings.php:37 msgid "User Login Filter" msgstr "" -#: templates/settings.php:25 +#: templates/settings.php:40 #, php-format msgid "" "Defines the filter to apply, when login is attempted. %%uid replaces the " "username in the login action." msgstr "" -#: templates/settings.php:25 +#: templates/settings.php:41 #, php-format msgid "use %%uid placeholder, e.g. \"uid=%%uid\"" msgstr "" -#: templates/settings.php:26 +#: templates/settings.php:42 msgid "User List Filter" msgstr "" -#: templates/settings.php:26 +#: templates/settings.php:45 msgid "Defines the filter to apply, when retrieving users." msgstr "" -#: templates/settings.php:26 +#: templates/settings.php:46 msgid "without any placeholder, e.g. \"objectClass=person\"." msgstr "" -#: templates/settings.php:27 +#: templates/settings.php:47 msgid "Group Filter" msgstr "" -#: templates/settings.php:27 +#: templates/settings.php:50 msgid "Defines the filter to apply, when retrieving groups." msgstr "" -#: templates/settings.php:27 +#: templates/settings.php:51 msgid "without any placeholder, e.g. \"objectClass=posixGroup\"." msgstr "" -#: templates/settings.php:31 +#: templates/settings.php:55 msgid "Connection Settings" msgstr "" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "Configuration Active" msgstr "" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "When unchecked, this configuration will be skipped." msgstr "" -#: templates/settings.php:34 +#: templates/settings.php:58 msgid "Port" msgstr "" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "Backup (Replica) Host" msgstr "" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "" "Give an optional backup host. It must be a replica of the main LDAP/AD " "server." msgstr "" -#: templates/settings.php:36 +#: templates/settings.php:60 msgid "Backup (Replica) Port" msgstr "" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "Disable Main Server" msgstr "" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "When switched on, ownCloud will only connect to the replica server." msgstr "" -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Use TLS" msgstr "" -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Do not use it additionally for LDAPS connections, it will fail." msgstr "" -#: templates/settings.php:39 +#: templates/settings.php:63 msgid "Case insensitve LDAP server (Windows)" msgstr "" -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Turn off SSL certificate validation." msgstr "" -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "" "If connection only works with this option, import the LDAP server's SSL " "certificate in your ownCloud server." msgstr "" -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Not recommended, use for testing only." msgstr "" -#: templates/settings.php:41 +#: templates/settings.php:65 msgid "in seconds. A change empties the cache." msgstr "" -#: templates/settings.php:43 +#: templates/settings.php:67 msgid "Directory Settings" msgstr "" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "User Display Name Field" msgstr "" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "The LDAP attribute to use to generate the user`s ownCloud name." msgstr "" -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "Base User Tree" msgstr "" -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "One User Base DN per line" msgstr "" -#: templates/settings.php:47 +#: templates/settings.php:71 msgid "User Search Attributes" msgstr "" -#: templates/settings.php:47 templates/settings.php:50 +#: templates/settings.php:71 templates/settings.php:74 msgid "Optional; one attribute per line" msgstr "" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "Group Display Name Field" msgstr "" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "The LDAP attribute to use to generate the groups`s ownCloud name." msgstr "" -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "Base Group Tree" msgstr "" -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "One Group Base DN per line" msgstr "" -#: templates/settings.php:50 +#: templates/settings.php:74 msgid "Group Search Attributes" msgstr "" -#: templates/settings.php:51 +#: templates/settings.php:75 msgid "Group-Member association" msgstr "" -#: templates/settings.php:53 +#: templates/settings.php:77 msgid "Special Attributes" msgstr "" -#: templates/settings.php:56 +#: templates/settings.php:80 msgid "in bytes" msgstr "" -#: templates/settings.php:58 +#: templates/settings.php:82 msgid "" "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." msgstr "" -#: templates/settings.php:62 +#: templates/settings.php:86 msgid "Help" msgstr "" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index 419f2f574c..cd7a57253e 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-17 00:24+0100\n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/zh_TW/settings.po b/l10n/zh_TW/settings.po index 2962f45fcb..6f13ba5136 100644 --- a/l10n/zh_TW/settings.po +++ b/l10n/zh_TW/settings.po @@ -8,6 +8,7 @@ # , 2013. # Pellaeon Lin , 2013. # , 2012. +# , 2013. # , 2012. # , 2012. # ywang , 2012. @@ -15,9 +16,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"PO-Revision-Date: 2013-02-17 14:00+0000\n" +"Last-Translator: ronnietse \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -130,7 +131,7 @@ msgstr "儲存中..." #: js/users.js:30 msgid "deleted" -msgstr "" +msgstr "已刪除" #: js/users.js:30 msgid "undo" @@ -138,7 +139,7 @@ msgstr "復原" #: js/users.js:62 msgid "Unable to remove user" -msgstr "" +msgstr "無法刪除用戶" #: js/users.js:75 templates/users.php:26 templates/users.php:80 #: templates/users.php:105 @@ -153,23 +154,23 @@ msgstr "群組 管理員" msgid "Delete" msgstr "刪除" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" -msgstr "" +msgstr "新增群組" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" msgstr "" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" msgstr "" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" msgstr "" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "__語言_名稱__" diff --git a/lib/l10n/de.php b/lib/l10n/de.php index f65ee5cfa3..0ad254ad84 100644 --- a/lib/l10n/de.php +++ b/lib/l10n/de.php @@ -24,7 +24,7 @@ "%s you may not use dots in the database name" => "%s Der Datenbank-Name darf keine Punkte enthalten", "%s set the database host." => "%s setze den Datenbank-Host", "PostgreSQL username and/or password not valid" => "PostgreSQL Benutzername und/oder Passwort ungültig", -"You need to enter either an existing account or the administrator." => "Sie müssen entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben.", +"You need to enter either an existing account or the administrator." => "Du musst entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben.", "Oracle username and/or password not valid" => "Oracle Benutzername und/oder Passwort ungültig", "MySQL username and/or password not valid" => "MySQL Benutzername und/oder Passwort ungültig", "DB Error: \"%s\"" => "DB Fehler: \"%s\"", @@ -35,7 +35,7 @@ "Drop this user from MySQL." => "Lösche diesen Benutzer von MySQL.", "Offending command was: \"%s\", name: %s, password: %s" => "Fehlerhafter Befehl war: \"%s\", Name: %s, Passwort: %s", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Dein Web-Server ist noch nicht für Datei-Synchronisation bereit, weil die WebDAV-Schnittstelle vermutlich defekt ist.", -"Please double check the installation guides." => "Bitte prüfen Sie die Instalationsanleitungen.", +"Please double check the installation guides." => "Bitte prüfe die Instalationsanleitungen.", "seconds ago" => "Gerade eben", "1 minute ago" => "Vor einer Minute", "%d minutes ago" => "Vor %d Minuten", diff --git a/lib/l10n/el.php b/lib/l10n/el.php index cf0be24b43..e2e86edc4d 100644 --- a/lib/l10n/el.php +++ b/lib/l10n/el.php @@ -16,6 +16,19 @@ "Files" => "Αρχεία", "Text" => "Κείμενο", "Images" => "Εικόνες", +"Set an admin username." => "Εισάγετε όνομα χρήστη διαχειριστή.", +"Set an admin password." => "Εισάγετε συνθηματικό διαχειριστή.", +"Specify a data folder." => "Καθορίστε τον φάκελο δεδομένων.", +"PostgreSQL username and/or password not valid" => "Μη έγκυρος χρήστης και/ή συνθηματικό της PostgreSQL", +"Oracle username and/or password not valid" => "Μη έγκυρος χρήστης και/ή συνθηματικό της Oracle", +"MySQL username and/or password not valid" => "Μη έγκυρος χρήστης και/ή συνθηματικό της MySQL", +"DB Error: \"%s\"" => "Σφάλμα Βάσης Δεδομένων: \"%s\"", +"MySQL user '%s'@'localhost' exists already." => "Υπάρχει ήδη ο χρήστης '%s'@'localhost' της MySQL.", +"Drop this user from MySQL" => "Απόρριψη αυτού του χρήστη από την MySQL", +"MySQL user '%s'@'%%' already exists" => "Ο χρήστης '%s'@'%%' της MySQL υπάρχει ήδη", +"Drop this user from MySQL." => "Απόρριψη αυτού του χρήστη από την MySQL", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων γιατί η διεπαφή WebDAV πιθανόν να είναι κατεστραμμένη.", +"Please double check the installation guides." => "Ελέγξτε ξανά τις οδηγίες εγκατάστασης.", "seconds ago" => "δευτερόλεπτα πριν", "1 minute ago" => "1 λεπτό πριν", "%d minutes ago" => "%d λεπτά πριν", diff --git a/lib/l10n/ru.php b/lib/l10n/ru.php index c0ffcd6806..7f1111376e 100644 --- a/lib/l10n/ru.php +++ b/lib/l10n/ru.php @@ -19,15 +19,23 @@ "Set an admin username." => "Установить имя пользователя для admin.", "Set an admin password." => "становит пароль для admin.", "Specify a data folder." => "Указать папку данных.", +"%s enter the database username." => "%s введите имя пользователя базы данных.", +"%s enter the database name." => "%s введите имя базы данных.", +"%s you may not use dots in the database name" => "%s Вы не можете использовать точки в имени базы данных", +"%s set the database host." => "%s задайте хост базы данных.", "PostgreSQL username and/or password not valid" => "Неверное имя пользователя и/или пароль PostgreSQL", "You need to enter either an existing account or the administrator." => "Вы должны войти или в существующий аккаунт или под администратором.", "Oracle username and/or password not valid" => "Неверное имя пользователя и/или пароль Oracle", "MySQL username and/or password not valid" => "Неверное имя пользователя и/или пароль MySQL", "DB Error: \"%s\"" => "Ошибка БД: \"%s\"", +"Offending command was: \"%s\"" => "Вызываемая команда была: \"%s\"", "MySQL user '%s'@'localhost' exists already." => "Пользователь MySQL '%s'@'localhost' уже существует.", "Drop this user from MySQL" => "Удалить этого пользователя из MySQL", "MySQL user '%s'@'%%' already exists" => "Пользователь MySQL '%s'@'%%' уже существует", "Drop this user from MySQL." => "Удалить этого пользователя из MySQL.", +"Offending command was: \"%s\", name: %s, password: %s" => "Вызываемая команда была: \"%s\", имя: %s, пароль: %s", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ваш веб сервер до сих пор не настроен правильно для возможности синхронизации файлов, похоже что проблема в неисправности интерфейса WebDAV.", +"Please double check the installation guides." => "Пожалуйста, дважды просмотрите инструкции по установке.", "seconds ago" => "менее минуты", "1 minute ago" => "1 минуту назад", "%d minutes ago" => "%d минут назад", diff --git a/settings/l10n/de_DE.php b/settings/l10n/de_DE.php index b97dfdc38b..8ceb90dd76 100644 --- a/settings/l10n/de_DE.php +++ b/settings/l10n/de_DE.php @@ -37,19 +37,28 @@ "__language_name__" => "Deutsch (Förmlich: Sie)", "Security Warning" => "Sicherheitshinweis", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich über das Internet erreichbar. Die von ownCloud bereitgestellte .htaccess Datei funktioniert nicht. Wir empfehlen Ihnen dringend, Ihren Webserver so zu konfigurieren, dass das Datenverzeichnis nicht mehr über das Internet erreichbar ist. Alternativ können Sie auch das Datenverzeichnis aus dem Dokumentenverzeichnis des Webservers verschieben.", +"Setup Warning" => "Einrichtungswarnung", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ihr Web-Server ist noch nicht konfiguriert noch nicht für Datei-Synchronisation bereit weil die WebDAV-Schnittstelle vermutlich defekt ist.", "Please double check the installation guides." => "Bitte prüfen Sie die Instalationsanleitungen.", "Module 'fileinfo' missing" => "Das Modul 'fileinfo' fehlt", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen Ihnen dieses Modul zu aktivieren um die besten Resultate bei der Bestimmung der Dateitypen zu erzielen.", "Locale not working" => "Lokalisierung funktioniert nicht", +"This ownCloud server can't set system locale to \"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8/en_US.UTF8." => "Dieser ownCloud Server kann die Ländereinstellung nicht auf \"de_DE.UTF-8\"/\"de_DE.UTF8\" ändern. Dies bedeutet dass es Probleme mit bestimmten Zeichen in Dateinamen geben könnte. Wir empfehlen die für de_DE.UTF-8/de_DE.UTF8 benötigten Pakete auf ihrem System zu installieren.", +"Internet connection not working" => "Keine Netzwerkverbindung", +"This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "Dieser ownCloud Server hat keine funktionierende Netzwerkverbindung. Dies bedeutet das einige Funktionen wie das einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Netzwerkverbindung für diesen Server zu aktivieren wenn Sie alle Funktionen von ownCloud nutzen wollen.", "Cron" => "Cron", "Execute one task with each page loaded" => "Führe eine Aufgabe bei jedem Laden der Seite aus", +"cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http." => "cron.php ist bei einem Webcron-Service registriert. Die cron.php Seite im ownCloud Wurzelverzeichniss wird einmal pro Minute über http abgerufen.", +"Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "Nutze den Cron Systemdienst. Rufe die Datei cron.php im ownCloud Ordner einmal pro Minute über einen Cronjob auf.", "Sharing" => "Teilen", "Enable Share API" => "Teilen-API aktivieren", "Allow apps to use the Share API" => "Erlaube es Anwendungen, die Teilen-API zu benutzen", "Allow links" => "Links erlauben", "Allow users to share items to the public with links" => "Erlaube es Benutzern, Items per öffentlichem Link zu teilen", -"Allow resharing" => "Erlaube weiterteilen", +"Allow resharing" => "Erlaube weiterverteilen", +"Allow users to share items shared with them again" => "Erlaubt Nutzern mit ihnen geteilte Inhalte erneut zu teilen", +"Allow users to share with anyone" => "Erlaube Nutzern mit jedem zu teilen", +"Allow users to only share with users in their groups" => "Erlaube Nutzern nur mit Nutzern in ihrer Gruppe zu teilen", "Security" => "Sicherheit", "Enforce HTTPS" => "HTTPS erzwingen", "Enforces the clients to connect to ownCloud via an encrypted connection." => "Zwingt die Clients, sich über eine verschlüsselte Verbindung mit ownCloud zu verbinden.", diff --git a/settings/l10n/el.php b/settings/l10n/el.php index 66d9d92ca3..1841793528 100644 --- a/settings/l10n/el.php +++ b/settings/l10n/el.php @@ -13,18 +13,32 @@ "Admins can't remove themself from the admin group" => "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών", "Unable to add user to group %s" => "Αδυναμία προσθήκη χρήστη στην ομάδα %s", "Unable to remove user from group %s" => "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s", +"Couldn't update app." => "Αδυναμία ενημέρωσης εφαρμογής", "Disable" => "Απενεργοποίηση", "Enable" => "Ενεργοποίηση", +"Please wait...." => "Παρακαλώ περιμένετε...", +"Updating...." => "Ενημέρωση...", +"Error while updating app" => "Σφάλμα κατά την ενημέρωση της εφαρμογής", "Error" => "Σφάλμα", +"Updated" => "Ενημερώθηκε", "Saving..." => "Αποθήκευση...", "deleted" => "διαγράφηκε", "undo" => "αναίρεση", +"Unable to remove user" => "Αδυναμία αφαίρεση χρήστη", "Groups" => "Ομάδες", "Group Admin" => "Ομάδα Διαχειριστών", "Delete" => "Διαγραφή", +"add group" => "προσθήκη ομάδας", +"Error creating user" => "Σφάλμα δημιουργίας χρήστη", "__language_name__" => "__όνομα_γλώσσας__", "Security Warning" => "Προειδοποίηση Ασφαλείας", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Ο κατάλογος data και τα αρχεία σας πιθανόν να είναι διαθέσιμα στο διαδίκτυο. Το αρχείο .htaccess που παρέχει το ownCloud δεν δουλεύει. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος data να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο data έξω από τον κατάλογο του διακομιστή.", +"Setup Warning" => "Ρύθμιση Προειδοποίησης", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων γιατί η διεπαφή WebDAV πιθανόν να είναι κατεστραμμένη.", +"Please double check the installation guides." => "Ελέγξτε ξανά τις οδηγίες εγκατάστασης.", +"Cron" => "Cron", +"Security" => "Ασφάλεια", +"Log" => "Καταγραφές", "More" => "Περισσότερα", "Version" => "Έκδοση", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Αναπτύχθηκε από την κοινότητα ownCloud, ο πηγαίος κώδικας είναι υπό άδεια χρήσης AGPL.", @@ -41,6 +55,7 @@ "Bugtracker" => "Bugtracker", "Commercial Support" => "Εμπορική Υποστήριξη", "You have used %s of the available %s" => "Χρησιμοποιήσατε %s από διαθέσιμα %s", +"Get the apps to sync your files" => "Λήψη της εφαρμογής για συγχρονισμό των αρχείων σας", "Show First Run Wizard again" => "Προβολή Πρώτης Εκτέλεσης Οδηγού πάλι", "Password" => "Συνθηματικό", "Your password was changed" => "Το συνθηματικό σας έχει αλλάξει", diff --git a/settings/l10n/eu.php b/settings/l10n/eu.php index 94c9fe55e2..105e2aa92a 100644 --- a/settings/l10n/eu.php +++ b/settings/l10n/eu.php @@ -43,6 +43,7 @@ "Module 'fileinfo' missing" => "'fileinfo' Modulua falta da", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "PHP 'fileinfo' modulua falta da. Modulu hau gaitzea aholkatzen dizugu mime-type ezberdinak hobe detektatzeko.", "Locale not working" => "Lokala ez dabil", +"This ownCloud server can't set system locale to \"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8/en_US.UTF8." => "OwnClud zerbitzari honek ezin du sistemaren lokala \"en_US.UTF-8\"/\"en.US.UTF-8\" ezarri. Honek esan nahi du fitxategi izen batzuekin arazoak egon daitezkeela. Aholkatzen dugu zure sistemak en_US.UTF-8/en_US.UTF8 lokala onartzeko behar diren paketeak instala ditzazun.", "Internet connection not working" => "Interneteko konexioak ez du funtzionatzen", "This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "ownCloud zerbitzari honen interneteko konexioa ez dabil. Honek esan nahi du kanpoko biltegiratze zerbitzuak, eguneraketen informazioa edo bestelako aplikazioen instalazioa bezalako programek ez dutela funtzionatuko. Urrunetik fitxategiak eskuratzea eta e-postak bidaltzea ere ezinezkoa izan daiteke. onwCloud-en aukera guztiak erabili ahal izateko zerbitzari honetan interneteko konexioa gaitzea aholkatzen dizugu.", "Cron" => "Cron", diff --git a/settings/l10n/gl.php b/settings/l10n/gl.php index 6452a75f6c..f6b0943c53 100644 --- a/settings/l10n/gl.php +++ b/settings/l10n/gl.php @@ -1,6 +1,7 @@ "Non foi posíbel cargar a lista desde a App Store", "Authentication error" => "Produciuse un erro de autenticación", +"Unable to change display name" => "Non é posíbel cambiar o nome visíbel", "Group already exists" => "O grupo xa existe", "Unable to add group" => "Non é posíbel engadir o grupo", "Could not enable app. " => "Non é posíbel activar o aplicativo.", @@ -41,7 +42,14 @@ "Please double check the installation guides." => "Volva comprobar as guías de instalación", "Module 'fileinfo' missing" => "Non se atopou o módulo «fileinfo»", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "Non se atopou o módulo de PHP «fileinfo». É recomendábel activar este módulo para obter os mellores resultados coa detección do tipo MIME.", +"Locale not working" => "A configuración rexional non funciona", +"This ownCloud server can't set system locale to \"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8/en_US.UTF8." => "Este servidor ownCloud non pode estabelecer a configuración rexional do sistema a «en_US.UTF-8\"/\"en_US.UTF8». Isto significa que poden xurdir problemas con certos caracteres nos nomes de ficheiro. Recomendámoslle que instale os paquetes necesarios no sistema para admitir en_US.UTF-8/en_US.UTF8.", +"Internet connection not working" => "A conexión á Internet non funciona", +"This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "Este servidor ownCloud non ten conexión a Internet. Isto significa que algunhas das funcionalidades como a montaxe de almacenamento externo, as notificacións sobre actualizacións ou instalación de aplicativos de terceiros non funcionan. O acceso aos ficheiros de forma remota e o envío de mensaxes de notificación poderían non funcionar. Suxerímoslle que active a conexión a Internet deste servidor se quere dispor de todas as funcionalidades de ownCloud.", +"Cron" => "Cron", "Execute one task with each page loaded" => "Executar unha tarefa con cada páxina cargada", +"cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http." => "cron.php está rexistrado nun servizo de WebCron. Chame á página cron.php na raíz ownCloud unha vez por minuto a través de HTTP.", +"Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "Use o servizo de sistema cron. Chame ao ficheiro cron.php no catfaol owncloud a través dun sistema de cronjob unna vez por minuto.", "Sharing" => "Compartindo", "Enable Share API" => "Activar o API para compartir", "Allow apps to use the Share API" => "Permitir que os aplicativos empreguen o API para compartir", @@ -82,6 +90,9 @@ "New password" => "Novo contrasinal", "Change password" => "Cambiar o contrasinal", "Display Name" => "Amosar o nome", +"Your display name was changed" => "O seu nome visíbel foi cambiado", +"Unable to change your display name" => "Non é posíbel cambiar o seu nome visíbel", +"Change display name" => "Cambiar o nome visíbel", "Email" => "Correo", "Your email address" => "O seu enderezo de correo", "Fill in an email address to enable password recovery" => "Escriba un enderezo de correo para activar a recuperación do contrasinal", @@ -95,6 +106,7 @@ "Unlimited" => "Sen límites", "Other" => "Outro", "Storage" => "Almacenamento", +"change display name" => "cambiar o nome visíbel", "set new password" => "estabelecer un novo contrasinal", "Default" => "Predeterminado" ); diff --git a/settings/l10n/ru.php b/settings/l10n/ru.php index 393993fa61..e597809e98 100644 --- a/settings/l10n/ru.php +++ b/settings/l10n/ru.php @@ -32,6 +32,8 @@ "__language_name__" => "Русский ", "Security Warning" => "Предупреждение безопасности", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Ваши каталоги данных и файлы, вероятно, доступны из Интернета. Файл .htaccess, предоставляемый ownCloud, не работает. Мы настоятельно рекомендуем Вам настроить вебсервер таким образом, чтобы каталоги данных больше не были доступны, или переместить их за пределы корневого каталога документов веб-сервера.", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ваш веб сервер до сих пор не настроен правильно для возможности синхронизации файлов, похоже что проблема в неисправности интерфейса WebDAV.", +"Please double check the installation guides." => "Пожалуйста, дважды просмотрите инструкции по установке.", "More" => "Больше", "Version" => "Версия", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Разрабатывается сообществом ownCloud, исходный код доступен под лицензией AGPL.", diff --git a/settings/l10n/zh_TW.php b/settings/l10n/zh_TW.php index 88eb956fe8..0b9d2d3d02 100644 --- a/settings/l10n/zh_TW.php +++ b/settings/l10n/zh_TW.php @@ -24,10 +24,13 @@ "Error" => "錯誤", "Updated" => "已更新", "Saving..." => "儲存中...", +"deleted" => "已刪除", "undo" => "復原", +"Unable to remove user" => "無法刪除用戶", "Groups" => "群組", "Group Admin" => "群組 管理員", "Delete" => "刪除", +"add group" => "新增群組", "__language_name__" => "__語言_名稱__", "Security Warning" => "安全性警告", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "您的資料目錄 (Data Directory) 和檔案可能可以由網際網路上面公開存取。Owncloud 所提供的 .htaccess 設定檔並未生效,我們強烈建議您設定您的網頁伺服器以防止資料目錄被公開存取,或將您的資料目錄移出網頁伺服器的 document root 。", From a984a27fa09adf24e6b846ec3e412b8d7d95e532 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 18 Feb 2013 08:04:35 +0100 Subject: [PATCH 283/719] Sanitize user input --- settings/js/users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/js/users.js b/settings/js/users.js index 086b0884a3..63a6204983 100644 --- a/settings/js/users.js +++ b/settings/js/users.js @@ -182,7 +182,7 @@ var UserList = { var addGroup = function (select, group) { $('select[multiple]').each(function (index, element) { if ($(element).find('option[value="' + group + '"]').length === 0 && select.data('msid') !== $(element).data('msid')) { - $(element).append(''); + $(element).append(''); } }) }; From 79284b8e574a21fae21ca68b9863f3205200333a Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 18 Feb 2013 08:11:59 +0100 Subject: [PATCH 284/719] Sanitize HTML --- apps/files_external/templates/settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index d7a4dd5150..3709fd2e51 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -18,7 +18,7 @@ $mount): ?>
    From efa024cc62a7a587ddb493287f0d8554c2342338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Mon, 18 Feb 2013 11:19:40 +0100 Subject: [PATCH 285/719] fix getUidAndFilename() function --- apps/files_versions/appinfo/app.php | 2 +- apps/files_versions/lib/versions.php | 67 +++++++++------------------- 2 files changed, 23 insertions(+), 46 deletions(-) diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php index f7c6989ce2..1fa63ced5e 100644 --- a/apps/files_versions/appinfo/app.php +++ b/apps/files_versions/appinfo/app.php @@ -12,5 +12,5 @@ OCP\Util::addscript('files_versions', 'versions'); // Listen to write signals OCP\Util::connectHook('OC_Filesystem', 'write', "OCA\Files_Versions\Hooks", "write_hook"); // Listen to delete and rename signals -OCP\Util::connectHook('OC_Filesystem', 'post-delete', "OCA\Files_Versions\Hooks", "remove_hook"); +OCP\Util::connectHook('OC_Filesystem', 'post_delete', "OCA\Files_Versions\Hooks", "remove_hook"); OCP\Util::connectHook('OC_Filesystem', 'rename', "OCA\Files_Versions\Hooks", "rename_hook"); diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php index c537fcf351..1e9dc0a92a 100644 --- a/apps/files_versions/lib/versions.php +++ b/apps/files_versions/lib/versions.php @@ -35,48 +35,26 @@ class Storage { 'step' => 604800), ); - private static function getUidAndFilename($filename) - { - if (\OCP\App::isEnabled('files_sharing') - && substr($filename, 0, 7) == '/Shared' - && $source = \OCP\Share::getItemSharedWith('file', - substr($filename, 7), - \OC_Share_Backend_File::FORMAT_SHARED_STORAGE)) { - $filename = $source['path']; - $pos = strpos($filename, '/files', 1); - $uid = substr($filename, 1, $pos - 1); - $filename = substr($filename, $pos + 6); - } else { - $uid = \OCP\User::getUser(); + private static function getUidAndFilename($filename) { + $uid = \OC\Files\Filesystem::getOwner($filename); + if ( $uid != \OCP\User::getUser() ) { + $info = \OC\Files\Filesystem::getFileInfo($filename); + $ownerView = new \OC\Files\View('/'.$uid.'/files'); + $filename = $ownerView->getPath($info['fileid']); } return array($uid, $filename); } - + /** * store a new version of a file. */ public static function store($filename) { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { - $owner = \OC\Files\Filesystem::getOwner($filename); - if ( $owner != \OCP\User::getUser() ) { - $datadir = \OC_Config::getValue( "datadirectory", \OC::$SERVERROOT."/data" ); - \OC\Files\Filesystem::mount( '\OC\Files\Storage\Local', array('datadir'=>$datadir), '/'.$owner ); - $info = \OC\Files\Filesystem::getFileInfo($filename); - $id = $info['fileid']; - error_log("id: $id"); - $path = \OC\Files\Filesystem::getPath($id); - error_log("new path: $path"); - } + list($uid, $filename) = self::getUidAndFilename($filename); $files_view = new \OC\Files\View('/'.$uid .'/files'); $users_view = new \OC\Files\View('/'.$uid); - //check if source file already exist as version to avoid recursions. - // todo does this check work? - if ($users_view->file_exists($filename)) { - return false; - } - // check if filename is a directory if($files_view->is_dir($filename)) { return false; @@ -116,10 +94,10 @@ class Storage { */ public static function delete($filename) { list($uid, $filename) = self::getUidAndFilename($filename); - $versions_fileview = new \OC_FilesystemView('/'.$uid .'/files_versions'); + $versions_fileview = new \OC\Files\View('/'.$uid .'/files_versions'); $abs_path = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$filename.'.v'; - if( ($versions = self::getVersions($filename)) ) { + if( ($versions = self::getVersions($uid, $filename)) ) { if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) { $versionsSize = self::calculateSize($uid); } @@ -137,16 +115,15 @@ class Storage { public static function rename($oldpath, $newpath) { list($uid, $oldpath) = self::getUidAndFilename($oldpath); list($uidn, $newpath) = self::getUidAndFilename($newpath); - $versions_view = new \OC_FilesystemView('/'.$uid .'/files_versions'); - $files_view = new \OC_FilesystemView('/'.$uid .'/files'); + $versions_view = new \OC\Files\View('/'.$uid .'/files_versions'); + $files_view = new \OC\Files\View('/'.$uid .'/files'); $abs_newpath = \OCP\Config::getSystemValue('datadirectory').$versions_view->getAbsolutePath('').$newpath; if ( $files_view->is_dir($oldpath) && $versions_view->is_dir($oldpath) ) { $versions_view->rename($oldpath, $newpath); - } else if ( ($versions = Storage::getVersions($oldpath)) ) { + } else if ( ($versions = Storage::getVersions($uid, $oldpath)) ) { $info=pathinfo($abs_newpath); if(!file_exists($info['dirname'])) mkdir($info['dirname'], 0750, true); - $versions = Storage::getVersions($oldpath); foreach ($versions as $v) { $versions_view->rename($oldpath.'.v'.$v['version'], $newpath.'.v'.$v['version']); } @@ -187,14 +164,14 @@ class Storage { /** * @brief get a list of all available versions of a file in descending chronological order + * @param $uid user id from the owner of the file * @param $filename file to find versions of, relative to the user files dir * @param $count number of versions to return * @returns array */ - public static function getVersions( $filename, $count = 0 ) { + public static function getVersions($uid, $filename, $count = 0 ) { if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) { - list($uid, $filename) = self::getUidAndFilename($filename); - $versions_fileview = new \OC\Files\View('/' . \OCP\User::getUser() . '/files_versions'); + $versions_fileview = new \OC\Files\View('/' . $uid . '/files_versions'); $versionsName = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath($filename); $versions = array(); @@ -203,7 +180,7 @@ class Storage { sort( $matches ); - $files_view = new \OC_FilesystemView('/'.$uid.'/files'); + $files_view = new \OC\Files\View('/'.$uid.'/files'); $local_file = $files_view->getLocalFile($filename); $local_file_md5 = \md5_file( $local_file ); @@ -254,7 +231,7 @@ class Storage { */ private static function calculateSize($uid) { if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) { - $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions'); + $versions_fileview = new \OC\Files\View('/'.$uid.'/files_versions'); $versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath(''); $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST); @@ -279,7 +256,7 @@ class Storage { */ private static function getAllVersions($uid) { if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) { - $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions'); + $versions_fileview = new \OC\Files\View('/'.$uid.'/files_versions'); $versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath(''); $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST); @@ -325,7 +302,7 @@ class Storage { private static function expire($filename, $versionsSize = null) { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { list($uid, $filename) = self::getUidAndFilename($filename); - $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions'); + $versions_fileview = new \OC\Files\View('/'.$uid.'/files_versions'); // get available disk space for user $quota = \OCP\Util::computerFileSize(\OC_Preferences::getValue($uid, 'files', 'quota')); @@ -344,7 +321,7 @@ class Storage { } // calculate available space for version history - $files_view = new \OC_FilesystemView('/'.$uid.'/files'); + $files_view = new \OC\Files\View('/'.$uid.'/files'); $rootInfo = $files_view->getFileInfo('/'); $free = $quota-$rootInfo['size']; // remaining free space for user if ( $free > 0 ) { @@ -360,7 +337,7 @@ class Storage { $versions_by_file = $result['by_file']; $all_versions = $result['all']; } else { - $all_versions = Storage::getVersions($filename); + $all_versions = Storage::getVersions($uid, $filename); $versions_by_file[$filename] = $all_versions; } From fde0a8b520203aee9800959847ff3bf4ec53250f Mon Sep 17 00:00:00 2001 From: VicDeo Date: Mon, 18 Feb 2013 13:22:43 +0300 Subject: [PATCH 286/719] Add Ability to the app to detect more details on the file --- apps/files/js/files.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 918182162d..8327460cca 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -162,9 +162,10 @@ $(document).ready(function() { var tr=$('tr').filterAttr('data-file',filename); var renaming=tr.data('renaming'); if(!renaming && !FileList.isLoading(filename)){ - var mime=$(this).parent().parent().data('mime'); - var type=$(this).parent().parent().data('type'); - var permissions = $(this).parent().parent().data('permissions'); + FileActions.currentFile = $(this).parent(); + var mime=FileActions.getCurrentMimeType(); + var type=FileActions.getCurrentType(); + var permissions = FileActions.getCurrentPermissions(); var action=FileActions.getDefault(mime,type, permissions); if(action){ event.preventDefault(); From 4a3374ecf86d21b5769eeae26b32a151025f2584 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Mon, 18 Feb 2013 14:38:29 +0100 Subject: [PATCH 287/719] fix redirect, use the new routing --- apps/files_external/ajax/addRootCertificate.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_external/ajax/addRootCertificate.php b/apps/files_external/ajax/addRootCertificate.php index 7794238ab3..43fd6752c4 100644 --- a/apps/files_external/ajax/addRootCertificate.php +++ b/apps/files_external/ajax/addRootCertificate.php @@ -37,5 +37,5 @@ if ( $isValid ) { OCP\Util::WARN); } -header('Location: settings/personal.php'); +header('Location:' . OCP\Util::linkToRoute( "settings_personal" )); exit; From c0ac98066e717ac8dba98df5bbfe881c9b344495 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Mon, 18 Feb 2013 09:49:50 -0500 Subject: [PATCH 288/719] check filename and timestamp in Trashbin's file_exists method --- apps/files_trashbin/lib/trash.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index 8cb44d0a68..a948b47e0a 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -249,13 +249,21 @@ class Trashbin { /** * check to see whether a file exists in trashbin - * @param $file path to the file to check + * @param $filename path to the file + * @param $timestamp of deletion time * @return true if file exists, otherwise false */ - public static function file_exists($file) { + public static function file_exists($filename, $timestamp=null) { $user = \OCP\User::getUser(); $view = new \OC_FilesystemView('/'.$user); - $target = \OC_Filesystem::normalizePath('files_trashbin/'.$file); + + if ($timestamp) { + $filename = $filename.'.d'.$timestamp; + } else { + $filename = $filename; + } + + $target = \OC_Filesystem::normalizePath('files_trashbin/'.$filename); return $view->file_exists($target); } From 37352bba96033069107ca791b10b71c9505ca5d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Mon, 18 Feb 2013 18:16:19 +0100 Subject: [PATCH 289/719] close file handler after readdir() --- apps/files_trashbin/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php index a2d4cc0a44..5d6b5d94e5 100644 --- a/apps/files_trashbin/index.php +++ b/apps/files_trashbin/index.php @@ -37,7 +37,7 @@ if ($dir) { ); } } - closedir($fullpath); + closedir($dirContent); } else { $dirlisting = false; From c5f6a77dbd4480874a1907dec1ad222e03713b22 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Mon, 18 Feb 2013 21:15:32 +0300 Subject: [PATCH 290/719] Correct new password input name --- settings/templates/personal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/templates/personal.php b/settings/templates/personal.php index 6b3e8acbf0..6e9ad5e1ac 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -37,7 +37,7 @@ if($_['passwordChangeSupported']) {
    t('Your password was changed');?>
    t('Unable to change your password');?>
    - + From 06dbcec5a17691d7d31e52cabba94316f040f13b Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Mon, 18 Feb 2013 21:20:48 +0300 Subject: [PATCH 291/719] Do not set password if it has't provided --- settings/ajax/changepassword.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php index ceb4bbeecb..1fc6d0e100 100644 --- a/settings/ajax/changepassword.php +++ b/settings/ajax/changepassword.php @@ -8,7 +8,7 @@ OC_JSON::checkLoggedIn(); OC_APP::loadApps(); $username = isset($_POST["username"]) ? $_POST["username"] : OC_User::getUser(); -$password = $_POST["password"]; +$password = isset($_POST["password"]) ? $_POST["password"] : null; $oldPassword=isset($_POST["oldpassword"])?$_POST["oldpassword"]:''; $userstatus = null; @@ -28,7 +28,7 @@ if(is_null($userstatus)) { } // Return Success story -if( OC_User::setPassword( $username, $password )) { +if(!is_null($password) && OC_User::setPassword( $username, $password )) { OC_JSON::success(array("data" => array( "username" => $username ))); } else{ From e2f87e456f05ecafeefff29a1e2bf996f692a050 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Mon, 18 Feb 2013 23:48:08 +0300 Subject: [PATCH 292/719] Calculate size for existing directories only --- apps/files_trashbin/lib/trash.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index 76844ca92e..fbc3954c04 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -396,6 +396,9 @@ class Trashbin { */ private static function calculateSize($view) { $root = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath(''); + if (!file_exists($root)) { + return 0; + } $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($root), \RecursiveIteratorIterator::CHILD_FIRST); $size = 0; From f343d9d247eca8deb69aa521d17ed46dced4f519 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Mon, 18 Feb 2013 23:04:22 +0100 Subject: [PATCH 293/719] files_versions no longer contains a personal settings page -> remove the call --- apps/files_versions/appinfo/app.php | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php index f7c6989ce2..9e3e81c580 100644 --- a/apps/files_versions/appinfo/app.php +++ b/apps/files_versions/appinfo/app.php @@ -5,7 +5,6 @@ OC::$CLASSPATH['OCA\Files_Versions\Storage'] = 'apps/files_versions/lib/versions OC::$CLASSPATH['OCA\Files_Versions\Hooks'] = 'apps/files_versions/lib/hooks.php'; OCP\App::registerAdmin('files_versions', 'settings'); -OCP\App::registerPersonal('files_versions', 'settings-personal'); OCP\Util::addscript('files_versions', 'versions'); From 2c78c5ccab763a74210ec8684f4582d0972e694e Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Mon, 18 Feb 2013 18:05:58 -0500 Subject: [PATCH 294/719] bug fix for issue 1739, two changes included: * fix typo in OC_Group_Database::DisplayNamesInGroup's SQL clause * check array_diff return value in OC_Group::displayNamesInGroups, when there is no difference between two arrays, it will return NULL, so we have to take care of it. --- lib/group.php | 15 ++++++++------- lib/group/database.php | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/group.php b/lib/group.php index 6afe144003..8c06ddc0fd 100644 --- a/lib/group.php +++ b/lib/group.php @@ -308,15 +308,16 @@ class OC_Group { * @return array with display names (Key) user ids (value) */ public static function displayNamesInGroups($gids, $search = '', $limit = -1, $offset = 0) { - $displayNames = array(); + $displayNames = array(); foreach ($gids as $gid) { // TODO Need to apply limits to groups as total - $displayNames = array_merge( - array_diff( - self::displayNamesInGroup($gid, $search, $limit, $offset), - $displayNames - ), - $displayNames); + $diff = array_diff( + self::displayNamesInGroup($gid, $search, $limit, $offset), + $displayNames + ); + if ($diff) { + $displayNames = array_merge($diff, $displayNames); + } } return $displayNames; } diff --git a/lib/group/database.php b/lib/group/database.php index 8816dd8169..93dc05c53a 100644 --- a/lib/group/database.php +++ b/lib/group/database.php @@ -225,7 +225,7 @@ class OC_Group_Database extends OC_Group_Backend { $stmt = OC_DB::prepare('SELECT `*PREFIX*users`.`uid`, `*PREFIX*users`.`displayname`' .' FROM `*PREFIX*users`' .' INNER JOIN `*PREFIX*group_user` ON `*PREFIX*group_user`.`uid` = `*PREFIX*users`.`uid`' - .' WHERE `gid` = ? AND `*PREFIX*group_user.uid` LIKE ?', + .' WHERE `gid` = ? AND `*PREFIX*group_user`.`uid` LIKE ?', $limit, $offset); $result = $stmt->execute(array($gid, $search.'%')); From 76c4dc62964516852f88f251b49bef5e17153fcb Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Tue, 19 Feb 2013 00:06:51 +0100 Subject: [PATCH 295/719] [tx-robot] updated from transifex --- apps/files/l10n/fr.php | 1 + apps/files/l10n/tr.php | 9 +- apps/files/l10n/uk.php | 5 + apps/files_encryption/l10n/tr.php | 3 + apps/files_encryption/l10n/uk.php | 3 + apps/files_external/l10n/tr.php | 6 + apps/files_trashbin/l10n/tr.php | 9 +- apps/files_versions/l10n/tr.php | 7 ++ apps/user_ldap/l10n/de_DE.php | 6 +- apps/user_ldap/l10n/pt_BR.php | 24 ++++ apps/user_ldap/l10n/tr.php | 16 ++- apps/user_ldap/l10n/uk.php | 12 ++ apps/user_webdavauth/l10n/tr.php | 1 + apps/user_webdavauth/l10n/uk.php | 4 +- core/l10n/pl.php | 6 + core/l10n/tr.php | 7 ++ core/l10n/uk.php | 3 + l10n/ca/settings.po | 14 +-- l10n/de_DE/settings.po | 12 +- l10n/de_DE/user_ldap.po | 123 +++++++++++---------- l10n/es_AR/lib.po | 12 +- l10n/es_AR/settings.po | 10 +- l10n/fr/files.po | 9 +- l10n/fr/settings.po | 15 +-- l10n/pl/core.po | 19 ++-- l10n/pt_BR/user_ldap.po | 165 ++++++++++++++-------------- l10n/ru/settings.po | 68 ++++++------ l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 6 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_trashbin.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/settings.pot | 2 +- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- l10n/tr/core.po | 21 ++-- l10n/tr/files.po | 21 ++-- l10n/tr/files_encryption.po | 13 ++- l10n/tr/files_external.po | 25 +++-- l10n/tr/files_trashbin.po | 21 ++-- l10n/tr/files_versions.po | 21 ++-- l10n/tr/settings.po | 16 +-- l10n/tr/user_ldap.po | 139 +++++++++++------------ l10n/tr/user_webdavauth.po | 11 +- l10n/uk/core.po | 12 +- l10n/uk/files.po | 16 +-- l10n/uk/files_encryption.po | 13 ++- l10n/uk/lib.po | 64 +++++------ l10n/uk/settings.po | 86 +++++++-------- l10n/uk/user_ldap.po | 140 +++++++++++------------ l10n/uk/user_webdavauth.po | 13 ++- lib/l10n/es_AR.php | 3 + lib/l10n/uk.php | 2 + settings/l10n/de_DE.php | 6 +- settings/l10n/es_AR.php | 2 + settings/l10n/fr.php | 4 + settings/l10n/ru.php | 31 ++++++ settings/l10n/tr.php | 1 + settings/l10n/uk.php | 35 ++++++ 62 files changed, 752 insertions(+), 559 deletions(-) diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php index e2af33da77..e8d65ccb3e 100644 --- a/apps/files/l10n/fr.php +++ b/apps/files/l10n/fr.php @@ -60,6 +60,7 @@ "Text file" => "Fichier texte", "Folder" => "Dossier", "From link" => "Depuis le lien", +"Deleted files" => "Fichiers supprimés", "Cancel upload" => "Annuler l'envoi", "Nothing in here. Upload something!" => "Il n'y a rien ici ! Envoyez donc quelque chose :)", "Download" => "Télécharger", diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php index f6943f1f4d..3dbc8ec7a2 100644 --- a/apps/files/l10n/tr.php +++ b/apps/files/l10n/tr.php @@ -10,8 +10,10 @@ "No file was uploaded" => "Hiç dosya yüklenmedi", "Missing a temporary folder" => "Geçici bir klasör eksik", "Failed to write to disk" => "Diske yazılamadı", +"Not enough storage available" => "Yeterli disk alanı yok", "Invalid directory." => "Geçersiz dizin.", "Files" => "Dosyalar", +"Delete permanently" => "Kalıcı olarak sil", "Delete" => "Sil", "Rename" => "İsim değiştir.", "Pending" => "Bekliyor", @@ -22,9 +24,12 @@ "replaced {new_name}" => "değiştirilen {new_name}", "undo" => "geri al", "replaced {new_name} with {old_name}" => "{new_name} ismi {old_name} ile değiştirildi", +"perform delete operation" => "Silme işlemini gerçekleştir", "'.' is an invalid file name." => "'.' geçersiz dosya adı.", "File name cannot be empty." => "Dosya adı boş olamaz.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Geçersiz isim, '\\', '/', '<', '>', ':', '\"', '|', '?' ve '*' karakterlerine izin verilmemektedir.", +"Your storage is full, files can not be updated or synced anymore!" => "Depolama alanınız dolu, artık dosyalar güncellenmeyecek yada senkronizasyon edilmeyecek.", +"Your storage is almost full ({usedSpacePercent}%)" => "Depolama alanınız neredeyse dolu ({usedSpacePercent}%)", "Your download is being prepared. This might take some time if the files are big." => "İndirmeniz hazırlanıyor. Dosya büyük ise biraz zaman alabilir.", "Unable to upload your file as it is a directory or has 0 bytes" => "Dosyanızın boyutu 0 byte olduğundan veya bir dizin olduğundan yüklenemedi", "Upload Error" => "Yükleme hatası", @@ -55,6 +60,7 @@ "Text file" => "Metin dosyası", "Folder" => "Klasör", "From link" => "Bağlantıdan", +"Deleted files" => "Dosyalar silindi", "Cancel upload" => "Yüklemeyi iptal et", "Nothing in here. Upload something!" => "Burada hiçbir şey yok. Birşeyler yükleyin!", "Download" => "İndir", @@ -62,5 +68,6 @@ "Upload too large" => "Yüklemeniz çok büyük", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Yüklemeye çalıştığınız dosyalar bu sunucudaki maksimum yükleme boyutunu aşıyor.", "Files are being scanned, please wait." => "Dosyalar taranıyor, lütfen bekleyin.", -"Current scanning" => "Güncel tarama" +"Current scanning" => "Güncel tarama", +"Upgrading filesystem cache..." => "Sistem dosyası önbelleği güncelleniyor" ); diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php index 7e499e6c2c..20eb355e42 100644 --- a/apps/files/l10n/uk.php +++ b/apps/files/l10n/uk.php @@ -1,4 +1,7 @@ "Не вдалося перемістити %s - Файл з таким ім'ям вже існує", +"Could not move %s" => "Не вдалося перемістити %s", +"Unable to rename file" => "Не вдалося перейменувати файл", "No file was uploaded. Unknown error" => "Не завантажено жодного файлу. Невідома помилка", "There is no error, the file uploaded with success" => "Файл успішно вивантажено без помилок.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Розмір звантаження перевищує upload_max_filesize параметра в php.ini: ", @@ -7,6 +10,7 @@ "No file was uploaded" => "Не відвантажено жодного файлу", "Missing a temporary folder" => "Відсутній тимчасовий каталог", "Failed to write to disk" => "Невдалося записати на диск", +"Not enough storage available" => "Місця більше немає", "Invalid directory." => "Невірний каталог.", "Files" => "Файли", "Delete permanently" => "Видалити назавжди", @@ -56,6 +60,7 @@ "Text file" => "Текстовий файл", "Folder" => "Папка", "From link" => "З посилання", +"Deleted files" => "Видалено файлів", "Cancel upload" => "Перервати завантаження", "Nothing in here. Upload something!" => "Тут нічого немає. Відвантажте що-небудь!", "Download" => "Завантажити", diff --git a/apps/files_encryption/l10n/tr.php b/apps/files_encryption/l10n/tr.php index 0868d0a690..6b42c757e6 100644 --- a/apps/files_encryption/l10n/tr.php +++ b/apps/files_encryption/l10n/tr.php @@ -1,4 +1,7 @@ "Şifreleme", +"File encryption is enabled." => "Dosya şifreleme aktif.", +"The following file types will not be encrypted:" => "Belirtilen dosya tipleri şifrelenmeyecek:", +"Exclude the following file types from encryption:" => "Seçilen dosya tiplerini şifreleme:", "None" => "Hiçbiri" ); diff --git a/apps/files_encryption/l10n/uk.php b/apps/files_encryption/l10n/uk.php index 8236c5afef..d495714119 100644 --- a/apps/files_encryption/l10n/uk.php +++ b/apps/files_encryption/l10n/uk.php @@ -1,4 +1,7 @@ "Шифрування", +"File encryption is enabled." => "Увімкнуто шифрування файлів.", +"The following file types will not be encrypted:" => "Такі типи файлів шифруватись не будуть:", +"Exclude the following file types from encryption:" => "Виключити наступні типи файлів з ​​шифрування:", "None" => "Жоден" ); diff --git a/apps/files_external/l10n/tr.php b/apps/files_external/l10n/tr.php index e9a045aab5..bbe6f5b6be 100644 --- a/apps/files_external/l10n/tr.php +++ b/apps/files_external/l10n/tr.php @@ -1,4 +1,8 @@ "Giriş kabul edildi", +"Grant access" => "Erişim sağlandı", +"Fill out all required fields" => "Doldurulması zorunlu alanları doldur", +"Please provide a valid Dropbox app key and secret." => "Lütfen Dropbox app key ve secret temin ediniz", "External Storage" => "Harici Depolama", "Mount point" => "Bağlama Noktası", "Backend" => "Yönetici", @@ -11,6 +15,8 @@ "Groups" => "Gruplar", "Users" => "Kullanıcılar", "Delete" => "Sil", +"Enable User External Storage" => "Kullanıcılar için Harici Depolamayı Etkinleştir", +"Allow users to mount their own external storage" => "Kullanıcıların kendi harici depolamalarını bağlamalarına izin ver", "SSL root certificates" => "SSL kök sertifikaları", "Import Root Certificate" => "Kök Sertifikalarını İçe Aktar" ); diff --git a/apps/files_trashbin/l10n/tr.php b/apps/files_trashbin/l10n/tr.php index 5b7064ecea..cebe615a05 100644 --- a/apps/files_trashbin/l10n/tr.php +++ b/apps/files_trashbin/l10n/tr.php @@ -1,7 +1,14 @@ "%s Kalıcı olarak silinemedi", +"Couldn't restore %s" => "%s Geri yüklenemedi", +"perform restore operation" => "Geri yükleme işlemini gerçekleştir", +"delete file permanently" => "Dosyayı kalıcı olarak sil", "Name" => "İsim", +"Deleted" => "Silindi", "1 folder" => "1 dizin", "{count} folders" => "{count} dizin", "1 file" => "1 dosya", -"{count} files" => "{count} dosya" +"{count} files" => "{count} dosya", +"Nothing in here. Your trash bin is empty!" => "Burası boş. Çöp kutun tamamen boş.", +"Restore" => "Geri yükle" ); diff --git a/apps/files_versions/l10n/tr.php b/apps/files_versions/l10n/tr.php index e9a4c4702e..3db3a4bc82 100644 --- a/apps/files_versions/l10n/tr.php +++ b/apps/files_versions/l10n/tr.php @@ -1,4 +1,11 @@ "Geri alınamıyor: %s", +"success" => "Başarılı.", +"File %s was reverted to version %s" => "Dosya %s, %s versiyonuna döndürüldü", +"failure" => "hata", +"File %s could not be reverted to version %s" => "Dosya %s, %s versiyonuna döndürülemedi.", +"No old versions available" => "Eski versiyonlar mevcut değil.", +"No path specified" => "Yama belirtilmemiş", "History" => "Geçmiş", "Files Versioning" => "Dosya Sürümleri", "Enable" => "Etkinleştir" diff --git a/apps/user_ldap/l10n/de_DE.php b/apps/user_ldap/l10n/de_DE.php index 45edda2deb..9bee0a219a 100644 --- a/apps/user_ldap/l10n/de_DE.php +++ b/apps/user_ldap/l10n/de_DE.php @@ -38,12 +38,12 @@ "When unchecked, this configuration will be skipped." => "Wenn nicht angehakt, wird diese Konfiguration übersprungen.", "Port" => "Port", "Backup (Replica) Host" => "Back-Up (Replikation) Host", -"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Optionaler Backup Host. Es muss ein Replikat des eigentlichen LDAP/AD Servers sein.", +"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Geben Sie einen optionalen Backup Host an. Es muss ein Replikat des Haupt- LDAP/AD Servers sein.", "Backup (Replica) Port" => "Back-Up (Replikation) Port", "Disable Main Server" => "Hauptserver deaktivieren", -"When switched on, ownCloud will only connect to the replica server." => "Wenn eingeschaltet wird sich ownCloud nur mit dem Replikat-Server verbinden.", +"When switched on, ownCloud will only connect to the replica server." => "Wenn eingeschaltet wird sich die ownCloud nur mit dem Replikat-Server verbinden.", "Use TLS" => "Nutze TLS", -"Do not use it additionally for LDAPS connections, it will fail." => "Benutze es nicht zusätzlich für LDAPS Verbindungen, es wird scheitern.", +"Do not use it additionally for LDAPS connections, it will fail." => "Benutzen Sie es nicht zusätzlich für LDAPS Verbindungen, es wird fehlschlagen.", "Case insensitve LDAP server (Windows)" => "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)", "Turn off SSL certificate validation." => "Schalten Sie die SSL-Zertifikatsprüfung aus.", "If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Falls die Verbindung es erfordert, muss das SSL-Zertifikat des LDAP-Server importiert werden.", diff --git a/apps/user_ldap/l10n/pt_BR.php b/apps/user_ldap/l10n/pt_BR.php index dd4019fc35..c86263d52a 100644 --- a/apps/user_ldap/l10n/pt_BR.php +++ b/apps/user_ldap/l10n/pt_BR.php @@ -1,12 +1,23 @@ "Falha ao deletar a configuração do servidor", +"The configuration is valid and the connection could be established!" => "A configuração é válida e a conexão foi estabelecida!", +"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "A configuração é válida, mas o Bind falhou. Confira as configurações do servidor e as credenciais.", +"The configuration is invalid. Please look in the ownCloud log for further details." => "A configuração é inválida. Leia o \"log\" do ownCloud para mais detalhes.", "Deletion failed" => "Remoção falhou", "Keep settings?" => "Manter ajustes?", +"Cannot add server configuration" => "Não foi possível adicionar a configuração do servidor", +"Connection test succeeded" => "Teste de conexão bem sucedido", +"Connection test failed" => "Teste de conexão falhou", +"Do you really want to delete the current Server Configuration?" => "Você quer realmente deletar as atuais Configurações de Servidor?", "Confirm Deletion" => "Confirmar Exclusão", "Warning: Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "Aviso: Os aplicativos user_ldap e user_webdavauth são incompatíveis. Você deverá experienciar comportamento inesperado. Por favor, peça ao seu administrador do sistema para desabilitar um deles.", "Warning: The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "Aviso: O módulo PHP LDAP não está instalado, o backend não funcionará. Por favor, peça ao seu administrador do sistema para instalá-lo.", +"Server configuration" => "Configuração de servidor", +"Add Server Configuration" => "Adicionar configuração de servidor", "Host" => "Host", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "Você pode omitir o protocolo, exceto quando requerer SSL. Então inicie com ldaps://", "Base DN" => "DN Base", +"One Base DN per line" => "Uma base DN por linha", "You can specify Base DN for users and groups in the Advanced tab" => "Você pode especificar DN Base para usuários e grupos na guia Avançada", "User DN" => "DN Usuário", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "O DN do cliente usuário com qual a ligação deverá ser feita, ex. uid=agent,dc=example,dc=com. Para acesso anônimo, deixe DN e Senha vazios.", @@ -21,20 +32,33 @@ "Group Filter" => "Filtro de Grupo", "Defines the filter to apply, when retrieving groups." => "Define o filtro a aplicar ao obter grupos.", "without any placeholder, e.g. \"objectClass=posixGroup\"." => "sem nenhum espaço reservado, ex. \"objectClass=posixGroup\"", +"Connection Settings" => "Configurações de conexão", +"Configuration Active" => "Configuração ativa", +"When unchecked, this configuration will be skipped." => "Quando assinalada, esta configuração será pulada.", "Port" => "Porta", +"Disable Main Server" => "Desativar Servidor Principal", +"When switched on, ownCloud will only connect to the replica server." => "Quando ativado, ownCloud somente conectar-se-á ao servidor réplica.", "Use TLS" => "Usar TLS", +"Do not use it additionally for LDAPS connections, it will fail." => "Não use adicionalmente para conexões LDAPS, pois falhará.", "Case insensitve LDAP server (Windows)" => "Servidor LDAP sensível à caixa alta (Windows)", "Turn off SSL certificate validation." => "Desligar validação de certificado SSL.", "If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Se a conexão só funciona com essa opção, importe o certificado SSL do servidor LDAP no seu servidor ownCloud.", "Not recommended, use for testing only." => "Não recomendado, use somente para testes.", "in seconds. A change empties the cache." => "em segundos. Uma mudança esvaziará o cache.", +"Directory Settings" => "Configurações de Diretório", "User Display Name Field" => "Campo Nome de Exibição de Usuário", "The LDAP attribute to use to generate the user`s ownCloud name." => "O atributo LDAP para usar para gerar nome ownCloud do usuário.", "Base User Tree" => "Árvore de Usuário Base", +"One User Base DN per line" => "Um usuário-base DN por linha", +"User Search Attributes" => "Atributos de busca de usuário", +"Optional; one attribute per line" => "Opcional; um atributo por linha", "Group Display Name Field" => "Campo Nome de Exibição de Grupo", "The LDAP attribute to use to generate the groups`s ownCloud name." => "O atributo LDAP para usar para gerar nome ownCloud do grupo.", "Base Group Tree" => "Árvore de Grupo Base", +"One Group Base DN per line" => "Um grupo-base DN por linha", +"Group Search Attributes" => "Atributos de busca de grupo", "Group-Member association" => "Associação Grupo-Membro", +"Special Attributes" => "Atributos Especiais", "in bytes" => "em bytes", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Deixe vazio para nome de usuário (padrão). Caso contrário, especifique um atributo LDAP/AD.", "Help" => "Ajuda" diff --git a/apps/user_ldap/l10n/tr.php b/apps/user_ldap/l10n/tr.php index 1bed9e246c..7bcabb0448 100644 --- a/apps/user_ldap/l10n/tr.php +++ b/apps/user_ldap/l10n/tr.php @@ -1,16 +1,22 @@ "Silme başarısız oldu", -"Host" => "Konak", -"Base DN" => "Base DN", -"User DN" => "User DN", +"Keep settings?" => "Ayarları kalsınmı?", +"Connection test succeeded" => "Bağlantı testi başarılı oldu", +"Connection test failed" => "Bağlantı testi başarısız oldu", +"Confirm Deletion" => "Silmeyi onayla", +"Host" => "Sunucu", +"Base DN" => "Ana DN", +"User DN" => "Kullanıcı DN", "Password" => "Parola", "For anonymous access, leave DN and Password empty." => "Anonim erişim için DN ve Parola alanlarını boş bırakın.", -"User Login Filter" => "Kullanıcı Oturum Açma Süzgeci", +"User Login Filter" => "Kullanıcı Oturum Filtresi", "use %%uid placeholder, e.g. \"uid=%%uid\"" => "%%uid yer tutucusunu kullanın, örneğin \"uid=%%uid\"", -"User List Filter" => "Kullanıcı Liste Süzgeci", +"User List Filter" => "Kullanıcı Liste Filtresi", "without any placeholder, e.g. \"objectClass=person\"." => "bir yer tutucusu olmadan, örneğin \"objectClass=person\"", "Group Filter" => "Grup Süzgeci", +"Connection Settings" => "Bağlantı ayarları", "Port" => "Port", +"Disable Main Server" => "Ana sunucuyu devredışı birak", "Use TLS" => "TLS kullan", "Turn off SSL certificate validation." => "SSL sertifika doğrulamasını kapat.", "Not recommended, use for testing only." => "Önerilmez, sadece test için kullanın.", diff --git a/apps/user_ldap/l10n/uk.php b/apps/user_ldap/l10n/uk.php index 643a749589..3b85e095ff 100644 --- a/apps/user_ldap/l10n/uk.php +++ b/apps/user_ldap/l10n/uk.php @@ -33,24 +33,36 @@ "Group Filter" => "Фільтр Груп", "Defines the filter to apply, when retrieving groups." => "Визначає фільтр, який застосовується при отриманні груп.", "without any placeholder, e.g. \"objectClass=posixGroup\"." => "без будь-якого заповнювача, наприклад: \"objectClass=posixGroup\".", +"Connection Settings" => "Налаштування З'єднання", "Configuration Active" => "Налаштування Активне", "When unchecked, this configuration will be skipped." => "Якщо \"галочка\" знята, ця конфігурація буде пропущена.", "Port" => "Порт", +"Backup (Replica) Host" => "Сервер для резервних копій", +"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Вкажіть додатковий резервний сервер. Він повинен бути копією головного LDAP/AD сервера.", +"Backup (Replica) Port" => "Порт сервера для резервних копій", +"Disable Main Server" => "Вимкнути Головний Сервер", +"When switched on, ownCloud will only connect to the replica server." => "Коли увімкнуто, ownCloud буде приєднуватись лише до сервера з резервними копіями.", "Use TLS" => "Використовуйте TLS", +"Do not use it additionally for LDAPS connections, it will fail." => "Не використовуйте це додатково для під'єднання до LDAP, бо виконано не буде.", "Case insensitve LDAP server (Windows)" => "Нечутливий до регістру LDAP сервер (Windows)", "Turn off SSL certificate validation." => "Вимкнути перевірку SSL сертифіката.", "If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Якщо з'єднання працює лише з цією опцією, імпортуйте SSL сертифікат LDAP сервера у ваший ownCloud сервер.", "Not recommended, use for testing only." => "Не рекомендується, використовуйте лише для тестів.", "in seconds. A change empties the cache." => "в секундах. Зміна очищує кеш.", +"Directory Settings" => "Налаштування Каталога", "User Display Name Field" => "Поле, яке відображає Ім'я Користувача", "The LDAP attribute to use to generate the user`s ownCloud name." => "Атрибут LDAP, який використовується для генерації імен користувачів ownCloud.", "Base User Tree" => "Основне Дерево Користувачів", "One User Base DN per line" => "Один Користувач Base DN на одній строчці", +"User Search Attributes" => "Пошукові Атрибути Користувача", +"Optional; one attribute per line" => "Додатково; один атрибут на строчку", "Group Display Name Field" => "Поле, яке відображає Ім'я Групи", "The LDAP attribute to use to generate the groups`s ownCloud name." => "Атрибут LDAP, який використовується для генерації імен груп ownCloud.", "Base Group Tree" => "Основне Дерево Груп", "One Group Base DN per line" => "Одна Група Base DN на одній строчці", +"Group Search Attributes" => "Пошукові Атрибути Групи", "Group-Member association" => "Асоціація Група-Член", +"Special Attributes" => "Спеціальні Атрибути", "in bytes" => "в байтах", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Залиште порожнім для імені користувача (за замовчанням). Інакше, вкажіть атрибут LDAP/AD.", "Help" => "Допомога" diff --git a/apps/user_webdavauth/l10n/tr.php b/apps/user_webdavauth/l10n/tr.php index 245a510134..4a2f6d2403 100644 --- a/apps/user_webdavauth/l10n/tr.php +++ b/apps/user_webdavauth/l10n/tr.php @@ -1,3 +1,4 @@ "WebDAV Kimlik doğrulaması", "URL: http://" => "URL: http://" ); diff --git a/apps/user_webdavauth/l10n/uk.php b/apps/user_webdavauth/l10n/uk.php index 245a510134..66887df54b 100644 --- a/apps/user_webdavauth/l10n/uk.php +++ b/apps/user_webdavauth/l10n/uk.php @@ -1,3 +1,5 @@ "URL: http://" +"WebDAV Authentication" => "Аутентифікація WebDAV", +"URL: http://" => "URL: http://", +"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud надішле облікові дані на цей URL. Цей плагін перевірить відповідь і буде інтерпретувати HTTP коди 401 і 403 як повідомлення про недійсні повноваження, а решту відповідей як дійсні облікові дані." ); diff --git a/core/l10n/pl.php b/core/l10n/pl.php index 8f548fe5be..0f23d573fc 100644 --- a/core/l10n/pl.php +++ b/core/l10n/pl.php @@ -5,6 +5,7 @@ "User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Uzytkownik %s wspóldzieli folder \"%s\" z toba. Jest dostepny tutaj: %s", "Category type not provided." => "Typ kategorii nie podany.", "No category to add?" => "Brak kategorii", +"This category already exists: %s" => "Ta kategoria już istnieje: %s", "Object type not provided." => "Typ obiektu nie podany.", "%s ID not provided." => "%s ID nie podany.", "Error adding %s to favorites." => "Błąd dodania %s do ulubionych.", @@ -83,6 +84,8 @@ "Error setting expiration date" => "Błąd podczas ustawiania daty wygaśnięcia", "Sending ..." => "Wysyłanie...", "Email sent" => "Wyślij Email", +"The update was unsuccessful. Please report this issue to the ownCloud community." => "Aktualizacja zakończyła się niepowodzeniem. Proszę zgłosić ten problem spoleczności ownCloud.", +"The update was successful. Redirecting you to ownCloud now." => "Aktualizacji zakończyła się powodzeniem. Przekierowuję do ownCloud.", "ownCloud password reset" => "restart hasła", "Use the following link to reset your password: {link}" => "Proszę użyć tego odnośnika do zresetowania hasła: {link}", "You will receive a link to reset your password via Email." => "Odnośnik służący do resetowania hasła zostanie wysłany na adres e-mail.", @@ -106,6 +109,8 @@ "Security Warning" => "Ostrzeżenie o zabezpieczeniach", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Niedostępny bezpieczny generator liczb losowych, należy włączyć rozszerzenie OpenSSL w PHP.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez bezpiecznego generatora liczb losowych, osoba atakująca może być w stanie przewidzieć resetujące hasło tokena i przejąć kontrolę nad swoim kontem.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Twój katalog danych i pliki są prawdopodobnie dostępne z poziomu internetu, ponieważ plik .htaccess nie działa.", +"For information how to properly configure your server, please see the documentation." => "W celu uzyskania informacji dotyczących prawidłowego skonfigurowania serwera sięgnij do dokumentacji.", "Create an admin account" => "Tworzenie konta administratora", "Advanced" => "Zaawansowane", "Data folder" => "Katalog danych", @@ -125,6 +130,7 @@ "Lost your password?" => "Nie pamiętasz hasła?", "remember" => "Zapamiętanie", "Log in" => "Zaloguj", +"Alternative Logins" => "Alternatywne loginy", "prev" => "wstecz", "next" => "naprzód", "Updating ownCloud to version %s, this may take a while." => "Aktualizowanie ownCloud do wersji %s, może to potrwać chwilę." diff --git a/core/l10n/tr.php b/core/l10n/tr.php index 201b511647..9d9ff0e7eb 100644 --- a/core/l10n/tr.php +++ b/core/l10n/tr.php @@ -5,6 +5,7 @@ "User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s kullanıcısı \"%s\" dizinini sizinle paylaştı. %s adresinden indirilebilir", "Category type not provided." => "Kategori türü desteklenmemektedir.", "No category to add?" => "Eklenecek kategori yok?", +"This category already exists: %s" => "Bu kategori zaten mevcut: %s", "Object type not provided." => "Nesne türü desteklenmemektedir.", "%s ID not provided." => "%s ID belirtilmedi.", "Error adding %s to favorites." => "%s favorilere eklenirken hata oluştu", @@ -52,6 +53,7 @@ "Error" => "Hata", "The app name is not specified." => "uygulama adı belirtilmedi.", "The required file {file} is not installed!" => "İhtiyaç duyulan {file} dosyası kurulu değil.", +"Shared" => "Paylaşılan", "Share" => "Paylaş", "Error while sharing" => "Paylaşım sırasında hata ", "Error while unsharing" => "Paylaşım iptal ediliyorken hata", @@ -82,6 +84,8 @@ "Error setting expiration date" => "Geçerlilik tarihi tanımlama hatası", "Sending ..." => "Gönderiliyor...", "Email sent" => "Eposta gönderildi", +"The update was unsuccessful. Please report this issue to the ownCloud community." => "Güncelleme başarılı olmadı. Lütfen bu hatayı bildirin ownCloud community.", +"The update was successful. Redirecting you to ownCloud now." => "Güncelleme başarılı. ownCloud'a yönlendiriliyor.", "ownCloud password reset" => "ownCloud parola sıfırlama", "Use the following link to reset your password: {link}" => "Bu bağlantıyı kullanarak parolanızı sıfırlayın: {link}", "You will receive a link to reset your password via Email." => "Parolanızı sıfırlamak için bir bağlantı Eposta olarak gönderilecek.", @@ -105,6 +109,8 @@ "Security Warning" => "Güvenlik Uyarisi", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Güvenli rasgele sayı üreticisi bulunamadı. Lütfen PHP OpenSSL eklentisini etkinleştirin.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Güvenli rasgele sayı üreticisi olmadan saldırganlar parola sıfırlama simgelerini tahmin edip hesabınızı ele geçirebilir.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Veri klasörünüz ve dosyalarınız .htaccess dosyası çalışmadığı için internet'ten erişime açık.", +"For information how to properly configure your server, please see the documentation." => "Server'ınızı nasıl ayarlayacağınıza dair bilgi için, lütfen bu linki ziyaret edin documentation.", "Create an admin account" => "Bir yönetici hesabı oluşturun", "Advanced" => "Gelişmiş", "Data folder" => "Veri klasörü", @@ -124,6 +130,7 @@ "Lost your password?" => "Parolanızı mı unuttunuz?", "remember" => "hatırla", "Log in" => "Giriş yap", +"Alternative Logins" => "Alternatif Girişler", "prev" => "önceki", "next" => "sonraki", "Updating ownCloud to version %s, this may take a while." => "Owncloud %s versiyonuna güncelleniyor. Biraz zaman alabilir." diff --git a/core/l10n/uk.php b/core/l10n/uk.php index a2f297fc22..685a31d52e 100644 --- a/core/l10n/uk.php +++ b/core/l10n/uk.php @@ -5,6 +5,7 @@ "User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Користувач %s поділився текою \"%s\" з вами. Він доступний для завантаження звідси: %s", "Category type not provided." => "Не вказано тип категорії.", "No category to add?" => "Відсутні категорії для додавання?", +"This category already exists: %s" => "Ця категорія вже існує: %s", "Object type not provided." => "Не вказано тип об'єкту.", "%s ID not provided." => "%s ID не вказано.", "Error adding %s to favorites." => "Помилка при додаванні %s до обраного.", @@ -108,6 +109,8 @@ "Security Warning" => "Попередження про небезпеку", "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Не доступний безпечний генератор випадкових чисел, будь ласка, активуйте PHP OpenSSL додаток.", "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Без безпечного генератора випадкових чисел зловмисник може визначити токени скидання пароля і заволодіти Вашим обліковим записом.", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Ваші дані каталогів і файлів, ймовірно, доступні з інтернету, тому що .htaccess файл не працює.", +"For information how to properly configure your server, please see the documentation." => "Для отримання інформації, як правильно налаштувати сервер, зверніться до документації.", "Create an admin account" => "Створити обліковий запис адміністратора", "Advanced" => "Додатково", "Data folder" => "Каталог даних", diff --git a/l10n/ca/settings.po b/l10n/ca/settings.po index 2ea7c2f7f0..1086f12301 100644 --- a/l10n/ca/settings.po +++ b/l10n/ca/settings.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 11:54+0000\n" "Last-Translator: I Robot \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" @@ -151,23 +151,23 @@ msgstr "Grup Admin" msgid "Delete" msgstr "Suprimeix" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" msgstr "afegeix grup" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" msgstr "Heu de facilitar un nom d'usuari vàlid" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" msgstr "Error en crear l'usuari" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" msgstr "Heu de facilitar una contrasenya vàlida" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "Català" diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po index 9fe6f6813a..ad5f7571a5 100644 --- a/l10n/de_DE/settings.po +++ b/l10n/de_DE/settings.po @@ -30,9 +30,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" -"PO-Revision-Date: 2013-02-16 23:40+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 14:18+0000\n" +"Last-Translator: robN \n" "Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -137,7 +137,7 @@ msgstr "Fehler" #: js/apps.js:90 msgid "Updated" -msgstr "Geupdated" +msgstr "Aktualisiert" #: js/personal.js:96 msgid "Saving..." @@ -250,7 +250,7 @@ msgid "" "remote and sending of notification emails might also not work. We suggest to" " enable internet connection for this server if you want to have all features" " of ownCloud." -msgstr "Dieser ownCloud Server hat keine funktionierende Netzwerkverbindung. Dies bedeutet das einige Funktionen wie das einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Netzwerkverbindung für diesen Server zu aktivieren wenn Sie alle Funktionen von ownCloud nutzen wollen." +msgstr "Dieser ownCloud Server hat keine funktionierende Internetverbindung. Dies bedeutet das einige Funktionen wie das einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Internetverbindung für diesen Server zu aktivieren wenn Sie alle Funktionen von ownCloud nutzen wollen." #: templates/admin.php:89 msgid "Cron" @@ -270,7 +270,7 @@ msgstr "cron.php ist bei einem Webcron-Service registriert. Die cron.php Seite i msgid "" "Use systems cron service. Call the cron.php file in the owncloud folder via " "a system cronjob once a minute." -msgstr "Nutze den Cron Systemdienst. Rufe die Datei cron.php im ownCloud Ordner einmal pro Minute über einen Cronjob auf." +msgstr "Nutzen Sie den Cron Systemdienst. Rufen Sie die Datei cron.php im ownCloud Ordner einmal pro Minute über einen Cronjob auf." #: templates/admin.php:125 msgid "Sharing" diff --git a/l10n/de_DE/user_ldap.po b/l10n/de_DE/user_ldap.po index a2eb0d878e..90f63eae9c 100644 --- a/l10n/de_DE/user_ldap.po +++ b/l10n/de_DE/user_ldap.po @@ -10,6 +10,7 @@ # Maurice Preuß <>, 2012. # , 2012. # Phi Lieb <>, 2012. +# , 2013. # , 2013. # Susi <>, 2013. # , 2012. @@ -18,9 +19,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-17 00:24+0100\n" -"PO-Revision-Date: 2013-02-16 23:20+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 14:19+0000\n" +"Last-Translator: robN \n" "Language-Team: German (Germany) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -32,17 +33,17 @@ msgstr "" msgid "Failed to delete the server configuration" msgstr "Das Löschen der Server-Konfiguration schlug fehl" -#: ajax/testConfiguration.php:35 +#: ajax/testConfiguration.php:36 msgid "The configuration is valid and the connection could be established!" msgstr "Die Konfiguration ist gültig und die Verbindung konnte hergestellt werden!" -#: ajax/testConfiguration.php:37 +#: ajax/testConfiguration.php:39 msgid "" "The configuration is valid, but the Bind failed. Please check the server " "settings and credentials." msgstr "Die Konfiguration ist gültig, aber das Herstellen der Verbindung schlug fehl. Bitte überprüfen Sie die Server-Einstellungen und Zertifikate." -#: ajax/testConfiguration.php:40 +#: ajax/testConfiguration.php:43 msgid "" "The configuration is invalid. Please look in the ownCloud log for further " "details." @@ -97,224 +98,224 @@ msgstr "Warnung: Da das PHP-Modul für LDAP ist nicht installiert, das Ba msgid "Server configuration" msgstr "Serverkonfiguration" -#: templates/settings.php:17 +#: templates/settings.php:18 msgid "Add Server Configuration" msgstr "Serverkonfiguration hinzufügen" -#: templates/settings.php:21 +#: templates/settings.php:23 msgid "Host" msgstr "Host" -#: templates/settings.php:21 +#: templates/settings.php:25 msgid "" "You can omit the protocol, except you require SSL. Then start with ldaps://" msgstr "Sie können das Protokoll auslassen, außer wenn Sie SSL benötigen. Beginnen Sie dann mit ldaps://" -#: templates/settings.php:22 +#: templates/settings.php:26 msgid "Base DN" msgstr "Basis-DN" -#: templates/settings.php:22 +#: templates/settings.php:27 msgid "One Base DN per line" msgstr "Ein Base DN pro Zeile" -#: templates/settings.php:22 +#: templates/settings.php:28 msgid "You can specify Base DN for users and groups in the Advanced tab" msgstr "Sie können Basis-DN für Benutzer und Gruppen in dem \"Erweitert\"-Reiter konfigurieren" -#: templates/settings.php:23 +#: templates/settings.php:30 msgid "User DN" msgstr "Benutzer-DN" -#: templates/settings.php:23 +#: templates/settings.php:32 msgid "" "The DN of the client user with which the bind shall be done, e.g. " "uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password " "empty." msgstr "Der DN des Benutzers für LDAP-Bind, z.B.: uid=agent,dc=example,dc=com. Für anonymen Zugriff lassen Sie DN und Passwort leer." -#: templates/settings.php:24 +#: templates/settings.php:33 msgid "Password" msgstr "Passwort" -#: templates/settings.php:24 +#: templates/settings.php:36 msgid "For anonymous access, leave DN and Password empty." msgstr "Lassen Sie die Felder von DN und Passwort für anonymen Zugang leer." -#: templates/settings.php:25 +#: templates/settings.php:37 msgid "User Login Filter" msgstr "Benutzer-Login-Filter" -#: templates/settings.php:25 +#: templates/settings.php:40 #, php-format msgid "" "Defines the filter to apply, when login is attempted. %%uid replaces the " "username in the login action." msgstr "Bestimmt den angewendeten Filter, wenn eine Anmeldung versucht wird. %%uid ersetzt den Benutzernamen bei dem Anmeldeversuch." -#: templates/settings.php:25 +#: templates/settings.php:41 #, php-format msgid "use %%uid placeholder, e.g. \"uid=%%uid\"" msgstr "verwenden Sie %%uid Platzhalter, z. B. \"uid=%%uid\"" -#: templates/settings.php:26 +#: templates/settings.php:42 msgid "User List Filter" msgstr "Benutzer-Filter-Liste" -#: templates/settings.php:26 +#: templates/settings.php:45 msgid "Defines the filter to apply, when retrieving users." msgstr "Definiert den Filter für die Anfrage der Benutzer." -#: templates/settings.php:26 +#: templates/settings.php:46 msgid "without any placeholder, e.g. \"objectClass=person\"." msgstr "ohne Platzhalter, z.B.: \"objectClass=person\"" -#: templates/settings.php:27 +#: templates/settings.php:47 msgid "Group Filter" msgstr "Gruppen-Filter" -#: templates/settings.php:27 +#: templates/settings.php:50 msgid "Defines the filter to apply, when retrieving groups." msgstr "Definiert den Filter für die Anfrage der Gruppen." -#: templates/settings.php:27 +#: templates/settings.php:51 msgid "without any placeholder, e.g. \"objectClass=posixGroup\"." msgstr "ohne Platzhalter, z.B.: \"objectClass=posixGroup\"" -#: templates/settings.php:31 +#: templates/settings.php:55 msgid "Connection Settings" msgstr "Verbindungseinstellungen" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "Configuration Active" msgstr "Konfiguration aktiv" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "When unchecked, this configuration will be skipped." msgstr "Wenn nicht angehakt, wird diese Konfiguration übersprungen." -#: templates/settings.php:34 +#: templates/settings.php:58 msgid "Port" msgstr "Port" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "Backup (Replica) Host" msgstr "Back-Up (Replikation) Host" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "" "Give an optional backup host. It must be a replica of the main LDAP/AD " "server." -msgstr "Optionaler Backup Host. Es muss ein Replikat des eigentlichen LDAP/AD Servers sein." +msgstr "Geben Sie einen optionalen Backup Host an. Es muss ein Replikat des Haupt- LDAP/AD Servers sein." -#: templates/settings.php:36 +#: templates/settings.php:60 msgid "Backup (Replica) Port" msgstr "Back-Up (Replikation) Port" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "Disable Main Server" msgstr "Hauptserver deaktivieren" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "When switched on, ownCloud will only connect to the replica server." -msgstr "Wenn eingeschaltet wird sich ownCloud nur mit dem Replikat-Server verbinden." +msgstr "Wenn eingeschaltet wird sich die ownCloud nur mit dem Replikat-Server verbinden." -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Use TLS" msgstr "Nutze TLS" -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Do not use it additionally for LDAPS connections, it will fail." -msgstr "Benutze es nicht zusätzlich für LDAPS Verbindungen, es wird scheitern." +msgstr "Benutzen Sie es nicht zusätzlich für LDAPS Verbindungen, es wird fehlschlagen." -#: templates/settings.php:39 +#: templates/settings.php:63 msgid "Case insensitve LDAP server (Windows)" msgstr "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)" -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Turn off SSL certificate validation." msgstr "Schalten Sie die SSL-Zertifikatsprüfung aus." -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "" "If connection only works with this option, import the LDAP server's SSL " "certificate in your ownCloud server." msgstr "Falls die Verbindung es erfordert, muss das SSL-Zertifikat des LDAP-Server importiert werden." -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Not recommended, use for testing only." msgstr "Nicht empfohlen, nur zu Testzwecken." -#: templates/settings.php:41 +#: templates/settings.php:65 msgid "in seconds. A change empties the cache." msgstr "in Sekunden. Eine Änderung leert den Cache." -#: templates/settings.php:43 +#: templates/settings.php:67 msgid "Directory Settings" msgstr "Verzeichniseinstellungen" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "User Display Name Field" msgstr "Feld für den Anzeigenamen des Benutzers" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "The LDAP attribute to use to generate the user`s ownCloud name." msgstr "Das LDAP-Attribut für die Generierung des Benutzernamens in ownCloud. " -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "Base User Tree" msgstr "Basis-Benutzerbaum" -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "One User Base DN per line" msgstr "Ein Benutzer Base DN pro Zeile" -#: templates/settings.php:47 +#: templates/settings.php:71 msgid "User Search Attributes" msgstr "Benutzer-Suche Eigenschaften" -#: templates/settings.php:47 templates/settings.php:50 +#: templates/settings.php:71 templates/settings.php:74 msgid "Optional; one attribute per line" msgstr "Optional; Ein Attribut pro Zeile" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "Group Display Name Field" msgstr "Feld für den Anzeigenamen der Gruppe" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "The LDAP attribute to use to generate the groups`s ownCloud name." msgstr "Das LDAP-Attribut für die Generierung des Gruppennamens in ownCloud. " -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "Base Group Tree" msgstr "Basis-Gruppenbaum" -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "One Group Base DN per line" msgstr "Ein Gruppen Base DN pro Zeile" -#: templates/settings.php:50 +#: templates/settings.php:74 msgid "Group Search Attributes" msgstr "Gruppen-Suche Eigenschaften" -#: templates/settings.php:51 +#: templates/settings.php:75 msgid "Group-Member association" msgstr "Assoziation zwischen Gruppe und Benutzer" -#: templates/settings.php:53 +#: templates/settings.php:77 msgid "Special Attributes" msgstr "Besondere Eigenschaften" -#: templates/settings.php:56 +#: templates/settings.php:80 msgid "in bytes" msgstr "in Bytes" -#: templates/settings.php:58 +#: templates/settings.php:82 msgid "" "Leave empty for user name (default). Otherwise, specify an LDAP/AD " "attribute." msgstr "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfall trage ein LDAP/AD-Attribut ein." -#: templates/settings.php:62 +#: templates/settings.php:86 msgid "Help" msgstr "Hilfe" diff --git a/l10n/es_AR/lib.po b/l10n/es_AR/lib.po index a997d69e93..2f2831a8d4 100644 --- a/l10n/es_AR/lib.po +++ b/l10n/es_AR/lib.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:05+0100\n" -"PO-Revision-Date: 2013-02-14 20:50+0000\n" -"Last-Translator: deftoner \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 10:20+0000\n" +"Last-Translator: cjtess \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -131,7 +131,7 @@ msgstr "Debe ingresar una cuenta existente o el administrador" #: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" -msgstr "" +msgstr "El nombre de usuario y contraseña no son válidos" #: setup.php:203 msgid "MySQL username and/or password not valid" @@ -150,7 +150,7 @@ msgstr "Error DB: \"%s\"" #: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" -msgstr "" +msgstr "El comando no comprendido es: \"%s\"" #: setup.php:273 #, php-format @@ -173,7 +173,7 @@ msgstr "Borrar este usuario de MySQL" #: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" -msgstr "" +msgstr "El comando no comprendido es: \"%s\", nombre: \"%s\", contraseña: \"%s\"" #: setup.php:649 msgid "" diff --git a/l10n/es_AR/settings.po b/l10n/es_AR/settings.po index 87ad26cb9c..968b373574 100644 --- a/l10n/es_AR/settings.po +++ b/l10n/es_AR/settings.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-16 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:10+0000\n" -"Last-Translator: Javier Victor Mariano Bruno \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 10:20+0000\n" +"Last-Translator: cjtess \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -231,7 +231,7 @@ msgid "" "remote and sending of notification emails might also not work. We suggest to" " enable internet connection for this server if you want to have all features" " of ownCloud." -msgstr "" +msgstr "Este servidor ownCloud no tiene una conexión a internet que funcione. Esto significa que alguno de sus servicios como montar dispositivos externos, notificaciones de actualizaciones o instalar aplicaciones de otros desarrolladores no funcionan. Acceder a archivos remotos y mandar e-mails puede ser que tampoco funcione. Te sugerimos que actives una conexión a internet si querés estas características de ownCloud." #: templates/admin.php:89 msgid "Cron" @@ -245,7 +245,7 @@ msgstr "Ejecute una tarea con cada pagina cargada." msgid "" "cron.php is registered at a webcron service. Call the cron.php page in the " "owncloud root once a minute over http." -msgstr "" +msgstr "cron.php está registrado como un servicio webcron. Llamar la página cron.php en la raíz de ownCloud una vez al minuto sobre http." #: templates/admin.php:118 msgid "" diff --git a/l10n/fr/files.po b/l10n/fr/files.po index 9e0b0e3a7a..9370bbceb4 100644 --- a/l10n/fr/files.po +++ b/l10n/fr/files.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Adalberto Rodrigues , 2013. # Cédric MARTIN , 2013. # Christophe Lherieau , 2012-2013. # Cyril Glapa , 2012. @@ -21,9 +22,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 11:12+0000\n" +"Last-Translator: Adalberto Rodrigues \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -288,7 +289,7 @@ msgstr "Depuis le lien" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Fichiers supprimés" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po index 3681ab7e40..7eb6c479f2 100644 --- a/l10n/fr/settings.po +++ b/l10n/fr/settings.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Adalberto Rodrigues , 2013. # Brice , 2012. # Cédric MARTIN , 2013. # Cyril Glapa , 2012. @@ -24,9 +25,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-17 00:25+0100\n" -"PO-Revision-Date: 2013-02-16 19:10+0000\n" -"Last-Translator: Nahir Mohamed \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 14:18+0000\n" +"Last-Translator: Adalberto Rodrigues \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -197,7 +198,7 @@ msgstr "Votre dossier data et vos fichiers sont probablement accessibles depuis #: templates/admin.php:29 msgid "Setup Warning" -msgstr "" +msgstr "Avertissement, problème de configuration" #: templates/admin.php:32 msgid "" @@ -292,15 +293,15 @@ msgstr "Autoriser le repartage" #: templates/admin.php:148 msgid "Allow users to share items shared with them again" -msgstr "" +msgstr "Autoriser les utilisateurs à partager des éléments qui ont été partagés avec eux" #: templates/admin.php:155 msgid "Allow users to share with anyone" -msgstr "" +msgstr "Autoriser les utilisateurs à partager avec tout le monde" #: templates/admin.php:158 msgid "Allow users to only share with users in their groups" -msgstr "" +msgstr "Autoriser les utilisateurs à partager avec des utilisateurs de leur groupe uniquement" #: templates/admin.php:165 msgid "Security" diff --git a/l10n/pl/core.po b/l10n/pl/core.po index 5021e25a36..82607700c9 100644 --- a/l10n/pl/core.po +++ b/l10n/pl/core.po @@ -9,6 +9,7 @@ # , 2012. # Marcin Małecki , 2011, 2012. # Marcin Małecki , 2011. +# Marco Oliver Grunwald , 2013. # , 2011. # , 2012. # Piotr Sokół , 2012. @@ -17,9 +18,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:31+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 12:12+0000\n" +"Last-Translator: mgrvnwald \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -62,7 +63,7 @@ msgstr "Brak kategorii" #: ajax/vcategories/add.php:37 #, php-format msgid "This category already exists: %s" -msgstr "" +msgstr "Ta kategoria już istnieje: %s" #: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27 #: ajax/vcategories/favorites.php:24 @@ -390,11 +391,11 @@ msgid "" "The update was unsuccessful. Please report this issue to the ownCloud " "community." -msgstr "" +msgstr "Aktualizacja zakończyła się niepowodzeniem. Proszę zgłosić ten problem spoleczności ownCloud." #: js/update.js:18 msgid "The update was successful. Redirecting you to ownCloud now." -msgstr "" +msgstr "Aktualizacji zakończyła się powodzeniem. Przekierowuję do ownCloud." #: lostpassword/controller.php:47 msgid "ownCloud password reset" @@ -497,14 +498,14 @@ msgstr "Bez bezpiecznego generatora liczb losowych, osoba atakująca może być msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "Twój katalog danych i pliki są prawdopodobnie dostępne z poziomu internetu, ponieważ plik .htaccess nie działa." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "W celu uzyskania informacji dotyczących prawidłowego skonfigurowania serwera sięgnij do dokumentacji." #: templates/installation.php:36 msgid "Create an admin account" @@ -587,7 +588,7 @@ msgstr "Zaloguj" #: templates/login.php:49 msgid "Alternative Logins" -msgstr "" +msgstr "Alternatywne loginy" #: templates/part.pagenavi.php:3 msgid "prev" diff --git a/l10n/pt_BR/user_ldap.po b/l10n/pt_BR/user_ldap.po index ad9f2821c0..f3ba82a97b 100644 --- a/l10n/pt_BR/user_ldap.po +++ b/l10n/pt_BR/user_ldap.po @@ -5,13 +5,14 @@ # Translators: # , 2012. # Rodrigo Tavares , 2013. +# Tulio Simoes Martins Padilha , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:00+0000\n" -"Last-Translator: rodrigost23 \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 14:10+0000\n" +"Last-Translator: tuliouel \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,23 +22,23 @@ msgstr "" #: ajax/deleteConfiguration.php:34 msgid "Failed to delete the server configuration" -msgstr "" +msgstr "Falha ao deletar a configuração do servidor" -#: ajax/testConfiguration.php:35 +#: ajax/testConfiguration.php:36 msgid "The configuration is valid and the connection could be established!" -msgstr "" +msgstr "A configuração é válida e a conexão foi estabelecida!" -#: ajax/testConfiguration.php:37 +#: ajax/testConfiguration.php:39 msgid "" "The configuration is valid, but the Bind failed. Please check the server " "settings and credentials." -msgstr "" +msgstr "A configuração é válida, mas o Bind falhou. Confira as configurações do servidor e as credenciais." -#: ajax/testConfiguration.php:40 +#: ajax/testConfiguration.php:43 msgid "" "The configuration is invalid. Please look in the ownCloud log for further " "details." -msgstr "" +msgstr "A configuração é inválida. Leia o \"log\" do ownCloud para mais detalhes." #: js/settings.js:66 msgid "Deletion failed" @@ -53,19 +54,19 @@ msgstr "Manter ajustes?" #: js/settings.js:97 msgid "Cannot add server configuration" -msgstr "" +msgstr "Não foi possível adicionar a configuração do servidor" #: js/settings.js:121 msgid "Connection test succeeded" -msgstr "" +msgstr "Teste de conexão bem sucedido" #: js/settings.js:126 msgid "Connection test failed" -msgstr "" +msgstr "Teste de conexão falhou" #: js/settings.js:136 msgid "Do you really want to delete the current Server Configuration?" -msgstr "" +msgstr "Você quer realmente deletar as atuais Configurações de Servidor?" #: js/settings.js:137 msgid "Confirm Deletion" @@ -86,226 +87,226 @@ msgstr "Aviso: O módulo PHP LDAP não está instalado, o backend não fu #: templates/settings.php:15 msgid "Server configuration" -msgstr "" +msgstr "Configuração de servidor" -#: templates/settings.php:17 +#: templates/settings.php:18 msgid "Add Server Configuration" -msgstr "" +msgstr "Adicionar configuração de servidor" -#: templates/settings.php:21 +#: templates/settings.php:23 msgid "Host" msgstr "Host" -#: templates/settings.php:21 +#: templates/settings.php:25 msgid "" "You can omit the protocol, except you require SSL. Then start with ldaps://" msgstr "Você pode omitir o protocolo, exceto quando requerer SSL. Então inicie com ldaps://" -#: templates/settings.php:22 +#: templates/settings.php:26 msgid "Base DN" msgstr "DN Base" -#: templates/settings.php:22 +#: templates/settings.php:27 msgid "One Base DN per line" -msgstr "" +msgstr "Uma base DN por linha" -#: templates/settings.php:22 +#: templates/settings.php:28 msgid "You can specify Base DN for users and groups in the Advanced tab" msgstr "Você pode especificar DN Base para usuários e grupos na guia Avançada" -#: templates/settings.php:23 +#: templates/settings.php:30 msgid "User DN" msgstr "DN Usuário" -#: templates/settings.php:23 +#: templates/settings.php:32 msgid "" "The DN of the client user with which the bind shall be done, e.g. " "uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password " "empty." msgstr "O DN do cliente usuário com qual a ligação deverá ser feita, ex. uid=agent,dc=example,dc=com. Para acesso anônimo, deixe DN e Senha vazios." -#: templates/settings.php:24 +#: templates/settings.php:33 msgid "Password" msgstr "Senha" -#: templates/settings.php:24 +#: templates/settings.php:36 msgid "For anonymous access, leave DN and Password empty." msgstr "Para acesso anônimo, deixe DN e Senha vazios." -#: templates/settings.php:25 +#: templates/settings.php:37 msgid "User Login Filter" msgstr "Filtro de Login de Usuário" -#: templates/settings.php:25 +#: templates/settings.php:40 #, php-format msgid "" "Defines the filter to apply, when login is attempted. %%uid replaces the " "username in the login action." msgstr "Define o filtro pra aplicar ao efetuar uma tentativa de login. %%uuid substitui o nome de usuário na ação de login." -#: templates/settings.php:25 +#: templates/settings.php:41 #, php-format msgid "use %%uid placeholder, e.g. \"uid=%%uid\"" msgstr "use %%uid placeholder, ex. \"uid=%%uid\"" -#: templates/settings.php:26 +#: templates/settings.php:42 msgid "User List Filter" msgstr "Filtro de Lista de Usuário" -#: templates/settings.php:26 +#: templates/settings.php:45 msgid "Defines the filter to apply, when retrieving users." msgstr "Define filtro a aplicar ao obter usuários." -#: templates/settings.php:26 +#: templates/settings.php:46 msgid "without any placeholder, e.g. \"objectClass=person\"." msgstr "sem nenhum espaço reservado, ex. \"objectClass=person\"." -#: templates/settings.php:27 +#: templates/settings.php:47 msgid "Group Filter" msgstr "Filtro de Grupo" -#: templates/settings.php:27 +#: templates/settings.php:50 msgid "Defines the filter to apply, when retrieving groups." msgstr "Define o filtro a aplicar ao obter grupos." -#: templates/settings.php:27 +#: templates/settings.php:51 msgid "without any placeholder, e.g. \"objectClass=posixGroup\"." msgstr "sem nenhum espaço reservado, ex. \"objectClass=posixGroup\"" -#: templates/settings.php:31 +#: templates/settings.php:55 msgid "Connection Settings" -msgstr "" +msgstr "Configurações de conexão" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "Configuration Active" -msgstr "" +msgstr "Configuração ativa" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "When unchecked, this configuration will be skipped." -msgstr "" +msgstr "Quando assinalada, esta configuração será pulada." -#: templates/settings.php:34 +#: templates/settings.php:58 msgid "Port" msgstr "Porta" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "Backup (Replica) Host" msgstr "" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "" "Give an optional backup host. It must be a replica of the main LDAP/AD " "server." msgstr "" -#: templates/settings.php:36 +#: templates/settings.php:60 msgid "Backup (Replica) Port" msgstr "" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "Disable Main Server" -msgstr "" +msgstr "Desativar Servidor Principal" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "When switched on, ownCloud will only connect to the replica server." -msgstr "" +msgstr "Quando ativado, ownCloud somente conectar-se-á ao servidor réplica." -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Use TLS" msgstr "Usar TLS" -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Do not use it additionally for LDAPS connections, it will fail." -msgstr "" +msgstr "Não use adicionalmente para conexões LDAPS, pois falhará." -#: templates/settings.php:39 +#: templates/settings.php:63 msgid "Case insensitve LDAP server (Windows)" msgstr "Servidor LDAP sensível à caixa alta (Windows)" -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Turn off SSL certificate validation." msgstr "Desligar validação de certificado SSL." -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "" "If connection only works with this option, import the LDAP server's SSL " "certificate in your ownCloud server." msgstr "Se a conexão só funciona com essa opção, importe o certificado SSL do servidor LDAP no seu servidor ownCloud." -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Not recommended, use for testing only." msgstr "Não recomendado, use somente para testes." -#: templates/settings.php:41 +#: templates/settings.php:65 msgid "in seconds. A change empties the cache." msgstr "em segundos. Uma mudança esvaziará o cache." -#: templates/settings.php:43 +#: templates/settings.php:67 msgid "Directory Settings" -msgstr "" +msgstr "Configurações de Diretório" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "User Display Name Field" msgstr "Campo Nome de Exibição de Usuário" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "The LDAP attribute to use to generate the user`s ownCloud name." msgstr "O atributo LDAP para usar para gerar nome ownCloud do usuário." -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "Base User Tree" msgstr "Árvore de Usuário Base" -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "One User Base DN per line" -msgstr "" +msgstr "Um usuário-base DN por linha" -#: templates/settings.php:47 +#: templates/settings.php:71 msgid "User Search Attributes" -msgstr "" +msgstr "Atributos de busca de usuário" -#: templates/settings.php:47 templates/settings.php:50 +#: templates/settings.php:71 templates/settings.php:74 msgid "Optional; one attribute per line" -msgstr "" +msgstr "Opcional; um atributo por linha" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "Group Display Name Field" msgstr "Campo Nome de Exibição de Grupo" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "The LDAP attribute to use to generate the groups`s ownCloud name." msgstr "O atributo LDAP para usar para gerar nome ownCloud do grupo." -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "Base Group Tree" msgstr "Árvore de Grupo Base" -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "One Group Base DN per line" -msgstr "" +msgstr "Um grupo-base DN por linha" -#: templates/settings.php:50 +#: templates/settings.php:74 msgid "Group Search Attributes" -msgstr "" +msgstr "Atributos de busca de grupo" -#: templates/settings.php:51 +#: templates/settings.php:75 msgid "Group-Member association" msgstr "Associação Grupo-Membro" -#: templates/settings.php:53 +#: templates/settings.php:77 msgid "Special Attributes" -msgstr "" +msgstr "Atributos Especiais" -#: templates/settings.php:56 +#: templates/settings.php:80 msgid "in bytes" msgstr "em bytes" -#: templates/settings.php:58 +#: templates/settings.php:82 msgid "" "Leave empty for user name (default). Otherwise, specify an LDAP/AD " "attribute." msgstr "Deixe vazio para nome de usuário (padrão). Caso contrário, especifique um atributo LDAP/AD." -#: templates/settings.php:62 +#: templates/settings.php:86 msgid "Help" msgstr "Ajuda" diff --git a/l10n/ru/settings.po b/l10n/ru/settings.po index 5686b6c766..1ca4ef8482 100644 --- a/l10n/ru/settings.po +++ b/l10n/ru/settings.po @@ -22,9 +22,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" -"PO-Revision-Date: 2013-02-17 20:30+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 06:50+0000\n" +"Last-Translator: Langaru \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -145,7 +145,7 @@ msgstr "отмена" #: js/users.js:62 msgid "Unable to remove user" -msgstr "" +msgstr "Невозможно удалить пользователя" #: js/users.js:75 templates/users.php:26 templates/users.php:80 #: templates/users.php:105 @@ -162,19 +162,19 @@ msgstr "Удалить" #: js/users.js:191 msgid "add group" -msgstr "" +msgstr "добавить группу" #: js/users.js:352 msgid "A valid username must be provided" -msgstr "" +msgstr "Предоставте подходящее имя пользователя" #: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" -msgstr "" +msgstr "Ошибка создания пользователя" #: js/users.js:358 msgid "A valid password must be provided" -msgstr "" +msgstr "Предоставте подходящий пароль" #: personal.php:29 personal.php:30 msgid "__language_name__" @@ -195,7 +195,7 @@ msgstr "Ваши каталоги данных и файлы, вероятно, #: templates/admin.php:29 msgid "Setup Warning" -msgstr "" +msgstr "Предупреждение установки" #: templates/admin.php:32 msgid "" @@ -210,17 +210,17 @@ msgstr "Пожалуйста, дважды просмотрите #: templates/admin.php:44 msgid "Module 'fileinfo' missing" -msgstr "" +msgstr "Модуль 'fileinfo' потерян" #: templates/admin.php:47 msgid "" "The PHP module 'fileinfo' is missing. We strongly recommend to enable this " "module to get best results with mime-type detection." -msgstr "" +msgstr "PHP модуль 'fileinfo' потерян. Мы настоятельно рекомендуем включить этот модуль для получения лучших результатов в mime-типе обнаружения." #: templates/admin.php:58 msgid "Locale not working" -msgstr "" +msgstr "Локализация не работает" #: templates/admin.php:61 msgid "" @@ -228,11 +228,11 @@ msgid "" "\"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with" " certain characters in file names. We strongly suggest to install the " "required packages on your system to support en_US.UTF-8/en_US.UTF8." -msgstr "" +msgstr "Этот сервер ownCloud не может поставить локализацию \"en_US.UTF-8\"/\"en_US.UTF8\". Это значит, что могут быть проблемы с опредилёнными символами в именах фалов. Мы настоятельно рекомендуем установить необходимые пакеты на Вашу систему для поддержки en_US.UTF-8/en_US.UTF8." #: templates/admin.php:72 msgid "Internet connection not working" -msgstr "" +msgstr "Интернет соединение не работает" #: templates/admin.php:75 msgid "" @@ -242,90 +242,90 @@ msgid "" "remote and sending of notification emails might also not work. We suggest to" " enable internet connection for this server if you want to have all features" " of ownCloud." -msgstr "" +msgstr "Этот сервер ownCloud не имеет ни одного рабочего интернет соединения. Это значит, что некоторые возможности, такие как монтаж внешних носителей, уведомления о обновлениях или установки 3го рода приложений,не работают." #: templates/admin.php:89 msgid "Cron" -msgstr "" +msgstr "Демон" #: templates/admin.php:98 msgid "Execute one task with each page loaded" -msgstr "" +msgstr "Выполнять одно задание с каждой загруженной страницей" #: templates/admin.php:108 msgid "" "cron.php is registered at a webcron service. Call the cron.php page in the " "owncloud root once a minute over http." -msgstr "" +msgstr "cron.php зарегистрирован на webcron сервисе. Вызов страницы cron.php в корне owncloud раз в минуту через http." #: templates/admin.php:118 msgid "" "Use systems cron service. Call the cron.php file in the owncloud folder via " "a system cronjob once a minute." -msgstr "" +msgstr "Использование системной службы cron. Вызов файла cron.php в папке owncloud через систему cronjob раз в минуту." #: templates/admin.php:125 msgid "Sharing" -msgstr "" +msgstr "Общий доступ" #: templates/admin.php:131 msgid "Enable Share API" -msgstr "" +msgstr "Включить API общего доступа" #: templates/admin.php:132 msgid "Allow apps to use the Share API" -msgstr "" +msgstr "Позволить программам использовать API общего доступа" #: templates/admin.php:139 msgid "Allow links" -msgstr "" +msgstr "Разрешить ссылки" #: templates/admin.php:140 msgid "Allow users to share items to the public with links" -msgstr "" +msgstr "Разрешить пользователям открывать в общий доступ эллементы с публичной ссылкой" #: templates/admin.php:147 msgid "Allow resharing" -msgstr "" +msgstr "Разрешить переоткрытие общего доступа" #: templates/admin.php:148 msgid "Allow users to share items shared with them again" -msgstr "" +msgstr "Позволить пользователям открывать общий доступ к эллементам уже открытым в общий доступ" #: templates/admin.php:155 msgid "Allow users to share with anyone" -msgstr "" +msgstr "Разрешить пользователя делать общий доступ любому" #: templates/admin.php:158 msgid "Allow users to only share with users in their groups" -msgstr "" +msgstr "Разрешить пользователям делать общий доступ только для пользователей их групп" #: templates/admin.php:165 msgid "Security" -msgstr "" +msgstr "Безопасность" #: templates/admin.php:178 msgid "Enforce HTTPS" -msgstr "" +msgstr "Принудить к HTTPS" #: templates/admin.php:179 msgid "" "Enforces the clients to connect to ownCloud via an encrypted connection." -msgstr "" +msgstr "Принудить клиентов подключаться к ownCloud через шифрованное подключение." #: templates/admin.php:182 msgid "" "Please connect to this ownCloud instance via HTTPS to enable or disable the " "SSL enforcement." -msgstr "" +msgstr "Пожалуйста, подключитесь к этому экземпляру ownCloud через HTTPS для включения или отключения SSL принуждения." #: templates/admin.php:192 msgid "Log" -msgstr "" +msgstr "Лог" #: templates/admin.php:193 msgid "Log level" -msgstr "" +msgstr "Уровень лога" #: templates/admin.php:220 msgid "More" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index 50af374e0d..36be3c3706 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index 68faae5f7a..fb8cc4e0c8 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index 0e87a9cadf..5e60e27efa 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index 1c08282555..c9bc38f0ef 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,13 +41,13 @@ msgstr "" msgid "Error configuring Google Drive storage" msgstr "" -#: lib/config.php:418 +#: lib/config.php:398 msgid "" "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " "is not possible. Please ask your system administrator to install it." msgstr "" -#: lib/config.php:421 +#: lib/config.php:401 msgid "" "Warning: The FTP support in PHP is not enabled or installed. Mounting " "of FTP shares is not possible. Please ask your system administrator to " diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index 035f07db37..1271253d44 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index 9ae14c07fb..4d7440e632 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 956fa27aa6..97806d4646 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index b7a4e24525..2232f91928 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index f2ed4a30fd..d37161b4df 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index defbacb6a4..93d7d9f6b6 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index cd7a57253e..3e170c6c32 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 5.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2013-02-18 00:05+0100\n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/tr/core.po b/l10n/tr/core.po index 85393a3132..6b2bbe2b27 100644 --- a/l10n/tr/core.po +++ b/l10n/tr/core.po @@ -8,13 +8,14 @@ # , 2012. # ismail yenigul , 2013. # Necdet Yücel , 2012. +# TayançKILIÇLI , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:32+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 20:20+0000\n" +"Last-Translator: atakan96 \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -57,7 +58,7 @@ msgstr "Eklenecek kategori yok?" #: ajax/vcategories/add.php:37 #, php-format msgid "This category already exists: %s" -msgstr "" +msgstr "Bu kategori zaten mevcut: %s" #: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27 #: ajax/vcategories/favorites.php:24 @@ -258,7 +259,7 @@ msgstr "İhtiyaç duyulan {file} dosyası kurulu değil." #: js/share.js:29 js/share.js:43 js/share.js:90 msgid "Shared" -msgstr "" +msgstr "Paylaşılan" #: js/share.js:93 msgid "Share" @@ -385,11 +386,11 @@ msgid "" "The update was unsuccessful. Please report this issue to the ownCloud " "community." -msgstr "" +msgstr "Güncelleme başarılı olmadı. Lütfen bu hatayı bildirin ownCloud community." #: js/update.js:18 msgid "The update was successful. Redirecting you to ownCloud now." -msgstr "" +msgstr "Güncelleme başarılı. ownCloud'a yönlendiriliyor." #: lostpassword/controller.php:47 msgid "ownCloud password reset" @@ -492,14 +493,14 @@ msgstr "Güvenli rasgele sayı üreticisi olmadan saldırganlar parola sıfırla msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "Veri klasörünüz ve dosyalarınız .htaccess dosyası çalışmadığı için internet'ten erişime açık." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Server'ınızı nasıl ayarlayacağınıza dair bilgi için, lütfen bu linki ziyaret edin documentation." #: templates/installation.php:36 msgid "Create an admin account" @@ -582,7 +583,7 @@ msgstr "Giriş yap" #: templates/login.php:49 msgid "Alternative Logins" -msgstr "" +msgstr "Alternatif Girişler" #: templates/part.pagenavi.php:3 msgid "prev" diff --git a/l10n/tr/files.po b/l10n/tr/files.po index 9656ce6720..3d25044bb6 100644 --- a/l10n/tr/files.po +++ b/l10n/tr/files.po @@ -9,13 +9,14 @@ # , 2012. # ismail yenigul , 2013. # Necdet Yücel , 2012. +# TayançKILIÇLI , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 19:30+0000\n" +"Last-Translator: atakan96 \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -74,7 +75,7 @@ msgstr "Diske yazılamadı" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Yeterli disk alanı yok" #: ajax/upload.php:83 msgid "Invalid directory." @@ -86,7 +87,7 @@ msgstr "Dosyalar" #: js/fileactions.js:125 msgid "Delete permanently" -msgstr "" +msgstr "Kalıcı olarak sil" #: js/fileactions.js:127 templates/index.php:91 templates/index.php:92 msgid "Delete" @@ -131,7 +132,7 @@ msgstr "{new_name} ismi {old_name} ile değiştirildi" #: js/filelist.js:322 msgid "perform delete operation" -msgstr "" +msgstr "Silme işlemini gerçekleştir" #: js/files.js:52 msgid "'.' is an invalid file name." @@ -149,11 +150,11 @@ msgstr "Geçersiz isim, '\\', '/', '<', '>', ':', '\"', '|', '?' ve '*' karakter #: js/files.js:78 msgid "Your storage is full, files can not be updated or synced anymore!" -msgstr "" +msgstr "Depolama alanınız dolu, artık dosyalar güncellenmeyecek yada senkronizasyon edilmeyecek." #: js/files.js:82 msgid "Your storage is almost full ({usedSpacePercent}%)" -msgstr "" +msgstr "Depolama alanınız neredeyse dolu ({usedSpacePercent}%)" #: js/files.js:224 msgid "" @@ -280,7 +281,7 @@ msgstr "Bağlantıdan" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Dosyalar silindi" #: templates/index.php:46 msgid "Cancel upload" @@ -318,4 +319,4 @@ msgstr "Güncel tarama" #: templates/upgrade.php:2 msgid "Upgrading filesystem cache..." -msgstr "" +msgstr "Sistem dosyası önbelleği güncelleniyor" diff --git a/l10n/tr/files_encryption.po b/l10n/tr/files_encryption.po index fec3cbfb0b..52609fb3a4 100644 --- a/l10n/tr/files_encryption.po +++ b/l10n/tr/files_encryption.po @@ -4,13 +4,14 @@ # # Translators: # Necdet Yücel , 2012. +# TayançKILIÇLI , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:09+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 20:10+0000\n" +"Last-Translator: atakan96 \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,15 +25,15 @@ msgstr "Şifreleme" #: templates/settings-personal.php:7 msgid "File encryption is enabled." -msgstr "" +msgstr "Dosya şifreleme aktif." #: templates/settings-personal.php:11 msgid "The following file types will not be encrypted:" -msgstr "" +msgstr "Belirtilen dosya tipleri şifrelenmeyecek:" #: templates/settings.php:7 msgid "Exclude the following file types from encryption:" -msgstr "" +msgstr "Seçilen dosya tiplerini şifreleme:" #: templates/settings.php:12 msgid "None" diff --git a/l10n/tr/files_external.po b/l10n/tr/files_external.po index bb6c928a05..7e6073c637 100644 --- a/l10n/tr/files_external.po +++ b/l10n/tr/files_external.po @@ -4,13 +4,14 @@ # # Translators: # Necdet Yücel , 2012. +# TayançKILIÇLI , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-28 00:20+0100\n" -"PO-Revision-Date: 2012-12-27 13:50+0000\n" -"Last-Translator: Necdet Yücel \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 20:20+0000\n" +"Last-Translator: atakan96 \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,7 +21,7 @@ msgstr "" #: js/dropbox.js:7 js/dropbox.js:25 js/google.js:7 js/google.js:23 msgid "Access granted" -msgstr "" +msgstr "Giriş kabul edildi" #: js/dropbox.js:28 js/dropbox.js:74 js/dropbox.js:79 js/dropbox.js:86 msgid "Error configuring Dropbox storage" @@ -28,27 +29,27 @@ msgstr "" #: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40 msgid "Grant access" -msgstr "" +msgstr "Erişim sağlandı" #: js/dropbox.js:73 js/google.js:72 msgid "Fill out all required fields" -msgstr "" +msgstr "Doldurulması zorunlu alanları doldur" #: js/dropbox.js:85 msgid "Please provide a valid Dropbox app key and secret." -msgstr "" +msgstr "Lütfen Dropbox app key ve secret temin ediniz" #: js/google.js:26 js/google.js:73 js/google.js:78 msgid "Error configuring Google Drive storage" msgstr "" -#: lib/config.php:434 +#: lib/config.php:398 msgid "" "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " "is not possible. Please ask your system administrator to install it." msgstr "" -#: lib/config.php:435 +#: lib/config.php:401 msgid "" "Warning: The FTP support in PHP is not enabled or installed. Mounting" " of FTP shares is not possible. Please ask your system administrator to " @@ -106,16 +107,16 @@ msgstr "Sil" #: templates/settings.php:124 msgid "Enable User External Storage" -msgstr "" +msgstr "Kullanıcılar için Harici Depolamayı Etkinleştir" #: templates/settings.php:125 msgid "Allow users to mount their own external storage" -msgstr "" +msgstr "Kullanıcıların kendi harici depolamalarını bağlamalarına izin ver" #: templates/settings.php:136 msgid "SSL root certificates" msgstr "SSL kök sertifikaları" -#: templates/settings.php:153 +#: templates/settings.php:154 msgid "Import Root Certificate" msgstr "Kök Sertifikalarını İçe Aktar" diff --git a/l10n/tr/files_trashbin.po b/l10n/tr/files_trashbin.po index bce1ba1a18..22a2d9527f 100644 --- a/l10n/tr/files_trashbin.po +++ b/l10n/tr/files_trashbin.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# TayançKILIÇLI , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-12 15:10+0100\n" -"PO-Revision-Date: 2013-02-12 10:07+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 20:10+0000\n" +"Last-Translator: atakan96 \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,20 +21,20 @@ msgstr "" #: ajax/delete.php:22 #, php-format msgid "Couldn't delete %s permanently" -msgstr "" +msgstr "%s Kalıcı olarak silinemedi" #: ajax/undelete.php:41 #, php-format msgid "Couldn't restore %s" -msgstr "" +msgstr "%s Geri yüklenemedi" #: js/trash.js:7 js/trash.js:94 msgid "perform restore operation" -msgstr "" +msgstr "Geri yükleme işlemini gerçekleştir" #: js/trash.js:33 msgid "delete file permanently" -msgstr "" +msgstr "Dosyayı kalıcı olarak sil" #: js/trash.js:125 templates/index.php:17 msgid "Name" @@ -41,7 +42,7 @@ msgstr "İsim" #: js/trash.js:126 templates/index.php:27 msgid "Deleted" -msgstr "" +msgstr "Silindi" #: js/trash.js:135 msgid "1 folder" @@ -61,8 +62,8 @@ msgstr "{count} dosya" #: templates/index.php:9 msgid "Nothing in here. Your trash bin is empty!" -msgstr "" +msgstr "Burası boş. Çöp kutun tamamen boş." #: templates/index.php:20 templates/index.php:22 msgid "Restore" -msgstr "" +msgstr "Geri yükle" diff --git a/l10n/tr/files_versions.po b/l10n/tr/files_versions.po index 73c00cd9cf..1e213a1436 100644 --- a/l10n/tr/files_versions.po +++ b/l10n/tr/files_versions.po @@ -4,13 +4,14 @@ # # Translators: # Necdet Yücel , 2012. +# TayançKILIÇLI , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 20:00+0000\n" +"Last-Translator: atakan96 \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,33 +22,33 @@ msgstr "" #: ajax/rollbackVersion.php:15 #, php-format msgid "Could not revert: %s" -msgstr "" +msgstr "Geri alınamıyor: %s" #: history.php:40 msgid "success" -msgstr "" +msgstr "Başarılı." #: history.php:42 #, php-format msgid "File %s was reverted to version %s" -msgstr "" +msgstr "Dosya %s, %s versiyonuna döndürüldü" #: history.php:49 msgid "failure" -msgstr "" +msgstr "hata" #: history.php:51 #, php-format msgid "File %s could not be reverted to version %s" -msgstr "" +msgstr "Dosya %s, %s versiyonuna döndürülemedi." #: history.php:68 msgid "No old versions available" -msgstr "" +msgstr "Eski versiyonlar mevcut değil." #: history.php:73 msgid "No path specified" -msgstr "" +msgstr "Yama belirtilmemiş" #: js/versions.js:16 msgid "History" diff --git a/l10n/tr/settings.po b/l10n/tr/settings.po index 6fc21c7bed..3409c93a04 100644 --- a/l10n/tr/settings.po +++ b/l10n/tr/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 19:50+0000\n" "Last-Translator: I Robot \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -149,23 +149,23 @@ msgstr "Yönetici Grubu " msgid "Delete" msgstr "Sil" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" msgstr "" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" msgstr "" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" msgstr "" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" msgstr "" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "__dil_adı__" @@ -389,7 +389,7 @@ msgstr "" #: templates/personal.php:14 msgid "Get the apps to sync your files" -msgstr "" +msgstr "Dosyalarınızı senkronize etmek için uygulamayı indirin" #: templates/personal.php:25 msgid "Show First Run Wizard again" diff --git a/l10n/tr/user_ldap.po b/l10n/tr/user_ldap.po index 8cdf1507e9..62e1e9d8dd 100644 --- a/l10n/tr/user_ldap.po +++ b/l10n/tr/user_ldap.po @@ -4,13 +4,14 @@ # # Translators: # Necdet Yücel , 2012. +# TayançKILIÇLI , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 20:00+0000\n" +"Last-Translator: atakan96 \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,17 +23,17 @@ msgstr "" msgid "Failed to delete the server configuration" msgstr "" -#: ajax/testConfiguration.php:35 +#: ajax/testConfiguration.php:36 msgid "The configuration is valid and the connection could be established!" msgstr "" -#: ajax/testConfiguration.php:37 +#: ajax/testConfiguration.php:39 msgid "" "The configuration is valid, but the Bind failed. Please check the server " "settings and credentials." msgstr "" -#: ajax/testConfiguration.php:40 +#: ajax/testConfiguration.php:43 msgid "" "The configuration is invalid. Please look in the ownCloud log for further " "details." @@ -48,7 +49,7 @@ msgstr "" #: js/settings.js:83 msgid "Keep settings?" -msgstr "" +msgstr "Ayarları kalsınmı?" #: js/settings.js:97 msgid "Cannot add server configuration" @@ -56,11 +57,11 @@ msgstr "" #: js/settings.js:121 msgid "Connection test succeeded" -msgstr "" +msgstr "Bağlantı testi başarılı oldu" #: js/settings.js:126 msgid "Connection test failed" -msgstr "" +msgstr "Bağlantı testi başarısız oldu" #: js/settings.js:136 msgid "Do you really want to delete the current Server Configuration?" @@ -68,7 +69,7 @@ msgstr "" #: js/settings.js:137 msgid "Confirm Deletion" -msgstr "" +msgstr "Silmeyi onayla" #: templates/settings.php:8 msgid "" @@ -87,224 +88,224 @@ msgstr "" msgid "Server configuration" msgstr "" -#: templates/settings.php:17 +#: templates/settings.php:18 msgid "Add Server Configuration" msgstr "" -#: templates/settings.php:21 +#: templates/settings.php:23 msgid "Host" -msgstr "Konak" +msgstr "Sunucu" -#: templates/settings.php:21 +#: templates/settings.php:25 msgid "" "You can omit the protocol, except you require SSL. Then start with ldaps://" msgstr "" -#: templates/settings.php:22 +#: templates/settings.php:26 msgid "Base DN" -msgstr "Base DN" +msgstr "Ana DN" -#: templates/settings.php:22 +#: templates/settings.php:27 msgid "One Base DN per line" msgstr "" -#: templates/settings.php:22 +#: templates/settings.php:28 msgid "You can specify Base DN for users and groups in the Advanced tab" msgstr "" -#: templates/settings.php:23 +#: templates/settings.php:30 msgid "User DN" -msgstr "User DN" +msgstr "Kullanıcı DN" -#: templates/settings.php:23 +#: templates/settings.php:32 msgid "" "The DN of the client user with which the bind shall be done, e.g. " "uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password " "empty." msgstr "" -#: templates/settings.php:24 +#: templates/settings.php:33 msgid "Password" msgstr "Parola" -#: templates/settings.php:24 +#: templates/settings.php:36 msgid "For anonymous access, leave DN and Password empty." msgstr "Anonim erişim için DN ve Parola alanlarını boş bırakın." -#: templates/settings.php:25 +#: templates/settings.php:37 msgid "User Login Filter" -msgstr "Kullanıcı Oturum Açma Süzgeci" +msgstr "Kullanıcı Oturum Filtresi" -#: templates/settings.php:25 +#: templates/settings.php:40 #, php-format msgid "" "Defines the filter to apply, when login is attempted. %%uid replaces the " "username in the login action." msgstr "" -#: templates/settings.php:25 +#: templates/settings.php:41 #, php-format msgid "use %%uid placeholder, e.g. \"uid=%%uid\"" msgstr "%%uid yer tutucusunu kullanın, örneğin \"uid=%%uid\"" -#: templates/settings.php:26 +#: templates/settings.php:42 msgid "User List Filter" -msgstr "Kullanıcı Liste Süzgeci" +msgstr "Kullanıcı Liste Filtresi" -#: templates/settings.php:26 +#: templates/settings.php:45 msgid "Defines the filter to apply, when retrieving users." msgstr "" -#: templates/settings.php:26 +#: templates/settings.php:46 msgid "without any placeholder, e.g. \"objectClass=person\"." msgstr "bir yer tutucusu olmadan, örneğin \"objectClass=person\"" -#: templates/settings.php:27 +#: templates/settings.php:47 msgid "Group Filter" msgstr "Grup Süzgeci" -#: templates/settings.php:27 +#: templates/settings.php:50 msgid "Defines the filter to apply, when retrieving groups." msgstr "" -#: templates/settings.php:27 +#: templates/settings.php:51 msgid "without any placeholder, e.g. \"objectClass=posixGroup\"." msgstr "" -#: templates/settings.php:31 +#: templates/settings.php:55 msgid "Connection Settings" -msgstr "" +msgstr "Bağlantı ayarları" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "Configuration Active" msgstr "" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "When unchecked, this configuration will be skipped." msgstr "" -#: templates/settings.php:34 +#: templates/settings.php:58 msgid "Port" msgstr "Port" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "Backup (Replica) Host" msgstr "" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "" "Give an optional backup host. It must be a replica of the main LDAP/AD " "server." msgstr "" -#: templates/settings.php:36 +#: templates/settings.php:60 msgid "Backup (Replica) Port" msgstr "" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "Disable Main Server" -msgstr "" +msgstr "Ana sunucuyu devredışı birak" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "When switched on, ownCloud will only connect to the replica server." msgstr "" -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Use TLS" msgstr "TLS kullan" -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Do not use it additionally for LDAPS connections, it will fail." msgstr "" -#: templates/settings.php:39 +#: templates/settings.php:63 msgid "Case insensitve LDAP server (Windows)" msgstr "" -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Turn off SSL certificate validation." msgstr "SSL sertifika doğrulamasını kapat." -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "" "If connection only works with this option, import the LDAP server's SSL " "certificate in your ownCloud server." msgstr "" -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Not recommended, use for testing only." msgstr "Önerilmez, sadece test için kullanın." -#: templates/settings.php:41 +#: templates/settings.php:65 msgid "in seconds. A change empties the cache." msgstr "saniye cinsinden. Bir değişiklik önbelleği temizleyecektir." -#: templates/settings.php:43 +#: templates/settings.php:67 msgid "Directory Settings" msgstr "" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "User Display Name Field" msgstr "" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "The LDAP attribute to use to generate the user`s ownCloud name." msgstr "" -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "Base User Tree" msgstr "Temel Kullanıcı Ağacı" -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "One User Base DN per line" msgstr "" -#: templates/settings.php:47 +#: templates/settings.php:71 msgid "User Search Attributes" msgstr "" -#: templates/settings.php:47 templates/settings.php:50 +#: templates/settings.php:71 templates/settings.php:74 msgid "Optional; one attribute per line" msgstr "" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "Group Display Name Field" msgstr "" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "The LDAP attribute to use to generate the groups`s ownCloud name." msgstr "" -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "Base Group Tree" msgstr "Temel Grup Ağacı" -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "One Group Base DN per line" msgstr "" -#: templates/settings.php:50 +#: templates/settings.php:74 msgid "Group Search Attributes" msgstr "" -#: templates/settings.php:51 +#: templates/settings.php:75 msgid "Group-Member association" msgstr "Grup-Üye işbirliği" -#: templates/settings.php:53 +#: templates/settings.php:77 msgid "Special Attributes" msgstr "" -#: templates/settings.php:56 +#: templates/settings.php:80 msgid "in bytes" msgstr "byte cinsinden" -#: templates/settings.php:58 +#: templates/settings.php:82 msgid "" "Leave empty for user name (default). Otherwise, specify an LDAP/AD " "attribute." msgstr "Kullanıcı adı bölümünü boş bırakın (varsayılan). " -#: templates/settings.php:62 +#: templates/settings.php:86 msgid "Help" msgstr "Yardım" diff --git a/l10n/tr/user_webdavauth.po b/l10n/tr/user_webdavauth.po index 912a2ff24d..f5f060e198 100644 --- a/l10n/tr/user_webdavauth.po +++ b/l10n/tr/user_webdavauth.po @@ -5,13 +5,14 @@ # Translators: # , 2012. # Necdet Yücel , 2012. +# TayançKILIÇLI , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-15 00:03+0100\n" -"PO-Revision-Date: 2013-01-14 23:04+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 20:10+0000\n" +"Last-Translator: atakan96 \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,13 +22,13 @@ msgstr "" #: templates/settings.php:3 msgid "WebDAV Authentication" -msgstr "" +msgstr "WebDAV Kimlik doğrulaması" #: templates/settings.php:4 msgid "URL: http://" msgstr "URL: http://" -#: templates/settings.php:6 +#: templates/settings.php:7 msgid "" "ownCloud will send the user credentials to this URL. This plugin checks the " "response and will interpret the HTTP statuscodes 401 and 403 as invalid " diff --git a/l10n/uk/core.po b/l10n/uk/core.po index 3c922b2b2b..80023f786d 100644 --- a/l10n/uk/core.po +++ b/l10n/uk/core.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-13 00:03+0100\n" -"PO-Revision-Date: 2013-02-12 14:32+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 09:40+0000\n" +"Last-Translator: volodya327 \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -58,7 +58,7 @@ msgstr "Відсутні категорії для додавання?" #: ajax/vcategories/add.php:37 #, php-format msgid "This category already exists: %s" -msgstr "" +msgstr "Ця категорія вже існує: %s" #: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27 #: ajax/vcategories/favorites.php:24 @@ -493,14 +493,14 @@ msgstr "Без безпечного генератора випадкових ч msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." -msgstr "" +msgstr "Ваші дані каталогів і файлів, ймовірно, доступні з інтернету, тому що .htaccess файл не працює." #: templates/installation.php:32 msgid "" "For information how to properly configure your server, please see the documentation." -msgstr "" +msgstr "Для отримання інформації, як правильно налаштувати сервер, зверніться до документації." #: templates/installation.php:36 msgid "Create an admin account" diff --git a/l10n/uk/files.po b/l10n/uk/files.po index 6eeb4c0aa4..73d909acdc 100644 --- a/l10n/uk/files.po +++ b/l10n/uk/files.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-15 00:04+0100\n" -"PO-Revision-Date: 2013-02-14 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 10:12+0000\n" +"Last-Translator: volodya327 \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,16 +24,16 @@ msgstr "" #: ajax/move.php:17 #, php-format msgid "Could not move %s - File with this name already exists" -msgstr "" +msgstr "Не вдалося перемістити %s - Файл з таким ім'ям вже існує" #: ajax/move.php:27 ajax/move.php:30 #, php-format msgid "Could not move %s" -msgstr "" +msgstr "Не вдалося перемістити %s" #: ajax/rename.php:22 ajax/rename.php:25 msgid "Unable to rename file" -msgstr "" +msgstr "Не вдалося перейменувати файл" #: ajax/upload.php:19 msgid "No file was uploaded. Unknown error" @@ -72,7 +72,7 @@ msgstr "Невдалося записати на диск" #: ajax/upload.php:52 msgid "Not enough storage available" -msgstr "" +msgstr "Місця більше немає" #: ajax/upload.php:83 msgid "Invalid directory." @@ -278,7 +278,7 @@ msgstr "З посилання" #: templates/index.php:40 msgid "Deleted files" -msgstr "" +msgstr "Видалено файлів" #: templates/index.php:46 msgid "Cancel upload" diff --git a/l10n/uk/files_encryption.po b/l10n/uk/files_encryption.po index 1ee5660980..f0341a7e32 100644 --- a/l10n/uk/files_encryption.po +++ b/l10n/uk/files_encryption.po @@ -4,13 +4,14 @@ # # Translators: # , 2012. +# пан Володимир , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-10 00:08+0100\n" -"PO-Revision-Date: 2013-02-09 23:09+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 16:40+0000\n" +"Last-Translator: volodya327 \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,15 +25,15 @@ msgstr "Шифрування" #: templates/settings-personal.php:7 msgid "File encryption is enabled." -msgstr "" +msgstr "Увімкнуто шифрування файлів." #: templates/settings-personal.php:11 msgid "The following file types will not be encrypted:" -msgstr "" +msgstr "Такі типи файлів шифруватись не будуть:" #: templates/settings.php:7 msgid "Exclude the following file types from encryption:" -msgstr "" +msgstr "Виключити наступні типи файлів з ​​шифрування:" #: templates/settings.php:12 msgid "None" diff --git a/l10n/uk/lib.po b/l10n/uk/lib.po index 6380af6fb3..68427402a3 100644 --- a/l10n/uk/lib.po +++ b/l10n/uk/lib.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-11 15:39+0100\n" -"PO-Revision-Date: 2013-02-11 14:40+0000\n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 13:40+0000\n" "Last-Translator: I Robot \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" @@ -21,27 +21,27 @@ msgstr "" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: app.php:339 +#: app.php:349 msgid "Help" msgstr "Допомога" -#: app.php:346 +#: app.php:362 msgid "Personal" msgstr "Особисте" -#: app.php:351 +#: app.php:373 msgid "Settings" msgstr "Налаштування" -#: app.php:356 +#: app.php:385 msgid "Users" msgstr "Користувачі" -#: app.php:363 +#: app.php:398 msgid "Apps" msgstr "Додатки" -#: app.php:365 +#: app.php:406 msgid "Admin" msgstr "Адмін" @@ -53,15 +53,15 @@ msgstr "ZIP завантаження вимкнено." msgid "Files need to be downloaded one by one." msgstr "Файли повинні бути завантаженні послідовно." -#: files.php:203 files.php:228 +#: files.php:204 files.php:231 msgid "Back to Files" msgstr "Повернутися до файлів" -#: files.php:227 +#: files.php:228 msgid "Selected files too large to generate zip file." msgstr "Вибрані фали завеликі для генерування zip файлу." -#: helper.php:226 +#: helper.php:228 msgid "couldn't be determined" msgstr "не може бути визначено" @@ -121,7 +121,7 @@ msgstr "" msgid "%s set the database host." msgstr "" -#: setup.php:126 setup.php:291 setup.php:336 +#: setup.php:126 setup.php:294 setup.php:339 msgid "PostgreSQL username and/or password not valid" msgstr "" @@ -129,7 +129,7 @@ msgstr "" msgid "You need to enter either an existing account or the administrator." msgstr "" -#: setup.php:149 setup.php:423 setup.php:489 +#: setup.php:149 setup.php:427 setup.php:494 msgid "Oracle username and/or password not valid" msgstr "" @@ -137,54 +137,54 @@ msgstr "" msgid "MySQL username and/or password not valid" msgstr "" -#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394 -#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529 -#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573 -#: setup.php:579 +#: setup.php:257 setup.php:360 setup.php:369 setup.php:387 setup.php:397 +#: setup.php:406 setup.php:435 setup.php:501 setup.php:527 setup.php:534 +#: setup.php:545 setup.php:552 setup.php:561 setup.php:569 setup.php:578 +#: setup.php:584 #, php-format msgid "DB Error: \"%s\"" msgstr "" -#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395 -#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530 -#: setup.php:541 setup.php:557 setup.php:565 setup.php:574 +#: setup.php:258 setup.php:361 setup.php:370 setup.php:388 setup.php:398 +#: setup.php:407 setup.php:436 setup.php:502 setup.php:528 setup.php:535 +#: setup.php:546 setup.php:562 setup.php:570 setup.php:579 #, php-format msgid "Offending command was: \"%s\"" msgstr "" -#: setup.php:270 +#: setup.php:273 #, php-format msgid "MySQL user '%s'@'localhost' exists already." msgstr "" -#: setup.php:271 +#: setup.php:274 msgid "Drop this user from MySQL" msgstr "" -#: setup.php:276 +#: setup.php:279 #, php-format msgid "MySQL user '%s'@'%%' already exists" msgstr "" -#: setup.php:277 +#: setup.php:280 msgid "Drop this user from MySQL." msgstr "" -#: setup.php:548 setup.php:580 +#: setup.php:553 setup.php:585 #, php-format msgid "Offending command was: \"%s\", name: %s, password: %s" msgstr "" -#: setup.php:644 +#: setup.php:649 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "Ваш Web-сервер ще не налаштований належним чином для того, щоб дозволити синхронізацію файлів, через те що інтерфейс WebDAV, здається, зламаний." -#: setup.php:645 +#: setup.php:651 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Будь ласка, перевірте інструкції по встановленню." #: template.php:113 msgid "seconds ago" @@ -238,16 +238,16 @@ msgstr "минулого року" msgid "years ago" msgstr "роки тому" -#: updater.php:75 +#: updater.php:78 #, php-format msgid "%s is available. Get more information" msgstr "%s доступно. Отримати детальну інформацію" -#: updater.php:77 +#: updater.php:81 msgid "up to date" msgstr "оновлено" -#: updater.php:80 +#: updater.php:84 msgid "updates check is disabled" msgstr "перевірка оновлень відключена" diff --git a/l10n/uk/settings.po b/l10n/uk/settings.po index 8023ecb8b1..41e1a49cd7 100644 --- a/l10n/uk/settings.po +++ b/l10n/uk/settings.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-14 00:05+0100\n" -"PO-Revision-Date: 2013-02-13 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 16:00+0000\n" +"Last-Translator: volodya327 \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -134,7 +134,7 @@ msgstr "відмінити" #: js/users.js:62 msgid "Unable to remove user" -msgstr "" +msgstr "Неможливо видалити користувача" #: js/users.js:75 templates/users.php:26 templates/users.php:80 #: templates/users.php:105 @@ -149,23 +149,23 @@ msgstr "Адміністратор групи" msgid "Delete" msgstr "Видалити" -#: js/users.js:190 +#: js/users.js:191 msgid "add group" -msgstr "" +msgstr "додати групу" -#: js/users.js:351 +#: js/users.js:352 msgid "A valid username must be provided" -msgstr "" +msgstr "Потрібно задати вірне ім'я користувача" -#: js/users.js:352 js/users.js:358 js/users.js:373 +#: js/users.js:353 js/users.js:359 js/users.js:374 msgid "Error creating user" -msgstr "" +msgstr "Помилка при створенні користувача" -#: js/users.js:357 +#: js/users.js:358 msgid "A valid password must be provided" -msgstr "" +msgstr "Потрібно задати вірний пароль" -#: personal.php:34 personal.php:35 +#: personal.php:29 personal.php:30 msgid "__language_name__" msgstr "__language_name__" @@ -184,32 +184,32 @@ msgstr "Ваш каталог з даними та Ваші файли можл #: templates/admin.php:29 msgid "Setup Warning" -msgstr "" +msgstr "Попередження при Налаштуванні" #: templates/admin.php:32 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." -msgstr "" +msgstr "Ваш Web-сервер ще не налаштований належним чином для того, щоб дозволити синхронізацію файлів, через те що інтерфейс WebDAV, здається, зламаний." #: templates/admin.php:33 #, php-format msgid "Please double check the installation guides." -msgstr "" +msgstr "Будь ласка, перевірте інструкції по встановленню." #: templates/admin.php:44 msgid "Module 'fileinfo' missing" -msgstr "" +msgstr "Модуль 'fileinfo' відсутній" #: templates/admin.php:47 msgid "" "The PHP module 'fileinfo' is missing. We strongly recommend to enable this " "module to get best results with mime-type detection." -msgstr "" +msgstr "PHP модуль 'fileinfo' відсутній. Ми наполегливо рекомендуємо увімкнути цей модуль, щоб отримати кращі результати при виявленні MIME-типів." #: templates/admin.php:58 msgid "Locale not working" -msgstr "" +msgstr "Локалізація не працює" #: templates/admin.php:61 msgid "" @@ -217,11 +217,11 @@ msgid "" "\"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with" " certain characters in file names. We strongly suggest to install the " "required packages on your system to support en_US.UTF-8/en_US.UTF8." -msgstr "" +msgstr "Цей сервер ownCloud не може встановити мову системи \"en_US.UTF-8\"/\"en_US.UTF8\". Це означає, що можуть бути проблеми з деякими символами в іменах файлів. Ми наполегливо рекомендуємо встановити необхідні пакети у вашій системі для підтримки en_US.UTF-8/en_US.UTF8." #: templates/admin.php:72 msgid "Internet connection not working" -msgstr "" +msgstr "Інтернет-з'єднання не працює" #: templates/admin.php:75 msgid "" @@ -231,90 +231,90 @@ msgid "" "remote and sending of notification emails might also not work. We suggest to" " enable internet connection for this server if you want to have all features" " of ownCloud." -msgstr "" +msgstr "Цей сервер ownCloud не має під'єднання до Інтернету. Це означає, що деякі функції, такі як монтування зовнішніх накопичувачів, повідомлення про оновлення або встановлення допоміжних програм не працюють. Доступ до файлів ​​віддалено та відправка повідомлень електронною поштою також може не працювати. Ми пропонуємо увімкнути під'єднання до Інтернету для даного сервера, якщо ви хочете мати всі можливості ownCloud." #: templates/admin.php:89 msgid "Cron" -msgstr "" +msgstr "Cron" #: templates/admin.php:98 msgid "Execute one task with each page loaded" -msgstr "" +msgstr "Виконати одне завдання для кожної завантаженої сторінки " #: templates/admin.php:108 msgid "" "cron.php is registered at a webcron service. Call the cron.php page in the " "owncloud root once a minute over http." -msgstr "" +msgstr "cron.php зареєстрований в службі webcron. Викликає cron.php сторінку в кореневому каталозі owncloud кожну хвилину по http." #: templates/admin.php:118 msgid "" "Use systems cron service. Call the cron.php file in the owncloud folder via " "a system cronjob once a minute." -msgstr "" +msgstr "Використовується системний cron сервіс. Виклик cron.php файла з owncloud теки за допомогою системного cronjob раз на хвилину." #: templates/admin.php:125 msgid "Sharing" -msgstr "" +msgstr "Спільний доступ" #: templates/admin.php:131 msgid "Enable Share API" -msgstr "" +msgstr "Увімкнути API спільного доступу" #: templates/admin.php:132 msgid "Allow apps to use the Share API" -msgstr "" +msgstr "Дозволити програмам використовувати API спільного доступу" #: templates/admin.php:139 msgid "Allow links" -msgstr "" +msgstr "Дозволити посилання" #: templates/admin.php:140 msgid "Allow users to share items to the public with links" -msgstr "" +msgstr "Дозволити користувачам відкривати спільний доступ до елементів за допомогою посилань" #: templates/admin.php:147 msgid "Allow resharing" -msgstr "" +msgstr "Дозволити перевідкривати спільний доступ" #: templates/admin.php:148 msgid "Allow users to share items shared with them again" -msgstr "" +msgstr "Дозволити користувачам знову відкривати спільний доступ до елементів, які вже відкриті для доступу" #: templates/admin.php:155 msgid "Allow users to share with anyone" -msgstr "" +msgstr "Дозволити користувачам відкривати спільний доступ для всіх" #: templates/admin.php:158 msgid "Allow users to only share with users in their groups" -msgstr "" +msgstr "Дозволити користувачам відкривати спільний доступ лише для користувачів з їхньої групи" #: templates/admin.php:165 msgid "Security" -msgstr "" +msgstr "Безпека" #: templates/admin.php:178 msgid "Enforce HTTPS" -msgstr "" +msgstr "Примусове застосування HTTPS" #: templates/admin.php:179 msgid "" "Enforces the clients to connect to ownCloud via an encrypted connection." -msgstr "" +msgstr "Зобов'язати клієнтів під'єднуватись до ownCloud через шифроване з'єднання." #: templates/admin.php:182 msgid "" "Please connect to this ownCloud instance via HTTPS to enable or disable the " "SSL enforcement." -msgstr "" +msgstr "Будь ласка, під'єднайтесь до цього ownCloud за допомогою HTTPS, щоб увімкнути або вимкнути використання SSL." #: templates/admin.php:192 msgid "Log" -msgstr "" +msgstr "Протокол" #: templates/admin.php:193 msgid "Log level" -msgstr "" +msgstr "Рівень протоколювання" #: templates/admin.php:220 msgid "More" @@ -389,11 +389,11 @@ msgstr "Ви використали %s із доступних #: templates/personal.php:14 msgid "Get the apps to sync your files" -msgstr "" +msgstr "Отримати додатки для синхронізації ваших файлів" #: templates/personal.php:25 msgid "Show First Run Wizard again" -msgstr "" +msgstr "Показувати Майстер Налаштувань знову" #: templates/personal.php:36 templates/users.php:23 templates/users.php:79 msgid "Password" diff --git a/l10n/uk/user_ldap.po b/l10n/uk/user_ldap.po index 2b1bfc0ad9..41cc88be8c 100644 --- a/l10n/uk/user_ldap.po +++ b/l10n/uk/user_ldap.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-02-08 00:10+0100\n" -"PO-Revision-Date: 2013-02-07 23:11+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 10:30+0000\n" +"Last-Translator: volodya327 \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,17 +24,17 @@ msgstr "" msgid "Failed to delete the server configuration" msgstr "Не вдалося видалити конфігурацію сервера" -#: ajax/testConfiguration.php:35 +#: ajax/testConfiguration.php:36 msgid "The configuration is valid and the connection could be established!" msgstr "Конфігурація вірна і зв'язок може бути встановлений ​​!" -#: ajax/testConfiguration.php:37 +#: ajax/testConfiguration.php:39 msgid "" "The configuration is valid, but the Bind failed. Please check the server " "settings and credentials." msgstr "Конфігурація вірна, але встановити зв'язок не вдалося. Будь ласка, перевірте налаштування сервера і облікові дані." -#: ajax/testConfiguration.php:40 +#: ajax/testConfiguration.php:43 msgid "" "The configuration is invalid. Please look in the ownCloud log for further " "details." @@ -89,224 +89,224 @@ msgstr "Увага: Потрібний модуль PHP LDAP не вст msgid "Server configuration" msgstr "Налаштування Сервера" -#: templates/settings.php:17 +#: templates/settings.php:18 msgid "Add Server Configuration" msgstr "Додати налаштування Сервера" -#: templates/settings.php:21 +#: templates/settings.php:23 msgid "Host" msgstr "Хост" -#: templates/settings.php:21 +#: templates/settings.php:25 msgid "" "You can omit the protocol, except you require SSL. Then start with ldaps://" msgstr "Можна не вказувати протокол, якщо вам не потрібен SSL. Тоді почніть з ldaps://" -#: templates/settings.php:22 +#: templates/settings.php:26 msgid "Base DN" msgstr "Базовий DN" -#: templates/settings.php:22 +#: templates/settings.php:27 msgid "One Base DN per line" msgstr "Один Base DN на одній строчці" -#: templates/settings.php:22 +#: templates/settings.php:28 msgid "You can specify Base DN for users and groups in the Advanced tab" msgstr "Ви можете задати Базовий DN для користувачів і груп на вкладинці Додатково" -#: templates/settings.php:23 +#: templates/settings.php:30 msgid "User DN" msgstr "DN Користувача" -#: templates/settings.php:23 +#: templates/settings.php:32 msgid "" "The DN of the client user with which the bind shall be done, e.g. " "uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password " "empty." msgstr "DN клієнтського користувача для прив'язки, наприклад: uid=agent,dc=example,dc=com. Для анонімного доступу, залиште DN і Пароль порожніми." -#: templates/settings.php:24 +#: templates/settings.php:33 msgid "Password" msgstr "Пароль" -#: templates/settings.php:24 +#: templates/settings.php:36 msgid "For anonymous access, leave DN and Password empty." msgstr "Для анонімного доступу, залиште DN і Пароль порожніми." -#: templates/settings.php:25 +#: templates/settings.php:37 msgid "User Login Filter" msgstr "Фільтр Користувачів, що під'єднуються" -#: templates/settings.php:25 +#: templates/settings.php:40 #, php-format msgid "" "Defines the filter to apply, when login is attempted. %%uid replaces the " "username in the login action." msgstr "Визначає фільтр, який застосовується при спробі входу. %%uid замінює ім'я користувача при вході." -#: templates/settings.php:25 +#: templates/settings.php:41 #, php-format msgid "use %%uid placeholder, e.g. \"uid=%%uid\"" msgstr "використовуйте %%uid заповнювач, наприклад: \"uid=%%uid\"" -#: templates/settings.php:26 +#: templates/settings.php:42 msgid "User List Filter" msgstr "Фільтр Списку Користувачів" -#: templates/settings.php:26 +#: templates/settings.php:45 msgid "Defines the filter to apply, when retrieving users." msgstr "Визначає фільтр, який застосовується при отриманні користувачів" -#: templates/settings.php:26 +#: templates/settings.php:46 msgid "without any placeholder, e.g. \"objectClass=person\"." msgstr "без будь-якого заповнювача, наприклад: \"objectClass=person\"." -#: templates/settings.php:27 +#: templates/settings.php:47 msgid "Group Filter" msgstr "Фільтр Груп" -#: templates/settings.php:27 +#: templates/settings.php:50 msgid "Defines the filter to apply, when retrieving groups." msgstr "Визначає фільтр, який застосовується при отриманні груп." -#: templates/settings.php:27 +#: templates/settings.php:51 msgid "without any placeholder, e.g. \"objectClass=posixGroup\"." msgstr "без будь-якого заповнювача, наприклад: \"objectClass=posixGroup\"." -#: templates/settings.php:31 +#: templates/settings.php:55 msgid "Connection Settings" -msgstr "" +msgstr "Налаштування З'єднання" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "Configuration Active" msgstr "Налаштування Активне" -#: templates/settings.php:33 +#: templates/settings.php:57 msgid "When unchecked, this configuration will be skipped." msgstr "Якщо \"галочка\" знята, ця конфігурація буде пропущена." -#: templates/settings.php:34 +#: templates/settings.php:58 msgid "Port" msgstr "Порт" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "Backup (Replica) Host" -msgstr "" +msgstr "Сервер для резервних копій" -#: templates/settings.php:35 +#: templates/settings.php:59 msgid "" "Give an optional backup host. It must be a replica of the main LDAP/AD " "server." -msgstr "" +msgstr "Вкажіть додатковий резервний сервер. Він повинен бути копією головного LDAP/AD сервера." -#: templates/settings.php:36 +#: templates/settings.php:60 msgid "Backup (Replica) Port" -msgstr "" +msgstr "Порт сервера для резервних копій" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "Disable Main Server" -msgstr "" +msgstr "Вимкнути Головний Сервер" -#: templates/settings.php:37 +#: templates/settings.php:61 msgid "When switched on, ownCloud will only connect to the replica server." -msgstr "" +msgstr "Коли увімкнуто, ownCloud буде приєднуватись лише до сервера з резервними копіями." -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Use TLS" msgstr "Використовуйте TLS" -#: templates/settings.php:38 +#: templates/settings.php:62 msgid "Do not use it additionally for LDAPS connections, it will fail." -msgstr "" +msgstr "Не використовуйте це додатково для під'єднання до LDAP, бо виконано не буде." -#: templates/settings.php:39 +#: templates/settings.php:63 msgid "Case insensitve LDAP server (Windows)" msgstr "Нечутливий до регістру LDAP сервер (Windows)" -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Turn off SSL certificate validation." msgstr "Вимкнути перевірку SSL сертифіката." -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "" "If connection only works with this option, import the LDAP server's SSL " "certificate in your ownCloud server." msgstr "Якщо з'єднання працює лише з цією опцією, імпортуйте SSL сертифікат LDAP сервера у ваший ownCloud сервер." -#: templates/settings.php:40 +#: templates/settings.php:64 msgid "Not recommended, use for testing only." msgstr "Не рекомендується, використовуйте лише для тестів." -#: templates/settings.php:41 +#: templates/settings.php:65 msgid "in seconds. A change empties the cache." msgstr "в секундах. Зміна очищує кеш." -#: templates/settings.php:43 +#: templates/settings.php:67 msgid "Directory Settings" -msgstr "" +msgstr "Налаштування Каталога" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "User Display Name Field" msgstr "Поле, яке відображає Ім'я Користувача" -#: templates/settings.php:45 +#: templates/settings.php:69 msgid "The LDAP attribute to use to generate the user`s ownCloud name." msgstr "Атрибут LDAP, який використовується для генерації імен користувачів ownCloud." -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "Base User Tree" msgstr "Основне Дерево Користувачів" -#: templates/settings.php:46 +#: templates/settings.php:70 msgid "One User Base DN per line" msgstr "Один Користувач Base DN на одній строчці" -#: templates/settings.php:47 +#: templates/settings.php:71 msgid "User Search Attributes" -msgstr "" +msgstr "Пошукові Атрибути Користувача" -#: templates/settings.php:47 templates/settings.php:50 +#: templates/settings.php:71 templates/settings.php:74 msgid "Optional; one attribute per line" -msgstr "" +msgstr "Додатково; один атрибут на строчку" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "Group Display Name Field" msgstr "Поле, яке відображає Ім'я Групи" -#: templates/settings.php:48 +#: templates/settings.php:72 msgid "The LDAP attribute to use to generate the groups`s ownCloud name." msgstr "Атрибут LDAP, який використовується для генерації імен груп ownCloud." -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "Base Group Tree" msgstr "Основне Дерево Груп" -#: templates/settings.php:49 +#: templates/settings.php:73 msgid "One Group Base DN per line" msgstr "Одна Група Base DN на одній строчці" -#: templates/settings.php:50 +#: templates/settings.php:74 msgid "Group Search Attributes" -msgstr "" +msgstr "Пошукові Атрибути Групи" -#: templates/settings.php:51 +#: templates/settings.php:75 msgid "Group-Member association" msgstr "Асоціація Група-Член" -#: templates/settings.php:53 +#: templates/settings.php:77 msgid "Special Attributes" -msgstr "" +msgstr "Спеціальні Атрибути" -#: templates/settings.php:56 +#: templates/settings.php:80 msgid "in bytes" msgstr "в байтах" -#: templates/settings.php:58 +#: templates/settings.php:82 msgid "" "Leave empty for user name (default). Otherwise, specify an LDAP/AD " "attribute." msgstr "Залиште порожнім для імені користувача (за замовчанням). Інакше, вкажіть атрибут LDAP/AD." -#: templates/settings.php:62 +#: templates/settings.php:86 msgid "Help" msgstr "Допомога" diff --git a/l10n/uk/user_webdavauth.po b/l10n/uk/user_webdavauth.po index eec04d6335..59983e5020 100644 --- a/l10n/uk/user_webdavauth.po +++ b/l10n/uk/user_webdavauth.po @@ -5,13 +5,14 @@ # Translators: # , 2012. # , 2012. +# пан Володимир , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-15 00:03+0100\n" -"PO-Revision-Date: 2013-01-14 23:04+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-02-19 00:05+0100\n" +"PO-Revision-Date: 2013-02-18 16:40+0000\n" +"Last-Translator: volodya327 \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,15 +22,15 @@ msgstr "" #: templates/settings.php:3 msgid "WebDAV Authentication" -msgstr "" +msgstr "Аутентифікація WebDAV" #: templates/settings.php:4 msgid "URL: http://" msgstr "URL: http://" -#: templates/settings.php:6 +#: templates/settings.php:7 msgid "" "ownCloud will send the user credentials to this URL. This plugin checks the " "response and will interpret the HTTP statuscodes 401 and 403 as invalid " "credentials, and all other responses as valid credentials." -msgstr "" +msgstr "ownCloud надішле облікові дані на цей URL. Цей плагін перевірить відповідь і буде інтерпретувати HTTP коди 401 і 403 як повідомлення про недійсні повноваження, а решту відповідей як дійсні облікові дані." diff --git a/lib/l10n/es_AR.php b/lib/l10n/es_AR.php index a2391a45b2..cfe90f6bc1 100644 --- a/lib/l10n/es_AR.php +++ b/lib/l10n/es_AR.php @@ -25,12 +25,15 @@ "%s set the database host." => "%s Especifique la dirección de la Base de Datos", "PostgreSQL username and/or password not valid" => "Nombre de usuario o contraseña de PostgradeSQL no válido.", "You need to enter either an existing account or the administrator." => "Debe ingresar una cuenta existente o el administrador", +"Oracle username and/or password not valid" => "El nombre de usuario y contraseña no son válidos", "MySQL username and/or password not valid" => "Usuario y/o contraseña MySQL no válido", "DB Error: \"%s\"" => "Error DB: \"%s\"", +"Offending command was: \"%s\"" => "El comando no comprendido es: \"%s\"", "MySQL user '%s'@'localhost' exists already." => "Usuario MySQL '%s'@'localhost' ya existente", "Drop this user from MySQL" => "Borrar este usuario de MySQL", "MySQL user '%s'@'%%' already exists" => "Usuario MySQL '%s'@'%%' ya existente", "Drop this user from MySQL." => "Borrar este usuario de MySQL", +"Offending command was: \"%s\", name: %s, password: %s" => "El comando no comprendido es: \"%s\", nombre: \"%s\", contraseña: \"%s\"", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Tu servidor web no está configurado todavía para permitir sincronización de archivos porque la interfaz WebDAV parece no funcionar.", "Please double check the installation guides." => "Por favor, comprobá nuevamente la guía de instalación.", "seconds ago" => "hace unos segundos", diff --git a/lib/l10n/uk.php b/lib/l10n/uk.php index 053644dded..434ddcd973 100644 --- a/lib/l10n/uk.php +++ b/lib/l10n/uk.php @@ -16,6 +16,8 @@ "Files" => "Файли", "Text" => "Текст", "Images" => "Зображення", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ваш Web-сервер ще не налаштований належним чином для того, щоб дозволити синхронізацію файлів, через те що інтерфейс WebDAV, здається, зламаний.", +"Please double check the installation guides." => "Будь ласка, перевірте інструкції по встановленню.", "seconds ago" => "секунди тому", "1 minute ago" => "1 хвилину тому", "%d minutes ago" => "%d хвилин тому", diff --git a/settings/l10n/de_DE.php b/settings/l10n/de_DE.php index 8ceb90dd76..ee23510536 100644 --- a/settings/l10n/de_DE.php +++ b/settings/l10n/de_DE.php @@ -22,7 +22,7 @@ "Updating...." => "Update...", "Error while updating app" => "Es ist ein Fehler während des Updates aufgetreten", "Error" => "Fehler", -"Updated" => "Geupdated", +"Updated" => "Aktualisiert", "Saving..." => "Speichern...", "deleted" => "gelöscht", "undo" => "rückgängig machen", @@ -45,11 +45,11 @@ "Locale not working" => "Lokalisierung funktioniert nicht", "This ownCloud server can't set system locale to \"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8/en_US.UTF8." => "Dieser ownCloud Server kann die Ländereinstellung nicht auf \"de_DE.UTF-8\"/\"de_DE.UTF8\" ändern. Dies bedeutet dass es Probleme mit bestimmten Zeichen in Dateinamen geben könnte. Wir empfehlen die für de_DE.UTF-8/de_DE.UTF8 benötigten Pakete auf ihrem System zu installieren.", "Internet connection not working" => "Keine Netzwerkverbindung", -"This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "Dieser ownCloud Server hat keine funktionierende Netzwerkverbindung. Dies bedeutet das einige Funktionen wie das einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Netzwerkverbindung für diesen Server zu aktivieren wenn Sie alle Funktionen von ownCloud nutzen wollen.", +"This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "Dieser ownCloud Server hat keine funktionierende Internetverbindung. Dies bedeutet das einige Funktionen wie das einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Internetverbindung für diesen Server zu aktivieren wenn Sie alle Funktionen von ownCloud nutzen wollen.", "Cron" => "Cron", "Execute one task with each page loaded" => "Führe eine Aufgabe bei jedem Laden der Seite aus", "cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http." => "cron.php ist bei einem Webcron-Service registriert. Die cron.php Seite im ownCloud Wurzelverzeichniss wird einmal pro Minute über http abgerufen.", -"Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "Nutze den Cron Systemdienst. Rufe die Datei cron.php im ownCloud Ordner einmal pro Minute über einen Cronjob auf.", +"Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "Nutzen Sie den Cron Systemdienst. Rufen Sie die Datei cron.php im ownCloud Ordner einmal pro Minute über einen Cronjob auf.", "Sharing" => "Teilen", "Enable Share API" => "Teilen-API aktivieren", "Allow apps to use the Share API" => "Erlaube es Anwendungen, die Teilen-API zu benutzen", diff --git a/settings/l10n/es_AR.php b/settings/l10n/es_AR.php index 1e122bdd45..cc655c8155 100644 --- a/settings/l10n/es_AR.php +++ b/settings/l10n/es_AR.php @@ -45,8 +45,10 @@ "Locale not working" => "\"Locale\" no está funcionando", "This ownCloud server can't set system locale to \"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8/en_US.UTF8." => "El servidor ownCloud no puede establecer el sistema locale a \"en_US.UTF-8\"/\"en_US.UTF8\". Esto significa que debe haber u problema con ciertos caracteres en los nombres de archivo. Le recomendamos instalar en su sitema los paquetes requeridos para soportar en_US.UTF-8/en_US.UTF8.", "Internet connection not working" => "La conexión a Internet no esta funcionando. ", +"This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "Este servidor ownCloud no tiene una conexión a internet que funcione. Esto significa que alguno de sus servicios como montar dispositivos externos, notificaciones de actualizaciones o instalar aplicaciones de otros desarrolladores no funcionan. Acceder a archivos remotos y mandar e-mails puede ser que tampoco funcione. Te sugerimos que actives una conexión a internet si querés estas características de ownCloud.", "Cron" => "Cron", "Execute one task with each page loaded" => "Ejecute una tarea con cada pagina cargada.", +"cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http." => "cron.php está registrado como un servicio webcron. Llamar la página cron.php en la raíz de ownCloud una vez al minuto sobre http.", "Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "Usa el servicio de sistema cron. Llama al archivo cron.php en la carpeta de ownCloud a través del sistema cronjob cada un minuto.", "Sharing" => "Compartiendo", "Enable Share API" => "Habilitar Share API", diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php index 19d3a243c9..f6b59c333e 100644 --- a/settings/l10n/fr.php +++ b/settings/l10n/fr.php @@ -37,6 +37,7 @@ "__language_name__" => "Français", "Security Warning" => "Avertissement de sécurité", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Votre dossier data et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess fourni par ownCloud ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de manière à ce que le dossier data ne soit plus accessible ou bien de déplacer le dossier data en dehors du dossier racine des documents du serveur web.", +"Setup Warning" => "Avertissement, problème de configuration", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Votre serveur web, n'est pas correctement configuré pour permettre la synchronisation des fichiers, car l'interface WebDav ne fonctionne pas comme il faut.", "Please double check the installation guides." => "Veuillez vous référer au guide d'installation.", "Module 'fileinfo' missing" => "Module 'fileinfo' manquant", @@ -55,6 +56,9 @@ "Allow links" => "Autoriser les liens", "Allow users to share items to the public with links" => "Autoriser les utilisateurs à partager des éléments publiquement à l'aide de liens", "Allow resharing" => "Autoriser le repartage", +"Allow users to share items shared with them again" => "Autoriser les utilisateurs à partager des éléments qui ont été partagés avec eux", +"Allow users to share with anyone" => "Autoriser les utilisateurs à partager avec tout le monde", +"Allow users to only share with users in their groups" => "Autoriser les utilisateurs à partager avec des utilisateurs de leur groupe uniquement", "Security" => "Sécurité", "Enforce HTTPS" => "Forcer HTTPS", "Enforces the clients to connect to ownCloud via an encrypted connection." => "Forcer les clients à se connecter à Owncloud via une connexion chiffrée.", diff --git a/settings/l10n/ru.php b/settings/l10n/ru.php index e597809e98..d40f976a04 100644 --- a/settings/l10n/ru.php +++ b/settings/l10n/ru.php @@ -26,14 +26,45 @@ "Saving..." => "Сохранение...", "deleted" => "удален", "undo" => "отмена", +"Unable to remove user" => "Невозможно удалить пользователя", "Groups" => "Группы", "Group Admin" => "Группа Администраторы", "Delete" => "Удалить", +"add group" => "добавить группу", +"A valid username must be provided" => "Предоставте подходящее имя пользователя", +"Error creating user" => "Ошибка создания пользователя", +"A valid password must be provided" => "Предоставте подходящий пароль", "__language_name__" => "Русский ", "Security Warning" => "Предупреждение безопасности", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Ваши каталоги данных и файлы, вероятно, доступны из Интернета. Файл .htaccess, предоставляемый ownCloud, не работает. Мы настоятельно рекомендуем Вам настроить вебсервер таким образом, чтобы каталоги данных больше не были доступны, или переместить их за пределы корневого каталога документов веб-сервера.", +"Setup Warning" => "Предупреждение установки", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ваш веб сервер до сих пор не настроен правильно для возможности синхронизации файлов, похоже что проблема в неисправности интерфейса WebDAV.", "Please double check the installation guides." => "Пожалуйста, дважды просмотрите инструкции по установке.", +"Module 'fileinfo' missing" => "Модуль 'fileinfo' потерян", +"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "PHP модуль 'fileinfo' потерян. Мы настоятельно рекомендуем включить этот модуль для получения лучших результатов в mime-типе обнаружения.", +"Locale not working" => "Локализация не работает", +"This ownCloud server can't set system locale to \"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8/en_US.UTF8." => "Этот сервер ownCloud не может поставить локализацию \"en_US.UTF-8\"/\"en_US.UTF8\". Это значит, что могут быть проблемы с опредилёнными символами в именах фалов. Мы настоятельно рекомендуем установить необходимые пакеты на Вашу систему для поддержки en_US.UTF-8/en_US.UTF8.", +"Internet connection not working" => "Интернет соединение не работает", +"This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "Этот сервер ownCloud не имеет ни одного рабочего интернет соединения. Это значит, что некоторые возможности, такие как монтаж внешних носителей, уведомления о обновлениях или установки 3го рода приложений,не работают.", +"Cron" => "Демон", +"Execute one task with each page loaded" => "Выполнять одно задание с каждой загруженной страницей", +"cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http." => "cron.php зарегистрирован на webcron сервисе. Вызов страницы cron.php в корне owncloud раз в минуту через http.", +"Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "Использование системной службы cron. Вызов файла cron.php в папке owncloud через систему cronjob раз в минуту.", +"Sharing" => "Общий доступ", +"Enable Share API" => "Включить API общего доступа", +"Allow apps to use the Share API" => "Позволить программам использовать API общего доступа", +"Allow links" => "Разрешить ссылки", +"Allow users to share items to the public with links" => "Разрешить пользователям открывать в общий доступ эллементы с публичной ссылкой", +"Allow resharing" => "Разрешить переоткрытие общего доступа", +"Allow users to share items shared with them again" => "Позволить пользователям открывать общий доступ к эллементам уже открытым в общий доступ", +"Allow users to share with anyone" => "Разрешить пользователя делать общий доступ любому", +"Allow users to only share with users in their groups" => "Разрешить пользователям делать общий доступ только для пользователей их групп", +"Security" => "Безопасность", +"Enforce HTTPS" => "Принудить к HTTPS", +"Enforces the clients to connect to ownCloud via an encrypted connection." => "Принудить клиентов подключаться к ownCloud через шифрованное подключение.", +"Please connect to this ownCloud instance via HTTPS to enable or disable the SSL enforcement." => "Пожалуйста, подключитесь к этому экземпляру ownCloud через HTTPS для включения или отключения SSL принуждения.", +"Log" => "Лог", +"Log level" => "Уровень лога", "More" => "Больше", "Version" => "Версия", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Разрабатывается сообществом ownCloud, исходный код доступен под лицензией AGPL.", diff --git a/settings/l10n/tr.php b/settings/l10n/tr.php index 64fae2f04a..38a1d5f7f5 100644 --- a/settings/l10n/tr.php +++ b/settings/l10n/tr.php @@ -37,6 +37,7 @@ "Forum" => "Forum", "Bugtracker" => "Hata Takip Sistemi", "Commercial Support" => "Ticari Destek", +"Get the apps to sync your files" => "Dosyalarınızı senkronize etmek için uygulamayı indirin", "Password" => "Parola", "Your password was changed" => "Şifreniz değiştirildi", "Unable to change your password" => "Parolanız değiştirilemiyor", diff --git a/settings/l10n/uk.php b/settings/l10n/uk.php index fb1557577c..b30450e242 100644 --- a/settings/l10n/uk.php +++ b/settings/l10n/uk.php @@ -26,12 +26,45 @@ "Saving..." => "Зберігаю...", "deleted" => "видалені", "undo" => "відмінити", +"Unable to remove user" => "Неможливо видалити користувача", "Groups" => "Групи", "Group Admin" => "Адміністратор групи", "Delete" => "Видалити", +"add group" => "додати групу", +"A valid username must be provided" => "Потрібно задати вірне ім'я користувача", +"Error creating user" => "Помилка при створенні користувача", +"A valid password must be provided" => "Потрібно задати вірний пароль", "__language_name__" => "__language_name__", "Security Warning" => "Попередження про небезпеку", "Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Ваш каталог з даними та Ваші файли можливо доступні з Інтернету. Файл .htaccess, наданий з ownCloud, не працює. Ми наполегливо рекомендуємо Вам налаштувати свій веб-сервер таким чином, щоб каталог data більше не був доступний, або перемістити каталог data за межі кореневого каталогу документів веб-сервера.", +"Setup Warning" => "Попередження при Налаштуванні", +"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ваш Web-сервер ще не налаштований належним чином для того, щоб дозволити синхронізацію файлів, через те що інтерфейс WebDAV, здається, зламаний.", +"Please double check the installation guides." => "Будь ласка, перевірте інструкції по встановленню.", +"Module 'fileinfo' missing" => "Модуль 'fileinfo' відсутній", +"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "PHP модуль 'fileinfo' відсутній. Ми наполегливо рекомендуємо увімкнути цей модуль, щоб отримати кращі результати при виявленні MIME-типів.", +"Locale not working" => "Локалізація не працює", +"This ownCloud server can't set system locale to \"en_US.UTF-8\"/\"en_US.UTF8\". This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support en_US.UTF-8/en_US.UTF8." => "Цей сервер ownCloud не може встановити мову системи \"en_US.UTF-8\"/\"en_US.UTF8\". Це означає, що можуть бути проблеми з деякими символами в іменах файлів. Ми наполегливо рекомендуємо встановити необхідні пакети у вашій системі для підтримки en_US.UTF-8/en_US.UTF8.", +"Internet connection not working" => "Інтернет-з'єднання не працює", +"This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud." => "Цей сервер ownCloud не має під'єднання до Інтернету. Це означає, що деякі функції, такі як монтування зовнішніх накопичувачів, повідомлення про оновлення або встановлення допоміжних програм не працюють. Доступ до файлів ​​віддалено та відправка повідомлень електронною поштою також може не працювати. Ми пропонуємо увімкнути під'єднання до Інтернету для даного сервера, якщо ви хочете мати всі можливості ownCloud.", +"Cron" => "Cron", +"Execute one task with each page loaded" => "Виконати одне завдання для кожної завантаженої сторінки ", +"cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http." => "cron.php зареєстрований в службі webcron. Викликає cron.php сторінку в кореневому каталозі owncloud кожну хвилину по http.", +"Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute." => "Використовується системний cron сервіс. Виклик cron.php файла з owncloud теки за допомогою системного cronjob раз на хвилину.", +"Sharing" => "Спільний доступ", +"Enable Share API" => "Увімкнути API спільного доступу", +"Allow apps to use the Share API" => "Дозволити програмам використовувати API спільного доступу", +"Allow links" => "Дозволити посилання", +"Allow users to share items to the public with links" => "Дозволити користувачам відкривати спільний доступ до елементів за допомогою посилань", +"Allow resharing" => "Дозволити перевідкривати спільний доступ", +"Allow users to share items shared with them again" => "Дозволити користувачам знову відкривати спільний доступ до елементів, які вже відкриті для доступу", +"Allow users to share with anyone" => "Дозволити користувачам відкривати спільний доступ для всіх", +"Allow users to only share with users in their groups" => "Дозволити користувачам відкривати спільний доступ лише для користувачів з їхньої групи", +"Security" => "Безпека", +"Enforce HTTPS" => "Примусове застосування HTTPS", +"Enforces the clients to connect to ownCloud via an encrypted connection." => "Зобов'язати клієнтів під'єднуватись до ownCloud через шифроване з'єднання.", +"Please connect to this ownCloud instance via HTTPS to enable or disable the SSL enforcement." => "Будь ласка, під'єднайтесь до цього ownCloud за допомогою HTTPS, щоб увімкнути або вимкнути використання SSL.", +"Log" => "Протокол", +"Log level" => "Рівень протоколювання", "More" => "Більше", "Version" => "Версія", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Розроблено ownCloud громадою, вихідний код має ліцензію AGPL.", @@ -48,6 +81,8 @@ "Bugtracker" => "БагТрекер", "Commercial Support" => "Комерційна підтримка", "You have used %s of the available %s" => "Ви використали %s із доступних %s", +"Get the apps to sync your files" => "Отримати додатки для синхронізації ваших файлів", +"Show First Run Wizard again" => "Показувати Майстер Налаштувань знову", "Password" => "Пароль", "Your password was changed" => "Ваш пароль змінено", "Unable to change your password" => "Не вдалося змінити Ваш пароль", From 0e9b9f4f5ffb180a872ab06f9d124704372282a3 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Tue, 19 Feb 2013 00:48:38 +0100 Subject: [PATCH 296/719] no pretty print --- apps/files_external/lib/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 3f08610b2b..d31c2f35a6 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -312,7 +312,7 @@ class OC_Mount_Config { } else { $file = OC::$SERVERROOT.'/config/mount.json'; } - $content = json_encode($data, JSON_PRETTY_PRINT); + $content = json_encode($data); @file_put_contents($file, $content); } From 9a93db96421b712d8b8485478db4b84594571c68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Tue, 19 Feb 2013 10:23:34 +0100 Subject: [PATCH 297/719] remove obsolete variables --- apps/files_trashbin/templates/part.list.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/apps/files_trashbin/templates/part.list.php b/apps/files_trashbin/templates/part.list.php index fe8a71f44e..2de0d7ee91 100644 --- a/apps/files_trashbin/templates/part.list.php +++ b/apps/files_trashbin/templates/part.list.php @@ -1,12 +1,8 @@ 200) $relative_date_color = 200; $name = str_replace('+', '%20', urlencode($file['name'])); $name = str_replace('%2F', '/', $name); From 51cef9d8f06586a4e7d4353cb5d7cc3fcddcf97a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Tue, 19 Feb 2013 10:24:21 +0100 Subject: [PATCH 298/719] allow user to delete selected files from the trash bin permanently --- apps/files_trashbin/ajax/delete.php | 52 ++++++++++++++++++------- apps/files_trashbin/js/trash.js | 30 ++++++++++++-- apps/files_trashbin/templates/index.php | 7 ++++ 3 files changed, 72 insertions(+), 17 deletions(-) diff --git a/apps/files_trashbin/ajax/delete.php b/apps/files_trashbin/ajax/delete.php index 7a6bd1342e..d922fafeb2 100644 --- a/apps/files_trashbin/ajax/delete.php +++ b/apps/files_trashbin/ajax/delete.php @@ -3,22 +3,46 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::callCheck(); -$file = $_REQUEST['file']; +$files = $_REQUEST['files']; +$dirlisting = $_REQUEST['dirlisting']; +$list = explode(';', $files); -$path_parts = pathinfo($file); -if ($path_parts['dirname'] == '.') { - $delimiter = strrpos($file, '.d'); - $filename = substr($file, 0, $delimiter); - $timestamp = substr($file, $delimiter+2); -} else { - $filename = $file; - $timestamp = null; +if (!is_array($list)){ + $list = array($list); } -if (OCA\Files_Trashbin\Trashbin::delete($filename, $timestamp)) { - OCP\JSON::success(array("data" => array("filename" => $file))); -} else { +$error = array(); +$success = array(); + +$i = 0; +foreach ($list as $file) { + if ( $dirlisting=='0') { + $delimiter = strrpos($file, '.d'); + $filename = substr($file, 0, $delimiter); + $timestamp = substr($file, $delimiter+2); + } else { + $filename = $file; + $timestamp = null; + } + + if(OCA\Files_Trashbin\Trashbin::delete($filename, $timestamp)) { + $success[$i]['filename'] = $file; + $success[$i]['timestamp'] = $timestamp; + $i++; + } else { + $error[] = $filename; + } +} + +if ( $error ) { + $filelist = ''; + foreach ( $error as $e ) { + $filelist .= $e.', '; + } $l = OC_L10N::get('files_trashbin'); - OCP\JSON::error(array("data" => array("message" => $l->t("Couldn't delete %s permanently", array($file))))); + $message = $l->t("Couldn't restore %s", array(rtrim($filelist, ', '))); + OCP\JSON::error(array("data" => array("message" => $message, + "success" => $success, "error" => $error))); +} else { + OCP\JSON::success(array("data" => array("success" => $success))); } - diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js index 6c810e4c2b..1f4be9f15e 100644 --- a/apps/files_trashbin/js/trash.js +++ b/apps/files_trashbin/js/trash.js @@ -34,7 +34,7 @@ $(document).ready(function() { deleteAction[0].outerHTML = newHTML; $.post(OC.filePath('files_trashbin','ajax','delete.php'), - {file:tr.attr('data-file') }, + {files:tr.attr('data-file') }, function(result){ if ( result.status == 'success' ) { var row = document.getElementById(result.data.filename); @@ -88,7 +88,7 @@ $(document).ready(function() { } } processSelection(); - }); + }); $('.undelete').click('click',function(event) { var spinner = ''; @@ -113,7 +113,31 @@ $(document).ready(function() { } }); }); - + + $('.delete').click('click',function(event) { + console.log("delete selected"); + var spinner = ''; + var files=getSelectedFiles('file'); + var fileslist=files.join(';'); + var dirlisting=getSelectedFiles('dirlisting')[0]; + + for (var i in files) { + var deleteAction = $('tr').filterAttr('data-file',files[i]).children("td.date"); + deleteAction[0].innerHTML = deleteAction[0].innerHTML+spinner; + } + + $.post(OC.filePath('files_trashbin','ajax','delete.php'), + {files:fileslist, dirlisting:dirlisting}, + function(result){ + for (var i = 0; i < result.data.success.length; i++) { + var row = document.getElementById(result.data.success[i].filename); + row.parentNode.removeChild(row); + } + if (result.status != 'success') { + OC.dialogs.alert(result.data.message, 'Error'); + } + }); + }); }); diff --git a/apps/files_trashbin/templates/index.php b/apps/files_trashbin/templates/index.php index c3e51b4bec..c948c94d55 100644 --- a/apps/files_trashbin/templates/index.php +++ b/apps/files_trashbin/templates/index.php @@ -25,6 +25,13 @@
    t( 'Deleted' ); ?> + + + t('Delete')?> + <?php echo $l->t('Delete')?>" /> + +
    + + *dbprefix*files_versions + + + + + user + text + + true + 50 + + + size + text + + true + 50 + + + + +
    + + diff --git a/apps/files_versions/appinfo/version b/apps/files_versions/appinfo/version index e6d5cb833c..e4c0d46e55 100644 --- a/apps/files_versions/appinfo/version +++ b/apps/files_versions/appinfo/version @@ -1 +1 @@ -1.0.2 \ No newline at end of file +1.0.3 \ No newline at end of file diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php index ba9f8ba41c..415830a9a0 100644 --- a/apps/files_versions/lib/versions.php +++ b/apps/files_versions/lib/versions.php @@ -45,6 +45,37 @@ class Storage { return array($uid, $filename); } + /** + * get current size of all versions from a given user + * + * @param $user user who owns the versions + * @return mixed versions size or false if no versions size is stored + */ + private static function getVersionsSize($user) { + $query = \OC_DB::prepare('SELECT size FROM *PREFIX*files_versions WHERE user=?'); + $result = $query->execute(array($user))->fetchAll(); + + if ($result) { + return $result[0]['size']; + } + return false; + } + + /** + * write to the database how much space is in use for versions + * + * @param $user owner of the versions + * @param $size size of the versions + */ + private static function setVersionsSize($user, $size) { + if ( self::getVersionsSize($user) === false) { + $query = \OC_DB::prepare('INSERT INTO *PREFIX*files_versions (size, user) VALUES (?, ?)'); + }else { + $query = \OC_DB::prepare('UPDATE *PREFIX*files_versions SET size=? WHERE user=?'); + } + $query->execute(array($size, $user)); + } + /** * store a new version of a file. */ @@ -73,17 +104,19 @@ class Storage { } // store a new version of a file - $result = $users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.$users_view->filemtime('files'.$filename)); - if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) { + $users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.$users_view->filemtime('files'.$filename)); + $versionsSize = self::getVersionsSize($uid); + if ( $versionsSize === false || $versionSize < 0 ) { $versionsSize = self::calculateSize($uid); } + $versionsSize += $users_view->filesize('files'.$filename); - + // expire old revisions if necessary $newSize = self::expire($filename, $versionsSize); - + if ( $newSize != $versionsSize ) { - \OCP\Config::setAppValue('files_versions', 'size', $versionsSize); + self::setVersionsSize($uid, $newSize); } } } @@ -98,14 +131,15 @@ class Storage { $abs_path = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$filename.'.v'; if( ($versions = self::getVersions($uid, $filename)) ) { - if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) { + $versionsSize = self::getVersionsSize($uid); + if ( $versionsSize === false || $versionsSize < 0 ) { $versionsSize = self::calculateSize($uid); } foreach ($versions as $v) { unlink($abs_path . $v['version']); $versionsSize -= $v['size']; } - \OCP\Config::setAppValue('files_versions', 'size', $versionsSize); + self::setVersionsSize($uid, $versionsSize); } } @@ -314,12 +348,13 @@ class Storage { $quota = \OCP\Util::computerFileSize(\OC_Appconfig::getValue('files', 'default_quota')); } if ( $quota == null ) { - $quota = \OC\Files\Filesystem::free_space('/'); + $quota = \OC\Files\Filesystem::free_space('/') / count(\OCP\User::getUsers()); } // make sure that we have the current size of the version history if ( $versionsSize === null ) { - if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) { + $versionsSize = self::getVersionsSize($uid); + if ( $versionsSize === false || $versionsSize < 0 ) { $versionsSize = self::calculateSize($uid); } } From 2436d01985311b3cd14c2f0dec745081ae7d3507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Thu, 21 Feb 2013 12:37:13 +0100 Subject: [PATCH 332/719] calculate trashbin size per user --- apps/files_trashbin/appinfo/database.xml | 26 ++++++++++++ apps/files_trashbin/appinfo/version | 2 +- apps/files_trashbin/lib/trash.php | 52 ++++++++++++++++++++---- 3 files changed, 71 insertions(+), 9 deletions(-) diff --git a/apps/files_trashbin/appinfo/database.xml b/apps/files_trashbin/appinfo/database.xml index 1144a1c9a9..6f2a27866f 100644 --- a/apps/files_trashbin/appinfo/database.xml +++ b/apps/files_trashbin/appinfo/database.xml @@ -89,4 +89,30 @@ + + + *dbprefix*files_trashsize + + + + + user + text + + true + 50 + + + + size + text + + true + 50 + + + + +
    + diff --git a/apps/files_trashbin/appinfo/version b/apps/files_trashbin/appinfo/version index 49d59571fb..be58634173 100644 --- a/apps/files_trashbin/appinfo/version +++ b/apps/files_trashbin/appinfo/version @@ -1 +1 @@ -0.1 +0.3 diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index 8d54a471b4..898f897273 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -52,8 +52,9 @@ class Trashbin { } else { $type = 'file'; } - - if ( ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) { + + $trashbinSize = self::getTrashbinSize($user); + if ( $trashbinSize === false || $trashbinSize < 0 ) { $trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin')); $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin')); } @@ -89,7 +90,7 @@ class Trashbin { $quota = \OCP\Util::computerFileSize(\OC_Appconfig::getValue('files', 'default_quota')); } if ( $quota == null ) { - $quota = \OC\Files\Filesystem::free_space('/'); + $quota = \OC\Files\Filesystem::free_space('/') / count(\OCP\User::getUsers()); } // calculate available space for trash bin @@ -102,7 +103,8 @@ class Trashbin { } $trashbinSize -= self::expire($availableSpace); - \OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize); + + self::setTrashbinSize($user, $trashbinSize); } @@ -116,7 +118,8 @@ class Trashbin { $user = \OCP\User::getUser(); $view = new \OC_FilesystemView('/'.$user); - if ( ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) { + $trashbinSize = self::getTrashbinSize($user); + if ( $trashbinSize === false || $trashbinSize < 0 ) { $trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin')); $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin')); } @@ -185,7 +188,8 @@ class Trashbin { $query->execute(array($user,$filename,$timestamp)); } - \OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize); + self::setTrashbinSize($user, $trashbinSize); + return true; } else { \OC_Log::write('files_trashbin', 'Couldn\'t restore file from trash bin, '.$filename, \OC_log::ERROR); @@ -205,7 +209,8 @@ class Trashbin { $view = new \OC_FilesystemView('/'.$user); $size = 0; - if ( ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) { + $trashbinSize = self::getTrashbinSize($user); + if ( $trashbinSize === false || $trashbinSize < 0 ) { $trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin')); $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin')); } @@ -242,7 +247,7 @@ class Trashbin { } $view->unlink('/files_trashbin/'.$file); $trashbinSize -= $size; - \OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize); + self::setTrashbinSize($user, $trashbinSize); return $size; } @@ -429,5 +434,36 @@ class Trashbin { } return $size; } + + /** + * get current size of trash bin from a given user + * + * @param $user user who owns the trash bin + * @return mixed trash bin size or false if no trash bin size is stored + */ + private static function getTrashbinSize($user) { + $query = \OC_DB::prepare('SELECT size FROM *PREFIX*files_trashsize WHERE user=?'); + $result = $query->execute(array($user))->fetchAll(); + + if ($result) { + return $result[0]['size']; + } + return false; + } + + /** + * write to the database how much space is in use for the trash bin + * + * @param $user owner of the trash bin + * @param $size size of the trash bin + */ + private static function setTrashbinSize($user, $size) { + if ( self::getTrashbinSize($user) === false) { + $query = \OC_DB::prepare('INSERT INTO *PREFIX*files_trashsize (size, user) VALUES (?, ?)'); + }else { + $query = \OC_DB::prepare('UPDATE *PREFIX*files_trashsize SET size=? WHERE user=?'); + } + $query->execute(array($size, $user)); + } } From 0a5457c5506730bf75a319b74a5bc97169da36d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Thu, 21 Feb 2013 14:40:16 +0100 Subject: [PATCH 333/719] fix getVersions(), we need to get the correct user and filename --- apps/files_versions/ajax/getVersions.php | 4 ++-- apps/files_versions/lib/versions.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/files_versions/ajax/getVersions.php b/apps/files_versions/ajax/getVersions.php index 53fc04625c..8a8fa43080 100644 --- a/apps/files_versions/ajax/getVersions.php +++ b/apps/files_versions/ajax/getVersions.php @@ -1,11 +1,11 @@ 604800), ); - private static function getUidAndFilename($filename) { + public static function getUidAndFilename($filename) { $uid = \OC\Files\Filesystem::getOwner($filename); if ( $uid != \OCP\User::getUser() ) { $info = \OC\Files\Filesystem::getFileInfo($filename); From eceb7341bb48edae49bec93f5df58f04c9eb99ab Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Thu, 21 Feb 2013 16:25:47 +0100 Subject: [PATCH 334/719] make number-input fields look like they should --- core/css/styles.css | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/core/css/styles.css b/core/css/styles.css index 8a01211d8b..0c16b36873 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -36,8 +36,8 @@ filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#35537a', endC .header-right > * { vertical-align:middle; } /* INPUTS */ -input[type="text"], input[type="password"] { cursor:text; } -input[type="text"], input[type="password"], input[type="search"], +input[type="text"], input[type="password"], input[type="number"] { cursor:text; } +input[type="text"], input[type="password"], input[type="search"], input[type="number"], textarea, select, button, .button, #quota, div.jp-progress, .pager li a { width:10em; margin:.3em; padding:.6em .5em .4em; font-size:1em; font-family:Arial, Verdana, sans-serif; @@ -46,10 +46,11 @@ textarea, select, button, .button, #quota, div.jp-progress, .pager li a { -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; } input[type="hidden"] { height:0; width:0; } -input[type="text"], input[type="password"], input[type="search"], textarea { background:#f8f8f8; color:#555; cursor:text; } -input[type="text"], input[type="password"], input[type="search"] { -webkit-appearance:textfield; -moz-appearance:textfield; -webkit-box-sizing:content-box; -moz-box-sizing:content-box; box-sizing:content-box; } +input[type="text"], input[type="password"], input[type="search"], input[type="number"], textarea { background:#f8f8f8; color:#555; cursor:text; } +input[type="text"], input[type="password"], input[type="search"], input[type="number"] { -webkit-appearance:textfield; -moz-appearance:textfield; -webkit-box-sizing:content-box; -moz-box-sizing:content-box; box-sizing:content-box; } input[type="text"]:hover, input[type="text"]:focus, input[type="text"]:active, input[type="password"]:hover, input[type="password"]:focus, input[type="password"]:active, +input[type="number"]:hover, input[type="number"]:focus, input[type="number"]:active, .searchbox input[type="search"]:hover, .searchbox input[type="search"]:focus, .searchbox input[type="search"]:active, textarea:hover, textarea:focus, textarea:active { background-color:#fff; color:#333; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; } input[type="checkbox"] { margin:0; padding:0; height:auto; width:auto; } @@ -196,7 +197,7 @@ label.infield { cursor:text !important; top:1.05em; left:.85em; } #show, #personal-show { display:none; } #show + label { right:1em; top:1.25em!important; } #show:checked + label, #personal-show:checked + label { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; filter:alpha(opacity=80); opacity:.8; } -#show + label, #personal-show + label { +#show + label, #personal-show + label { position:absolute!important; height:14px; width:24px; background-image:url("../img/actions/toggle.png"); background-repeat:no-repeat; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; filter:alpha(opacity=30); opacity:.3; From 89ef06cd799a59f113a354a4fd0311d4e479fe36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Thu, 21 Feb 2013 16:34:22 +0100 Subject: [PATCH 335/719] rename app to 'deleted files' --- apps/files_trashbin/appinfo/info.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_trashbin/appinfo/info.xml b/apps/files_trashbin/appinfo/info.xml index e421733960..7f807da579 100644 --- a/apps/files_trashbin/appinfo/info.xml +++ b/apps/files_trashbin/appinfo/info.xml @@ -1,7 +1,7 @@ files_trashbin - Trash bin + Deleted files Keep a copy of deleted files so that they can be restored if needed AGPL Bjoern Schiessle From 859caee66a107b7e46f3d0bc615acfd112a2981d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Thu, 21 Feb 2013 16:52:18 +0100 Subject: [PATCH 336/719] use :hover pseudo class to set opacity --- apps/files/css/files.css | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/apps/files/css/files.css b/apps/files/css/files.css index dfc2e4c0e2..3cd809038b 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -123,6 +123,24 @@ a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; } .selectedActions a { display:inline; margin:-.5em 0; padding:.5em !important; } .selectedActions a img { position:relative; top:.3em; } +#fileList a.action { + display:none; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + opacity: 0; +} +#fileList tr:hover a.action { + display:inline; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=.5)"; + filter: alpha(opacity=.5); + opacity: .5; +} +#fileList tr:hover a.action:hover { + display:inline; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=1)"; + filter: alpha(opacity=1); + opacity: 1; +} #scanning-message{ top:40%; left:40%; position:absolute; display:none; } From 0dd7fd0599e0757abc81677ccbb8d4a6839a5f79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Thu, 21 Feb 2013 17:38:25 +0100 Subject: [PATCH 337/719] IE8 does not support window.onclick --- apps/files/js/files.js | 2 +- core/js/js.js | 2 +- search/js/result.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 8327460cca..aeb7aedfae 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -524,7 +524,7 @@ $(document).ready(function() { crumb.text(text); } - $(window).click(function(){ + $(document).click(function(){ $('#new>ul').hide(); $('#new').removeClass('active'); $('#new li').each(function(i,element){ diff --git a/core/js/js.js b/core/js/js.js index 6d5d65403f..e373fca886 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -669,7 +669,7 @@ $(document).ready(function(){ $('#settings #expanddiv').click(function(event){ event.stopPropagation(); }); - $(window).click(function(){//hide the settings menu when clicking outside it + $(document).click(function(){//hide the settings menu when clicking outside it $('#settings #expanddiv').slideUp(200); }); diff --git a/search/js/result.js b/search/js/result.js index cadb0d0aab..78fa8efc8e 100644 --- a/search/js/result.js +++ b/search/js/result.js @@ -28,7 +28,7 @@ OC.search.showResults=function(results){ OC.search.hide(); event.stopPropagation(); }); - $(window).click(function(event){ + $(document).click(function(event){ OC.search.hide(); }); OC.search.lastResults=results; From e7d1bbfae34afce54f7652c815aed7a269d1160e Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 21 Feb 2013 18:20:14 +0100 Subject: [PATCH 338/719] fix giant advanced caret in installation --- core/img/actions/caret-dark.png | Bin 0 -> 256 bytes core/img/actions/caret-dark.svg | 102 ++++++++++++++++++++++++++++++++ core/templates/installation.php | 2 +- 3 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 core/img/actions/caret-dark.png create mode 100644 core/img/actions/caret-dark.svg diff --git a/core/img/actions/caret-dark.png b/core/img/actions/caret-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..ce7e1e6980298b86b6eb5bbf9008ea7dfb67699f GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4u@pObhHwBu4M$1`kk47*5m^jW ze;tGwoit`w00kvWTq8(3{0JJ<;>(%z3q(K9nDUfavC`*#6aC7@ ucWthV%HO>3fAYD?)ema8nY^Qq^8MFhS8 + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/core/templates/installation.php b/core/templates/installation.php index b3b7cfc4b8..9cb1d4600d 100644 --- a/core/templates/installation.php +++ b/core/templates/installation.php @@ -49,7 +49,7 @@
    - t( 'Advanced' ); ?> + t( 'Advanced' ); ?>
    From 88bea55f9736bc0ddd1da5a2e055bd6b3494f73b Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Thu, 21 Feb 2013 21:30:25 +0100 Subject: [PATCH 339/719] Update hint by the internal version number. So we don't repeat the 4.5 <=> 4.90 mixup --- lib/util.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/util.php b/lib/util.php index 5d3286204e..ab47e404c9 100755 --- a/lib/util.php +++ b/lib/util.php @@ -73,8 +73,8 @@ class OC_Util { * @return array */ public static function getVersion() { - // hint: We only can count up. So the internal version number - // of ownCloud 4.5 will be 4.90.0. This is not visible to the user + // hint: We only can count up. Reset minor/patchlevel when + // updating major/minor version number. return array(4, 93, 10); } From 629097bee73d70af002a5277529a7afdca75897d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Thu, 21 Feb 2013 22:44:44 +0100 Subject: [PATCH 340/719] increase db fileds for usernames --- apps/files_trashbin/appinfo/database.xml | 4 ++-- apps/files_versions/appinfo/database.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/files_trashbin/appinfo/database.xml b/apps/files_trashbin/appinfo/database.xml index 6f2a27866f..6f12b26d05 100644 --- a/apps/files_trashbin/appinfo/database.xml +++ b/apps/files_trashbin/appinfo/database.xml @@ -26,7 +26,7 @@ text true - 50 + 64 @@ -100,7 +100,7 @@ text true - 50 + 64 diff --git a/apps/files_versions/appinfo/database.xml b/apps/files_versions/appinfo/database.xml index 7cfa5aa79a..d385477698 100644 --- a/apps/files_versions/appinfo/database.xml +++ b/apps/files_versions/appinfo/database.xml @@ -18,7 +18,7 @@ text true - 50 + 64 size From 59a3238d1a0494987546b5ecc14622981b4a2778 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Thu, 14 Feb 2013 22:37:49 +0100 Subject: [PATCH 341/719] Style cleanup files_sharing --- apps/files_sharing/appinfo/update.php | 5 ++++- apps/files_sharing/lib/cache.php | 5 +++-- apps/files_sharing/lib/permissions.php | 3 ++- apps/files_sharing/lib/share/file.php | 14 ++++++++++++-- apps/files_sharing/lib/share/folder.php | 5 +++-- apps/files_sharing/lib/sharedstorage.php | 10 +++++++--- apps/files_sharing/public.php | 7 +++++-- apps/files_sharing/templates/public.php | 20 ++++++++++++++------ 8 files changed, 50 insertions(+), 19 deletions(-) diff --git a/apps/files_sharing/appinfo/update.php b/apps/files_sharing/appinfo/update.php index 1d22b32b50..48e41e9304 100644 --- a/apps/files_sharing/appinfo/update.php +++ b/apps/files_sharing/appinfo/update.php @@ -52,7 +52,10 @@ if (version_compare($installedVersion, '0.3', '<')) { } catch (Exception $e) { $update_error = true; - OCP\Util::writeLog('files_sharing', 'Upgrade Routine: Skipping sharing "'.$row['source'].'" to "'.$shareWith.'" (error is "'.$e->getMessage().'")', OCP\Util::WARN); + OCP\Util::writeLog('files_sharing', + 'Upgrade Routine: Skipping sharing "'.$row['source'].'" to "'.$shareWith + .'" (error is "'.$e->getMessage().'")', + OCP\Util::WARN); } OC_Util::tearDownFS(); } diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php index 9655e44787..fb0f6c7b5a 100644 --- a/apps/files_sharing/lib/cache.php +++ b/apps/files_sharing/lib/cache.php @@ -71,8 +71,9 @@ class Shared_Cache extends Cache { } } else { $query = \OC_DB::prepare( - 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted` - FROM `*PREFIX*filecache` WHERE `fileid` = ?'); + 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`,' + .' `size`, `mtime`, `encrypted`' + .' FROM `*PREFIX*filecache` WHERE `fileid` = ?'); $result = $query->execute(array($file)); $data = $result->fetchRow(); $data['fileid'] = (int)$data['fileid']; diff --git a/apps/files_sharing/lib/permissions.php b/apps/files_sharing/lib/permissions.php index 2b068ff935..72c1ec96c4 100644 --- a/apps/files_sharing/lib/permissions.php +++ b/apps/files_sharing/lib/permissions.php @@ -33,7 +33,8 @@ class Shared_Permissions extends Permissions { if ($fileId == -1) { return \OCP\PERMISSION_READ; } - $source = \OCP\Share::getItemSharedWithBySource('file', $fileId, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE, null, true); + $source = \OCP\Share::getItemSharedWithBySource('file', $fileId, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE, + null, true); if ($source) { return $source['permissions']; } else { diff --git a/apps/files_sharing/lib/share/file.php b/apps/files_sharing/lib/share/file.php index 6d3c55a008..0aeb763d89 100644 --- a/apps/files_sharing/lib/share/file.php +++ b/apps/files_sharing/lib/share/file.php @@ -72,7 +72,11 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent { public function formatItems($items, $format, $parameters = null) { if ($format == self::FORMAT_SHARED_STORAGE) { // Only 1 item should come through for this format call - return array('path' => $items[key($items)]['path'], 'permissions' => $items[key($items)]['permissions'], 'uid_owner' => $items[key($items)]['uid_owner']); + return array( + 'path' => $items[key($items)]['path'], + 'permissions' => $items[key($items)]['permissions'], + 'uid_owner' => $items[key($items)]['uid_owner'] + ); } else if ($format == self::FORMAT_GET_FOLDER_CONTENTS) { $files = array(); foreach ($items as $item) { @@ -99,7 +103,13 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent { } $size += (int)$item['size']; } - return array('fileid' => -1, 'name' => 'Shared', 'mtime' => $mtime, 'mimetype' => 'httpd/unix-directory', 'size' => $size); + return array( + 'fileid' => -1, + 'name' => 'Shared', + 'mtime' => $mtime, + 'mimetype' => 'httpd/unix-directory', + 'size' => $size + ); } else if ($format == self::FORMAT_OPENDIR) { $files = array(); foreach ($items as $item) { diff --git a/apps/files_sharing/lib/share/folder.php b/apps/files_sharing/lib/share/folder.php index 11c8c6b1e8..4426beec63 100644 --- a/apps/files_sharing/lib/share/folder.php +++ b/apps/files_sharing/lib/share/folder.php @@ -33,7 +33,8 @@ class OC_Share_Backend_Folder extends OC_Share_Backend_File implements OCP\Share } while (!empty($parents)) { $parents = "'".implode("','", $parents)."'"; - $query = OC_DB::prepare('SELECT `fileid`, `name`, `mimetype` FROM `*PREFIX*filecache` WHERE `parent` IN ('.$parents.')'); + $query = OC_DB::prepare('SELECT `fileid`, `name`, `mimetype` FROM `*PREFIX*filecache`' + .' WHERE `parent` IN ('.$parents.')'); $result = $query->execute(); $parents = array(); while ($file = $result->fetchRow()) { @@ -47,4 +48,4 @@ class OC_Share_Backend_Folder extends OC_Share_Backend_File implements OCP\Share return $children; } -} \ No newline at end of file +} diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index 65812b7e2f..c7521949da 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -240,7 +240,8 @@ class Shared extends \OC\Files\Storage\Common { public function file_put_contents($path, $data) { if ($source = $this->getSourcePath($path)) { // Check if permission is granted - if (($this->file_exists($path) && !$this->isUpdatable($path)) || ($this->is_dir($path) && !$this->isCreatable($path))) { + if (($this->file_exists($path) && !$this->isUpdatable($path)) + || ($this->is_dir($path) && !$this->isCreatable($path))) { return false; } $info = array( @@ -390,9 +391,12 @@ class Shared extends \OC\Files\Storage\Common { } public static function setup($options) { - if (!\OCP\User::isLoggedIn() || \OCP\User::getUser() != $options['user'] || \OCP\Share::getItemsSharedWith('file')) { + if (!\OCP\User::isLoggedIn() || \OCP\User::getUser() != $options['user'] + || \OCP\Share::getItemsSharedWith('file')) { $user_dir = $options['user_dir']; - \OC\Files\Filesystem::mount('\OC\Files\Storage\Shared', array('sharedFolder' => '/Shared'), $user_dir.'/Shared/'); + \OC\Files\Filesystem::mount('\OC\Files\Storage\Shared', + array('sharedFolder' => '/Shared'), + $user_dir.'/Shared/'); } } diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index 38d598f778..f265a7dd01 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -171,7 +171,9 @@ if (isset($path)) { $list->assign('files', $files, false); $list->assign('disableSharing', true); $list->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=', false); - $list->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=', false); + $list->assign('downloadURL', + OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=', + false); $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', ''); $breadcrumbNav->assign('breadcrumb', $breadcrumb, false); $breadcrumbNav->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=', false); @@ -188,7 +190,8 @@ if (isset($path)) { $folder->assign('usedSpacePercent', 0); $tmpl->assign('folder', $folder->fetchPage(), false); $tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); - $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=' . urlencode($getPath)); + $tmpl->assign('downloadURL', + OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=' . urlencode($getPath)); } else { $tmpl->assign('dir', $dir); diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php index 7776fd63b3..f9ff12679b 100644 --- a/apps/files_sharing/templates/public.php +++ b/apps/files_sharing/templates/public.php @@ -3,15 +3,20 @@
    @@ -27,9 +32,12 @@
    -

    ownCloudt('web services under your control'); ?>

    +

    ownCloud – +t('web services under your control'); ?>

    From fb7de774741c939ffc03b083fe75bae0560b1c85 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Thu, 14 Feb 2013 22:46:28 +0100 Subject: [PATCH 342/719] Style cleanup files_trashbin --- apps/files_trashbin/lib/trash.php | 53 +++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index 8d54a471b4..2b8b32c3a1 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -23,9 +23,11 @@ namespace OCA\Files_Trashbin; class Trashbin { - - const DEFAULT_RETENTION_OBLIGATION=180; // how long do we keep files in the trash bin if no other value is defined in the config file (unit: days) - const DEFAULTMAXSIZE=50; // unit: percentage; 50% of available disk space/quota + // how long do we keep files in the trash bin if no other value is defined in the config file (unit: days) + const DEFAULT_RETENTION_OBLIGATION=180; + + // unit: percentage; 50% of available disk space/quota + const DEFAULTMAXSIZE=50; /** * move file to the trash bin @@ -60,7 +62,8 @@ class Trashbin { $trashbinSize += self::copy_recursive($file_path, 'files_trashbin/'.$deleted.'.d'.$timestamp, $view); if ( $view->file_exists('files_trashbin/'.$deleted.'.d'.$timestamp) ) { - $query = \OC_DB::prepare("INSERT INTO *PREFIX*files_trash (id,timestamp,location,type,mime,user) VALUES (?,?,?,?,?,?)"); + $query = \OC_DB::prepare("INSERT INTO *PREFIX*files_trash (id,timestamp,location,type,mime,user)" + ." VALUES (?,?,?,?,?,?)"); $result = $query->execute(array($deleted, $timestamp, $location, $type, $mime, $user)); if ( !$result ) { // if file couldn't be added to the database than also don't store it in the trash bin. $view->deleteAll('files_trashbin/'.$deleted.'.d'.$timestamp); @@ -70,12 +73,15 @@ class Trashbin { if ( \OCP\App::isEnabled('files_versions') ) { if ( $view->is_dir('files_versions'.$file_path) ) { - $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_versions/'.$file_path)); + $trashbinSize += self::calculateSize( + new \OC_FilesystemView('/'. $user.'/files_versions/'.$file_path) + ); $view->rename('files_versions'.$file_path, 'versions_trashbin/'. $deleted.'.d'.$timestamp); } else if ( $versions = \OCA\Files_Versions\Storage::getVersions($file_path) ) { foreach ($versions as $v) { $trashbinSize += $view->filesize('files_versions'.$v['path'].'.v'.$v['version']); - $view->rename('files_versions'.$v['path'].'.v'.$v['version'], 'versions_trashbin/'. $deleted.'.v'.$v['version'].'.d'.$timestamp); + $view->rename('files_versions'.$v['path'].'.v'.$v['version'], + 'versions_trashbin/'. $deleted.'.v'.$v['version'].'.d'.$timestamp); } } } @@ -121,7 +127,8 @@ class Trashbin { $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin')); } if ( $timestamp ) { - $query = \OC_DB::prepare('SELECT location,type FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?'); + $query = \OC_DB::prepare('SELECT location,type FROM *PREFIX*files_trash' + .' WHERE user=? AND id=? AND timestamp=?'); $result = $query->execute(array($user,$filename,$timestamp))->fetchAll(); if ( count($result) != 1 ) { \OC_Log::write('files_trashbin', 'trash bin database inconsistent!', \OC_Log::ERROR); @@ -131,7 +138,7 @@ class Trashbin { // if location no longer exists, restore file in the root directory $location = $result[0]['location']; if ( $result[0]['location'] != '/' && - (!$view->is_dir('files'.$result[0]['location']) || + (!$view->is_dir('files'.$result[0]['location']) || !$view->isUpdatable('files'.$result[0]['location'])) ) { $location = ''; } @@ -165,16 +172,21 @@ class Trashbin { $versionedFile = $file; } if ( $result[0]['type'] == 'dir' ) { - $trashbinSize -= self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.'versions_trashbin/'. $file)); - $view->rename(\OC_Filesystem::normalizePath('versions_trashbin/'. $file), \OC_Filesystem::normalizePath('files_versions/'.$location.'/'.$filename.$ext)); + $trashbinSize -= self::calculateSize( + new \OC_FilesystemView('/'.$user.'/'.'versions_trashbin/'. $file) + ); + $view->rename(\OC_Filesystem::normalizePath('versions_trashbin/'. $file), + \OC_Filesystem::normalizePath('files_versions/'.$location.'/'.$filename.$ext)); } else if ( $versions = self::getVersionsFromTrash($versionedFile, $timestamp) ) { foreach ($versions as $v) { if ($timestamp ) { $trashbinSize -= $view->filesize('versions_trashbin/'.$versionedFile.'.v'.$v.'.d'.$timestamp); - $view->rename('versions_trashbin/'.$versionedFile.'.v'.$v.'.d'.$timestamp, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); + $view->rename('versions_trashbin/'.$versionedFile.'.v'.$v.'.d'.$timestamp, + 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); } else { $trashbinSize -= $view->filesize('versions_trashbin/'.$versionedFile.'.v'.$v); - $view->rename('versions_trashbin/'.$versionedFile.'.v'.$v, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); + $view->rename('versions_trashbin/'.$versionedFile.'.v'.$v, + 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); } } } @@ -280,7 +292,8 @@ class Trashbin { $query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash WHERE user=?'); $result = $query->execute(array($user))->fetchAll(); - $retention_obligation = \OC_Config::getValue('trashbin_retention_obligation', self::DEFAULT_RETENTION_OBLIGATION); + $retention_obligation = \OC_Config::getValue('trashbin_retention_obligation', + self::DEFAULT_RETENTION_OBLIGATION); $limit = time() - ($retention_obligation * 86400); @@ -289,13 +302,17 @@ class Trashbin { $filename = $r['id']; if ( $r['timestamp'] < $limit ) { if ($view->is_dir('files_trashbin/'.$filename.'.d'.$timestamp)) { - $size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/files_trashbin/'.$filename.'.d'.$timestamp)); + $size += self::calculateSize( + new \OC_FilesystemView('/'.$user.'/files_trashbin/'.$filename.'.d'.$timestamp) + ); } else { $size += $view->filesize('files_trashbin/'.$filename.'.d'.$timestamp); } $view->unlink('files_trashbin/'.$filename.'.d'.$timestamp); if ($r['type'] == 'dir') { - $size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/versions_trashbin/'.$filename.'.d'.$timestamp)); + $size += self::calculateSize( + new \OC_FilesystemView('/'.$user.'/versions_trashbin/'.$filename.'.d'.$timestamp) + ); $view->unlink('versions_trashbin/'.$filename.'.d'.$timestamp); } else if ( $versions = self::getVersionsFromTrash($filename, $timestamp) ) { foreach ($versions as $v) { @@ -312,7 +329,8 @@ class Trashbin { $availableSpace = $availableSpace + $size; // if size limit for trash bin reached, delete oldest files in trash bin if ($availableSpace < 0) { - $query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash WHERE user=? ORDER BY timestamp ASC'); + $query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash' + .' WHERE user=? ORDER BY timestamp ASC'); $result = $query->execute(array($user))->fetchAll(); $length = count($result); $i = 0; @@ -418,7 +436,8 @@ class Trashbin { if (!file_exists($root)) { return 0; } - $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($root), \RecursiveIteratorIterator::CHILD_FIRST); + $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($root), + \RecursiveIteratorIterator::CHILD_FIRST); $size = 0; foreach ($iterator as $path) { From db8dbb9847da1a6f1146153414f8bd3bac4ca980 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Thu, 14 Feb 2013 22:53:30 +0100 Subject: [PATCH 343/719] Style cleanup files_versions --- apps/files_versions/lib/versions.php | 35 ++++++++++++---------- apps/files_versions/templates/history.php | 3 +- apps/files_versions/templates/settings.php | 5 +++- 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php index ba9f8ba41c..39c00001b4 100644 --- a/apps/files_versions/lib/versions.php +++ b/apps/files_versions/lib/versions.php @@ -20,19 +20,18 @@ class Storage { const DEFAULTENABLED=true; const DEFAULTMAXSIZE=50; // unit: percentage; 50% of available disk space/quota - private static $max_versions_per_interval = array( - 1 => array('intervalEndsAfter' => 10, //first 10sec, one version every 2sec - 'step' => 2), - 2 => array('intervalEndsAfter' => 60, //next minute, one version every 10sec - 'step' => 10), - 3 => array('intervalEndsAfter' => 3600, //next hour, one version every minute - 'step' => 60), - 4 => array('intervalEndsAfter' => 86400, //next 24h, one version every hour - 'step' => 3600), - 5 => array('intervalEndsAfter' => 2592000, //next 30days, one version per day - 'step' => 86400), - 6 => array('intervalEndsAfter' => -1, //until the end one version per week - 'step' => 604800), + private static $max_versions_per_interval = array( //first 10sec, one version every 2sec + 1 => array('intervalEndsAfter' => 10, 'step' => 2), + //next minute, one version every 10sec + 2 => array('intervalEndsAfter' => 60, 'step' => 10), + //next hour, one version every minute + 3 => array('intervalEndsAfter' => 3600, 'step' => 60), + //next 24h, one version every hour + 4 => array('intervalEndsAfter' => 86400, 'step' => 3600), + //next 30days, one version per day + 5 => array('intervalEndsAfter' => 2592000, 'step' => 86400), + //until the end one version per week + 6 => array('intervalEndsAfter' => -1, 'step' => 604800), ); private static function getUidAndFilename($filename) { @@ -238,7 +237,10 @@ class Storage { $versions_fileview = new \OC\Files\View('/'.$uid.'/files_versions'); $versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath(''); - $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST); + $iterator = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($versionsRoot), + \RecursiveIteratorIterator::CHILD_FIRST + ); $size = 0; @@ -263,7 +265,10 @@ class Storage { $versions_fileview = new \OC\Files\View('/'.$uid.'/files_versions'); $versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath(''); - $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST); + $iterator = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($versionsRoot), + \RecursiveIteratorIterator::CHILD_FIRST + ); $versions = array(); diff --git a/apps/files_versions/templates/history.php b/apps/files_versions/templates/history.php index 850ece89c9..c450af66ad 100644 --- a/apps/files_versions/templates/history.php +++ b/apps/files_versions/templates/history.php @@ -22,7 +22,8 @@ if( isset( $_['message'] ) ) { foreach ( $_['versions'] as $v ) { echo ' '; echo OCP\Util::formatDate( doubleval($v['version']) ); - echo ' Revert

    '; + echo ' Revert

    '; if ( $v['cur'] ) { echo ' (Current)'; } diff --git a/apps/files_versions/templates/settings.php b/apps/files_versions/templates/settings.php index bfca8366f5..3b8e4baf11 100644 --- a/apps/files_versions/templates/settings.php +++ b/apps/files_versions/templates/settings.php @@ -1,6 +1,9 @@
    t('Files Versioning');?> - />
    + />
    From 1a747b3e480a2b44969b1306a5d354e721781c81 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Thu, 14 Feb 2013 23:19:12 +0100 Subject: [PATCH 344/719] Style cleanup core dir --- core/ajax/share.php | 62 +++++++++++++++++++++++++++------ core/js/config.php | 30 ++++++++++++++-- core/templates/exception.php | 4 ++- core/templates/installation.php | 53 +++++++++++++++++++--------- core/templates/layout.base.php | 3 +- core/templates/layout.guest.php | 6 ++-- core/templates/layout.user.php | 22 ++++++++---- core/templates/login.php | 3 +- core/templates/update.php | 3 +- 9 files changed, 143 insertions(+), 43 deletions(-) diff --git a/core/ajax/share.php b/core/ajax/share.php index 6704a00c5a..332b6a0bed 100644 --- a/core/ajax/share.php +++ b/core/ajax/share.php @@ -34,7 +34,13 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo $shareWith = null; } - $token = OCP\Share::shareItem($_POST['itemType'], $_POST['itemSource'], $shareType, $shareWith, $_POST['permissions']); + $token = OCP\Share::shareItem( + $_POST['itemType'], + $_POST['itemSource'], + $shareType, + $shareWith, + $_POST['permissions'] + ); if (is_string($token)) { OC_JSON::success(array('data' => array('token' => $token))); @@ -59,7 +65,13 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo break; case 'setPermissions': if (isset($_POST['shareType']) && isset($_POST['shareWith']) && isset($_POST['permissions'])) { - $return = OCP\Share::setPermissions($_POST['itemType'], $_POST['itemSource'], $_POST['shareType'], $_POST['shareWith'], $_POST['permissions']); + $return = OCP\Share::setPermissions( + $_POST['itemType'], + $_POST['itemSource'], + $_POST['shareType'], + $_POST['shareWith'], + $_POST['permissions'] + ); ($return) ? OC_JSON::success() : OC_JSON::error(); } break; @@ -86,9 +98,11 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo if ($type === 'dir') $subject = (string)$l->t('User %s shared a folder with you', $displayName); - $text = (string)$l->t('User %s shared the file "%s" with you. It is available for download here: %s', array($displayName, $file, $link)); + $text = (string)$l->t('User %s shared the file "%s" with you. It is available for download here: %s', + array($displayName, $file, $link)); if ($type === 'dir') - $text = (string)$l->t('User %s shared the folder "%s" with you. It is available for download here: %s', array($displayName, $file, $link)); + $text = (string)$l->t('User %s shared the folder "%s" with you. It is available for download here: %s', + array($displayName, $file, $link)); $default_from = OCP\Util::getDefaultEmailAddress('sharing-noreply'); @@ -112,14 +126,29 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo } break; case 'getItem': - if (isset($_GET['itemType']) && isset($_GET['itemSource']) && isset($_GET['checkReshare']) && isset($_GET['checkShares'])) { + if (isset($_GET['itemType']) + && isset($_GET['itemSource']) + && isset($_GET['checkReshare']) + && isset($_GET['checkShares'])) { if ($_GET['checkReshare'] == 'true') { - $reshare = OCP\Share::getItemSharedWithBySource($_GET['itemType'], $_GET['itemSource'], OCP\Share::FORMAT_NONE, null, true); + $reshare = OCP\Share::getItemSharedWithBySource( + $_GET['itemType'], + $_GET['itemSource'], + OCP\Share::FORMAT_NONE, + null, + true + ); } else { $reshare = false; } if ($_GET['checkShares'] == 'true') { - $shares = OCP\Share::getItemShared($_GET['itemType'], $_GET['itemSource'], OCP\Share::FORMAT_NONE, null, true); + $shares = OCP\Share::getItemShared( + $_GET['itemType'], + $_GET['itemSource'], + OCP\Share::FORMAT_NONE, + null, + true + ); } else { $shares = false; } @@ -165,8 +194,15 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo } $offset += $limit; foreach ($users as $uid => $displayName) { - if ((!isset($_GET['itemShares']) || !is_array($_GET['itemShares'][OCP\Share::SHARE_TYPE_USER]) || !in_array($uid, $_GET['itemShares'][OCP\Share::SHARE_TYPE_USER])) && $uid != OC_User::getUser()) { - $shareWith[] = array('label' => $displayName, 'value' => array('shareType' => OCP\Share::SHARE_TYPE_USER, 'shareWith' => $uid)); + if ((!isset($_GET['itemShares']) + || !is_array($_GET['itemShares'][OCP\Share::SHARE_TYPE_USER]) + || !in_array($uid, $_GET['itemShares'][OCP\Share::SHARE_TYPE_USER])) + && $uid != OC_User::getUser()) { + $shareWith[] = array( + 'label' => $displayName, + 'value' => array('shareType' => OCP\Share::SHARE_TYPE_USER, + 'shareWith' => $uid) + ); $count++; } } @@ -179,7 +215,13 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo || !isset($_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP]) || !is_array($_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP]) || !in_array($group, $_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP]))) { - $shareWith[] = array('label' => $group.' (group)', 'value' => array('shareType' => OCP\Share::SHARE_TYPE_GROUP, 'shareWith' => $group)); + $shareWith[] = array( + 'label' => $group.' (group)', + 'value' => array( + 'shareType' => OCP\Share::SHARE_TYPE_GROUP, + 'shareWith' => $group + ) + ); $count++; } } else { diff --git a/core/js/config.php b/core/js/config.php index 9069175ed6..0aaa448228 100644 --- a/core/js/config.php +++ b/core/js/config.php @@ -29,8 +29,33 @@ $array = array( "oc_current_user" => "\"".OC_User::getUser(). "\"", "oc_requesttoken" => "\"".OC_Util::callRegister(). "\"", "datepickerFormatDate" => json_encode($l->l('jsdate', 'jsdate')), - "dayNames" => json_encode(array((string)$l->t('Sunday'), (string)$l->t('Monday'), (string)$l->t('Tuesday'), (string)$l->t('Wednesday'), (string)$l->t('Thursday'), (string)$l->t('Friday'), (string)$l->t('Saturday'))), - "monthNames" => json_encode(array((string)$l->t('January'), (string)$l->t('February'), (string)$l->t('March'), (string)$l->t('April'), (string)$l->t('May'), (string)$l->t('June'), (string)$l->t('July'), (string)$l->t('August'), (string)$l->t('September'), (string)$l->t('October'), (string)$l->t('November'), (string)$l->t('December'))), + "dayNames" => json_encode( + array( + (string)$l->t('Sunday'), + (string)$l->t('Monday'), + (string)$l->t('Tuesday'), + (string)$l->t('Wednesday'), + (string)$l->t('Thursday'), + (string)$l->t('Friday'), + (string)$l->t('Saturday') + ) + ), + "monthNames" => json_encode( + array( + (string)$l->t('January'), + (string)$l->t('February'), + (string)$l->t('March'), + (string)$l->t('April'), + (string)$l->t('May'), + (string)$l->t('June'), + (string)$l->t('July'), + (string)$l->t('August'), + (string)$l->t('September'), + (string)$l->t('October'), + (string)$l->t('November'), + (string)$l->t('December') + ) + ), "firstDay" => json_encode($l->l('firstday', 'firstday')) , ); @@ -38,4 +63,3 @@ $array = array( foreach ($array as $setting => $value) { echo("var ". $setting ."=".$value.";\n"); } -?> \ No newline at end of file diff --git a/core/templates/exception.php b/core/templates/exception.php index 62d6cf2ade..4059c7e047 100644 --- a/core/templates/exception.php +++ b/core/templates/exception.php @@ -5,7 +5,9 @@

    bug tracker, please copy the following informations into the description.

    -

    -

    -

    +

    +

    +

    +

    +

    +

    +

    -

    + data-default="" + title="t('For anonymous access, leave DN and Password empty.'));?>" />

    +

    -
    t('use %%uid placeholder, e.g. "uid=%%uid"');?>

    -

    + data-default="" + title="t('Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action.'));?>" /> +
    t('use %%uid placeholder, e.g. "uid=%%uid"'));?>

    +

    -
    t('without any placeholder, e.g. "objectClass=person".');?>

    -

    + data-default="" + title="t('Defines the filter to apply, when retrieving users.'));?>" /> +
    t('without any placeholder, e.g. "objectClass=person".'));?>

    +

    -
    t('without any placeholder, e.g. "objectClass=posixGroup".');?>

    + data-default="" + title="t('Defines the filter to apply, when retrieving groups.'));?>" /> +
    t('without any placeholder, e.g. "objectClass=posixGroup".'));?>

    -

    t('Connection Settings');?>

    +

    t('Connection Settings'));?>

    -

    -

    -

    -

    -

    -

    -

    >

    -


    t('Not recommended, use for testing only.');?>

    -

    +

    +

    +

    +

    +

    +

    +

    >

    +


    t('Not recommended, use for testing only.'));?>

    +

    -

    t('Directory Settings');?>

    +

    t('Directory Settings'));?>

    -

    -

    -

    -

    -

    -

    -

    +

    +

    +

    +

    +

    +

    +

    -

    t('Special Attributes');?>

    +

    t('Special Attributes'));?>

    -

    -

    -

    -

    +

    +

    +

    +

    - t('Help');?> + t('Help'));?> From 0b5b4955357753e63ab1a88a04341836c37c24ae Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Wed, 27 Feb 2013 22:06:50 +0100 Subject: [PATCH 457/719] [user_webdavauth] From echo to p --- apps/user_webdavauth/templates/settings.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/user_webdavauth/templates/settings.php b/apps/user_webdavauth/templates/settings.php index 45f4d81aec..ec6524ee4f 100755 --- a/apps/user_webdavauth/templates/settings.php +++ b/apps/user_webdavauth/templates/settings.php @@ -1,9 +1,9 @@
    - t('WebDAV Authentication');?> -

    - + t('WebDAV Authentication'));?> +

    + -
    t('ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials.'); ?> +
    t('ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials.')); ?>

    From d7528f06dfd8eb0576bd2cee5ae4230ffb5b5066 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Tue, 26 Feb 2013 22:41:05 +0100 Subject: [PATCH 458/719] Disable query cache for Sqlite --- lib/db.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/db.php b/lib/db.php index 1fd852b370..347deac851 100644 --- a/lib/db.php +++ b/lib/db.php @@ -384,7 +384,10 @@ class OC_DB { $result=new PDOStatementWrapper($result); } if ((is_null($limit) || $limit == -1) and self::$cachingEnabled ) { - self::$preparedQueries[$rawQuery] = $result; + $type = OC_Config::getValue( "dbtype", "sqlite" ); + if( $type != 'sqlite' && $type != 'sqlite3' ) { + self::$preparedQueries[$rawQuery] = $result; + } } return $result; } From 40e51d13d2fd028fa13902b12814532d1de15f5a Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Wed, 27 Feb 2013 22:35:37 +0100 Subject: [PATCH 459/719] Remove uneeded file --- core/templates/exception.php | 32 -------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 core/templates/exception.php diff --git a/core/templates/exception.php b/core/templates/exception.php deleted file mode 100644 index 4059c7e047..0000000000 --- a/core/templates/exception.php +++ /dev/null @@ -1,32 +0,0 @@ -
      -
    • -
      - We're sorry, but something went terribly wrong.
      -

      - bug tracker,' - .' please copy the following informations into the description.

      '; - } else { - echo 'Your administrator has disabled systeminformations.'; - } - ?> -

      -
      -
    • -
    From 229c907a57a4a64730e7b58f59cb8f7f627bfaf3 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Wed, 27 Feb 2013 22:55:39 +0100 Subject: [PATCH 460/719] [core] From echo to p --- core/templates/403.php | 4 +- core/templates/404.php | 4 +- core/templates/edit_categories_dialog.php | 6 +- core/templates/error.php | 4 +- core/templates/installation.php | 82 +++++++------- core/templates/layout.base.php | 16 +-- core/templates/layout.guest.php | 20 ++-- core/templates/layout.user.php | 52 ++++----- core/templates/login.php | 32 +++--- core/templates/part.pagenavi.php | 8 +- core/templates/update.php | 4 +- lib/setup.php | 2 +- lib/template.php | 6 +- lib/templatelayout.php | 10 +- settings/apps.php | 2 +- settings/templates/admin.php | 118 ++++++++++----------- settings/templates/apps.php | 28 ++--- settings/templates/help.php | 18 ++-- settings/templates/oauth-required-apps.php | 6 +- settings/templates/oauth.php | 4 +- settings/templates/personal.php | 68 ++++++------ settings/templates/settings.php | 2 +- settings/templates/users.php | 108 +++++++++---------- 23 files changed, 302 insertions(+), 302 deletions(-) diff --git a/core/templates/403.php b/core/templates/403.php index fbf0e64fdb..6e910fd2e8 100644 --- a/core/templates/403.php +++ b/core/templates/403.php @@ -9,7 +9,7 @@ if(!isset($_)) {//also provide standalone error page ?>
    • - t( 'Access forbidden' ); ?>
      -

      + t( 'Access forbidden' )); ?>
      +

    diff --git a/core/templates/404.php b/core/templates/404.php index c111fd70fa..ee17f0de8e 100644 --- a/core/templates/404.php +++ b/core/templates/404.php @@ -9,7 +9,7 @@ if(!isset($_)) {//also provide standalone error page ?>
    • - t( 'Cloud not found' ); ?>
      -

      + t( 'Cloud not found' )); ?>
      +

    diff --git a/core/templates/edit_categories_dialog.php b/core/templates/edit_categories_dialog.php index d0b7b5ee62..ea155bdf0b 100644 --- a/core/templates/edit_categories_dialog.php +++ b/core/templates/edit_categories_dialog.php @@ -1,19 +1,19 @@ -
    +
      -
    • +
    - +
    diff --git a/core/templates/error.php b/core/templates/error.php index 4f05e008f9..3305f3fba9 100644 --- a/core/templates/error.php +++ b/core/templates/error.php @@ -1,8 +1,8 @@
    • -
      -

      +
      +

    diff --git a/core/templates/installation.php b/core/templates/installation.php index aca9648d0b..f8c91e37eb 100644 --- a/core/templates/installation.php +++ b/core/templates/installation.php @@ -1,8 +1,8 @@ -'> -'> -'> -'> -'> +'> +'> +'> +'> +'>
    0): ?> @@ -10,10 +10,10 @@
  • - -

    + +

    - +
  • @@ -21,54 +21,54 @@
    - t('Security Warning');?> -

    t('No secure random number generator is available, please enable the PHP OpenSSL extension.');?>
    - t('Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account.');?>

    + t('Security Warning'));?> +

    t('No secure random number generator is available, please enable the PHP OpenSSL extension.'));?>
    + t('Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account.'));?>

    - t('Security Warning');?> -

    t('Your data directory and files are probably accessible from the internet because the .htaccess file does not work.');?>
    - t('For information how to properly configure your server, please see the documentation.');?>

    + t('Security Warning'));?> +

    t('Your data directory and files are probably accessible from the internet because the .htaccess file does not work.'));?>
    + t('For information how to properly configure your server, please see the documentation.'));?>

    - t( 'Create an admin account' ); ?> + t( 'Create an admin account' )); ?>

    - - + value="" autocomplete="off" autofocus required /> + +

    - - + value="" /> + +

    - t( 'Advanced' ); ?> + t( 'Advanced' )); ?>
    - + + value="" />
    - t( 'Configure the database' ); ?> + t( 'Configure the database' ); ?>
    -

    SQLite t( 'will be used' ); ?>.

    +

    SQLite t( 'will be used' )); ?>.

    -

    MySQL t( 'will be used' ); ?>.

    +

    MySQL t( 'will be used' )); ?>.

    -

    PostgreSQL t( 'will be used' ); ?>.

    +

    PostgreSQL t( 'will be used' )); ?>.

    @@ -102,7 +102,7 @@ -

    Oracle t( 'will be used' ); ?>.

    +

    Oracle t( 'will be used' )); ?>.

    @@ -114,7 +114,7 @@ -

    MS SQL t( 'will be used' ); ?>.

    +

    MS SQL t( 'will be used' )); ?>.

    @@ -126,19 +126,19 @@

    - + + value="" autocomplete="off" />

    - + + value="" />

    - +

    @@ -146,18 +146,18 @@

    - + + value="" autocomplete="off" />

    - + + value="" />

    -
    +
    diff --git a/core/templates/layout.base.php b/core/templates/layout.base.php index 47d552069a..0ada957478 100644 --- a/core/templates/layout.base.php +++ b/core/templates/layout.base.php @@ -3,26 +3,26 @@ ownCloud - - + + - + - + $value) { - echo "$name='$value' "; + print_unescaped("$name='$value' "); }; - echo '/>'; + print_unescaped('/>)'; ?> - + diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php index a84e2b8cef..03d58c9eae 100644 --- a/core/templates/layout.guest.php +++ b/core/templates/layout.guest.php @@ -4,22 +4,22 @@ ownCloud - - + + - + - + $value) { - echo "$name='$value' "; + print_unescaped("$name='$value' "); }; - echo '/>'; + print_unescaped('/>'); ?> @@ -27,11 +27,11 @@
    - +

    ownCloud – - t( 'web services under your control' ); ?>

    + t( 'web services under your control' )); ?>

    diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index 10540cfe36..2b53cc0ae5 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -1,56 +1,56 @@ - <?php echo !empty($_['application'])?$_['application'].' | ':'' ?>ownCloud - <?php echo !empty($_['user_displayname'])?' ('.$_['user_displayname'].') ':'' ?> + <?php p(!empty($_['application'])?$_['application'].' | ':'') ?>ownCloud + <?php p(!empty($_['user_displayname'])?' ('.$_['user_displayname'].') ':'') ?> - - + + - + - + $value) { - echo "$name='$value' "; + print_unescaped("$name='$value' "); }; - echo '/>'; + print_unescaped('/>'); ?> - +
    @@ -66,11 +66,11 @@