diff --git a/.gitignore b/.gitignore index be69107ca1fa8ea5e412651aee8005b35eb4aa90..25cb1b227f9b12b73404bd328ca4cd240a740232 100644 --- a/.gitignore +++ b/.gitignore @@ -88,5 +88,8 @@ nbproject # Tests - auto-generated files /data-autotest /tests/coverage* +/tests/karma-coverage /tests/autoconfig* /tests/autotest* +/tests/data/lorem-copy.txt +/tests/data/testimage-copy.png diff --git a/.htaccess b/.htaccess index 08e2a82facbfc2a80ef95eb21a3533de1136bc3f..4ba5095e144e2a8a41afca2b1b263e855fe0688f 100755 --- a/.htaccess +++ b/.htaccess @@ -26,7 +26,7 @@ RewriteRule ^.well-known/carddav /remote.php/carddav/ [R] RewriteRule ^.well-known/caldav /remote.php/caldav/ [R] RewriteRule ^apps/calendar/caldav.php remote.php/caldav/ [QSA,L] RewriteRule ^apps/contacts/carddav.php remote.php/carddav/ [QSA,L] -RewriteRule ^apps/([^/]*)/(.*\.(css|php))$ index.php?app=$1&getfile=$2 [QSA,L] +RewriteRule ^apps/([^/]*)/(.*\.(php))$ index.php?app=$1&getfile=$2 [QSA,L] RewriteRule ^remote/(.*) remote.php [QSA,L] @@ -38,3 +38,6 @@ DirectoryIndex index.php index.html AddDefaultCharset utf-8 Options -Indexes + + ModPagespeed Off + diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000000000000000000000000000000000000..f40dd22b5fda8b2d899ee0bcea5adaf124b6d822 --- /dev/null +++ b/.jshintrc @@ -0,0 +1,28 @@ +{ + "camelCase": true, + "eqeqeq": true, + "immed": true, + "latedef": false, + "noarg": true, + "nonbsp": true, + "undef": true, + "unused": true, + "trailing": true, + "maxparams": 5, + "curly": true, + "jquery": true, + "maxlen": 80, + "indent": 4, + "browser": true, + "globals": { + "console": true, + "it": true, + "itx": true, + "expect": true, + "describe": true, + "beforeEach": true, + "afterEach": true, + "sinon": true, + "fakeServer": true + } +} diff --git a/3rdparty b/3rdparty index 98fdc3a4e2f56f7d231470418222162dbf95f46a..7c2c94c904c2721763e97d5bafd115f863080a60 160000 --- a/3rdparty +++ b/3rdparty @@ -1 +1 @@ -Subproject commit 98fdc3a4e2f56f7d231470418222162dbf95f46a +Subproject commit 7c2c94c904c2721763e97d5bafd115f863080a60 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a79fcc08d608d01a4e53e502076f5ebfe8b6eaeb..70bd85fabf0ff48b9a1a702f144f701b47dbdad2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,10 @@ If you have questions about how to install or use ownCloud, please direct these ### Guidelines * Please search the existing issues first, it's likely that your issue was already reported or even fixed. -* This repository is *only* for issues within the ownCloud core code. This also includes the apps: files, encryption, external storage, sharing, deleted files, versions, LDAP, and WebDAV Auth + - Go to one of the repositories, click "issues" and type any word in the top search/command bar. + - You can also filter by appending e. g. "state:open" to the search string. + - More info on [search syntax within github](https://help.github.com/articles/searching-issues) +* This repository ([core](https://github.com/owncloud/core/issues)) is *only* for issues within the ownCloud core code. This also includes the apps: files, encryption, external storage, sharing, deleted files, versions, LDAP, and WebDAV Auth * The issues in other components should be reported in their respective repositories: - [Android client](https://github.com/owncloud/android/issues) - [iOS client](https://github.com/owncloud/ios-issues/issues) @@ -17,6 +20,7 @@ If you have questions about how to install or use ownCloud, please direct these - [Bookmarks](https://github.com/owncloud/bookmarks/issues) - [Calendar](https://github.com/owncloud/calendar/issues) - [Contacts](https://github.com/owncloud/contacts/issues) + - [Documents](https://github.com/owncloud/documents/issues) - [Mail](https://github.com/owncloud/mail/issues) - [Media/Music](https://github.com/owncloud/media/issues) - [News](https://github.com/owncloud/news/issues) diff --git a/README.md b/README.md index ca7b04a925a940f808ea95efdacf2b2802816333..3f76c1a4773bc3a2f37794f9422ae0476b01802e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,9 @@ A personal cloud which runs on your own server. ### Build Status on [Jenkins CI](https://ci.owncloud.org/) -Git master: [![Build Status](https://ci.owncloud.org/buildStatus/icon?job=ownCloud-Server%28master%29)](https://ci.owncloud.org/job/ownCloud-Server%28master%29/) +Git master: [![Build Status](https://ci.owncloud.org/job/server-master-linux/badge/icon)](https://ci.owncloud.org/job/server-master-linux/) + +Quality: [![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/owncloud/core/badges/quality-score.png?s=ce2f5ded03d4ac628e9ee5c767243fa7412e644f)](https://scrutinizer-ci.com/g/owncloud/core/) ### Installation instructions http://doc.owncloud.org/server/5.0/developer_manual/app/gettingstarted.html diff --git a/apps/files/ajax/getstoragestats.php b/apps/files/ajax/getstoragestats.php index 32a77bff6c3054961a364ce1561b5c5e82f04f85..dd7c7dc5571c09c2ecac5442f27ce2495f8e641b 100644 --- a/apps/files/ajax/getstoragestats.php +++ b/apps/files/ajax/getstoragestats.php @@ -3,7 +3,13 @@ // only need filesystem apps $RUNTIME_APPTYPES = array('filesystem'); +$dir = '/'; + +if (isset($_GET['dir'])) { + $dir = $_GET['dir']; +} + OCP\JSON::checkLoggedIn(); // send back json -OCP\JSON::success(array('data' => \OCA\Files\Helper::buildFileStorageStatistics('/'))); +OCP\JSON::success(array('data' => \OCA\Files\Helper::buildFileStorageStatistics($dir))); diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php index 350fc7fa5f6512bac59c5d6996018ad935c7aec5..0be38c3b96f6749fd04deded1595e95079fd26aa 100644 --- a/apps/files/ajax/list.php +++ b/apps/files/ajax/list.php @@ -10,7 +10,7 @@ OCP\JSON::checkLoggedIn(); // Load the files $dir = isset( $_GET['dir'] ) ? $_GET['dir'] : ''; - +$dir = \OC\Files\Filesystem::normalizePath($dir); if (!\OC\Files\Filesystem::is_dir($dir . '/')) { header("HTTP/1.0 404 Not Found"); exit(); diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php index 76c03c87a51fae369584d99af1b93f86bd6adaf2..1853098c5072cd06b9d158f41c178356b7d6a851 100644 --- a/apps/files/ajax/newfile.php +++ b/apps/files/ajax/newfile.php @@ -20,15 +20,6 @@ if($source) { OC_JSON::callCheck(); } -if($filename == '') { - OCP\JSON::error(array("data" => array( "message" => "Empty Filename" ))); - exit(); -} -if(strpos($filename, '/')!==false) { - OCP\JSON::error(array("data" => array( "message" => "Invalid Filename" ))); - exit(); -} - function progress($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) { static $filesize = 0; static $lastsize = 0; @@ -44,7 +35,7 @@ function progress($notification_code, $severity, $message, $message_code, $bytes if (!isset($filesize)) { } else { $progress = (int)(($bytes_transferred/$filesize)*100); - if($progress>$lastsize) {//limit the number or messages send + if($progress>$lastsize) { //limit the number or messages send $eventSource->send('progress', $progress); } $lastsize=$progress; @@ -54,24 +45,74 @@ function progress($notification_code, $severity, $message, $message_code, $bytes } } +$l10n = \OC_L10n::get('files'); + +$result = array( + 'success' => false, + 'data' => NULL + ); + +if(trim($filename) === '') { + $result['data'] = array('message' => (string)$l10n->t('File name cannot be empty.')); + OCP\JSON::error($result); + exit(); +} + +if(strpos($filename, '/') !== false) { + $result['data'] = array('message' => (string)$l10n->t('File name must not contain "/". Please choose a different name.')); + OCP\JSON::error($result); + exit(); +} + +if (!\OC\Files\Filesystem::file_exists($dir . '/')) { + $result['data'] = array('message' => (string)$l10n->t( + 'The target folder has been moved or deleted.'), + 'code' => 'targetnotfound' + ); + OCP\JSON::error($result); + exit(); +} + +//TODO why is stripslashes used on foldername in newfolder.php but not here? $target = $dir.'/'.$filename; +if (\OC\Files\Filesystem::file_exists($target)) { + $result['data'] = array('message' => (string)$l10n->t( + 'The name %s is already used in the folder %s. Please choose a different name.', + array($filename, $dir)) + ); + OCP\JSON::error($result); + exit(); +} + if($source) { if(substr($source, 0, 8)!='https://' and substr($source, 0, 7)!='http://') { - OCP\JSON::error(array("data" => array( "message" => "Not a valid source" ))); + OCP\JSON::error(array('data' => array('message' => $l10n->t('Not a valid source')))); + exit(); + } + + if (!ini_get('allow_url_fopen')) { + $eventSource->send('error', array('message' => $l10n->t('Server is not allowed to open URLs, please check the server configuration'))); + $eventSource->close(); exit(); } $ctx = stream_context_create(null, array('notification' =>'progress')); - $sourceStream=fopen($source, 'rb', false, $ctx); - $result=\OC\Files\Filesystem::file_put_contents($target, $sourceStream); + $sourceStream=@fopen($source, 'rb', false, $ctx); + $result = 0; + if (is_resource($sourceStream)) { + $result=\OC\Files\Filesystem::file_put_contents($target, $sourceStream); + } if($result) { $meta = \OC\Files\Filesystem::getFileInfo($target); $mime=$meta['mimetype']; $id = $meta['fileid']; - $eventSource->send('success', array('mime'=>$mime, 'size'=>\OC\Files\Filesystem::filesize($target), 'id' => $id)); + $eventSource->send('success', array('mime' => $mime, 'size' => \OC\Files\Filesystem::filesize($target), 'id' => $id, 'etag' => $meta['etag'])); } else { - $eventSource->send('error', "Error while downloading ".$source. ' to '.$target); + $eventSource->send('error', array('message' => $l10n->t('Error while downloading %s to %s', array($source, $target)))); + } + if (is_resource($sourceStream)) { + fclose($sourceStream); } $eventSource->close(); exit(); @@ -99,9 +140,10 @@ if($source) { 'mime' => $mime, 'size' => $size, 'content' => $content, + 'etag' => $meta['etag'], ))); exit(); } } -OCP\JSON::error(array("data" => array( "message" => "Error when creating the file" ))); +OCP\JSON::error(array('data' => array( 'message' => $l10n->t('Error when creating the file') ))); diff --git a/apps/files/ajax/newfolder.php b/apps/files/ajax/newfolder.php index e26e1238bc60dfac8c850b992cee0d2cf8953217..4cfcae3090d58da8ad3201480d95278c30851a97 100644 --- a/apps/files/ajax/newfolder.php +++ b/apps/files/ajax/newfolder.php @@ -10,25 +10,56 @@ OCP\JSON::callCheck(); $dir = isset( $_POST['dir'] ) ? stripslashes($_POST['dir']) : ''; $foldername = isset( $_POST['foldername'] ) ? stripslashes($_POST['foldername']) : ''; -if(trim($foldername) == '') { - OCP\JSON::error(array("data" => array( "message" => "Empty Foldername" ))); +$l10n = \OC_L10n::get('files'); + +$result = array( + 'success' => false, + 'data' => NULL + ); + +if(trim($foldername) === '') { + $result['data'] = array('message' => $l10n->t('Folder name cannot be empty.')); + OCP\JSON::error($result); + exit(); +} + +if(strpos($foldername, '/') !== false) { + $result['data'] = array('message' => $l10n->t('Folder name must not contain "/". Please choose a different name.')); + OCP\JSON::error($result); exit(); } -if(strpos($foldername, '/')!==false) { - OCP\JSON::error(array("data" => array( "message" => "Invalid Foldername" ))); + +if (!\OC\Files\Filesystem::file_exists($dir . '/')) { + $result['data'] = array('message' => (string)$l10n->t( + 'The target folder has been moved or deleted.'), + 'code' => 'targetnotfound' + ); + OCP\JSON::error($result); + exit(); +} + +//TODO why is stripslashes used on foldername here but not in newfile.php? +$target = $dir . '/' . stripslashes($foldername); + +if (\OC\Files\Filesystem::file_exists($target)) { + $result['data'] = array('message' => $l10n->t( + 'The name %s is already used in the folder %s. Please choose a different name.', + array($foldername, $dir)) + ); + OCP\JSON::error($result); exit(); } -if(\OC\Files\Filesystem::mkdir($dir . '/' . stripslashes($foldername))) { - if ( $dir != '/') { +if(\OC\Files\Filesystem::mkdir($target)) { + if ( $dir !== '/') { $path = $dir.'/'.$foldername; } else { $path = '/'.$foldername; } $meta = \OC\Files\Filesystem::getFileInfo($path); $id = $meta['fileid']; - OCP\JSON::success(array("data" => array('id'=>$id))); + OCP\JSON::success(array('data' => array('id' => $id))); exit(); } -OCP\JSON::error(array("data" => array( "message" => "Error when creating the folder" ))); +OCP\JSON::error(array('data' => array( 'message' => $l10n->t('Error when creating the folder') ))); diff --git a/apps/files/ajax/rawlist.php b/apps/files/ajax/rawlist.php index 531481a84c00e98f46aaeb07ca730d0c91b4568e..40da32b223a4cf37259476dafc714f3617db80ef 100644 --- a/apps/files/ajax/rawlist.php +++ b/apps/files/ajax/rawlist.php @@ -3,10 +3,6 @@ // only need filesystem apps $RUNTIME_APPTYPES=array('filesystem'); -// Init owncloud - -require_once 'lib/template.php'; - OCP\JSON::checkLoggedIn(); // Load the files diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php index 0920bf62109d7adcb42bb8523a2f69b525d06caa..8f6c42d6620b49a7718c07085038b8e81cf4d69d 100644 --- a/apps/files/ajax/upload.php +++ b/apps/files/ajax/upload.php @@ -7,6 +7,9 @@ OCP\JSON::setContentTypeHeader('text/plain'); // If not, check the login. // If no token is sent along, rely on login only +$allowedPermissions = OCP\PERMISSION_ALL; +$errorCode = null; + $l = OC_L10N::get('files'); if (empty($_POST['dirToken'])) { // The standard case, files are uploaded through logged in users :) @@ -17,6 +20,9 @@ if (empty($_POST['dirToken'])) { die(); } } else { + // return only read permissions for public upload + $allowedPermissions = OCP\PERMISSION_READ; + $linkItem = OCP\Share::getShareByToken($_POST['dirToken']); if ($linkItem === false) { OCP\JSON::error(array('data' => array_merge(array('message' => $l->t('Invalid Token'))))); @@ -29,6 +35,7 @@ if (empty($_POST['dirToken'])) { // resolve reshares $rootLinkItem = OCP\Share::resolveReShare($linkItem); + OCP\JSON::checkUserExists($rootLinkItem['uid_owner']); // Setup FS with owner OC_Util::tearDownFS(); OC_Util::setupFS($rootLinkItem['uid_owner']); @@ -110,30 +117,37 @@ if (strpos($dir, '..') === false) { || (isset($_POST['resolution']) && $_POST['resolution']==='replace') ) { // upload and overwrite file - if (is_uploaded_file($files['tmp_name'][$i]) and \OC\Files\Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) { - - // updated max file size after upload - $storageStats = \OCA\Files\Helper::buildFileStorageStatistics($dir); - - $meta = \OC\Files\Filesystem::getFileInfo($target); - if ($meta === false) { - $error = $l->t('Upload failed. Could not get file info.'); + try + { + if (is_uploaded_file($files['tmp_name'][$i]) and \OC\Files\Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) { + + // updated max file size after upload + $storageStats = \OCA\Files\Helper::buildFileStorageStatistics($dir); + + $meta = \OC\Files\Filesystem::getFileInfo($target); + if ($meta === false) { + $error = $l->t('The target folder has been moved or deleted.'); + $errorCode = 'targetnotfound'; + } else { + $result[] = array('status' => 'success', + 'mime' => $meta['mimetype'], + 'mtime' => $meta['mtime'], + 'size' => $meta['size'], + 'id' => $meta['fileid'], + 'name' => basename($target), + 'etag' => $meta['etag'], + 'originalname' => $files['tmp_name'][$i], + 'uploadMaxFilesize' => $maxUploadFileSize, + 'maxHumanFilesize' => $maxHumanFileSize, + 'permissions' => $meta['permissions'] & $allowedPermissions + ); + } + } else { - $result[] = array('status' => 'success', - 'mime' => $meta['mimetype'], - 'mtime' => $meta['mtime'], - 'size' => $meta['size'], - 'id' => $meta['fileid'], - 'name' => basename($target), - 'originalname' => $files['tmp_name'][$i], - 'uploadMaxFilesize' => $maxUploadFileSize, - 'maxHumanFilesize' => $maxHumanFileSize, - 'permissions' => $meta['permissions'], - ); + $error = $l->t('Upload failed. Could not find uploaded file'); } - - } else { - $error = $l->t('Upload failed. Could not find uploaded file'); + } catch(Exception $ex) { + $error = $ex->getMessage(); } } else { @@ -148,10 +162,11 @@ if (strpos($dir, '..') === false) { 'size' => $meta['size'], 'id' => $meta['fileid'], 'name' => basename($target), + 'etag' => $meta['etag'], 'originalname' => $files['tmp_name'][$i], 'uploadMaxFilesize' => $maxUploadFileSize, 'maxHumanFilesize' => $maxHumanFileSize, - 'permissions' => $meta['permissions'], + 'permissions' => $meta['permissions'] & $allowedPermissions ); } } @@ -164,5 +179,5 @@ if ($error === false) { OCP\JSON::encodedPrint($result); exit(); } else { - OCP\JSON::error(array('data' => array_merge(array('message' => $error), $storageStats))); + OCP\JSON::error(array(array('data' => array_merge(array('message' => $error, 'code' => $errorCode), $storageStats)))); } diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php index 0c1f2e6580c778f4fc995236b3c5c3929906db03..ef22fe921889318768048caa1e29357ddf1e8814 100644 --- a/apps/files/appinfo/remote.php +++ b/apps/files/appinfo/remote.php @@ -39,7 +39,7 @@ $rootDir = new OC_Connector_Sabre_Directory(''); $objectTree = new \OC\Connector\Sabre\ObjectTree($rootDir); // Fire up server -$server = new Sabre_DAV_Server($objectTree); +$server = new OC_Connector_Sabre_Server($objectTree); $server->httpRequest = $requestBackend; $server->setBaseUri($baseuri); @@ -48,9 +48,11 @@ $defaults = new OC_Defaults(); $server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend, $defaults->getName())); $server->addPlugin(new Sabre_DAV_Locks_Plugin($lockBackend)); $server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload +$server->addPlugin(new OC_Connector_Sabre_FilesPlugin()); $server->addPlugin(new OC_Connector_Sabre_AbortedUploadDetectionPlugin()); $server->addPlugin(new OC_Connector_Sabre_QuotaPlugin()); $server->addPlugin(new OC_Connector_Sabre_MaintenancePlugin()); +$server->addPlugin(new OC_Connector_Sabre_ExceptionLoggerPlugin('webdav')); // And off we go! $server->exec(); diff --git a/apps/files/css/files.css b/apps/files/css/files.css index b3ecd1dab93e4cb62cb167881960c7b6aba9f49b..5526abaf6e2763ce961988b826058611476869ba 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -3,73 +3,77 @@ See the COPYING-README file. */ /* FILE MENU */ -.actions { padding:.3em; height:2em; width: 100%; } +.actions { padding:5px; height:32px; width: 100%; } .actions input, .actions button, .actions .button { margin:0; float:left; } .actions .button a { color: #555; } .actions .button a:hover, .actions .button a:active { color: #333; } + #new { - height:17px; margin:0 0 0 1em; z-index:1010; float:left; + z-index: 1010; + float: left; + padding: 0 !important; /* override default control bar button padding */ +} +#trash { + margin-right: 8px; + float: right; + z-index: 1010; + padding: 10px; + font-weight: normal; +} +#new>a { + padding: 14px 10px; + position: relative; + top: 7px; +} +#new.active { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom: none; } -#new.active { border-bottom-left-radius:0; border-bottom-right-radius:0; border-bottom:none; } -#new>a { padding:.5em 1.2em .3em; } #new>ul { - display:none; position:fixed; min-width:7em; z-index:10; - padding:.5em; padding-bottom:0; margin-top:.075em; margin-left:-.5em; + display: none; + position: fixed; + min-width: 112px; + z-index: 10; + padding: 8px; + padding-bottom: 0; + margin-top: 14px; + margin-left: -1px; text-align:left; - background:#f8f8f8; border:1px solid #ddd; border-radius:10px; border-top-left-radius:0; + background: #f8f8f8; + border: 1px solid #ddd; + border-radius: 5px; + border-top-left-radius: 0; box-shadow:0 2px 7px rgba(170,170,170,.4); } -#new>ul>li { height:36px; margin:.3em; padding-left:3em; padding-bottom:0.1em; +#new>ul>li { height:36px; margin:5px; padding-left:48px; padding-bottom:2px; background-repeat:no-repeat; cursor:pointer; } #new>ul>li>p { cursor:pointer; padding-top: 7px; padding-bottom: 7px;} -#new>ul>li>form>input { - padding: 5px; - margin: 2px 0; -} - -#trash { margin: 0 1em; z-index:1010; float: right; } -#upload { - height:27px; padding:0; margin-left:0.2em; overflow:hidden; -} -#upload a { - position:relative; display:block; width:100%; height:27px; - cursor:pointer; z-index:10; - background-image:url('%webroot%/core/img/actions/upload.svg'); - background-repeat:no-repeat; - background-position:7px 6px; - opacity:0.65; -} -.file_upload_target { display:none; } -.file_upload_form { display:inline; float:left; margin:0; padding:0; cursor:pointer; overflow:visible; } -#file_upload_start { - left:0; top:0; width:28px; height:27px; padding:0; - font-size:1em; - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; - z-index:20; position:relative; cursor:pointer; overflow:hidden; +#new .error, #fileList .error { + color: #e9322d; + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; } -#uploadprogresswrapper { +/* FILE TABLE */ + +#filestable { position: relative; - display: inline; + top: 44px; + width: 100%; } -#uploadprogressbar { - position:relative; - float: left; - margin-left: 12px; - width: 130px; - height: 26px; - display:inline-block; +/* make sure there's enough room for the file actions */ +#body-user #filestable { + min-width: 750px; } -#uploadprogressbar + stop { - font-size: 13px; +#body-user #controls { + min-width: 600px; } - -/* FILE TABLE */ - -#filestable { position: relative; top:37px; width:100%; } -#filestable tbody tr { background-color:#fff; height:2.5em; } +#filestable tbody tr { background-color:#fff; height:40px; } #filestable tbody tr:hover, tbody tr:active { background-color: rgb(240,240,240); } @@ -84,7 +88,7 @@ span.extension, span.uploading, td.date { color:#999; } span.extension { text-transform:lowercase; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70); opacity:.7; -webkit-transition:opacity 300ms; -moz-transition:opacity 300ms; -o-transition:opacity 300ms; transition:opacity 300ms; } tr:hover span.extension { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; color:#777; } table tr.mouseOver td { background-color:#eee; } -table th { height:2em; padding:0 .5em; color:#999; } +table th { height:24px; padding:0 8px; color:#999; } table th .name { position: absolute; left: 55px; @@ -99,7 +103,7 @@ table td { } table th#headerName { position: relative; - width: 100em; /* not really sure why this works better than 100% … table styling */ + width: 9999px; /* not really sure why this works better than 100% … table styling */ padding: 0; } #headerName-container { @@ -107,36 +111,45 @@ table th#headerName { height: 50px; } table th#headerSize, table td.filesize { - min-width: 3em; - padding: 0 1em; + min-width: 48px; + padding: 0 16px; text-align: right; } table th#headerDate, table td.date { -moz-box-sizing: border-box; box-sizing: border-box; position: relative; - min-width: 11em; - display: block; - height: 51px; + /* this can not be just width, both need to be set … table styling */ + min-width: 176px; + max-width: 176px; } /* Multiselect bar */ #filestable.multiselect { - top: 88px; + top: 95px; +} +table.multiselect thead { + position: fixed; + top: 89px; + z-index: 10; + -moz-box-sizing: border-box; + box-sizing: border-box; + left: 0; + padding-left: 80px; + width: 100%; } -table.multiselect thead { position:fixed; top:82px; z-index:1; -moz-box-sizing: border-box; box-sizing: border-box; left: 0; padding-left: 80px; width:100%; } table.multiselect thead th { - background-color: rgba(210,210,210,.7); + background-color: rgba(220,220,220,.8); color: #000; font-weight: bold; border-bottom: 0; } table.multiselect #headerName { position: relative; - width: 100%; + width: 9999px; /* when we use 100%, the styling breaks on mobile … table styling */ } -table td.selection, table th.selection, table td.fileaction { width:2em; text-align:center; } +table td.selection, table th.selection, table td.fileaction { width:32px; text-align:center; } table td.filename a.name { position:relative; /* Firefox needs to explicitly have this default set … */ -moz-box-sizing: border-box; @@ -154,8 +167,8 @@ table td.filename input.filename { margin-left: 2px; cursor: text; } -table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete { padding:.2em .5em .5em .3em; } -table td.filename .nametext, .uploadtext, .modified { float:left; padding:.3em 0; } +table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete { padding:3px 8px 8px 3px; } +table td.filename .nametext, .uploadtext, .modified { float:left; padding:14px 0; } #modified { position: absolute; @@ -163,8 +176,15 @@ table td.filename .nametext, .uploadtext, .modified { float:left; padding:.3em 0 } .modified { position: relative; - top: 11px; - left: 5px; + padding-left: 8px; + overflow: hidden; + text-overflow: ellipsis; + width: 90%; +} +/* ellipsize long modified dates to make room for showing delete button */ +#fileList tr:hover .modified, +#fileList tr:focus .modified { + width: 75%; } /* TODO fix usability bug (accidental file/folder selection) */ @@ -177,9 +197,12 @@ table td.filename .nametext { text-overflow: ellipsis; max-width: 800px; } -table td.filename .uploadtext { font-weight:normal; margin-left:.5em; } -table td.filename form { font-size:.85em; margin-left:3em; margin-right:3em; } +table td.filename .uploadtext { font-weight:normal; margin-left:8px; } +table td.filename form { font-size:14px; margin-left:48px; margin-right:48px; } +.ie8 input[type="checkbox"]{ + padding: 0; +} /* File checkboxes */ #fileList tr td.filename>input[type="checkbox"]:first-child { @@ -210,6 +233,11 @@ table td.filename form { font-size:.85em; margin-left:3em; margin-right:3em; } width: 50px; z-index: 5; } +#fileList tr td.filename>input[type="checkbox"]{ + /* sometimes checkbox height is bigger (KDE/Qt), so setting to absolute + * to prevent it to increase the height */ + position: absolute; +} #fileList tr td.filename>input[type="checkbox"] + label { left: 0; } @@ -228,33 +256,29 @@ table td.filename form { font-size:.85em; margin-left:3em; margin-right:3em; } -webkit-transition:background-image 500ms; -moz-transition:background-image 500ms; -o-transition:background-image 500ms; transition:background-image 500ms; } +#fileList tr td.filename a.name label { + position: absolute; + width: 80%; + height: 50px; +} + #uploadsize-message,#delete-confirm { display:none; } /* File actions */ .fileactions { position: absolute; - top: 16px; + top: 14px; right: 0; font-size: 11px; } -#fileList tr:hover .fileactions { /* background to distinguish when overlaying with file names */ - background-color: rgba(240,240,240,0.898); - box-shadow: -5px 0 7px rgba(240,240,240,0.898); -} -#fileList tr.selected:hover .fileactions, #fileList tr.mouseOver .fileactions { /* slightly darker color for selected rows */ - background-color: rgba(230,230,230,.9); - box-shadow: -5px 0 7px rgba(230,230,230,.9); -} -#fileList .fileactions a.action img { position:relative; top:.2em; } -#fileList img.move2trash { display:inline; margin:-.5em 0; padding:1em .5em 1em .5em !important; float:right; } +#fileList img.move2trash { display:inline; margin:-8px 0; padding:16px 8px 16px 8px !important; float:right; } #fileList a.action.delete { position: absolute; right: 0; - top: 0; - margin: 0; - padding: 15px 14px 19px !important; + padding: 28px 14px 19px !important; } + a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; } /* Actions for selected files */ @@ -271,19 +295,23 @@ a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; } } .selectedActions a img { position:relative; - top:.3em; + top:5px; } #fileList a.action { display: inline; - margin: -.5em 0; + margin: -8px 0; padding: 18px 8px !important; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); opacity: 0; display:none; } + +#fileList a.action[data-action="Rename"] { + padding:18px 14px !important; +} #fileList tr:hover a.action, #fileList a.action.permanent { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; filter: alpha(opacity=50); @@ -319,14 +347,13 @@ a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; } #scanning-message{ top:40%; left:40%; position:absolute; display:none; } -div.crumb a{ padding:0.9em 0 0.7em 0; color:#555; } - table.dragshadow { width:auto; } table.dragshadow td.filename { - padding-left:36px; + padding-left:60px; padding-right:16px; + height: 36px; } table.dragshadow td.size { padding-right:8px; diff --git a/apps/files/css/upload.css b/apps/files/css/upload.css index 2d11e41ba88e3b09520d421d4decf28a95a6c339..06b4d4655fec7ceb29cb6d5279442454eccd0ebd 100644 --- a/apps/files/css/upload.css +++ b/apps/files/css/upload.css @@ -1,38 +1,60 @@ - #upload { - height:27px; padding:0; margin-left:0.2em; overflow:hidden; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 36px; + width: 39px; + padding: 0 !important; /* override default control bar button padding */ + margin-left: 3px; + overflow: hidden; vertical-align: top; } #upload a { - position:relative; display:block; width:100%; height:27px; - cursor:pointer; z-index:10; - background-image:url('%webroot%/core/img/actions/upload.svg'); - background-repeat:no-repeat; - background-position:7px 6px; - opacity:0.65; + position: relative; + display: block; + width: 100%; + height: 44px; + width: 44px; + margin: -5px -3px; + cursor: pointer; + z-index: 10; + opacity: .65; } .file_upload_target { display:none; } .file_upload_form { display:inline; float:left; margin:0; padding:0; cursor:pointer; overflow:visible; } #file_upload_start { - float: left; - left:0; top:0; width:28px; height:27px; padding:0; - font-size:1em; + position: relative; + left: 0; + top: 0; + width: 44px; + height: 44px; + margin: -5px -3px; + padding: 0; + font-size: 16px; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; - z-index:20; position:relative; cursor:pointer; overflow:hidden; + z-index: 20; + cursor: pointer; + overflow: hidden; } #uploadprogresswrapper { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; display: inline-block; vertical-align: top; - margin:0.3em; - height: 29px; + height: 36px; + box-sizing: border-box; +} +#uploadprogresswrapper > input[type='button'] { + height: 36px; } #uploadprogressbar { position:relative; float: left; margin-left: 12px; width: 130px; - height: 26px; + height: 36px; display:inline-block; } #uploadprogressbar + stop { @@ -94,11 +116,6 @@ .oc-dialog .fileexists .conflict input[type='checkbox'] { float: left; } -.oc-dialog .fileexists .toggle { - background-image: url('%webroot%/core/img/actions/triangle-e.png'); - width: 16px; - height: 16px; -} .oc-dialog .fileexists #allfileslabel { float:right; } diff --git a/apps/files/download.php b/apps/files/download.php index e3fe24e45d733398f8fb9ae67585b911db544c58..6b055e99a537dfea6f3b89b946c075f6c112f4c2 100644 --- a/apps/files/download.php +++ b/apps/files/download.php @@ -37,12 +37,7 @@ if(!\OC\Files\Filesystem::file_exists($filename)) { $ftype=\OC\Files\Filesystem::getMimeType( $filename ); header('Content-Type:'.$ftype); -if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) { - header( 'Content-Disposition: attachment; filename="' . rawurlencode( basename($filename) ) . '"' ); -} else { - header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode( basename($filename) ) - . '; filename="' . rawurlencode( basename($filename) ) . '"' ); -} +OCP\Response::setContentDispositionHeader(basename($filename), 'attachment'); OCP\Response::disableCaching(); header('Content-Length: '.\OC\Files\Filesystem::filesize($filename)); diff --git a/apps/files/index.php b/apps/files/index.php index 6f22fdfdc19bb4fccfbfae5d0b8b5d2c7b2dd9d5..dd63f29bc28aaf28249dab4c5b8fa879b42baf3a 100644 --- a/apps/files/index.php +++ b/apps/files/index.php @@ -36,6 +36,7 @@ OCP\Util::addscript('files', 'filelist'); OCP\App::setActiveNavigationEntry('files_index'); // Load the files $dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : ''; +$dir = \OC\Files\Filesystem::normalizePath($dir); // Redirect if directory does not exist if (!\OC\Files\Filesystem::is_dir($dir . '/')) { header('Location: ' . OCP\Util::getScriptName() . ''); @@ -62,7 +63,6 @@ $files = array(); $user = OC_User::getUser(); if (\OC\Files\Cache\Upgrade::needUpgrade($user)) { //dont load anything if we need to upgrade the cache $needUpgrade = true; - $freeSpace = 0; } else { if ($isIE8){ // after the redirect above, the URL will have a format @@ -76,7 +76,6 @@ if (\OC\Files\Cache\Upgrade::needUpgrade($user)) { //dont load anything if we ne else{ $files = \OCA\Files\Helper::getFiles($dir); } - $freeSpace = \OC\Files\Filesystem::free_space($dir); $needUpgrade = false; } @@ -102,10 +101,15 @@ if ($needUpgrade) { } else { // information about storage capacities $storageInfo=OC_Helper::getStorageInfo($dir); + $freeSpace=$storageInfo['free']; + $uploadLimit=OCP\Util::uploadLimit(); $maxUploadFilesize=OCP\Util::maxUploadFilesize($dir); $publicUploadEnabled = \OC_Appconfig::getValue('core', 'shareapi_allow_public_upload', 'yes'); + // if the encryption app is disabled, than everything is fine (INIT_SUCCESSFUL status code) + $encryptionInitStatus = 2; if (OC_App::isEnabled('files_encryption')) { - $publicUploadEnabled = 'no'; + $session = new \OCA\Encryption\Session(new \OC\Files\View('/')); + $encryptionInitStatus = $session->getInitialized(); } $trashEnabled = \OCP\App::isEnabled('files_trashbin'); @@ -113,27 +117,39 @@ if ($needUpgrade) { if ($trashEnabled) { $trashEmpty = \OCA\Files_Trashbin\Trashbin::isEmpty($user); } - + + $isCreatable = \OC\Files\Filesystem::isCreatable($dir . '/'); + $fileHeader = (!isset($files) or count($files) > 0); + $emptyContent = ($isCreatable and !$fileHeader) or $ajaxLoad; + OCP\Util::addscript('files', 'fileactions'); OCP\Util::addscript('files', 'files'); OCP\Util::addscript('files', 'keyboardshortcuts'); $tmpl = new OCP\Template('files', 'index', 'user'); $tmpl->assign('fileList', $list->fetchPage()); $tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage()); - $tmpl->assign('dir', \OC\Files\Filesystem::normalizePath($dir)); - $tmpl->assign('isCreatable', \OC\Files\Filesystem::isCreatable($dir . '/')); + $tmpl->assign('dir', $dir); + $tmpl->assign('isCreatable', $isCreatable); $tmpl->assign('permissions', $permissions); $tmpl->assign('files', $files); $tmpl->assign('trash', $trashEnabled); $tmpl->assign('trashEmpty', $trashEmpty); - $tmpl->assign('uploadMaxFilesize', $maxUploadFilesize); + $tmpl->assign('uploadMaxFilesize', $maxUploadFilesize); // minimium of freeSpace and uploadLimit $tmpl->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize)); + $tmpl->assign('freeSpace', $freeSpace); + $tmpl->assign('uploadLimit', $uploadLimit); // PHP upload limit $tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); $tmpl->assign('usedSpacePercent', (int)$storageInfo['relative']); $tmpl->assign('isPublic', false); $tmpl->assign('publicUploadEnabled', $publicUploadEnabled); $tmpl->assign("encryptedFiles", \OCP\Util::encryptedFiles()); + $tmpl->assign("mailNotificationEnabled", \OC_Appconfig::getValue('core', 'shareapi_allow_mail_notification', 'yes')); + $tmpl->assign("allowShareWithLink", \OC_Appconfig::getValue('core', 'shareapi_allow_links', 'yes')); + $tmpl->assign("encryptionInitStatus", $encryptionInitStatus); $tmpl->assign('disableSharing', false); $tmpl->assign('ajaxLoad', $ajaxLoad); + $tmpl->assign('emptyContent', $emptyContent); + $tmpl->assign('fileHeader', $fileHeader); + $tmpl->printPage(); } diff --git a/apps/files/js/admin.js b/apps/files/js/admin.js index bfa966706351e27b941e561b93c8a279f5c22e58..f735079fcbe5178cefe1805cec623e0483aa4eb8 100644 --- a/apps/files/js/admin.js +++ b/apps/files/js/admin.js @@ -1,3 +1,13 @@ +/* + * Copyright (c) 2014 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + function switchPublicFolder() { var publicEnable = $('#publicEnable').is(':checked'); @@ -10,7 +20,7 @@ function switchPublicFolder() $(document).ready(function(){ switchPublicFolder(); // Execute the function after loading DOM tree $('#publicEnable').click(function(){ - switchPublicFolder(); // To get rid of onClick() + switchPublicFolder(); // To get rid of onClick() }); $('#allowZipDownload').bind('change', function() { diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js index b52221ac1fc1953f234a62823c5cd54cffbab055..f962a7044a853796451a0f415be288d952e52837 100644 --- a/apps/files/js/file-upload.js +++ b/apps/files/js/file-upload.js @@ -1,3 +1,13 @@ +/* + * Copyright (c) 2014 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + /** * The file upload code uses several hooks to interact with blueimps jQuery file upload library: * 1. the core upload handling hooks are added when initializing the plugin, @@ -8,6 +18,8 @@ * - TODO music upload button */ +/* global OC, t, n */ + /** * Function that will allow us to know if Ajax uploads are supported * @link https://github.com/New-Bamboo/example-ajax-upload/blob/master/public/index.html @@ -21,13 +33,13 @@ function supportAjaxUploadWithProgress() { var fi = document.createElement('INPUT'); fi.type = 'file'; return 'files' in fi; - }; + } // Are progress events supported? function supportAjaxUploadProgressEvents() { var xhr = new XMLHttpRequest(); return !! (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload)); - }; + } // Is FormData supported? function supportFormData() { @@ -41,26 +53,6 @@ function supportAjaxUploadWithProgress() { */ OC.Upload = { _uploads: [], - /** - * cancels a single upload, - * @deprecated because it was only used when a file currently beeing uploaded was deleted. Now they are added after - * they have been uploaded. - * @param {string} dir - * @param {string} filename - * @returns {unresolved} - */ - cancelUpload:function(dir, filename) { - var self = this; - var deleted = false; - //FIXME _selections - jQuery.each(this._uploads, function(i, jqXHR) { - if (selection.dir === dir && selection.uploads[filename]) { - deleted = self.deleteSelectionUpload(selection, filename); - return false; // end searching through selections - } - }); - return deleted; - }, /** * deletes the jqHXR object from a data selection * @param {object} data @@ -73,12 +65,12 @@ OC.Upload = { */ cancelUploads:function() { this.log('canceling uploads'); - jQuery.each(this._uploads,function(i, jqXHR){ + jQuery.each(this._uploads,function(i, jqXHR) { jqXHR.abort(); }); this._uploads = []; }, - rememberUpload:function(jqXHR){ + rememberUpload:function(jqXHR) { if (jqXHR) { this._uploads.push(jqXHR); } @@ -88,10 +80,10 @@ OC.Upload = { * returns true if any hxr has the state 'pending' * @returns {boolean} */ - isProcessing:function(){ + isProcessing:function() { var count = 0; - jQuery.each(this._uploads,function(i, data){ + jQuery.each(this._uploads,function(i, data) { if (data.state() === 'pending') { count++; } @@ -134,7 +126,7 @@ OC.Upload = { * handle skipping an upload * @param {object} data */ - onSkip:function(data){ + onSkip:function(data) { this.log('skip', null, data); this.deleteUpload(data); }, @@ -142,21 +134,25 @@ OC.Upload = { * handle replacing a file on the server with an uploaded file * @param {object} data */ - onReplace:function(data){ + onReplace:function(data) { this.log('replace', null, data); - data.data.append('resolution', 'replace'); + if (data.data) { + data.data.append('resolution', 'replace'); + } else { + data.formData.push({name:'resolution', value:'replace'}); //hack for ie8 + } data.submit(); }, /** * handle uploading a file and letting the server decide a new name * @param {object} data */ - onAutorename:function(data){ + onAutorename:function(data) { this.log('autorename', null, data); if (data.data) { data.data.append('resolution', 'autorename'); } else { - data.formData.push({name:'resolution',value:'autorename'}); //hack for ie8 + data.formData.push({name:'resolution', value:'autorename'}); //hack for ie8 } data.submit(); }, @@ -178,7 +174,7 @@ OC.Upload = { * @param {function} callbacks.onChooseConflicts * @param {function} callbacks.onCancel */ - checkExistingFiles: function (selection, callbacks){ + checkExistingFiles: function (selection, callbacks) { // TODO check filelist before uploading and show dialog on conflicts, use callbacks callbacks.onNoConflicts(selection); } @@ -231,13 +227,21 @@ $(document).ready(function() { var selection = data.originalFiles.selection; // add uploads - if ( selection.uploads.length < selection.filesToUpload ){ + if ( selection.uploads.length < selection.filesToUpload ) { // remember upload selection.uploads.push(data); } //examine file var file = data.files[0]; + try { + // FIXME: not so elegant... need to refactor that method to return a value + Files.isFileNameValid(file.name); + } + catch (errorMessage) { + data.textStatus = 'invalidcharacters'; + data.errorThrown = errorMessage; + } if (file.type === '' && file.size === 4096) { data.textStatus = 'dirorzero'; @@ -249,10 +253,22 @@ $(document).ready(function() { // add size selection.totalBytes += file.size; - //check max upload size - if (selection.totalBytes > $('#max_upload').val()) { + // check PHP upload limit + if (selection.totalBytes > $('#upload_limit').val()) { + data.textStatus = 'sizeexceedlimit'; + data.errorThrown = t('files', 'Total file size {size1} exceeds upload limit {size2}', { + 'size1': humanFileSize(selection.totalBytes), + 'size2': humanFileSize($('#upload_limit').val()) + }); + } + + // check free space + if (selection.totalBytes > $('#free_space').val()) { data.textStatus = 'notenoughspace'; - data.errorThrown = t('files', 'Not enough space available'); + data.errorThrown = t('files', 'Not enough free space, you are uploading {size1} but only {size2} is left', { + 'size1': humanFileSize(selection.totalBytes), + 'size2': humanFileSize($('#free_space').val()) + }); } // end upload for whole selection on error @@ -319,16 +335,22 @@ $(document).ready(function() { OC.Upload.log('fail', e, data); if (typeof data.textStatus !== 'undefined' && data.textStatus !== 'success' ) { if (data.textStatus === 'abort') { - $('#notification').text(t('files', 'Upload cancelled.')); + OC.Notification.show(t('files', 'Upload cancelled.')); } else { // HTTP connection problem - $('#notification').text(data.errorThrown); + OC.Notification.show(data.errorThrown); + if (data.result) { + var result = JSON.parse(data.result); + if (result && result[0] && result[0].data && result[0].data.code === 'targetnotfound') { + // abort upload of next files if any + OC.Upload.cancelUploads(); + } + } } - $('#notification').fadeIn(); - //hide notification after 5 sec + //hide notification after 10 sec setTimeout(function() { - $('#notification').fadeOut(); - }, 5000); + OC.Notification.hide(); + }, 10000); } OC.Upload.deleteUpload(data); }, @@ -350,8 +372,13 @@ $(document).ready(function() { var result=$.parseJSON(response); delete data.jqXHR; - - if(typeof result[0] === 'undefined') { + + if (result.status === 'error' && result.data && result.data.message){ + data.textStatus = 'servererror'; + data.errorThrown = result.data.message; + var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload'); + fu._trigger('fail', e, data); + } else if (typeof result[0] === 'undefined') { data.textStatus = 'servererror'; data.errorThrown = t('files', 'Could not get result from server.'); var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload'); @@ -365,7 +392,7 @@ $(document).ready(function() { } else if (result[0].status !== 'success') { //delete data.jqXHR; data.textStatus = 'servererror'; - data.errorThrown = result.data.message; // error message has been translated on server + data.errorThrown = result[0].data.message; // error message has been translated on server var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload'); fu._trigger('fail', e, data); } @@ -384,13 +411,13 @@ $(document).ready(function() { var fileupload = $('#file_upload_start').fileupload(file_upload_param); window.file_upload_param = fileupload; - if(supportAjaxUploadWithProgress()) { + if (supportAjaxUploadWithProgress()) { // add progress handlers fileupload.on('fileuploadadd', function(e, data) { OC.Upload.log('progress handle fileuploadadd', e, data); //show cancel button - //if(data.dataType !== 'iframe') { //FIXME when is iframe used? only for ie? + //if (data.dataType !== 'iframe') { //FIXME when is iframe used? only for ie? // $('#uploadprogresswrapper input.stop').show(); //} }); @@ -415,7 +442,7 @@ $(document).ready(function() { $('#uploadprogresswrapper input.stop').fadeOut(); $('#uploadprogressbar').fadeOut(); - + Files.updateStorageStatistics(); }); fileupload.on('fileuploadfail', function(e, data) { OC.Upload.log('progress handle fileuploadfail', e, data); @@ -435,7 +462,9 @@ $(document).ready(function() { // http://stackoverflow.com/a/6700/11236 var size = 0, key; for (key in obj) { - if (obj.hasOwnProperty(key)) size++; + if (obj.hasOwnProperty(key)) { + size++; + } } return size; }; @@ -448,56 +477,65 @@ $(document).ready(function() { }); //add multiply file upload attribute to all browsers except konqueror (which crashes when it's used) - if(navigator.userAgent.search(/konqueror/i)==-1){ - $('#file_upload_start').attr('multiple','multiple'); + if (navigator.userAgent.search(/konqueror/i) === -1) { + $('#file_upload_start').attr('multiple', 'multiple'); } //if the breadcrumb is to long, start by replacing foldernames with '...' except for the current folder var crumb=$('div.crumb').first(); - while($('div.controls').height()>40 && crumb.next('div.crumb').length>0){ + while($('div.controls').height() > 40 && crumb.next('div.crumb').length > 0) { crumb.children('a').text('...'); - crumb=crumb.next('div.crumb'); + crumb = crumb.next('div.crumb'); } //if that isn't enough, start removing items from the breacrumb except for the current folder and it's parent - var crumb=$('div.crumb').first(); - var next=crumb.next('div.crumb'); - while($('div.controls').height()>40 && next.next('div.crumb').length>0){ + var crumb = $('div.crumb').first(); + var next = crumb.next('div.crumb'); + while($('div.controls').height()>40 && next.next('div.crumb').length > 0) { crumb.remove(); - crumb=next; - next=crumb.next('div.crumb'); + crumb = next; + next = crumb.next('div.crumb'); } //still not enough, start shorting down the current folder name var crumb=$('div.crumb>a').last(); - while($('div.controls').height()>40 && crumb.text().length>6){ - var text=crumb.text() - text=text.substr(0,text.length-6)+'...'; + while($('div.controls').height() > 40 && crumb.text().length > 6) { + var text=crumb.text(); + text = text.substr(0,text.length-6)+'...'; crumb.text(text); } - $(document).click(function(){ + $(document).click(function(ev) { + // do not close when clicking in the dropdown + if ($(ev.target).closest('#new').length){ + return; + } $('#new>ul').hide(); $('#new').removeClass('active'); - $('#new li').each(function(i,element){ - if($(element).children('p').length==0){ + if ($('#new .error').length > 0) { + $('#new .error').tipsy('hide'); + } + $('#new li').each(function(i,element) { + if ($(element).children('p').length === 0) { $(element).children('form').remove(); $(element).append('

'+$(element).data('text')+'

'); } }); }); - $('#new').click(function(event){ + $('#new').click(function(event) { event.stopPropagation(); }); - $('#new>a').click(function(){ + $('#new>a').click(function() { $('#new>ul').toggle(); $('#new').toggleClass('active'); }); - $('#new li').click(function(){ - if($(this).children('p').length==0){ + $('#new li').click(function() { + if ($(this).children('p').length === 0) { return; } + + $('#new .error').tipsy('hide'); - $('#new li').each(function(i,element){ - if($(element).children('p').length==0){ + $('#new li').each(function(i,element) { + if ($(element).children('p').length === 0) { $(element).children('form').remove(); $(element).append('

'+$(element).data('text')+'

'); } @@ -507,129 +545,180 @@ $(document).ready(function() { var text=$(this).children('p').text(); $(this).data('text',text); $(this).children('p').remove(); - var form=$('
'); - var input=$(''); + + // add input field + var form = $('
'); + var input = $(''); + var newName = $(this).attr('data-newname') || ''; + if (newName) { + input.val(newName); + } form.append(input); $(this).append(form); + var lastPos; + var checkInput = function () { + var filename = input.val(); + if (type === 'web' && filename.length === 0) { + throw t('files', 'URL cannot be empty'); + } else if (type !== 'web' && !Files.isFileNameValid(filename)) { + // Files.isFileNameValid(filename) throws an exception itself + } else if ($('#dir').val() === '/' && filename === 'Shared') { + throw t('files', 'In the home folder \'Shared\' is a reserved filename'); + } else if (FileList.inList(filename)) { + throw t('files', '{new_name} already exists', {new_name: filename}); + } else { + return true; + } + }; + + // verify filename on typing + input.keyup(function(event) { + try { + checkInput(); + input.tipsy('hide'); + input.removeClass('error'); + } catch (error) { + input.attr('title', error); + input.tipsy({gravity: 'w', trigger: 'manual'}); + input.tipsy('show'); + input.addClass('error'); + } + }); + input.focus(); - form.submit(function(event){ + // pre select name up to the extension + lastPos = newName.lastIndexOf('.'); + if (lastPos === -1) { + lastPos = newName.length; + } + input.selectRange(0, lastPos); + form.submit(function(event) { event.stopPropagation(); event.preventDefault(); - var newname=input.val(); - if(type == 'web' && newname.length == 0) { - OC.Notification.show(t('files', 'URL cannot be empty.')); - return false; - } else if (type != 'web' && !Files.isFileNameValid(newname)) { - return false; - } else if( type == 'folder' && $('#dir').val() == '/' && newname == 'Shared') { - OC.Notification.show(t('files','Invalid folder name. Usage of \'Shared\' is reserved by ownCloud')); - return false; - } - if (FileList.lastAction) { - FileList.lastAction(); - } - var name = getUniqueName(newname); - if (newname != name) { - FileList.checkName(name, newname, true); - var hidden = true; - } else { - var hidden = false; - } - switch(type){ - case 'file': - $.post( - OC.filePath('files','ajax','newfile.php'), - {dir:$('#dir').val(),filename:name}, - function(result){ - if (result.status == 'success') { - var date=new Date(); - FileList.addFile(name,0,date,false,hidden); - var tr=$('tr').filterAttr('data-file',name); - tr.attr('data-size',result.data.size); - tr.attr('data-mime',result.data.mime); - tr.attr('data-id', result.data.id); - tr.find('.filesize').text(humanFileSize(result.data.size)); - var path = getPathForPreview(name); - lazyLoadPreview(path, result.data.mime, function(previewpath){ - tr.find('td.filename').attr('style','background-image:url('+previewpath+')'); - }); - } else { - OC.dialogs.alert(result.data.message, t('core', 'Error')); + try { + checkInput(); + var newname = input.val(); + if (FileList.lastAction) { + FileList.lastAction(); + } + var name = getUniqueName(newname); + if (newname !== name) { + FileList.checkName(name, newname, true); + var hidden = true; + } else { + var hidden = false; + } + switch(type) { + case 'file': + $.post( + OC.filePath('files', 'ajax', 'newfile.php'), + {dir:$('#dir').val(), filename:name}, + function(result) { + if (result.status === 'success') { + var date = new Date(); + // TODO: ideally addFile should be able to receive + // all attributes and set them automatically, + // and also auto-load the preview + var tr = FileList.addFile(name, 0, date, false, hidden); + tr.attr('data-size', result.data.size); + tr.attr('data-mime', result.data.mime); + tr.attr('data-id', result.data.id); + tr.attr('data-etag', result.data.etag); + tr.find('.filesize').text(humanFileSize(result.data.size)); + var path = getPathForPreview(name); + Files.lazyLoadPreview(path, result.data.mime, function(previewpath) { + tr.find('td.filename').attr('style','background-image:url('+previewpath+')'); + }, null, null, result.data.etag); + FileActions.display(tr.find('td.filename'), true); + } else { + OC.dialogs.alert(result.data.message, t('core', 'Could not create file')); + } } - } - ); - break; - case 'folder': - $.post( - OC.filePath('files','ajax','newfolder.php'), - {dir:$('#dir').val(),foldername:name}, - function(result){ - if (result.status == 'success') { - var date=new Date(); - FileList.addDir(name,0,date,hidden); - var tr=$('tr').filterAttr('data-file',name); - tr.attr('data-id', result.data.id); - } else { - OC.dialogs.alert(result.data.message, t('core', 'Error')); + ); + break; + case 'folder': + $.post( + OC.filePath('files','ajax','newfolder.php'), + {dir:$('#dir').val(), foldername:name}, + function(result) { + if (result.status === 'success') { + var date=new Date(); + FileList.addDir(name, 0, date, hidden); + var tr = FileList.findFileEl(name); + tr.attr('data-id', result.data.id); + } else { + OC.dialogs.alert(result.data.message, t('core', 'Could not create folder')); + } } + ); + break; + case 'web': + if (name.substr(0,8) !== 'https://' && name.substr(0,7) !== 'http://') { + name = 'http://' + name; } - ); - break; - case 'web': - if(name.substr(0,8)!='https://' && name.substr(0,7)!='http://'){ - name='http://'+name; - } - var localName=name; - if(localName.substr(localName.length-1,1)=='/'){//strip / - localName=localName.substr(0,localName.length-1) - } - if(localName.indexOf('/')){//use last part of url - localName=localName.split('/').pop(); - } else { //or the domain - localName=(localName.match(/:\/\/(.[^\/]+)/)[1]).replace('www.',''); - } - localName = getUniqueName(localName); - //IE < 10 does not fire the necessary events for the progress bar. - if($('html.lte9').length === 0) { - $('#uploadprogressbar').progressbar({value:0}); - $('#uploadprogressbar').fadeIn(); - } - - var eventSource=new OC.EventSource(OC.filePath('files','ajax','newfile.php'),{dir:$('#dir').val(),source:name,filename:localName}); - eventSource.listen('progress',function(progress){ + var localName=name; + if (localName.substr(localName.length-1,1)==='/') {//strip / + localName=localName.substr(0,localName.length-1); + } + if (localName.indexOf('/')) {//use last part of url + localName=localName.split('/').pop(); + } else { //or the domain + localName=(localName.match(/:\/\/(.[^\/]+)/)[1]).replace('www.',''); + } + localName = getUniqueName(localName); //IE < 10 does not fire the necessary events for the progress bar. - if($('html.lte9').length === 0) { - $('#uploadprogressbar').progressbar('value',progress); + if ($('html.lte9').length === 0) { + $('#uploadprogressbar').progressbar({value:0}); + $('#uploadprogressbar').fadeIn(); } - }); - eventSource.listen('success',function(data){ - var mime=data.mime; - var size=data.size; - var id=data.id; - $('#uploadprogressbar').fadeOut(); - var date=new Date(); - FileList.addFile(localName,size,date,false,hidden); - var tr=$('tr').filterAttr('data-file',localName); - tr.data('mime',mime).data('id',id); - tr.attr('data-id', id); - var path = $('#dir').val()+'/'+localName; - lazyLoadPreview(path, mime, function(previewpath){ - tr.find('td.filename').attr('style','background-image:url('+previewpath+')'); + + var eventSource=new OC.EventSource(OC.filePath('files','ajax','newfile.php'),{dir:$('#dir').val(),source:name,filename:localName}); + eventSource.listen('progress',function(progress) { + //IE < 10 does not fire the necessary events for the progress bar. + if ($('html.lte9').length === 0) { + $('#uploadprogressbar').progressbar('value',progress); + } }); - }); - eventSource.listen('error',function(error){ - $('#uploadprogressbar').fadeOut(); - alert(error); - }); - break; + eventSource.listen('success',function(data) { + var mime = data.mime; + var size = data.size; + var id = data.id; + $('#uploadprogressbar').fadeOut(); + var date = new Date(); + FileList.addFile(localName, size, date, false, hidden); + var tr = FileList.findFileEl(localName); + tr.data('mime', mime).data('id', id); + tr.attr('data-id', id); + var path = $('#dir').val()+'/'+localName; + Files.lazyLoadPreview(path, mime, function(previewpath) { + tr.find('td.filename').attr('style', 'background-image:url('+previewpath+')'); + }, null, null, data.etag); + FileActions.display(tr.find('td.filename'), true); + }); + eventSource.listen('error',function(error) { + $('#uploadprogressbar').fadeOut(); + var message = (error && error.message) || t('core', 'Error fetching URL'); + OC.Notification.show(message); + //hide notification after 10 sec + setTimeout(function() { + OC.Notification.hide(); + }, 10000); + }); + break; + } + var li=form.parent(); + form.remove(); + /* workaround for IE 9&10 click event trap, 2 lines: */ + $('input').first().focus(); + $('#content').focus(); + li.append('

'+li.data('text')+'

'); + $('#new>a').click(); + } catch (error) { + input.attr('title', error); + input.tipsy({gravity: 'w', trigger: 'manual'}); + input.tipsy('show'); + input.addClass('error'); } - var li=form.parent(); - form.remove(); - /* workaround for IE 9&10 click event trap, 2 lines: */ - $('input').first().focus(); - $('#content').focus(); - li.append('

'+li.data('text')+'

'); - $('#new>a').click(); }); }); window.file_upload_param = file_upload_param; diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js index 67d3d5ead8d87b935e99f379a005ae8a105abb57..9a69d7b368869138bf05948894de9e0f28dbdad7 100644 --- a/apps/files/js/fileactions.js +++ b/apps/files/js/fileactions.js @@ -1,3 +1,15 @@ +/* + * Copyright (c) 2014 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +/* global OC, FileList */ +/* global trashBinApp */ var FileActions = { actions: {}, defaults: {}, @@ -45,8 +57,9 @@ var FileActions = { return filteredActions; }, getDefault: function (mime, type, permissions) { + var mimePart; if (mime) { - var mimePart = mime.substr(0, mime.indexOf('/')); + mimePart = mime.substr(0, mime.indexOf('/')); } var name = false; if (mime && FileActions.defaults[mime]) { @@ -61,17 +74,25 @@ var FileActions = { var actions = this.get(mime, type, permissions); return actions[name]; }, - display: function (parent) { + /** + * Display file actions for the given element + * @param parent "td" element of the file for which to display actions + * @param triggerEvent if true, triggers the fileActionsReady on the file + * list afterwards (false by default) + */ + display: function (parent, triggerEvent) { FileActions.currentFile = parent; var actions = FileActions.get(FileActions.getCurrentMimeType(), FileActions.getCurrentType(), FileActions.getCurrentPermissions()); var file = FileActions.getCurrentFile(); - if ($('tr[data-file="'+file+'"]').data('renaming')) { + var nameLinks; + if (FileList.findFileEl(file).data('renaming')) { return; } // recreate fileactions - parent.children('a.name').find('.fileactions').remove(); - parent.children('a.name').append(''); + nameLinks = parent.children('a.name'); + nameLinks.find('.fileactions, .nametext .action').remove(); + nameLinks.append(''); var defaultAction = FileActions.getDefault(FileActions.getCurrentMimeType(), FileActions.getCurrentType(), FileActions.getCurrentPermissions()); var actionHandler = function (event) { @@ -91,21 +112,30 @@ var FileActions = { } if ((name === 'Download' || action !== defaultAction) && name !== 'Delete') { - var img = FileActions.icons[name]; + var img = FileActions.icons[name], + actionText = t('files', name), + actionContainer = 'a.name>span.fileactions'; + + if (name === 'Rename') { + // rename has only an icon which appears behind + // the file name + actionText = ''; + actionContainer = 'a.name span.nametext'; + } if (img.call) { img = img(file); } var html = ''; if (img) { - html += ' '; + html += ''; } - html += t('files', name) + ''; + html += ' ' + actionText + ''; var element = $(html); element.data('action', name); //alert(element); element.on('click', {a: null, elem: parent, actionFunc: actions[name]}, actionHandler); - parent.find('a.name>span.fileactions').append(element); + parent.find(actionContainer).append(element); } }; @@ -124,19 +154,24 @@ var FileActions = { parent.parent().children().last().find('.action.delete').remove(); if (actions['Delete']) { var img = FileActions.icons['Delete']; + var html; if (img.call) { img = img(file); } if (typeof trashBinApp !== 'undefined' && trashBinApp) { - var html = ''; + html = ''; } else { - var html = ''; + html = ''; } var element = $(html); element.data('action', actions['Delete']); element.on('click', {a: null, elem: parent, actionFunc: actions['Delete']}, actionHandler); parent.parent().children().last().append(element); } + + if (triggerEvent){ + $('#fileList').trigger(jQuery.Event("fileActionsReady")); + } }, getCurrentFile: function () { return FileActions.currentFile.parent().attr('data-file'); @@ -153,17 +188,21 @@ var FileActions = { }; $(document).ready(function () { + var downloadScope; if ($('#allowZipDownload').val() == 1) { - var downloadScope = 'all'; + downloadScope = 'all'; } else { - var downloadScope = 'file'; + downloadScope = 'file'; } if (typeof disableDownloadActions == 'undefined' || !disableDownloadActions) { FileActions.register(downloadScope, 'Download', OC.PERMISSION_READ, function () { return OC.imagePath('core', 'actions/download'); }, function (filename) { - window.location = OC.filePath('files', 'ajax', 'download.php') + '?files=' + encodeURIComponent(filename) + '&dir=' + encodeURIComponent($('#dir').val()); + var url = FileList.getDownloadUrl(filename); + if (url) { + OC.redirect(url); + } }); } $('#fileList tr').each(function () { @@ -177,20 +216,7 @@ $(document).ready(function () { FileActions.register('all', 'Delete', OC.PERMISSION_DELETE, function () { return OC.imagePath('core', 'actions/delete'); }, function (filename) { - if (OC.Upload.cancelUpload($('#dir').val(), filename)) { - if (filename.substr) { - filename = [filename]; - } - $.each(filename, function (index, file) { - var filename = $('tr').filterAttr('data-file', file); - filename.hide(); - filename.find('input[type="checkbox"]').removeAttr('checked'); - filename.removeClass('selected'); - }); - procesSelection(); - } else { - FileList.do_delete(filename); - } + FileList.do_delete(filename); $('.tipsy').remove(); }); diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 4fc1b95a0ab5612bc48560b2328589cc83ab3179..f538af10362bbda67a7e10378552c2f62f48340c 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -1,30 +1,50 @@ -var FileList={ +/* + * Copyright (c) 2014 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +/* global OC, t, n, FileList, FileActions, Files */ +/* global procesSelection, dragOptions, SVGSupport, replaceSVG */ +window.FileList={ useUndo:true, - postProcessList: function(){ - $('#fileList tr').each(function(){ + postProcessList: function() { + $('#fileList tr').each(function() { //little hack to set unescape filenames in attribute $(this).attr('data-file',decodeURIComponent($(this).attr('data-file'))); }); }, + /** + * Returns the tr element for a given file name + */ + findFileEl: function(fileName){ + // use filterAttr to avoid escaping issues + return $('#fileList tr').filterAttr('data-file', fileName); + }, update:function(fileListHtml) { - var $fileList = $('#fileList'), - permissions = $('#permissions').val(), - isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0; + var $fileList = $('#fileList'); $fileList.empty().html(fileListHtml); - $('#emptycontent').toggleClass('hidden', !isCreatable || $fileList.find('tr').length > 0); + FileList.updateEmptyContent(); $fileList.find('tr').each(function () { FileActions.display($(this).children('td.filename')); }); $fileList.trigger(jQuery.Event("fileActionsReady")); FileList.postProcessList(); // "Files" might not be loaded in extending apps - if (window.Files){ + if (window.Files) { Files.setupDragAndDrop(); } FileList.updateFileSummary(); + procesSelection(); + + $(window).scrollTop(0); $fileList.trigger(jQuery.Event("updated")); }, - createRow:function(type, name, iconurl, linktarget, size, lastModified, permissions){ + createRow:function(type, name, iconurl, linktarget, size, lastModified, permissions) { var td, simpleSize, basename, extension; //containing tr var tr = $('').attr({ @@ -45,7 +65,7 @@ var FileList={ "href": linktarget }); //split extension from filename for non dirs - if (type != 'dir' && name.indexOf('.')!=-1) { + if (type !== 'dir' && name.indexOf('.') !== -1) { basename=name.substr(0,name.lastIndexOf('.')); extension=name.substr(name.lastIndexOf('.')); } else { @@ -54,11 +74,11 @@ var FileList={ } var name_span=$('').addClass('nametext').text(basename); link_elem.append(name_span); - if(extension){ + if (extension) { name_span.append($('').addClass('extension').text(extension)); } //dirs can show the number of uploaded files - if (type == 'dir') { + if (type === 'dir') { link_elem.append($('').attr({ 'class': 'uploadtext', 'currentUploads': 0 @@ -68,9 +88,9 @@ var FileList={ tr.append(td); //size column - if(size!=t('files', 'Pending')){ + if (size !== t('files', 'Pending')) { simpleSize = humanFileSize(size); - }else{ + } else { simpleSize=t('files', 'Pending'); } var sizeColor = Math.round(160-Math.pow((size/(1024*1024)),2)); @@ -92,7 +112,7 @@ var FileList={ tr.append(td); return tr; }, - addFile:function(name,size,lastModified,loading,hidden,param){ + addFile:function(name, size, lastModified, loading, hidden, param) { var imgurl; if (!param) { @@ -122,9 +142,9 @@ var FileList={ ); FileList.insertElement(name, 'file', tr); - if(loading){ - tr.data('loading',true); - }else{ + if (loading) { + tr.data('loading', true); + } else { tr.find('td.filename').draggable(dragOptions); } if (hidden) { @@ -132,7 +152,7 @@ var FileList={ } return tr; }, - addDir:function(name,size,lastModified,hidden){ + addDir:function(name, size, lastModified, hidden) { var tr = this.createRow( 'dir', @@ -144,39 +164,50 @@ var FileList={ $('#permissions').val() ); - FileList.insertElement(name,'dir',tr); + FileList.insertElement(name, 'dir', tr); var td = tr.find('td.filename'); td.draggable(dragOptions); td.droppable(folderDropOptions); if (hidden) { tr.hide(); } - FileActions.display(tr.find('td.filename')); + FileActions.display(tr.find('td.filename'), true); return tr; }, + getCurrentDirectory: function(){ + return $('#dir').val() || '/'; + }, /** * @brief Changes the current directory and reload the file list. * @param targetDir target directory (non URL encoded) * @param changeUrl false if the URL must not be changed (defaults to true) + * @param {boolean} force set to true to force changing directory */ - changeDirectory: function(targetDir, changeUrl, force){ + changeDirectory: function(targetDir, changeUrl, force) { var $dir = $('#dir'), url, currentDir = $dir.val() || '/'; targetDir = targetDir || '/'; - if (!force && currentDir === targetDir){ + if (!force && currentDir === targetDir) { return; } FileList.setCurrentDir(targetDir, changeUrl); + $('#fileList').trigger( + jQuery.Event('changeDirectory', { + dir: targetDir, + previousDir: currentDir + } + )); FileList.reload(); }, - linkTo: function(dir){ + linkTo: function(dir) { return OC.linkTo('files', 'index.php')+"?dir="+ encodeURIComponent(dir).replace(/%2F/g, '/'); }, - setCurrentDir: function(targetDir, changeUrl){ + setCurrentDir: function(targetDir, changeUrl) { + var url; $('#dir').val(targetDir); - if (changeUrl !== false){ - if (window.history.pushState && changeUrl !== false){ + if (changeUrl !== false) { + if (window.history.pushState && changeUrl !== false) { url = FileList.linkTo(targetDir); window.history.pushState({dir: targetDir}, '', url); } @@ -189,9 +220,9 @@ var FileList={ /** * @brief Reloads the file list using ajax call */ - reload: function(){ + reload: function() { FileList.showMask(); - if (FileList._reloadCall){ + if (FileList._reloadCall) { FileList._reloadCall.abort(); } FileList._reloadCall = $.ajax({ @@ -200,7 +231,7 @@ var FileList={ dir : $('#dir').val(), breadcrumb: true }, - error: function(result){ + error: function(result) { FileList.reloadCallback(result); }, success: function(result) { @@ -208,7 +239,7 @@ var FileList={ } }); }, - reloadCallback: function(result){ + reloadCallback: function(result) { var $controls = $('#controls'); delete FileList._reloadCall; @@ -219,17 +250,21 @@ var FileList={ return; } - if (result.status === 404){ + if (result.status === 404) { // go back home FileList.changeDirectory('/'); return; } - if (result.data.permissions){ + // TODO: should rather return upload file size through + // the files list ajax call + Files.updateStorageStatistics(true); + + if (result.data.permissions) { FileList.setDirectoryPermissions(result.data.permissions); } - if(typeof(result.data.breadcrumb) != 'undefined'){ + if (typeof(result.data.breadcrumb) !== 'undefined') { $controls.find('.crumb').remove(); $controls.prepend(result.data.breadcrumb); @@ -238,81 +273,117 @@ var FileList={ Files.resizeBreadcrumbs(width, true); // in case svg is not supported by the browser we need to execute the fallback mechanism - if(!SVGSupport()) { + if (!SVGSupport()) { replaceSVG(); } } FileList.update(result.data.files); }, - setDirectoryPermissions: function(permissions){ + setDirectoryPermissions: function(permissions) { var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0; $('#permissions').val(permissions); $('.creatable').toggleClass('hidden', !isCreatable); $('.notCreatable').toggleClass('hidden', isCreatable); }, + /** + * Shows/hides action buttons + * + * @param show true for enabling, false for disabling + */ + showActions: function(show){ + $('.actions,#file_action_panel').toggleClass('hidden', !show); + if (show){ + // make sure to display according to permissions + var permissions = $('#permissions').val(); + var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0; + $('.creatable').toggleClass('hidden', !isCreatable); + $('.notCreatable').toggleClass('hidden', isCreatable); + } + else{ + $('.creatable, .notCreatable').addClass('hidden'); + } + }, + /** + * Enables/disables viewer mode. + * In viewer mode, apps can embed themselves under the controls bar. + * In viewer mode, the actions of the file list will be hidden. + * @param show true for enabling, false for disabling + */ + setViewerMode: function(show){ + this.showActions(!show); + $('#filestable').toggleClass('hidden', show); + }, remove:function(name){ - $('tr').filterAttr('data-file',name).find('td.filename').draggable('destroy'); - $('tr').filterAttr('data-file',name).remove(); + var fileEl = FileList.findFileEl(name); + if (fileEl.data('permissions') & OC.PERMISSION_DELETE) { + // file is only draggable when delete permissions are set + fileEl.find('td.filename').draggable('destroy'); + } + fileEl.remove(); FileList.updateFileSummary(); - if($('tr[data-file]').length==0){ + if ( ! $('tr[data-file]').exists() ) { $('#emptycontent').removeClass('hidden'); + $('#filescontent th').addClass('hidden'); } }, - insertElement:function(name,type,element){ + insertElement:function(name, type, element) { //find the correct spot to insert the file or folder var pos, fileElements=$('tr[data-file][data-type="'+type+'"]:visible'); - if(name.localeCompare($(fileElements[0]).attr('data-file'))<0){ - pos=-1; - }else if(name.localeCompare($(fileElements[fileElements.length-1]).attr('data-file'))>0){ - pos=fileElements.length-1; - }else{ - for(pos=0;pos0 && name.localeCompare($(fileElements[pos+1]).attr('data-file'))<0){ + if (name.localeCompare($(fileElements[0]).attr('data-file')) < 0) { + pos = -1; + } else if (name.localeCompare($(fileElements[fileElements.length-1]).attr('data-file')) > 0) { + pos = fileElements.length - 1; + } else { + for(pos = 0; pos 0 + && name.localeCompare($(fileElements[pos+1]).attr('data-file')) < 0) + { break; } } } - if(fileElements.length){ - if(pos==-1){ + if (fileElements.exists()) { + if (pos === -1) { $(fileElements[0]).before(element); - }else{ + } else { $(fileElements[pos]).after(element); } - }else if(type=='dir' && $('tr[data-file]').length>0){ + } else if (type === 'dir' && $('tr[data-file]').exists()) { $('tr[data-file]').first().before(element); - } else if(type=='file' && $('tr[data-file]').length>0) { + } else if (type === 'file' && $('tr[data-file]').exists()) { $('tr[data-file]').last().before(element); - }else{ + } else { $('#fileList').append(element); } $('#emptycontent').addClass('hidden'); + $('#filestable th').removeClass('hidden'); FileList.updateFileSummary(); }, - loadingDone:function(name, id){ - var mime, tr=$('tr').filterAttr('data-file',name); - tr.data('loading',false); - mime=tr.data('mime'); - tr.attr('data-mime',mime); - if (id != null) { + loadingDone:function(name, id) { + var mime, tr = FileList.findFileEl(name); + tr.data('loading', false); + mime = tr.data('mime'); + tr.attr('data-mime', mime); + if (id) { tr.attr('data-id', id); } var path = getPathForPreview(name); - lazyLoadPreview(path, mime, function(previewpath){ + Files.lazyLoadPreview(path, mime, function(previewpath) { tr.find('td.filename').attr('style','background-image:url('+previewpath+')'); - }); + }, null, null, tr.attr('data-etag')); tr.find('td.filename').draggable(dragOptions); }, - isLoading:function(name){ - return $('tr').filterAttr('data-file',name).data('loading'); + isLoading:function(file) { + return FileList.findFileEl(file).data('loading'); }, - rename:function(name){ + rename:function(oldname) { var tr, td, input, form; - tr=$('tr').filterAttr('data-file',name); + tr = FileList.findFileEl(oldname); tr.data('renaming',true); - td=tr.children('td.filename'); - input=$('').val(name); - form=$('
'); + td = tr.children('td.filename'); + input = $('').val(oldname); + form = $('
'); form.append(input); td.children('a.name').hide(); td.append(form); @@ -322,18 +393,29 @@ var FileList={ if (len === -1) { len = input.val().length; } - input.selectRange(0,len); + input.selectRange(0, len); + + var checkInput = function () { + var filename = input.val(); + if (filename !== oldname) { + if (!Files.isFileNameValid(filename)) { + // Files.isFileNameValid(filename) throws an exception itself + } else if($('#dir').val() === '/' && filename === 'Shared') { + throw t('files','In the home folder \'Shared\' is a reserved filename'); + } else if (FileList.inList(filename)) { + throw t('files', '{new_name} already exists', {new_name: filename}); + } + } + return true; + }; - form.submit(function(event){ + form.submit(function(event) { event.stopPropagation(); event.preventDefault(); - var newname=input.val(); - if (!Files.isFileNameValid(newname)) { - return false; - } else if (newname != name) { - if (FileList.checkName(name, newname, false)) { - newname = name; - } else { + try { + var newname = input.val(); + if (newname !== oldname) { + checkInput(); // save background image, because it's replaced by a spinner while async request var oldBackgroundImage = td.css('background-image'); // mark as loading @@ -343,16 +425,16 @@ var FileList={ data: { dir : $('#dir').val(), newname: newname, - file: name + file: oldname }, success: function(result) { if (!result || result.status === 'error') { - OC.Notification.show(result.data.message); - newname = name; + OC.dialogs.alert(result.data.message, t('core', 'Could not rename file')); // revert changes + newname = oldname; tr.attr('data-file', newname); var path = td.children('a.name').attr('href'); - td.children('a.name').attr('href', path.replace(encodeURIComponent(name), encodeURIComponent(newname))); + td.children('a.name').attr('href', path.replace(encodeURIComponent(oldname), encodeURIComponent(newname))); if (newname.indexOf('.') > 0 && tr.data('type') !== 'dir') { var basename=newname.substr(0,newname.lastIndexOf('.')); } else { @@ -360,78 +442,102 @@ var FileList={ } td.find('a.name span.nametext').text(basename); if (newname.indexOf('.') > 0 && tr.data('type') !== 'dir') { - if (td.find('a.name span.extension').length === 0 ) { + if ( ! td.find('a.name span.extension').exists() ) { td.find('a.name span.nametext').append(''); } td.find('a.name span.extension').text(newname.substr(newname.lastIndexOf('.'))); } tr.find('.fileactions').effect('highlight', {}, 5000); tr.effect('highlight', {}, 5000); + // remove loading mark and recover old image + td.css('background-image', oldBackgroundImage); + } + else { + var fileInfo = result.data; + tr.attr('data-mime', fileInfo.mime); + tr.attr('data-etag', fileInfo.etag); + if (fileInfo.isPreviewAvailable) { + Files.lazyLoadPreview(fileInfo.directory + '/' + fileInfo.name, result.data.mime, function(previewpath) { + tr.find('td.filename').attr('style','background-image:url('+previewpath+')'); + }, null, null, result.data.etag); + } + else { + tr.find('td.filename').removeClass('preview').attr('style','background-image:url('+fileInfo.icon+')'); + } } - // remove loading mark and recover old image - td.css('background-image', oldBackgroundImage); + // reinsert row + tr.detach(); + FileList.insertElement( tr.attr('data-file'), tr.attr('data-type'),tr ); + // update file actions in case the extension changed + FileActions.display( tr.find('td.filename'), true); } }); } - } - tr.data('renaming',false); - tr.attr('data-file', newname); - var path = td.children('a.name').attr('href'); - td.children('a.name').attr('href', path.replace(encodeURIComponent(name), encodeURIComponent(newname))); - if (newname.indexOf('.') > 0 && tr.data('type') != 'dir') { - var basename=newname.substr(0,newname.lastIndexOf('.')); - } else { - var basename=newname; - } - td.find('a.name span.nametext').text(basename); - if (newname.indexOf('.') > 0 && tr.data('type') != 'dir') { - if (td.find('a.name span.extension').length == 0 ) { - td.find('a.name span.nametext').append(''); + input.tipsy('hide'); + tr.data('renaming',false); + tr.attr('data-file', newname); + var path = td.children('a.name').attr('href'); + // FIXME this will fail if the path contains the filename. + td.children('a.name').attr('href', path.replace(encodeURIComponent(oldname), encodeURIComponent(newname))); + var basename = newname; + if (newname.indexOf('.') > 0 && tr.data('type') !== 'dir') { + basename = newname.substr(0, newname.lastIndexOf('.')); + } + td.find('a.name span.nametext').text(basename); + if (newname.indexOf('.') > 0 && tr.data('type') !== 'dir') { + if ( ! td.find('a.name span.extension').exists() ) { + td.find('a.name span.nametext').append(''); + } + td.find('a.name span.extension').text(newname.substr(newname.lastIndexOf('.'))); } - td.find('a.name span.extension').text(newname.substr(newname.lastIndexOf('.'))); + form.remove(); + FileActions.display( tr.find('td.filename'), true); + td.children('a.name').show(); + } catch (error) { + input.attr('title', error); + input.tipsy({gravity: 'w', trigger: 'manual'}); + input.tipsy('show'); + input.addClass('error'); } - form.remove(); - td.children('a.name').show(); return false; }); - input.keyup(function(event){ - if (event.keyCode == 27) { + input.keyup(function(event) { + // verify filename on typing + try { + checkInput(); + input.tipsy('hide'); + input.removeClass('error'); + } catch (error) { + input.attr('title', error); + input.tipsy({gravity: 'w', trigger: 'manual'}); + input.tipsy('show'); + input.addClass('error'); + } + if (event.keyCode === 27) { + input.tipsy('hide'); tr.data('renaming',false); form.remove(); td.children('a.name').show(); } }); - input.click(function(event){ + input.click(function(event) { event.stopPropagation(); event.preventDefault(); }); - input.blur(function(){ + input.blur(function() { form.trigger('submit'); }); }, - checkName:function(oldName, newName, isNewFile) { - if (isNewFile || $('tr').filterAttr('data-file', newName).length > 0) { - var html; - if(isNewFile){ - html = t('files', '{new_name} already exists', {new_name: escapeHTML(newName)})+''+t('files', 'replace')+''+t('files', 'suggest name')+' '+t('files', 'cancel')+''; - }else{ - html = t('files', '{new_name} already exists', {new_name: escapeHTML(newName)})+''+t('files', 'replace')+''+t('files', 'cancel')+''; - } - html = $('' + html + ''); - html.attr('data-oldName', oldName); - html.attr('data-newName', newName); - html.attr('data-isNewFile', isNewFile); - OC.Notification.showHtml(html); - return true; - } else { - return false; - } + inList:function(file) { + return FileList.findFileEl(file).length; }, replace:function(oldName, newName, isNewFile) { // Finish any existing actions - $('tr').filterAttr('data-file', oldName).hide(); - $('tr').filterAttr('data-file', newName).hide(); - var tr = $('tr').filterAttr('data-file', oldName).clone(); + var oldFileEl = FileList.findFileEl(oldName); + var newFileEl = FileList.findFileEl(newName); + oldFileEl.hide(); + newFileEl.hide(); + var tr = oldFileEl.clone(); tr.attr('data-replace', 'true'); tr.attr('data-file', newName); var td = tr.children('td.filename'); @@ -460,14 +566,14 @@ var FileList={ FileList.finishReplace(); }; if (!isNewFile) { - OC.Notification.showHtml(t('files', 'replaced {new_name} with {old_name}', {new_name: newName}, {old_name: oldName})+''+t('files', 'undo')+''); + OC.Notification.showHtml(t('files', 'replaced {new_name} with {old_name}', {new_name: newName}, {old_name: oldName})+''+t('files', 'undo')+''); } }, finishReplace:function() { if (!FileList.replaceCanceled && FileList.replaceOldName && FileList.replaceNewName) { $.ajax({url: OC.filePath('files', 'ajax', 'rename.php'), async: false, data: { dir: $('#dir').val(), newname: FileList.replaceNewName, file: FileList.replaceOldName }, success: function(result) { - if (result && result.status == 'success') { - $('tr').filterAttr('data-replace', 'true').removeAttr('data-replace'); + if (result && result.status === 'success') { + $('tr[data-replace="true"').removeAttr('data-replace'); } else { OC.dialogs.alert(result.data.message, 'Error moving file'); } @@ -478,12 +584,12 @@ var FileList={ }}); } }, - do_delete:function(files){ - if(files.substr){ + do_delete:function(files) { + if (files.substr) { files=[files]; } for (var i=0; i 0 ) { - var totalDirs = 0; - var totalFiles = 0; - var totalSize = 0; - - // Count types and filesize - $.each($('tr[data-file]'), function(index, value) { - if ($(value).data('type') === 'dir') { - totalDirs++; - } else if ($(value).data('type') === 'file') { - totalFiles++; - } - totalSize += parseInt($(value).data('size')); - }); + if( $('#fileList tr').exists() ) { + var summary = this._calculateFileSummary(); // Get translations - var directoryInfo = n('files', '%n folder', '%n folders', totalDirs); - var fileInfo = n('files', '%n file', '%n files', totalFiles); + var directoryInfo = n('files', '%n folder', '%n folders', summary.totalDirs); + var fileInfo = n('files', '%n file', '%n files', summary.totalFiles); var infoVars = { dirs: ''+directoryInfo+'', files: ''+fileInfo+'' - } + }; var info = t('files', '{dirs} and {files}', infoVars); // don't show the filesize column, if filesize is NaN (e.g. in trashbin) - if (isNaN(totalSize)) { + if (isNaN(summary.totalSize)) { var fileSize = ''; } else { - var fileSize = ''+humanFileSize(totalSize)+''; + var fileSize = ''+humanFileSize(summary.totalSize)+''; } - $('#fileList').append(''+info+''+fileSize+''); + var $summary = $(''+info+''+fileSize+''); + $('#fileList').append($summary); - var $dirInfo = $('.summary .dirinfo'); - var $fileInfo = $('.summary .fileinfo'); - var $connector = $('.summary .connector'); + var $dirInfo = $summary.find('.dirinfo'); + var $fileInfo = $summary.find('.fileinfo'); + var $connector = $summary.find('.connector'); // Show only what's necessary, e.g.: no files: don't show "0 files" - if ($dirInfo.html().charAt(0) === "0") { + if (summary.totalDirs === 0) { $dirInfo.hide(); $connector.hide(); } - if ($fileInfo.html().charAt(0) === "0") { + if (summary.totalFiles === 0) { $fileInfo.hide(); $connector.hide(); } } }, + _calculateFileSummary: function() { + var result = { + totalDirs: 0, + totalFiles: 0, + totalSize: 0 + }; + $.each($('tr[data-file]'), function(index, value) { + var $value = $(value); + if ($value.data('type') === 'dir') { + result.totalDirs++; + } else if ($value.data('type') === 'file') { + result.totalFiles++; + } + if ($value.data('size') !== undefined && $value.data('id') !== -1) { + //Skip shared as it does not count toward quota + result.totalSize += parseInt($value.data('size')); + } + }); + return result; + }, updateFileSummary: function() { var $summary = $('.summary'); @@ -577,51 +704,46 @@ var FileList={ } // There's a summary and data -> Update the summary else if ($('#fileList tr').length > 1 && $summary.length === 1) { - var totalDirs = 0; - var totalFiles = 0; - var totalSize = 0; - $.each($('tr[data-file]'), function(index, value) { - if ($(value).data('type') === 'dir') { - totalDirs++; - } else if ($(value).data('type') === 'file') { - totalFiles++; - } - if ($(value).data('size') !== undefined) { - totalSize += parseInt($(value).data('size')); - } - }); - + var fileSummary = this._calculateFileSummary(); var $dirInfo = $('.summary .dirinfo'); var $fileInfo = $('.summary .fileinfo'); var $connector = $('.summary .connector'); // Substitute old content with new translations - $dirInfo.html(n('files', '%n folder', '%n folders', totalDirs)); - $fileInfo.html(n('files', '%n file', '%n files', totalFiles)); - $('.summary .filesize').html(humanFileSize(totalSize)); + $dirInfo.html(n('files', '%n folder', '%n folders', fileSummary.totalDirs)); + $fileInfo.html(n('files', '%n file', '%n files', fileSummary.totalFiles)); + $('.summary .filesize').html(humanFileSize(fileSummary.totalSize)); // Show only what's necessary (may be hidden) - if ($dirInfo.html().charAt(0) === "0") { + if (fileSummary.totalDirs === 0) { $dirInfo.hide(); $connector.hide(); } else { $dirInfo.show(); } - if ($fileInfo.html().charAt(0) === "0") { + if (fileSummary.totalFiles === 0) { $fileInfo.hide(); $connector.hide(); } else { $fileInfo.show(); } - if ($dirInfo.html().charAt(0) !== "0" && $fileInfo.html().charAt(0) !== "0") { + if (fileSummary.totalDirs > 0 && fileSummary.totalFiles > 0) { $connector.show(); } } }, - showMask: function(){ + updateEmptyContent: function() { + var $fileList = $('#fileList'); + var permissions = $('#permissions').val(); + var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0; + var exists = $fileList.find('tr:first').exists(); + $('#emptycontent').toggleClass('hidden', !isCreatable || exists); + $('#filestable th').toggleClass('hidden', !exists); + }, + showMask: function() { // in case one was shown before var $mask = $('#content .mask'); - if ($mask.length){ + if ($mask.exists()) { return; } @@ -632,32 +754,32 @@ var FileList={ $('#content').append($mask); // block UI, but only make visible in case loading takes longer - FileList._maskTimeout = window.setTimeout(function(){ + FileList._maskTimeout = window.setTimeout(function() { // reset opacity $mask.removeClass('transparent'); }, 250); }, - hideMask: function(){ + hideMask: function() { var $mask = $('#content .mask').remove(); - if (FileList._maskTimeout){ + if (FileList._maskTimeout) { window.clearTimeout(FileList._maskTimeout); } }, scrollTo:function(file) { //scroll to and highlight preselected file - var scrolltorow = $('tr[data-file="'+file+'"]'); - if (scrolltorow.length > 0) { - scrolltorow.addClass('searchresult'); - $(window).scrollTop(scrolltorow.position().top); + var $scrolltorow = FileList.findFileEl(file); + if ($scrolltorow.exists()) { + $scrolltorow.addClass('searchresult'); + $(window).scrollTop($scrolltorow.position().top); //remove highlight when hovered over - scrolltorow.one('hover', function(){ - scrolltorow.removeClass('searchresult'); + $scrolltorow.one('hover', function() { + $scrolltorow.removeClass('searchresult'); }); } }, - filter:function(query){ - $('#fileList tr:not(.summary)').each(function(i,e){ - if ($(e).data('file').toLowerCase().indexOf(query.toLowerCase()) !== -1) { + filter:function(query) { + $('#fileList tr:not(.summary)').each(function(i,e) { + if ($(e).data('file').toString().toLowerCase().indexOf(query.toLowerCase()) !== -1) { $(e).addClass("searchresult"); } else { $(e).removeClass("searchresult"); @@ -665,18 +787,33 @@ var FileList={ }); //do not use scrollto to prevent removing searchresult css class var first = $('#fileList tr.searchresult').first(); - if (first.length !== 0) { + if (first.exists()) { $(window).scrollTop(first.position().top); } }, - unfilter:function(){ - $('#fileList tr.searchresult').each(function(i,e){ + unfilter:function() { + $('#fileList tr.searchresult').each(function(i,e) { $(e).removeClass("searchresult"); }); + }, + + /** + * Returns the download URL of the given file + * @param filename file name of the file + * @param dir optional directory in which the file name is, defaults to the current directory + */ + getDownloadUrl: function(filename, dir) { + var params = { + files: filename, + dir: dir || FileList.getCurrentDirectory(), + download: null + }; + return OC.filePath('files', 'ajax', 'download.php') + '?' + OC.buildQueryString(params); } }; -$(document).ready(function(){ +$(document).ready(function() { + var isPublic = !!$('#isPublic').val(); // handle upload events var file_upload_start = $('#file_upload_start'); @@ -684,42 +821,46 @@ $(document).ready(function(){ file_upload_start.on('fileuploaddrop', function(e, data) { OC.Upload.log('filelist handle fileuploaddrop', e, data); - var dropTarget = $(e.originalEvent.target).closest('tr'); - if(dropTarget && dropTarget.data('type') === 'dir') { // drag&drop upload to folder + var dropTarget = $(e.originalEvent.target).closest('tr, .crumb'); + if (dropTarget && (dropTarget.data('type') === 'dir' || dropTarget.hasClass('crumb'))) { // drag&drop upload to folder // remember as context data.context = dropTarget; var dir = dropTarget.data('file'); + // if from file list, need to prepend parent dir + if (dir) { + var parentDir = $('#dir').val() || '/'; + if (parentDir[parentDir.length - 1] !== '/') { + parentDir += '/'; + } + dir = parentDir + dir; + } + else{ + // read full path from crumb + dir = dropTarget.data('dir') || '/'; + } // update folder in form data.formData = function(form) { - var formArray = form.serializeArray(); - // array index 0 contains the max files size - // array index 1 contains the request token - // array index 2 contains the directory - var parentDir = formArray[2]['value']; - if (parentDir === '/') { - formArray[2]['value'] += dir; - } else { - formArray[2]['value'] += '/' + dir; - } - - return formArray; + return [ + {name: 'dir', value: dir}, + {name: 'requesttoken', value: oc_requesttoken} + ]; }; - } + } }); file_upload_start.on('fileuploadadd', function(e, data) { OC.Upload.log('filelist handle fileuploadadd', e, data); //finish delete if we are uploading a deleted file - if(FileList.deleteFiles && FileList.deleteFiles.indexOf(data.files[0].name)!==-1){ + if (FileList.deleteFiles && FileList.deleteFiles.indexOf(data.files[0].name)!==-1) { FileList.finishDelete(null, true); //delete file before continuing } // add ui visualization to existing folder - if(data.context && data.context.data('type') === 'dir') { + if (data.context && data.context.data('type') === 'dir') { // add to existing folder // update upload counter ui @@ -729,7 +870,7 @@ $(document).ready(function(){ uploadtext.attr('currentUploads', currentUploads); var translatedText = n('files', 'Uploading %n file', 'Uploading %n files', currentUploads); - if(currentUploads === 1) { + if (currentUploads === 1) { var img = OC.imagePath('core', 'loading.gif'); data.context.find('td.filename').attr('style','background-image:url('+img+')'); uploadtext.text(translatedText); @@ -746,7 +887,7 @@ $(document).ready(function(){ */ file_upload_start.on('fileuploaddone', function(e, data) { OC.Upload.log('filelist handle fileuploaddone', e, data); - + var response; if (typeof data.result === 'string') { response = data.result; @@ -756,7 +897,7 @@ $(document).ready(function(){ } var result=$.parseJSON(response); - if(typeof result[0] !== 'undefined' && result[0].status === 'success') { + if (typeof result[0] !== 'undefined' && result[0].status === 'success') { var file = result[0]; if (data.context && data.context.data('type') === 'dir') { @@ -767,7 +908,7 @@ $(document).ready(function(){ currentUploads -= 1; uploadtext.attr('currentUploads', currentUploads); var translatedText = n('files', 'Uploading %n file', 'Uploading %n files', currentUploads); - if(currentUploads === 0) { + if (currentUploads === 0) { var img = OC.imagePath('core', 'filetypes/folder.png'); data.context.find('td.filename').attr('style','background-image:url('+img+')'); uploadtext.text(translatedText); @@ -783,15 +924,19 @@ $(document).ready(function(){ data.context.find('td.filesize').text(humanFileSize(size)); } else { + // only append new file if dragged onto current dir's crumb (last) + if (data.context && data.context.hasClass('crumb') && !data.context.hasClass('last')) { + return; + } // add as stand-alone row to filelist var size=t('files', 'Pending'); - if (data.files[0].size>=0){ + if (data.files[0].size>=0) { size=data.files[0].size; } var date=new Date(); var param = {}; - if ($('#publicUploadRequestToken').length) { + if ($('#publicUploadRequestToken').exists()) { param.download_url = document.location.href + '&download&path=/' + $('#dir').val() + '/' + file.name; } //should the file exist in the list remove it @@ -801,19 +946,19 @@ $(document).ready(function(){ data.context = FileList.addFile(file.name, file.size, date, false, false, param); // update file data - data.context.attr('data-mime',file.mime).attr('data-id',file.id); + data.context.attr('data-mime',file.mime).attr('data-id',file.id).attr('data-etag', file.etag); var permissions = data.context.data('permissions'); - if(permissions != file.permissions) { + if (permissions !== file.permissions) { data.context.attr('data-permissions', file.permissions); data.context.data('permissions', file.permissions); } - FileActions.display(data.context.find('td.filename')); + FileActions.display(data.context.find('td.filename'), true); var path = getPathForPreview(file.name); - lazyLoadPreview(path, file.mime, function(previewpath){ + Files.lazyLoadPreview(path, file.mime, function(previewpath) { data.context.find('td.filename').attr('style','background-image:url('+previewpath+')'); - }); + }, null, null, file.etag); } } }); @@ -845,10 +990,10 @@ $(document).ready(function(){ }); $('#notification').hide(); - $('#notification').on('click', '.undo', function(){ + $('#notification').on('click', '.undo', function() { if (FileList.deleteFiles) { - $.each(FileList.deleteFiles,function(index,file){ - $('tr').filterAttr('data-file',file).show(); + $.each(FileList.deleteFiles,function(index,file) { + FileList.findFileEl(file).show(); }); FileList.deleteCanceled=true; FileList.deleteFiles=null; @@ -858,10 +1003,10 @@ $(document).ready(function(){ FileList.deleteCanceled = false; FileList.deleteFiles = [FileList.replaceOldName]; } else { - $('tr').filterAttr('data-file', FileList.replaceOldName).show(); + FileList.findFileEl(FileList.replaceOldName).show(); } - $('tr').filterAttr('data-replace', 'true').remove(); - $('tr').filterAttr('data-file', FileList.replaceNewName).show(); + $('tr[data-replace="true"').remove(); + FileList.findFileEl(FileList.replaceNewName).show(); FileList.replaceCanceled = true; FileList.replaceOldName = null; FileList.replaceNewName = null; @@ -876,7 +1021,8 @@ $(document).ready(function(){ }); }); $('#notification:first-child').on('click', '.suggest', function() { - $('tr').filterAttr('data-file', $('#notification > span').attr('data-oldName')).show(); + var file = $('#notification > span').attr('data-oldName'); + FileList.findFileEl(file).show(); OC.Notification.hide(); }); $('#notification:first-child').on('click', '.cancel', function() { @@ -886,63 +1032,70 @@ $(document).ready(function(){ } }); FileList.useUndo=(window.onbeforeunload)?true:false; - $(window).bind('beforeunload', function (){ + $(window).bind('beforeunload', function () { if (FileList.lastAction) { FileList.lastAction(); } }); - $(window).unload(function (){ + $(window).unload(function () { $(window).trigger('beforeunload'); }); - function parseHashQuery(){ + function decodeQuery(query) { + return query.replace(/\+/g, ' '); + } + + function parseHashQuery() { var hash = window.location.hash, pos = hash.indexOf('?'), query; - if (pos >= 0){ + if (pos >= 0) { return hash.substr(pos + 1); } return ''; } - function parseCurrentDirFromUrl(){ + function parseCurrentDirFromUrl() { var query = parseHashQuery(), params, dir = '/'; // try and parse from URL hash first - if (query){ - params = OC.parseQueryString(query); + if (query) { + params = OC.parseQueryString(decodeQuery(query)); } // else read from query attributes - if (!params){ - params = OC.parseQueryString(location.search); + if (!params) { + params = OC.parseQueryString(decodeQuery(location.search)); } return (params && params.dir) || '/'; } - // fallback to hashchange when no history support - if (!window.history.pushState){ - $(window).on('hashchange', function(){ - FileList.changeDirectory(parseCurrentDirFromUrl(), false); - }); - } - window.onpopstate = function(e){ - var targetDir; - if (e.state && e.state.dir){ - targetDir = e.state.dir; - } - else{ - // read from URL - targetDir = parseCurrentDirFromUrl(); - } - if (targetDir){ - FileList.changeDirectory(targetDir, false); + // disable ajax/history API for public app (TODO: until it gets ported) + if (!isPublic) { + // fallback to hashchange when no history support + if (!window.history.pushState) { + $(window).on('hashchange', function() { + FileList.changeDirectory(parseCurrentDirFromUrl(), false); + }); } - } + window.onpopstate = function(e) { + var targetDir; + if (e.state && e.state.dir) { + targetDir = e.state.dir; + } + else{ + // read from URL + targetDir = parseCurrentDirFromUrl(); + } + if (targetDir) { + FileList.changeDirectory(targetDir, false); + } + }; - if (parseInt($('#ajaxLoad').val(), 10) === 1){ - // need to initially switch the dir to the one from the hash (IE8) - FileList.changeDirectory(parseCurrentDirFromUrl(), false, true); + if (parseInt($('#ajaxLoad').val(), 10) === 1) { + // need to initially switch the dir to the one from the hash (IE8) + FileList.changeDirectory(parseCurrentDirFromUrl(), false, true); + } } FileList.createFileSummary(); diff --git a/apps/files/js/files.js b/apps/files/js/files.js index ec688eaf63efff3ea5d0dc70db8e85e08a45f2ac..a535700c1b33949beb5c5a5d20fc6a08e539a6bc 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -1,18 +1,67 @@ -Files={ +/* + * Copyright (c) 2014 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +/* global OC, t, n, FileList, FileActions */ +/* global getURLParameter, isPublic */ +var Files = { + // file space size sync + _updateStorageStatistics: function() { + Files._updateStorageStatisticsTimeout = null; + var currentDir = FileList.getCurrentDirectory(), + state = Files.updateStorageStatistics; + if (state.dir){ + if (state.dir === currentDir) { + return; + } + // cancel previous call, as it was for another dir + state.call.abort(); + } + state.dir = currentDir; + state.call = $.getJSON(OC.filePath('files','ajax','getstoragestats.php') + '?dir=' + encodeURIComponent(currentDir),function(response) { + state.dir = null; + state.call = null; + Files.updateMaxUploadFilesize(response); + }); + }, + updateStorageStatistics: function(force) { + if (!OC.currentUser) { + return; + } + + // debounce to prevent calling too often + if (Files._updateStorageStatisticsTimeout) { + clearTimeout(Files._updateStorageStatisticsTimeout); + } + if (force) { + Files._updateStorageStatistics(); + } + else { + Files._updateStorageStatisticsTimeout = setTimeout(Files._updateStorageStatistics, 250); + } + }, + updateMaxUploadFilesize:function(response) { - if(response == undefined) { + if (response === undefined) { return; } - if(response.data !== undefined && response.data.uploadMaxFilesize !== undefined) { + if (response.data !== undefined && response.data.uploadMaxFilesize !== undefined) { $('#max_upload').val(response.data.uploadMaxFilesize); + $('#free_space').val(response.data.freeSpace); $('#upload.button').attr('original-title', response.data.maxHumanFilesize); $('#usedSpacePercent').val(response.data.usedSpacePercent); Files.displayStorageWarnings(); } - if(response[0] == undefined) { + if (response[0] === undefined) { return; } - if(response[0].uploadMaxFilesize !== undefined) { + if (response[0].uploadMaxFilesize !== undefined) { $('#max_upload').val(response[0].uploadMaxFilesize); $('#upload.button').attr('original-title', response[0].maxHumanFilesize); $('#usedSpacePercent').val(response[0].usedSpacePercent); @@ -20,25 +69,39 @@ Files={ } }, - isFileNameValid:function (name) { - if (name === '.') { - OC.Notification.show(t('files', '\'.\' is an invalid file name.')); - return false; - } - if (name.length == 0) { - OC.Notification.show(t('files', 'File name cannot be empty.')); - return false; + + /** + * Fix path name by removing double slash at the beginning, if any + */ + fixPath: function(fileName) { + if (fileName.substr(0, 2) == '//') { + return fileName.substr(1); } + return fileName; + }, + /** + * Checks whether the given file name is valid. + * @param name file name to check + * @return true if the file name is valid. + * Throws a string exception with an error message if + * the file name is not valid + */ + isFileNameValid: function (name) { + var trimmedName = name.trim(); + if (trimmedName === '.' || trimmedName === '..') { + throw t('files', '"{name}" is an invalid file name.', {name: name}); + } else if (trimmedName.length === 0) { + throw t('files', 'File name cannot be empty.'); + } // check for invalid characters - var invalid_characters = ['\\', '/', '<', '>', ':', '"', '|', '?', '*']; + var invalid_characters = + ['\\', '/', '<', '>', ':', '"', '|', '?', '*', '\n']; for (var i = 0; i < invalid_characters.length; i++) { - if (name.indexOf(invalid_characters[i]) != -1) { - OC.Notification.show(t('files', "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed.")); - return false; + if (trimmedName.indexOf(invalid_characters[i]) !== -1) { + throw t('files', "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed."); } } - OC.Notification.hide(); return true; }, displayStorageWarnings: function() { @@ -63,24 +126,33 @@ Files={ } var encryptedFiles = $('#encryptedFiles').val(); + var initStatus = $('#encryptionInitStatus').val(); + if (initStatus === '0') { // enc not initialized, but should be + OC.Notification.show(t('files_encryption', 'Encryption App is enabled but your keys are not initialized, please log-out and log-in again')); + return; + } + if (initStatus === '1') { // encryption tried to init but failed + OC.Notification.showHtml(t('files_encryption', 'Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files.')); + return; + } if (encryptedFiles === '1') { OC.Notification.show(t('files_encryption', 'Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files.')); return; } }, - setupDragAndDrop: function(){ + setupDragAndDrop: function() { var $fileList = $('#fileList'); //drag/drop of files - $fileList.find('tr td.filename').each(function(i,e){ + $fileList.find('tr td.filename').each(function(i,e) { if ($(e).parent().data('permissions') & OC.PERMISSION_DELETE) { $(e).draggable(dragOptions); } }); - $fileList.find('tr[data-type="dir"] td.filename').each(function(i,e){ - if ($(e).parent().data('permissions') & OC.PERMISSION_CREATE){ + $fileList.find('tr[data-type="dir"] td.filename').each(function(i,e) { + if ($(e).parent().data('permissions') & OC.PERMISSION_CREATE) { $(e).droppable(folderDropOptions); } }); @@ -89,6 +161,8 @@ Files={ lastWidth: 0, initBreadCrumbs: function () { + var $controls = $('#controls'); + Files.lastWidth = 0; Files.breadcrumbs = []; @@ -109,13 +183,16 @@ Files={ }); // event handlers for breadcrumb items - $('#controls .crumb a').on('click', onClickBreadcrumb); + $controls.find('.crumb a').on('click', onClickBreadcrumb); + + // setup drag and drop + $controls.find('.crumb:not(.last)').droppable(crumbDropOptions); }, resizeBreadcrumbs: function (width, firstRun) { - if (width != Files.lastWidth) { + if (width !== Files.lastWidth) { if ((width < Files.lastWidth || firstRun) && width < Files.breadcrumbsWidth) { - if (Files.hiddenBreadcrumbs == 0) { + if (Files.hiddenBreadcrumbs === 0) { Files.breadcrumbsWidth -= $(Files.breadcrumbs[1]).get(0).offsetWidth; $(Files.breadcrumbs[1]).find('a').hide(); $(Files.breadcrumbs[1]).append('...'); @@ -127,12 +204,12 @@ Files={ Files.breadcrumbsWidth -= $(Files.breadcrumbs[i]).get(0).offsetWidth; $(Files.breadcrumbs[i]).hide(); Files.hiddenBreadcrumbs = i; - i++ + i++; } } else if (width > Files.lastWidth && Files.hiddenBreadcrumbs > 0) { var i = Files.hiddenBreadcrumbs; while (width > Files.breadcrumbsWidth && i > 0) { - if (Files.hiddenBreadcrumbs == 1) { + if (Files.hiddenBreadcrumbs === 1) { Files.breadcrumbsWidth -= $(Files.breadcrumbs[1]).get(0).offsetWidth; $(Files.breadcrumbs[1]).find('span').remove(); $(Files.breadcrumbs[1]).find('a').show(); @@ -156,7 +233,7 @@ Files={ }; $(document).ready(function() { // FIXME: workaround for trashbin app - if (window.trashBinApp){ + if (window.trashBinApp) { return; } Files.displayEncryptionWarning(); @@ -167,11 +244,8 @@ $(document).ready(function() { $('#file_action_panel').attr('activeAction', false); - $('div.crumb:not(.last)').droppable(crumbDropOptions); - $('ul#apps>li:first-child').data('dir',''); - if($('div.crumb').length){ - $('ul#apps>li:first-child').droppable(crumbDropOptions); - } + // allow dropping on the "files" app icon + $('ul#apps li:first-child').data('dir','').droppable(crumbDropOptions); // Triggers invisible file input $('#upload a').on('click', function() { @@ -204,7 +278,7 @@ $(document).ready(function() { var rows = $(this).parent().parent().parent().children('tr'); for (var i = start; i < end; i++) { $(rows).each(function(index) { - if (index == i) { + if (index === i) { var checkbox = $(this).children().children('input:checkbox'); $(checkbox).attr('checked', 'checked'); $(checkbox).parent().parent().addClass('selected'); @@ -221,23 +295,23 @@ $(document).ready(function() { } else { $(checkbox).attr('checked', 'checked'); $(checkbox).parent().parent().toggleClass('selected'); - var selectedCount=$('td.filename input:checkbox:checked').length; - if (selectedCount == $('td.filename input:checkbox').length) { + var selectedCount = $('td.filename input:checkbox:checked').length; + if (selectedCount === $('td.filename input:checkbox').length) { $('#select_all').attr('checked', 'checked'); } } procesSelection(); } else { var filename=$(this).parent().parent().attr('data-file'); - var tr=$('tr').filterAttr('data-file',filename); + var tr = FileList.findFileEl(filename); var renaming=tr.data('renaming'); - if(!renaming && !FileList.isLoading(filename)){ + if (!renaming && !FileList.isLoading(filename)) { 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){ + if (action) { event.preventDefault(); action(filename); } @@ -248,11 +322,11 @@ $(document).ready(function() { // Sets the select_all checkbox behaviour : $('#select_all').click(function() { - if($(this).attr('checked')){ + if ($(this).attr('checked')) { // Check all $('td.filename input:checkbox').attr('checked', true); $('td.filename input:checkbox').parent().parent().addClass('selected'); - }else{ + } else { // Uncheck all $('td.filename input:checkbox').attr('checked', false); $('td.filename input:checkbox').parent().parent().removeClass('selected'); @@ -269,7 +343,7 @@ $(document).ready(function() { var rows = $(this).parent().parent().parent().children('tr'); for (var i = start; i < end; i++) { $(rows).each(function(index) { - if (index == i) { + if (index === i) { var checkbox = $(this).children().children('input:checkbox'); $(checkbox).attr('checked', 'checked'); $(checkbox).parent().parent().addClass('selected'); @@ -279,10 +353,10 @@ $(document).ready(function() { } var selectedCount=$('td.filename input:checkbox:checked').length; $(this).parent().parent().toggleClass('selected'); - if(!$(this).attr('checked')){ + if (!$(this).attr('checked')) { $('#select_all').attr('checked',false); - }else{ - if(selectedCount==$('td.filename input:checkbox').length){ + } else { + if (selectedCount===$('td.filename input:checkbox').length) { $('#select_all').attr('checked',true); } } @@ -290,21 +364,22 @@ $(document).ready(function() { }); $('.download').click('click',function(event) { - var files=getSelectedFiles('name'); + var files=getSelectedFilesTrash('name'); var fileslist = JSON.stringify(files); var dir=$('#dir').val()||'/'; OC.Notification.show(t('files','Your download is being prepared. This might take some time if the files are big.')); // use special download URL if provided, e.g. for public shared files - if ( (downloadURL = document.getElementById("downloadURL")) ) { - window.location=downloadURL.value+"&download&files="+encodeURIComponent(fileslist); + var downloadURL = document.getElementById("downloadURL"); + if ( downloadURL ) { + window.location = downloadURL.value+"&download&files=" + encodeURIComponent(fileslist); } else { - window.location=OC.filePath('files', 'ajax', 'download.php') + '?'+ $.param({ dir: dir, files: fileslist }); + window.location = OC.filePath('files', 'ajax', 'download.php') + '?'+ $.param({ dir: dir, files: fileslist }); } return false; }); $('.delete-selected').click(function(event) { - var files=getSelectedFiles('name'); + var files=getSelectedFilesTrash('name'); event.preventDefault(); FileList.do_delete(files); return false; @@ -333,44 +408,40 @@ $(document).ready(function() { setTimeout ( "Files.displayStorageWarnings()", 100 ); OC.Notification.setDefault(Files.displayStorageWarnings); - // file space size sync - function update_storage_statistics() { - $.getJSON(OC.filePath('files','ajax','getstoragestats.php'),function(response) { - Files.updateMaxUploadFilesize(response); - }); - } - - // start on load - we ask the server every 5 minutes - var update_storage_statistics_interval = 5*60*1000; - var update_storage_statistics_interval_id = setInterval(update_storage_statistics, update_storage_statistics_interval); - - // Use jquery-visibility to de-/re-activate file stats sync - if ($.support.pageVisibility) { - $(document).on({ - 'show.visibility': function() { - if (!update_storage_statistics_interval_id) { - update_storage_statistics_interval_id = setInterval(update_storage_statistics, update_storage_statistics_interval); + // only possible at the moment if user is logged in + if (OC.currentUser) { + // start on load - we ask the server every 5 minutes + var updateStorageStatisticsInterval = 5*60*1000; + var updateStorageStatisticsIntervalId = setInterval(Files.updateStorageStatistics, updateStorageStatisticsInterval); + + // Use jquery-visibility to de-/re-activate file stats sync + if ($.support.pageVisibility) { + $(document).on({ + 'show.visibility': function() { + if (!updateStorageStatisticsIntervalId) { + updateStorageStatisticsIntervalId = setInterval(Files.updateStorageStatistics, updateStorageStatisticsInterval); + } + }, + 'hide.visibility': function() { + clearInterval(updateStorageStatisticsIntervalId); + updateStorageStatisticsIntervalId = 0; } - }, - 'hide.visibility': function() { - clearInterval(update_storage_statistics_interval_id); - update_storage_statistics_interval_id = 0; - } - }); + }); + } } - + //scroll to and highlight preselected file if (getURLParameter('scrollto')) { FileList.scrollTo(getURLParameter('scrollto')); } }); -function scanFiles(force, dir, users){ +function scanFiles(force, dir, users) { if (!OC.currentUser) { return; } - if(!dir){ + if (!dir) { dir = ''; } force = !!force; //cast to bool @@ -388,17 +459,18 @@ function scanFiles(force, dir, users){ scannerEventSource = new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force: force,dir: dir}); } scanFiles.cancel = scannerEventSource.close.bind(scannerEventSource); - scannerEventSource.listen('count',function(count){ - console.log(count + ' files scanned') + scannerEventSource.listen('count',function(count) { + console.log(count + ' files scanned'); }); - scannerEventSource.listen('folder',function(path){ - console.log('now scanning ' + path) + scannerEventSource.listen('folder',function(path) { + console.log('now scanning ' + path); }); - scannerEventSource.listen('done',function(count){ + scannerEventSource.listen('done',function(count) { scanFiles.scanning=false; console.log('done after ' + count + ' files'); + Files.updateStorageStatistics(); }); - scannerEventSource.listen('user',function(user){ + scannerEventSource.listen('user',function(user) { console.log('scanning files for ' + user); }); } @@ -407,14 +479,14 @@ scanFiles.scanning=false; function boolOperationFinished(data, callback) { result = jQuery.parseJSON(data.responseText); Files.updateMaxUploadFilesize(result); - if(result.status == 'success'){ + if (result.status === 'success') { callback.call(); } else { alert(result.data.message); } } -var createDragShadow = function(event){ +var createDragShadow = function(event) { //select dragged file var isDragSelected = $(event.target).parents('tr').find('td input:first').prop('checked'); if (!isDragSelected) { @@ -422,9 +494,9 @@ var createDragShadow = function(event){ $(event.target).parents('tr').find('td input:first').prop('checked',true); } - var selectedFiles = getSelectedFiles(); + var selectedFiles = getSelectedFilesTrash(); - if (!isDragSelected && selectedFiles.length == 1) { + if (!isDragSelected && selectedFiles.length === 1) { //revert the selection $(event.target).parents('tr').find('td input:first').prop('checked',false); } @@ -441,8 +513,8 @@ var createDragShadow = function(event){ var dir=$('#dir').val(); - $(selectedFiles).each(function(i,elem){ - var newtr = $('').attr('data-dir', dir).attr('data-filename', elem.name); + $(selectedFiles).each(function(i,elem) { + var newtr = $('').attr('data-dir', dir).attr('data-filename', elem.name).attr('data-origin', elem.origin); newtr.append($('').addClass('filename').text(elem.name)); newtr.append($('').addClass('size').text(humanFileSize(elem.size))); tbody.append(newtr); @@ -450,50 +522,75 @@ var createDragShadow = function(event){ newtr.find('td.filename').attr('style','background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')'); } else { var path = getPathForPreview(elem.name); - lazyLoadPreview(path, elem.mime, function(previewpath){ + Files.lazyLoadPreview(path, elem.mime, function(previewpath) { newtr.find('td.filename').attr('style','background-image:url('+previewpath+')'); - }); + }, null, null, elem.etag); } }); return dragshadow; -} +}; //options for file drag/drop +//start&stop handlers needs some cleaning up var dragOptions={ revert: 'invalid', revertDuration: 300, - opacity: 0.7, zIndex: 100, appendTo: 'body', cursorAt: { left: -5, top: -5 }, + opacity: 0.7, zIndex: 100, appendTo: 'body', cursorAt: { left: 24, top: 18 }, helper: createDragShadow, cursor: 'move', - stop: function(event, ui) { - $('#fileList tr td.filename').addClass('ui-draggable'); - } -} + start: function(event, ui){ + var $selectedFiles = $('td.filename input:checkbox:checked'); + if($selectedFiles.length > 1){ + $selectedFiles.parents('tr').fadeTo(250, 0.2); + } + else{ + $(this).fadeTo(250, 0.2); + } + }, + stop: function(event, ui) { + var $selectedFiles = $('td.filename input:checkbox:checked'); + if($selectedFiles.length > 1){ + $selectedFiles.parents('tr').fadeTo(250, 1); + } + else{ + $(this).fadeTo(250, 1); + } + $('#fileList tr td.filename').addClass('ui-draggable'); + } +}; // sane browsers support using the distance option if ( $('html.ie').length === 0) { dragOptions['distance'] = 20; } var folderDropOptions={ + hoverClass: "canDrop", drop: function( event, ui ) { //don't allow moving a file into a selected folder if ($(event.target).parents('tr').find('td input:first').prop('checked') === true) { return false; } - var target=$.trim($(this).find('.nametext').text()); + var target = $(this).closest('tr').data('file'); var files = ui.helper.find('tr'); - $(files).each(function(i,row){ + $(files).each(function(i,row) { var dir = $(row).data('dir'); var file = $(row).data('filename'); + //slapdash selector, tracking down our original element that the clone budded off of. + var origin = $('tr[data-id=' + $(row).data('origin') + ']'); + var td = origin.children('td.filename'); + var oldBackgroundImage = td.css('background-image'); + td.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')'); $.post(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: dir+'/'+target }, function(result) { if (result) { if (result.status === 'success') { //recalculate folder size - var oldSize = $('#fileList tr').filterAttr('data-file',target).data('size'); - var newSize = oldSize + $('#fileList tr').filterAttr('data-file',file).data('size'); - $('#fileList tr').filterAttr('data-file',target).data('size', newSize); - $('#fileList tr').filterAttr('data-file',target).find('td.filesize').text(humanFileSize(newSize)); + var oldFile = FileList.findFileEl(target); + var newFile = FileList.findFileEl(file); + var oldSize = oldFile.data('size'); + var newSize = oldSize + newFile.data('size'); + oldFile.data('size', newSize); + oldFile.find('td.filesize').text(humanFileSize(newSize)); FileList.remove(file); procesSelection(); @@ -506,30 +603,36 @@ var folderDropOptions={ } else { OC.dialogs.alert(t('files', 'Error moving file'), t('files', 'Error')); } + td.css('background-image', oldBackgroundImage); }); }); }, tolerance: 'pointer' -} +}; var crumbDropOptions={ drop: function( event, ui ) { var target=$(this).data('dir'); - var dir=$('#dir').val(); - while(dir.substr(0,1)=='/'){//remove extra leading /'s + var dir = $('#dir').val(); + while(dir.substr(0,1) === '/') {//remove extra leading /'s dir=dir.substr(1); } - dir='/'+dir; - if(dir.substr(-1,1)!='/'){ - dir=dir+'/'; + dir = '/' + dir; + if (dir.substr(-1,1) !== '/') { + dir = dir + '/'; } - if(target==dir || target+'/'==dir){ + if (target === dir || target+'/' === dir) { return; } var files = ui.helper.find('tr'); - $(files).each(function(i,row){ + $(files).each(function(i,row) { var dir = $(row).data('dir'); var file = $(row).data('filename'); + //slapdash selector, tracking down our original element that the clone budded off of. + var origin = $('tr[data-id=' + $(row).data('origin') + ']'); + var td = origin.children('td.filename'); + var oldBackgroundImage = td.css('background-image'); + td.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')'); $.post(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: target }, function(result) { if (result) { if (result.status === 'success') { @@ -544,44 +647,50 @@ var crumbDropOptions={ } else { OC.dialogs.alert(t('files', 'Error moving file'), t('files', 'Error')); } + td.css('background-image', oldBackgroundImage); }); }); }, tolerance: 'pointer' -} +}; -function procesSelection(){ - var selected=getSelectedFiles(); - var selectedFiles=selected.filter(function(el){return el.type=='file'}); - var selectedFolders=selected.filter(function(el){return el.type=='dir'}); - if(selectedFiles.length==0 && selectedFolders.length==0) { - $('#headerName>span.name').text(t('files','Name')); +function procesSelection() { + var selected = getSelectedFilesTrash(); + var selectedFiles = selected.filter(function(el) { + return el.type==='file'; + }); + var selectedFolders = selected.filter(function(el) { + return el.type==='dir'; + }); + if (selectedFiles.length === 0 && selectedFolders.length === 0) { + $('#headerName span.name').text(t('files','Name')); $('#headerSize').text(t('files','Size')); $('#modified').text(t('files','Modified')); $('table').removeClass('multiselect'); $('.selectedActions').hide(); + $('#select_all').removeAttr('checked'); } else { $('.selectedActions').show(); - var totalSize=0; - for(var i=0;i0){ + var selection = ''; + if (selectedFolders.length > 0) { selection += n('files', '%n folder', '%n folders', selectedFolders.length); - if(selectedFiles.length>0){ - selection+=' & '; + if (selectedFiles.length > 0) { + selection += ' & '; } } - if(selectedFiles.length>0){ + if (selectedFiles.length>0) { selection += n('files', '%n file', '%n files', selectedFiles.length); } - $('#headerName>span.name').text(selection); + $('#headerName span.name').text(selection); $('#modified').text(''); $('table').addClass('multiselect'); } @@ -589,54 +698,58 @@ function procesSelection(){ /** * @brief get a list of selected files - * @param string property (option) the property of the file requested - * @return array + * @param {string} property (option) the property of the file requested + * @return {array} * * possible values for property: name, mime, size and type * if property is set, an array with that property for each file is returnd * if it's ommited an array of objects with all properties is returned */ -function getSelectedFiles(property){ +function getSelectedFilesTrash(property) { var elements=$('td.filename input:checkbox:checked').parent().parent(); var files=[]; - elements.each(function(i,element){ + elements.each(function(i,element) { var file={ name:$(element).attr('data-file'), mime:$(element).data('mime'), type:$(element).data('type'), - size:$(element).data('size') + size:$(element).data('size'), + etag:$(element).data('etag'), + origin: $(element).data('id') }; - if(property){ + if (property) { files.push(file[property]); - }else{ + } else { files.push(file); } }); return files; } -function getMimeIcon(mime, ready){ - if(getMimeIcon.cache[mime]){ - ready(getMimeIcon.cache[mime]); - }else{ - $.get( OC.filePath('files','ajax','mimeicon.php'), {mime: mime}, function(path){ - getMimeIcon.cache[mime]=path; - ready(getMimeIcon.cache[mime]); +Files.getMimeIcon = function(mime, ready) { + if (Files.getMimeIcon.cache[mime]) { + ready(Files.getMimeIcon.cache[mime]); + } else { + $.get( OC.filePath('files','ajax','mimeicon.php'), {mime: mime}, function(path) { + Files.getMimeIcon.cache[mime]=path; + ready(Files.getMimeIcon.cache[mime]); }); } } -getMimeIcon.cache={}; +Files.getMimeIcon.cache={}; function getPathForPreview(name) { var path = $('#dir').val() + '/' + name; return path; } -function lazyLoadPreview(path, mime, ready, width, height) { +Files.lazyLoadPreview = function(path, mime, ready, width, height, etag) { // get mime icon url - getMimeIcon(mime, function(iconURL) { + Files.getMimeIcon(mime, function(iconURL) { + var urlSpec = {}; + var previewURL; ready(iconURL); // set mimeicon URL - + // now try getting a preview thumbnail URL if ( ! width ) { width = $('#filestable').data('preview-x'); @@ -644,22 +757,44 @@ function lazyLoadPreview(path, mime, ready, width, height) { if ( ! height ) { height = $('#filestable').data('preview-y'); } - if( $('#publicUploadButtonMock').length ) { - var previewURL = OC.Router.generate('core_ajax_public_preview', {file: encodeURIComponent(path), x:width, y:height, t:$('#dirToken').val()}); + // note: the order of arguments must match the one + // from the server's template so that the browser + // knows it's the same file for caching + urlSpec.x = width; + urlSpec.y = height; + urlSpec.file = Files.fixPath(path); + + if (etag){ + // use etag as cache buster + urlSpec.c = etag; + } + else { + console.warn('Files.lazyLoadPreview(): missing etag argument'); + } + + if ( $('#isPublic').length ) { + urlSpec.t = $('#dirToken').val(); + previewURL = OC.Router.generate('core_ajax_public_preview', urlSpec); } else { - var previewURL = OC.Router.generate('core_ajax_preview', {file: encodeURIComponent(path), x:width, y:height}); + previewURL = OC.Router.generate('core_ajax_preview', urlSpec); } - $.get(previewURL, function() { - previewURL = previewURL.replace('(', '%28'); - previewURL = previewURL.replace(')', '%29'); + previewURL = previewURL.replace('(', '%28'); + previewURL = previewURL.replace(')', '%29'); + + // preload image to prevent delay + // this will make the browser cache the image + var img = new Image(); + img.onload = function(){ //set preview thumbnail URL - ready(previewURL + '&reload=true'); - }); + ready(previewURL); + } + img.src = previewURL; }); -} +}; -function getUniqueName(name){ - if($('tr').filterAttr('data-file',name).length>0){ +function getUniqueName(name) { + if (FileList.findFileEl(name).exists()) { + var numMatch; var parts=name.split('.'); var extension = ""; if (parts.length > 1) { @@ -668,9 +803,9 @@ function getUniqueName(name){ var base=parts.join('.'); numMatch=base.match(/\((\d+)\)/); var num=2; - if(numMatch && numMatch.length>0){ + if (numMatch && numMatch.length>0) { num=parseInt(numMatch[numMatch.length-1])+1; - base=base.split('(') + base=base.split('('); base.pop(); base=$.trim(base.join('(')); } @@ -684,15 +819,21 @@ function getUniqueName(name){ } function checkTrashStatus() { - $.post(OC.filePath('files_trashbin', 'ajax', 'isEmpty.php'), function(result){ + $.post(OC.filePath('files_trashbin', 'ajax', 'isEmpty.php'), function(result) { if (result.data.isEmpty === false) { $("input[type=button][id=trash]").removeAttr("disabled"); } }); } -function onClickBreadcrumb(e){ - var $el = $(e.target).closest('.crumb'); - e.preventDefault(); - FileList.changeDirectory(decodeURIComponent($el.data('dir'))); +function onClickBreadcrumb(e) { + var $el = $(e.target).closest('.crumb'), + $targetDir = $el.data('dir'), + isPublic = !!$('#isPublic').val(); + + if ($targetDir !== undefined && !isPublic) { + e.preventDefault(); + FileList.changeDirectory(decodeURIComponent($targetDir)); + } } + diff --git a/apps/files/js/upgrade.js b/apps/files/js/upgrade.js index 02d57fc9e6ccbe746f73b913e20e965ead6b2bf1..714adf824a1841e6a56e10822b2a436c6ad27670 100644 --- a/apps/files/js/upgrade.js +++ b/apps/files/js/upgrade.js @@ -1,3 +1,14 @@ +/* + * Copyright (c) 2014 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +/* global OC */ $(document).ready(function () { var eventSource, total, bar = $('#progressbar'); console.log('start'); diff --git a/apps/files/js/upload.js b/apps/files/js/upload.js index 9d9f61f600eef9cd6a960d10e2f02bbe901edd37..617cf4b1c1d4555f584547a309f473a7eff91b8c 100644 --- a/apps/files/js/upload.js +++ b/apps/files/js/upload.js @@ -1,3 +1,14 @@ +/* + * Copyright (c) 2014 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +/* global OC */ function Upload(fileSelector) { if ($.support.xhrFileUpload) { return new XHRUpload(fileSelector.target.files); diff --git a/apps/files/l10n/ady.php b/apps/files/l10n/ady.php new file mode 100644 index 0000000000000000000000000000000000000000..0157af093e92200cc7790497227e92e62d80165f --- /dev/null +++ b/apps/files/l10n/ady.php @@ -0,0 +1,7 @@ + array("",""), +"_%n file_::_%n files_" => array("",""), +"_Uploading %n file_::_Uploading %n files_" => array("","") +); +$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files/l10n/af.php b/apps/files/l10n/af.php new file mode 100644 index 0000000000000000000000000000000000000000..0157af093e92200cc7790497227e92e62d80165f --- /dev/null +++ b/apps/files/l10n/af.php @@ -0,0 +1,7 @@ + array("",""), +"_%n file_::_%n files_" => array("",""), +"_Uploading %n file_::_Uploading %n files_" => array("","") +); +$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files/l10n/ak.php b/apps/files/l10n/ak.php new file mode 100644 index 0000000000000000000000000000000000000000..f229792722d7d464a1dc330eb51ab777d8c95e99 --- /dev/null +++ b/apps/files/l10n/ak.php @@ -0,0 +1,7 @@ + array("",""), +"_%n file_::_%n files_" => array("",""), +"_Uploading %n file_::_Uploading %n files_" => array("","") +); +$PLURAL_FORMS = "nplurals=2; plural=n > 1;"; diff --git a/apps/files/l10n/ar.php b/apps/files/l10n/ar.php index 67a3414819b7e16a320846e4ac01df5aa08d2d7c..0148f5ca3c124035cd88d6009bae063bb361e46d 100644 --- a/apps/files/l10n/ar.php +++ b/apps/files/l10n/ar.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "فشل في نقل الملف %s - يوجد ملف بنفس هذا الاسم", "Could not move %s" => "فشل في نقل %s", +"File name cannot be empty." => "اسم الملف لا يجوز أن يكون فارغا", "Unable to set upload directory." => "غير قادر على تحميل المجلد", "Invalid Token" => "علامة غير صالحة", "No file was uploaded. Unknown error" => "لم يتم رفع أي ملف , خطأ غير معروف", @@ -13,38 +14,40 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "المجلد المؤقت غير موجود", "Failed to write to disk" => "خطأ في الكتابة على القرص الصلب", "Not enough storage available" => "لا يوجد مساحة تخزينية كافية", +"Upload failed. Could not get file info." => "فشلت عملية الرفع. تعذر الحصول على معلومات الملف.", +"Upload failed. Could not find uploaded file" => "*فشلت علمية الرفع. تعذر إيجاد الملف الذي تم رفعه.\n*فشلت علمية التحميل. تعذر إيجاد الملف الذي تم تحميله.", "Invalid directory." => "مسار غير صحيح.", "Files" => "الملفات", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "تعذر رفع الملف {filename} إما لأنه مجلد أو لان حجم الملف 0 بايت", "Not enough space available" => "لا توجد مساحة كافية", "Upload cancelled." => "تم إلغاء عملية رفع الملفات .", +"Could not get result from server." => "تعذر الحصول على نتيجة من الخادم", "File upload is in progress. Leaving the page now will cancel the upload." => "عملية رفع الملفات قيد التنفيذ. اغلاق الصفحة سوف يلغي عملية رفع الملفات.", -"URL cannot be empty." => "عنوان ال URL لا يجوز أن يكون فارغا.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "تسمية ملف غير صالحة. استخدام الاسم \"shared\" محجوز بواسطة ownCloud", -"Error" => "خطأ", +"{new_name} already exists" => "{new_name} موجود مسبقا", "Share" => "شارك", "Delete permanently" => "حذف بشكل دائم", "Rename" => "إعادة تسميه", "Pending" => "قيد الانتظار", -"{new_name} already exists" => "{new_name} موجود مسبقا", -"replace" => "استبدال", -"suggest name" => "اقترح إسم", -"cancel" => "إلغاء", "replaced {new_name} with {old_name}" => "استبدل {new_name} بـ {old_name}", "undo" => "تراجع", -"_%n folder_::_%n folders_" => array("","","","","",""), -"_%n file_::_%n files_" => array("","","","","",""), +"_%n folder_::_%n folders_" => array("لا يوجد مجلدات %n","1 مجلد %n","2 مجلد %n","عدد قليل من مجلدات %n","عدد كبير من مجلدات %n","مجلدات %n"), +"_%n file_::_%n files_" => array("لا يوجد ملفات %n","ملف %n","2 ملف %n","قليل من ملفات %n","الكثير من ملفات %n"," ملفات %n"), "{dirs} and {files}" => "{dirs} و {files}", -"_Uploading %n file_::_Uploading %n files_" => array("","","","","",""), +"_Uploading %n file_::_Uploading %n files_" => array("لا يوجد ملفات %n لتحميلها","تحميل 1 ملف %n","تحميل 2 ملف %n","يتم تحميل عدد قليل من ملفات %n","يتم تحميل عدد كبير من ملفات %n","يتم تحميل ملفات %n"), "'.' is an invalid file name." => "\".\" اسم ملف غير صحيح.", -"File name cannot be empty." => "اسم الملف لا يجوز أن يكون فارغا", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "اسم غير صحيح , الرموز '\\', '/', '<', '>', ':', '\"', '|', '?' و \"*\" غير مسموح استخدامها", "Your storage is full, files can not be updated or synced anymore!" => "مساحتك التخزينية ممتلئة, لا يمكم تحديث ملفاتك أو مزامنتها بعد الآن !", "Your storage is almost full ({usedSpacePercent}%)" => "مساحتك التخزينية امتلأت تقريبا ", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "تم تمكين تشفير البرامج لكن لم يتم تهيئة المفاتيح لذا يرجى تسجيل الخروج ثم تسجيل الدخول مرة آخرى.", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "المفتاح الخاص بتشفير التطبيقات غير صالح. يرجى تحديث كلمة السر الخاصة بالمفتاح الخاص من الإعدادت الشخصية حتى تتمكن من الوصول للملفات المشفرة.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "تم تعطيل التشفير لكن ملفاتك لا تزال مشفرة. فضلا اذهب إلى الإعدادات الشخصية لإزالة التشفير عن ملفاتك.", "Your download is being prepared. This might take some time if the files are big." => "جاري تجهيز عملية التحميل. قد تستغرق بعض الوقت اذا كان حجم الملفات كبير.", +"Error moving file" => "حدث خطأ أثناء نقل الملف", +"Error" => "خطأ", "Name" => "اسم", "Size" => "حجم", "Modified" => "معدل", +"%s could not be renamed" => "%s لا يمكن إعادة تسميته. ", "Upload" => "رفع", "File handling" => "التعامل مع الملف", "Maximum upload size" => "الحد الأقصى لحجم الملفات التي يمكن رفعها", @@ -60,10 +63,8 @@ $TRANSLATIONS = array( "From link" => "من رابط", "Deleted files" => "حذف الملفات", "Cancel upload" => "إلغاء رفع الملفات", -"You don’t have write permissions here." => "لا تملك صلاحيات الكتابة هنا.", "Nothing in here. Upload something!" => "لا يوجد شيء هنا. إرفع بعض الملفات!", "Download" => "تحميل", -"Unshare" => "إلغاء مشاركة", "Delete" => "إلغاء", "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/az.php b/apps/files/l10n/az.php new file mode 100644 index 0000000000000000000000000000000000000000..70ab6572ba466c23b8066e18b9ee2f9cb2a7a827 --- /dev/null +++ b/apps/files/l10n/az.php @@ -0,0 +1,7 @@ + array(""), +"_%n file_::_%n files_" => array(""), +"_Uploading %n file_::_Uploading %n files_" => array("") +); +$PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files/l10n/be.php b/apps/files/l10n/be.php index 17262d2184dd3787640bf0bf218b7e715ea7b0b7..830400b93fbf643f6cea6e83b0fb51f0519e0221 100644 --- a/apps/files/l10n/be.php +++ b/apps/files/l10n/be.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "_%n folder_::_%n folders_" => array("","","",""), "_%n file_::_%n files_" => array("","","",""), -"_Uploading %n file_::_Uploading %n files_" => array("","","","") +"_Uploading %n file_::_Uploading %n files_" => array("","","",""), +"Error" => "Памылка" ); $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);"; diff --git a/apps/files/l10n/bg_BG.php b/apps/files/l10n/bg_BG.php index e7dafd1c43a584c5b7f0efed9c66c89d27f7de85..12e699064be74512d19947e007a52e320553e042 100644 --- a/apps/files/l10n/bg_BG.php +++ b/apps/files/l10n/bg_BG.php @@ -9,17 +9,15 @@ $TRANSLATIONS = array( "Invalid directory." => "Невалидна директория.", "Files" => "Файлове", "Upload cancelled." => "Качването е спряно.", -"Error" => "Грешка", "Share" => "Споделяне", "Delete permanently" => "Изтриване завинаги", "Rename" => "Преименуване", "Pending" => "Чакащо", -"replace" => "препокриване", -"cancel" => "отказ", "undo" => "възтановяване", "_%n folder_::_%n folders_" => array("",""), "_%n file_::_%n files_" => array("",""), "_Uploading %n file_::_Uploading %n files_" => array("",""), +"Error" => "Грешка", "Name" => "Име", "Size" => "Размер", "Modified" => "Променено", @@ -29,6 +27,7 @@ $TRANSLATIONS = array( "Save" => "Запис", "New" => "Ново", "Text file" => "Текстов файл", +"New folder" => "Нова папка", "Folder" => "Папка", "Cancel upload" => "Спри качването", "Nothing in here. Upload something!" => "Няма нищо тук. Качете нещо.", diff --git a/apps/files/l10n/bn_BD.php b/apps/files/l10n/bn_BD.php index 66ac3a2165f88e624e616ba8ed1623260a1200f2..f7266517e9e80d2a8922a90820046bf2db2efcc5 100644 --- a/apps/files/l10n/bn_BD.php +++ b/apps/files/l10n/bn_BD.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "%s কে স্থানান্তর করা সম্ভব হলো না - এই নামের ফাইল বিদ্যমান", "Could not move %s" => "%s কে স্থানান্তর করা সম্ভব হলো না", +"File name cannot be empty." => "ফাইলের নামটি ফাঁকা রাখা যাবে না।", "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 নির্দেশিত আয়তন অতিক্রম করছেঃ", @@ -15,23 +16,18 @@ $TRANSLATIONS = array( "Not enough space available" => "যথেষ্ঠ পরিমাণ স্থান নেই", "Upload cancelled." => "আপলোড বাতিল করা হয়েছে।", "File upload is in progress. Leaving the page now will cancel the upload." => "ফাইল আপলোড চলমান। এই পৃষ্ঠা পরিত্যাগ করলে আপলোড বাতিল করা হবে।", -"URL cannot be empty." => "URL ফাঁকা রাখা যাবে না।", -"Error" => "সমস্যা", +"{new_name} already exists" => "{new_name} টি বিদ্যমান", "Share" => "ভাগাভাগি কর", "Rename" => "পূনঃনামকরণ", "Pending" => "মুলতুবি", -"{new_name} already exists" => "{new_name} টি বিদ্যমান", -"replace" => "প্রতিস্থাপন", -"suggest name" => "নাম সুপারিশ করুন", -"cancel" => "বাতিল", "replaced {new_name} with {old_name}" => "{new_name} কে {old_name} নামে প্রতিস্থাপন করা হয়েছে", "undo" => "ক্রিয়া প্রত্যাহার", "_%n folder_::_%n folders_" => array("",""), "_%n file_::_%n files_" => array("",""), "_Uploading %n file_::_Uploading %n files_" => array("",""), "'.' is an invalid file name." => "টি একটি অননুমোদিত নাম।", -"File name cannot be empty." => "ফাইলের নামটি ফাঁকা রাখা যাবে না।", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "নামটি সঠিক নয়, '\\', '/', '<', '>', ':', '\"', '|', '?' এবং '*' অনুমোদিত নয়।", +"Error" => "সমস্যা", "Name" => "রাম", "Size" => "আকার", "Modified" => "পরিবর্তিত", @@ -51,7 +47,6 @@ $TRANSLATIONS = array( "Cancel upload" => "আপলোড বাতিল কর", "Nothing in here. Upload something!" => "এখানে কিছুই নেই। কিছু আপলোড করুন !", "Download" => "ডাউনলোড", -"Unshare" => "ভাগাভাগি বাতিল ", "Delete" => "মুছে", "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/bs.php b/apps/files/l10n/bs.php index 8ab07a97761f1863952e9f09b0fd732c4a6d9509..47276eccda09a949995588f2a27a9c0aee4d3d8e 100644 --- a/apps/files/l10n/bs.php +++ b/apps/files/l10n/bs.php @@ -7,6 +7,7 @@ $TRANSLATIONS = array( "Name" => "Ime", "Size" => "Veličina", "Save" => "Spasi", +"New folder" => "Nova fascikla", "Folder" => "Fasikla" ); $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);"; diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php index 5c2cade8d637df60c665026bbccd8f5d1e1aca91..261713bc58134930807f752db6dc067e8ae5508f 100644 --- a/apps/files/l10n/ca.php +++ b/apps/files/l10n/ca.php @@ -2,6 +2,15 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom", "Could not move %s" => " No s'ha pogut moure %s", +"File name cannot be empty." => "El nom del fitxer no pot ser buit.", +"File name must not contain \"/\". Please choose a different name." => "El nom de fitxer no pot contenir \"/\". Indiqueu un nom diferent.", +"The name %s is already used in the folder %s. Please choose a different name." => "El nom %s ja s'usa en la carpeta %s. Indiqueu un nom diferent.", +"Not a valid source" => "No és un origen vàlid", +"Error while downloading %s to %s" => "S'ha produït un error en baixar %s a %s", +"Error when creating the file" => "S'ha produït un error en crear el fitxer", +"Folder name cannot be empty." => "El nom de la carpeta no pot ser buit.", +"Folder name must not contain \"/\". Please choose a different name." => "El nom de la carpeta no pot contenir \"/\". Indiqueu un nom diferent.", +"Error when creating the folder" => "S'ha produït un error en crear la carpeta", "Unable to set upload directory." => "No es pot establir la carpeta de pujada.", "Invalid Token" => "Testimoni no vàlid", "No file was uploaded. Unknown error" => "No s'ha carregat cap fitxer. Error desconegut", @@ -22,34 +31,37 @@ $TRANSLATIONS = array( "Upload cancelled." => "La pujada s'ha cancel·lat.", "Could not get result from server." => "No hi ha resposta del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." => "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.", -"URL cannot be empty." => "La URL no pot ser buida", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nom de carpeta no vàlid. L'ús de 'Shared' està reservat per Owncloud", -"Error" => "Error", +"URL cannot be empty" => "L'URL no pot ser buit", +"In the home folder 'Shared' is a reserved filename" => "A la carpeta inici 'Compartit' és un nom de fitxer reservat", +"{new_name} already exists" => "{new_name} ja existeix", +"Could not create file" => "No s'ha pogut crear el fitxer", +"Could not create folder" => "No s'ha pogut crear la carpeta", "Share" => "Comparteix", "Delete permanently" => "Esborra permanentment", "Rename" => "Reanomena", "Pending" => "Pendent", -"{new_name} already exists" => "{new_name} ja existeix", -"replace" => "substitueix", -"suggest name" => "sugereix un nom", -"cancel" => "cancel·la", +"Could not rename file" => "No es pot canviar el nom de fitxer", "replaced {new_name} with {old_name}" => "s'ha substituït {old_name} per {new_name}", "undo" => "desfés", +"Error deleting file." => "Error en esborrar el fitxer.", "_%n folder_::_%n folders_" => array("%n carpeta","%n carpetes"), "_%n file_::_%n files_" => array("%n fitxer","%n fitxers"), "{dirs} and {files}" => "{dirs} i {files}", "_Uploading %n file_::_Uploading %n files_" => array("Pujant %n fitxer","Pujant %n fitxers"), "'.' is an invalid file name." => "'.' és un nom no vàlid per un fitxer.", -"File name cannot be empty." => "El nom del fitxer no pot ser buit.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "El nóm no és vàlid, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' no estan permesos.", "Your storage is full, files can not be updated or synced anymore!" => "El vostre espai d'emmagatzemament és ple, els fitxers ja no es poden actualitzar o sincronitzar!", "Your storage is almost full ({usedSpacePercent}%)" => "El vostre espai d'emmagatzemament és gairebé ple ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "L'aplicació d'encriptació està activada però les claus no estan inicialitzades, sortiu i acrediteu-vos de nou.", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "La clau privada de l'aplicació d'encriptació no és vàlida! Actualitzeu la contrasenya de la clau privada a l'arranjament personal per recuperar els fitxers encriptats.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "L'encriptació s'ha desactivat però els vostres fitxers segueixen encriptats. Aneu a la vostra configuració personal per desencriptar els vostres fitxers.", "Your download is being prepared. This might take some time if the files are big." => "S'està preparant la baixada. Pot trigar una estona si els fitxers són grans.", "Error moving file" => "Error en moure el fitxer", +"Error" => "Error", "Name" => "Nom", "Size" => "Mida", "Modified" => "Modificat", +"Invalid folder name. Usage of 'Shared' is reserved." => "Nom de carpeta no vàlid. L'ús de 'Shared' és reservat", "%s could not be renamed" => "%s no es pot canviar el nom", "Upload" => "Puja", "File handling" => "Gestió de fitxers", @@ -61,15 +73,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Mida màxima d'entrada per fitxers ZIP", "Save" => "Desa", "New" => "Nou", +"New text file" => "Nou fitxer de text", "Text file" => "Fitxer de text", +"New folder" => "Carpeta nova", "Folder" => "Carpeta", "From link" => "Des d'enllaç", "Deleted files" => "Fitxers esborrats", "Cancel upload" => "Cancel·la la pujada", -"You don’t have write permissions here." => "No teniu permisos d'escriptura aquí.", +"You don’t have permission to upload or create files here" => "No teniu permisos per a pujar o crear els fitxers aquí", "Nothing in here. Upload something!" => "Res per aquí. Pugeu alguna cosa!", "Download" => "Baixa", -"Unshare" => "Deixa de compartir", "Delete" => "Esborra", "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", diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php index f1e54ee5fc39e9581300141c094827a05dc33022..44e0fdae1f158c3a2bbe02d0b7e6e92a924f7609 100644 --- a/apps/files/l10n/cs_CZ.php +++ b/apps/files/l10n/cs_CZ.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Nelze přesunout %s - již existuje soubor se stejným názvem", "Could not move %s" => "Nelze přesunout %s", +"File name cannot be empty." => "Název souboru nemůže být prázdný řetězec.", +"File name must not contain \"/\". Please choose a different name." => "Název souboru nesmí obsahovat \"/\". Vyberte prosím jiné jméno.", +"The name %s is already used in the folder %s. Please choose a different name." => "Název %s ve složce %s již existuje. Vyberte prosím jiné jméno.", +"Not a valid source" => "Neplatný zdroj", +"Server is not allowed to open URLs, please check the server configuration" => "Server není oprávněn otevírat adresy URL. Ověřte, prosím, konfiguraci serveru.", +"Error while downloading %s to %s" => "Chyba při stahování %s do %s", +"Error when creating the file" => "Chyba při vytváření souboru", +"Folder name cannot be empty." => "Název složky nemůže být prázdný.", +"Folder name must not contain \"/\". Please choose a different name." => "Název složky nesmí obsahovat \"/\". Zvolte prosím jiný.", +"Error when creating the folder" => "Chyba při vytváření složky", "Unable to set upload directory." => "Nelze nastavit adresář pro nahrané soubory.", "Invalid Token" => "Neplatný token", "No file was uploaded. Unknown error" => "Žádný soubor nebyl odeslán. Neznámá chyba", @@ -13,39 +23,47 @@ $TRANSLATIONS = array( "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", +"Upload failed. Could not get file info." => "Nahrávání selhalo. Nepodařilo se získat informace o souboru.", +"Upload failed. Could not find uploaded file" => "Nahrávání selhalo. Nepodařilo se nalézt nahraný soubor.", "Invalid directory." => "Neplatný adresář", "Files" => "Soubory", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "Nelze nahrát soubor {filename}, protože je to buď adresář nebo má velikost 0 bytů", "Not enough space available" => "Nedostatek volného místa", "Upload cancelled." => "Odesílání zrušeno.", +"Could not get result from server." => "Nepodařilo se získat výsledek ze serveru.", "File upload is in progress. Leaving the page now will cancel the upload." => "Probíhá odesílání souboru. Opuštění stránky způsobí zrušení nahrávání.", -"URL cannot be empty." => "URL nemůže být prázdná.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Název složky nelze použít. Použití názvu 'Shared' je ownCloudem rezervováno", -"Error" => "Chyba", +"URL cannot be empty" => "URL nemůže zůstat prázdná", +"In the home folder 'Shared' is a reserved filename" => "V osobní složce je název 'Shared' rezervovaný", +"{new_name} already exists" => "{new_name} již existuje", +"Could not create file" => "Nepodařilo se vytvořit soubor", +"Could not create folder" => "Nepodařilo se vytvořit složku", +"Error fetching URL" => "Chyba při načítání URL", "Share" => "Sdílet", "Delete permanently" => "Trvale odstranit", "Rename" => "Přejmenovat", "Pending" => "Nevyřízené", -"{new_name} already exists" => "{new_name} již existuje", -"replace" => "nahradit", -"suggest name" => "navrhnout název", -"cancel" => "zrušit", +"Could not rename file" => "Nepodařilo se přejmenovat soubor", "replaced {new_name} with {old_name}" => "nahrazeno {new_name} s {old_name}", "undo" => "vrátit zpět", +"Error deleting file." => "Chyba při mazání souboru.", "_%n folder_::_%n folders_" => array("%n složka","%n složky","%n složek"), "_%n file_::_%n files_" => array("%n soubor","%n soubory","%n souborů"), "{dirs} and {files}" => "{dirs} a {files}", "_Uploading %n file_::_Uploading %n files_" => array("Nahrávám %n soubor","Nahrávám %n soubory","Nahrávám %n souborů"), "'.' is an invalid file name." => "'.' je neplatným názvem souboru.", -"File name cannot be empty." => "Název souboru nemůže být prázdný řetězec.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Neplatný název, znaky '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nejsou povoleny.", "Your storage is full, files can not be updated or synced anymore!" => "Vaše úložiště je plné, nelze aktualizovat ani synchronizovat soubory.", "Your storage is almost full ({usedSpacePercent}%)" => "Vaše úložiště je téměř plné ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče ve vašem osobním nastavení, abyste znovu získali přístup k vašim zašifrovaným souborům.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifrování bylo vypnuto, vaše soubory jsou však stále zašifrované. Běžte prosím do osobního nastavení, kde soubory odšifrujete.", "Your download is being prepared. This might take some time if the files are big." => "Vaše soubory ke stažení se připravují. Pokud jsou velké, může to chvíli trvat.", "Error moving file" => "Chyba při přesunu souboru", +"Error" => "Chyba", "Name" => "Název", "Size" => "Velikost", "Modified" => "Upraveno", +"Invalid folder name. Usage of 'Shared' is reserved." => "Neplatný název složky. Použití 'Shared' je rezervováno.", "%s could not be renamed" => "%s nemůže být přejmenován", "Upload" => "Odeslat", "File handling" => "Zacházení se soubory", @@ -57,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Maximální velikost vstupu pro ZIP soubory", "Save" => "Uložit", "New" => "Nový", +"New text file" => "Nový textový soubor", "Text file" => "Textový soubor", +"New folder" => "Nová složka", "Folder" => "Složka", "From link" => "Z odkazu", "Deleted files" => "Odstraněné soubory", "Cancel upload" => "Zrušit odesílání", -"You don’t have write permissions here." => "Nemáte zde práva zápisu.", +"You don’t have permission to upload or create files here" => "Nemáte oprávnění zde nahrávat či vytvářet soubory", "Nothing in here. Upload something!" => "Žádný obsah. Nahrajte něco.", "Download" => "Stáhnout", -"Unshare" => "Zrušit sdílení", "Delete" => "Smazat", "Upload too large" => "Odesílaný 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.", diff --git a/apps/files/l10n/cy_GB.php b/apps/files/l10n/cy_GB.php index 86e5f65e7b0d3d46d037dc90dd1a2b459bfdf2ff..2a007761c520d3cfd678466f598781d0f618145f 100644 --- a/apps/files/l10n/cy_GB.php +++ b/apps/files/l10n/cy_GB.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Methwyd symud %s - Mae ffeil gyda'r enw hwn eisoes yn bodoli", "Could not move %s" => "Methwyd symud %s", +"File name cannot be empty." => "Does dim hawl cael enw ffeil gwag.", "No file was uploaded. Unknown error" => "Ni lwythwyd ffeil i fyny. Gwall anhysbys.", "There is no error, the file uploaded with success" => "Does dim gwall, llwythodd y ffeil i fyny'n llwyddiannus", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Mae'r ffeil lwythwyd i fyny'n fwy na chyfarwyddeb upload_max_filesize yn php.ini:", @@ -16,27 +17,22 @@ $TRANSLATIONS = array( "Not enough space available" => "Dim digon o le ar gael", "Upload cancelled." => "Diddymwyd llwytho i fyny.", "File upload is in progress. Leaving the page now will cancel the upload." => "Mae ffeiliau'n cael eu llwytho i fyny. Bydd gadael y dudalen hon nawr yn diddymu'r broses.", -"URL cannot be empty." => "Does dim hawl cael URL gwag.", -"Error" => "Gwall", +"{new_name} already exists" => "{new_name} yn bodoli'n barod", "Share" => "Rhannu", "Delete permanently" => "Dileu'n barhaol", "Rename" => "Ailenwi", "Pending" => "I ddod", -"{new_name} already exists" => "{new_name} yn bodoli'n barod", -"replace" => "amnewid", -"suggest name" => "awgrymu enw", -"cancel" => "diddymu", "replaced {new_name} with {old_name}" => "newidiwyd {new_name} yn lle {old_name}", "undo" => "dadwneud", "_%n folder_::_%n folders_" => array("","","",""), "_%n file_::_%n files_" => array("","","",""), "_Uploading %n file_::_Uploading %n files_" => array("","","",""), "'.' is an invalid file name." => "Mae '.' yn enw ffeil annilys.", -"File name cannot be empty." => "Does dim hawl cael enw ffeil gwag.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Enw annilys, ni chaniateir, '\\', '/', '<', '>', ':', '\"', '|', '?' na '*'.", "Your storage is full, files can not be updated or synced anymore!" => "Mae eich storfa'n llawn, ni ellir diweddaru a chydweddu ffeiliau mwyach!", "Your storage is almost full ({usedSpacePercent}%)" => "Mae eich storfa bron a bod yn llawn ({usedSpacePercent}%)", "Your download is being prepared. This might take some time if the files are big." => "Wrthi'n paratoi i lwytho i lawr. Gall gymryd peth amser os yw'r ffeiliau'n fawr.", +"Error" => "Gwall", "Name" => "Enw", "Size" => "Maint", "Modified" => "Addaswyd", @@ -55,10 +51,8 @@ $TRANSLATIONS = array( "From link" => "Dolen o", "Deleted files" => "Ffeiliau ddilewyd", "Cancel upload" => "Diddymu llwytho i fyny", -"You don’t have write permissions here." => "Nid oes gennych hawliau ysgrifennu fan hyn.", "Nothing in here. Upload something!" => "Does dim byd fan hyn. Llwythwch rhywbeth i fyny!", "Download" => "Llwytho i lawr", -"Unshare" => "Dad-rannu", "Delete" => "Dileu", "Upload too large" => "Maint llwytho i fyny'n rhy fawr", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Mae'r ffeiliau rydych yn ceisio llwytho i fyny'n fwy na maint mwyaf llwytho ffeiliau i fyny ar y gweinydd hwn.", diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php index c2a20931ba0457c0657b4a9b6073ca5aba6c4f3d..9b7722444a819812fe13e65dd83699e242b6253e 100644 --- a/apps/files/l10n/da.php +++ b/apps/files/l10n/da.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Kunne ikke flytte %s - der findes allerede en fil med dette navn", "Could not move %s" => "Kunne ikke flytte %s", +"File name cannot be empty." => "Filnavnet kan ikke stå tomt.", +"File name must not contain \"/\". Please choose a different name." => "Filnavnet må ikke indeholde \"/\". Vælg venligst et andet navn.", +"The name %s is already used in the folder %s. Please choose a different name." => "Navnet %s er allerede i brug i mappen %s. Vælg venligst et andet navn.", +"Not a valid source" => "Ikke en gyldig kilde", +"Server is not allowed to open URLs, please check the server configuration" => "Server har ikke tilladelse til at åbne URL'er. Kontroller venligst serverens indstillinger", +"Error while downloading %s to %s" => "Fejl ved hentning af %s til %s", +"Error when creating the file" => "Fejl ved oprettelse af fil", +"Folder name cannot be empty." => "Mappenavnet kan ikke være tomt.", +"Folder name must not contain \"/\". Please choose a different name." => "Mappenavnet må ikke indeholde \"/\". Vælg venligst et andet navn.", +"Error when creating the folder" => "Fejl ved oprettelse af mappen", "Unable to set upload directory." => "Ude af stand til at vælge upload mappe.", "Invalid Token" => "Ugyldig Token ", "No file was uploaded. Unknown error" => "Ingen fil blev uploadet. Ukendt fejl.", @@ -13,38 +23,47 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "Manglende midlertidig mappe.", "Failed to write to disk" => "Fejl ved skrivning til disk.", "Not enough storage available" => "Der er ikke nok plads til rådlighed", +"Upload failed. Could not get file info." => "Upload fejlede. Kunne ikke hente filinformation.", +"Upload failed. Could not find uploaded file" => "Upload fejlede. Kunne ikke finde den uploadede fil.", "Invalid directory." => "Ugyldig mappe.", "Files" => "Filer", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "Kan ikke upload {filename} da det er enten en mappe eller indholder 0 bytes.", "Not enough space available" => "ikke nok tilgængelig ledig plads ", "Upload cancelled." => "Upload afbrudt.", +"Could not get result from server." => "Kunne ikke hente resultat fra server.", "File upload is in progress. Leaving the page now will cancel the upload." => "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret.", -"URL cannot be empty." => "URLen kan ikke være tom.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Ugyldigt mappenavn. Brug af 'Shared' er forbeholdt af ownCloud", -"Error" => "Fejl", +"URL cannot be empty" => "URL kan ikke være tom", +"In the home folder 'Shared' is a reserved filename" => "Navnet 'Shared' er reserveret i hjemmemappen.", +"{new_name} already exists" => "{new_name} eksisterer allerede", +"Could not create file" => "Kunne ikke oprette fil", +"Could not create folder" => "Kunne ikke oprette mappe", +"Error fetching URL" => "Fejl ved URL", "Share" => "Del", "Delete permanently" => "Slet permanent", "Rename" => "Omdøb", "Pending" => "Afventer", -"{new_name} already exists" => "{new_name} eksisterer allerede", -"replace" => "erstat", -"suggest name" => "foreslå navn", -"cancel" => "fortryd", +"Could not rename file" => "Kunne ikke omdøbe filen", "replaced {new_name} with {old_name}" => "erstattede {new_name} med {old_name}", "undo" => "fortryd", +"Error deleting file." => "Fejl ved sletnign af fil.", "_%n folder_::_%n folders_" => array("%n mappe","%n mapper"), "_%n file_::_%n files_" => array("%n fil","%n filer"), "{dirs} and {files}" => "{dirs} og {files}", "_Uploading %n file_::_Uploading %n files_" => array("Uploader %n fil","Uploader %n filer"), "'.' is an invalid file name." => "'.' er et ugyldigt filnavn.", -"File name cannot be empty." => "Filnavnet kan ikke stå tomt.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ugyldigt navn, '\\', '/', '<', '>', ':' | '?', '\"', '', og '*' er ikke tilladt.", "Your storage is full, files can not be updated or synced anymore!" => "Din opbevaringsplads er fyldt op, filer kan ikke opdateres eller synkroniseres længere!", "Your storage is almost full ({usedSpacePercent}%)" => "Din opbevaringsplads er næsten fyldt op ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Krypteringsprogrammet er aktiveret, men din nøgle er ikke igangsat. Log venligst ud og ind igen.", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ugyldig privat nøgle for krypteringsprogrammet. Opdater venligst dit kodeord for den private nøgle i dine personlige indstillinger. Det kræves for at få adgang til dine krypterede filer.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Krypteringen blev deaktiveret, men dine filer er stadig krypteret. Gå venligst til dine personlige indstillinger for at dekryptere dine filer. ", "Your download is being prepared. This might take some time if the files are big." => "Dit download forberedes. Dette kan tage lidt tid ved større filer.", +"Error moving file" => "Fejl ved flytning af fil", +"Error" => "Fejl", "Name" => "Navn", "Size" => "Størrelse", "Modified" => "Ændret", +"Invalid folder name. Usage of 'Shared' is reserved." => "Ugyldig mappenavn. 'Shared' er reserveret.", "%s could not be renamed" => "%s kunne ikke omdøbes", "Upload" => "Upload", "File handling" => "Filhåndtering", @@ -56,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Maksimal størrelse på ZIP filer", "Save" => "Gem", "New" => "Ny", +"New text file" => "Ny tekstfil", "Text file" => "Tekstfil", +"New folder" => "Ny Mappe", "Folder" => "Mappe", "From link" => "Fra link", "Deleted files" => "Slettede filer", "Cancel upload" => "Fortryd upload", -"You don’t have write permissions here." => "Du har ikke skriverettigheder her.", +"You don’t have permission to upload or create files here" => "Du har ikke tilladelse til at uploade eller oprette filer her", "Nothing in here. Upload something!" => "Her er tomt. Upload noget!", "Download" => "Download", -"Unshare" => "Fjern deling", "Delete" => "Slet", "Upload too large" => "Upload er 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.", diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php index 143a5efc3da07ac4dc2e38dfbc3c5aba5cd42a91..b209fee88ae79e9fa7c83e7a5f322c398811a575 100644 --- a/apps/files/l10n/de.php +++ b/apps/files/l10n/de.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Konnte %s nicht verschieben. Eine Datei mit diesem Namen existiert bereits", "Could not move %s" => "Konnte %s nicht verschieben", +"File name cannot be empty." => "Der Dateiname darf nicht leer sein.", +"File name must not contain \"/\". Please choose a different name." => "Der Dateiname darf kein \"/\" enthalten. Bitte wähle einen anderen Namen.", +"The name %s is already used in the folder %s. Please choose a different name." => "Der Name %s wird bereits im Ordner %s benutzt. Bitte wähle einen anderen Namen.", +"Not a valid source" => "Keine gültige Quelle", +"Server is not allowed to open URLs, please check the server configuration" => "Dem Server ist das Öffnen von URLs nicht erlaubt, bitte die Serverkonfiguration prüfen", +"Error while downloading %s to %s" => "Fehler beim Herunterladen von %s nach %s", +"Error when creating the file" => "Fehler beim Erstellen der Datei", +"Folder name cannot be empty." => "Der Ordner-Name darf nicht leer sein.", +"Folder name must not contain \"/\". Please choose a different name." => "Der Ordner-Name darf kein \"/\" enthalten. Bitte wähle einen anderen Namen.", +"Error when creating the folder" => "Fehler beim Erstellen des Ordners", "Unable to set upload directory." => "Das Upload-Verzeichnis konnte nicht gesetzt werden.", "Invalid Token" => "Ungültiges Merkmal", "No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler", @@ -17,39 +27,43 @@ $TRANSLATIONS = array( "Upload failed. Could not find uploaded file" => "Hochladen fehlgeschlagen. Hochgeladene Datei konnte nicht gefunden werden.", "Invalid directory." => "Ungültiges Verzeichnis.", "Files" => "Dateien", -"Unable to upload {filename} as it is a directory or has 0 bytes" => "Datei {filename} kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "Die Datei {filename} kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist", "Not enough space available" => "Nicht genug Speicherplatz verfügbar", "Upload cancelled." => "Upload abgebrochen.", "Could not get result from server." => "Ergebnis konnte nicht vom Server abgerufen werden.", "File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen.", -"URL cannot be empty." => "Die URL darf nicht leer sein.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Der Ordnername ist ungültig. Nur ownCloud kann den Ordner \"Shared\" anlegen", -"Error" => "Fehler", +"URL cannot be empty" => "Die URL darf nicht leer sein", +"In the home folder 'Shared' is a reserved filename" => "Das Benutzerverzeichnis 'Shared' ist ein reservierter Dateiname", +"{new_name} already exists" => "{new_name} existiert bereits", +"Could not create file" => "Die Datei konnte nicht erstellt werden", +"Could not create folder" => "Der Ordner konnte nicht erstellt werden", +"Error fetching URL" => "Fehler beim Abrufen der URL", "Share" => "Teilen", "Delete permanently" => "Endgültig löschen", "Rename" => "Umbenennen", "Pending" => "Ausstehend", -"{new_name} already exists" => "{new_name} existiert bereits", -"replace" => "ersetzen", -"suggest name" => "Namen vorschlagen", -"cancel" => "abbrechen", +"Could not rename file" => "Die Datei konnte nicht umbenannt werden", "replaced {new_name} with {old_name}" => "{old_name} ersetzt durch {new_name}", "undo" => "rückgängig machen", +"Error deleting file." => "Fehler beim Löschen der Datei.", "_%n folder_::_%n folders_" => array("%n Ordner","%n Ordner"), "_%n file_::_%n files_" => array("%n Datei","%n Dateien"), "{dirs} and {files}" => "{dirs} und {files}", "_Uploading %n file_::_Uploading %n files_" => array("%n Datei wird hochgeladen","%n Dateien werden hochgeladen"), "'.' 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.", "Your storage is full, files can not be updated or synced anymore!" => "Dein Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!", "Your storage is almost full ({usedSpacePercent}%)" => "Dein Speicher ist fast voll ({usedSpacePercent}%)", -"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Die Verschlüsselung wurde deaktiviert, jedoch sind deine Dateien nach wie vor verschlüsselt. Bitte gehe zu deinen persönlichen Einstellungen, um deine Dateien zu entschlüsseln.", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Die Verschlüsselung-App ist aktiviert, aber Deine Schlüssel sind nicht initialisiert. Bitte melden Dich nochmals ab und wieder an.", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte aktualisiere Dein privates Schlüssel-Passwort, um den Zugriff auf Deine verschlüsselten Dateien wiederherzustellen.", +"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Die Verschlüsselung wurde deaktiviert, jedoch sind Deine Dateien nach wie vor verschlüsselt. Bitte gehe zu Deinen persönlichen Einstellungen, um Deine Dateien zu entschlüsseln.", "Your download is being prepared. This might take some time if the files are big." => "Dein Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern.", "Error moving file" => "Fehler beim Verschieben der Datei", +"Error" => "Fehler", "Name" => "Name", "Size" => "Größe", "Modified" => "Geändert", +"Invalid folder name. Usage of 'Shared' is reserved." => "Ungültiger Verzeichnisname. Die Nutzung von 'Shared' ist reserviert.", "%s could not be renamed" => "%s konnte nicht umbenannt werden", "Upload" => "Hochladen", "File handling" => "Dateibehandlung", @@ -61,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Maximale Größe für ZIP-Dateien", "Save" => "Speichern", "New" => "Neu", +"New text file" => "Neue Textdatei", "Text file" => "Textdatei", +"New folder" => "Neuer Ordner", "Folder" => "Ordner", "From link" => "Von einem Link", "Deleted files" => "Gelöschte Dateien", "Cancel upload" => "Upload abbrechen", -"You don’t have write permissions here." => "Du hast hier keine Schreib-Berechtigung.", +"You don’t have permission to upload or create files here" => "Du besitzt hier keine Berechtigung, um Dateien hochzuladen oder zu erstellen", "Nothing in here. Upload something!" => "Alles leer. Lade etwas hoch!", "Download" => "Herunterladen", -"Unshare" => "Freigabe aufheben", "Delete" => "Löschen", "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.", diff --git a/apps/files/l10n/de_CH.php b/apps/files/l10n/de_CH.php index a7074a8b1ccb758ef8d4f6ed79f0634099750daf..b950429346723ba643e305f2a3f02e64d5dc57fa 100644 --- a/apps/files/l10n/de_CH.php +++ b/apps/files/l10n/de_CH.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "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" => "Konnte %s nicht verschieben", +"File name cannot be empty." => "Der Dateiname darf nicht leer sein.", "Unable to set upload directory." => "Das Upload-Verzeichnis konnte nicht gesetzt werden.", "Invalid Token" => "Ungültiges Merkmal", "No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler", @@ -18,29 +19,23 @@ $TRANSLATIONS = array( "Not enough space available" => "Nicht genügend Speicherplatz verfügbar", "Upload cancelled." => "Upload abgebrochen.", "File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.", -"URL cannot be empty." => "Die URL darf nicht leer sein.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Ungültiger Ordnername. Die Verwendung von «Shared» ist ownCloud vorbehalten.", -"Error" => "Fehler", +"{new_name} already exists" => "{new_name} existiert bereits", "Share" => "Teilen", "Delete permanently" => "Endgültig löschen", "Rename" => "Umbenennen", "Pending" => "Ausstehend", -"{new_name} already exists" => "{new_name} existiert bereits", -"replace" => "ersetzen", -"suggest name" => "Namen vorschlagen", -"cancel" => "abbrechen", "replaced {new_name} with {old_name}" => "{old_name} wurde ersetzt durch {new_name}", "undo" => "rückgängig machen", "_%n folder_::_%n folders_" => array("","%n Ordner"), "_%n file_::_%n files_" => array("","%n Dateien"), "_Uploading %n file_::_Uploading %n files_" => array("%n Datei wird hochgeladen","%n Dateien werden hochgeladen"), "'.' 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.", "Your storage is full, files can not be updated or synced anymore!" => "Ihr Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!", "Your storage is almost full ({usedSpacePercent}%)" => "Ihr Speicher ist fast voll ({usedSpacePercent}%)", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Die Verschlüsselung wurde deaktiviert, jedoch sind Ihre Dateien nach wie vor verschlüsselt. Bitte gehen Sie zu Ihren persönlichen Einstellungen, um Ihre Dateien zu entschlüsseln.", "Your download is being prepared. This might take some time if the files are big." => "Ihr Download wird vorbereitet. Dies kann bei grösseren Dateien etwas dauern.", +"Error" => "Fehler", "Name" => "Name", "Size" => "Grösse", "Modified" => "Geändert", @@ -56,14 +51,13 @@ $TRANSLATIONS = array( "Save" => "Speichern", "New" => "Neu", "Text file" => "Textdatei", +"New folder" => "Neues Verzeichnis", "Folder" => "Ordner", "From link" => "Von einem Link", "Deleted files" => "Gelöschte Dateien", "Cancel upload" => "Upload abbrechen", -"You don’t have write permissions here." => "Sie haben hier keine Schreib-Berechtigungen.", "Nothing in here. Upload something!" => "Alles leer. Laden Sie etwas hoch!", "Download" => "Herunterladen", -"Unshare" => "Freigabe aufheben", "Delete" => "Löschen", "Upload too large" => "Der Upload ist zu gross", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgrösse für Uploads auf diesem Server.", diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php index c58cb4bbe3e23d2c5e11db5a730d944d4cad75d3..76cdce00e4cdc46e6105ad777ceb824bd00a90b2 100644 --- a/apps/files/l10n/de_DE.php +++ b/apps/files/l10n/de_DE.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "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" => "Konnte %s nicht verschieben", +"File name cannot be empty." => "Der Dateiname darf nicht leer sein.", +"File name must not contain \"/\". Please choose a different name." => "Der Dateiname darf kein \"/\" enthalten. Bitte wählen Sie einen anderen Namen.", +"The name %s is already used in the folder %s. Please choose a different name." => "Der Name %s wird bereits im Ordner %s benutzt. Bitte wählen Sie einen anderen Namen.", +"Not a valid source" => "Keine gültige Quelle", +"Server is not allowed to open URLs, please check the server configuration" => "Dem Server ist das Öffnen von URLs nicht erlaubt, bitte die Serverkonfiguration prüfen", +"Error while downloading %s to %s" => "Fehler beim Herunterladen von %s nach %s", +"Error when creating the file" => "Fehler beim Erstellen der Datei", +"Folder name cannot be empty." => "Der Ordner-Name darf nicht leer sein.", +"Folder name must not contain \"/\". Please choose a different name." => "Der Ordner-Name darf kein \"/\" enthalten. Bitte wählen Sie einen anderen Namen.", +"Error when creating the folder" => "Fehler beim Erstellen des Ordners", "Unable to set upload directory." => "Das Upload-Verzeichnis konnte nicht gesetzt werden.", "Invalid Token" => "Ungültiges Merkmal", "No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler", @@ -13,43 +23,47 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "Kein temporärer Ordner vorhanden", "Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte", "Not enough storage available" => "Nicht genug Speicher vorhanden.", -"Upload failed. Could not get file info." => "Hochladen fehlgeschlagen. Dateiinformationen konnten nicht abgerufen werden.", -"Upload failed. Could not find uploaded file" => "Hochladen fehlgeschlagen. Hochgeladene Datei konnte nicht gefunden werden.", +"Upload failed. Could not get file info." => "Hochladen fehlgeschlagen. Die Dateiinformationen konnten nicht abgerufen werden.", +"Upload failed. Could not find uploaded file" => "Hochladen fehlgeschlagen. Die hochgeladene Datei konnte nicht gefunden werden.", "Invalid directory." => "Ungültiges Verzeichnis.", "Files" => "Dateien", -"Unable to upload {filename} as it is a directory or has 0 bytes" => "Datei {filename} kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "Die Datei {filename} kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist", "Not enough space available" => "Nicht genügend Speicherplatz verfügbar", "Upload cancelled." => "Upload abgebrochen.", "Could not get result from server." => "Ergebnis konnte nicht vom Server abgerufen werden.", "File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.", -"URL cannot be empty." => "Die URL darf nicht leer sein.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Ungültiger Ordnername. Die Verwendung von \"Shared\" ist ownCloud vorbehalten.", -"Error" => "Fehler", +"URL cannot be empty" => "Die URL darf nicht leer sein", +"In the home folder 'Shared' is a reserved filename" => "Das Benutzerverzeichnis 'Shared' ist ein reservierter Dateiname", +"{new_name} already exists" => "{new_name} existiert bereits", +"Could not create file" => "Die Datei konnte nicht erstellt werden", +"Could not create folder" => "Der Ordner konnte nicht erstellt werden", +"Error fetching URL" => "Fehler beim Abrufen der URL", "Share" => "Teilen", "Delete permanently" => "Endgültig löschen", "Rename" => "Umbenennen", "Pending" => "Ausstehend", -"{new_name} already exists" => "{new_name} existiert bereits", -"replace" => "ersetzen", -"suggest name" => "Namen vorschlagen", -"cancel" => "abbrechen", +"Could not rename file" => "Die Datei konnte nicht umbenannt werden", "replaced {new_name} with {old_name}" => "{old_name} wurde ersetzt durch {new_name}", "undo" => "rückgängig machen", +"Error deleting file." => "Fehler beim Löschen der Datei.", "_%n folder_::_%n folders_" => array("%n Ordner","%n Ordner"), "_%n file_::_%n files_" => array("%n Datei","%n Dateien"), "{dirs} and {files}" => "{dirs} und {files}", "_Uploading %n file_::_Uploading %n files_" => array("%n Datei wird hoch geladen","%n Dateien werden hoch geladen"), "'.' 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.", "Your storage is full, files can not be updated or synced anymore!" => "Ihr Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!", "Your storage is almost full ({usedSpacePercent}%)" => "Ihr Speicher ist fast voll ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Verschlüsselung-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte melden sich nochmals ab und wieder an.", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte aktualisieren Sie Ihr privates Schlüssel-Passwort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Die Verschlüsselung wurde deaktiviert, jedoch sind Ihre Dateien nach wie vor verschlüsselt. Bitte gehen Sie zu Ihren persönlichen Einstellungen, um Ihre Dateien zu entschlüsseln.", "Your download is being prepared. This might take some time if the files are big." => "Ihr Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern.", "Error moving file" => "Fehler beim Verschieben der Datei", +"Error" => "Fehler", "Name" => "Name", "Size" => "Größe", "Modified" => "Geändert", +"Invalid folder name. Usage of 'Shared' is reserved." => "Ungültiger Verzeichnisname. Die Nutzung von 'Shared' ist reserviert.", "%s could not be renamed" => "%s konnte nicht umbenannt werden", "Upload" => "Hochladen", "File handling" => "Dateibehandlung", @@ -61,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Maximale Größe für ZIP-Dateien", "Save" => "Speichern", "New" => "Neu", +"New text file" => "Neue Textdatei", "Text file" => "Textdatei", +"New folder" => "Neues Verzeichnis", "Folder" => "Ordner", "From link" => "Von einem Link", "Deleted files" => "Gelöschte Dateien", "Cancel upload" => "Upload abbrechen", -"You don’t have write permissions here." => "Sie haben hier keine Schreib-Berechtigungen.", +"You don’t have permission to upload or create files here" => "Sie besitzen hier keine Berechtigung Dateien hochzuladen oder zu erstellen", "Nothing in here. Upload something!" => "Alles leer. Laden Sie etwas hoch!", "Download" => "Herunterladen", -"Unshare" => "Freigabe aufheben", "Delete" => "Löschen", "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.", diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php index de524f4dd904a5b1f46e5f93bca243f0e0d8fc58..9efe1af7dd3400d9480d9e6460302442110c7705 100644 --- a/apps/files/l10n/el.php +++ b/apps/files/l10n/el.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Αδυναμία μετακίνησης του %s - υπάρχει ήδη αρχείο με αυτό το όνομα", "Could not move %s" => "Αδυναμία μετακίνησης του %s", +"File name cannot be empty." => "Το όνομα αρχείου δεν μπορεί να είναι κενό.", +"File name must not contain \"/\". Please choose a different name." => "Το όνομα αρχείου δεν μπορεί να περιέχει \"/\". Παρακαλώ επιλέξτε ένα διαφορετικό όνομα. ", +"The name %s is already used in the folder %s. Please choose a different name." => "Το όνομα %s χρησιμοποιείτε ήδη στον φάκελο %s. Παρακαλώ επιλέξτε ένα άλλο όνομα.", +"Not a valid source" => "Μη έγκυρη πηγή", +"Server is not allowed to open URLs, please check the server configuration" => "Ο διακομιστής δεν επιτρέπεται να ανοίγει URL, παρακαλώ ελέγξτε τις ρυθμίσεις του διακομιστή", +"Error while downloading %s to %s" => "Σφάλμα κατά τη λήψη του %s στο %s", +"Error when creating the file" => "Σφάλμα κατά τη δημιουργία του αρχείου", +"Folder name cannot be empty." => "Το όνομα φακέλου δεν μπορεί να είναι κενό.", +"Folder name must not contain \"/\". Please choose a different name." => "Το όνομα φακέλου δεν μπορεί να περιέχει \"/\". Παρακαλώ επιλέξτε ένα διαφορετικό όνομα. ", +"Error when creating the folder" => "Σφάλμα δημιουργίας φακέλου", "Unable to set upload directory." => "Αδυναμία ορισμού καταλόγου αποστολής.", "Invalid Token" => "Μη έγκυρο Token", "No file was uploaded. Unknown error" => "Δεν ανέβηκε κάποιο αρχείο. Άγνωστο σφάλμα", @@ -13,38 +23,47 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "Λείπει ο προσωρινός φάκελος", "Failed to write to disk" => "Αποτυχία εγγραφής στο δίσκο", "Not enough storage available" => "Μη επαρκής διαθέσιμος αποθηκευτικός χώρος", +"Upload failed. Could not get file info." => "Η φόρτωση απέτυχε. Αδυναμία λήψης πληροφοριών αρχείων.", +"Upload failed. Could not find uploaded file" => "Η φόρτωση απέτυχε. Αδυναμία εύρεσης αρχείου προς φόρτωση.", "Invalid directory." => "Μη έγκυρος φάκελος.", "Files" => "Αρχεία", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "Αδυναμία φόρτωσης {filename} καθώς είναι κατάλογος αρχείων ή έχει 0 bytes", "Not enough space available" => "Δεν υπάρχει αρκετός διαθέσιμος χώρος", "Upload cancelled." => "Η αποστολή ακυρώθηκε.", +"Could not get result from server." => "Αδυναμία λήψης αποτελέσματος από το διακομιστή.", "File upload is in progress. Leaving the page now will cancel the upload." => "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή.", -"URL cannot be empty." => "Η URL δεν μπορεί να είναι κενή.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Μη έγκυρο όνομα φακέλου. Η χρήση του 'Κοινόχρηστος' χρησιμοποιείται από το ownCloud", -"Error" => "Σφάλμα", +"URL cannot be empty" => "Η URL δεν πρέπει να είναι κενή", +"In the home folder 'Shared' is a reserved filename" => "Στον αρχικό φάκελο το όνομα 'Shared' διατηρείται από το σύστημα", +"{new_name} already exists" => "{new_name} υπάρχει ήδη", +"Could not create file" => "Αδυναμία δημιουργίας αρχείου", +"Could not create folder" => "Αδυναμία δημιουργίας φακέλου", +"Error fetching URL" => "Σφάλμα φόρτωσης URL", "Share" => "Διαμοιρασμός", "Delete permanently" => "Μόνιμη διαγραφή", "Rename" => "Μετονομασία", "Pending" => "Εκκρεμεί", -"{new_name} already exists" => "{new_name} υπάρχει ήδη", -"replace" => "αντικατέστησε", -"suggest name" => "συνιστώμενο όνομα", -"cancel" => "ακύρωση", +"Could not rename file" => "Αδυναμία μετονομασίας αρχείου", "replaced {new_name} with {old_name}" => "αντικαταστάθηκε το {new_name} με {old_name}", "undo" => "αναίρεση", +"Error deleting file." => "Σφάλμα διαγραφής αρχείου.", "_%n folder_::_%n folders_" => array("%n φάκελος","%n φάκελοι"), "_%n file_::_%n files_" => array("%n αρχείο","%n αρχεία"), +"{dirs} and {files}" => "{Κατάλογοι αρχείων} και {αρχεία}", "_Uploading %n file_::_Uploading %n files_" => array("Ανέβασμα %n αρχείου","Ανέβασμα %n αρχείων"), "'.' is an invalid file name." => "'.' είναι μη έγκυρο όνομα αρχείου.", -"File name cannot be empty." => "Το όνομα αρχείου δεν μπορεί να είναι κενό.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Μη έγκυρο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτρέπονται.", "Your storage is full, files can not be updated or synced anymore!" => "Ο αποθηκευτικός σας χώρος είναι γεμάτος, τα αρχεία δεν μπορούν να ενημερωθούν ή να συγχρονιστούν πια!", "Your storage is almost full ({usedSpacePercent}%)" => "Ο αποθηκευτικός χώρος είναι σχεδόν γεμάτος ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδίου σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Η κρυπτογράφηση απενεργοποιήθηκε, αλλά τα αρχεία σας είναι ακόμα κρυπτογραφημένα. Παρακαλούμε απενεργοποιήσετε την κρυπτογράφηση αρχείων από τις προσωπικές σας ρυθμίσεις", "Your download is being prepared. This might take some time if the files are big." => "Η λήψη προετοιμάζεται. Αυτό μπορεί να πάρει ώρα εάν τα αρχεία έχουν μεγάλο μέγεθος.", "Error moving file" => "Σφάλμα κατά τη μετακίνηση του αρχείου", +"Error" => "Σφάλμα", "Name" => "Όνομα", "Size" => "Μέγεθος", "Modified" => "Τροποποιήθηκε", +"Invalid folder name. Usage of 'Shared' is reserved." => "Άκυρο όνομα φακέλου. Η χρήση του 'Shared' διατηρείται από το σύστημα.", "%s could not be renamed" => "Αδυναμία μετονομασίας του %s", "Upload" => "Μεταφόρτωση", "File handling" => "Διαχείριση αρχείων", @@ -56,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Μέγιστο μέγεθος για αρχεία ZIP", "Save" => "Αποθήκευση", "New" => "Νέο", +"New text file" => "Νέο αρχείο κειμένου", "Text file" => "Αρχείο κειμένου", +"New folder" => "Νέος κατάλογος", "Folder" => "Φάκελος", "From link" => "Από σύνδεσμο", "Deleted files" => "Διαγραμμένα αρχεία", "Cancel upload" => "Ακύρωση αποστολής", -"You don’t have write permissions here." => "Δεν έχετε δικαιώματα εγγραφής εδώ.", +"You don’t have permission to upload or create files here" => "Δεν έχετε δικαιώματα φόρτωσης ή δημιουργίας αρχείων εδώ", "Nothing in here. Upload something!" => "Δεν υπάρχει τίποτα εδώ. Ανεβάστε κάτι!", "Download" => "Λήψη", -"Unshare" => "Σταμάτημα διαμοιρασμού", "Delete" => "Διαγραφή", "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/en_GB.php b/apps/files/l10n/en_GB.php index c747555e40be799f635d098e9e4268a973f8342b..ac93aa68abb2dbdaca6132d1704375a304edaa85 100644 --- a/apps/files/l10n/en_GB.php +++ b/apps/files/l10n/en_GB.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Could not move %s - File with this name already exists", "Could not move %s" => "Could not move %s", +"File name cannot be empty." => "File name cannot be empty.", +"File name must not contain \"/\". Please choose a different name." => "File name must not contain \"/\". Please choose a different name.", +"The name %s is already used in the folder %s. Please choose a different name." => "The name %s is already used in the folder %s. Please choose a different name.", +"Not a valid source" => "Not a valid source", +"Server is not allowed to open URLs, please check the server configuration" => "Server is not allowed to open URLs, please check the server configuration", +"Error while downloading %s to %s" => "Error whilst downloading %s to %s", +"Error when creating the file" => "Error when creating the file", +"Folder name cannot be empty." => "Folder name cannot be empty.", +"Folder name must not contain \"/\". Please choose a different name." => "Folder name must not contain \"/\". Please choose a different name.", +"Error when creating the folder" => "Error when creating the folder", "Unable to set upload directory." => "Unable to set upload directory.", "Invalid Token" => "Invalid Token", "No file was uploaded. Unknown error" => "No file was uploaded. Unknown error", @@ -22,34 +32,38 @@ $TRANSLATIONS = array( "Upload cancelled." => "Upload cancelled.", "Could not get result from server." => "Could not get result from server.", "File upload is in progress. Leaving the page now will cancel the upload." => "File upload is in progress. Leaving the page now will cancel the upload.", -"URL cannot be empty." => "URL cannot be empty.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Invalid folder name. Usage of 'Shared' is reserved by ownCloud", -"Error" => "Error", +"URL cannot be empty" => "URL cannot be empty", +"In the home folder 'Shared' is a reserved filename" => "In the home folder 'Shared' is a reserved file name", +"{new_name} already exists" => "{new_name} already exists", +"Could not create file" => "Could not create file", +"Could not create folder" => "Could not create folder", +"Error fetching URL" => "Error fetching URL", "Share" => "Share", "Delete permanently" => "Delete permanently", "Rename" => "Rename", "Pending" => "Pending", -"{new_name} already exists" => "{new_name} already exists", -"replace" => "replace", -"suggest name" => "suggest name", -"cancel" => "cancel", +"Could not rename file" => "Could not rename file", "replaced {new_name} with {old_name}" => "replaced {new_name} with {old_name}", "undo" => "undo", +"Error deleting file." => "Error deleting file.", "_%n folder_::_%n folders_" => array("%n folder","%n folders"), "_%n file_::_%n files_" => array("%n file","%n files"), "{dirs} and {files}" => "{dirs} and {files}", "_Uploading %n file_::_Uploading %n files_" => array("Uploading %n file","Uploading %n files"), "'.' is an invalid file name." => "'.' is an invalid file name.", -"File name cannot be empty." => "File name cannot be empty.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Invalid name: '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed.", "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}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Encryption App is enabled but your keys are not initialised, please log-out and log-in again", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files.", "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.", "Error moving file" => "Error moving file", +"Error" => "Error", "Name" => "Name", "Size" => "Size", "Modified" => "Modified", +"Invalid folder name. Usage of 'Shared' is reserved." => "Invalid folder name. Usage of 'Shared' is reserved.", "%s could not be renamed" => "%s could not be renamed", "Upload" => "Upload", "File handling" => "File handling", @@ -61,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Maximum input size for ZIP files", "Save" => "Save", "New" => "New", +"New text file" => "New text file", "Text file" => "Text file", +"New folder" => "New folder", "Folder" => "Folder", "From link" => "From link", "Deleted files" => "Deleted files", "Cancel upload" => "Cancel upload", -"You don’t have write permissions here." => "You don’t have write permission here.", +"You don’t have permission to upload or create files here" => "You don’t have permission to upload or create files here", "Nothing in here. Upload something!" => "Nothing in here. Upload something!", "Download" => "Download", -"Unshare" => "Unshare", "Delete" => "Delete", "Upload too large" => "Upload too large", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "The files you are trying to upload exceed the maximum size for file uploads on this server.", diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php index eb6e6ba2d3905b60c52ed624baaab8699031b78b..81cfa03fd6df809ac02efdfdb970315147c15118 100644 --- a/apps/files/l10n/eo.php +++ b/apps/files/l10n/eo.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Ne eblis movi %s: dosiero kun ĉi tiu nomo jam ekzistas", "Could not move %s" => "Ne eblis movi %s", +"File name cannot be empty." => "Dosiernomo devas ne malpleni.", +"File name must not contain \"/\". Please choose a different name." => "La dosieronomo ne devas enhavi “/”. Bonvolu elekti malsaman nomon.", +"The name %s is already used in the folder %s. Please choose a different name." => "La nomo %s jam uziĝas en la dosierujo %s. Bonvolu elekti malsaman nomon.", +"Not a valid source" => "Nevalida fonto", +"Error while downloading %s to %s" => "Eraris elŝuto de %s al %s", +"Error when creating the file" => "Eraris la kreo de la dosiero", +"Folder name cannot be empty." => "La dosierujnomo ne povas malpleni.", +"Folder name must not contain \"/\". Please choose a different name." => "La dosiernomo ne devas enhavi “/”. Bonvolu elekti malsaman nomon.", +"Error when creating the folder" => "Eraris la kreo de la dosierujo", +"Unable to set upload directory." => "Ne povis agordiĝi la alŝuta dosierujo.", "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: ", @@ -11,36 +21,41 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "Mankas provizora dosierujo.", "Failed to write to disk" => "Malsukcesis skribo al disko", "Not enough storage available" => "Ne haveblas sufiĉa memoro", +"Upload failed. Could not get file info." => "La alŝuto malsukcesis. Ne povis ekhaviĝi informo pri dosiero.", +"Upload failed. Could not find uploaded file" => "La alŝuto malsukcesis. Ne troviĝis alŝutota dosiero.", "Invalid directory." => "Nevalida dosierujo.", "Files" => "Dosieroj", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "Ne povis alŝutiĝi {filename} ĉar ĝi estas dosierujo aŭ ĝi havas 0 duumokojn", "Not enough space available" => "Ne haveblas sufiĉa spaco", "Upload cancelled." => "La alŝuto nuliĝis.", +"Could not get result from server." => "Ne povis ekhaviĝi rezulto el la servilo.", "File upload is in progress. Leaving the page now will cancel the upload." => "Dosieralŝuto plenumiĝas. Lasi la paĝon nun nuligus la alŝuton.", -"URL cannot be empty." => "URL ne povas esti malplena.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nevalida dosierujnomo. La uzo de “Shared” estas rezervita de ownCloud.", -"Error" => "Eraro", +"URL cannot be empty" => "La URL ne povas malpleni", +"{new_name} already exists" => "{new_name} jam ekzistas", +"Could not create file" => "Ne povis kreiĝi dosiero", +"Could not create folder" => "Ne povis kreiĝi dosierujo", "Share" => "Kunhavigi", "Delete permanently" => "Forigi por ĉiam", "Rename" => "Alinomigi", "Pending" => "Traktotaj", -"{new_name} already exists" => "{new_name} jam ekzistas", -"replace" => "anstataŭigi", -"suggest name" => "sugesti nomon", -"cancel" => "nuligi", +"Could not rename file" => "Ne povis alinomiĝi dosiero", "replaced {new_name} with {old_name}" => "anstataŭiĝis {new_name} per {old_name}", "undo" => "malfari", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("",""), -"_Uploading %n file_::_Uploading %n files_" => array("",""), +"_%n folder_::_%n folders_" => array("%n dosierujo","%n dosierujoj"), +"_%n file_::_%n files_" => array("%n dosiero","%n dosieroj"), +"{dirs} and {files}" => "{dirs} kaj {files}", +"_Uploading %n file_::_Uploading %n files_" => array("Alŝutatas %n dosiero","Alŝutatas %n dosieroj"), "'.' is an invalid file name." => "'.' ne estas valida dosiernomo.", -"File name cannot be empty." => "Dosiernomo devas ne malpleni.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nevalida nomo: “\\”, “/”, “<”, “>”, “:”, “\"”, “|”, “?” kaj “*” ne permesatas.", "Your storage is full, files can not be updated or synced anymore!" => "Via memoro plenas, ne plu eblas ĝisdatigi aŭ sinkronigi dosierojn!", "Your storage is almost full ({usedSpacePercent}%)" => "Via memoro preskaŭ plenas ({usedSpacePercent}%)", "Your download is being prepared. This might take some time if the files are big." => "Via elŝuto pretiĝatas. Ĉi tio povas daŭri iom da tempo se la dosieroj grandas.", +"Error moving file" => "Eraris movo de dosiero", +"Error" => "Eraro", "Name" => "Nomo", "Size" => "Grando", "Modified" => "Modifita", +"%s could not be renamed" => "%s ne povis alinomiĝi", "Upload" => "Alŝuti", "File handling" => "Dosieradministro", "Maximum upload size" => "Maksimuma alŝutogrando", @@ -52,14 +67,14 @@ $TRANSLATIONS = array( "Save" => "Konservi", "New" => "Nova", "Text file" => "Tekstodosiero", +"New folder" => "Nova dosierujo", "Folder" => "Dosierujo", "From link" => "El ligilo", "Deleted files" => "Forigitaj dosieroj", "Cancel upload" => "Nuligi alŝuton", -"You don’t have write permissions here." => "Vi ne havas permeson skribi ĉi tie.", +"You don’t have permission to upload or create files here" => "Vi ne havas permeson alŝuti aŭ krei dosierojn ĉi tie", "Nothing in here. Upload something!" => "Nenio estas ĉi tie. Alŝutu ion!", "Download" => "Elŝuti", -"Unshare" => "Malkunhavigi", "Delete" => "Forigi", "Upload too large" => "Alŝ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.", diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php index 90d760587d9ccd97274e42005b39bd163f407250..bfbb80e8962083ef327c47a7a629529a36c7251e 100644 --- a/apps/files/l10n/es.php +++ b/apps/files/l10n/es.php @@ -1,75 +1,95 @@ "No se pudo mover %s - Un archivo con ese nombre ya existe.", +"Could not move %s - File with this name already exists" => "No se pudo mover %s - Ya existe un archivo con ese nombre.", "Could not move %s" => "No se pudo mover %s", +"File name cannot be empty." => "El nombre de archivo no puede estar vacío.", +"File name must not contain \"/\". Please choose a different name." => "El nombre del archivo, NO puede contener el simbolo\"/\", por favor elija un nombre diferente.", +"The name %s is already used in the folder %s. Please choose a different name." => "El nombre %s ya está en uso por la carpeta %s. Por favor elija uno diferente.", +"Not a valid source" => "No es un origen válido", +"Server is not allowed to open URLs, please check the server configuration" => "El servidor no puede acceder URLs; revise la configuración del servidor.", +"Error while downloading %s to %s" => "Error mientras se descargaba %s a %s", +"Error when creating the file" => "Error al crear el archivo", +"Folder name cannot be empty." => "El nombre de la carpeta no puede estar vacío.", +"Folder name must not contain \"/\". Please choose a different name." => "El nombre de la carpeta, NO puede contener el simbolo\"/\", por favor elija un nombre diferente.", +"Error when creating the folder" => "Error al crear la carpeta.", "Unable to set upload directory." => "Incapaz de crear directorio de subida.", "Invalid Token" => "Token Inválido", "No file was uploaded. Unknown error" => "No se subió ningún archivo. Error desconocido", -"There is no error, the file uploaded with success" => "No hay ningún error, el archivo se ha subido con éxito", -"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "El archivo subido sobrepasa la directiva upload_max_filesize en php.ini", -"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "El archivo subido sobrepasa la directiva MAX_FILE_SIZE especificada en el formulario HTML", +"There is no error, the file uploaded with success" => "No hubo ningún problema, el archivo se subió con éxito", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "El archivo subido sobrepasa la directiva 'upload_max_filesize' en php.ini:", +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "El archivo subido sobrepasa la directiva 'MAX_FILE_SIZE' especificada en el formulario HTML", "The uploaded file was only partially uploaded" => "El archivo subido fue sólo subido parcialmente", "No file was uploaded" => "No se subió ningún archivo", "Missing a temporary folder" => "Falta la carpeta temporal", "Failed to write to disk" => "Falló al escribir al disco", "Not enough storage available" => "No hay suficiente espacio disponible", +"Upload failed. Could not get file info." => "Actualización fallida. No se pudo obtener información del archivo.", +"Upload failed. Could not find uploaded file" => "Actualización fallida. No se pudo encontrar el archivo subido", "Invalid directory." => "Directorio inválido.", "Files" => "Archivos", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "No ha sido posible subir {filename} porque es un directorio o tiene 0 bytes", "Not enough space available" => "No hay suficiente espacio disponible", "Upload cancelled." => "Subida cancelada.", -"File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Si sale de la página ahora cancelará la subida.", -"URL cannot be empty." => "La URL no puede estar vacía.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nombre de carpeta invalido. El uso de \"Shared\" está reservado por ownCloud", -"Error" => "Error", +"Could not get result from server." => "No se pudo obtener respuesta del servidor.", +"File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Si sale de la página ahora, la subida será cancelada.", +"URL cannot be empty" => "La dirección URL no puede estar vacía", +"In the home folder 'Shared' is a reserved filename" => "En la carpeta de inicio, 'Shared' es un nombre reservado", +"{new_name} already exists" => "{new_name} ya existe", +"Could not create file" => "No se pudo crear el archivo", +"Could not create folder" => "No se pudo crear la carpeta", +"Error fetching URL" => "Error al descargar URL.", "Share" => "Compartir", "Delete permanently" => "Eliminar permanentemente", "Rename" => "Renombrar", "Pending" => "Pendiente", -"{new_name} already exists" => "{new_name} ya existe", -"replace" => "reemplazar", -"suggest name" => "sugerir nombre", -"cancel" => "cancelar", +"Could not rename file" => "No se pudo renombrar el archivo", "replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}", "undo" => "deshacer", -"_%n folder_::_%n folders_" => array("","%n carpetas"), -"_%n file_::_%n files_" => array("","%n archivos"), +"Error deleting file." => "Error borrando el archivo.", +"_%n folder_::_%n folders_" => array("%n carpeta","%n carpetas"), +"_%n file_::_%n files_" => array("%n archivo","%n archivos"), "{dirs} and {files}" => "{dirs} y {files}", "_Uploading %n file_::_Uploading %n files_" => array("Subiendo %n archivo","Subiendo %n archivos"), "'.' is an invalid file name." => "'.' no es un nombre de archivo válido.", -"File name cannot be empty." => "El nombre de archivo no puede estar vacío.", -"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nombre Invalido, \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" no están permitidos ", -"Your storage is full, files can not be updated or synced anymore!" => "Su almacenamiento está lleno, ¡no se pueden actualizar o sincronizar más!", +"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nombre inválido, los caracteres \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" no están permitidos ", +"Your storage is full, files can not be updated or synced anymore!" => "Su almacenamiento está lleno, ¡los archivos no se actualizarán ni sincronizarán más!", "Your storage is almost full ({usedSpacePercent}%)" => "Su almacenamiento está casi lleno ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "La app de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "La clave privada no es válida para la app de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos.", -"Your download is being prepared. This might take some time if the files are big." => "Su descarga está siendo preparada. Esto puede tardar algún tiempo si los archivos son grandes.", +"Your download is being prepared. This might take some time if the files are big." => "Su descarga está siendo preparada. Esto podría tardar algo de tiempo si los archivos son grandes.", +"Error moving file" => "Error moviendo archivo", +"Error" => "Error", "Name" => "Nombre", "Size" => "Tamaño", "Modified" => "Modificado", -"%s could not be renamed" => "%s no se pudo renombrar", +"Invalid folder name. Usage of 'Shared' is reserved." => "Nombre de carpeta inválido. El uso de \"Shared\" esta reservado.", +"%s could not be renamed" => "%s no pudo ser renombrado", "Upload" => "Subir", -"File handling" => "Manejo de archivos", +"File handling" => "Administración de archivos", "Maximum upload size" => "Tamaño máximo de subida", "max. possible: " => "máx. posible:", "Needed for multi-file and folder downloads." => "Necesario para multi-archivo y descarga de carpetas", "Enable ZIP-download" => "Habilitar descarga en ZIP", -"0 is unlimited" => "0 es ilimitado", +"0 is unlimited" => "0 significa ilimitado", "Maximum input size for ZIP files" => "Tamaño máximo para archivos ZIP de entrada", "Save" => "Guardar", "New" => "Nuevo", +"New text file" => "Nuevo archivo de texto", "Text file" => "Archivo de texto", +"New folder" => "Nueva carpeta", "Folder" => "Carpeta", "From link" => "Desde enlace", "Deleted files" => "Archivos eliminados", "Cancel upload" => "Cancelar subida", -"You don’t have write permissions here." => "No tiene permisos de escritura aquí.", +"You don’t have permission to upload or create files here" => "No tienes permisos para subir o crear archivos aquí.", "Nothing in here. Upload something!" => "No hay nada aquí. ¡Suba algo!", "Download" => "Descargar", -"Unshare" => "Dejar de compartir", "Delete" => "Eliminar", "Upload too large" => "Subida demasido 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 en este servidor.", "Files are being scanned, please wait." => "Los archivos están siendo escaneados, por favor espere.", "Current scanning" => "Escaneo actual", -"Upgrading filesystem cache..." => "Actualizando caché del sistema de archivos" +"Upgrading filesystem cache..." => "Actualizando caché del sistema de archivos..." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files/l10n/es_AR.php b/apps/files/l10n/es_AR.php index be16f3f99ae8bed39884062348cdf87687b429a6..78d6388cd9bcbce2054535aa51467413bd950d24 100644 --- a/apps/files/l10n/es_AR.php +++ b/apps/files/l10n/es_AR.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "No se pudo mover %s - Un archivo con este nombre ya existe", "Could not move %s" => "No se pudo mover %s ", +"File name cannot be empty." => "El nombre del archivo no puede quedar vacío.", "Unable to set upload directory." => "No fue posible crear el directorio de subida.", "Invalid Token" => "Token Inválido", "No file was uploaded. Unknown error" => "El archivo no fue subido. Error desconocido", @@ -18,17 +19,11 @@ $TRANSLATIONS = array( "Not enough space available" => "No hay suficiente espacio disponible", "Upload cancelled." => "La subida fue cancelada", "File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará.", -"URL cannot be empty." => "La URL no puede estar vacía", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nombre de directorio inválido. El uso de \"Shared\" está reservado por ownCloud", -"Error" => "Error", +"{new_name} already exists" => "{new_name} ya existe", "Share" => "Compartir", "Delete permanently" => "Borrar permanentemente", "Rename" => "Cambiar nombre", "Pending" => "Pendientes", -"{new_name} already exists" => "{new_name} ya existe", -"replace" => "reemplazar", -"suggest name" => "sugerir nombre", -"cancel" => "cancelar", "replaced {new_name} with {old_name}" => "se reemplazó {new_name} con {old_name}", "undo" => "deshacer", "_%n folder_::_%n folders_" => array("%n carpeta","%n carpetas"), @@ -36,12 +31,12 @@ $TRANSLATIONS = array( "{dirs} and {files}" => "{carpetas} y {archivos}", "_Uploading %n file_::_Uploading %n files_" => array("Subiendo %n archivo","Subiendo %n archivos"), "'.' is an invalid file name." => "'.' es un nombre de archivo inválido.", -"File name cannot be empty." => "El nombre del archivo no puede quedar vacío.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nombre invalido, '\\', '/', '<', '>', ':', '\"', '|', '?' y '*' no están permitidos.", "Your storage is full, files can not be updated or synced anymore!" => "El almacenamiento está lleno, los archivos no se pueden seguir actualizando ni sincronizando", "Your storage is almost full ({usedSpacePercent}%)" => "El almacenamiento está casi lleno ({usedSpacePercent}%)", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "El proceso de cifrado se ha desactivado, pero los archivos aún están encriptados. Por favor, vaya a la configuración personal para descifrar los archivos.", "Your download is being prepared. This might take some time if the files are big." => "Tu descarga se está preparando. Esto puede demorar si los archivos son muy grandes.", +"Error" => "Error", "Name" => "Nombre", "Size" => "Tamaño", "Modified" => "Modificado", @@ -57,14 +52,13 @@ $TRANSLATIONS = array( "Save" => "Guardar", "New" => "Nuevo", "Text file" => "Archivo de texto", +"New folder" => "Nueva Carpeta", "Folder" => "Carpeta", "From link" => "Desde enlace", "Deleted files" => "Archivos borrados", "Cancel upload" => "Cancelar subida", -"You don’t have write permissions here." => "No tenés permisos de escritura acá.", "Nothing in here. Upload something!" => "No hay nada. ¡Subí contenido!", "Download" => "Descargar", -"Unshare" => "Dejar de compartir", "Delete" => "Borrar", "Upload too large" => "El tamaño del archivo que querés subir 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 ", diff --git a/apps/files/l10n/es_CL.php b/apps/files/l10n/es_CL.php new file mode 100644 index 0000000000000000000000000000000000000000..6f97758878f13687130142d93fa5ee209630ca39 --- /dev/null +++ b/apps/files/l10n/es_CL.php @@ -0,0 +1,9 @@ + "Archivos", +"_%n folder_::_%n folders_" => array("",""), +"_%n file_::_%n files_" => array("",""), +"_Uploading %n file_::_Uploading %n files_" => array("",""), +"Upload" => "Subir" +); +$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files/l10n/es_MX.php b/apps/files/l10n/es_MX.php index 0157af093e92200cc7790497227e92e62d80165f..0b7571defc73d0b45ab1e5816213235c8c778f3f 100644 --- a/apps/files/l10n/es_MX.php +++ b/apps/files/l10n/es_MX.php @@ -1,7 +1,95 @@ array("",""), -"_%n file_::_%n files_" => array("",""), -"_Uploading %n file_::_Uploading %n files_" => array("","") +"Could not move %s - File with this name already exists" => "No se pudo mover %s - Ya existe un archivo con ese nombre.", +"Could not move %s" => "No se pudo mover %s", +"File name cannot be empty." => "El nombre de archivo no puede estar vacío.", +"File name must not contain \"/\". Please choose a different name." => "El nombre del archivo, NO puede contener el simbolo\"/\", por favor elija un nombre diferente.", +"The name %s is already used in the folder %s. Please choose a different name." => "El nombre %s ya está en uso por la carpeta %s. Por favor elija uno diferente.", +"Not a valid source" => "No es un origen válido", +"Server is not allowed to open URLs, please check the server configuration" => "El servidor no puede acceder URLs; revise la configuración del servidor.", +"Error while downloading %s to %s" => "Error mientras se descargaba %s a %s", +"Error when creating the file" => "Error al crear el archivo", +"Folder name cannot be empty." => "El nombre de la carpeta no puede estar vacío.", +"Folder name must not contain \"/\". Please choose a different name." => "El nombre de la carpeta, NO puede contener el simbolo\"/\", por favor elija un nombre diferente.", +"Error when creating the folder" => "Error al crear la carpeta.", +"Unable to set upload directory." => "Incapaz de crear directorio de subida.", +"Invalid Token" => "Token Inválido", +"No file was uploaded. Unknown error" => "No se subió ningún archivo. Error desconocido", +"There is no error, the file uploaded with success" => "No hubo ningún problema, el archivo se subió con éxito", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "El archivo subido sobrepasa la directiva 'upload_max_filesize' en php.ini:", +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "El archivo subido sobrepasa la directiva 'MAX_FILE_SIZE' especificada en el formulario HTML", +"The uploaded file was only partially uploaded" => "El archivo subido fue sólo subido parcialmente", +"No file was uploaded" => "No se subió ningún archivo", +"Missing a temporary folder" => "Falta la carpeta temporal", +"Failed to write to disk" => "Falló al escribir al disco", +"Not enough storage available" => "No hay suficiente espacio disponible", +"Upload failed. Could not get file info." => "Actualización fallida. No se pudo obtener información del archivo.", +"Upload failed. Could not find uploaded file" => "Actualización fallida. No se pudo encontrar el archivo subido", +"Invalid directory." => "Directorio inválido.", +"Files" => "Archivos", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "No ha sido posible subir {filename} porque es un directorio o tiene 0 bytes", +"Not enough space available" => "No hay suficiente espacio disponible", +"Upload cancelled." => "Subida cancelada.", +"Could not get result from server." => "No se pudo obtener respuesta del servidor.", +"File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Si sale de la página ahora, la subida será cancelada.", +"URL cannot be empty" => "La dirección URL no puede estar vacía", +"In the home folder 'Shared' is a reserved filename" => "En la carpeta de inicio, 'Shared' es un nombre reservado", +"{new_name} already exists" => "{new_name} ya existe", +"Could not create file" => "No se pudo crear el archivo", +"Could not create folder" => "No se pudo crear la carpeta", +"Error fetching URL" => "Error al descargar URL.", +"Share" => "Compartir", +"Delete permanently" => "Eliminar permanentemente", +"Rename" => "Renombrar", +"Pending" => "Pendiente", +"Could not rename file" => "No se pudo renombrar el archivo", +"replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}", +"undo" => "deshacer", +"Error deleting file." => "Error borrando el archivo.", +"_%n folder_::_%n folders_" => array("%n carpeta","%n carpetas"), +"_%n file_::_%n files_" => array("%n archivo","%n archivos"), +"{dirs} and {files}" => "{dirs} y {files}", +"_Uploading %n file_::_Uploading %n files_" => array("Subiendo %n archivo","Subiendo %n archivos"), +"'.' is an invalid file name." => "'.' no es un nombre de archivo válido.", +"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nombre inválido, los caracteres \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" no están permitidos ", +"Your storage is full, files can not be updated or synced anymore!" => "Su almacenamiento está lleno, ¡los archivos no se actualizarán ni sincronizarán más!", +"Your storage is almost full ({usedSpacePercent}%)" => "Su almacenamiento está casi lleno ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "La aplicación de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "La clave privada no es válida para la aplicación de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.", +"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos.", +"Your download is being prepared. This might take some time if the files are big." => "Su descarga está siendo preparada. Esto podría tardar algo de tiempo si los archivos son grandes.", +"Error moving file" => "Error moviendo archivo", +"Error" => "Error", +"Name" => "Nombre", +"Size" => "Tamaño", +"Modified" => "Modificado", +"Invalid folder name. Usage of 'Shared' is reserved." => "Nombre de carpeta inválido. El uso de \"Shared\" esta reservado.", +"%s could not be renamed" => "%s no pudo ser renombrado", +"Upload" => "Subir", +"File handling" => "Administración de archivos", +"Maximum upload size" => "Tamaño máximo de subida", +"max. possible: " => "máx. posible:", +"Needed for multi-file and folder downloads." => "Necesario para multi-archivo y descarga de carpetas", +"Enable ZIP-download" => "Habilitar descarga en ZIP", +"0 is unlimited" => "0 significa ilimitado", +"Maximum input size for ZIP files" => "Tamaño máximo para archivos ZIP de entrada", +"Save" => "Guardar", +"New" => "Nuevo", +"New text file" => "Nuevo archivo de texto", +"Text file" => "Archivo de texto", +"New folder" => "Nueva carpeta", +"Folder" => "Carpeta", +"From link" => "Desde enlace", +"Deleted files" => "Archivos eliminados", +"Cancel upload" => "Cancelar subida", +"You don’t have permission to upload or create files here" => "No tienes permisos para subir o crear archivos aquí.", +"Nothing in here. Upload something!" => "No hay nada aquí. ¡Suba algo!", +"Download" => "Descargar", +"Delete" => "Eliminar", +"Upload too large" => "Subida demasido 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 en este servidor.", +"Files are being scanned, please wait." => "Los archivos están siendo escaneados, por favor espere.", +"Current scanning" => "Escaneo actual", +"Upgrading filesystem cache..." => "Actualizando caché del sistema de archivos..." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php index 9f674b27e63ac577b96ac76ec6005ddd6979959b..fd0315277380099f6a3b2314ff6ae08ad95df021 100644 --- a/apps/files/l10n/et_EE.php +++ b/apps/files/l10n/et_EE.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Ei saa liigutada faili %s - samanimeline fail on juba olemas", "Could not move %s" => "%s liigutamine ebaõnnestus", +"File name cannot be empty." => "Faili nimi ei saa olla tühi.", +"File name must not contain \"/\". Please choose a different name." => "Faili nimi ei tohi sisaldada \"/\". Palun vali mõni teine nimi.", +"The name %s is already used in the folder %s. Please choose a different name." => "Nimi %s on juba kasutusel kataloogis %s. Palun vali mõni teine nimi.", +"Not a valid source" => "Pole korrektne lähteallikas", +"Server is not allowed to open URLs, please check the server configuration" => "Server ei võimalda URL-ide avamist, palun kontrolli serveri seadistust", +"Error while downloading %s to %s" => "Viga %s allalaadimisel %s", +"Error when creating the file" => "Viga faili loomisel", +"Folder name cannot be empty." => "Kataloogi nimi ei saa olla tühi.", +"Folder name must not contain \"/\". Please choose a different name." => "Kataloogi nimi ei tohi sisaldada \"/\". Palun vali mõni teine nimi.", +"Error when creating the folder" => "Viga kataloogi loomisel", "Unable to set upload directory." => "Üleslaadimiste kausta määramine ebaõnnestus.", "Invalid Token" => "Vigane kontrollkood", "No file was uploaded. Unknown error" => "Ühtegi faili ei laetud üles. Tundmatu viga", @@ -13,38 +23,47 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "Ajutiste failide kaust puudub", "Failed to write to disk" => "Kettale kirjutamine ebaõnnestus", "Not enough storage available" => "Saadaval pole piisavalt ruumi", +"Upload failed. Could not get file info." => "Üleslaadimine ebaõnnestus. Faili info hankimine ebaõnnestus.", +"Upload failed. Could not find uploaded file" => "Üleslaadimine ebaõnnestus. Üleslaetud faili ei leitud", "Invalid directory." => "Vigane kaust.", "Files" => "Failid", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "Ei saa üles laadida {filename}, kuna see on kataloog või selle suurus on 0 baiti", "Not enough space available" => "Pole piisavalt ruumi", "Upload cancelled." => "Üleslaadimine tühistati.", +"Could not get result from server." => "Serverist ei saadud tulemusi", "File upload is in progress. Leaving the page now will cancel the upload." => "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise.", -"URL cannot be empty." => "URL ei saa olla tühi.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Vigane kausta nimi. 'Shared' kasutamine on reserveeritud ownCloud poolt.", -"Error" => "Viga", +"URL cannot be empty" => "URL ei saa olla tühi", +"In the home folder 'Shared' is a reserved filename" => "Kodukataloogis 'Shared' on reserveeritud failinimi", +"{new_name} already exists" => "{new_name} on juba olemas", +"Could not create file" => "Ei suuda luua faili", +"Could not create folder" => "Ei suuda luua kataloogi", +"Error fetching URL" => "Viga URL-i haaramisel", "Share" => "Jaga", "Delete permanently" => "Kustuta jäädavalt", "Rename" => "Nimeta ümber", "Pending" => "Ootel", -"{new_name} already exists" => "{new_name} on juba olemas", -"replace" => "asenda", -"suggest name" => "soovita nime", -"cancel" => "loobu", +"Could not rename file" => "Ei suuda faili ümber nimetada", "replaced {new_name} with {old_name}" => "asendas nime {old_name} nimega {new_name}", "undo" => "tagasi", +"Error deleting file." => "Viga faili kustutamisel.", "_%n folder_::_%n folders_" => array("%n kataloog","%n kataloogi"), "_%n file_::_%n files_" => array("%n fail","%n faili"), "{dirs} and {files}" => "{dirs} ja {files}", "_Uploading %n file_::_Uploading %n files_" => array("Laadin üles %n faili","Laadin üles %n faili"), "'.' is an invalid file name." => "'.' on vigane failinimi.", -"File name cannot be empty." => "Faili nimi ei saa olla tühi.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Vigane nimi, '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' pole lubatud.", "Your storage is full, files can not be updated or synced anymore!" => "Sinu andmemaht on täis! Faile ei uuendata ega sünkroniseerita!", "Your storage is almost full ({usedSpacePercent}%)" => "Su andmemaht on peaaegu täis ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Krüpteerimisrakend on lubatud, kuid võtmeid pole lähtestatud. Palun logi välja ning uuesti sisse.", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Vigane Krüpteerimisrakendi privaatvõti . Palun uuenda oma privaatse võtme parool oma personaasete seadete all taastamaks ligipääsu oma krüpteeritud failidele.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Krüpteering on keelatud, kuid sinu failid on endiselt krüpteeritud. Palun vaata oma personaalseid seadeid oma failide dekrüpteerimiseks.", "Your download is being prepared. This might take some time if the files are big." => "Valmistatakse allalaadimist. See võib võtta veidi aega, kui on tegu suurte failidega. ", +"Error moving file" => "Viga faili eemaldamisel", +"Error" => "Viga", "Name" => "Nimi", "Size" => "Suurus", "Modified" => "Muudetud", +"Invalid folder name. Usage of 'Shared' is reserved." => "Vigane kausta nimi. Nime 'Shared' kasutamine on reserveeritud.", "%s could not be renamed" => "%s ümbernimetamine ebaõnnestus", "Upload" => "Lae üles", "File handling" => "Failide käsitlemine", @@ -56,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Maksimaalne ZIP-faili sisestatava faili suurus", "Save" => "Salvesta", "New" => "Uus", +"New text file" => "Uus tekstifail", "Text file" => "Tekstifail", +"New folder" => "Uus kaust", "Folder" => "Kaust", "From link" => "Allikast", "Deleted files" => "Kustutatud failid", "Cancel upload" => "Tühista üleslaadimine", -"You don’t have write permissions here." => "Siin puudvad sul kirjutamisõigused.", +"You don’t have permission to upload or create files here" => "Sul puuduvad õigused siia failide üleslaadimiseks või tekitamiseks", "Nothing in here. Upload something!" => "Siin pole midagi. Lae midagi üles!", "Download" => "Lae alla", -"Unshare" => "Lõpeta jagamine", "Delete" => "Kustuta", "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.", diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php index 33ea47d5f04b35fc96567d042eadb091b8e6d67e..5df480c2bc3dd069b636bfc87fa3fe43a0a87900 100644 --- a/apps/files/l10n/eu.php +++ b/apps/files/l10n/eu.php @@ -2,6 +2,15 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Ezin da %s mugitu - Izen hau duen fitxategia dagoeneko existitzen da", "Could not move %s" => "Ezin dira fitxategiak mugitu %s", +"File name cannot be empty." => "Fitxategi izena ezin da hutsa izan.", +"File name must not contain \"/\". Please choose a different name." => "Fitxategi izenak ezin du \"/\" izan. Mesedez hautatu beste izen bat.", +"The name %s is already used in the folder %s. Please choose a different name." => "%s izena dagoeneko erabilita dago %s karpetan. Mesdez hautatu izen ezberdina.", +"Not a valid source" => "Ez da jatorri baliogarria", +"Error while downloading %s to %s" => "Errorea %s %sra deskargatzerakoan", +"Error when creating the file" => "Errorea fitxategia sortzerakoan", +"Folder name cannot be empty." => "Karpeta izena ezin da hutsa izan.", +"Folder name must not contain \"/\". Please choose a different name." => "Karpeta izenak ezin du \"/\" izan. Mesedez hautatu beste izen bat.", +"Error when creating the folder" => "Errorea karpeta sortzerakoan", "Unable to set upload directory." => "Ezin da igoera direktorioa ezarri.", "Invalid Token" => "Lekuko baliogabea", "No file was uploaded. Unknown error" => "Ez da fitxategirik igo. Errore ezezaguna", @@ -13,37 +22,46 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "Aldi bateko karpeta falta da", "Failed to write to disk" => "Errore bat izan da diskoan idazterakoan", "Not enough storage available" => "Ez dago behar aina leku erabilgarri,", +"Upload failed. Could not get file info." => "Igoerak huts egin du. Ezin izan da fitxategiaren informazioa eskuratu.", +"Upload failed. Could not find uploaded file" => "Igoerak huts egin du. Ezin izan da igotako fitxategia aurkitu", "Invalid directory." => "Baliogabeko karpeta.", "Files" => "Fitxategiak", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "Ezin da {filename} igo karpeta bat delako edo 0 byte dituelako", "Not enough space available" => "Ez dago leku nahikorik.", "Upload cancelled." => "Igoera ezeztatuta", +"Could not get result from server." => "Ezin da zerbitzaritik emaitzik lortu", "File upload is in progress. Leaving the page now will cancel the upload." => "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.", -"URL cannot be empty." => "URLa ezin da hutsik egon.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Karpeta izne baliogabea. \"Shared\" karpeta erabilpena OwnCloudentzat erreserbaturik dago.", -"Error" => "Errorea", +"URL cannot be empty" => "URLa ezin da hutsik egon", +"In the home folder 'Shared' is a reserved filename" => "Etxeko (home) karpetan 'Shared' erreserbatutako fitxategi izena da", +"{new_name} already exists" => "{new_name} dagoeneko existitzen da", +"Could not create file" => "Ezin izan da fitxategia sortu", +"Could not create folder" => "Ezin izan da karpeta sortu", "Share" => "Elkarbanatu", "Delete permanently" => "Ezabatu betirako", "Rename" => "Berrizendatu", "Pending" => "Zain", -"{new_name} already exists" => "{new_name} dagoeneko existitzen da", -"replace" => "ordeztu", -"suggest name" => "aholkatu izena", -"cancel" => "ezeztatu", +"Could not rename file" => "Ezin izan da fitxategia berrizendatu", "replaced {new_name} with {old_name}" => " {new_name}-k {old_name} ordezkatu du", "undo" => "desegin", +"Error deleting file." => "Errorea fitxategia ezabatzerakoan.", "_%n folder_::_%n folders_" => array("karpeta %n","%n karpeta"), "_%n file_::_%n files_" => array("fitxategi %n","%n fitxategi"), +"{dirs} and {files}" => "{dirs} eta {files}", "_Uploading %n file_::_Uploading %n files_" => array("Fitxategi %n igotzen","%n fitxategi igotzen"), "'.' is an invalid file name." => "'.' ez da fitxategi izen baliogarria.", -"File name cannot be empty." => "Fitxategi izena ezin da hutsa izan.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "IZen aliogabea, '\\', '/', '<', '>', ':', '\"', '|', '?' eta '*' ez daude baimenduta.", "Your storage is full, files can not be updated or synced anymore!" => "Zure biltegiratzea beterik dago, ezingo duzu aurrerantzean fitxategirik igo edo sinkronizatu!", "Your storage is almost full ({usedSpacePercent}%)" => "Zure biltegiratzea nahiko beterik dago (%{usedSpacePercent})", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Enkriptazio aplikaziorako gako pribatu okerra. Mesedez eguneratu zure gako pribatuaren pasahitza zure ezarpen pertsonaletan zure enkriptatuko fitxategietarako sarrera berreskuratzeko.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Enkriptazioa desgaitua izan da baina zure fitxategiak oraindik enkriptatuta daude. Mesedez jo zure ezarpen pertsonaletara zure fitxategiak dekodifikatzeko.", "Your download is being prepared. This might take some time if the files are big." => "Zure deskarga prestatu egin behar da. Denbora bat har lezake fitxategiak handiak badira. ", +"Error moving file" => "Errorea fitxategia mugitzean", +"Error" => "Errorea", "Name" => "Izena", "Size" => "Tamaina", "Modified" => "Aldatuta", +"Invalid folder name. Usage of 'Shared' is reserved." => "Baliogabeako karpeta izena. 'Shared' izena erreserbatuta dago.", "%s could not be renamed" => "%s ezin da berrizendatu", "Upload" => "Igo", "File handling" => "Fitxategien kudeaketa", @@ -55,15 +73,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "ZIP fitxategien gehienezko tamaina", "Save" => "Gorde", "New" => "Berria", +"New text file" => "Testu fitxategi berria", "Text file" => "Testu fitxategia", +"New folder" => "Karpeta berria", "Folder" => "Karpeta", "From link" => "Estekatik", "Deleted files" => "Ezabatutako fitxategiak", "Cancel upload" => "Ezeztatu igoera", -"You don’t have write permissions here." => "Ez duzu hemen idazteko baimenik.", +"You don’t have permission to upload or create files here" => "Ez duzu fitxategiak hona igotzeko edo hemen sortzeko baimenik", "Nothing in here. Upload something!" => "Ez dago ezer. Igo zerbait!", "Download" => "Deskargatu", -"Unshare" => "Ez elkarbanatu", "Delete" => "Ezabatu", "Upload too large" => "Igoera 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.", diff --git a/apps/files/l10n/fa.php b/apps/files/l10n/fa.php index 46d7cfe73efef0518dbe1d76b17970df8e9ec06d..4f3257bc075f3dc6f604714f3b599bcdb914a663 100644 --- a/apps/files/l10n/fa.php +++ b/apps/files/l10n/fa.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "%s نمی تواند حرکت کند - در حال حاضر پرونده با این نام وجود دارد. ", "Could not move %s" => "%s نمی تواند حرکت کند ", +"File name cannot be empty." => "نام پرونده نمی تواند خالی باشد.", "Unable to set upload directory." => "قادر به تنظیم پوشه آپلود نمی باشد.", "Invalid Token" => "رمز نامعتبر", "No file was uploaded. Unknown error" => "هیچ فایلی آپلود نشد.خطای ناشناس", @@ -18,28 +19,22 @@ $TRANSLATIONS = array( "Not enough space available" => "فضای کافی در دسترس نیست", "Upload cancelled." => "بار گذاری لغو شد", "File upload is in progress. Leaving the page now will cancel the upload." => "آپلودکردن پرونده در حال پیشرفت است. در صورت خروج از صفحه آپلود لغو میگردد. ", -"URL cannot be empty." => "URL نمی تواند خالی باشد.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "نام پوشه نامعتبر است. استفاده از 'به اشتراک گذاشته شده' متعلق به ownCloud میباشد.", -"Error" => "خطا", +"{new_name} already exists" => "{نام _جدید} در حال حاضر وجود دارد.", "Share" => "اشتراک‌گذاری", "Delete permanently" => "حذف قطعی", "Rename" => "تغییرنام", "Pending" => "در انتظار", -"{new_name} already exists" => "{نام _جدید} در حال حاضر وجود دارد.", -"replace" => "جایگزین", -"suggest name" => "پیشنهاد نام", -"cancel" => "لغو", "replaced {new_name} with {old_name}" => "{نام_جدید} با { نام_قدیمی} جایگزین شد.", "undo" => "بازگشت", "_%n folder_::_%n folders_" => array(""), "_%n file_::_%n files_" => array(""), "_Uploading %n file_::_Uploading %n files_" => array(""), "'.' is an invalid file name." => "'.' یک نام پرونده نامعتبر است.", -"File name cannot be empty." => "نام پرونده نمی تواند خالی باشد.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "نام نامعتبر ، '\\', '/', '<', '>', ':', '\"', '|', '?' و '*' مجاز نمی باشند.", "Your storage is full, files can not be updated or synced anymore!" => "فضای ذخیره ی شما کاملا پر است، بیش از این فایلها بهنگام یا همگام سازی نمی توانند بشوند!", "Your storage is almost full ({usedSpacePercent}%)" => "فضای ذخیره ی شما تقریبا پر است ({usedSpacePercent}%)", "Your download is being prepared. This might take some time if the files are big." => "دانلود شما در حال آماده شدن است. در صورتیکه پرونده ها بزرگ باشند ممکن است مدتی طول بکشد.", +"Error" => "خطا", "Name" => "نام", "Size" => "اندازه", "Modified" => "تاریخ", @@ -55,14 +50,13 @@ $TRANSLATIONS = array( "Save" => "ذخیره", "New" => "جدید", "Text file" => "فایل متنی", +"New folder" => "پوشه جدید", "Folder" => "پوشه", "From link" => "از پیوند", "Deleted files" => "فایل های حذف شده", "Cancel upload" => "متوقف کردن بار گذاری", -"You don’t have write permissions here." => "شما اجازه ی نوشتن در اینجا را ندارید", "Nothing in here. Upload something!" => "اینجا هیچ چیز نیست.", "Download" => "دانلود", -"Unshare" => "لغو اشتراک", "Delete" => "حذف", "Upload too large" => "سایز فایل برای آپلود زیاد است(م.تنظیمات در php.ini)", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "فایلها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر فایل php,ini میتوان این محدودیت را برطرف کرد", diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php index 5345bad902b392b0668dc96219398fb9e341cf8c..d1241b77da07bf1c1f2e7e197c76c002b486ac98 100644 --- a/apps/files/l10n/fi_FI.php +++ b/apps/files/l10n/fi_FI.php @@ -2,15 +2,26 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Kohteen %s siirto ei onnistunut - Tiedosto samalla nimellä on jo olemassa", "Could not move %s" => "Kohteen %s siirto ei onnistunut", +"File name cannot be empty." => "Tiedoston nimi ei voi olla tyhjä.", +"File name must not contain \"/\". Please choose a different name." => "Tiedoston nimessä ei saa olla merkkiä \"/\". Valitse toinen nimi.", +"The name %s is already used in the folder %s. Please choose a different name." => "Nimi %s on jo käytössä kansiossa %s. Valitse toinen nimi.", +"Not a valid source" => "Virheellinen lähde", +"Server is not allowed to open URLs, please check the server configuration" => "Palvelimen ei ole lupa avata verkko-osoitteita. Tarkista palvelimen asetukset", +"Error while downloading %s to %s" => "Virhe ladatessa kohdetta %s sijaintiin %s", +"Error when creating the file" => "Virhe tiedostoa luotaessa", +"Folder name cannot be empty." => "Kansion nimi ei voi olla tyhjä.", +"Folder name must not contain \"/\". Please choose a different name." => "Kansion nimessä ei saa olla merkkiä \"/\". Valitse toinen nimi.", +"Error when creating the folder" => "Virhe kansiota luotaessa", "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 upload_max_filesize directive in php.ini: " => "Lähetetyn tiedoston koko ylittää php.ini-tiedoston upload_max_filesize-säännön:", -"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Ladattavan tiedoston maksimikoko ylittää MAX_FILE_SIZE dirketiivin, joka on määritelty HTML-lomakkeessa", +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Lähetettävän tiedoston enimmäiskoko ylittää HTML-lomakkeessa määritellyn MAX_FILE_SIZE-säännön", "The uploaded file was only partially uploaded" => "Tiedoston lähetys onnistui vain osittain", "No file was uploaded" => "Yhtäkään tiedostoa ei lähetetty", "Missing a temporary folder" => "Tilapäiskansio puuttuu", "Failed to write to disk" => "Levylle kirjoitus epäonnistui", "Not enough storage available" => "Tallennustilaa ei ole riittävästi käytettävissä", +"Upload failed. Could not find uploaded file" => "Lähetys epäonnistui. Lähettävää tiedostoa ei löydetty.", "Invalid directory." => "Virheellinen kansio.", "Files" => "Tiedostot", "Unable to upload {filename} as it is a directory or has 0 bytes" => "Kohdetta {filename} ei voi lähettää, koska se on joko kansio tai sen koko on 0 tavua", @@ -18,31 +29,35 @@ $TRANSLATIONS = array( "Upload cancelled." => "Lähetys peruttu.", "Could not get result from server." => "Tuloksien saaminen palvelimelta ei onnistunut.", "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ä", -"Error" => "Virhe", +"URL cannot be empty" => "Osoite ei voi olla tyhjä", +"{new_name} already exists" => "{new_name} on jo olemassa", +"Could not create file" => "Tiedoston luominen epäonnistui", +"Could not create folder" => "Kansion luominen epäonnistui", +"Error fetching URL" => "Virhe noutaessa verkko-osoitetta", "Share" => "Jaa", "Delete permanently" => "Poista pysyvästi", "Rename" => "Nimeä uudelleen", "Pending" => "Odottaa", -"{new_name} already exists" => "{new_name} on jo olemassa", -"replace" => "korvaa", -"suggest name" => "ehdota nimeä", -"cancel" => "peru", +"Could not rename file" => "Tiedoston nimeäminen uudelleen epäonnistui", "undo" => "kumoa", +"Error deleting file." => "Virhe tiedostoa poistaessa.", "_%n folder_::_%n folders_" => array("%n kansio","%n kansiota"), "_%n file_::_%n files_" => array("%n tiedosto","%n tiedostoa"), "{dirs} and {files}" => "{dirs} ja {files}", "_Uploading %n file_::_Uploading %n files_" => array("Lähetetään %n tiedosto","Lähetetään %n tiedostoa"), "'.' is an invalid file name." => "'.' on virheellinen nimi tiedostolle.", -"File name cannot be empty." => "Tiedoston nimi ei voi olla tyhjä.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Virheellinen nimi, merkit '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' eivät ole sallittuja.", "Your storage is full, files can not be updated or synced anymore!" => "Tallennustila on loppu, tiedostoja ei voi enää päivittää tai synkronoida!", "Your storage is almost full ({usedSpacePercent}%)" => "Tallennustila on melkein loppu ({usedSpacePercent}%)", +"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Salaus poistettiin käytöstä, mutta tiedostosi ovat edelleen salattuina. Siirry henkilökohtaisiin asetuksiin avataksesi tiedostojesi salauksen.", "Your download is being prepared. This might take some time if the files are big." => "Lataustasi valmistellaan. Tämä saattaa kestää hetken, jos tiedostot ovat suuria kooltaan.", "Error moving file" => "Virhe tiedostoa siirrettäessä", +"Error" => "Virhe", "Name" => "Nimi", "Size" => "Koko", "Modified" => "Muokattu", +"Invalid folder name. Usage of 'Shared' is reserved." => "Virheellinen kansion nimi. 'Shared':n käyttö on varattu.", +"%s could not be renamed" => "kohteen %s nimeäminen uudelleen epäonnistui", "Upload" => "Lähetä", "File handling" => "Tiedostonhallinta", "Maximum upload size" => "Lähetettävän tiedoston suurin sallittu koko", @@ -53,15 +68,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "ZIP-tiedostojen enimmäiskoko", "Save" => "Tallenna", "New" => "Uusi", +"New text file" => "Uusi tekstitiedosto", "Text file" => "Tekstitiedosto", +"New folder" => "Uusi kansio", "Folder" => "Kansio", "From link" => "Linkistä", "Deleted files" => "Poistetut tiedostot", "Cancel upload" => "Peru lähetys", -"You don’t have write permissions here." => "Tunnuksellasi ei ole kirjoitusoikeuksia tänne.", +"You don’t have permission to upload or create files here" => "Käyttöoikeutesi eivät riitä tiedostojen lähettämiseen tai kansioiden luomiseen tähän sijaintiin", "Nothing in here. Upload something!" => "Täällä ei ole mitään. Lähetä tänne jotakin!", "Download" => "Lataa", -"Unshare" => "Peru jakaminen", "Delete" => "Poista", "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.", diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php index 03505a2a26988aef322b7f0210b10705b3f5a1fa..73b89434778b3a14477de2017ec0b26fcf4a42de 100644 --- a/apps/files/l10n/fr.php +++ b/apps/files/l10n/fr.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Impossible de déplacer %s - Un fichier possédant ce nom existe déjà", "Could not move %s" => "Impossible de déplacer %s", +"File name cannot be empty." => "Le nom de fichier ne peut être vide.", +"File name must not contain \"/\". Please choose a different name." => "Le nom de fichier ne doit pas contenir \"/\". Merci de choisir un nom différent.", +"The name %s is already used in the folder %s. Please choose a different name." => "Le nom %s est déjà utilisé dans le dossier %s. Merci de choisir un nom différent.", +"Not a valid source" => "La source n'est pas valide", +"Server is not allowed to open URLs, please check the server configuration" => "Le serveur n'est pas autorisé à ouvrir des URL, veuillez vérifier la configuration du serveur", +"Error while downloading %s to %s" => "Erreur pendant le téléchargement de %s à %s", +"Error when creating the file" => "Erreur pendant la création du fichier", +"Folder name cannot be empty." => "Le nom de dossier ne peux pas être vide.", +"Folder name must not contain \"/\". Please choose a different name." => "Le nom de dossier ne doit pas contenir \"/\". Merci de choisir un nom différent.", +"Error when creating the folder" => "Erreur pendant la création du dossier", "Unable to set upload directory." => "Impossible de définir le dossier pour l'upload, charger.", "Invalid Token" => "Jeton non valide", "No file was uploaded. Unknown error" => "Aucun fichier n'a été envoyé. Erreur inconnue", @@ -22,34 +32,38 @@ $TRANSLATIONS = array( "Upload cancelled." => "Envoi annulé.", "Could not get result from server." => "Ne peut recevoir les résultats du serveur.", "File upload is in progress. Leaving the page now will cancel the upload." => "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.", -"URL cannot be empty." => "L'URL ne peut-être vide", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nom de dossier invalide. L'utilisation du mot 'Shared' est réservée à Owncloud", -"Error" => "Erreur", +"URL cannot be empty" => "L'URL ne peut pas être vide", +"In the home folder 'Shared' is a reserved filename" => "Dans le dossier home, 'Partagé' est un nom de fichier réservé", +"{new_name} already exists" => "{new_name} existe déjà", +"Could not create file" => "Impossible de créer le fichier", +"Could not create folder" => "Impossible de créer le dossier", +"Error fetching URL" => "Erreur d'accès à l'URL", "Share" => "Partager", "Delete permanently" => "Supprimer de façon définitive", "Rename" => "Renommer", "Pending" => "En attente", -"{new_name} already exists" => "{new_name} existe déjà", -"replace" => "remplacer", -"suggest name" => "Suggérer un nom", -"cancel" => "annuler", +"Could not rename file" => "Impossible de renommer le fichier", "replaced {new_name} with {old_name}" => "{new_name} a été remplacé par {old_name}", "undo" => "annuler", +"Error deleting file." => "Erreur pendant la suppression du fichier.", "_%n folder_::_%n folders_" => array("%n dossier","%n dossiers"), "_%n file_::_%n files_" => array("%n fichier","%n fichiers"), -"{dirs} and {files}" => "{dir} et {files}", +"{dirs} and {files}" => "{dirs} et {files}", "_Uploading %n file_::_Uploading %n files_" => array("Téléversement de %n fichier","Téléversement de %n fichiers"), "'.' is an invalid file name." => "'.' n'est pas un nom de fichier valide.", -"File name cannot be empty." => "Le nom de fichier ne peut être vide.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nom invalide, les caractères '\\', '/', '<', '>', ':', '\"', '|', '?' et '*' ne sont pas autorisés.", "Your storage is full, files can not be updated or synced anymore!" => "Votre espage de stockage est plein, les fichiers ne peuvent plus être téléversés ou synchronisés !", "Your storage is almost full ({usedSpacePercent}%)" => "Votre espace de stockage est presque plein ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "L'application de chiffrement est activée mais vos clés ne sont pas initialisées, veuillez vous déconnecter et ensuite vous reconnecter.", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Votre clef privée pour l'application de chiffrement est invalide ! Veuillez mettre à jour le mot de passe de votre clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Le chiffrement était désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos Paramètres personnels pour déchiffrer vos fichiers.", "Your download is being prepared. This might take some time if the files are big." => "Votre téléchargement est cours de préparation. Ceci peut nécessiter un certain temps si les fichiers sont volumineux.", "Error moving file" => "Erreur lors du déplacement du fichier", +"Error" => "Erreur", "Name" => "Nom", "Size" => "Taille", "Modified" => "Modifié", +"Invalid folder name. Usage of 'Shared' is reserved." => "Nom de dossier invalide. L'utilisation du mot 'Shared' est réservée.", "%s could not be renamed" => "%s ne peut être renommé", "Upload" => "Envoyer", "File handling" => "Gestion des fichiers", @@ -61,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Taille maximale pour les fichiers ZIP", "Save" => "Sauvegarder", "New" => "Nouveau", +"New text file" => "Nouveau fichier texte", "Text file" => "Fichier texte", +"New folder" => "Nouveau dossier", "Folder" => "Dossier", "From link" => "Depuis le lien", "Deleted files" => "Fichiers supprimés", "Cancel upload" => "Annuler l'envoi", -"You don’t have write permissions here." => "Vous n'avez pas le droit d'écriture ici.", +"You don’t have permission to upload or create files here" => "Vous n'avez pas la permission de téléverser ou de créer des fichiers ici", "Nothing in here. Upload something!" => "Il n'y a rien ici ! Envoyez donc quelque chose :)", "Download" => "Télécharger", -"Unshare" => "Ne plus partager", "Delete" => "Supprimer", "Upload too large" => "Téléversement 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.", diff --git a/apps/files/l10n/fr_CA.php b/apps/files/l10n/fr_CA.php new file mode 100644 index 0000000000000000000000000000000000000000..3c711e6b78a257d953a010dc2feba5ae4d139369 --- /dev/null +++ b/apps/files/l10n/fr_CA.php @@ -0,0 +1,7 @@ + array("",""), +"_%n file_::_%n files_" => array("",""), +"_Uploading %n file_::_Uploading %n files_" => array("","") +); +$PLURAL_FORMS = "nplurals=2; plural=(n > 1);"; diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php index 2766478650a31d707dc2179e6a2d72dae577eda3..1d22691d93c21d80d380ef504a6abe40c6454b83 100644 --- a/apps/files/l10n/gl.php +++ b/apps/files/l10n/gl.php @@ -1,7 +1,17 @@ "Non se moveu %s - Xa existe un ficheiro con ese nome.", +"Could not move %s - File with this name already exists" => "Non foi posíbel mover %s; Xa existe un ficheiro con ese nome.", "Could not move %s" => "Non foi posíbel mover %s", +"File name cannot be empty." => "O nome de ficheiro non pode estar baleiro", +"File name must not contain \"/\". Please choose a different name." => "O nome do ficheiro non pode conter «/». Escolla outro nome.", +"The name %s is already used in the folder %s. Please choose a different name." => "Xa existe o nome %s no cartafol %s. Escolla outro nome.", +"Not a valid source" => "Esta orixe non é correcta", +"Server is not allowed to open URLs, please check the server configuration" => "O servidor non ten permisos para abrir os enderezos URL, comprobe a configuración do servidor", +"Error while downloading %s to %s" => "Produciuse un erro ao descargar %s en %s", +"Error when creating the file" => "Produciuse un erro ao crear o ficheiro", +"Folder name cannot be empty." => "O nome de cartafol non pode estar baleiro.", +"Folder name must not contain \"/\". Please choose a different name." => "O nome do cartafol non pode conter «/». Escolla outro nome.", +"Error when creating the folder" => "Produciuse un erro ao crear o cartafol", "Unable to set upload directory." => "Non é posíbel configurar o directorio de envíos.", "Invalid Token" => "Marca incorrecta", "No file was uploaded. Unknown error" => "Non se enviou ningún ficheiro. Produciuse un erro descoñecido.", @@ -22,34 +32,38 @@ $TRANSLATIONS = array( "Upload cancelled." => "Envío cancelado.", "Could not get result from server." => "Non foi posíbel obter o resultado do servidor.", "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 «Compartido» e «Shared» está reservado para o ownClod", -"Error" => "Erro", +"URL cannot be empty" => "O URL non pode quedar en branco.", +"In the home folder 'Shared' is a reserved filename" => "«Shared» dentro do cartafol persoal é un nome reservado", +"{new_name} already exists" => "Xa existe un {new_name}", +"Could not create file" => "Non foi posíbel crear o ficheiro", +"Could not create folder" => "Non foi posíbel crear o cartafol", +"Error fetching URL" => "Produciuse un erro ao obter o URL", "Share" => "Compartir", "Delete permanently" => "Eliminar permanentemente", "Rename" => "Renomear", "Pending" => "Pendentes", -"{new_name} already exists" => "Xa existe un {new_name}", -"replace" => "substituír", -"suggest name" => "suxerir nome", -"cancel" => "cancelar", +"Could not rename file" => "Non foi posíbel renomear o ficheiro", "replaced {new_name} with {old_name}" => "substituír {new_name} por {old_name}", "undo" => "desfacer", +"Error deleting file." => "Produciuse un erro ao eliminar o ficheiro.", "_%n folder_::_%n folders_" => array("%n cartafol","%n cartafoles"), "_%n file_::_%n files_" => array("%n ficheiro","%n ficheiros"), "{dirs} and {files}" => "{dirs} e {files}", "_Uploading %n file_::_Uploading %n files_" => array("Cargando %n ficheiro","Cargando %n ficheiros"), "'.' 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}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "O aplicativo de cifrado está activado, mais as chaves non foron inicializadas, saia da sesión e volva a acceder de novo", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "A chave privada para o aplicativo de cifrado non é correcta. Actualice o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros cifrados.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "O cifrado foi desactivado, mais os ficheiros están cifrados. Vaia á configuración persoal para descifrar os ficheiros.", "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.", "Error moving file" => "Produciuse un erro ao mover o ficheiro", +"Error" => "Erro", "Name" => "Nome", "Size" => "Tamaño", "Modified" => "Modificado", +"Invalid folder name. Usage of 'Shared' is reserved." => "Nome de cartafol non válido. O uso de «Shared» está reservado.", "%s could not be renamed" => "%s non pode cambiar de nome", "Upload" => "Enviar", "File handling" => "Manexo de ficheiro", @@ -61,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Tamaño máximo de descarga para os ficheiros ZIP", "Save" => "Gardar", "New" => "Novo", +"New text file" => "Ficheiro novo de texto", "Text file" => "Ficheiro de texto", +"New folder" => "Novo cartafol", "Folder" => "Cartafol", "From link" => "Desde a ligazón", "Deleted files" => "Ficheiros eliminados", "Cancel upload" => "Cancelar o envío", -"You don’t have write permissions here." => "Non ten permisos para escribir aquí.", +"You don’t have permission to upload or create files here" => "Non ten permisos para enviar ou crear ficheiros aquí.", "Nothing in here. Upload something!" => "Aquí non hai nada. Envíe algo.", "Download" => "Descargar", -"Unshare" => "Deixar de compartir", "Delete" => "Eliminar", "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 tenta enviar exceden do tamaño máximo permitido neste servidor", diff --git a/apps/files/l10n/he.php b/apps/files/l10n/he.php index bc7ecdb0716512d64396497514536800d747fa48..0cdb178254e5824ed9d5d4aa47c3c6f38911db3a 100644 --- a/apps/files/l10n/he.php +++ b/apps/files/l10n/he.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "לא ניתן להעביר את %s - קובץ בשם הזה כבר קיים", "Could not move %s" => "לא ניתן להעביר את %s", +"File name cannot be empty." => "שם קובץ אינו יכול להיות ריק", "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:", @@ -11,26 +12,25 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "תקיה זמנית חסרה", "Failed to write to disk" => "הכתיבה לכונן נכשלה", "Not enough storage available" => "אין די שטח פנוי באחסון", +"Upload failed. Could not get file info." => "העלאה נכשלה. לא ניתן להשיג את פרטי הקובץ.", "Invalid directory." => "תיקייה שגויה.", "Files" => "קבצים", "Upload cancelled." => "ההעלאה בוטלה.", +"Could not get result from server." => "לא ניתן לגשת לתוצאות מהשרת.", "File upload is in progress. Leaving the page now will cancel the upload." => "מתבצעת כעת העלאת קבצים. עזיבה של העמוד תבטל את ההעלאה.", -"URL cannot be empty." => "קישור אינו יכול להיות ריק.", -"Error" => "שגיאה", +"{new_name} already exists" => "{new_name} כבר קיים", "Share" => "שתף", "Delete permanently" => "מחק לצמיתות", "Rename" => "שינוי שם", "Pending" => "ממתין", -"{new_name} already exists" => "{new_name} כבר קיים", -"replace" => "החלפה", -"suggest name" => "הצעת שם", -"cancel" => "ביטול", "replaced {new_name} with {old_name}" => "{new_name} הוחלף ב־{old_name}", "undo" => "ביטול", "_%n folder_::_%n folders_" => array("",""), "_%n file_::_%n files_" => array("",""), "_Uploading %n file_::_Uploading %n files_" => array("",""), "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "השם שגוי, אסור להשתמש בתווים '\\', '/', '<', '>', ':', '\"', '|', '?' ו־'*'.", +"Your storage is almost full ({usedSpacePercent}%)" => "שטח האחסון שלך כמעט מלא ({usedSpacePercent}%)", +"Error" => "שגיאה", "Name" => "שם", "Size" => "גודל", "Modified" => "זמן שינוי", @@ -47,10 +47,10 @@ $TRANSLATIONS = array( "Text file" => "קובץ טקסט", "Folder" => "תיקייה", "From link" => "מקישור", +"Deleted files" => "קבצים שנמחקו", "Cancel upload" => "ביטול ההעלאה", "Nothing in here. Upload something!" => "אין כאן שום דבר. אולי ברצונך להעלות משהו?", "Download" => "הורדה", -"Unshare" => "הסר שיתוף", "Delete" => "מחיקה", "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/hi.php b/apps/files/l10n/hi.php index 549c928320d2c788764605ce69f055dd4d9c1699..ae01bfc47e1ac6f2fb3043a291f650d4d6124c29 100644 --- a/apps/files/l10n/hi.php +++ b/apps/files/l10n/hi.php @@ -1,10 +1,10 @@ "त्रुटि", "Share" => "साझा करें", "_%n folder_::_%n folders_" => array("",""), "_%n file_::_%n files_" => array("",""), "_Uploading %n file_::_Uploading %n files_" => array("",""), +"Error" => "त्रुटि", "Upload" => "अपलोड ", "Save" => "सहेजें" ); diff --git a/apps/files/l10n/hr.php b/apps/files/l10n/hr.php index 60f1da844091fb75b639d4776b9a38fb96f17e2c..5048a15c8bbe0c2fb0612ce8a6410dcafb768ca9 100644 --- a/apps/files/l10n/hr.php +++ b/apps/files/l10n/hr.php @@ -9,17 +9,14 @@ $TRANSLATIONS = array( "Files" => "Datoteke", "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.", -"Error" => "Greška", "Share" => "Podijeli", "Rename" => "Promjeni ime", "Pending" => "U tijeku", -"replace" => "zamjeni", -"suggest name" => "predloži ime", -"cancel" => "odustani", "undo" => "vrati", "_%n folder_::_%n folders_" => array("","",""), "_%n file_::_%n files_" => array("","",""), "_Uploading %n file_::_Uploading %n files_" => array("","",""), +"Error" => "Greška", "Name" => "Ime", "Size" => "Veličina", "Modified" => "Zadnja promjena", @@ -38,7 +35,6 @@ $TRANSLATIONS = array( "Cancel upload" => "Prekini upload", "Nothing in here. Upload something!" => "Nema ničega u ovoj mapi. Pošalji nešto!", "Download" => "Preuzimanje", -"Unshare" => "Makni djeljenje", "Delete" => "Obriši", "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.", diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php index 4dd6a13d320f34831efecfe648df757caefe8eec..22c3926ed1c1452ecbd09548afb275b9440172fa 100644 --- a/apps/files/l10n/hu_HU.php +++ b/apps/files/l10n/hu_HU.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "%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", +"File name cannot be empty." => "A fájlnév nem lehet semmi.", +"File name must not contain \"/\". Please choose a different name." => "Az állomány neve nem tartalmazhatja a \"/\" karaktert. Kérem válasszon másik nevet!", +"The name %s is already used in the folder %s. Please choose a different name." => "A %s név már létezik a %s mappában. Kérem válasszon másik nevet!", +"Not a valid source" => "A kiinduló állomány érvénytelen", +"Server is not allowed to open URLs, please check the server configuration" => "A kiszolgálón nincs engedélyezve URL-ek megnyitása, kérem ellenőrizze a beállításokat", +"Error while downloading %s to %s" => "Hiba történt miközben %s-t letöltöttük %s-be", +"Error when creating the file" => "Hiba történt az állomány létrehozásakor", +"Folder name cannot be empty." => "A mappa neve nem maradhat kitöltetlenül", +"Folder name must not contain \"/\". Please choose a different name." => "A mappa neve nem tartalmazhatja a \"/\" karaktert. Kérem válasszon másik nevet!", +"Error when creating the folder" => "Hiba történt a mappa létrehozásakor", "Unable to set upload directory." => "Nem található a mappa, ahova feltölteni szeretne.", "Invalid Token" => "Hibás mappacím", "No file was uploaded. Unknown error" => "Nem történt feltöltés. Ismeretlen hiba", @@ -22,34 +32,38 @@ $TRANSLATIONS = array( "Upload cancelled." => "A feltöltést megszakítottuk.", "Could not get result from server." => "A kiszolgálótól nem kapható meg az eredmény.", "File upload is in progress. Leaving the page now will cancel the upload." => "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést.", -"URL cannot be empty." => "Az URL nem lehet semmi.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Érvénytelen mappanév. A 'Shared' az ownCloud számára fenntartott elnevezés", -"Error" => "Hiba", +"URL cannot be empty" => "Az URL-cím nem maradhat kitöltetlenül", +"In the home folder 'Shared' is a reserved filename" => "A kiindulási mappában a 'Shared' egy belső használatra fenntartott név", +"{new_name} already exists" => "{new_name} már létezik", +"Could not create file" => "Az állomány nem hozható létre", +"Could not create folder" => "A mappa nem hozható létre", +"Error fetching URL" => "A megadott URL-ről nem sikerül adatokat kapni", "Share" => "Megosztás", "Delete permanently" => "Végleges 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", -"cancel" => "mégse", +"Could not rename file" => "Az állomány nem nevezhető át", "replaced {new_name} with {old_name}" => "{new_name} fájlt kicseréltük ezzel: {old_name}", "undo" => "visszavonás", +"Error deleting file." => "Hiba a file törlése közben.", "_%n folder_::_%n folders_" => array("%n mappa","%n mappa"), "_%n file_::_%n files_" => array("%n állomány","%n állomány"), "{dirs} and {files}" => "{dirs} és {files}", "_Uploading %n file_::_Uploading %n files_" => array("%n állomány feltöltése","%n állomány feltöltése"), "'.' is an invalid file name." => "'.' fájlnév érvénytelen.", -"File name cannot be empty." => "A fájlnév nem lehet semmi.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Érvénytelen elnevezés. Ezek a karakterek nem használhatók: '\\', '/', '<', '>', ':', '\"', '|', '?' és '*'", "Your storage is full, files can not be updated or synced anymore!" => "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhatóak a jövőben.", "Your storage is almost full ({usedSpacePercent}%)" => "A tároló majdnem tele van ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Az állományok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Az állományok titkosításához használt titkos kulcsa érvénytelen. Kérjük frissítse a titkos kulcs jelszót a személyes beállításokban, hogy ismét hozzáférjen a titkosított állományaihoz!", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "A titkosítási funkciót kikapcsolták, de az Ön állományai még mindig titkosított állapotban vannak. A személyes beállításoknál tudja a titkosítást feloldani.", "Your download is being prepared. This might take some time if the files are big." => "Készül a letöltendő állomány. Ez eltarthat egy ideig, ha nagyok a fájlok.", "Error moving file" => "Az állomány áthelyezése nem sikerült.", +"Error" => "Hiba", "Name" => "Név", "Size" => "Méret", "Modified" => "Módosítva", +"Invalid folder name. Usage of 'Shared' is reserved." => "Érvénytelen mappanév. A 'Shared' a rendszer számára fenntartott elnevezés.", "%s could not be renamed" => "%s átnevezése nem sikerült", "Upload" => "Feltöltés", "File handling" => "Fájlkezelés", @@ -61,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "ZIP-fájlok maximális kiindulási mérete", "Save" => "Mentés", "New" => "Új", +"New text file" => "Új szöveges file", "Text file" => "Szövegfájl", +"New folder" => "Új mappa", "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", -"You don’t have write permissions here." => "Itt nincs írásjoga.", +"You don’t have permission to upload or create files here" => "Önnek nincs jogosultsága ahhoz, hogy ide állományokat töltsön föl, vagy itt újakat hozzon létre", "Nothing in here. Upload something!" => "Itt nincs semmi. Töltsön fel valamit!", "Download" => "Letöltés", -"Unshare" => "A megosztás visszavonása", "Delete" => "Törlés", "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.", diff --git a/apps/files/l10n/ia.php b/apps/files/l10n/ia.php index 1560687f6c4e646a9ba845b923ae213a56971d3c..82fd2e658d717bf62e2b0dc8f8350caaefbf1cdb 100644 --- a/apps/files/l10n/ia.php +++ b/apps/files/l10n/ia.php @@ -4,11 +4,11 @@ $TRANSLATIONS = array( "No file was uploaded" => "Nulle file esseva incargate.", "Missing a temporary folder" => "Manca un dossier temporari", "Files" => "Files", -"Error" => "Error", "Share" => "Compartir", "_%n folder_::_%n folders_" => array("",""), "_%n file_::_%n files_" => array("",""), "_Uploading %n file_::_Uploading %n files_" => array("",""), +"Error" => "Error", "Name" => "Nomine", "Size" => "Dimension", "Modified" => "Modificate", diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php index c8b3194eb6b0d182ad71761b2bd88ef116554c65..4e254ff6f60e5512ec18c0673d15cc696058a3fe 100644 --- a/apps/files/l10n/id.php +++ b/apps/files/l10n/id.php @@ -2,6 +2,17 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Tidak dapat memindahkan %s - Berkas dengan nama ini sudah ada", "Could not move %s" => "Tidak dapat memindahkan %s", +"File name cannot be empty." => "Nama berkas tidak boleh kosong.", +"File name must not contain \"/\". Please choose a different name." => "Nama berkas tidak boleh mengandung \"/\". Silakan pilih nama yang berbeda.", +"The name %s is already used in the folder %s. Please choose a different name." => "Nama %s sudah digunakan dalam folder %s. Silakan pilih nama yang berbeda.", +"Not a valid source" => "Sumber tidak sah", +"Error while downloading %s to %s" => "Galat saat mengunduh %s ke %s", +"Error when creating the file" => "Galat saat membuat berkas", +"Folder name cannot be empty." => "Nama folder tidak bolh kosong.", +"Folder name must not contain \"/\". Please choose a different name." => "Nama folder tidak boleh mengandung \"/\". Silakan pilih nama yang berbeda.", +"Error when creating the folder" => "Galat saat membuat folder", +"Unable to set upload directory." => "Tidak dapat mengatur folder unggah", +"Invalid Token" => "Token tidak sah", "No file was uploaded. Unknown error" => "Tidak ada berkas yang diunggah. Galat tidak dikenal.", "There is no error, the file uploaded with success" => "Tidak ada galat, berkas sukses diunggah", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Berkas yang diunggah melampaui direktif upload_max_filesize pada php.ini", @@ -11,35 +22,47 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "Folder sementara tidak ada", "Failed to write to disk" => "Gagal menulis ke disk", "Not enough storage available" => "Ruang penyimpanan tidak mencukupi", +"Upload failed. Could not get file info." => "Unggah gagal. Tidak mendapatkan informasi berkas.", +"Upload failed. Could not find uploaded file" => "Unggah gagal. Tidak menemukan berkas yang akan diunggah", "Invalid directory." => "Direktori tidak valid.", "Files" => "Berkas", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "Tidak dapat mengunggah {filename} karena ini sebuah direktori atau memiliki ukuran 0 byte", "Not enough space available" => "Ruang penyimpanan tidak mencukupi", "Upload cancelled." => "Pengunggahan dibatalkan.", +"Could not get result from server." => "Tidak mendapatkan hasil dari server.", "File upload is in progress. Leaving the page now will cancel the upload." => "Berkas sedang diunggah. Meninggalkan halaman ini akan membatalkan proses.", -"URL cannot be empty." => "URL tidak boleh kosong", -"Error" => "Galat", +"URL cannot be empty" => "URL tidak boleh kosong", +"In the home folder 'Shared' is a reserved filename" => "Pada folder home, 'Shared' adalah nama berkas yang sudah digunakan", +"{new_name} already exists" => "{new_name} sudah ada", +"Could not create file" => "Tidak dapat membuat berkas", +"Could not create folder" => "Tidak dapat membuat folder", "Share" => "Bagikan", "Delete permanently" => "Hapus secara permanen", "Rename" => "Ubah nama", "Pending" => "Menunggu", -"{new_name} already exists" => "{new_name} sudah ada", -"replace" => "ganti", -"suggest name" => "sarankan nama", -"cancel" => "batalkan", +"Could not rename file" => "Tidak dapat mengubah nama berkas", "replaced {new_name} with {old_name}" => "mengganti {new_name} dengan {old_name}", "undo" => "urungkan", -"_%n folder_::_%n folders_" => array(""), -"_%n file_::_%n files_" => array(""), -"_Uploading %n file_::_Uploading %n files_" => array(""), +"Error deleting file." => "Galat saat menghapus berkas.", +"_%n folder_::_%n folders_" => array("%n folder"), +"_%n file_::_%n files_" => array("%n berkas"), +"{dirs} and {files}" => "{dirs} dan {files}", +"_Uploading %n file_::_Uploading %n files_" => array("Mengunggah %n berkas"), "'.' is an invalid file name." => "'.' bukan nama berkas yang valid.", -"File name cannot be empty." => "Nama berkas tidak boleh kosong.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nama tidak valid, karakter '\\', '/', '<', '>', ':', '\"', '|', '?' dan '*' tidak diizinkan.", "Your storage is full, files can not be updated or synced anymore!" => "Ruang penyimpanan Anda penuh, berkas tidak dapat diperbarui atau disinkronkan lagi!", "Your storage is almost full ({usedSpacePercent}%)" => "Ruang penyimpanan hampir penuh ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.", +"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Enskripi telah dinonaktifkan tetapi berkas anda tetap dienskripsi. Silakan menuju ke pengaturan pribadi untuk deskrip berkas anda.", "Your download is being prepared. This might take some time if the files are big." => "Unduhan Anda sedang disiapkan. Prosesnya dapat berlangsung agak lama jika ukuran berkasnya besar.", +"Error moving file" => "Galat saat memindahkan berkas", +"Error" => "Galat", "Name" => "Nama", "Size" => "Ukuran", "Modified" => "Dimodifikasi", +"Invalid folder name. Usage of 'Shared' is reserved." => "Nama folder tidak sah. Menggunakan 'Shared' sudah digunakan.", +"%s could not be renamed" => "%s tidak dapat diubah nama", "Upload" => "Unggah", "File handling" => "Penanganan berkas", "Maximum upload size" => "Ukuran pengunggahan maksimum", @@ -50,15 +73,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Ukuran masukan maksimum untuk berkas ZIP", "Save" => "Simpan", "New" => "Baru", +"New text file" => "Berkas teks baru", "Text file" => "Berkas teks", +"New folder" => "Map baru", "Folder" => "Folder", "From link" => "Dari tautan", "Deleted files" => "Berkas yang dihapus", "Cancel upload" => "Batal pengunggahan", -"You don’t have write permissions here." => "Anda tidak memiliki izin menulis di sini.", +"You don’t have permission to upload or create files here" => "Anda tidak memiliki akses untuk mengunggah atau membuat berkas disini", "Nothing in here. Upload something!" => "Tidak ada apa-apa di sini. Unggah sesuatu!", "Download" => "Unduh", -"Unshare" => "Batalkan berbagi", "Delete" => "Hapus", "Upload too large" => "Yang diunggah terlalu besar", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Berkas yang dicoba untuk diunggah melebihi ukuran maksimum pengunggahan berkas di server ini.", diff --git a/apps/files/l10n/is.php b/apps/files/l10n/is.php index ef49341820691d92f570434e5e0313bdea535750..5c5cc7d5d7343ac619d41e30a0cafd9b2547b3da 100644 --- a/apps/files/l10n/is.php +++ b/apps/files/l10n/is.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Gat ekki fært %s - Skrá með þessu nafni er þegar til", "Could not move %s" => "Gat ekki fært %s", +"File name cannot be empty." => "Nafn skráar má ekki vera tómt", "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:", @@ -15,23 +16,18 @@ $TRANSLATIONS = array( "Not enough space available" => "Ekki nægt pláss tiltækt", "Upload cancelled." => "Hætt við innsendingu.", "File upload is in progress. Leaving the page now will cancel the upload." => "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast.", -"URL cannot be empty." => "Vefslóð má ekki vera tóm.", -"Error" => "Villa", +"{new_name} already exists" => "{new_name} er þegar til", "Share" => "Deila", "Rename" => "Endurskýra", "Pending" => "Bíður", -"{new_name} already exists" => "{new_name} er þegar til", -"replace" => "yfirskrifa", -"suggest name" => "stinga upp á nafni", -"cancel" => "hætta við", "replaced {new_name} with {old_name}" => "yfirskrifaði {new_name} með {old_name}", "undo" => "afturkalla", "_%n folder_::_%n folders_" => array("",""), "_%n file_::_%n files_" => array("",""), "_Uploading %n file_::_Uploading %n files_" => array("",""), "'.' is an invalid file name." => "'.' er ekki leyfilegt nafn.", -"File name cannot be empty." => "Nafn skráar má ekki vera tómt", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ógilt nafn, táknin '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' eru ekki leyfð.", +"Error" => "Villa", "Name" => "Nafn", "Size" => "Stærð", "Modified" => "Breytt", @@ -51,7 +47,6 @@ $TRANSLATIONS = array( "Cancel upload" => "Hætta við innsendingu", "Nothing in here. Upload something!" => "Ekkert hér. Settu eitthvað inn!", "Download" => "Niðurhal", -"Unshare" => "Hætta deilingu", "Delete" => "Eyða", "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.", diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php index 44b4e341956df3b771bfdee982230d317ff87296..2a10e9977f4c180baa6e893ceb20e22f323ec464 100644 --- a/apps/files/l10n/it.php +++ b/apps/files/l10n/it.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Impossibile spostare %s - un file con questo nome esiste già", "Could not move %s" => "Impossibile spostare %s", +"File name cannot be empty." => "Il nome del file non può essere vuoto.", +"File name must not contain \"/\". Please choose a different name." => "Il nome del file non può contenere il carattere \"/\". Scegli un nome diverso.", +"The name %s is already used in the folder %s. Please choose a different name." => "Il nome %s è attualmente in uso nella cartella %s. Scegli un nome diverso.", +"Not a valid source" => "Non è una sorgente valida", +"Server is not allowed to open URLs, please check the server configuration" => "Al server non è permesso aprire URL, controlla la configurazione del server", +"Error while downloading %s to %s" => "Errore durante lo scaricamento di %s su %s", +"Error when creating the file" => "Errore durante la creazione del file", +"Folder name cannot be empty." => "Il nome della cartella non può essere vuoto.", +"Folder name must not contain \"/\". Please choose a different name." => "Il nome della cartella non può contenere il carattere \"/\". Scegli un nome diverso.", +"Error when creating the folder" => "Errore durante la creazione della cartella", "Unable to set upload directory." => "Impossibile impostare una cartella di caricamento.", "Invalid Token" => "Token non valido", "No file was uploaded. Unknown error" => "Nessun file è stato inviato. Errore sconosciuto", @@ -22,34 +32,38 @@ $TRANSLATIONS = array( "Upload cancelled." => "Invio annullato", "Could not get result from server." => "Impossibile ottenere il risultato dal server.", "File upload is in progress. Leaving the page now will cancel the upload." => "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.", -"URL cannot be empty." => "L'URL non può essere vuoto.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nome della cartella non valido. L'uso di 'Shared' è riservato a ownCloud", -"Error" => "Errore", +"URL cannot be empty" => "L'URL non può essere vuoto.", +"In the home folder 'Shared' is a reserved filename" => "Nella cartella home 'Shared' è un nome riservato", +"{new_name} already exists" => "{new_name} esiste già", +"Could not create file" => "Impossibile creare il file", +"Could not create folder" => "Impossibile creare la cartella", +"Error fetching URL" => "Errore durante il recupero dello URL", "Share" => "Condividi", "Delete permanently" => "Elimina definitivamente", "Rename" => "Rinomina", "Pending" => "In corso", -"{new_name} already exists" => "{new_name} esiste già", -"replace" => "sostituisci", -"suggest name" => "suggerisci nome", -"cancel" => "annulla", +"Could not rename file" => "Impossibile rinominare il file", "replaced {new_name} with {old_name}" => "sostituito {new_name} con {old_name}", "undo" => "annulla", +"Error deleting file." => "Errore durante l'eliminazione del file.", "_%n folder_::_%n folders_" => array("%n cartella","%n cartelle"), "_%n file_::_%n files_" => array("%n file","%n file"), "{dirs} and {files}" => "{dirs} e {files}", "_Uploading %n file_::_Uploading %n files_" => array("Caricamento di %n file in corso","Caricamento di %n file in corso"), "'.' is an invalid file name." => "'.' non è un nome file valido.", -"File name cannot be empty." => "Il nome del file non può essere vuoto.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome non valido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non sono consentiti.", "Your storage is full, files can not be updated or synced anymore!" => "Lo spazio di archiviazione è pieno, i file non possono essere più aggiornati o sincronizzati!", "Your storage is almost full ({usedSpacePercent}%)" => "Lo spazio di archiviazione è quasi pieno ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "La cifratura è stata disabilitata ma i tuoi file sono ancora cifrati. Vai nelle impostazioni personali per decifrare i file.", "Your download is being prepared. This might take some time if the files are big." => "Il tuo scaricamento è in fase di preparazione. Ciò potrebbe richiedere del tempo se i file sono grandi.", "Error moving file" => "Errore durante lo spostamento del file", +"Error" => "Errore", "Name" => "Nome", "Size" => "Dimensione", "Modified" => "Modificato", +"Invalid folder name. Usage of 'Shared' is reserved." => "Nome della cartella non valido. L'uso di 'Shared' è riservato.", "%s could not be renamed" => "%s non può essere rinominato", "Upload" => "Carica", "File handling" => "Gestione file", @@ -61,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Dimensione massima per i file ZIP", "Save" => "Salva", "New" => "Nuovo", +"New text file" => "Nuovo file di testo", "Text file" => "File di testo", +"New folder" => "Nuova cartella", "Folder" => "Cartella", "From link" => "Da collegamento", "Deleted files" => "File eliminati", "Cancel upload" => "Annulla invio", -"You don’t have write permissions here." => "Qui non hai i permessi di scrittura.", +"You don’t have permission to upload or create files here" => "Qui non hai i permessi di caricare o creare file", "Nothing in here. Upload something!" => "Non c'è niente qui. Carica qualcosa!", "Download" => "Scarica", -"Unshare" => "Rimuovi condivisione", "Delete" => "Elimina", "Upload too large" => "Caricamento 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.", diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php index 07ee96f1eb6c1d36aff8205ee7773bee55a76064..8019b825d3c16b48ef4f986c7c06949a141c992c 100644 --- a/apps/files/l10n/ja_JP.php +++ b/apps/files/l10n/ja_JP.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "%s を移動できませんでした ― この名前のファイルはすでに存在します", "Could not move %s" => "%s を移動できませんでした", +"File name cannot be empty." => "ファイル名を空にすることはできません。", +"File name must not contain \"/\". Please choose a different name." => "ファイル名には \"/\" を含めることはできません。別の名前を選択してください。", +"The name %s is already used in the folder %s. Please choose a different name." => "%s はフォルダ %s ないですでに使われています。別の名前を選択してください。", +"Not a valid source" => "有効なソースではありません", +"Server is not allowed to open URLs, please check the server configuration" => "サーバーは、URLを開くことは許されません。サーバーの設定をチェックしてください。", +"Error while downloading %s to %s" => "%s から %s へのダウンロードエラー", +"Error when creating the file" => "ファイルの生成エラー", +"Folder name cannot be empty." => "フォルダ名は空にできません", +"Folder name must not contain \"/\". Please choose a different name." => "フォルダ名には \"/\" を含めることはできません。別の名前を選択してください。", +"Error when creating the folder" => "フォルダの生成エラー", "Unable to set upload directory." => "アップロードディレクトリを設定出来ません。", "Invalid Token" => "無効なトークン", "No file was uploaded. Unknown error" => "ファイルは何もアップロードされていません。不明なエラー", @@ -22,34 +32,38 @@ $TRANSLATIONS = array( "Upload cancelled." => "アップロードはキャンセルされました。", "Could not get result from server." => "サーバから結果を取得できませんでした。", "File upload is in progress. Leaving the page now will cancel the upload." => "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。", -"URL cannot be empty." => "URLは空にできません。", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "無効なフォルダ名です。'Shared' の利用はownCloudで予約済みです", -"Error" => "エラー", +"URL cannot be empty" => "URL は空にできません", +"In the home folder 'Shared' is a reserved filename" => "ホームフォルダでは、'Shared' はシステムが使用する予約済みのファイル名です", +"{new_name} already exists" => "{new_name} はすでに存在しています", +"Could not create file" => "ファイルを作成できませんでした", +"Could not create folder" => "フォルダを作成できませんでした", +"Error fetching URL" => "URL取得エラー", "Share" => "共有", "Delete permanently" => "完全に削除する", "Rename" => "名前の変更", "Pending" => "中断", -"{new_name} already exists" => "{new_name} はすでに存在しています", -"replace" => "置き換え", -"suggest name" => "推奨名称", -"cancel" => "キャンセル", +"Could not rename file" => "ファイルの名前変更ができませんでした", "replaced {new_name} with {old_name}" => "{old_name} を {new_name} に置換", "undo" => "元に戻す", -"_%n folder_::_%n folders_" => array("%n個のフォルダ"), -"_%n file_::_%n files_" => array("%n個のファイル"), +"Error deleting file." => "ファイルの削除エラー。", +"_%n folder_::_%n folders_" => array("%n 個のフォルダ"), +"_%n file_::_%n files_" => array("%n 個のファイル"), "{dirs} and {files}" => "{dirs} と {files}", "_Uploading %n file_::_Uploading %n files_" => array("%n 個のファイルをアップロード中"), "'.' is an invalid file name." => "'.' は無効なファイル名です。", -"File name cannot be empty." => "ファイル名を空にすることはできません。", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "無効な名前、'\\', '/', '<', '>', ':', '\"', '|', '?', '*' は使用できません。", "Your storage is full, files can not be updated or synced anymore!" => "あなたのストレージは一杯です。ファイルの更新と同期はもうできません!", "Your storage is almost full ({usedSpacePercent}%)" => "あなたのストレージはほぼ一杯です({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "暗号化アプリの無効なプライベートキーです。あなたの暗号化されたファイルへアクセスするために、個人設定からプライベートキーのパスワードを更新してください。", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "暗号化の機能は無効化されましたが、ファイルはすでに暗号化されています。個人設定からファイルを複合を行ってください。", "Your download is being prepared. This might take some time if the files are big." => "ダウンロードの準備中です。ファイルサイズが大きい場合は少し時間がかかるかもしれません。", "Error moving file" => "ファイルの移動エラー", +"Error" => "エラー", "Name" => "名前", "Size" => "サイズ", -"Modified" => "変更", +"Modified" => "更新日時", +"Invalid folder name. Usage of 'Shared' is reserved." => "無効なフォルダ名。「Shared」の利用は予約されています。", "%s could not be renamed" => "%sの名前を変更できませんでした", "Upload" => "アップロード", "File handling" => "ファイル操作", @@ -61,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "ZIPファイルへの最大入力サイズ", "Save" => "保存", "New" => "新規作成", +"New text file" => "新規のテキストファイル作成", "Text file" => "テキストファイル", +"New folder" => "新しいフォルダ", "Folder" => "フォルダ", "From link" => "リンク", -"Deleted files" => "削除ファイル", +"Deleted files" => "ゴミ箱", "Cancel upload" => "アップロードをキャンセル", -"You don’t have write permissions here." => "あなたには書き込み権限がありません。", +"You don’t have permission to upload or create files here" => "ここにファイルをアップロードもしくは作成する権限がありません", "Nothing in here. Upload something!" => "ここには何もありません。何かアップロードしてください。", "Download" => "ダウンロード", -"Unshare" => "共有解除", "Delete" => "削除", "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/ka_GE.php b/apps/files/l10n/ka_GE.php index b9313957714b6db6c99d5869ffb5ecc1dbd98e42..eafa0c083f72c7ac4c811eec24c0b4ea35da4a0b 100644 --- a/apps/files/l10n/ka_GE.php +++ b/apps/files/l10n/ka_GE.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "%s –ის გადატანა ვერ მოხერხდა – ფაილი ამ სახელით უკვე არსებობს", "Could not move %s" => "%s –ის გადატანა ვერ მოხერხდა", +"File name cannot be empty." => "ფაილის სახელი არ შეიძლება იყოს ცარიელი.", "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 ფაილში", @@ -16,27 +17,22 @@ $TRANSLATIONS = array( "Not enough space available" => "საკმარისი ადგილი არ არის", "Upload cancelled." => "ატვირთვა შეჩერებულ იქნა.", "File upload is in progress. Leaving the page now will cancel the upload." => "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას", -"URL cannot be empty." => "URL არ შეიძლება იყოს ცარიელი.", -"Error" => "შეცდომა", +"{new_name} already exists" => "{new_name} უკვე არსებობს", "Share" => "გაზიარება", "Delete permanently" => "სრულად წაშლა", "Rename" => "გადარქმევა", "Pending" => "მოცდის რეჟიმში", -"{new_name} already exists" => "{new_name} უკვე არსებობს", -"replace" => "შეცვლა", -"suggest name" => "სახელის შემოთავაზება", -"cancel" => "უარყოფა", "replaced {new_name} with {old_name}" => "{new_name} შეცვლილია {old_name}–ით", "undo" => "დაბრუნება", "_%n folder_::_%n folders_" => array(""), "_%n file_::_%n files_" => array(""), "_Uploading %n file_::_Uploading %n files_" => array(""), "'.' is an invalid file name." => "'.' არის დაუშვებელი ფაილის სახელი.", -"File name cannot be empty." => "ფაილის სახელი არ შეიძლება იყოს ცარიელი.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "არადაშვებადი სახელი, '\\', '/', '<', '>', ':', '\"', '|', '?' და '*' არ არის დაიშვებული.", "Your storage is full, files can not be updated or synced anymore!" => "თქვენი საცავი გადაივსო. ფაილების განახლება და სინქრონიზირება ვერ მოხერხდება!", "Your storage is almost full ({usedSpacePercent}%)" => "თქვენი საცავი თითქმის გადაივსო ({usedSpacePercent}%)", "Your download is being prepared. This might take some time if the files are big." => "გადმოწერის მოთხოვნა მუშავდება. ის მოითხოვს გარკვეულ დროს რაგდან ფაილები არის დიდი ზომის.", +"Error" => "შეცდომა", "Name" => "სახელი", "Size" => "ზომა", "Modified" => "შეცვლილია", @@ -51,14 +47,13 @@ $TRANSLATIONS = array( "Save" => "შენახვა", "New" => "ახალი", "Text file" => "ტექსტური ფაილი", +"New folder" => "ახალი ფოლდერი", "Folder" => "საქაღალდე", "From link" => "მისამართიდან", "Deleted files" => "წაშლილი ფაილები", "Cancel upload" => "ატვირთვის გაუქმება", -"You don’t have write permissions here." => "თქვენ არ გაქვთ ჩაწერის უფლება აქ.", "Nothing in here. Upload something!" => "აქ არაფერი არ არის. ატვირთე რამე!", "Download" => "ჩამოტვირთვა", -"Unshare" => "გაუზიარებადი", "Delete" => "წაშლა", "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/km.php b/apps/files/l10n/km.php index 70ab6572ba466c23b8066e18b9ee2f9cb2a7a827..9733358d6283faacde44f7ac20dda355e1238c26 100644 --- a/apps/files/l10n/km.php +++ b/apps/files/l10n/km.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "_%n folder_::_%n folders_" => array(""), "_%n file_::_%n files_" => array(""), -"_Uploading %n file_::_Uploading %n files_" => array("") +"_Uploading %n file_::_Uploading %n files_" => array(""), +"Delete" => "លុប" ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files/l10n/ko.php b/apps/files/l10n/ko.php index 0174f8d0d21a4b480587d5190bea6f202d713057..35a9f2fb85c2321344c7be1b7d435d7acf80af08 100644 --- a/apps/files/l10n/ko.php +++ b/apps/files/l10n/ko.php @@ -1,10 +1,20 @@ "%s 항목을 이동시키지 못하였음 - 파일 이름이 이미 존재함", -"Could not move %s" => "%s 항목을 이딩시키지 못하였음", -"Unable to set upload directory." => "업로드 디렉터리를 정할수 없습니다", +"Could not move %s - File with this name already exists" => "항목 %s을(를) 이동시킬 수 없음 - 같은 이름의 파일이 이미 존재함", +"Could not move %s" => "항목 %s을(를) 이동시킬 수 없음", +"File name cannot be empty." => "파일 이름이 비어 있을 수 없습니다.", +"File name must not contain \"/\". Please choose a different name." => "파일 이름에는 \"/\"가 들어갈 수 없습니다. 다른 이름을 사용하십시오.", +"The name %s is already used in the folder %s. Please choose a different name." => "이름 %s이(가) 폴더 %s에서 이미 사용 중입니다. 다른 이름을 사용하십시오.", +"Not a valid source" => "올바르지 않은 원본", +"Server is not allowed to open URLs, please check the server configuration" => "서버에서 URL을 열 수 없습니다. 서버 설정을 확인하십시오", +"Error while downloading %s to %s" => "%s을(를) %s(으)로 다운로드하는 중 오류 발생", +"Error when creating the file" => "파일 생성 중 오류 발생", +"Folder name cannot be empty." => "폴더 이름이 비어있을 수 없습니다.", +"Folder name must not contain \"/\". Please choose a different name." => "폴더 이름에는 \"/\"가 들어갈 수 없습니다. 다른 이름을 사용하십시오.", +"Error when creating the folder" => "폴더 생성 중 오류 발생", +"Unable to set upload directory." => "업로드 디렉터리를 설정할 수 없습니다.", "Invalid Token" => "잘못된 토큰", -"No file was uploaded. Unknown error" => "파일이 업로드되지 않았습니다. 알 수 없는 오류입니다", +"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보다 큽니다:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "업로드한 파일 크기가 HTML 폼의 MAX_FILE_SIZE보다 큼", @@ -13,44 +23,48 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "임시 폴더가 없음", "Failed to write to disk" => "디스크에 쓰지 못했습니다", "Not enough storage available" => "저장소가 용량이 충분하지 않습니다.", -"Upload failed. Could not get file info." => "업로드에 실패했습니다. 파일 정보를 가져올수 없습니다.", -"Upload failed. Could not find uploaded file" => "업로드에 실패했습니다. 업로드할 파일을 찾을수 없습니다", +"Upload failed. Could not get file info." => "업로드에 실패했습니다. 파일 정보를 가져올 수 없습니다.", +"Upload failed. Could not find uploaded file" => "업로드에 실패했습니다. 업로드할 파일을 찾을 수 없습니다", "Invalid directory." => "올바르지 않은 디렉터리입니다.", "Files" => "파일", -"Unable to upload {filename} as it is a directory or has 0 bytes" => "{filename}을 업로드 할수 없습니다. 폴더이거나 0 바이트 파일입니다.", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "{filename}을(를) 업로드할 수 없습니다. 폴더이거나 0 바이트 파일입니다.", "Not enough space available" => "여유 공간이 부족합니다", "Upload cancelled." => "업로드가 취소되었습니다.", -"Could not get result from server." => "서버에서 결과를 가져올수 없습니다.", +"Could not get result from server." => "서버에서 결과를 가져올 수 없습니다.", "File upload is in progress. Leaving the page now will cancel the upload." => "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다.", -"URL cannot be empty." => "URL을 입력해야 합니다.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "유효하지 않은 폴더명입니다. \"Shared\" 이름의 사용은 OwnCloud 가 이미 예약하고 있습니다.", -"Error" => "오류", +"URL cannot be empty" => "URL이 비어있을 수 없음", +"In the home folder 'Shared' is a reserved filename" => "'공유됨'은 홈 폴더의 예약된 파일 이름임", +"{new_name} already exists" => "{new_name}이(가) 이미 존재함", +"Could not create file" => "파일을 만들 수 없음", +"Could not create folder" => "폴더를 만들 수 없음", +"Error fetching URL" => "URL을 가져올 수 없음", "Share" => "공유", -"Delete permanently" => "영원히 삭제", +"Delete permanently" => "영구히 삭제", "Rename" => "이름 바꾸기", "Pending" => "대기 중", -"{new_name} already exists" => "{new_name}이(가) 이미 존재함", -"replace" => "바꾸기", -"suggest name" => "이름 제안", -"cancel" => "취소", +"Could not rename file" => "이름을 변경할 수 없음", "replaced {new_name} with {old_name}" => "{old_name}이(가) {new_name}(으)로 대체됨", -"undo" => "되돌리기", -"_%n folder_::_%n folders_" => array("폴더 %n"), -"_%n file_::_%n files_" => array("파일 %n 개"), +"undo" => "실행 취소", +"Error deleting file." => "파일 삭제 오류.", +"_%n folder_::_%n folders_" => array("폴더 %n개"), +"_%n file_::_%n files_" => array("파일 %n개"), "{dirs} and {files}" => "{dirs} 그리고 {files}", -"_Uploading %n file_::_Uploading %n files_" => array("%n 개의 파일을 업로드중"), -"'.' is an invalid file name." => "'.' 는 올바르지 않은 파일 이름 입니다.", -"File name cannot be empty." => "파일 이름이 비어 있을 수 없습니다.", +"_Uploading %n file_::_Uploading %n files_" => array("파일 %n개 업로드 중"), +"'.' is an invalid file name." => "'.' 는 올바르지 않은 파일 이름입니다.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "폴더 이름이 올바르지 않습니다. 이름에 문자 '\\', '/', '<', '>', ':', '\"', '|', '? ', '*'는 사용할 수 없습니다.", "Your storage is full, files can not be updated or synced anymore!" => "저장 공간이 가득 찼습니다. 파일을 업데이트하거나 동기화할 수 없습니다!", "Your storage is almost full ({usedSpacePercent}%)" => "저장 공간이 거의 가득 찼습니다 ({usedSpacePercent}%)", -"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "암호화는 해제되어 있지만, 파일은 아직 암호화 되어 있습니다. 개인 설저에 가셔서 암호를 해제하십시오", -"Your download is being prepared. This might take some time if the files are big." => "다운로드가 준비 중입니다. 파일 크기가 크다면 시간이 오래 걸릴 수도 있습니다.", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.", +"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "암호화는 해제되어 있지만, 파일은 아직 암호화되어 있습니다. 개인 설정에서 파일을 복호화하십시오.", +"Your download is being prepared. This might take some time if the files are big." => "다운로드 준비 중입니다. 파일 크기가 크면 시간이 오래 걸릴 수도 있습니다.", "Error moving file" => "파일 이동 오류", +"Error" => "오류", "Name" => "이름", "Size" => "크기", "Modified" => "수정됨", -"%s could not be renamed" => "%s 의 이름을 변경할수 없습니다", +"Invalid folder name. Usage of 'Shared' is reserved." => "폴더 이름이 잘못되었습니다. '공유됨'은 예약된 폴더 이름입니다.", +"%s could not be renamed" => "%s의 이름을 변경할 수 없습니다", "Upload" => "업로드", "File handling" => "파일 처리", "Maximum upload size" => "최대 업로드 크기", @@ -61,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "ZIP 파일 최대 크기", "Save" => "저장", "New" => "새로 만들기", +"New text file" => "새 텍스트 파일", "Text file" => "텍스트 파일", +"New folder" => "새 폴더", "Folder" => "폴더", "From link" => "링크에서", -"Deleted files" => "파일 삭제됨", +"Deleted files" => "삭제된 파일", "Cancel upload" => "업로드 취소", -"You don’t have write permissions here." => "당신은 여기에 쓰기를 할 수 있는 권한이 없습니다.", +"You don’t have permission to upload or create files here" => "여기에 파일을 업로드하거나 만들 권한이 없습니다", "Nothing in here. Upload something!" => "내용이 없습니다. 업로드할 수 있습니다!", "Download" => "다운로드", -"Unshare" => "공유 해제", "Delete" => "삭제", "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/ku_IQ.php b/apps/files/l10n/ku_IQ.php index d98848a71f099a262830da1784c277ddde68b566..f04e9ec44df407a8e9802d3363a02a1d856f37a7 100644 --- a/apps/files/l10n/ku_IQ.php +++ b/apps/files/l10n/ku_IQ.php @@ -1,11 +1,10 @@ "ناونیشانی به‌سته‌ر نابێت به‌تاڵ بێت.", -"Error" => "هه‌ڵه", "Share" => "هاوبەشی کردن", "_%n folder_::_%n folders_" => array("",""), "_%n file_::_%n files_" => array("",""), "_Uploading %n file_::_Uploading %n files_" => array("",""), +"Error" => "هه‌ڵه", "Name" => "ناو", "Upload" => "بارکردن", "Save" => "پاشکه‌وتکردن", diff --git a/apps/files/l10n/lb.php b/apps/files/l10n/lb.php index cd68b2b9ad2ec25562d4369f0eb3c992291867bc..822ca7e2d02318b377ab6a86495114fe5447a51a 100644 --- a/apps/files/l10n/lb.php +++ b/apps/files/l10n/lb.php @@ -9,14 +9,13 @@ $TRANSLATIONS = array( "Files" => "Dateien", "Upload cancelled." => "Upload ofgebrach.", "File upload is in progress. Leaving the page now will cancel the upload." => "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach.", -"Error" => "Fehler", "Share" => "Deelen", -"replace" => "ersetzen", -"cancel" => "ofbriechen", +"Rename" => "Ëm-benennen", "undo" => "réckgängeg man", "_%n folder_::_%n folders_" => array("",""), "_%n file_::_%n files_" => array("",""), "_Uploading %n file_::_Uploading %n files_" => array("",""), +"Error" => "Fehler", "Name" => "Numm", "Size" => "Gréisst", "Modified" => "Geännert", @@ -35,7 +34,6 @@ $TRANSLATIONS = array( "Cancel upload" => "Upload ofbriechen", "Nothing in here. Upload something!" => "Hei ass näischt. Lued eppes rop!", "Download" => "Download", -"Unshare" => "Net méi deelen", "Delete" => "Läschen", "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.", diff --git a/apps/files/l10n/lt_LT.php b/apps/files/l10n/lt_LT.php index d064b0c6523c23e9a8fcd96d3c902ad0e3369629..d9023658631addcefbbd498ac16a5f51e10fd9d9 100644 --- a/apps/files/l10n/lt_LT.php +++ b/apps/files/l10n/lt_LT.php @@ -2,6 +2,15 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Nepavyko perkelti %s - failas su tokiu pavadinimu jau egzistuoja", "Could not move %s" => "Nepavyko perkelti %s", +"File name cannot be empty." => "Failo pavadinimas negali būti tuščias.", +"File name must not contain \"/\". Please choose a different name." => "Failo pavadinime negali būti simbolio \"/\". Prašome pasirinkti kitokį pavadinimą.", +"The name %s is already used in the folder %s. Please choose a different name." => "Pavadinimas %s jau naudojamas aplanke %s. Prašome pasirinkti kitokį pavadinimą.", +"Not a valid source" => "Netinkamas šaltinis", +"Error while downloading %s to %s" => "Klaida siunčiant %s į %s", +"Error when creating the file" => "Klaida kuriant failą", +"Folder name cannot be empty." => "Aplanko pavadinimas negali būti tuščias.", +"Folder name must not contain \"/\". Please choose a different name." => "Aplanko pavadinime negali būti simbolio \"/\". Prašome pasirinkti kitokį pavadinimą.", +"Error when creating the folder" => "Klaida kuriant aplanką", "Unable to set upload directory." => "Nepavyksta nustatyti įkėlimų katalogo.", "Invalid Token" => "Netinkamas ženklas", "No file was uploaded. Unknown error" => "Failai nebuvo įkelti dėl nežinomos priežasties", @@ -22,31 +31,32 @@ $TRANSLATIONS = array( "Upload cancelled." => "Įkėlimas atšauktas.", "Could not get result from server." => "Nepavyko gauti rezultato iš serverio.", "File upload is in progress. Leaving the page now will cancel the upload." => "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.", -"URL cannot be empty." => "URL negali būti tuščias.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Negalimas aplanko pavadinimas. 'Shared' pavadinimas yra rezervuotas ownCloud", -"Error" => "Klaida", +"URL cannot be empty" => "URL negali būti tuščias.", +"{new_name} already exists" => "{new_name} jau egzistuoja", +"Could not create file" => "Neįmanoma sukurti failo", +"Could not create folder" => "Neįmanoma sukurti aplanko", "Share" => "Dalintis", "Delete permanently" => "Ištrinti negrįžtamai", "Rename" => "Pervadinti", "Pending" => "Laukiantis", -"{new_name} already exists" => "{new_name} jau egzistuoja", -"replace" => "pakeisti", -"suggest name" => "pasiūlyti pavadinimą", -"cancel" => "atšaukti", +"Could not rename file" => "Neįmanoma pervadinti failo", "replaced {new_name} with {old_name}" => "pakeiskite {new_name} į {old_name}", "undo" => "anuliuoti", +"Error deleting file." => "Klaida trinant failą.", "_%n folder_::_%n folders_" => array("%n aplankas","%n aplankai","%n aplankų"), "_%n file_::_%n files_" => array("%n failas","%n failai","%n failų"), "{dirs} and {files}" => "{dirs} ir {files}", "_Uploading %n file_::_Uploading %n files_" => array("Įkeliamas %n failas","Įkeliami %n failai","Įkeliama %n failų"), "'.' is an invalid file name." => "'.' yra neleidžiamas failo pavadinime.", -"File name cannot be empty." => "Failo pavadinimas negali būti tuščias.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Neleistinas pavadinimas, '\\', '/', '<', '>', ':', '\"', '|', '?' ir '*' yra neleidžiami.", "Your storage is full, files can not be updated or synced anymore!" => "Jūsų visa vieta serveryje užimta", "Your storage is almost full ({usedSpacePercent}%)" => "Jūsų vieta serveryje beveik visa užimta ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Netinkamas privatus raktas Šifravimo programai. Prašome atnaujinti savo privataus rakto slaptažodį asmeniniuose nustatymuose, kad atkurti prieigą prie šifruotų failų.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifravimas buvo išjungtas, bet Jūsų failai vis dar užšifruoti. Prašome eiti į asmeninius nustatymus ir iššifruoti savo failus.", "Your download is being prepared. This might take some time if the files are big." => "Jūsų atsisiuntimas yra paruošiamas. tai gali užtrukti jei atsisiunčiamas didelis failas.", "Error moving file" => "Klaida perkeliant failą", +"Error" => "Klaida", "Name" => "Pavadinimas", "Size" => "Dydis", "Modified" => "Pakeista", @@ -62,14 +72,14 @@ $TRANSLATIONS = array( "Save" => "Išsaugoti", "New" => "Naujas", "Text file" => "Teksto failas", +"New folder" => "Naujas aplankas", "Folder" => "Katalogas", "From link" => "Iš nuorodos", "Deleted files" => "Ištrinti failai", "Cancel upload" => "Atšaukti siuntimą", -"You don’t have write permissions here." => "Jūs neturite rašymo leidimo.", +"You don’t have permission to upload or create files here" => "Jūs neturite leidimo čia įkelti arba kurti failus", "Nothing in here. Upload something!" => "Čia tuščia. Įkelkite ką nors!", "Download" => "Atsisiųsti", -"Unshare" => "Nebesidalinti", "Delete" => "Ištrinti", "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ų, kuris leidžiamas šiame serveryje", diff --git a/apps/files/l10n/lv.php b/apps/files/l10n/lv.php index cefaea62818ead578eb1d12b363ecc4a69f1cfae..7f8975b2940c65e3301e71ae9af3d75fae0f8945 100644 --- a/apps/files/l10n/lv.php +++ b/apps/files/l10n/lv.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Nevarēja pārvietot %s — jau eksistē datne ar tādu nosaukumu", "Could not move %s" => "Nevarēja pārvietot %s", +"File name cannot be empty." => "Datnes nosaukums nevar būt tukšs.", "Unable to set upload directory." => "Nevar uzstādīt augšupielādes mapi.", "Invalid Token" => "Nepareiza pilnvara", "No file was uploaded. Unknown error" => "Netika augšupielādēta neviena datne. Nezināma kļūda", @@ -18,29 +19,23 @@ $TRANSLATIONS = array( "Not enough space available" => "Nepietiek brīvas vietas", "Upload cancelled." => "Augšupielāde ir atcelta.", "File upload is in progress. Leaving the page now will cancel the upload." => "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde.", -"URL cannot be empty." => "URL nevar būt tukšs.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Kļūdains mapes nosaukums. 'Shared' lietošana ir rezervēta no ownCloud", -"Error" => "Kļūda", +"{new_name} already exists" => "{new_name} jau eksistē", "Share" => "Dalīties", "Delete permanently" => "Dzēst pavisam", "Rename" => "Pārsaukt", "Pending" => "Gaida savu kārtu", -"{new_name} already exists" => "{new_name} jau eksistē", -"replace" => "aizvietot", -"suggest name" => "ieteiktais nosaukums", -"cancel" => "atcelt", "replaced {new_name} with {old_name}" => "aizvietoja {new_name} ar {old_name}", "undo" => "atsaukt", "_%n folder_::_%n folders_" => array("%n mapes","%n mape","%n mapes"), "_%n file_::_%n files_" => array("%n faili","%n fails","%n faili"), "_Uploading %n file_::_Uploading %n files_" => array("%n","Augšupielāde %n failu","Augšupielāde %n failus"), "'.' is an invalid file name." => "'.' ir nederīgs datnes nosaukums.", -"File name cannot be empty." => "Datnes nosaukums nevar būt tukšs.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nederīgs nosaukums, nav atļauti '\\', '/', '<', '>', ':', '\"', '|', '?' un '*'.", "Your storage is full, files can not be updated or synced anymore!" => "Jūsu krātuve ir pilna, datnes vairs nevar augšupielādēt vai sinhronizēt!", "Your storage is almost full ({usedSpacePercent}%)" => "Jūsu krātuve ir gandrīz pilna ({usedSpacePercent}%)", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifrēšana tika atslēgta, tomēr jūsu faili joprojām ir šifrēti. Atšifrēt failus var Personiskajos uzstādījumos.", "Your download is being prepared. This might take some time if the files are big." => "Tiek sagatavota lejupielāde. Tas var aizņemt kādu laiciņu, ja datnes ir lielas.", +"Error" => "Kļūda", "Name" => "Nosaukums", "Size" => "Izmērs", "Modified" => "Mainīts", @@ -56,14 +51,13 @@ $TRANSLATIONS = array( "Save" => "Saglabāt", "New" => "Jauna", "Text file" => "Teksta datne", +"New folder" => "Jauna mape", "Folder" => "Mape", "From link" => "No saites", "Deleted files" => "Dzēstās datnes", "Cancel upload" => "Atcelt augšupielādi", -"You don’t have write permissions here." => "Jums nav tiesību šeit rakstīt.", "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", "Delete" => "Dzēst", "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", diff --git a/apps/files/l10n/mk.php b/apps/files/l10n/mk.php index 2306db6921a93b3676ca693ac7fd60b9cca30cad..fadf5efc07be95b7e9bf3bc069f9ff1dbd883657 100644 --- a/apps/files/l10n/mk.php +++ b/apps/files/l10n/mk.php @@ -1,5 +1,16 @@ "Не можам да го преместам %s - Датотека со такво име веќе постои", +"Could not move %s" => "Не можам да ги префрлам %s", +"File name cannot be empty." => "Името на датотеката не може да биде празно.", +"Not a valid source" => "Не е валиден извор", +"Error while downloading %s to %s" => "Грешка додека преземам %s to %s", +"Error when creating the file" => "Грешка при креирање на датотека", +"Folder name cannot be empty." => "Името на папката не може да биде празно.", +"Folder name must not contain \"/\". Please choose a different name." => "Името на папката не смее да содржи \"/\". Одберете друго име.", +"Error when creating the folder" => "Грешка при креирање на папка", +"Unable to set upload directory." => "Не може да се постави папката за префрлање на податоци.", +"Invalid Token" => "Грешен токен", "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:", @@ -8,27 +19,41 @@ $TRANSLATIONS = array( "No file was uploaded" => "Не беше подигната датотека.", "Missing a temporary folder" => "Недостасува привремена папка", "Failed to write to disk" => "Неуспеав да запишам на диск", +"Not enough storage available" => "Нема доволно слободен сториџ", +"Upload failed. Could not find uploaded file" => "Префрлањето е неуспешно. Не можам да го најдам префрлената датотека.", +"Invalid directory." => "Погрешна папка.", "Files" => "Датотеки", +"Not enough space available" => "Немате доволно дисков простор", "Upload cancelled." => "Преземањето е прекинато.", +"Could not get result from server." => "Не можам да добијам резултат од серверот.", "File upload is in progress. Leaving the page now will cancel the upload." => "Подигање на датотека е во тек. Напуштење на страницата ќе го прекине.", -"URL cannot be empty." => "Адресата неможе да биде празна.", -"Error" => "Грешка", +"URL cannot be empty" => "URL-то не може да биде празно", +"In the home folder 'Shared' is a reserved filename" => "Во домашната папка, 'Shared' е резервирано има на датотека/папка", +"{new_name} already exists" => "{new_name} веќе постои", +"Could not create file" => "Не множам да креирам датотека", +"Could not create folder" => "Не можам да креирам папка", "Share" => "Сподели", +"Delete permanently" => "Трајно избришани", "Rename" => "Преименувај", "Pending" => "Чека", -"{new_name} already exists" => "{new_name} веќе постои", -"replace" => "замени", -"suggest name" => "предложи име", -"cancel" => "откажи", +"Could not rename file" => "Не можам да ја преименувам датотеката", "replaced {new_name} with {old_name}" => "заменета {new_name} со {old_name}", "undo" => "врати", "_%n folder_::_%n folders_" => array("",""), "_%n file_::_%n files_" => array("",""), +"{dirs} and {files}" => "{dirs} и {files}", "_Uploading %n file_::_Uploading %n files_" => array("",""), +"'.' is an invalid file name." => "'.' е грешно име за датотека.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Неправилно име. , '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не се дозволени.", +"Your storage is full, files can not be updated or synced anymore!" => "Вашиот сториџ е полн, датотеките веќе не можат да се освежуваат или синхронизираат!", +"Your storage is almost full ({usedSpacePercent}%)" => "Вашиот сториџ е скоро полн ({usedSpacePercent}%)", +"Your download is being prepared. This might take some time if the files are big." => "Вашето преземање се подготвува. Ова може да потрае до колку датотеките се големи.", +"Error moving file" => "Грешка при префрлање на датотека", +"Error" => "Грешка", "Name" => "Име", "Size" => "Големина", "Modified" => "Променето", +"%s could not be renamed" => "%s не може да биде преименуван", "Upload" => "Подигни", "File handling" => "Ракување со датотеки", "Maximum upload size" => "Максимална големина за подигање", @@ -42,14 +67,15 @@ $TRANSLATIONS = array( "Text file" => "Текстуална датотека", "Folder" => "Папка", "From link" => "Од врска", +"Deleted files" => "Избришани датотеки", "Cancel upload" => "Откажи прикачување", "Nothing in here. Upload something!" => "Тука нема ништо. Снимете нешто!", "Download" => "Преземи", -"Unshare" => "Не споделувај", "Delete" => "Избриши", "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..." => "Го надградувам кешот на фјал системот..." ); $PLURAL_FORMS = "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"; diff --git a/apps/files/l10n/ms_MY.php b/apps/files/l10n/ms_MY.php index 61bbf81cd8a4d3bd4b0c64cefa6050a57ada4193..0a7a50abb1a0d7b4d4eeb80d57cd03263c1abc9c 100644 --- a/apps/files/l10n/ms_MY.php +++ b/apps/files/l10n/ms_MY.php @@ -9,14 +9,13 @@ $TRANSLATIONS = array( "Failed to write to disk" => "Gagal untuk disimpan", "Files" => "Fail-fail", "Upload cancelled." => "Muatnaik dibatalkan.", -"Error" => "Ralat", "Share" => "Kongsi", +"Rename" => "Namakan", "Pending" => "Dalam proses", -"replace" => "ganti", -"cancel" => "Batal", "_%n folder_::_%n folders_" => array(""), "_%n file_::_%n files_" => array(""), "_Uploading %n file_::_Uploading %n files_" => array(""), +"Error" => "Ralat", "Name" => "Nama", "Size" => "Saiz", "Modified" => "Dimodifikasi", diff --git a/apps/files/l10n/nb_NO.php b/apps/files/l10n/nb_NO.php index 8fda251a2bc072c7e2ee45a8421f128a8bb301e8..ebd7ef38998439c8800cf2e7c0a090dd7b70f124 100644 --- a/apps/files/l10n/nb_NO.php +++ b/apps/files/l10n/nb_NO.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Kan ikke flytte %s - En fil med samme navn finnes allerede", "Could not move %s" => "Kunne ikke flytte %s", +"File name cannot be empty." => "Filnavn kan ikke være tomt.", "Unable to set upload directory." => "Kunne ikke sette opplastingskatalog.", "Invalid Token" => "Ugyldig nøkkel", "No file was uploaded. Unknown error" => "Ingen filer ble lastet opp. Ukjent feil.", @@ -18,28 +19,22 @@ $TRANSLATIONS = array( "Not enough space available" => "Ikke nok lagringsplass", "Upload cancelled." => "Opplasting avbrutt.", "File upload is in progress. Leaving the page now will cancel the upload." => "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.", -"URL cannot be empty." => "URL-en kan ikke være tom.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Ugyldig mappenavn. Bruk av \"Shared\" er reservert av ownCloud.", -"Error" => "Feil", +"{new_name} already exists" => "{new_name} finnes allerede", "Share" => "Del", "Delete permanently" => "Slett permanent", "Rename" => "Gi nytt navn", "Pending" => "Ventende", -"{new_name} already exists" => "{new_name} finnes allerede", -"replace" => "erstatt", -"suggest name" => "foreslå navn", -"cancel" => "avbryt", "replaced {new_name} with {old_name}" => "erstattet {new_name} med {old_name}", "undo" => "angre", "_%n folder_::_%n folders_" => array("%n mappe","%n mapper"), "_%n file_::_%n files_" => array("%n fil","%n filer"), "_Uploading %n file_::_Uploading %n files_" => array("Laster opp %n fil","Laster opp %n filer"), "'.' is an invalid file name." => "'.' er et ugyldig filnavn.", -"File name cannot be empty." => "Filnavn kan ikke være tomt.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ugyldig navn, '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' er ikke tillatt.", "Your storage is full, files can not be updated or synced anymore!" => "Lagringsplass er oppbrukt, filer kan ikke lenger oppdateres eller synkroniseres!", "Your storage is almost full ({usedSpacePercent}%)" => "Lagringsplass er nesten brukt opp ([usedSpacePercent}%)", "Your download is being prepared. This might take some time if the files are big." => "Nedlastingen din klargjøres. Hvis filene er store kan dette ta litt tid.", +"Error" => "Feil", "Name" => "Navn", "Size" => "Størrelse", "Modified" => "Endret", @@ -55,14 +50,13 @@ $TRANSLATIONS = array( "Save" => "Lagre", "New" => "Ny", "Text file" => "Tekstfil", +"New folder" => "Ny mappe", "Folder" => "Mappe", "From link" => "Fra link", "Deleted files" => "Slettet filer", "Cancel upload" => "Avbryt opplasting", -"You don’t have write permissions here." => "Du har ikke skrivetilgang her.", "Nothing in here. Upload something!" => "Ingenting her. Last opp noe!", "Download" => "Last ned", -"Unshare" => "Avslutt deling", "Delete" => "Slett", "Upload too large" => "Filen er 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.", diff --git a/apps/files/l10n/nds.php b/apps/files/l10n/nds.php new file mode 100644 index 0000000000000000000000000000000000000000..0157af093e92200cc7790497227e92e62d80165f --- /dev/null +++ b/apps/files/l10n/nds.php @@ -0,0 +1,7 @@ + array("",""), +"_%n file_::_%n files_" => array("",""), +"_Uploading %n file_::_Uploading %n files_" => array("","") +); +$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php index 65ad526523795934267b5ee1861ee36c2246cb51..a391e25b9528b31a95aa0b1f26a52516f6c402a2 100644 --- a/apps/files/l10n/nl.php +++ b/apps/files/l10n/nl.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Kon %s niet verplaatsen - Er bestaat al een bestand met deze naam", "Could not move %s" => "Kon %s niet verplaatsen", +"File name cannot be empty." => "Bestandsnaam kan niet leeg zijn.", +"File name must not contain \"/\". Please choose a different name." => "De bestandsnaam mag geen \"/\" bevatten. Kies een andere naam.", +"The name %s is already used in the folder %s. Please choose a different name." => "De naam %s bestaat al in map %s. Kies een andere naam.", +"Not a valid source" => "Geen geldige bron", +"Server is not allowed to open URLs, please check the server configuration" => "Server mag geen URS's openen, controleer de server configuratie", +"Error while downloading %s to %s" => "Fout bij downloaden %s naar %s", +"Error when creating the file" => "Fout bij creëren bestand", +"Folder name cannot be empty." => "Mapnaam mag niet leeg zijn.", +"Folder name must not contain \"/\". Please choose a different name." => "De mapnaam mag geen \"/\" bevatten. Kies een andere naam.", +"Error when creating the folder" => "Fout bij aanmaken map", "Unable to set upload directory." => "Kan upload map niet instellen.", "Invalid Token" => "Ongeldig Token", "No file was uploaded. Unknown error" => "Er was geen bestand geladen. Onbekende fout", @@ -13,38 +23,47 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "Er ontbreekt een tijdelijke map", "Failed to write to disk" => "Schrijven naar schijf mislukt", "Not enough storage available" => "Niet genoeg opslagruimte beschikbaar", +"Upload failed. Could not get file info." => "Upload mislukt, Kon geen bestandsinfo krijgen.", +"Upload failed. Could not find uploaded file" => "Upload mislukt. Kon ge-uploade bestand niet vinden", "Invalid directory." => "Ongeldige directory.", "Files" => "Bestanden", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "Kan {filename} niet uploaden omdat het een map is of 0 bytes groot is", "Not enough space available" => "Niet genoeg ruimte beschikbaar", "Upload cancelled." => "Uploaden geannuleerd.", +"Could not get result from server." => "Kon het resultaat van de server niet terugkrijgen.", "File upload is in progress. Leaving the page now will cancel the upload." => "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload.", -"URL cannot be empty." => "URL kan niet leeg zijn.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Ongeldige mapnaam. Gebruik van 'Gedeeld' is voorbehouden aan Owncloud zelf", -"Error" => "Fout", +"URL cannot be empty" => "URL mag niet leeg zijn", +"In the home folder 'Shared' is a reserved filename" => "in de home map 'Shared' is een gereserveerde bestandsnaam", +"{new_name} already exists" => "{new_name} bestaat al", +"Could not create file" => "Kon bestand niet creëren", +"Could not create folder" => "Kon niet creëren map", +"Error fetching URL" => "Fout bij ophalen URL", "Share" => "Delen", "Delete permanently" => "Verwijder definitief", "Rename" => "Hernoem", "Pending" => "In behandeling", -"{new_name} already exists" => "{new_name} bestaat al", -"replace" => "vervang", -"suggest name" => "Stel een naam voor", -"cancel" => "annuleren", +"Could not rename file" => "Kon niet hernoemen bestand", "replaced {new_name} with {old_name}" => "verving {new_name} met {old_name}", "undo" => "ongedaan maken", +"Error deleting file." => "Fout bij verwijderen bestand.", "_%n folder_::_%n folders_" => array("","%n mappen"), "_%n file_::_%n files_" => array("","%n bestanden"), "{dirs} and {files}" => "{dirs} en {files}", "_Uploading %n file_::_Uploading %n files_" => array("%n bestand aan het uploaden","%n bestanden aan het uploaden"), "'.' is an invalid file name." => "'.' is een ongeldige bestandsnaam.", -"File name cannot be empty." => "Bestandsnaam kan niet leeg zijn.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Onjuiste naam; '\\', '/', '<', '>', ':', '\"', '|', '?' en '*' zijn niet toegestaan.", "Your storage is full, files can not be updated or synced anymore!" => "Uw opslagruimte zit vol, Bestanden kunnen niet meer worden ge-upload of gesynchroniseerd!", "Your storage is almost full ({usedSpacePercent}%)" => "Uw opslagruimte zit bijna vol ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Crypto app is geactiveerd, maar uw sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ongeldige privésleutel voor crypto app. Werk het privésleutel wachtwoord bij in uw persoonlijke instellingen om opnieuw toegang te krijgen tot uw versleutelde bestanden.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Encryptie is uitgeschakeld maar uw bestanden zijn nog steeds versleuteld. Ga naar uw persoonlijke instellingen om uw bestanden te decoderen.", "Your download is being prepared. This might take some time if the files are big." => "Uw download wordt voorbereid. Dit kan enige tijd duren bij grote bestanden.", +"Error moving file" => "Fout bij verplaatsen bestand", +"Error" => "Fout", "Name" => "Naam", "Size" => "Grootte", "Modified" => "Aangepast", +"Invalid folder name. Usage of 'Shared' is reserved." => "Ongeldige mapnaam. Gebruik van 'Shared' is gereserveerd.", "%s could not be renamed" => "%s kon niet worden hernoemd", "Upload" => "Uploaden", "File handling" => "Bestand", @@ -56,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Maximale grootte voor ZIP bestanden", "Save" => "Bewaren", "New" => "Nieuw", +"New text file" => "Nieuw tekstbestand", "Text file" => "Tekstbestand", +"New folder" => "Nieuwe map", "Folder" => "Map", "From link" => "Vanaf link", "Deleted files" => "Verwijderde bestanden", "Cancel upload" => "Upload afbreken", -"You don’t have write permissions here." => "U hebt hier geen schrijfpermissies.", +"You don’t have permission to upload or create files here" => "U hebt geen toestemming om hier te uploaden of bestanden te maken", "Nothing in here. Upload something!" => "Er bevindt zich hier niets. Upload een bestand!", "Download" => "Downloaden", -"Unshare" => "Stop met delen", "Delete" => "Verwijder", "Upload too large" => "Upload is 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.", diff --git a/apps/files/l10n/nn_NO.php b/apps/files/l10n/nn_NO.php index e29b1d3ad36b13ba2cea74bfed1dc71039db89b3..a5e6e737eae33818a9b911ee72fa7439d39d1dd5 100644 --- a/apps/files/l10n/nn_NO.php +++ b/apps/files/l10n/nn_NO.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Klarte ikkje flytta %s – det finst allereie ei fil med dette namnet", "Could not move %s" => "Klarte ikkje flytta %s", +"File name cannot be empty." => "Filnamnet kan ikkje vera tomt.", "Unable to set upload directory." => "Klarte ikkje å endra opplastingsmappa.", "Invalid Token" => "Ugyldig token", "No file was uploaded. Unknown error" => "Ingen filer lasta opp. Ukjend feil", @@ -22,17 +23,11 @@ $TRANSLATIONS = array( "Upload cancelled." => "Opplasting avbroten.", "Could not get result from server." => "Klarte ikkje å henta resultat frå tenaren.", "File upload is in progress. Leaving the page now will cancel the upload." => "Fila lastar no opp. Viss du forlèt sida no vil opplastinga verta avbroten.", -"URL cannot be empty." => "Nettadressa kan ikkje vera tom.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Ugyldig mappenamn. Mappa «Shared» er reservert av ownCloud", -"Error" => "Feil", +"{new_name} already exists" => "{new_name} finst allereie", "Share" => "Del", "Delete permanently" => "Slett for godt", "Rename" => "Endra namn", "Pending" => "Under vegs", -"{new_name} already exists" => "{new_name} finst allereie", -"replace" => "byt ut", -"suggest name" => "føreslå namn", -"cancel" => "avbryt", "replaced {new_name} with {old_name}" => "bytte ut {new_name} med {old_name}", "undo" => "angre", "_%n folder_::_%n folders_" => array("%n mappe","%n mapper"), @@ -40,13 +35,13 @@ $TRANSLATIONS = array( "{dirs} and {files}" => "{dirs} og {files}", "_Uploading %n file_::_Uploading %n files_" => array("Lastar opp %n fil","Lastar opp %n filer"), "'.' is an invalid file name." => "«.» er eit ugyldig filnamn.", -"File name cannot be empty." => "Filnamnet kan ikkje vera tomt.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ugyldig namn, «\\», «/», «<», «>», «:», «\"», «|», «?» og «*» er ikkje tillate.", "Your storage is full, files can not be updated or synced anymore!" => "Lagringa di er full, kan ikkje lenger oppdatera eller synkronisera!", "Your storage is almost full ({usedSpacePercent}%)" => "Lagringa di er nesten full ({usedSpacePercent} %)", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Kryptering er skrudd av, men filene dine er enno krypterte. Du kan dekryptera filene i personlege innstillingar.", "Your download is being prepared. This might take some time if the files are big." => "Gjer klar nedlastinga di. Dette kan ta ei stund viss filene er store.", "Error moving file" => "Feil ved flytting av fil", +"Error" => "Feil", "Name" => "Namn", "Size" => "Storleik", "Modified" => "Endra", @@ -66,10 +61,8 @@ $TRANSLATIONS = array( "From link" => "Frå lenkje", "Deleted files" => "Sletta filer", "Cancel upload" => "Avbryt opplasting", -"You don’t have write permissions here." => "Du har ikkje skriverettar her.", "Nothing in here. Upload something!" => "Ingenting her. Last noko opp!", "Download" => "Last ned", -"Unshare" => "Udel", "Delete" => "Slett", "Upload too large" => "For stor opplasting", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filene du prøver å lasta opp er større enn maksgrensa til denne tenaren.", diff --git a/apps/files/l10n/oc.php b/apps/files/l10n/oc.php index a6d8f91458edafc5a7bff0a9d9884f0da2ba03db..eb1a9038b0839ad15ffeec68fb6bd22d2adb193a 100644 --- a/apps/files/l10n/oc.php +++ b/apps/files/l10n/oc.php @@ -9,17 +9,14 @@ $TRANSLATIONS = array( "Files" => "Fichièrs", "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. ", -"Error" => "Error", "Share" => "Parteja", "Rename" => "Torna nomenar", "Pending" => "Al esperar", -"replace" => "remplaça", -"suggest name" => "nom prepausat", -"cancel" => "anulla", "undo" => "defar", "_%n folder_::_%n folders_" => array("",""), "_%n file_::_%n files_" => array("",""), "_Uploading %n file_::_Uploading %n files_" => array("",""), +"Error" => "Error", "Name" => "Nom", "Size" => "Talha", "Modified" => "Modificat", @@ -38,7 +35,6 @@ $TRANSLATIONS = array( "Cancel upload" => " Anulla l'amontcargar", "Nothing in here. Upload something!" => "Pas res dedins. Amontcarga qualquaren", "Download" => "Avalcarga", -"Unshare" => "Pas partejador", "Delete" => "Escafa", "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.", diff --git a/apps/files/l10n/pa.php b/apps/files/l10n/pa.php index d8c50f2d1bc4765a7a49e11cd3260647d20845e6..63fcbe12ddaa1a89d79c12bfc1eea4ca64ce8c53 100644 --- a/apps/files/l10n/pa.php +++ b/apps/files/l10n/pa.php @@ -1,13 +1,13 @@ "ਫਾਇਲਾਂ", -"Error" => "ਗਲਤੀ", "Share" => "ਸਾਂਝਾ ਕਰੋ", "Rename" => "ਨਾਂ ਬਦਲੋ", "undo" => "ਵਾਪਸ", "_%n folder_::_%n folders_" => array("",""), "_%n file_::_%n files_" => array("",""), "_Uploading %n file_::_Uploading %n files_" => array("",""), +"Error" => "ਗਲਤੀ", "Upload" => "ਅੱਪਲੋਡ", "Cancel upload" => "ਅੱਪਲੋਡ ਰੱਦ ਕਰੋ", "Download" => "ਡਾਊਨਲੋਡ", diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php index 50a247d2e0f4acd85b1b58d7e8f7080cbe489b0e..031bd508700cae20da177d054369e87cd9d698c9 100644 --- a/apps/files/l10n/pl.php +++ b/apps/files/l10n/pl.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Nie można było przenieść %s - Plik o takiej nazwie już istnieje", "Could not move %s" => "Nie można było przenieść %s", +"File name cannot be empty." => "Nazwa pliku nie może być pusta.", +"File name must not contain \"/\". Please choose a different name." => "Nazwa pliku nie może zawierać \"/\". Proszę wybrać inną nazwę.", +"The name %s is already used in the folder %s. Please choose a different name." => "Nazwa %s jest już używana w folderze %s. Proszę wybrać inną nazwę.", +"Not a valid source" => "Niepoprawne źródło", +"Server is not allowed to open URLs, please check the server configuration" => "Serwer nie mógł otworzyć adresów URL, należy sprawdzić konfigurację serwera", +"Error while downloading %s to %s" => "Błąd podczas pobierania %s do %S", +"Error when creating the file" => "Błąd przy tworzeniu pliku", +"Folder name cannot be empty." => "Nazwa folderu nie może być pusta.", +"Folder name must not contain \"/\". Please choose a different name." => "Nazwa folderu nie może zawierać \"/\". Proszę wybrać inną nazwę.", +"Error when creating the folder" => "Błąd przy tworzeniu folderu", "Unable to set upload directory." => "Nie można ustawić katalog wczytywania.", "Invalid Token" => "Nieprawidłowy Token", "No file was uploaded. Unknown error" => "Żaden plik nie został załadowany. Nieznany błąd", @@ -22,34 +32,38 @@ $TRANSLATIONS = array( "Upload cancelled." => "Wczytywanie anulowane.", "Could not get result from server." => "Nie można uzyskać wyniku z serwera.", "File upload is in progress. Leaving the page now will cancel the upload." => "Wysyłanie pliku jest w toku. Jeśli opuścisz tę stronę, wysyłanie zostanie przerwane.", -"URL cannot be empty." => "URL nie może być pusty.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nieprawidłowa nazwa folderu. Wykorzystanie 'Shared' jest zarezerwowane przez ownCloud", -"Error" => "Błąd", +"URL cannot be empty" => "URL nie może być pusty", +"In the home folder 'Shared' is a reserved filename" => "W katalogu domowym \"Shared\" jest zarezerwowana nazwa pliku", +"{new_name} already exists" => "{new_name} już istnieje", +"Could not create file" => "Nie można utworzyć pliku", +"Could not create folder" => "Nie można utworzyć folderu", +"Error fetching URL" => "Błąd przy pobieraniu adresu URL", "Share" => "Udostępnij", "Delete permanently" => "Trwale usuń", "Rename" => "Zmień nazwę", "Pending" => "Oczekujące", -"{new_name} already exists" => "{new_name} już istnieje", -"replace" => "zastąp", -"suggest name" => "zasugeruj nazwę", -"cancel" => "anuluj", +"Could not rename file" => "Nie można zmienić nazwy pliku", "replaced {new_name} with {old_name}" => "zastąpiono {new_name} przez {old_name}", "undo" => "cofnij", +"Error deleting file." => "Błąd podczas usuwania pliku", "_%n folder_::_%n folders_" => array("%n katalog","%n katalogi","%n katalogów"), "_%n file_::_%n files_" => array("%n plik","%n pliki","%n plików"), -"{dirs} and {files}" => "{katalogi} and {pliki}", +"{dirs} and {files}" => "{dirs} and {files}", "_Uploading %n file_::_Uploading %n files_" => array("Wysyłanie %n pliku","Wysyłanie %n plików","Wysyłanie %n plików"), "'.' is an invalid file name." => "„.” jest nieprawidłową nazwą pliku.", -"File name cannot be empty." => "Nazwa pliku nie może być pusta.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nieprawidłowa nazwa. Znaki '\\', '/', '<', '>', ':', '\"', '|', '?' oraz '*' są niedozwolone.", "Your storage is full, files can not be updated or synced anymore!" => "Magazyn jest pełny. Pliki nie mogą zostać zaktualizowane lub zsynchronizowane!", "Your storage is almost full ({usedSpacePercent}%)" => "Twój magazyn jest prawie pełny ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Aplikacja szyfrująca jest aktywna, ale twoje klucze nie zostały zainicjowane, prosze wyloguj się i zaloguj ponownie.", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz. Można zaktualizować hasło klucza prywatnego w ustawieniach osobistych w celu odzyskania dostępu do plików", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Szyfrowanie zostało wyłączone, ale nadal pliki są zaszyfrowane. Przejdź do ustawień osobistych i tam odszyfruj pliki.", "Your download is being prepared. This might take some time if the files are big." => "Pobieranie jest przygotowywane. Może to zająć trochę czasu jeśli pliki są duże.", "Error moving file" => "Błąd prz przenoszeniu pliku", +"Error" => "Błąd", "Name" => "Nazwa", "Size" => "Rozmiar", "Modified" => "Modyfikacja", +"Invalid folder name. Usage of 'Shared' is reserved." => "Niepoprawna nazwa folderu. Wykorzystanie \"Shared\" jest zarezerwowane.", "%s could not be renamed" => "%s nie można zmienić nazwy", "Upload" => "Wyślij", "File handling" => "Zarządzanie plikami", @@ -61,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Maksymalna wielkość pliku wejściowego ZIP ", "Save" => "Zapisz", "New" => "Nowy", +"New text file" => "Nowy plik tekstowy", "Text file" => "Plik tekstowy", +"New folder" => "Nowy folder", "Folder" => "Folder", "From link" => "Z odnośnika", "Deleted files" => "Pliki usunięte", "Cancel upload" => "Anuluj wysyłanie", -"You don’t have write permissions here." => "Nie masz uprawnień do zapisu w tym miejscu.", +"You don’t have permission to upload or create files here" => "Nie masz uprawnień do wczytywania lub tworzenia plików w tym miejscu", "Nothing in here. Upload something!" => "Pusto. Wyślij coś!", "Download" => "Pobierz", -"Unshare" => "Zatrzymaj współdzielenie", "Delete" => "Usuń", "Upload too large" => "Ładowany plik jest za duży", "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ść.", diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php index cd96020856511a053c2a387c616dd785c1f8c6f0..f84dcfcd48864073a221f247d7d06cd55a9f53bc 100644 --- a/apps/files/l10n/pt_BR.php +++ b/apps/files/l10n/pt_BR.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Impossível mover %s - Um arquivo com este nome já existe", "Could not move %s" => "Impossível mover %s", +"File name cannot be empty." => "O nome do arquivo não pode estar vazio.", +"File name must not contain \"/\". Please choose a different name." => "O nome do arquivo não deve conter \"/\". Por favor, escolha um nome diferente.", +"The name %s is already used in the folder %s. Please choose a different name." => "O nome %s já é usado na pasta %s. Por favor, escolha um nome diferente.", +"Not a valid source" => "Não é uma fonte válida", +"Server is not allowed to open URLs, please check the server configuration" => "Não é permitido ao servidor abrir URLs, por favor verificar a configuração do servidor.", +"Error while downloading %s to %s" => "Erro ao baixar %s para %s", +"Error when creating the file" => "Erro ao criar o arquivo", +"Folder name cannot be empty." => "O nome da pasta não pode estar vazio.", +"Folder name must not contain \"/\". Please choose a different name." => "O nome da pasta não pode conter \"/\". Por favor, escolha um nome diferente.", +"Error when creating the folder" => "Erro ao criar a pasta", "Unable to set upload directory." => "Impossível configurar o diretório de upload", "Invalid Token" => "Token inválido", "No file was uploaded. Unknown error" => "Nenhum arquivo foi enviado. Erro desconhecido", @@ -22,34 +32,38 @@ $TRANSLATIONS = array( "Upload cancelled." => "Envio cancelado.", "Could not get result from server." => "Não foi possível obter o resultado do servidor.", "File upload is in progress. Leaving the page now will cancel the upload." => "Upload em andamento. Sair da página agora resultará no cancelamento do envio.", -"URL cannot be empty." => "URL não pode ficar em branco", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nome de pasta inválido. O uso do nome 'Compartilhado' é reservado ao ownCloud", -"Error" => "Erro", +"URL cannot be empty" => "URL não pode estar vazia", +"In the home folder 'Shared' is a reserved filename" => "Na pasta home 'Shared- Compartilhada' é um nome reservado", +"{new_name} already exists" => "{new_name} já existe", +"Could not create file" => "Não foi possível criar o arquivo", +"Could not create folder" => "Não foi possível criar a pasta", +"Error fetching URL" => "Erro ao buscar URL", "Share" => "Compartilhar", "Delete permanently" => "Excluir permanentemente", "Rename" => "Renomear", "Pending" => "Pendente", -"{new_name} already exists" => "{new_name} já existe", -"replace" => "substituir", -"suggest name" => "sugerir nome", -"cancel" => "cancelar", +"Could not rename file" => "Não foi possível renomear o arquivo", "replaced {new_name} with {old_name}" => "Substituído {old_name} por {new_name} ", "undo" => "desfazer", +"Error deleting file." => "Erro eliminando o arquivo.", "_%n folder_::_%n folders_" => array("%n pasta","%n pastas"), "_%n file_::_%n files_" => array("%n arquivo","%n arquivos"), "{dirs} and {files}" => "{dirs} e {files}", "_Uploading %n file_::_Uploading %n files_" => array("Enviando %n arquivo","Enviando %n arquivos"), "'.' 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 podem mais ser atualizados ou sincronizados!", "Your storage is almost full ({usedSpacePercent}%)" => "Seu armazenamento está quase cheio ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "App de encriptação está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chave do App de Encriptação é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Encriptação foi desabilitada mas seus arquivos continuam encriptados. Por favor vá a suas configurações pessoais para descriptar seus arquivos.", "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.", "Error moving file" => "Erro movendo o arquivo", +"Error" => "Erro", "Name" => "Nome", "Size" => "Tamanho", "Modified" => "Modificado", +"Invalid folder name. Usage of 'Shared' is reserved." => "Nome da pasta inválido. Uso de 'Shared' é reservado.", "%s could not be renamed" => "%s não pode ser renomeado", "Upload" => "Upload", "File handling" => "Tratamento de Arquivo", @@ -61,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Tamanho máximo para arquivo ZIP", "Save" => "Guardar", "New" => "Novo", +"New text file" => "Novo arquivo texto", "Text file" => "Arquivo texto", +"New folder" => "Nova pasta", "Folder" => "Pasta", "From link" => "Do link", "Deleted files" => "Arquivos apagados", "Cancel upload" => "Cancelar upload", -"You don’t have write permissions here." => "Você não possui permissão de escrita aqui.", +"You don’t have permission to upload or create files here" => "Você não tem permissão para carregar ou criar arquivos aqui", "Nothing in here. Upload something!" => "Nada aqui.Carrege alguma coisa!", "Download" => "Baixar", -"Unshare" => "Descompartilhar", "Delete" => "Excluir", "Upload too large" => "Upload 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.", diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php index f6d61fc9873e6d1d497587147f1f21643c11bd0e..4b9fade2e22ebc2bee0604ee588f4272d28d2f8a 100644 --- a/apps/files/l10n/pt_PT.php +++ b/apps/files/l10n/pt_PT.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "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", +"File name cannot be empty." => "O nome do ficheiro não pode estar vazio.", "Unable to set upload directory." => "Não foi possível criar o diretório de upload", "Invalid Token" => "Token inválido", "No file was uploaded. Unknown error" => "Nenhum ficheiro foi carregado. Erro desconhecido", @@ -13,22 +14,18 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "Está a faltar a 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", +"Upload failed. Could not get file info." => "O carregamento falhou. Não foi possível obter a informação do ficheiro.", "Invalid directory." => "Directório Inválido", "Files" => "Ficheiros", "Not enough space available" => "Espaço em disco insuficiente!", "Upload cancelled." => "Envio cancelado.", +"Could not get result from server." => "Não foi possível obter o resultado do servidor.", "File upload is in progress. Leaving the page now will cancel the upload." => "Envio de ficheiro em progresso. Irá cancelar o envio se sair da página agora.", -"URL cannot be empty." => "O URL não pode estar vazio.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nome da pasta inválido. Palavra 'Shared' é reservado pela ownCloud", -"Error" => "Erro", +"{new_name} already exists" => "O nome {new_name} já existe", "Share" => "Partilhar", "Delete permanently" => "Eliminar permanentemente", "Rename" => "Renomear", "Pending" => "Pendente", -"{new_name} already exists" => "O nome {new_name} já existe", -"replace" => "substituir", -"suggest name" => "sugira um nome", -"cancel" => "cancelar", "replaced {new_name} with {old_name}" => "substituido {new_name} por {old_name}", "undo" => "desfazer", "_%n folder_::_%n folders_" => array("%n pasta","%n pastas"), @@ -36,12 +33,13 @@ $TRANSLATIONS = array( "{dirs} and {files}" => "{dirs} e {files}", "_Uploading %n file_::_Uploading %n files_" => array("A carregar %n ficheiro","A carregar %n ficheiros"), "'.' is an invalid file name." => "'.' não é um nome de ficheiro válido!", -"File name cannot be empty." => "O nome do ficheiro não pode estar vazio.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome Inválido, os caracteres '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos.", "Your storage is full, files can not be updated or synced anymore!" => "O seu armazenamento está cheio, os ficheiros não podem ser sincronizados.", "Your storage is almost full ({usedSpacePercent}%)" => "O seu espaço de armazenamento está quase cheiro ({usedSpacePercent}%)", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "A encriptação foi desactivada mas os seus ficheiros continuam encriptados. Por favor consulte as suas definições pessoais para desencriptar os ficheiros.", "Your download is being prepared. This might take some time if the files are big." => "O seu download está a ser preparado. Este processo pode demorar algum tempo se os ficheiros forem grandes.", +"Error moving file" => "Erro ao mover o ficheiro", +"Error" => "Erro", "Name" => "Nome", "Size" => "Tamanho", "Modified" => "Modificado", @@ -57,14 +55,13 @@ $TRANSLATIONS = array( "Save" => "Guardar", "New" => "Novo", "Text file" => "Ficheiro de texto", +"New folder" => "Nova Pasta", "Folder" => "Pasta", "From link" => "Da ligação", "Deleted files" => "Ficheiros eliminados", "Cancel upload" => "Cancelar envio", -"You don’t have write permissions here." => "Não tem permissões de escrita aqui.", "Nothing in here. Upload something!" => "Vazio. Envie alguma coisa!", "Download" => "Transferir", -"Unshare" => "Deixar de partilhar", "Delete" => "Eliminar", "Upload too large" => "Upload muito grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiro que está a tentar enviar excedem o tamanho máximo de envio neste servidor.", diff --git a/apps/files/l10n/ro.php b/apps/files/l10n/ro.php index b1b9af45d38e2ae62f849c23009c4c6cc94e02f6..933625d8d1e3bc3de7d09a5c40c6569ae3cf5d4b 100644 --- a/apps/files/l10n/ro.php +++ b/apps/files/l10n/ro.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "%s nu se poate muta - Fișierul cu acest nume există deja ", "Could not move %s" => "Nu s-a putut muta %s", +"File name cannot be empty." => "Numele fișierului nu poate rămâne gol.", "Unable to set upload directory." => "Imposibil de a seta directorul pentru incărcare.", "Invalid Token" => "Jeton Invalid", "No file was uploaded. Unknown error" => "Nici un fișier nu a fost încărcat. Eroare necunoscută", @@ -22,17 +23,11 @@ $TRANSLATIONS = array( "Upload cancelled." => "Încărcare anulată.", "Could not get result from server." => "Nu se poate obține rezultatul de la server.", "File upload is in progress. Leaving the page now will cancel the upload." => "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea.", -"URL cannot be empty." => "Adresa URL nu poate fi golita", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nume de dosar invalid. Utilizarea 'Shared' e rezervată de ownCloud", -"Error" => "Eroare", +"{new_name} already exists" => "{new_name} deja exista", "Share" => "a imparti", "Delete permanently" => "Stergere permanenta", "Rename" => "Redenumire", "Pending" => "in timpul", -"{new_name} already exists" => "{new_name} deja exista", -"replace" => "înlocuire", -"suggest name" => "sugerează nume", -"cancel" => "anulare", "replaced {new_name} with {old_name}" => "{new_name} inlocuit cu {old_name}", "undo" => "Anulează ultima acțiune", "_%n folder_::_%n folders_" => array("%n director","%n directoare","%n directoare"), @@ -40,13 +35,13 @@ $TRANSLATIONS = array( "{dirs} and {files}" => "{dirs} și {files}", "_Uploading %n file_::_Uploading %n files_" => array("Se încarcă %n fișier.","Se încarcă %n fișiere.","Se încarcă %n fișiere."), "'.' is an invalid file name." => "'.' este un nume invalid de fișier.", -"File name cannot be empty." => "Numele fișierului nu poate rămâne gol.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nume invalide, '\\', '/', '<', '>', ':', '\"', '|', '?' si '*' nu sunt permise.", "Your storage is full, files can not be updated or synced anymore!" => "Spatiul de stocare este plin, fisierele nu mai pot fi actualizate sau sincronizate", "Your storage is almost full ({usedSpacePercent}%)" => "Spatiul de stocare este aproape plin {spatiu folosit}%", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "criptarea a fost disactivata dar fisierele sant inca criptate.va rog intrati in setarile personale pentru a decripta fisierele", "Your download is being prepared. This might take some time if the files are big." => "in curs de descarcare. Aceasta poate să dureze ceva timp dacă fișierele sunt mari.", "Error moving file" => "Eroare la mutarea fișierului", +"Error" => "Eroare", "Name" => "Nume", "Size" => "Dimensiune", "Modified" => "Modificat", @@ -66,10 +61,8 @@ $TRANSLATIONS = array( "From link" => "de la adresa", "Deleted files" => "Sterge fisierele", "Cancel upload" => "Anulează încărcarea", -"You don’t have write permissions here." => "Nu ai permisiunea de a scrie aici.", "Nothing in here. Upload something!" => "Nimic aici. Încarcă ceva!", "Download" => "Descarcă", -"Unshare" => "Anulare", "Delete" => "Șterge", "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.", diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php index 143a3379ad4e4e2c3fc4b07d8dd7c1b19f58c9c3..968da63aacaf89b46d9d861465cd9a9f83049722 100644 --- a/apps/files/l10n/ru.php +++ b/apps/files/l10n/ru.php @@ -2,6 +2,16 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Невозможно переместить %s - файл с таким именем уже существует", "Could not move %s" => "Невозможно переместить %s", +"File name cannot be empty." => "Имя файла не может быть пустым.", +"File name must not contain \"/\". Please choose a different name." => "Имя файла не должно содержать символ \"/\". Пожалуйста, выберите другое имя.", +"The name %s is already used in the folder %s. Please choose a different name." => "Имя %s уже используется в папке %s. Пожалуйста выберите другое имя.", +"Not a valid source" => "Неправильный источник", +"Server is not allowed to open URLs, please check the server configuration" => "Сервер не позволяет открывать URL-адреса, пожалуйста, проверьте настройки сервера", +"Error while downloading %s to %s" => "Ошибка при загрузке %s в %s", +"Error when creating the file" => "Ошибка при создании файла", +"Folder name cannot be empty." => "Имя папки не может быть пустым.", +"Folder name must not contain \"/\". Please choose a different name." => "Имя папки не должно содержать символ \"/\". Пожалуйста, выберите другое имя.", +"Error when creating the folder" => "Ошибка при создании папки", "Unable to set upload directory." => "Не удалось установить каталог загрузки.", "Invalid Token" => "Недопустимый маркер", "No file was uploaded. Unknown error" => "Файл не был загружен. Неизвестная ошибка", @@ -22,34 +32,38 @@ $TRANSLATIONS = array( "Upload cancelled." => "Загрузка отменена.", "Could not get result from server." => "Не получен ответ от сервера", "File upload is in progress. Leaving the page now will cancel the upload." => "Файл в процессе загрузки. Покинув страницу вы прервёте загрузку.", -"URL cannot be empty." => "Ссылка не может быть пустой.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Неправильное имя каталога. Имя 'Shared' зарезервировано.", -"Error" => "Ошибка", +"URL cannot be empty" => "Ссылка не может быть пустой.", +"In the home folder 'Shared' is a reserved filename" => "В домашней папке 'Shared' зарезервированное имя файла", +"{new_name} already exists" => "{new_name} уже существует", +"Could not create file" => "Не удалось создать файл", +"Could not create folder" => "Не удалось создать папку", +"Error fetching URL" => "Ошибка получения URL", "Share" => "Открыть доступ", "Delete permanently" => "Удалено навсегда", "Rename" => "Переименовать", "Pending" => "Ожидание", -"{new_name} already exists" => "{new_name} уже существует", -"replace" => "заменить", -"suggest name" => "предложить название", -"cancel" => "отмена", +"Could not rename file" => "Не удалось переименовать файл", "replaced {new_name} with {old_name}" => "заменено {new_name} на {old_name}", "undo" => "отмена", +"Error deleting file." => "Ошибка при удалении файла.", "_%n folder_::_%n folders_" => array("%n папка","%n папки","%n папок"), "_%n file_::_%n files_" => array("%n файл","%n файла","%n файлов"), "{dirs} and {files}" => "{dirs} и {files}", "_Uploading %n file_::_Uploading %n files_" => array("Закачка %n файла","Закачка %n файлов","Закачка %n файлов"), "'.' is an invalid file name." => "'.' - неправильное имя файла.", -"File name cannot be empty." => "Имя файла не может быть пустым.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Неправильное имя, '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопустимы.", "Your storage is full, files can not be updated or synced anymore!" => "Ваше дисковое пространство полностью заполнено, произведите очистку перед загрузкой новых файлов.", "Your storage is almost full ({usedSpacePercent}%)" => "Ваше хранилище почти заполнено ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Приложение для шифрования активно, но ваши ключи не инициализированы, пожалуйста, перелогиньтесь", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Неверный приватный ключ для приложения шифрования. Пожалуйста, обноваите ваш приватный ключ в персональных настройках чтобы восстановить доступ к вашим зашифрованным файлам.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Шифрование было отключено, но ваши файлы все еще зашифрованы. Пожалуйста, зайдите на страницу персональных настроек для того, чтобы расшифровать ваши файлы.", "Your download is being prepared. This might take some time if the files are big." => "Загрузка началась. Это может потребовать много времени, если файл большого размера.", "Error moving file" => "Ошибка при перемещении файла", +"Error" => "Ошибка", "Name" => "Имя", "Size" => "Размер", "Modified" => "Изменён", +"Invalid folder name. Usage of 'Shared' is reserved." => "Неправильное имя каталога. Имя 'Shared' зарезервировано.", "%s could not be renamed" => "%s не может быть переименован", "Upload" => "Загрузка", "File handling" => "Управление файлами", @@ -61,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Максимальный исходный размер для ZIP файлов", "Save" => "Сохранить", "New" => "Новый", +"New text file" => "Новый текстовый файл", "Text file" => "Текстовый файл", +"New folder" => "Новая папка", "Folder" => "Папка", "From link" => "Из ссылки", "Deleted files" => "Удалённые файлы", "Cancel upload" => "Отмена загрузки", -"You don’t have write permissions here." => "У вас нет разрешений на запись здесь.", +"You don’t have permission to upload or create files here" => "У вас недостаточно прав для загрузки или создания файлов отсюда.", "Nothing in here. Upload something!" => "Здесь ничего нет. Загрузите что-нибудь!", "Download" => "Скачать", -"Unshare" => "Закрыть общий доступ", "Delete" => "Удалить", "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/si_LK.php b/apps/files/l10n/si_LK.php index 7d24370a092f06e8f1c22f18e007028c4a5de089..44decfef1b023155bd2a50477553ede12a18692a 100644 --- a/apps/files/l10n/si_LK.php +++ b/apps/files/l10n/si_LK.php @@ -10,17 +10,13 @@ $TRANSLATIONS = array( "Files" => "ගොනු", "Upload cancelled." => "උඩුගත කිරීම අත් හරින්න ලදී", "File upload is in progress. Leaving the page now will cancel the upload." => "උඩුගතකිරීමක් සිදුවේ. පිටුව හැර යාමෙන් එය නැවතෙනු ඇත", -"URL cannot be empty." => "යොමුව හිස් විය නොහැක", -"Error" => "දෝෂයක්", "Share" => "බෙදා හදා ගන්න", "Rename" => "නැවත නම් කරන්න", -"replace" => "ප්‍රතිස්ථාපනය කරන්න", -"suggest name" => "නමක් යෝජනා කරන්න", -"cancel" => "අත් හරින්න", "undo" => "නිෂ්ප්‍රභ කරන්න", "_%n folder_::_%n folders_" => array("",""), "_%n file_::_%n files_" => array("",""), "_Uploading %n file_::_Uploading %n files_" => array("",""), +"Error" => "දෝෂයක්", "Name" => "නම", "Size" => "ප්‍රමාණය", "Modified" => "වෙනස් කළ", @@ -40,7 +36,6 @@ $TRANSLATIONS = array( "Cancel upload" => "උඩුගත කිරීම අත් හරින්න", "Nothing in here. Upload something!" => "මෙහි කිසිවක් නොමැත. යමක් උඩුගත කරන්න", "Download" => "බාන්න", -"Unshare" => "නොබෙදු", "Delete" => "මකා දමන්න", "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/sk.php b/apps/files/l10n/sk.php index a3178a95c47c1b1f0afb722e2cda03d5ee75bd17..53daf549eaa41e18c243da307532bd53c10df16d 100644 --- a/apps/files/l10n/sk.php +++ b/apps/files/l10n/sk.php @@ -1,7 +1,11 @@ "Zdieľať", "_%n folder_::_%n folders_" => array("","",""), "_%n file_::_%n files_" => array("","",""), -"_Uploading %n file_::_Uploading %n files_" => array("","","") +"_Uploading %n file_::_Uploading %n files_" => array("","",""), +"Save" => "Uložiť", +"Download" => "Stiahnuť", +"Delete" => "Odstrániť" ); $PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"; diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php index 962ce7d7e9b08e872254153ecdd890def27ffa9c..2d0eb25f62239c5487ec474dc5acadc18476e832 100644 --- a/apps/files/l10n/sk_SK.php +++ b/apps/files/l10n/sk_SK.php @@ -2,48 +2,66 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Nie je možné presunúť %s - súbor s týmto menom už existuje", "Could not move %s" => "Nie je možné presunúť %s", +"File name cannot be empty." => "Meno súboru nemôže byť prázdne", +"File name must not contain \"/\". Please choose a different name." => "Názov súboru nesmie obsahovať \"/\". Prosím zvoľte iný názov.", +"The name %s is already used in the folder %s. Please choose a different name." => "Názov %s už používa priečinok s%. Prosím zvoľte iný názov.", +"Not a valid source" => "Neplatný zdroj", +"Error while downloading %s to %s" => "Chyba pri sťahovaní súboru %s do %s", +"Error when creating the file" => "Chyba pri vytváraní súboru", +"Folder name cannot be empty." => "Názov priečinka nemôže byť prázdny.", +"Folder name must not contain \"/\". Please choose a different name." => "Názov priečinka nesmie obsahovať \"/\". Prosím zvoľte iný názov.", +"Error when creating the folder" => "Chyba pri vytváraní priečinka", "Unable to set upload directory." => "Nemožno nastaviť priečinok pre nahrané súbory.", "Invalid Token" => "Neplatný token", -"No file was uploaded. Unknown error" => "Žiaden súbor nebol odoslaný. Neznáma chyba", +"No file was uploaded. Unknown error" => "Žiaden súbor nebol nahraný. 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:", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Nahraný súbor prekročil limit nastavený v upload_max_filesize v súbore php.ini:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Ukladaný súbor prekračuje nastavenie MAX_FILE_SIZE z volieb HTML formulára.", "The uploaded file was only partially uploaded" => "Ukladaný súbor sa nahral len čiastočne", "No file was uploaded" => "Žiadny súbor nebol uložený", "Missing a temporary folder" => "Chýba 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", +"Upload failed. Could not get file info." => "Nahrávanie zlyhalo. Nepodarilo sa získať informácie o súbore.", +"Upload failed. Could not find uploaded file" => "Nahrávanie zlyhalo. Nepodarilo sa nájsť nahrávaný súbor", "Invalid directory." => "Neplatný priečinok.", "Files" => "Súbory", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "Nemožno nahrať súbor {filename}, pretože je to priečinok, alebo má 0 bitov", "Not enough space available" => "Nie je k dispozícii dostatok miesta", "Upload cancelled." => "Odosielanie zrušené.", +"Could not get result from server." => "Nepodarilo sa dostať výsledky zo servera.", "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ý názov priečinka. Názov \"Shared\" je rezervovaný pre ownCloud", -"Error" => "Chyba", +"URL cannot be empty" => "URL nemôže byť prázdna", +"In the home folder 'Shared' is a reserved filename" => "V domovskom priečinku je názov \"Shared\" vyhradený názov súboru", +"{new_name} already exists" => "{new_name} už existuje", +"Could not create file" => "Nemožno vytvoriť súbor", +"Could not create folder" => "Nemožno vytvoriť priečinok", "Share" => "Zdieľať", "Delete permanently" => "Zmazať trvalo", "Rename" => "Premenovať", "Pending" => "Prebieha", -"{new_name} already exists" => "{new_name} už existuje", -"replace" => "nahradiť", -"suggest name" => "pomôcť s menom", -"cancel" => "zrušiť", +"Could not rename file" => "Nemožno premenovať súbor", "replaced {new_name} with {old_name}" => "prepísaný {new_name} súborom {old_name}", "undo" => "vrátiť", +"Error deleting file." => "Chyba pri mazaní súboru.", "_%n folder_::_%n folders_" => array("%n priečinok","%n priečinky","%n priečinkov"), "_%n file_::_%n files_" => array("%n súbor","%n súbory","%n súborov"), +"{dirs} and {files}" => "{dirs} a {files}", "_Uploading %n file_::_Uploading %n files_" => array("Nahrávam %n súbor","Nahrávam %n súbory","Nahrávam %n súborov"), "'.' is an invalid file name." => "'.' je neplatné meno súboru.", -"File name cannot be empty." => "Meno súboru nemôže byť prázdne", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nesprávne meno, '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nie sú povolené hodnoty.", "Your storage is full, files can not be updated or synced anymore!" => "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!", "Your storage is almost full ({usedSpacePercent}%)" => "Vaše úložisko je takmer plné ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chybný súkromný kľúč na šifrovanie aplikácií. Zaktualizujte si heslo súkromného kľúča v svojom osobnom nastavení, aby ste znovu získali prístup k svojim zašifrovaným súborom.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifrovanie bolo zakázané, ale vaše súbory sú stále zašifrované. Prosím, choďte do osobného nastavenia pre dešifrovanie súborov.", "Your download is being prepared. This might take some time if the files are big." => "Vaše sťahovanie sa pripravuje. Ak sú sťahované súbory veľké, môže to chvíľu trvať.", +"Error moving file" => "Chyba pri presúvaní súboru", +"Error" => "Chyba", "Name" => "Názov", "Size" => "Veľkosť", "Modified" => "Upravené", +"Invalid folder name. Usage of 'Shared' is reserved." => "Názov priečinka je chybný. Použitie názvu 'Shared' nie je povolené.", "%s could not be renamed" => "%s nemohol byť premenovaný", "Upload" => "Odoslať", "File handling" => "Nastavenie správania sa k súborom", @@ -54,16 +72,17 @@ $TRANSLATIONS = array( "0 is unlimited" => "0 znamená neobmedzené", "Maximum input size for ZIP files" => "Najväčšia veľkosť ZIP súborov", "Save" => "Uložiť", -"New" => "Nová", +"New" => "Nový", +"New text file" => "Nový textový súbor", "Text file" => "Textový súbor", +"New folder" => "Nový priečinok", "Folder" => "Priečinok", "From link" => "Z odkazu", "Deleted files" => "Zmazané súbory", "Cancel upload" => "Zrušiť odosielanie", -"You don’t have write permissions here." => "Nemáte oprávnenie na zápis.", +"You don’t have permission to upload or create files here" => "Nemáte oprávnenie sem nahrávať alebo vytvoriť súbory", "Nothing in here. Upload something!" => "Žiadny súbor. Nahrajte niečo!", "Download" => "Sťahovanie", -"Unshare" => "Zrušiť zdieľanie", "Delete" => "Zmazať", "Upload too large" => "Nahrávanie 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.", diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php index 7190753eac9610b62dd78660de326eff75053e98..037e5f6b6b0171d360bffe85b8dc970953b279d5 100644 --- a/apps/files/l10n/sl.php +++ b/apps/files/l10n/sl.php @@ -1,7 +1,17 @@ "%s ni mogoče premakniti - datoteka s tem imenom že obstaja", -"Could not move %s" => "Ni mogoče premakniti %s", +"Could not move %s - File with this name already exists" => "Datoteke %s ni mogoče premakniti - datoteka s tem imenom že obstaja.", +"Could not move %s" => "Datoteke %s ni mogoče premakniti", +"File name cannot be empty." => "Ime datoteke ne sme biti prazno polje.", +"File name must not contain \"/\". Please choose a different name." => "Ime datoteke ne sme vsebovati znaka \"/\". Določiti je treba drugo ime.", +"The name %s is already used in the folder %s. Please choose a different name." => "Ime %s je že v mapi %s že v uporabi. Izbrati je treba drugo ime.", +"Not a valid source" => "Vir ni veljaven", +"Server is not allowed to open URLs, please check the server configuration" => "Odpiranje naslovov URL preko strežnika ni dovoljeno. Preverite nastavitve strežnika.", +"Error while downloading %s to %s" => "Napaka med prejemanjem %s v mapo %s", +"Error when creating the file" => "Napaka med ustvarjanjem datoteke", +"Folder name cannot be empty." => "Ime mape ne more biti prazna vrednost.", +"Folder name must not contain \"/\". Please choose a different name." => "Ime mape ne sme vsebovati znaka \"/\". Določiti je treba drugo ime.", +"Error when creating the folder" => "Napaka med ustvarjanjem mape", "Unable to set upload directory." => "Mapo, v katero boste prenašali dokumente, ni mogoče določiti", "Invalid Token" => "Neveljaven žeton", "No file was uploaded. Unknown error" => "Ni poslane datoteke. Neznana napaka.", @@ -13,37 +23,48 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "Manjka začasna mapa", "Failed to write to disk" => "Pisanje na disk je spodletelo", "Not enough storage available" => "Na voljo ni dovolj prostora", +"Upload failed. Could not get file info." => "Pošiljanje je spodletelo. Ni mogoče pridobiti podrobnosti datoteke.", +"Upload failed. Could not find uploaded file" => "Pošiljanje je spodletelo. Ni mogoče najti poslane datoteke.", "Invalid directory." => "Neveljavna mapa.", "Files" => "Datoteke", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "Ni mogoče poslati datoteke {filename}, saj je to ali mapa ali pa je velikost datoteke 0 bajtov.", "Not enough space available" => "Na voljo ni dovolj prostora.", "Upload cancelled." => "Pošiljanje je preklicano.", +"Could not get result from server." => "Ni mogoče pridobiti podatkov s strežnika.", "File upload is in progress. Leaving the page now will cancel the upload." => "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano.", -"URL cannot be empty." => "Naslov URL ne sme biti prazna vrednost.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Ime mape je neveljavno. Uporaba oznake \"Souporaba\" je rezervirana za ownCloud", -"Error" => "Napaka", +"URL cannot be empty" => "Polje naslova URL ne sme biti prazno", +"In the home folder 'Shared' is a reserved filename" => "V domači mapi ni dovoljeno ustvariti mape z imenom 'Souporabe', saj je ime zadržano za javno mapo.", +"{new_name} already exists" => "{new_name} že obstaja", +"Could not create file" => "Ni mogoče ustvariti datoteke", +"Could not create folder" => "Ni mogoče ustvariti mape", +"Error fetching URL" => "Napaka pridobivanja naslova URL", "Share" => "Souporaba", "Delete permanently" => "Izbriši dokončno", "Rename" => "Preimenuj", "Pending" => "V čakanju ...", -"{new_name} already exists" => "{new_name} že obstaja", -"replace" => "zamenjaj", -"suggest name" => "predlagaj ime", -"cancel" => "prekliči", +"Could not rename file" => "Ni mogoče preimenovati datoteke", "replaced {new_name} with {old_name}" => "preimenovano ime {new_name} z imenom {old_name}", "undo" => "razveljavi", -"_%n folder_::_%n folders_" => array("","","",""), -"_%n file_::_%n files_" => array("","","",""), -"_Uploading %n file_::_Uploading %n files_" => array("","","",""), +"Error deleting file." => "Napaka brisanja datoteke.", +"_%n folder_::_%n folders_" => array("%n mapa","%n mapi","%n mape","%n map"), +"_%n file_::_%n files_" => array("%n datoteka","%n datoteki","%n datoteke","%n datotek"), +"{dirs} and {files}" => "{dirs} in {files}", +"_Uploading %n file_::_Uploading %n files_" => array("Posodabljanje %n datoteke","Posodabljanje %n datotek","Posodabljanje %n datotek","Posodabljanje %n datotek"), "'.' is an invalid file name." => "'.' je neveljavno ime datoteke.", -"File name cannot be empty." => "Ime datoteke ne sme biti prazno polje.", -"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Neveljavno ime, znaki '\\', '/', '<', '>', ':', '\"', '|', '?' in '*' niso dovoljeni.", +"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Neveljavno ime; znaki '\\', '/', '<', '>', ':', '\"', '|', '?' in '*' niso dovoljeni.", "Your storage is full, files can not be updated or synced anymore!" => "Shramba je povsem napolnjena. Datotek ni več mogoče posodabljati in usklajevati!", -"Your storage is almost full ({usedSpacePercent}%)" => "Mesto za shranjevanje je skoraj polno ({usedSpacePercent}%)", -"Your download is being prepared. This might take some time if the files are big." => "Postopek priprave datoteke za prejem je lahko dolgotrajen, če je datoteka zelo velika.", +"Your storage is almost full ({usedSpacePercent}%)" => "Prostor za shranjevanje je skoraj do konca zaseden ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Program za šifriranje je omogočen, vendar ni začet. Odjavite se in nato ponovno prijavite.", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ni ustreznega osebnega ključa za program za šifriranje. Posodobite osebni ključ za dostop do šifriranih datotek med nastavitvami.", +"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifriranje je onemogočeno, datoteke pa so še vedno šifrirane. Odšifrirajte jih med nastavitvami.", +"Your download is being prepared. This might take some time if the files are big." => "Postopek priprave datoteke za prejem je lahko dolgotrajen, kadar je datoteka zelo velika.", +"Error moving file" => "Napaka premikanja datoteke", +"Error" => "Napaka", "Name" => "Ime", "Size" => "Velikost", "Modified" => "Spremenjeno", -"%s could not be renamed" => "%s ni bilo mogoče preimenovati", +"Invalid folder name. Usage of 'Shared' is reserved." => "Neveljavno ime mape. Ime 'Souporaba' je zadržana za javno mapo.", +"%s could not be renamed" => "%s ni mogoče preimenovati", "Upload" => "Pošlji", "File handling" => "Upravljanje z datotekami", "Maximum upload size" => "Največja velikost za pošiljanja", @@ -54,15 +75,16 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Največja vhodna velikost za datoteke ZIP", "Save" => "Shrani", "New" => "Novo", +"New text file" => "Nova besedilna datoteka", "Text file" => "Besedilna datoteka", +"New folder" => "Nova mapa", "Folder" => "Mapa", "From link" => "Iz povezave", "Deleted files" => "Izbrisane datoteke", "Cancel upload" => "Prekliči pošiljanje", -"You don’t have write permissions here." => "Za to mesto ni ustreznih dovoljenj za pisanje.", +"You don’t have permission to upload or create files here" => "Ni ustreznih dovoljenj za pošiljanje ali ustvarjanje datotek na tem mestu.", "Nothing in here. Upload something!" => "Tukaj še ni ničesar. Najprej je treba kakšno datoteko poslati v oblak!", "Download" => "Prejmi", -"Unshare" => "Prekliči souporabo", "Delete" => "Izbriši", "Upload too large" => "Prekoračenje omejitve velikosti", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke, ki jih želite poslati, presegajo največjo dovoljeno velikost na strežniku.", diff --git a/apps/files/l10n/sq.php b/apps/files/l10n/sq.php index ecc066a284c9a5f526151a2b00ff2d1ea8349d4b..a06b6821afe4be8655667ea4c35146d94068d5eb 100644 --- a/apps/files/l10n/sq.php +++ b/apps/files/l10n/sq.php @@ -1,75 +1,68 @@ "%s nuk u spostua - Aty ekziston një skedar me të njëjtin emër", -"Could not move %s" => "%s nuk u spostua", -"Unable to set upload directory." => "Nuk është i mundur caktimi i dosjes së ngarkimit.", -"Invalid Token" => "Përmbajtje e pavlefshme", -"No file was uploaded. Unknown error" => "Nuk u ngarkua asnjë skedar. Veprim i gabuar i panjohur", -"There is no error, the file uploaded with success" => "Nuk pati veprime të gabuara, skedari u ngarkua me sukses", -"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Skedari i ngarkuar tejkalon udhëzimin upload_max_filesize tek php.ini:", -"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Skedari i ngarkuar tejkalon udhëzimin MAX_FILE_SIZE të specifikuar në formularin HTML", -"The uploaded file was only partially uploaded" => "Skedari i ngarkuar u ngarkua vetëm pjesërisht", -"No file was uploaded" => "Nuk u ngarkua asnjë skedar", -"Missing a temporary folder" => "Një dosje e përkohshme nuk u gjet", -"Failed to write to disk" => "Ruajtja në disk dështoi", -"Not enough storage available" => "Nuk ka mbetur hapësirë memorizimi e mjaftueshme", -"Invalid directory." => "Dosje e pavlefshme.", -"Files" => "Skedarët", -"Not enough space available" => "Nuk ka hapësirë memorizimi e mjaftueshme", -"Upload cancelled." => "Ngarkimi u anulua.", -"File upload is in progress. Leaving the page now will cancel the upload." => "Ngarkimi i skedarit është në vazhdim. Nqse ndërroni faqen tani ngarkimi do të anulohet.", -"URL cannot be empty." => "URL-i nuk mund të jetë bosh.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Emri i dosjes është i pavlefshëm. Përdorimi i \"Shared\" është i rezervuar nga Owncloud-i", -"Error" => "Veprim i gabuar", -"Share" => "Nda", -"Delete permanently" => "Elimino përfundimisht", -"Rename" => "Riemërto", -"Pending" => "Pezulluar", -"{new_name} already exists" => "{new_name} ekziston", -"replace" => "zëvëndëso", -"suggest name" => "sugjero një emër", -"cancel" => "anulo", -"replaced {new_name} with {old_name}" => "U zëvëndësua {new_name} me {old_name}", -"undo" => "anulo", +"Could not move %s - File with this name already exists" => "E pa mundur zhvendosja e %s - ekziston nje skedar me te njetin emer", +"Could not move %s" => "Nuk mund të zhvendoset %s", +"File name cannot be empty." => "Emri i skedarit nuk mund të jetë bosh.", +"Unable to set upload directory." => "E pa mundur të vendoset dosja e ngarkimit", +"Invalid Token" => "Shenjë e gabuar", +"No file was uploaded. Unknown error" => "Asnjë skedar nuk u dërgua. Gabim i pa njohur", +"There is no error, the file uploaded with success" => "Skedari u ngarkua me sukses", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Skedari i ngarkuar tejkalon limitin hapsirës së lejuar në php.ini", +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Skedari i ngarkuar tejlakon vlerën MAX_FILE_SIZE të përcaktuar në formën HTML", +"The uploaded file was only partially uploaded" => "Skedari është ngakruar vetëm pjesërisht", +"No file was uploaded" => "Asnjë skedar nuk është ngarkuar", +"Missing a temporary folder" => "Mungon dosja e përkohshme", +"Failed to write to disk" => "Dështoi shkrimi në disk", +"Not enough storage available" => "Hapsira e arkivimit e pamjaftueshme", +"Invalid directory." => "Dosje e pavlefshme", +"Files" => "Skedarë", +"Not enough space available" => "Nuk ka hapsirë të nevojshme", +"Upload cancelled." => "Ngarkimi u anullua", +"File upload is in progress. Leaving the page now will cancel the upload." => "Skedari duke u ngarkuar. Largimi nga faqja do të anullojë ngarkimin", +"{new_name} already exists" => "{new_name} është ekzistues ", +"Share" => "Ndaj", +"Delete permanently" => "Fshi përfundimisht", +"Rename" => "Riemëro", +"Pending" => "Në vijim", +"replaced {new_name} with {old_name}" => "u zëvendësua {new_name} me {old_name}", +"undo" => "anullo", "_%n folder_::_%n folders_" => array("%n dosje","%n dosje"), "_%n file_::_%n files_" => array("%n skedar","%n skedarë"), "{dirs} and {files}" => "{dirs} dhe {files}", "_Uploading %n file_::_Uploading %n files_" => array("Po ngarkoj %n skedar","Po ngarkoj %n skedarë"), -"'.' is an invalid file name." => "'.' është emër i pavlefshëm.", -"File name cannot be empty." => "Emri i skedarit nuk mund të jetë bosh.", -"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Emër i pavlefshëm, '\\', '/', '<', '>', ':', '\"', '|', '?' dhe '*' nuk lejohen.", -"Your storage is full, files can not be updated or synced anymore!" => "Hapësira juaj e memorizimit është plot, nuk mund të ngarkoni apo sinkronizoni më skedarët.", -"Your storage is almost full ({usedSpacePercent}%)" => "Hapësira juaj e memorizimit është gati plot ({usedSpacePercent}%)", +"'.' is an invalid file name." => "'.' nuk është skedar i vlefshem.", +"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Emër jo i vlefshëm, '\\', '/', '<', '>', ':', '\"', '|', '?' dhe '*' nuk lejohen.", +"Your storage is full, files can not be updated or synced anymore!" => "Hapsira juaj e arkivimit është plot, skedarët nuk mund të përditësohen ose sinkronizohen!", +"Your storage is almost full ({usedSpacePercent}%)" => "Hapsira juaj e arkivimit është pothuajse në fund ({usedSpacePercent}%)", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Kodifikimi u çaktivizua por skedarët tuaj vazhdojnë të jenë të kodifikuar. Ju lutem shkoni tek parametrat personale për të dekodifikuar skedarët tuaj.", -"Your download is being prepared. This might take some time if the files are big." => "Shkarkimi juaj po përgatitet. Mund të duhet pak kohë nqse skedarët janë të mëdhenj.", +"Your download is being prepared. This might take some time if the files are big." => "Shkarkimi juaj është duke u përgatitur. Kjo mund të kërkojë kohë nëse skedarët janë të mëdhenj.", +"Error" => "Gabim", "Name" => "Emri", -"Size" => "Dimensioni", -"Modified" => "Modifikuar", +"Size" => "Madhësia", +"Modified" => "Ndryshuar", "%s could not be renamed" => "Nuk është i mundur riemërtimi i %s", "Upload" => "Ngarko", -"File handling" => "Trajtimi i skedarit", -"Maximum upload size" => "Dimensioni maksimal i ngarkimit", -"max. possible: " => "maks. i mundur:", -"Needed for multi-file and folder downloads." => "Duhet për shkarkimin e dosjeve dhe të skedarëve", -"Enable ZIP-download" => "Aktivizo shkarkimin e ZIP-eve", -"0 is unlimited" => "0 është i pakufizuar", -"Maximum input size for ZIP files" => "Dimensioni maksimal i ngarkimit të skedarëve ZIP", +"File handling" => "Trajtimi i Skedarëve", +"Maximum upload size" => "Madhësia maksimale e nagarkimit", +"max. possible: " => "maks i mundshëm", +"Needed for multi-file and folder downloads." => "Nevojitej shkarkim i shumë skedarëve dhe dosjeve", +"Enable ZIP-download" => "Mundëso skarkimin e ZIP", +"0 is unlimited" => "o është pa limit", +"Maximum input size for ZIP files" => "Maksimumi hyrës i skedarëve ZIP", "Save" => "Ruaj", -"New" => "I ri", -"Text file" => "Skedar teksti", +"New" => "E re", +"Text file" => "Skedar tekst", "Folder" => "Dosje", "From link" => "Nga lidhja", -"Deleted files" => "Skedarë të eliminuar", -"Cancel upload" => "Anulo ngarkimin", -"You don’t have write permissions here." => "Nuk keni të drejta për të shkruar këtu.", -"Nothing in here. Upload something!" => "Këtu nuk ka asgjë. Ngarkoni diçka!", +"Deleted files" => "Skedarë të fshirë ", +"Cancel upload" => "Anullo ngarkimin", +"Nothing in here. Upload something!" => "Këtu nuk ka asgje. Ngarko dicka", "Download" => "Shkarko", -"Unshare" => "Hiq ndarjen", -"Delete" => "Elimino", -"Upload too large" => "Ngarkimi është shumë i madh", -"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Skedarët që doni të ngarkoni tejkalojnë dimensionet maksimale për ngarkimet në këtë server.", -"Files are being scanned, please wait." => "Skedarët po analizohen, ju lutemi pritni.", -"Current scanning" => "Analizimi aktual", -"Upgrading filesystem cache..." => "Po përmirësoj memorjen e filesystem-it..." +"Delete" => "Fshi", +"Upload too large" => "Ngarkimi shumë i madh", +"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Skedarët që po mundoheni të ngarkoni e tejkalojnë madhësinë maksimale të lejuar nga serveri.", +"Files are being scanned, please wait." => "Skanerizimi i skedarit në proces. Ju lutem prisni.", +"Current scanning" => "Skanimi aktual", +"Upgrading filesystem cache..." => "Përditësimi i cache-se së sistemit në procesim..." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files/l10n/sr.php b/apps/files/l10n/sr.php index fd3b2a2912f8fa474b4a8cfbd32de7d6c7d8a4d0..e383b66e078a7a857b6f2a3b9f7d99e5f996138a 100644 --- a/apps/files/l10n/sr.php +++ b/apps/files/l10n/sr.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Не могу да преместим %s – датотека с овим именом већ постоји", "Could not move %s" => "Не могу да преместим %s", +"File name cannot be empty." => "Име датотеке не може бити празно.", "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:", @@ -16,27 +17,22 @@ $TRANSLATIONS = array( "Not enough space available" => "Нема довољно простора", "Upload cancelled." => "Отпремање је прекинуто.", "File upload is in progress. Leaving the page now will cancel the upload." => "Отпремање датотеке је у току. Ако сада напустите страницу, прекинућете отпремање.", -"URL cannot be empty." => "Адреса не може бити празна.", -"Error" => "Грешка", +"{new_name} already exists" => "{new_name} већ постоји", "Share" => "Дели", "Delete permanently" => "Обриши за стално", "Rename" => "Преименуј", "Pending" => "На чекању", -"{new_name} already exists" => "{new_name} већ постоји", -"replace" => "замени", -"suggest name" => "предложи назив", -"cancel" => "откажи", "replaced {new_name} with {old_name}" => "замењено {new_name} са {old_name}", "undo" => "опозови", "_%n folder_::_%n folders_" => array("","",""), "_%n file_::_%n files_" => array("","",""), "_Uploading %n file_::_Uploading %n files_" => array("","",""), "'.' is an invalid file name." => "Датотека „.“ је неисправног имена.", -"File name cannot be empty." => "Име датотеке не може бити празно.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Неисправан назив. Следећи знакови нису дозвољени: \\, /, <, >, :, \", |, ? и *.", "Your storage is full, files can not be updated or synced anymore!" => "Ваше складиште је пуно. Датотеке више не могу бити ажуриране ни синхронизоване.", "Your storage is almost full ({usedSpacePercent}%)" => "Ваше складиште је скоро па пуно ({usedSpacePercent}%)", "Your download is being prepared. This might take some time if the files are big." => "Припремам преузимање. Ово може да потраје ако су датотеке велике.", +"Error" => "Грешка", "Name" => "Име", "Size" => "Величина", "Modified" => "Измењено", @@ -55,10 +51,8 @@ $TRANSLATIONS = array( "From link" => "Са везе", "Deleted files" => "Обрисане датотеке", "Cancel upload" => "Прекини отпремање", -"You don’t have write permissions here." => "Овде немате дозволу за писање.", "Nothing in here. Upload something!" => "Овде нема ничег. Отпремите нешто!", "Download" => "Преузми", -"Unshare" => "Укини дељење", "Delete" => "Обриши", "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/sr@latin.php b/apps/files/l10n/sr@latin.php index 8831d1a1bef0ee736f95b15be17888f0f28ed215..13ce5ec8b3e65364950a80f044062a85c46e34f1 100644 --- a/apps/files/l10n/sr@latin.php +++ b/apps/files/l10n/sr@latin.php @@ -6,11 +6,11 @@ $TRANSLATIONS = array( "No file was uploaded" => "Nijedan fajl nije poslat", "Missing a temporary folder" => "Nedostaje privremena fascikla", "Files" => "Fajlovi", -"Error" => "Greška", "Share" => "Podeli", "_%n folder_::_%n folders_" => array("","",""), "_%n file_::_%n files_" => array("","",""), "_Uploading %n file_::_Uploading %n files_" => array("","",""), +"Error" => "Greška", "Name" => "Ime", "Size" => "Veličina", "Modified" => "Zadnja izmena", @@ -19,7 +19,6 @@ $TRANSLATIONS = array( "Save" => "Snimi", "Nothing in here. Upload something!" => "Ovde nema ničeg. Pošaljite nešto!", "Download" => "Preuzmi", -"Unshare" => "Ukljoni deljenje", "Delete" => "Obriši", "Upload too large" => "Pošiljka je prevelika", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fajlovi koje želite da pošaljete prevazilaze ograničenje maksimalne veličine pošiljke na ovom serveru." diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php index 208dcd4ea12d83ddd617cf390e88874e77396c76..9e1b8110d4885efc29d82b221876f9b0c910df4b 100644 --- a/apps/files/l10n/sv.php +++ b/apps/files/l10n/sv.php @@ -2,6 +2,15 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Kunde inte flytta %s - Det finns redan en fil med detta namn", "Could not move %s" => "Kan inte flytta %s", +"File name cannot be empty." => "Filnamn kan inte vara tomt.", +"File name must not contain \"/\". Please choose a different name." => "Filnamnet får ej innehålla \"/\". Välj ett annat namn.", +"The name %s is already used in the folder %s. Please choose a different name." => "Namnet %s används redan i katalogen %s. Välj ett annat namn.", +"Not a valid source" => "Inte en giltig källa", +"Error while downloading %s to %s" => "Fel under nerladdning från %s till %s", +"Error when creating the file" => "Fel under skapande utav filen", +"Folder name cannot be empty." => "Katalognamn kan ej vara tomt.", +"Folder name must not contain \"/\". Please choose a different name." => "Katalog namnet får ej innehålla \"/\". Välj ett annat namn.", +"Error when creating the folder" => "Fel under skapande utav en katalog", "Unable to set upload directory." => "Kan inte sätta mapp för uppladdning.", "Invalid Token" => "Ogiltig token", "No file was uploaded. Unknown error" => "Ingen fil uppladdad. Okänt fel", @@ -13,38 +22,46 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "En temporär mapp saknas", "Failed to write to disk" => "Misslyckades spara till disk", "Not enough storage available" => "Inte tillräckligt med lagringsutrymme tillgängligt", +"Upload failed. Could not get file info." => "Uppladdning misslyckades. Gick inte att hämta filinformation.", +"Upload failed. Could not find uploaded file" => "Uppladdning misslyckades. Kunde inte hitta den uppladdade filen", "Invalid directory." => "Felaktig mapp.", "Files" => "Filer", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "Kan inte ladda upp {filename} eftersom den antingen är en mapp eller har 0 bytes.", "Not enough space available" => "Inte tillräckligt med utrymme tillgängligt", "Upload cancelled." => "Uppladdning avbruten.", +"Could not get result from server." => "Gick inte att hämta resultat från server.", "File upload is in progress. Leaving the page now will cancel the upload." => "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.", -"URL cannot be empty." => "URL kan inte vara tom.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Ogiltigt mappnamn. Användning av 'Shared' är reserverad av ownCloud", -"Error" => "Fel", +"URL cannot be empty" => "URL kan ej vara tomt", +"In the home folder 'Shared' is a reserved filename" => "I hemma katalogen 'Delat' är ett reserverat filnamn", +"{new_name} already exists" => "{new_name} finns redan", +"Could not create file" => "Kunde ej skapa fil", +"Could not create folder" => "Kunde ej skapa katalog", "Share" => "Dela", "Delete permanently" => "Radera permanent", "Rename" => "Byt namn", "Pending" => "Väntar", -"{new_name} already exists" => "{new_name} finns redan", -"replace" => "ersätt", -"suggest name" => "föreslå namn", -"cancel" => "avbryt", +"Could not rename file" => "Kan ej byta filnamn", "replaced {new_name} with {old_name}" => "ersatt {new_name} med {old_name}", "undo" => "ångra", +"Error deleting file." => "Kunde inte ta bort filen.", "_%n folder_::_%n folders_" => array("%n mapp","%n mappar"), "_%n file_::_%n files_" => array("%n fil","%n filer"), "{dirs} and {files}" => "{dirs} och {files}", "_Uploading %n file_::_Uploading %n files_" => array("Laddar upp %n fil","Laddar upp %n filer"), "'.' is an invalid file name." => "'.' är ett ogiltigt filnamn.", -"File name cannot be empty." => "Filnamn kan inte vara tomt.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet.", "Your storage is full, files can not be updated or synced anymore!" => "Ditt lagringsutrymme är fullt, filer kan inte längre uppdateras eller synkroniseras!", "Your storage is almost full ({usedSpacePercent}%)" => "Ditt lagringsutrymme är nästan fullt ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ogiltig privat nyckel i krypteringsprogrammet. Vänligen uppdatera lösenordet till din privata nyckel under dina personliga inställningar för att återfå tillgång till dina krypterade filer.", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Kryptering inaktiverades men dina filer är fortfarande krypterade. Vänligen gå till sidan för dina personliga inställningar för att dekryptera dina filer.", "Your download is being prepared. This might take some time if the files are big." => "Din nedladdning förbereds. Det kan ta tid om det är stora filer.", +"Error moving file" => "Fel uppstod vid flyttning av fil", +"Error" => "Fel", "Name" => "Namn", "Size" => "Storlek", "Modified" => "Ändrad", +"Invalid folder name. Usage of 'Shared' is reserved." => "Ogiltigt mappnamn. Användande av 'Shared' är reserverat av ownCloud", "%s could not be renamed" => "%s kunde inte namnändras", "Upload" => "Ladda upp", "File handling" => "Filhantering", @@ -57,14 +74,14 @@ $TRANSLATIONS = array( "Save" => "Spara", "New" => "Ny", "Text file" => "Textfil", +"New folder" => "Ny mapp", "Folder" => "Mapp", "From link" => "Från länk", "Deleted files" => "Raderade filer", "Cancel upload" => "Avbryt uppladdning", -"You don’t have write permissions here." => "Du saknar skrivbehörighet här.", +"You don’t have permission to upload or create files here" => "Du har ej tillåtelse att ladda upp eller skapa filer här", "Nothing in here. Upload something!" => "Ingenting här. Ladda upp något!", "Download" => "Ladda ner", -"Unshare" => "Sluta dela", "Delete" => "Radera", "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.", diff --git a/apps/files/l10n/ta_LK.php b/apps/files/l10n/ta_LK.php index f05990b94f00f39152dcbbafd57e0f1d9c9bb59d..f91a74ee9bd014f0e30e8d55d4ddd3b9ea25cc9a 100644 --- a/apps/files/l10n/ta_LK.php +++ b/apps/files/l10n/ta_LK.php @@ -10,21 +10,17 @@ $TRANSLATIONS = array( "Files" => "கோப்புகள்", "Upload cancelled." => "பதிவேற்றல் இரத்து செய்யப்பட்டுள்ளது", "File upload is in progress. Leaving the page now will cancel the upload." => "கோப்பு பதிவேற்றம் செயல்பாட்டில் உள்ளது. இந்தப் பக்கத்திலிருந்து வெறியேறுவதானது பதிவேற்றலை இரத்து செய்யும்.", -"URL cannot be empty." => "URL வெறுமையாக இருக்கமுடியாது.", -"Error" => "வழு", +"{new_name} already exists" => "{new_name} ஏற்கனவே உள்ளது", "Share" => "பகிர்வு", "Rename" => "பெயர்மாற்றம்", "Pending" => "நிலுவையிலுள்ள", -"{new_name} already exists" => "{new_name} ஏற்கனவே உள்ளது", -"replace" => "மாற்றிடுக", -"suggest name" => "பெயரை பரிந்துரைக்க", -"cancel" => "இரத்து செய்க", "replaced {new_name} with {old_name}" => "{new_name} ஆனது {old_name} இனால் மாற்றப்பட்டது", "undo" => "முன் செயல் நீக்கம் ", "_%n folder_::_%n folders_" => array("",""), "_%n file_::_%n files_" => array("",""), "_Uploading %n file_::_Uploading %n files_" => array("",""), "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "செல்லுபடியற்ற பெயர்,'\\', '/', '<', '>', ':', '\"', '|', '?' மற்றும் '*' ஆகியன அனுமதிக்கப்படமாட்டாது.", +"Error" => "வழு", "Name" => "பெயர்", "Size" => "அளவு", "Modified" => "மாற்றப்பட்டது", @@ -44,7 +40,6 @@ $TRANSLATIONS = array( "Cancel upload" => "பதிவேற்றலை இரத்து செய்க", "Nothing in here. Upload something!" => "இங்கு ஒன்றும் இல்லை. ஏதாவது பதிவேற்றுக!", "Download" => "பதிவிறக்குக", -"Unshare" => "பகிரப்படாதது", "Delete" => "நீக்குக", "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/te.php b/apps/files/l10n/te.php index 60aabc8a3655753f2cc3c393371c8e8372f76a79..155e4b5c201494f21650396d9419036cdea894d1 100644 --- a/apps/files/l10n/te.php +++ b/apps/files/l10n/te.php @@ -1,14 +1,14 @@ "పొరపాటు", "Delete permanently" => "శాశ్వతంగా తొలగించు", -"cancel" => "రద్దుచేయి", "_%n folder_::_%n folders_" => array("",""), "_%n file_::_%n files_" => array("",""), "_Uploading %n file_::_Uploading %n files_" => array("",""), +"Error" => "పొరపాటు", "Name" => "పేరు", "Size" => "పరిమాణం", "Save" => "భద్రపరచు", +"New folder" => "కొత్త సంచయం", "Folder" => "సంచయం", "Delete" => "తొలగించు" ); diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php index 37144ebc8836d6079f55fab879f1939522e6b577..38a67c50679900f018dfdfc0a30d68a6fc08add0 100644 --- a/apps/files/l10n/th_TH.php +++ b/apps/files/l10n/th_TH.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่แล้ว", "Could not move %s" => "ไม่สามารถย้าย %s ได้", +"File name cannot be empty." => "ชื่อไฟล์ไม่สามารถเว้นว่างได้", "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", @@ -16,26 +17,21 @@ $TRANSLATIONS = array( "Not enough space available" => "มีพื้นที่เหลือไม่เพียงพอ", "Upload cancelled." => "การอัพโหลดถูกยกเลิก", "File upload is in progress. Leaving the page now will cancel the upload." => "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก", -"URL cannot be empty." => "URL ไม่สามารถเว้นว่างได้", -"Error" => "ข้อผิดพลาด", +"{new_name} already exists" => "{new_name} มีอยู่แล้วในระบบ", "Share" => "แชร์", "Rename" => "เปลี่ยนชื่อ", "Pending" => "อยู่ระหว่างดำเนินการ", -"{new_name} already exists" => "{new_name} มีอยู่แล้วในระบบ", -"replace" => "แทนที่", -"suggest name" => "แนะนำชื่อ", -"cancel" => "ยกเลิก", "replaced {new_name} with {old_name}" => "แทนที่ {new_name} ด้วย {old_name} แล้ว", "undo" => "เลิกทำ", "_%n folder_::_%n folders_" => array(""), "_%n file_::_%n files_" => array(""), "_Uploading %n file_::_Uploading %n files_" => array(""), "'.' is an invalid file name." => "'.' เป็นชื่อไฟล์ที่ไม่ถูกต้อง", -"File name cannot be empty." => "ชื่อไฟล์ไม่สามารถเว้นว่างได้", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "ชื่อที่ใช้ไม่ถูกต้อง, '\\', '/', '<', '>', ':', '\"', '|', '?' และ '*' ไม่ได้รับอนุญาตให้ใช้งานได้", "Your storage is full, files can not be updated or synced anymore!" => "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานไฟล์ต่างๆได้อีกต่อไป", "Your storage is almost full ({usedSpacePercent}%)" => "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว ({usedSpacePercent}%)", "Your download is being prepared. This might take some time if the files are big." => "กำลังเตรียมดาวน์โหลดข้อมูล หากไฟล์มีขนาดใหญ่ อาจใช้เวลาสักครู่", +"Error" => "ข้อผิดพลาด", "Name" => "ชื่อ", "Size" => "ขนาด", "Modified" => "แก้ไขแล้ว", @@ -55,7 +51,6 @@ $TRANSLATIONS = array( "Cancel upload" => "ยกเลิกการอัพโหลด", "Nothing in here. Upload something!" => "ยังไม่มีไฟล์ใดๆอยู่ที่นี่ กรุณาอัพโหลดไฟล์!", "Download" => "ดาวน์โหลด", -"Unshare" => "ยกเลิกการแชร์", "Delete" => "ลบ", "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/tr.php b/apps/files/l10n/tr.php index 8cb05e16ace42b30fb161c1e449769a978206c32..90b16922a7638baf02b4e3f46d3dfa5f0722b33d 100644 --- a/apps/files/l10n/tr.php +++ b/apps/files/l10n/tr.php @@ -1,9 +1,19 @@ "%s taşınamadı. Bu isimde dosya zaten var.", +"Could not move %s - File with this name already exists" => "%s taşınamadı - Bu isimde dosya zaten var", "Could not move %s" => "%s taşınamadı", +"File name cannot be empty." => "Dosya adı boş olamaz.", +"File name must not contain \"/\". Please choose a different name." => "Dosya adı \"/\" içermemelidir. Lütfen farklı bir isim seçin.", +"The name %s is already used in the folder %s. Please choose a different name." => "%s ismi zaten %s klasöründe kullanılıyor. Lütfen farklı bir isim seçin.", +"Not a valid source" => "Geçerli bir kaynak değil", +"Server is not allowed to open URLs, please check the server configuration" => "Sunucunun adresleri açma izi yok, lütfen sunucu yapılandırmasını denetleyin", +"Error while downloading %s to %s" => "%s, %s içine indirilirken hata", +"Error when creating the file" => "Dosya oluşturulurken hata", +"Folder name cannot be empty." => "Klasör adı boş olamaz.", +"Folder name must not contain \"/\". Please choose a different name." => "Klasör adı \"/\" içermemelidir. Lütfen farklı bir isim seçin.", +"Error when creating the folder" => "Klasör oluşturulurken hata", "Unable to set upload directory." => "Yükleme dizini tanımlanamadı.", -"Invalid Token" => "Geçeriz simge", +"Invalid Token" => "Geçersiz Simge", "No file was uploaded. Unknown error" => "Dosya yüklenmedi. Bilinmeyen hata", "There is no error, the file uploaded with success" => "Dosya başarıyla yüklendi, hata oluşmadı", "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ı.", @@ -13,57 +23,68 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "Geçici dizin eksik", "Failed to write to disk" => "Diske yazılamadı", "Not enough storage available" => "Yeterli disk alanı yok", +"Upload failed. Could not get file info." => "Yükleme başarısız. Dosya bilgisi alınamadı.", +"Upload failed. Could not find uploaded file" => "Yükleme başarısız. Yüklenen dosya bulunamadı", "Invalid directory." => "Geçersiz dizin.", "Files" => "Dosyalar", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "Bir dizin veya 0 bayt olduğundan {filename} yüklenemedi", "Not enough space available" => "Yeterli disk alanı yok", "Upload cancelled." => "Yükleme iptal edildi.", +"Could not get result from server." => "Sunucudan sonuç alınamadı.", "File upload is in progress. Leaving the page now will cancel the upload." => "Dosya yükleme işlemi sürüyor. Şimdi sayfadan ayrılırsanız işleminiz iptal olur.", -"URL cannot be empty." => "URL boş olamaz.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Geçersiz dizin adı. 'Shared' dizin ismi kullanımı ownCloud tarafından rezerve edilmiştir.", -"Error" => "Hata", +"URL cannot be empty" => "URL boş olamaz", +"In the home folder 'Shared' is a reserved filename" => "Ev klasöründeki 'Paylaşılan', ayrılmış bir dosya adıdır", +"{new_name} already exists" => "{new_name} zaten mevcut", +"Could not create file" => "Dosya oluşturulamadı", +"Could not create folder" => "Klasör oluşturulamadı", +"Error fetching URL" => "Adres getirilirken hata", "Share" => "Paylaş", "Delete permanently" => "Kalıcı olarak sil", "Rename" => "İsim değiştir.", "Pending" => "Bekliyor", -"{new_name} already exists" => "{new_name} zaten mevcut", -"replace" => "değiştir", -"suggest name" => "Öneri ad", -"cancel" => "iptal", +"Could not rename file" => "Dosya adlandırılamadı", "replaced {new_name} with {old_name}" => "{new_name} ismi {old_name} ile değiştirildi", "undo" => "geri al", +"Error deleting file." => "Dosya silinirken hata.", "_%n folder_::_%n folders_" => array("%n dizin","%n dizin"), "_%n file_::_%n files_" => array("%n dosya","%n dosya"), +"{dirs} and {files}" => "{dirs} ve {files}", "_Uploading %n file_::_Uploading %n files_" => array("%n dosya yükleniyor","%n dosya yükleniyor"), -"'.' is an invalid file name." => "'.' geçersiz dosya adı.", -"File name cannot be empty." => "Dosya adı boş olamaz.", +"'.' is an invalid file name." => "'.' geçersiz bir dosya adı.", "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 full, files can not be updated or synced anymore!" => "Depolama alanınız dolu, artık dosyalar güncellenmeyecek veya eşitlenmeyecek.", "Your storage is almost full ({usedSpacePercent}%)" => "Depolama alanınız neredeyse dolu ({usedSpacePercent}%)", -"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Şifreleme işlemi durduruldu ancak dosyalarınız şifreli. Dosyalarınızın şifresini kaldırmak için lütfen kişisel ayarlar kısmına geçiniz.", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.", +"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Şifreleme işlemi durduruldu ancak dosyalarınız şifreli. Dosyalarınızın şifresini kaldırmak için lütfen kişisel ayarlar kısmına geçin.", "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.", +"Error moving file" => "Dosya taşıma hatası", +"Error" => "Hata", "Name" => "İsim", "Size" => "Boyut", "Modified" => "Değiştirilme", +"Invalid folder name. Usage of 'Shared' is reserved." => "Geçersiz dizin adı. 'Shared' ismi ayrılmıştır.", "%s could not be renamed" => "%s yeniden adlandırılamadı", "Upload" => "Yükle", -"File handling" => "Dosya taşıma", +"File handling" => "Dosya işlemleri", "Maximum upload size" => "Maksimum yükleme boyutu", "max. possible: " => "mümkün olan en fazla: ", "Needed for multi-file and folder downloads." => "Çoklu dosya ve dizin indirmesi için gerekli.", -"Enable ZIP-download" => "ZIP indirmeyi aktif et", +"Enable ZIP-download" => "ZIP indirmeyi etkinleştir", "0 is unlimited" => "0 limitsiz demektir", -"Maximum input size for ZIP files" => "ZIP dosyaları için en fazla girdi sayısı", +"Maximum input size for ZIP files" => "ZIP dosyaları için en fazla girdi boyutu", "Save" => "Kaydet", "New" => "Yeni", +"New text file" => "Yeni metin dosyası", "Text file" => "Metin dosyası", +"New folder" => "Yeni klasör", "Folder" => "Klasör", "From link" => "Bağlantıdan", -"Deleted files" => "Dosyalar silindi", +"Deleted files" => "Silinmiş dosyalar", "Cancel upload" => "Yüklemeyi iptal et", -"You don’t have write permissions here." => "Buraya erişim hakkınız yok.", -"Nothing in here. Upload something!" => "Burada hiçbir şey yok. Birşeyler yükleyin!", +"You don’t have permission to upload or create files here" => "Buraya dosya yükleme veya oluşturma izniniz yok", +"Nothing in here. Upload something!" => "Burada hiçbir şey yok. Bir şeyler yükleyin!", "Download" => "İndir", -"Unshare" => "Paylaşılmayan", "Delete" => "Sil", "Upload too large" => "Yükleme ç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.", diff --git a/apps/files/l10n/tzm.php b/apps/files/l10n/tzm.php new file mode 100644 index 0000000000000000000000000000000000000000..c50e35da623e6da0de48674c910af7064243e7d0 --- /dev/null +++ b/apps/files/l10n/tzm.php @@ -0,0 +1,7 @@ + array("",""), +"_%n file_::_%n files_" => array("",""), +"_Uploading %n file_::_Uploading %n files_" => array("","") +); +$PLURAL_FORMS = "nplurals=2; plural=(n == 0 || n == 1 || (n > 10 && n < 100) ? 0 : 1;"; diff --git a/apps/files/l10n/ug.php b/apps/files/l10n/ug.php index a38ce706ef9ea1b988de3cc896033c513d6e1ce8..45458c51af077afcdbe211e2303c75181b3b95a9 100644 --- a/apps/files/l10n/ug.php +++ b/apps/files/l10n/ug.php @@ -10,19 +10,16 @@ $TRANSLATIONS = array( "Not enough space available" => "يېتەرلىك بوشلۇق يوق", "Upload cancelled." => "يۈكلەشتىن ۋاز كەچتى.", "File upload is in progress. Leaving the page now will cancel the upload." => "ھۆججەت يۈكلەش مەشغۇلاتى ئېلىپ بېرىلىۋاتىدۇ. Leaving the page now will cancel the upload.", -"Error" => "خاتالىق", +"{new_name} already exists" => "{new_name} مەۋجۇت", "Share" => "ھەمبەھىر", "Delete permanently" => "مەڭگۈلۈك ئۆچۈر", "Rename" => "ئات ئۆزگەرت", "Pending" => "كۈتۈۋاتىدۇ", -"{new_name} already exists" => "{new_name} مەۋجۇت", -"replace" => "ئالماشتۇر", -"suggest name" => "تەۋسىيە ئات", -"cancel" => "ۋاز كەچ", "undo" => "يېنىۋال", "_%n folder_::_%n folders_" => array(""), "_%n file_::_%n files_" => array(""), "_Uploading %n file_::_Uploading %n files_" => array(""), +"Error" => "خاتالىق", "Name" => "ئاتى", "Size" => "چوڭلۇقى", "Modified" => "ئۆزگەرتكەن", @@ -30,12 +27,12 @@ $TRANSLATIONS = array( "Save" => "ساقلا", "New" => "يېڭى", "Text file" => "تېكىست ھۆججەت", +"New folder" => "يېڭى قىسقۇچ", "Folder" => "قىسقۇچ", "Deleted files" => "ئۆچۈرۈلگەن ھۆججەتلەر", "Cancel upload" => "يۈكلەشتىن ۋاز كەچ", "Nothing in here. Upload something!" => "بۇ جايدا ھېچنېمە يوق. Upload something!", "Download" => "چۈشۈر", -"Unshare" => "ھەمبەھىرلىمە", "Delete" => "ئۆچۈر", "Upload too large" => "يۈكلەندىغىنى بەك چوڭ", "Upgrading filesystem cache..." => "ھۆججەت سىستېما غەملىكىنى يۈكسەلدۈرۈۋاتىدۇ…" diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php index 4aaeca255422ce889863a60613ac83d58261bceb..1e37d3d77d4fcfefb3844aa28f0a0a4a7f0ebbf4 100644 --- a/apps/files/l10n/uk.php +++ b/apps/files/l10n/uk.php @@ -2,6 +2,8 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Не вдалося перемістити %s - Файл з таким ім'ям вже існує", "Could not move %s" => "Не вдалося перемістити %s", +"File name cannot be empty." => " Ім'я файлу не може бути порожнім.", +"Folder name cannot be empty." => "Ім'я теки не може бути порожнім.", "Unable to set upload directory." => "Не вдалося встановити каталог завантаження.", "No file was uploaded. Unknown error" => "Не завантажено жодного файлу. Невідома помилка", "There is no error, the file uploaded with success" => "Файл успішно вивантажено без помилок.", @@ -17,28 +19,27 @@ $TRANSLATIONS = array( "Not enough space available" => "Місця більше немає", "Upload cancelled." => "Завантаження перервано.", "File upload is in progress. Leaving the page now will cancel the upload." => "Виконується завантаження файлу. Закриття цієї сторінки приведе до відміни завантаження.", -"URL cannot be empty." => "URL не може бути пустим.", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Неправильне ім'я теки. Використання 'Shared' зарезервовано ownCloud", -"Error" => "Помилка", +"URL cannot be empty" => "URL не може бути порожнім", +"{new_name} already exists" => "{new_name} вже існує", +"Could not create file" => "Не вдалося створити файл", +"Could not create folder" => "Не вдалося створити теку", "Share" => "Поділитися", "Delete permanently" => "Видалити назавжди", "Rename" => "Перейменувати", "Pending" => "Очікування", -"{new_name} already exists" => "{new_name} вже існує", -"replace" => "заміна", -"suggest name" => "запропонуйте назву", -"cancel" => "відміна", +"Could not rename file" => "Неможливо перейменувати файл", "replaced {new_name} with {old_name}" => "замінено {new_name} на {old_name}", "undo" => "відмінити", "_%n folder_::_%n folders_" => array("%n тека","%n тека","%n теки"), -"_%n file_::_%n files_" => array("","",""), +"_%n file_::_%n files_" => array("%n файл","%n файлів","%n файли"), "_Uploading %n file_::_Uploading %n files_" => array("","",""), "'.' is an invalid file name." => "'.' це невірне ім'я файлу.", -"File name cannot be empty." => " Ім'я файлу не може бути порожнім.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Невірне ім'я, '\\', '/', '<', '>', ':', '\"', '|', '?' та '*' не дозволені.", "Your storage is full, files can not be updated or synced anymore!" => "Ваше сховище переповнене, файли більше не можуть бути оновлені або синхронізовані !", "Your storage is almost full ({usedSpacePercent}%)" => "Ваше сховище майже повне ({usedSpacePercent}%)", "Your download is being prepared. This might take some time if the files are big." => "Ваше завантаження готується. Це може зайняти деякий час, якщо файли завеликі.", +"Error moving file" => "Помилка переміщення файлу", +"Error" => "Помилка", "Name" => "Ім'я", "Size" => "Розмір", "Modified" => "Змінено", @@ -54,14 +55,13 @@ $TRANSLATIONS = array( "Save" => "Зберегти", "New" => "Створити", "Text file" => "Текстовий файл", +"New folder" => "Нова тека", "Folder" => "Тека", "From link" => "З посилання", "Deleted files" => "Видалено файлів", "Cancel upload" => "Перервати завантаження", -"You don’t have write permissions here." => "У вас тут немає прав на запис.", "Nothing in here. Upload something!" => "Тут нічого немає. Відвантажте що-небудь!", "Download" => "Завантажити", -"Unshare" => "Закрити доступ", "Delete" => "Видалити", "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/ur.php b/apps/files/l10n/ur.php new file mode 100644 index 0000000000000000000000000000000000000000..0157af093e92200cc7790497227e92e62d80165f --- /dev/null +++ b/apps/files/l10n/ur.php @@ -0,0 +1,7 @@ + array("",""), +"_%n file_::_%n files_" => array("",""), +"_Uploading %n file_::_Uploading %n files_" => array("","") +); +$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files/l10n/ur_PK.php b/apps/files/l10n/ur_PK.php index 6854c421587594c1eb30dd97924044e0cfebd3f5..3e13a7f516d5339043a5ec74c523a73506def9d6 100644 --- a/apps/files/l10n/ur_PK.php +++ b/apps/files/l10n/ur_PK.php @@ -1,9 +1,8 @@ "ایرر", "_%n folder_::_%n folders_" => array("",""), "_%n file_::_%n files_" => array("",""), "_Uploading %n file_::_Uploading %n files_" => array("",""), -"Unshare" => "شئیرنگ ختم کریں" +"Error" => "ایرر" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files/l10n/uz.php b/apps/files/l10n/uz.php new file mode 100644 index 0000000000000000000000000000000000000000..70ab6572ba466c23b8066e18b9ee2f9cb2a7a827 --- /dev/null +++ b/apps/files/l10n/uz.php @@ -0,0 +1,7 @@ + array(""), +"_%n file_::_%n files_" => array(""), +"_Uploading %n file_::_Uploading %n files_" => array("") +); +$PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files/l10n/vi.php b/apps/files/l10n/vi.php index 2d63128aa264abdb48d3e0c85f6d88e03e29f85f..8236d5e7efeb5a17215d4a630419635c8376e85e 100644 --- a/apps/files/l10n/vi.php +++ b/apps/files/l10n/vi.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Không thể di chuyển %s - Đã có tên tập tin này trên hệ thống", "Could not move %s" => "Không thể di chuyển %s", +"File name cannot be empty." => "Tên file không được rỗng", "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: ", @@ -16,27 +17,22 @@ $TRANSLATIONS = array( "Not enough space available" => "Không đủ chỗ trống cần thiết", "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.", -"Error" => "Lỗi", +"{new_name} already exists" => "{new_name} đã tồn tại", "Share" => "Chia sẻ", "Delete permanently" => "Xóa vĩnh vễn", "Rename" => "Sửa tên", "Pending" => "Đang chờ", -"{new_name} already exists" => "{new_name} đã tồn tại", -"replace" => "thay thế", -"suggest name" => "tên gợi ý", -"cancel" => "hủy", "replaced {new_name} with {old_name}" => "đã thay thế {new_name} bằng {old_name}", "undo" => "lùi lại", "_%n folder_::_%n folders_" => array(""), "_%n file_::_%n files_" => array(""), "_Uploading %n file_::_Uploading %n files_" => array(""), "'.' 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.", +"Error" => "Lỗi", "Name" => "Tên", "Size" => "Kích cỡ", "Modified" => "Thay đổi", @@ -51,14 +47,13 @@ $TRANSLATIONS = array( "Save" => "Lưu", "New" => "Mới", "Text file" => "Tập tin văn bản", +"New folder" => "Tạo thư mục", "Folder" => "Thư mục", "From link" => "Từ liên kết", "Deleted files" => "File đã bị xóa", "Cancel upload" => "Hủy upload", -"You don’t have write permissions here." => "Bạn không có quyền ghi vào đây.", "Nothing in here. Upload something!" => "Không có gì ở đây .Hãy tải lên một cái gì đó !", "Download" => "Tải về", -"Unshare" => "Bỏ chia sẻ", "Delete" => "Xóa", "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ủ .", diff --git a/apps/files/l10n/zh_CN.php b/apps/files/l10n/zh_CN.php index b739b72ce7e264773a2cd974e4c06025f009f637..effcb0225cadbf43282ae58be8cd7f200d2eb4c0 100644 --- a/apps/files/l10n/zh_CN.php +++ b/apps/files/l10n/zh_CN.php @@ -2,6 +2,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "无法移动 %s - 同名文件已存在", "Could not move %s" => "无法移动 %s", +"File name cannot be empty." => "文件名不能为空。", "Unable to set upload directory." => "无法设置上传文件夹。", "Invalid Token" => "无效密匙", "No file was uploaded. Unknown error" => "没有文件被上传。未知错误", @@ -18,28 +19,22 @@ $TRANSLATIONS = array( "Not enough space available" => "没有足够可用空间", "Upload cancelled." => "上传已取消", "File upload is in progress. Leaving the page now will cancel the upload." => "文件正在上传中。现在离开此页会导致上传动作被取消。", -"URL cannot be empty." => "URL不能为空", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "无效的文件夹名。”Shared“ 是 Owncloud 预留的文件夹", -"Error" => "错误", +"{new_name} already exists" => "{new_name} 已存在", "Share" => "分享", "Delete permanently" => "永久删除", "Rename" => "重命名", "Pending" => "等待", -"{new_name} already exists" => "{new_name} 已存在", -"replace" => "替换", -"suggest name" => "建议名称", -"cancel" => "取消", "replaced {new_name} with {old_name}" => "已将 {old_name}替换成 {new_name}", "undo" => "撤销", "_%n folder_::_%n folders_" => array("%n 文件夹"), "_%n file_::_%n files_" => array("%n个文件"), "_Uploading %n file_::_Uploading %n files_" => array(""), "'.' is an invalid file name." => "'.' 是一个无效的文件名。", -"File name cannot be empty." => "文件名不能为空。", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "无效名称,'\\', '/', '<', '>', ':', '\"', '|', '?' 和 '*' 不被允许使用。", "Your storage is full, files can not be updated or synced anymore!" => "您的存储空间已满,文件将无法更新或同步!", "Your storage is almost full ({usedSpacePercent}%)" => "您的存储空间即将用完 ({usedSpacePercent}%)", "Your download is being prepared. This might take some time if the files are big." => "下载正在准备中。如果文件较大可能会花费一些时间。", +"Error" => "错误", "Name" => "名称", "Size" => "大小", "Modified" => "修改日期", @@ -55,14 +50,13 @@ $TRANSLATIONS = array( "Save" => "保存", "New" => "新建", "Text file" => "文本文件", +"New folder" => "添加文件夹", "Folder" => "文件夹", "From link" => "来自链接", "Deleted files" => "已删除文件", "Cancel upload" => "取消上传", -"You don’t have write permissions here." => "您没有写权限", "Nothing in here. Upload something!" => "这里还什么都没有。上传些东西吧!", "Download" => "下载", -"Unshare" => "取消共享", "Delete" => "删除", "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/zh_HK.php b/apps/files/l10n/zh_HK.php index febed4fe8fb68048048ac876a81ba9ed6b5b53c3..4885500ce43b035c3a52369756bfeb5824425462 100644 --- a/apps/files/l10n/zh_HK.php +++ b/apps/files/l10n/zh_HK.php @@ -1,16 +1,15 @@ "文件", -"Error" => "錯誤", "Share" => "分享", "_%n folder_::_%n folders_" => array(""), "_%n file_::_%n files_" => array(""), "_Uploading %n file_::_Uploading %n files_" => array(""), +"Error" => "錯誤", "Name" => "名稱", "Upload" => "上傳", "Save" => "儲存", "Download" => "下載", -"Unshare" => "取消分享", "Delete" => "刪除" ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php index 214812d7adaf6270faca6af413113b929aa7c07a..dd9cbfdf1a9a2b91694e556635ba1361291b4af7 100644 --- a/apps/files/l10n/zh_TW.php +++ b/apps/files/l10n/zh_TW.php @@ -2,6 +2,15 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "無法移動 %s ,同名的檔案已經存在", "Could not move %s" => "無法移動 %s", +"File name cannot be empty." => "檔名不能為空", +"File name must not contain \"/\". Please choose a different name." => "檔名不能包含 \"/\" ,請選其他名字", +"The name %s is already used in the folder %s. Please choose a different name." => "%s 已經被使用於資料夾 %s ,請換一個名字", +"Not a valid source" => "不是有效的來源", +"Error while downloading %s to %s" => "下載 %s 到 %s 失敗", +"Error when creating the file" => "建立檔案失敗", +"Folder name cannot be empty." => "資料夾名稱不能留空", +"Folder name must not contain \"/\". Please choose a different name." => "資料夾名稱不能包含 \"/\" ,請選其他名字", +"Error when creating the folder" => "建立資料夾失敗", "Unable to set upload directory." => "無法設定上傳目錄", "Invalid Token" => "無效的 token", "No file was uploaded. Unknown error" => "沒有檔案被上傳,原因未知", @@ -13,22 +22,25 @@ $TRANSLATIONS = array( "Missing a temporary folder" => "找不到暫存資料夾", "Failed to write to disk" => "寫入硬碟失敗", "Not enough storage available" => "儲存空間不足", +"Upload failed. Could not get file info." => "上傳失敗,無法取得檔案資訊", +"Upload failed. Could not find uploaded file" => "上傳失敗,找不到上傳的檔案", "Invalid directory." => "無效的資料夾", "Files" => "檔案", +"Unable to upload {filename} as it is a directory or has 0 bytes" => "因為 {filename} 是個目錄或是大小為零,所以無法上傳", "Not enough space available" => "沒有足夠的可用空間", "Upload cancelled." => "上傳已取消", +"Could not get result from server." => "無法從伺服器取回結果", "File upload is in progress. Leaving the page now will cancel the upload." => "檔案上傳中,離開此頁面將會取消上傳。", -"URL cannot be empty." => "URL 不能為空", -"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "無效的資料夾名稱,'Shared' 的使用被 ownCloud 保留", -"Error" => "錯誤", +"URL cannot be empty" => "URL 不能留空", +"In the home folder 'Shared' is a reserved filename" => "在家目錄中不能使用「共享」作為檔名", +"{new_name} already exists" => "{new_name} 已經存在", +"Could not create file" => "無法建立檔案", +"Could not create folder" => "無法建立資料夾", "Share" => "分享", "Delete permanently" => "永久刪除", "Rename" => "重新命名", "Pending" => "等候中", -"{new_name} already exists" => "{new_name} 已經存在", -"replace" => "取代", -"suggest name" => "建議檔名", -"cancel" => "取消", +"Could not rename file" => "無法重新命名", "replaced {new_name} with {old_name}" => "使用 {new_name} 取代 {old_name}", "undo" => "復原", "_%n folder_::_%n folders_" => array("%n 個資料夾"), @@ -36,12 +48,15 @@ $TRANSLATIONS = array( "{dirs} and {files}" => "{dirs} 和 {files}", "_Uploading %n file_::_Uploading %n files_" => array("%n 個檔案正在上傳"), "'.' is an invalid file name." => "'.' 是不合法的檔名", -"File name cannot be empty." => "檔名不能為空", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "檔名不合法,不允許 \\ / < > : \" | ? * 字元", "Your storage is full, files can not be updated or synced anymore!" => "您的儲存空間已滿,沒有辦法再更新或是同步檔案!", "Your storage is almost full ({usedSpacePercent}%)" => "您的儲存空間快要滿了 ({usedSpacePercent}%)", +"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次", +"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "無效的檔案加密私鑰,請在個人設定中更新您的私鑰密語以存取加密的檔案。", "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "加密已經被停用,但是您的舊檔案還是處於已加密的狀態,請前往個人設定以解密這些檔案。", "Your download is being prepared. This might take some time if the files are big." => "正在準備您的下載,若您的檔案較大,將會需要更多時間。", +"Error moving file" => "移動檔案失敗", +"Error" => "錯誤", "Name" => "名稱", "Size" => "大小", "Modified" => "修改時間", @@ -57,14 +72,14 @@ $TRANSLATIONS = array( "Save" => "儲存", "New" => "新增", "Text file" => "文字檔", +"New folder" => "新資料夾", "Folder" => "資料夾", "From link" => "從連結", "Deleted files" => "回收桶", "Cancel upload" => "取消上傳", -"You don’t have write permissions here." => "您在這裡沒有編輯權", +"You don’t have permission to upload or create files here" => "您沒有權限在這裡上傳或建立檔案", "Nothing in here. Upload something!" => "這裡還沒有東西,上傳一些吧!", "Download" => "下載", -"Unshare" => "取消分享", "Delete" => "刪除", "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/lib/app.php b/apps/files/lib/app.php index 579e8676cfcfd7d0152a9386688cc8de5267965d..fea88faa92a872cb17b8757b8d2e952004f246f7 100644 --- a/apps/files/lib/app.php +++ b/apps/files/lib/app.php @@ -25,7 +25,14 @@ namespace OCA\Files; class App { + /** + * @var \OC_L10N + */ private $l10n; + + /** + * @var \OC\Files\View + */ private $view; public function __construct($view, $l10n) { @@ -50,9 +57,24 @@ class App { // rename to "/Shared" is denied if( $dir === '/' and $newname === 'Shared' ) { $result['data'] = array( - 'message' => $this->l10n->t("Invalid folder name. Usage of 'Shared' is reserved by ownCloud") + 'message' => $this->l10n->t("Invalid folder name. Usage of 'Shared' is reserved.") ); - } elseif( + // rename to non-existing folder is denied + } else if (!$this->view->file_exists($dir)) { + $result['data'] = array('message' => (string)$this->l10n->t( + 'The target folder has been moved or deleted.', + array($dir)), + 'code' => 'targetnotfound' + ); + // rename to existing file is denied + } else if ($this->view->file_exists($dir . '/' . $newname)) { + + $result['data'] = array( + 'message' => $this->l10n->t( + "The name %s is already used in the folder %s. Please choose a different name.", + array($newname, $dir)) + ); + } else if ( // rename to "." is denied $newname !== '.' and // rename of "/Shared" is denied @@ -61,12 +83,28 @@ class App { $this->view->rename($dir . '/' . $oldname, $dir . '/' . $newname) ) { // successful rename - $result['success'] = true; - $result['data'] = array( - 'dir' => $dir, - 'file' => $oldname, - 'newname' => $newname + $meta = $this->view->getFileInfo($dir . '/' . $newname); + if ($meta['mimetype'] === 'httpd/unix-directory') { + $meta['type'] = 'dir'; + } + else { + $meta['type'] = 'file'; + } + // these need to be set for determineIcon() + $meta['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($meta['mimetype']); + $meta['directory'] = $dir; + $fileinfo = array( + 'id' => $meta['fileid'], + 'mime' => $meta['mimetype'], + 'size' => $meta['size'], + 'etag' => $meta['etag'], + 'directory' => $meta['directory'], + 'name' => $newname, + 'isPreviewAvailable' => $meta['isPreviewAvailable'], + 'icon' => \OCA\Files\Helper::determineIcon($meta) ); + $result['success'] = true; + $result['data'] = $fileinfo; } else { // rename failed $result['data'] = array( diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php index 709d78a4d45cb65aab21c3f8f00613e141337055..21d1f50e5873b69c1fab71477f381865ffda9b5f 100644 --- a/apps/files/lib/helper.php +++ b/apps/files/lib/helper.php @@ -15,6 +15,7 @@ class Helper return array('uploadMaxFilesize' => $maxUploadFilesize, 'maxHumanFilesize' => $maxHumanFilesize, + 'freeSpace' => $storageInfo['free'], 'usedSpacePercent' => (int)$storageInfo['relative']); } @@ -30,7 +31,7 @@ class Helper if ($sid[0] === 'shared') { return \OC_Helper::mimetypeIcon('dir-shared'); } - if ($sid[0] !== 'local') { + if ($sid[0] !== 'local' and $sid[0] !== 'home') { return \OC_Helper::mimetypeIcon('dir-external'); } } @@ -40,7 +41,7 @@ class Helper if($file['isPreviewAvailable']) { $pathForPreview = $file['directory'] . '/' . $file['name']; - return \OC_Helper::previewIcon($pathForPreview); + return \OC_Helper::previewIcon($pathForPreview) . '&c=' . $file['etag']; } return \OC_Helper::mimetypeIcon($file['mimetype']); } diff --git a/apps/files/templates/admin.php b/apps/files/templates/admin.php index e1ca6afc4ada49f11ba2fa1da5c0df8bd242dec0..a5afd55fbc3938263c9e745be7281175f9fe123a 100644 --- a/apps/files/templates/admin.php +++ b/apps/files/templates/admin.php @@ -2,10 +2,10 @@
- t('File handling')); ?> +

t('File handling')); ?>

- '/> + '/> (t('max. possible: ')); p($_['maxPossibleUploadSize']) ?>) diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php index 96a80738989667198f4605f7705a0b55b6e9e858..939043b2c9f78ccce5f13df392c364311a8b7d08 100644 --- a/apps/files/templates/index.php +++ b/apps/files/templates/index.php @@ -1,37 +1,39 @@ -
-
+
+
t('New'));?>
  • t('Text file'));?>

  • + data-type='file' data-newname='t('New text file')) ?>.txt'>

    t('Text file'));?>

  • t('Folder'));?>

  • -
  • '>

    t('Folder'));?>

  • +
  • t('From link'));?>

+
= 0):?> - + + + + + + + - - +
- - + + />
@@ -42,19 +44,19 @@
-
+ t('You don’t have permission to upload or create files here'))?>
-
0 or $_['ajaxLoad']):?>class="hidden">t('Nothing in here. Upload something!'))?>
+
class="hidden">t('Nothing in here. Upload something!'))?>
- + - - - + @@ -112,7 +105,13 @@ + + + + + + - diff --git a/apps/files/templates/part.list.php b/apps/files/templates/part.list.php index 1e4d4d11c98dbfa6344abe6ec9a1f48e993d7588..f4fb96a7a7c4354cf44a7500058c7ed89dc7ecf1 100644 --- a/apps/files/templates/part.list.php +++ b/apps/files/templates/part.list.php @@ -16,8 +16,9 @@ $totalsize = 0; ?> data-type="" data-mime="" data-size="" + data-etag="" data-permissions=""> - +
+ class="hidden" id='headerName'>
@@ -70,24 +72,15 @@
t('Size')); ?> + class="hidden" id="headerSize">t('Size')); ?>class="hidden" id="headerDate"> t( 'Modified' )); ?> - - - - t('Unshare'))?> - <?php p($l->t('Unshare'))?>" /> - - - - t('Delete'))?> - <?php p($l->t('Delete'))?>" /> - - + + t('Delete'))?> + <?php p($l->t('Delete'))?>" /> +
+ + + - + + + + - - - - - - - diff --git a/apps/files/tests/ajax_rename.php b/apps/files/tests/ajax_rename.php index 8eff978cde095970f24eb93f8253b2ce397b8223..a1a5c8983ba3d304a163776020c02c364dad7d70 100644 --- a/apps/files/tests/ajax_rename.php +++ b/apps/files/tests/ajax_rename.php @@ -22,23 +22,39 @@ */ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase { + private static $user; function setUp() { // mock OC_L10n + if (!self::$user) { + self::$user = uniqid(); + } + \OC_User::createUser(self::$user, 'password'); + \OC_User::setUserId(self::$user); + + \OC\Files\Filesystem::init(self::$user, '/' . self::$user . '/files'); + $l10nMock = $this->getMock('\OC_L10N', array('t'), array(), '', false); $l10nMock->expects($this->any()) ->method('t') ->will($this->returnArgument(0)); - $viewMock = $this->getMock('\OC\Files\View', array('rename', 'normalizePath'), array(), '', false); + $viewMock = $this->getMock('\OC\Files\View', array('rename', 'normalizePath', 'getFileInfo', 'file_exists'), array(), '', false); $viewMock->expects($this->any()) ->method('normalizePath') ->will($this->returnArgument(0)); $viewMock->expects($this->any()) ->method('rename') ->will($this->returnValue(true)); + $this->viewMock = $viewMock; $this->files = new \OCA\Files\App($viewMock, $l10nMock); } + function tearDown() { + $result = \OC_User::deleteUser(self::$user); + $this->assertTrue($result); + \OC\Files\Filesystem::tearDown(); + } + /** * @brief test rename of file/folder named "Shared" */ @@ -47,6 +63,11 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase { $oldname = 'Shared'; $newname = 'new_name'; + $this->viewMock->expects($this->at(0)) + ->method('file_exists') + ->with('/') + ->will($this->returnValue(true)); + $result = $this->files->rename($dir, $oldname, $newname); $expected = array( 'success' => false, @@ -64,17 +85,33 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase { $oldname = 'Shared'; $newname = 'new_name'; + $this->viewMock->expects($this->at(0)) + ->method('file_exists') + ->with('/test') + ->will($this->returnValue(true)); + + $this->viewMock->expects($this->any()) + ->method('getFileInfo') + ->will($this->returnValue(array( + 'fileid' => 123, + 'type' => 'dir', + 'mimetype' => 'httpd/unix-directory', + 'size' => 18, + 'etag' => 'abcdef', + 'directory' => '/', + 'name' => 'new_name', + ))); + $result = $this->files->rename($dir, $oldname, $newname); - $expected = array( - 'success' => true, - 'data' => array( - 'dir' => $dir, - 'file' => $oldname, - 'newname' => $newname - ) - ); - $this->assertEquals($expected, $result); + $this->assertTrue($result['success']); + $this->assertEquals(123, $result['data']['id']); + $this->assertEquals('new_name', $result['data']['name']); + $this->assertEquals('/test', $result['data']['directory']); + $this->assertEquals(18, $result['data']['size']); + $this->assertEquals('httpd/unix-directory', $result['data']['mime']); + $this->assertEquals(\OC_Helper::mimetypeIcon('dir'), $result['data']['icon']); + $this->assertFalse($result['data']['isPreviewAvailable']); } /** @@ -88,7 +125,7 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase { $result = $this->files->rename($dir, $oldname, $newname); $expected = array( 'success' => false, - 'data' => array('message' => "Invalid folder name. Usage of 'Shared' is reserved by ownCloud") + 'data' => array('message' => "Invalid folder name. Usage of 'Shared' is reserved.") ); $this->assertEquals($expected, $result); @@ -102,16 +139,64 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase { $oldname = 'oldname'; $newname = 'newname'; + $this->viewMock->expects($this->at(0)) + ->method('file_exists') + ->with('/') + ->will($this->returnValue(true)); + + $this->viewMock->expects($this->any()) + ->method('getFileInfo') + ->will($this->returnValue(array( + 'fileid' => 123, + 'type' => 'dir', + 'mimetype' => 'httpd/unix-directory', + 'size' => 18, + 'etag' => 'abcdef', + 'directory' => '/', + 'name' => 'new_name', + ))); + $result = $this->files->rename($dir, $oldname, $newname); - $expected = array( - 'success' => true, - 'data' => array( - 'dir' => $dir, - 'file' => $oldname, - 'newname' => $newname - ) - ); - $this->assertEquals($expected, $result); + $this->assertTrue($result['success']); + $this->assertEquals(123, $result['data']['id']); + $this->assertEquals('newname', $result['data']['name']); + $this->assertEquals('/', $result['data']['directory']); + $this->assertEquals(18, $result['data']['size']); + $this->assertEquals('httpd/unix-directory', $result['data']['mime']); + $this->assertEquals('abcdef', $result['data']['etag']); + $this->assertEquals(\OC_Helper::mimetypeIcon('dir'), $result['data']['icon']); + $this->assertFalse($result['data']['isPreviewAvailable']); + } + + /** + * Test rename inside a folder that doesn't exist any more + */ + function testRenameInNonExistingFolder() { + $dir = '/unexist'; + $oldname = 'oldname'; + $newname = 'newname'; + + $this->viewMock->expects($this->at(0)) + ->method('file_exists') + ->with('/unexist') + ->will($this->returnValue(false)); + + $this->viewMock->expects($this->any()) + ->method('getFileInfo') + ->will($this->returnValue(array( + 'fileid' => 123, + 'type' => 'dir', + 'mimetype' => 'httpd/unix-directory', + 'size' => 18, + 'etag' => 'abcdef', + 'directory' => '/unexist', + 'name' => 'new_name', + ))); + + $result = $this->files->rename($dir, $oldname, $newname); + + $this->assertFalse($result['success']); + $this->assertEquals('targetnotfound', $result['data']['code']); } } diff --git a/apps/files/tests/js/fileactionsSpec.js b/apps/files/tests/js/fileactionsSpec.js new file mode 100644 index 0000000000000000000000000000000000000000..8bbc1d3d141b533dff6f59da3da395bf1e3129da --- /dev/null +++ b/apps/files/tests/js/fileactionsSpec.js @@ -0,0 +1,75 @@ +/** +* ownCloud +* +* @author Vincent Petry +* @copyright 2014 Vincent Petry +* +* 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 . +* +*/ + +/* global OC, FileActions, FileList */ +describe('FileActions tests', function() { + var $filesTable; + beforeEach(function() { + // init horrible parameters + var $body = $('body'); + $body.append(''); + $body.append(''); + // dummy files table + $filesTable = $body.append('
'); + }); + afterEach(function() { + $('#dir, #permissions, #filestable').remove(); + }); + it('calling display() sets file actions', function() { + // note: download_url is actually the link target, not the actual download URL... + var $tr = FileList.addFile('testName.txt', 1234, new Date(), false, false, {download_url: 'test/download/url'}); + + // no actions before call + expect($tr.find('.action[data-action=Download]').length).toEqual(0); + expect($tr.find('.action[data-action=Rename]').length).toEqual(0); + expect($tr.find('.action.delete').length).toEqual(0); + + FileActions.display($tr.find('td.filename'), true); + + // actions defined after cal + expect($tr.find('.action[data-action=Download]').length).toEqual(1); + expect($tr.find('.nametext .action[data-action=Rename]').length).toEqual(1); + expect($tr.find('.action.delete').length).toEqual(1); + }); + it('calling display() twice correctly replaces file actions', function() { + var $tr = FileList.addFile('testName.txt', 1234, new Date(), false, false, {download_url: 'test/download/url'}); + + FileActions.display($tr.find('td.filename'), true); + FileActions.display($tr.find('td.filename'), true); + + // actions defined after cal + expect($tr.find('.action[data-action=Download]').length).toEqual(1); + expect($tr.find('.nametext .action[data-action=Rename]').length).toEqual(1); + expect($tr.find('.action.delete').length).toEqual(1); + }); + it('redirects to download URL when clicking download', function() { + var redirectStub = sinon.stub(OC, 'redirect'); + // note: download_url is actually the link target, not the actual download URL... + var $tr = FileList.addFile('test download File.txt', 1234, new Date(), false, false, {download_url: 'test/download/url'}); + FileActions.display($tr.find('td.filename'), true); + + $tr.find('.action[data-action=Download]').click(); + + expect(redirectStub.calledOnce).toEqual(true); + expect(redirectStub.getCall(0).args[0]).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?files=test%20download%20File.txt&dir=%2Fsubdir&download'); + redirectStub.restore(); + }); +}); diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js new file mode 100644 index 0000000000000000000000000000000000000000..c26e65fc4ded9e1b47071a22b26fca5210a859af --- /dev/null +++ b/apps/files/tests/js/filelistSpec.js @@ -0,0 +1,65 @@ +/** +* ownCloud +* +* @author Vincent Petry +* @copyright 2014 Vincent Petry +* +* 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 . +* +*/ + +/* global OC, FileList */ +describe('FileList tests', function() { + beforeEach(function() { + // init horrible parameters + var $body = $('body'); + $body.append(''); + $body.append(''); + // dummy files table + $body.append('
'); + }); + afterEach(function() { + $('#dir, #permissions, #filestable').remove(); + }); + it('generates file element with correct attributes when calling addFile', function() { + var lastMod = new Date(10000); + // note: download_url is actually the link target, not the actual download URL... + var $tr = FileList.addFile('testName.txt', 1234, lastMod, false, false, {download_url: 'test/download/url'}); + + expect($tr).toBeDefined(); + expect($tr[0].tagName.toLowerCase()).toEqual('tr'); + expect($tr.find('a:first').attr('href')).toEqual('test/download/url'); + expect($tr.attr('data-type')).toEqual('file'); + expect($tr.attr('data-file')).toEqual('testName.txt'); + expect($tr.attr('data-size')).toEqual('1234'); + expect($tr.attr('data-permissions')).toEqual('31'); + //expect($tr.attr('data-mime')).toEqual('plain/text'); + }); + it('generates dir element with correct attributes when calling addDir', function() { + var lastMod = new Date(10000); + var $tr = FileList.addDir('testFolder', 1234, lastMod, false); + + expect($tr).toBeDefined(); + expect($tr[0].tagName.toLowerCase()).toEqual('tr'); + expect($tr.attr('data-type')).toEqual('dir'); + expect($tr.attr('data-file')).toEqual('testFolder'); + expect($tr.attr('data-size')).toEqual('1234'); + expect($tr.attr('data-permissions')).toEqual('31'); + //expect($tr.attr('data-mime')).toEqual('httpd/unix-directory'); + }); + it('returns correct download URL', function() { + expect(FileList.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?files=some%20file.txt&dir=%2Fsubdir&download'); + expect(FileList.getDownloadUrl('some file.txt', '/anotherpath/abc')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?files=some%20file.txt&dir=%2Fanotherpath%2Fabc&download'); + }); +}); diff --git a/apps/files/tests/js/filesSpec.js b/apps/files/tests/js/filesSpec.js new file mode 100644 index 0000000000000000000000000000000000000000..018c8ef0f3cff215a718a9491e9fbad12a47c1b2 --- /dev/null +++ b/apps/files/tests/js/filesSpec.js @@ -0,0 +1,85 @@ +/** +* ownCloud +* +* @author Vincent Petry +* @copyright 2014 Vincent Petry +* +* 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 . +* +*/ + +/* global Files */ +describe('Files tests', function() { + describe('File name validation', function() { + it('Validates correct file names', function() { + var fileNames = [ + 'boringname', + 'something.with.extension', + 'now with spaces', + '.a', + '..a', + '.dotfile', + 'single\'quote', + ' spaces before', + 'spaces after ', + 'allowed chars including the crazy ones $%&_-^@!,()[]{}=;#', + '汉字也能用', + 'und Ümläüte sind auch willkommen' + ]; + for ( var i = 0; i < fileNames.length; i++ ) { + var error = false; + try { + expect(Files.isFileNameValid(fileNames[i])).toEqual(true); + } + catch (e) { + error = e; + } + expect(error).toEqual(false); + } + }); + it('Detects invalid file names', function() { + var fileNames = [ + '', + ' ', + '.', + '..', + 'back\\slash', + 'sl/ash', + 'ltgt', + 'col:on', + 'double"quote', + 'pi|pe', + 'dont?ask?questions?', + 'super*star', + 'new\nline', + ' ..', + '.. ', + '. ', + ' .' + ]; + for ( var i = 0; i < fileNames.length; i++ ) { + var threwException = false; + try { + Files.isFileNameValid(fileNames[i]); + console.error('Invalid file name not detected:', fileNames[i]); + } + catch (e) { + threwException = true; + } + expect(threwException).toEqual(true); + } + }); + }); +}); diff --git a/apps/files/triggerupdate.php b/apps/files/triggerupdate.php index 0e29edbba35ef32f821d9782ba5ebe95e4e21cbd..a37b9823add43ac72061790d987a9ec7610c8ab8 100644 --- a/apps/files/triggerupdate.php +++ b/apps/files/triggerupdate.php @@ -6,6 +6,7 @@ if (OC::$CLI) { if (count($argv) === 2) { $file = $argv[1]; list(, $user) = explode('/', $file); + OCP\JSON::checkUserExists($owner); OC_Util::setupFS($user); $view = new \OC\Files\View(''); /** diff --git a/apps/files_encryption/ajax/getMigrationStatus.php b/apps/files_encryption/ajax/getMigrationStatus.php new file mode 100644 index 0000000000000000000000000000000000000000..17469a1af0c2e7979306d8008a343bb99c8bba2a --- /dev/null +++ b/apps/files_encryption/ajax/getMigrationStatus.php @@ -0,0 +1,28 @@ + + * This file is licensed under the Affero General Public License version 3 or later. + * See the COPYING-README file. + * + * @brief check migration status + */ +use OCA\Encryption\Util; + +\OCP\JSON::checkAppEnabled('files_encryption'); + +$loginname = isset($_POST['user']) ? $_POST['user'] : ''; +$password = isset($_POST['password']) ? $_POST['password'] : ''; + +$migrationCompleted = true; + +if ($loginname !== '' && $password !== '') { + $username = \OCP\User::checkPassword($loginname, $password); + if ($username) { + $util = new Util(new \OC_FilesystemView('/'), $username); + if ($util->getMigrationStatus() !== Util::MIGRATION_COMPLETED) { + $migrationCompleted = false; + } + } +} + +\OCP\JSON::success(array('data' => array('migrationCompleted' => $migrationCompleted))); diff --git a/apps/files_encryption/ajax/updatePrivateKeyPassword.php b/apps/files_encryption/ajax/updatePrivateKeyPassword.php index 1e6644da576f56bd8d8daae01506f2032942658a..29c72952ae9de4457cc5d63340c4caef9658615f 100644 --- a/apps/files_encryption/ajax/updatePrivateKeyPassword.php +++ b/apps/files_encryption/ajax/updatePrivateKeyPassword.php @@ -48,6 +48,7 @@ if ($decryptedKey) { // success or failure if ($return) { + $session->setInitialized(\OCA\Encryption\Session::INIT_SUCCESSFUL); \OCP\JSON::success(array('data' => array('message' => $l->t('Private key password successfully updated.')))); } else { \OCP\JSON::error(array('data' => array('message' => $l->t('Could not update the private key password. Maybe the old password was not correct.')))); diff --git a/apps/files_encryption/appinfo/app.php b/apps/files_encryption/appinfo/app.php index 5b62b84e22366a2ed5233d6fa1bcf72b4bb2e7a7..fd9aa429b01622fee7c1aa719c2bd5c7c66aa711 100644 --- a/apps/files_encryption/appinfo/app.php +++ b/apps/files_encryption/appinfo/app.php @@ -10,6 +10,8 @@ OC::$CLASSPATH['OCA\Encryption\Session'] = 'files_encryption/lib/session.php'; OC::$CLASSPATH['OCA\Encryption\Capabilities'] = 'files_encryption/lib/capabilities.php'; OC::$CLASSPATH['OCA\Encryption\Helper'] = 'files_encryption/lib/helper.php'; +\OCP\Util::addscript('files_encryption', 'detect-migration'); + if (!OC_Config::getValue('maintenance', false)) { OC_FileProxy::register(new OCA\Encryption\Proxy()); @@ -43,23 +45,6 @@ if (!OC_Config::getValue('maintenance', false)) { if($sessionReady) { $session = new \OCA\Encryption\Session($view); } - - $user = \OCP\USER::getUser(); - // check if user has a private key - if ($sessionReady === false - || (!$view->file_exists('/' . $user . '/files_encryption/' . $user . '.private.key') - && OCA\Encryption\Crypt::mode() === 'server') - ) { - - // Force the user to log-in again if the encryption key isn't unlocked - // (happens when a user is logged in before the encryption app is - // enabled) - OCP\User::logout(); - - header("Location: " . OC::$WEBROOT . '/'); - - exit(); - } } } else { // logout user if we are in maintenance to force re-login @@ -69,4 +54,3 @@ if (!OC_Config::getValue('maintenance', false)) { // Register settings scripts OCP\App::registerAdmin('files_encryption', 'settings-admin'); OCP\App::registerPersonal('files_encryption', 'settings-personal'); - diff --git a/apps/files_encryption/appinfo/info.xml b/apps/files_encryption/appinfo/info.xml index 9d495916d26495482312b6838e70e5e1772ea9ec..b6d9d6bb0a3c090f3447577803fab428caefc71c 100644 --- a/apps/files_encryption/appinfo/info.xml +++ b/apps/files_encryption/appinfo/info.xml @@ -2,11 +2,15 @@ files_encryption Encryption - The new ownCloud 5 files encryption system. After the app was enabled you need to re-login to initialize your encryption keys. + The ownCloud files encryption system provides server side-encryption. After the app was enabled you need to re-login to initialize your encryption keys. AGPL Sam Tuke, Bjoern Schiessle, Florin Peter 4 true + + http://doc.owncloud.org/server/6.0/user_manual/files/encryption.html + http://doc.owncloud.org/server/6.0/admin_manual/configuration/configuration_encryption.html + false diff --git a/apps/files_encryption/appinfo/version b/apps/files_encryption/appinfo/version index bd73f47072b1fe4b9914ec14a7f6d47fcc8f816a..2eb3c4fe4eebcdea3da0790cc0ba74cb286ec4f4 100644 --- a/apps/files_encryption/appinfo/version +++ b/apps/files_encryption/appinfo/version @@ -1 +1 @@ -0.4 +0.5 diff --git a/apps/files_encryption/files/error.php b/apps/files_encryption/files/error.php index 2dd27257abe45381c9cf357ffa51e23da9f1df91..317cea05a128cc8a8cc930c3066c12a266486dc4 100644 --- a/apps/files_encryption/files/error.php +++ b/apps/files_encryption/files/error.php @@ -1,23 +1,47 @@ t('Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files.'); + if (isset($_GET['errorCode'])) { + $errorCode = $_GET['errorCode']; + switch ($errorCode) { + case \OCA\Encryption\Crypt::ENCRYPTION_NOT_INITIALIZED_ERROR: + $errorMsg = $l->t('Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app.'); + break; + case \OCA\Encryption\Crypt::ENCRYPTION_PRIVATE_KEY_NOT_VALID_ERROR: + $theme = new OC_Defaults(); + $errorMsg = $l->t('Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files.', array($theme->getName())); + break; + case \OCA\Encryption\Crypt::ENCRYPTION_NO_SHARE_KEY_FOUND: + $errorMsg = $l->t('Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you.'); + break; + default: + $errorMsg = $l->t("Unknown error please check your system settings or contact your administrator"); + break; + } + } else { + $errorCode = \OCA\Encryption\Crypt::ENCRYPTION_UNKNOWN_ERROR; + $errorMsg = $l->t("Unknown error please check your system settings or contact your administrator"); + } - if(isset($_GET['p']) && $_GET['p'] === '1') { - header('HTTP/1.0 404 ' . $errorMsg); + if (isset($_GET['p']) && $_GET['p'] === '1') { + header('HTTP/1.0 403 ' . $errorMsg); } - // check if ajax request - if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { +// check if ajax request + if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { \OCP\JSON::error(array('data' => array('message' => $errorMsg))); } else { - header('HTTP/1.0 404 ' . $errorMsg); + header('HTTP/1.0 403 ' . $errorMsg); $tmpl = new OC_Template('files_encryption', 'invalid_private_key', 'guest'); + $tmpl->assign('message', $errorMsg); + $tmpl->assign('errorCode', $errorCode); $tmpl->printPage(); } exit; } + diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/hooks/hooks.php index d9221c6e828a2539ed61ffe184f7e589ca978444..4c4b3f2040ffd84a6da6da45205d64242a78917f 100644 --- a/apps/files_encryption/hooks/hooks.php +++ b/apps/files_encryption/hooks/hooks.php @@ -30,11 +30,22 @@ use OC\Files\Filesystem; */ class Hooks { + // file for which we want to rename the keys after the rename operation was successful + private static $renamedFiles = array(); + // file for which we want to delete the keys after the delete operation was successful + private static $deleteFiles = array(); + /** * @brief Startup encryption backend upon user login * @note This method should never be called for users using client side encryption */ public static function login($params) { + + if (\OCP\App::isEnabled('files_encryption') === false) { + return true; + } + + $l = new \OC_L10N('files_encryption'); $view = new \OC_FilesystemView('/'); @@ -92,8 +103,6 @@ class Hooks { } // Encrypt existing user files: - // This serves to upgrade old versions of the encryption - // app (see appinfo/spec.txt) if ( $util->encryptAll('/' . $params['uid'] . '/' . 'files', $session->getLegacyKey(), $params['password']) ) { @@ -119,11 +128,12 @@ class Hooks { * @note This method should never be called for users using client side encryption */ public static function postCreateUser($params) { - $view = new \OC_FilesystemView('/'); - $util = new Util($view, $params['uid']); - - Helper::setupUser($util, $params['password']); + if (\OCP\App::isEnabled('files_encryption')) { + $view = new \OC_FilesystemView('/'); + $util = new Util($view, $params['uid']); + Helper::setupUser($util, $params['password']); + } } /** @@ -131,26 +141,31 @@ class Hooks { * @note This method should never be called for users using client side encryption */ public static function postDeleteUser($params) { - $view = new \OC_FilesystemView('/'); - // cleanup public key - $publicKey = '/public-keys/' . $params['uid'] . '.public.key'; + if (\OCP\App::isEnabled('files_encryption')) { + $view = new \OC_FilesystemView('/'); - // Disable encryption proxy to prevent recursive calls - $proxyStatus = \OC_FileProxy::$enabled; - \OC_FileProxy::$enabled = false; + // cleanup public key + $publicKey = '/public-keys/' . $params['uid'] . '.public.key'; - $view->unlink($publicKey); + // Disable encryption proxy to prevent recursive calls + $proxyStatus = \OC_FileProxy::$enabled; + \OC_FileProxy::$enabled = false; - \OC_FileProxy::$enabled = $proxyStatus; + $view->unlink($publicKey); + + \OC_FileProxy::$enabled = $proxyStatus; + } } /** * @brief If the password can't be changed within ownCloud, than update the key password in advance. */ public static function preSetPassphrase($params) { - if ( ! \OC_User::canUserChangePassword($params['uid']) ) { - self::setPassphrase($params); + if (\OCP\App::isEnabled('files_encryption')) { + if ( ! \OC_User::canUserChangePassword($params['uid']) ) { + self::setPassphrase($params); + } } } @@ -160,14 +175,18 @@ class Hooks { */ public static function setPassphrase($params) { + if (\OCP\App::isEnabled('files_encryption') === false) { + return true; + } + // Only attempt to change passphrase if server-side encryption // is in use (client-side encryption does not have access to // the necessary keys) if (Crypt::mode() === 'server') { - if ($params['uid'] === \OCP\User::getUser()) { + $view = new \OC_FilesystemView('/'); - $view = new \OC_FilesystemView('/'); + if ($params['uid'] === \OCP\User::getUser()) { $session = new \OCA\Encryption\Session($view); @@ -188,36 +207,41 @@ class Hooks { } else { // admin changed the password for a different user, create new keys and reencrypt file keys $user = $params['uid']; - $recoveryPassword = $params['recoveryPassword']; - $newUserPassword = $params['password']; + $util = new Util($view, $user); + $recoveryPassword = isset($params['recoveryPassword']) ? $params['recoveryPassword'] : null; - $view = new \OC_FilesystemView('/'); + if (($util->recoveryEnabledForUser() && $recoveryPassword) + || !$util->userKeysExists()) { - // make sure that the users home is mounted - \OC\Files\Filesystem::initMountPoints($user); + $recoveryPassword = $params['recoveryPassword']; + $newUserPassword = $params['password']; - $keypair = Crypt::createKeypair(); + // make sure that the users home is mounted + \OC\Files\Filesystem::initMountPoints($user); - // Disable encryption proxy to prevent recursive calls - $proxyStatus = \OC_FileProxy::$enabled; - \OC_FileProxy::$enabled = false; + $keypair = Crypt::createKeypair(); - // Save public key - $view->file_put_contents('/public-keys/' . $user . '.public.key', $keypair['publicKey']); + // Disable encryption proxy to prevent recursive calls + $proxyStatus = \OC_FileProxy::$enabled; + \OC_FileProxy::$enabled = false; - // Encrypt private key empty passphrase - $encryptedPrivateKey = Crypt::symmetricEncryptFileContent($keypair['privateKey'], $newUserPassword); + // Save public key + $view->file_put_contents('/public-keys/' . $user . '.public.key', $keypair['publicKey']); - // Save private key - $view->file_put_contents( - '/' . $user . '/files_encryption/' . $user . '.private.key', $encryptedPrivateKey); + // Encrypt private key empty passphrase + $encryptedPrivateKey = Crypt::symmetricEncryptFileContent($keypair['privateKey'], $newUserPassword); - if ($recoveryPassword) { // if recovery key is set we can re-encrypt the key files - $util = new Util($view, $user); - $util->recoverUsersFiles($recoveryPassword); - } + // Save private key + $view->file_put_contents( + '/' . $user . '/files_encryption/' . $user . '.private.key', $encryptedPrivateKey); - \OC_FileProxy::$enabled = $proxyStatus; + if ($recoveryPassword) { // if recovery key is set we can re-encrypt the key files + $util = new Util($view, $user); + $util->recoverUsersFiles($recoveryPassword); + } + + \OC_FileProxy::$enabled = $proxyStatus; + } } } } @@ -230,6 +254,10 @@ class Hooks { */ public static function preShared($params) { + if (\OCP\App::isEnabled('files_encryption') === false) { + return true; + } + $l = new \OC_L10N('files_encryption'); $users = array(); $view = new \OC\Files\View('/public-keys/'); @@ -281,6 +309,10 @@ class Hooks { // [run] => whether emitting script should continue to run // TODO: Should other kinds of item be encrypted too? + if (\OCP\App::isEnabled('files_encryption') === false) { + return true; + } + if ($params['itemType'] === 'file' || $params['itemType'] === 'folder') { $view = new \OC_FilesystemView('/'); @@ -296,8 +328,8 @@ class Hooks { // get the parent from current share $parent = $util->getShareParent($params['parent']); - // if parent is file the it is an 1:1 share - if ($parent['item_type'] === 'file') { + // if parent has the same type than the child it is a 1:1 share + if ($parent['item_type'] === $params['itemType']) { // prefix path with Shared $path = '/Shared' . $parent['file_target']; @@ -375,6 +407,10 @@ class Hooks { // [shareWith] => test1 // [itemParent] => + if (\OCP\App::isEnabled('files_encryption') === false) { + return true; + } + if ($params['itemType'] === 'file' || $params['itemType'] === 'folder') { $view = new \OC_FilesystemView('/'); @@ -448,6 +484,18 @@ class Hooks { } } + /** + * @brief mark file as renamed so that we know the original source after the file was renamed + * @param array $params with the old path and the new path + */ + public static function preRename($params) { + $util = new Util(new \OC_FilesystemView('/'), \OCP\User::getUser()); + list($ownerOld, $pathOld) = $util->getUidAndFilename($params['oldpath']); + self::$renamedFiles[$params['oldpath']] = array( + 'uid' => $ownerOld, + 'path' => $pathOld); + } + /** * @brief after a file is renamed, rename its keyfile and share-keys also fix the file size and fix also the sharing * @param array with oldpath and newpath @@ -456,6 +504,11 @@ class Hooks { * of the stored versions along the actual file */ public static function postRename($params) { + + if (\OCP\App::isEnabled('files_encryption') === false) { + return true; + } + // Disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; @@ -465,19 +518,32 @@ class Hooks { $userId = \OCP\User::getUser(); $util = new Util($view, $userId); + if (isset(self::$renamedFiles[$params['oldpath']]['uid']) && + isset(self::$renamedFiles[$params['oldpath']]['path'])) { + $ownerOld = self::$renamedFiles[$params['oldpath']]['uid']; + $pathOld = self::$renamedFiles[$params['oldpath']]['path']; + } else { + \OCP\Util::writeLog('Encryption library', "can't get path and owner from the file before it was renamed", \OCP\Util::ERROR); + return false; + } + + list($ownerNew, $pathNew) = $util->getUidAndFilename($params['newpath']); + // Format paths to be relative to user files dir - if ($util->isSystemWideMountPoint($params['oldpath'])) { - $baseDir = 'files_encryption/'; - $oldKeyfilePath = $baseDir . 'keyfiles/' . $params['oldpath']; + if ($util->isSystemWideMountPoint($pathOld)) { + $oldKeyfilePath = 'files_encryption/keyfiles/' . $pathOld; + $oldShareKeyPath = 'files_encryption/share-keys/' . $pathOld; } else { - $baseDir = $userId . '/' . 'files_encryption/'; - $oldKeyfilePath = $baseDir . 'keyfiles/' . $params['oldpath']; + $oldKeyfilePath = $ownerOld . '/' . 'files_encryption/keyfiles/' . $pathOld; + $oldShareKeyPath = $ownerOld . '/' . 'files_encryption/share-keys/' . $pathOld; } - if ($util->isSystemWideMountPoint($params['newpath'])) { - $newKeyfilePath = $baseDir . 'keyfiles/' . $params['newpath']; + if ($util->isSystemWideMountPoint($pathNew)) { + $newKeyfilePath = 'files_encryption/keyfiles/' . $pathNew; + $newShareKeyPath = 'files_encryption/share-keys/' . $pathNew; } else { - $newKeyfilePath = $baseDir . 'keyfiles/' . $params['newpath']; + $newKeyfilePath = $ownerNew . '/files_encryption/keyfiles/' . $pathNew; + $newShareKeyPath = $ownerNew . '/files_encryption/share-keys/' . $pathNew; } // add key ext if this is not an folder @@ -486,11 +552,11 @@ class Hooks { $newKeyfilePath .= '.key'; // handle share-keys - $localKeyPath = $view->getLocalFile($baseDir . 'share-keys/' . $params['oldpath']); + $localKeyPath = $view->getLocalFile($oldShareKeyPath); $escapedPath = Helper::escapeGlobPattern($localKeyPath); $matches = glob($escapedPath . '*.shareKey'); foreach ($matches as $src) { - $dst = \OC\Files\Filesystem::normalizePath(str_replace($params['oldpath'], $params['newpath'], $src)); + $dst = \OC\Files\Filesystem::normalizePath(str_replace($pathOld, $pathNew, $src)); // create destination folder if not exists if (!file_exists(dirname($dst))) { @@ -502,15 +568,13 @@ class Hooks { } else { // handle share-keys folders - $oldShareKeyfilePath = $baseDir . 'share-keys/' . $params['oldpath']; - $newShareKeyfilePath = $baseDir . 'share-keys/' . $params['newpath']; // create destination folder if not exists - if (!$view->file_exists(dirname($newShareKeyfilePath))) { - $view->mkdir(dirname($newShareKeyfilePath), 0750, true); + if (!$view->file_exists(dirname($newShareKeyPath))) { + $view->mkdir(dirname($newShareKeyPath), 0750, true); } - $view->rename($oldShareKeyfilePath, $newShareKeyfilePath); + $view->rename($oldShareKeyPath, $newShareKeyPath); } // Rename keyfile so it isn't orphaned @@ -525,33 +589,109 @@ class Hooks { } // build the path to the file - $newPath = '/' . $userId . '/files' . $params['newpath']; - $newPathRelative = $params['newpath']; + $newPath = '/' . $ownerNew . '/files' . $pathNew; if ($util->fixFileSize($newPath)) { // get sharing app state $sharingEnabled = \OCP\Share::isEnabled(); // get users - $usersSharing = $util->getSharingUsersArray($sharingEnabled, $newPathRelative); + $usersSharing = $util->getSharingUsersArray($sharingEnabled, $pathNew); // update sharing-keys - $util->setSharedFileKeyfiles($session, $usersSharing, $newPathRelative); + $util->setSharedFileKeyfiles($session, $usersSharing, $pathNew); } \OC_FileProxy::$enabled = $proxyStatus; } /** - * set migration status back to '0' so that all new files get encrypted + * set migration status and the init status back to '0' so that all new files get encrypted * if the app gets enabled again * @param array $params contains the app ID */ public static function preDisable($params) { if ($params['app'] === 'files_encryption') { - $query = \OC_DB::prepare('UPDATE `*PREFIX*encryption` SET `migration_status`=0'); - $query->execute(); + + $setMigrationStatus = \OC_DB::prepare('UPDATE `*PREFIX*encryption` SET `migration_status`=0'); + $setMigrationStatus->execute(); + + $session = new \OCA\Encryption\Session(new \OC\Files\View('/')); + $session->setInitialized(\OCA\Encryption\Session::NOT_INITIALIZED); + } + } + + /** + * set the init status to 'NOT_INITIALIZED' (0) if the app gets enabled + * @param array $params contains the app ID + */ + public static function postEnable($params) { + if ($params['app'] === 'files_encryption') { + $session = new \OCA\Encryption\Session(new \OC\Files\View('/')); + $session->setInitialized(\OCA\Encryption\Session::NOT_INITIALIZED); + } + } + + /** + * @brief if the file was really deleted we remove the encryption keys + * @param array $params + * @return boolean + */ + public static function postDelete($params) { + + if (!isset(self::$deleteFiles[$params[\OC\Files\Filesystem::signal_param_path]])) { + return true; + } + + $deletedFile = self::$deleteFiles[$params[\OC\Files\Filesystem::signal_param_path]]; + $path = $deletedFile['path']; + $user = $deletedFile['uid']; + + // we don't need to remember the file any longer + unset(self::$deleteFiles[$params[\OC\Files\Filesystem::signal_param_path]]); + + $view = new \OC\Files\View('/'); + + // return if the file still exists and wasn't deleted correctly + if ($view->file_exists('/' . $user . '/files/' . $path)) { + return true; } + + // Disable encryption proxy to prevent recursive calls + $proxyStatus = \OC_FileProxy::$enabled; + \OC_FileProxy::$enabled = false; + + // Delete keyfile & shareKey so it isn't orphaned + if (!Keymanager::deleteFileKey($view, $path, $user)) { + \OCP\Util::writeLog('Encryption library', + 'Keyfile or shareKey could not be deleted for file "' . $user.'/files/'.$path . '"', \OCP\Util::ERROR); + } + + Keymanager::delAllShareKeys($view, $user, $path); + + \OC_FileProxy::$enabled = $proxyStatus; + } + + /** + * @brief remember the file which should be deleted and it's owner + * @param array $params + * @return boolean + */ + public static function preDelete($params) { + $path = $params[\OC\Files\Filesystem::signal_param_path]; + + // skip this method if the trash bin is enabled or if we delete a file + // outside of /data/user/files + if (\OCP\App::isEnabled('files_trashbin')) { + return true; + } + + $util = new Util(new \OC_FilesystemView('/'), \OCP\USER::getUser()); + list($owner, $ownerPath) = $util->getUidAndFilename($path); + + self::$deleteFiles[$params[\OC\Files\Filesystem::signal_param_path]] = array( + 'uid' => $owner, + 'path' => $ownerPath); } } diff --git a/apps/files_encryption/js/detect-migration.js b/apps/files_encryption/js/detect-migration.js new file mode 100644 index 0000000000000000000000000000000000000000..301e77f24f7e88b38ca1678b437cb316432a1573 --- /dev/null +++ b/apps/files_encryption/js/detect-migration.js @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2013 + * Bjoern Schiessle + * This file is licensed under the Affero General Public License version 3 or later. + * See the COPYING-README file. + */ + + +$(document).ready(function(){ + $('form[name="login"]').on('submit', function() { + var user = $('#user').val(); + var password = $('#password').val(); + $.ajax({ + type: 'POST', + url: OC.linkTo('files_encryption', 'ajax/getMigrationStatus.php'), + dataType: 'json', + data: {user: user, password: password}, + async: false, + success: function(response) { + if (response.data.migrationCompleted === false) { + var message = t('files_encryption', 'Initial encryption started... This can take some time. Please wait.'); + $('#messageText').text(message); + $('#message').removeClass('hidden').addClass('update'); + } + } + }); + }); + +}); diff --git a/apps/files_encryption/js/settings-admin.js b/apps/files_encryption/js/settings-admin.js index 6647c621e7b90f3f12c94ed779de577023fd0904..c2140a6f1eb152692e8da411e21099660d5e329c 100644 --- a/apps/files_encryption/js/settings-admin.js +++ b/apps/files_encryption/js/settings-admin.js @@ -1,6 +1,8 @@ /** - * Copyright (c) 2013, Sam Tuke , Robin Appelman - * + * Copyright (c) 2013 + * Sam Tuke + * Robin Appelman + * Bjoern Schiessle * This file is licensed under the Affero General Public License version 3 or later. * See the COPYING-README file. */ @@ -31,22 +33,23 @@ $(document).ready(function(){ // Trigger ajax on recoveryAdmin status change var enabledStatus = $('#adminEnableRecovery').val(); - $('input:password[name="recoveryPassword"]').keyup(function(event) { - var recoveryPassword = $( '#recoveryPassword' ).val(); + $('input:password[name="encryptionRecoveryPassword"]').keyup(function(event) { + var recoveryPassword = $( '#encryptionRecoveryPassword' ).val(); + var recoveryPasswordRepeated = $( '#repeatEncryptionRecoveryPassword' ).val(); var checkedButton = $('input:radio[name="adminEnableRecovery"]:checked').val(); var uncheckedValue = (1+parseInt(checkedButton)) % 2; - if (recoveryPassword != '' ) { + if (recoveryPassword !== '' && recoveryPassword === recoveryPasswordRepeated) { $('input:radio[name="adminEnableRecovery"][value="'+uncheckedValue.toString()+'"]').removeAttr("disabled"); } else { $('input:radio[name="adminEnableRecovery"][value="'+uncheckedValue.toString()+'"]').attr("disabled", "true"); } }); - $( 'input:radio[name="adminEnableRecovery"]' ).change( + $( 'input:radio[name="adminEnableRecovery"]' ).change( function() { var recoveryStatus = $( this ).val(); var oldStatus = (1+parseInt(recoveryStatus)) % 2; - var recoveryPassword = $( '#recoveryPassword' ).val(); + var recoveryPassword = $( '#encryptionRecoveryPassword' ).val(); $.post( OC.filePath( 'files_encryption', 'ajax', 'adminrecovery.php' ) , { adminEnableRecovery: recoveryStatus, recoveryPassword: recoveryPassword } @@ -57,11 +60,10 @@ $(document).ready(function(){ } else { OC.Notification.hide(); if (recoveryStatus === "0") { - $('button:button[name="submitChangeRecoveryKey"]').attr("disabled", "true"); - $('input:password[name="changeRecoveryPassword"]').attr("disabled", "true"); - $('input:password[name="changeRecoveryPassword"]').val(""); + $('p[name="changeRecoveryPasswordBlock"]').addClass("hidden"); } else { - $('input:password[name="changeRecoveryPassword"]').removeAttr("disabled"); + $('input:password[name="changeRecoveryPassword"]').val(""); + $('p[name="changeRecoveryPasswordBlock"]').removeClass("hidden"); } } } @@ -72,9 +74,11 @@ $(document).ready(function(){ // change recovery password $('input:password[name="changeRecoveryPassword"]').keyup(function(event) { - var oldRecoveryPassword = $('input:password[id="oldRecoveryPassword"]').val(); - var newRecoveryPassword = $('input:password[id="newRecoveryPassword"]').val(); - if (newRecoveryPassword != '' && oldRecoveryPassword != '' ) { + var oldRecoveryPassword = $('#oldEncryptionRecoveryPassword').val(); + var newRecoveryPassword = $('#newEncryptionRecoveryPassword').val(); + var newRecoveryPasswordRepeated = $('#repeatedNewEncryptionRecoveryPassword').val(); + + if (newRecoveryPassword !== '' && oldRecoveryPassword !== '' && newRecoveryPassword === newRecoveryPasswordRepeated) { $('button:button[name="submitChangeRecoveryKey"]').removeAttr("disabled"); } else { $('button:button[name="submitChangeRecoveryKey"]').attr("disabled", "true"); @@ -83,8 +87,8 @@ $(document).ready(function(){ $('button:button[name="submitChangeRecoveryKey"]').click(function() { - var oldRecoveryPassword = $('input:password[id="oldRecoveryPassword"]').val(); - var newRecoveryPassword = $('input:password[id="newRecoveryPassword"]').val(); + var oldRecoveryPassword = $('#oldEncryptionRecoveryPassword').val(); + var newRecoveryPassword = $('#newEncryptionRecoveryPassword').val(); OC.msg.startSaving('#encryption .msg'); $.post( OC.filePath( 'files_encryption', 'ajax', 'changeRecoveryPassword.php' ) @@ -98,5 +102,5 @@ $(document).ready(function(){ } ); }); - + }); diff --git a/apps/files_encryption/l10n/ca.php b/apps/files_encryption/l10n/ca.php index 14d7992ad5da4773ce995209e3a9af8b63ce98df..33d2754483c860faf8692d5a46b456a2a153faab 100644 --- a/apps/files_encryption/l10n/ca.php +++ b/apps/files_encryption/l10n/ca.php @@ -8,22 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "No s'ha pogut canviar la contrasenya. Potser la contrasenya anterior no era correcta.", "Private key password successfully updated." => "La contrasenya de la clau privada s'ha actualitzat.", "Could not update the private key password. Maybe the old password was not correct." => "No s'ha pogut actualitzar la contrasenya de la clau privada. Potser la contrasenya anterior no era correcta.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "La clau privada no és vàlida! Probablement la contrasenya va ser canviada des de fora del sistema ownCloud (per exemple, en el directori de l'empresa). Vostè pot actualitzar la contrasenya de clau privada en la seva configuració personal per poder recuperar l'accés en els arxius xifrats.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "L'aplicació d'encriptació no està inicialitzada! Potser l'aplicació d'encriptació ha estat reiniciada durant la sessió. Intenteu sortir i acreditar-vos de nou per reinicialitzar l'aplicació d'encriptació.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "La clau privada no és vàlida! Probablement la contrasenya va ser canviada des de fora de %s (per exemple, en el directori de l'empresa). Vostè pot actualitzar la contrasenya de clau privada en la seva configuració personal per poder recuperar l'accés en els arxius xifrats.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "No es pot desencriptar aquest fitxer, probablement és un fitxer compartit. Demaneu al propietari del fitxer que el comparteixi de nou amb vós.", +"Unknown error please check your system settings or contact your administrator" => "Error desconegut. Comproveu l'arranjament del sistema o contacteu amb l'administrador", "Missing requirements." => "Manca de requisits.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Assegureu-vos que teniu instal·lat PHP 5.3.3 o una versió superior i que està activat Open SSL i habilitada i configurada correctament l'extensió de PHP. De moment, l'aplicació d'encriptació s'ha desactivat.", "Following users are not set up for encryption:" => "Els usuaris següents no estan configurats per a l'encriptació:", +"Initial encryption started... This can take some time. Please wait." => "La encriptació inicial ha començat... Pot trigar una estona, espereu.", "Saving..." => "Desant...", -"Your private key is not valid! Maybe the your password was changed from outside." => "La vostra clau privada no és vàlida! Potser la vostra contrasenya ha canviat des de fora.", -"You can unlock your private key in your " => "Podeu desbloquejar la clau privada en el vostre", +"Go directly to your " => "Vés directament a", "personal settings" => "arranjament personal", "Encryption" => "Xifrat", "Enable recovery key (allow to recover users files in case of password loss):" => "Activa la clau de recuperació (permet recuperar fitxers d'usuaris en cas de pèrdua de contrasenya):", "Recovery key password" => "Clau de recuperació de la contrasenya", +"Repeat Recovery key password" => "Repetiu la clau de recuperació de contrasenya", "Enabled" => "Activat", "Disabled" => "Desactivat", "Change recovery key password:" => "Canvia la clau de recuperació de contrasenya:", "Old Recovery key password" => "Antiga clau de recuperació de contrasenya", "New Recovery key password" => "Nova clau de recuperació de contrasenya", +"Repeat New Recovery key password" => "Repetiu la nova clau de recuperació de contrasenya", "Change Password" => "Canvia la contrasenya", "Your private key password no longer match your log-in password:" => "La clau privada ja no es correspon amb la contrasenya d'accés:", "Set your old private key password to your current log-in password." => "Establiu la vostra contrasenya clau en funció de la contrasenya actual d'accés.", diff --git a/apps/files_encryption/l10n/cs_CZ.php b/apps/files_encryption/l10n/cs_CZ.php index 89f63cc1cdd2fd18dd90737aa043f9786c7e5a11..cf2776371df2087f932484ba4ce47d44e5b7fa61 100644 --- a/apps/files_encryption/l10n/cs_CZ.php +++ b/apps/files_encryption/l10n/cs_CZ.php @@ -8,22 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Změna hesla se nezdařila. Pravděpodobně nebylo stávající heslo zadáno správně.", "Private key password successfully updated." => "Heslo soukromého klíče úspěšně aktualizováno.", "Could not update the private key password. Maybe the old password was not correct." => "Nelze aktualizovat heslo soukromého klíče. Možná nebylo staré heslo správně.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Váš soukromý klíč není platný! Pravděpodobně bylo heslo změněno vně systému ownCloud (např. ve vašem firemním adresáři). Heslo vašeho soukromého klíče můžete změnit ve svém osobním nastavení pro obnovení přístupu k vašim zašifrovaným souborům.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Aplikace pro šifrování není inicializována! Je možné, že aplikace byla znovu aktivována během vašeho přihlášení. Zkuste se prosím odhlásit a znovu přihlásit pro provedení inicializace šifrovací aplikace.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Váš soukromý klíč není platný! Pravděpodobně bylo vaše heslo změněno vně systému %s (např. ve vašem firemním adresáři). Heslo vašeho soukromého klíče můžete změnit ve svém osobním nastavení pro obnovení přístupu k vašim zašifrovaným souborům.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Tento soubor se nepodařilo dešifrovat, pravděpodobně je sdílený. Požádejte prosím majitele souboru, aby jej s vámi znovu sdílel.", +"Unknown error please check your system settings or contact your administrator" => "Neznámá chyba, zkontrolujte vaše systémová nastavení nebo kontaktujte vašeho správce", "Missing requirements." => "Nesplněné závislosti.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Ujistěte se prosím, že máte nainstalované PHP 5.3.3 nebo novější a že máte povolené a správně nakonfigurované OpenSSL včetně jeho rozšíření pro PHP. Prozatím byla aplikace pro šifrování vypnuta.", "Following users are not set up for encryption:" => "Následující uživatelé nemají nastavené šifrování:", +"Initial encryption started... This can take some time. Please wait." => "Počáteční šifrování zahájeno... Toto může chvíli trvat. Počkejte prosím.", "Saving..." => "Ukládám...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Váš soukromý klíč není platný! Pravděpodobně bylo vaše heslo změněno zvenčí.", -"You can unlock your private key in your " => "Můžete odemknout váš soukromý klíč ve vašem", +"Go directly to your " => "Běžte přímo do vašeho", "personal settings" => "osobní nastavení", "Encryption" => "Šifrování", "Enable recovery key (allow to recover users files in case of password loss):" => "Povolit klíč pro obnovu (umožňuje obnovu uživatelských souborů v případě ztráty hesla)", "Recovery key password" => "Heslo klíče pro obnovu", +"Repeat Recovery key password" => "Zopakujte heslo klíče pro obnovu", "Enabled" => "Povoleno", "Disabled" => "Zakázáno", "Change recovery key password:" => "Změna hesla klíče pro obnovu:", "Old Recovery key password" => "Původní heslo klíče pro obnovu", "New Recovery key password" => "Nové heslo klíče pro obnovu", +"Repeat New Recovery key password" => "Zopakujte nové heslo klíče pro obnovu", "Change Password" => "Změnit heslo", "Your private key password no longer match your log-in password:" => "Heslo vašeho soukromého klíče se již neshoduje s vaším přihlašovacím heslem:", "Set your old private key password to your current log-in password." => "Změňte heslo vaše soukromého klíče na stejné jako vaše přihlašovací heslo.", diff --git a/apps/files_encryption/l10n/da.php b/apps/files_encryption/l10n/da.php index 1b7069b6784574ae1d4305364b362cd24a484609..9e4290534c01ae7fc65a2bd5b991d783d1d660af 100644 --- a/apps/files_encryption/l10n/da.php +++ b/apps/files_encryption/l10n/da.php @@ -8,22 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Kunne ikke ændre kodeordet. Måske var det gamle kodeord ikke korrekt.", "Private key password successfully updated." => "Privat nøgle kodeord succesfuldt opdateret.", "Could not update the private key password. Maybe the old password was not correct." => "Kunne ikke opdatere det private nøgle kodeord-. Måske var det gamle kodeord forkert.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Din private nøgle er gyldig! Sandsynligvis blev dit kodeord ændre uden for ownCloud systemet (f.eks. dit firmas register). Du kan opdatere dit private nøgle kodeord under personlige indstillinger, for at generhverve adgang til dine krypterede filer.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Krypteringsprogrammet er ikke igangsat. Det kan skyldes at krypteringsprogrammet er blevet genaktiveret under din session. Prøv at logge ud og ind igen for at aktivere krypteringsprogrammet. ", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Din private nøgle er ikke gyldig. Sandsynligvis er dit kodeord blevet ændret uden for %s (f.eks dit firmas adressebog). Du kan opdatere din private nøglekode i dine personlige indstillinger for at genskabe adgang til dine krypterede filer.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Kan ikke kryptere denne fil, sandsynligvis fordi felen er delt. Bed venligst filens ejer om at dele den med dig på ny.", +"Unknown error please check your system settings or contact your administrator" => "Ukendt fejl. Kontroller venligst dit system eller kontakt din administrator", "Missing requirements." => "Manglende betingelser.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Sørg for at PHP 5.3.3 eller nyere er installeret og at OpenSSL sammen med PHP-udvidelsen er aktiveret og korrekt konfigureret. Indtil videre er krypteringsprogrammet deaktiveret.", "Following users are not set up for encryption:" => "Følgende brugere er ikke sat op til kryptering:", +"Initial encryption started... This can take some time. Please wait." => "Førstegangskryptering er påbegyndt... Dette kan tage nogen tid. Vent venligst.", "Saving..." => "Gemmer...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Din private nøgle er ikke gyldig. Måske blev dit kodeord ændre udefra.", -"You can unlock your private key in your " => "Du kan låse din private nøgle op i din ", +"Go directly to your " => "Gå direkte til din ", "personal settings" => "Personlige indstillinger", "Encryption" => "Kryptering", "Enable recovery key (allow to recover users files in case of password loss):" => "Aktiver gendannelsesnøgle (Tillad gendannelse af brugerfiler i tilfælde af tab af kodeord):", "Recovery key password" => "Gendannelsesnøgle kodeord", +"Repeat Recovery key password" => "Gentag gendannelse af nøglekoden", "Enabled" => "Aktiveret", "Disabled" => "Deaktiveret", "Change recovery key password:" => "Skift gendannelsesnøgle kodeord:", "Old Recovery key password" => "Gammel Gendannelsesnøgle kodeord", "New Recovery key password" => "Ny Gendannelsesnøgle kodeord", +"Repeat New Recovery key password" => "Gentag dannelse af ny gendannaleses nøglekode", "Change Password" => "Skift Kodeord", "Your private key password no longer match your log-in password:" => "Dit private nøgle kodeord stemmer ikke længere overens med dit login kodeord:", "Set your old private key password to your current log-in password." => "Sæt dit gamle private nøgle kodeord til at være dit nuværende login kodeord. ", diff --git a/apps/files_encryption/l10n/de.php b/apps/files_encryption/l10n/de.php index 4c36d31ed6bf131275518840d2f107874b4a3172..3ba50f074b919b19be09d2bdd537f6e55b011a53 100644 --- a/apps/files_encryption/l10n/de.php +++ b/apps/files_encryption/l10n/de.php @@ -1,38 +1,43 @@ "Wiederherstellungsschlüssel wurde erfolgreich aktiviert", -"Could not enable recovery key. Please check your recovery key password!" => "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Überprüfen Sie Ihr Wiederherstellungspasswort!", +"Could not enable recovery key. Please check your recovery key password!" => "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Überprüfe Dein Wiederherstellungspasswort!", "Recovery key successfully disabled" => "Wiederherstellungsschlüssel deaktiviert.", -"Could not disable recovery key. Please check your recovery key password!" => "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Überprüfen Sie Ihr Wiederherstellungspasswort!", +"Could not disable recovery key. Please check your recovery key password!" => "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Überprüfe Dein Wiederherstellungspasswort!", "Password successfully changed." => "Dein Passwort wurde geändert.", "Could not change the password. Maybe the old password was not correct." => "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort falsch.", "Private key password successfully updated." => "Passwort des privaten Schlüssels erfolgreich aktualisiert", "Could not update the private key password. Maybe the old password was not correct." => "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden. Eventuell war das alte Passwort falsch.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Dein privater Schlüssel ist ungültig. Möglicher Weise wurde von außerhalb Dein Passwort geändert (z.B. in deinem gemeinsamen Verzeichnis). Du kannst das Passwort deines privaten Schlüssels in den persönlichen Einstellungen aktualisieren, um wieder an deine Dateien zu gelangen.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Verschlüsselung-App ist nicht initialisiert! Vielleicht wurde die Verschlüsselung-App in der aktuellen Sitzung reaktiviert. Bitte versuche Dich ab- und wieder anzumelden, um die Verschlüsselung-App zu initialisieren.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Dein privater Schlüssel ist ungültig. Möglicher Weise wurde außerhalb von %s Dein Passwort geändert (z.B. in Deinem gemeinsamen Verzeichnis). Du kannst das Passwort Deines privaten Schlüssels in den persönlichen Einstellungen aktualisieren, um wieder an Deine Dateien zu gelangen.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Die Datei kann nicht entschlüsselt werden, da die Datei möglicherweise eine geteilte Datei ist. Bitte frage den Dateibesitzer, ob er die Datei nochmals mit Dir teilt.", +"Unknown error please check your system settings or contact your administrator" => "Unbekannter Fehler, bitte prüfe Deine Systemeinstellungen oder kontaktiere Deinen Administrator", "Missing requirements." => "Fehlende Vorraussetzungen", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Bitte stelle sicher, dass PHP 5.3.3 oder neuer installiert und das OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Zur Zeit ist die Verschlüsselungs-App deaktiviert.", "Following users are not set up for encryption:" => "Für folgende Nutzer ist keine Verschlüsselung eingerichtet:", +"Initial encryption started... This can take some time. Please wait." => "Initialverschlüsselung gestartet... Dies kann einige Zeit dauern. Bitte warten.", "Saving..." => "Speichern...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Ihr privater Schlüssel ist ungültig! Eventuell wurde Ihr Passwort von außerhalb geändert.", -"You can unlock your private key in your " => "Du kannst den privaten Schlüssel ändern und zwar in deinem", +"Go directly to your " => "Direkt wechseln zu Deinem", "personal settings" => "Private Einstellungen", "Encryption" => "Verschlüsselung", "Enable recovery key (allow to recover users files in case of password loss):" => "Wiederherstellungsschlüssel aktivieren (ermöglicht das Wiederherstellen von Dateien, falls das Passwort vergessen wurde):", "Recovery key password" => "Wiederherstellungsschlüssel-Passwort", +"Repeat Recovery key password" => "Schlüssel-Passwort zur Wiederherstellung wiederholen", "Enabled" => "Aktiviert", "Disabled" => "Deaktiviert", "Change recovery key password:" => "Wiederherstellungsschlüssel-Passwort ändern:", "Old Recovery key password" => "Altes Wiederherstellungsschlüssel-Passwort", "New Recovery key password" => "Neues Wiederherstellungsschlüssel-Passwort", +"Repeat New Recovery key password" => "Neues Schlüssel-Passwort zur Wiederherstellung wiederholen", "Change Password" => "Passwort ändern", -"Your private key password no longer match your log-in password:" => "Ihr Passwort für ihren privaten Schlüssel stimmt nicht mehr mit ihrem Loginpasswort überein.", -"Set your old private key password to your current log-in password." => "Setzen Sie ihr altes Passwort für ihren privaten Schlüssel auf ihr aktuelles Login-Passwort", -" If you don't remember your old password you can ask your administrator to recover your files." => "Wenn Sie Ihr altes Passwort vergessen haben, können Sie den Administrator bitten, Ihre Daten wiederherzustellen.", -"Old log-in password" => "Altes login Passwort", +"Your private key password no longer match your log-in password:" => "Das Passwort für Deinen privaten Schlüssel stimmt nicht mehr mit Deinem Loginpasswort überein.", +"Set your old private key password to your current log-in password." => "Setze Dein altes Passwort für Deinen privaten Schlüssel auf Dein aktuelles Login-Passwort", +" If you don't remember your old password you can ask your administrator to recover your files." => "Wenn Du Dein altes Passwort vergessen hast, könntest Du Deinen Administrator bitten, Deine Daten wiederherzustellen.", +"Old log-in password" => "Altes Login Passwort", "Current log-in password" => "Aktuelles Passwort", "Update Private Key Password" => "Passwort für den privaten Schlüssel aktualisieren", -"Enable password recovery:" => "Passwortwiederherstellung aktivvieren:", -"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Wenn Sie diese Option aktivieren, können Sie Ihre verschlüsselten Dateien wiederherstellen, falls Sie Ihr Passwort vergessen", +"Enable password recovery:" => "Passwortwiederherstellung aktivieren:", +"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Wenn Du diese Option aktivierst, kannst Du Deine verschlüsselten Dateien wiederherstellen, falls Du Dein Passwort vergisst", "File recovery settings updated" => "Einstellungen zur Wiederherstellung von Dateien wurden aktualisiert", "Could not update file recovery" => "Dateiwiederherstellung konnte nicht aktualisiert werden" ); diff --git a/apps/files_encryption/l10n/de_CH.php b/apps/files_encryption/l10n/de_CH.php index aa867645c8d6c8064a64cc92175bb7d9b300d515..a31e82a666f3eaffb3e3aa6c22adc0ffa6a44a2e 100644 --- a/apps/files_encryption/l10n/de_CH.php +++ b/apps/files_encryption/l10n/de_CH.php @@ -8,13 +8,10 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort nicht richtig.", "Private key password successfully updated." => "Das Passwort des privaten Schlüssels wurde erfolgreich aktualisiert.", "Could not update the private key password. Maybe the old password was not correct." => "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden. Vielleicht war das alte Passwort nicht richtig.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Ihr privater Schlüssel ist ungültig. Möglicher Weise wurde von ausserhalb Ihr Passwort geändert (z.B. in Ihrem gemeinsamen Verzeichnis). Sie können das Passwort Ihres privaten Schlüssels in den persönlichen Einstellungen aktualisieren, um wieder an Ihre Dateien zu gelangen.", "Missing requirements." => "Fehlende Voraussetzungen", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Bitte stellen Sie sicher, dass PHP 5.3.3 oder neuer installiert und das OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Zur Zeit ist die Verschlüsselungs-App deaktiviert.", "Following users are not set up for encryption:" => "Für folgende Nutzer ist keine Verschlüsselung eingerichtet:", "Saving..." => "Speichern...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Ihr privater Schlüssel ist ungültig! Vielleicht wurde Ihr Passwort von ausserhalb geändert.", -"You can unlock your private key in your " => "Sie können den privaten Schlüssel ändern und zwar in Ihrem", "personal settings" => "Persönliche Einstellungen", "Encryption" => "Verschlüsselung", "Enable recovery key (allow to recover users files in case of password loss):" => "Aktivieren Sie den Wiederherstellungsschlüssel (erlaubt die Wiederherstellung des Zugangs zu den Benutzerdateien, wenn das Passwort verloren geht).", diff --git a/apps/files_encryption/l10n/de_DE.php b/apps/files_encryption/l10n/de_DE.php index 200001e6ebfbbd569024ba366d9665e4b4133c84..6184fd8a898ed6e5f20cf35d9543b05f26005f28 100644 --- a/apps/files_encryption/l10n/de_DE.php +++ b/apps/files_encryption/l10n/de_DE.php @@ -8,22 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort nicht richtig.", "Private key password successfully updated." => "Das Passwort des privaten Schlüssels wurde erfolgreich aktualisiert.", "Could not update the private key password. Maybe the old password was not correct." => "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden. Vielleicht war das alte Passwort nicht richtig.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Ihr privater Schlüssel ist ungültig. Möglicher Weise wurde von außerhalb Ihr Passwort geändert (z.B. in Ihrem gemeinsamen Verzeichnis). Sie können das Passwort Ihres privaten Schlüssels in den persönlichen Einstellungen aktualisieren, um wieder an Ihre Dateien zu gelangen.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Verschlüsselung-App ist nicht initialisiert! Vielleicht wurde die Verschlüsselung-App in der aktuellen Sitzung reaktiviert. Bitte versuchen Sie sich ab- und wieder anzumelden, um die Verschlüsselung-App zu initialisieren.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Ihr privater Schlüssel ist ungültig. Möglicher Weise wurde außerhalb von %s Ihr Passwort geändert (z.B. in Ihrem gemeinsamen Verzeichnis). Sie können das Passwort Ihres privaten Schlüssels in den persönlichen Einstellungen aktualisieren, um wieder an Ihre Dateien zu gelangen.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Die Datei kann nicht entschlüsselt werden, da die Datei möglicherweise eine geteilte Datei ist. Bitte fragen Sie den Datei-Besitzer, dass er die Datei nochmals mit Ihnen teilt.", +"Unknown error please check your system settings or contact your administrator" => "Unbekannter Fehler, bitte prüfen Sie die Systemeinstellungen oder kontaktieren Sie Ihren Administrator", "Missing requirements." => "Fehlende Voraussetzungen", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Bitte stellen Sie sicher, dass PHP 5.3.3 oder neuer installiert und das OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Zur Zeit ist die Verschlüsselungs-App deaktiviert.", "Following users are not set up for encryption:" => "Für folgende Nutzer ist keine Verschlüsselung eingerichtet:", +"Initial encryption started... This can take some time. Please wait." => "Initialverschlüsselung gestartet... Dies kann einige Zeit dauern. Bitte warten.", "Saving..." => "Speichern...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Ihr privater Schlüssel ist ungültig! Vielleicht wurde Ihr Passwort von außerhalb geändert.", -"You can unlock your private key in your " => "Sie können den privaten Schlüssel ändern und zwar in Ihrem", +"Go directly to your " => "Direkt wechseln zu Ihrem", "personal settings" => "Persönliche Einstellungen", "Encryption" => "Verschlüsselung", "Enable recovery key (allow to recover users files in case of password loss):" => "Aktivieren Sie den Wiederherstellungsschlüssel (erlaubt die Wiederherstellung des Zugangs zu den Benutzerdateien, wenn das Passwort verloren geht).", "Recovery key password" => "Wiederherstellungschlüsselpasswort", +"Repeat Recovery key password" => "Schlüssel-Passwort zur Wiederherstellung wiederholen", "Enabled" => "Aktiviert", "Disabled" => "Deaktiviert", "Change recovery key password:" => "Wiederherstellungsschlüsselpasswort ändern", "Old Recovery key password" => "Altes Wiederherstellungsschlüsselpasswort", "New Recovery key password" => "Neues Wiederherstellungsschlüsselpasswort ", +"Repeat New Recovery key password" => "Neues Schlüssel-Passwort zur Wiederherstellung wiederholen", "Change Password" => "Passwort ändern", "Your private key password no longer match your log-in password:" => "Das Privatschlüsselpasswort darf nicht länger mit den Login-Passwort übereinstimmen.", "Set your old private key password to your current log-in password." => "Setzen Sie Ihr altes Privatschlüsselpasswort auf Ihr aktuelles LogIn-Passwort.", diff --git a/apps/files_encryption/l10n/el.php b/apps/files_encryption/l10n/el.php index 70f778f0a5038d6d8a194eb269f89e85892102cc..22c1095e2847fd922b86b2ab425fbf9b7ed0d784 100644 --- a/apps/files_encryption/l10n/el.php +++ b/apps/files_encryption/l10n/el.php @@ -1,13 +1,44 @@ "Επιτυχής ενεργοποίηση κλειδιού ανάκτησης", +"Could not enable recovery key. Please check your recovery key password!" => "Αποτυχία ενεργοποίησης κλειδιού ανάκτησης. Παρακαλώ ελέγξτε τον κωδικό του κλειδιού ανάκτησής σας!", +"Recovery key successfully disabled" => "Επιτυχής απενεργοποίηση κλειδιού ανάκτησης", +"Could not disable recovery key. Please check your recovery key password!" => "Αποτυχία απενεργοποίησης κλειδιού ανάκτησης. Παρακαλώ ελέγξτε τον κωδικό του κλειδιού ανάκτησής σας!", "Password successfully changed." => "Ο κωδικός αλλάχτηκε επιτυχώς.", "Could not change the password. Maybe the old password was not correct." => "Αποτυχία αλλαγής κωδικού ίσως ο παλιός κωδικός να μην ήταν σωστός.", +"Private key password successfully updated." => "Το Προσωπικό κλειδί πρόσβασης ενημερώθηκε επιτυχώς", +"Could not update the private key password. Maybe the old password was not correct." => "Αποτυχία ενημέρωσης του κωδικού για το προσωπικό κλειδί. Ενδεχομένως ο παλιός κωδικός δεν ήταν σωστός.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Η εφαρμογή κρυπτογράφησης δεν έχει εκκινήσει! Ίσως η εφαρμογή κρυπτογράφησης επανενεργοποιήθηκε κατά τη διάρκεια της τρέχουσας σύνδεσής σας. Παρακαλώ προσπαθήστε να αποσυνδεθείτε και να ξανασυνδεθείτε για να εκκινήσετε την εφαρμογή κρυπτογράφησης.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Το προσωπικό σας κλειδί δεν είναι έγκυρο! Πιθανόν ο κωδικός σας να άλλαξε έξω από το %s (π.χ. τη λίστα διευθύνσεων της εταιρείας σας). Μπορείτε να ενημερώσετε το προσωπικό σας κλειδί επαναφοράς κωδικού στις προσωπικές σας ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.", +"Unknown error please check your system settings or contact your administrator" => "Άγνωστο σφάλμα, παρακαλώ ελέγξτε τις ρυθμίσεις συστήματος ή επικοινωνήστε με τον διαχειριστή σας ", +"Missing requirements." => "Προαπαιτούμενα που απουσιάζουν.", +"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Παρακαλώ επιβεβαιώστε ότι η PHP 5.3.3 ή νεότερη είναι εγκατεστημένη και ότι το OpenSSL μαζί με το PHP extension είναι ενεργοποιήμένο και έχει ρυθμιστεί σωστά. Προς το παρόν, η εφαρμογή κρυπτογράφησης είναι απενεργοποιημένη.", +"Following users are not set up for encryption:" => "Οι κάτωθι χρήστες δεν έχουν ρυθμιστεί για κρυπογράφηση:", +"Initial encryption started... This can take some time. Please wait." => "Η αρχική κρυπτογράφηση άρχισε... Αυτό μπορεί να πάρει κάποια ώρα. Παρακαλώ περιμένετε.", "Saving..." => "Γίνεται αποθήκευση...", +"Go directly to your " => "Πηγαίνε απευθείας στο ", "personal settings" => "προσωπικές ρυθμίσεις", "Encryption" => "Κρυπτογράφηση", +"Enable recovery key (allow to recover users files in case of password loss):" => "Ενεργοποίηση κλειδιού ανάκτησης (επιτρέψτε την ανάκτηση αρχείων χρηστών σε περίπτωση απώλειας κωδικού):", +"Recovery key password" => "Επαναφορά κωδικού κλειδιού", +"Repeat Recovery key password" => "Επαναλάβετε το κλειδί επαναφοράς κωδικού", "Enabled" => "Ενεργοποιημένο", "Disabled" => "Απενεργοποιημένο", +"Change recovery key password:" => "Αλλαγή κλειδιού επαναφοράς κωδικού:", +"Old Recovery key password" => "Παλιό κλειδί επαναφοράς κωδικού", +"New Recovery key password" => "Νέο κλειδί επαναφοράς κωδικού", +"Repeat New Recovery key password" => "Επαναλάβετε νέο κλειδί επαναφοράς κωδικού", "Change Password" => "Αλλαγή Κωδικού Πρόσβασης", -"File recovery settings updated" => "Οι ρυθμίσεις επαναφοράς αρχείων ανανεώθηκαν" +"Your private key password no longer match your log-in password:" => "Ο κωδικός του προσωπικού κλειδιού δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας:", +"Set your old private key password to your current log-in password." => "Ορίστε το παλιό σας προσωπικό κλειδί ως τον τρέχων κωδικό πρόσβασης.", +" If you don't remember your old password you can ask your administrator to recover your files." => "Εάν δεν θυμάστε τον παλιό σας κωδικό μπορείτε να ζητήσετε από τον διαχειριστή σας να επανακτήσει τα αρχεία σας.", +"Old log-in password" => "Παλαιό συνθηματικό εισόδου", +"Current log-in password" => "Τρέχον συνθηματικό πρόσβασης", +"Update Private Key Password" => "Ενημέρωση Προσωπικού Κλειδού Πρόσβασης", +"Enable password recovery:" => "Ενεργοποιήστε την ανάκτηση κωδικού πρόσβασης", +"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας", +"File recovery settings updated" => "Οι ρυθμίσεις επαναφοράς αρχείων ανανεώθηκαν", +"Could not update file recovery" => "Αποτυχία ενημέρωσης ανάκτησης αρχείων" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_encryption/l10n/en_GB.php b/apps/files_encryption/l10n/en_GB.php index c220a4bdf045c81a57707c04a1a746cf076befe5..55d56b9533e3954fae61e061a3de3457875deb90 100644 --- a/apps/files_encryption/l10n/en_GB.php +++ b/apps/files_encryption/l10n/en_GB.php @@ -8,24 +8,29 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Could not change the password. Maybe the old password was incorrect.", "Private key password successfully updated." => "Private key password updated successfully.", "Could not update the private key password. Maybe the old password was not correct." => "Could not update the private key password. Maybe the old password was not correct.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Encryption app not initialised! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialise the encryption app.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Cannot decrypt this file, which is probably a shared file. Please ask the file owner to reshare the file with you.", +"Unknown error please check your system settings or contact your administrator" => "Unknown error. Please check your system settings or contact your administrator", "Missing requirements." => "Missing requirements.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled.", "Following users are not set up for encryption:" => "Following users are not set up for encryption:", +"Initial encryption started... This can take some time. Please wait." => "Initial encryption started... This can take some time. Please wait.", "Saving..." => "Saving...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Your private key is not valid! Maybe the your password was changed externally.", -"You can unlock your private key in your " => "You can unlock your private key in your ", +"Go directly to your " => "Go directly to your ", "personal settings" => "personal settings", "Encryption" => "Encryption", "Enable recovery key (allow to recover users files in case of password loss):" => "Enable recovery key (allow to recover users files in case of password loss):", "Recovery key password" => "Recovery key password", +"Repeat Recovery key password" => "Repeat recovery key password", "Enabled" => "Enabled", "Disabled" => "Disabled", "Change recovery key password:" => "Change recovery key password:", -"Old Recovery key password" => "Old Recovery key password", -"New Recovery key password" => "New Recovery key password", +"Old Recovery key password" => "Old recovery key password", +"New Recovery key password" => "New recovery key password", +"Repeat New Recovery key password" => "Repeat new recovery key password", "Change Password" => "Change Password", -"Your private key password no longer match your log-in password:" => "Your private key password no longer match your login password:", +"Your private key password no longer match your log-in password:" => "Your private key password no longer matches your login password:", "Set your old private key password to your current log-in password." => "Set your old private key password to your current login password.", " If you don't remember your old password you can ask your administrator to recover your files." => " If you don't remember your old password you can ask your administrator to recover your files.", "Old log-in password" => "Old login password", diff --git a/apps/files_encryption/l10n/eo.php b/apps/files_encryption/l10n/eo.php index d68812530228f5adf2f5268e704165014c702b03..e14c7cd7ac9cde2bfc51b71936363bcac6ffb8c4 100644 --- a/apps/files_encryption/l10n/eo.php +++ b/apps/files_encryption/l10n/eo.php @@ -3,7 +3,9 @@ $TRANSLATIONS = array( "Password successfully changed." => "La pasvorto sukcese ŝanĝiĝis.", "Could not change the password. Maybe the old password was not correct." => "Ne eblis ŝanĝi la pasvorton. Eble la malnova pasvorto malĝustis.", "Private key password successfully updated." => "La pasvorto de la malpublika klavo sukcese ĝisdatiĝis.", +"Missing requirements." => "Mankas neproj.", "Saving..." => "Konservante...", +"Go directly to your " => "Iri direkte al via", "personal settings" => "persona agordo", "Encryption" => "Ĉifrado", "Enabled" => "Kapabligita", diff --git a/apps/files_encryption/l10n/es.php b/apps/files_encryption/l10n/es.php index 2d644708c59ed3ece59af8046b5fab59205c280b..53453986883854f15a9cebc97545367cfc98037e 100644 --- a/apps/files_encryption/l10n/es.php +++ b/apps/files_encryption/l10n/es.php @@ -8,22 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.", "Private key password successfully updated." => "Contraseña de clave privada actualizada con éxito.", "Could not update the private key password. Maybe the old password was not correct." => "No se pudo cambiar la contraseña. Puede que la contraseña antigua no sea correcta.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "¡Su clave privada no es válida! Tal vez su contraseña ha sido cambiada desde fuera. Puede actualizar su clave privada en sus opciones personales para recuperar el acceso a sus ficheros.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "¡La aplicación de cifrado no ha sido inicializada! Quizá fue restablecida durante tu sesión. Por favor intenta cerrar la sesión y volver a iniciarla para inicializar la aplicación de cifrado.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "¡Su clave privada no es válida! Tal vez su contraseña ha sido cambiada desde fuera. de %s (Ej:Su directorio corporativo). Puede actualizar la contraseña de su clave privada en sus opciones personales para recuperar el acceso a sus archivos.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.", +"Unknown error please check your system settings or contact your administrator" => "Error desconocido. Verifique la configuración de su sistema o póngase en contacto con su administrador", "Missing requirements." => "Requisitos incompletos.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Por favor, asegúrese de que PHP 5.3.3 o posterior está instalado y que la extensión OpenSSL de PHP está habilitada y configurada correctamente. Por el momento, la aplicación de cifrado ha sido deshabilitada.", "Following users are not set up for encryption:" => "Los siguientes usuarios no han sido configurados para el cifrado:", +"Initial encryption started... This can take some time. Please wait." => "Encriptación iniciada..... Esto puede tomar un tiempo. Por favor espere.", "Saving..." => "Guardando...", -"Your private key is not valid! Maybe the your password was changed from outside." => "¡Su clave privada no es válida! Tal vez su contraseña ha sido cambiada desde fuera.", -"You can unlock your private key in your " => "Puede desbloquear su clave privada en su", +"Go directly to your " => "Ir directamente a su", "personal settings" => "opciones personales", "Encryption" => "Cifrado", "Enable recovery key (allow to recover users files in case of password loss):" => "Habilitar la clave de recuperación (permite recuperar los ficheros del usuario en caso de pérdida de la contraseña);", "Recovery key password" => "Contraseña de clave de recuperación", +"Repeat Recovery key password" => "Repite la contraseña de clave de recuperación", "Enabled" => "Habilitar", "Disabled" => "Deshabilitado", "Change recovery key password:" => "Cambiar la contraseña de la clave de recuperación", "Old Recovery key password" => "Antigua clave de recuperación", "New Recovery key password" => "Nueva clave de recuperación", +"Repeat New Recovery key password" => "Repetir la nueva clave de recuperación", "Change Password" => "Cambiar contraseña", "Your private key password no longer match your log-in password:" => "Su contraseña de clave privada ya no coincide con su contraseña de acceso:", "Set your old private key password to your current log-in password." => "Establecer la contraseña de su antigua clave privada a su contraseña actual de acceso.", diff --git a/apps/files_encryption/l10n/es_AR.php b/apps/files_encryption/l10n/es_AR.php index 666ea59687c404bb19e088ce0e2a43a7288dd3de..df5bd649d67c833a6c33b3b078aab4f5245ce045 100644 --- a/apps/files_encryption/l10n/es_AR.php +++ b/apps/files_encryption/l10n/es_AR.php @@ -8,13 +8,10 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "No se pudo cambiar la contraseña. Comprobá que la contraseña actual sea correcta.", "Private key password successfully updated." => "Contraseña de clave privada actualizada con éxito.", "Could not update the private key password. Maybe the old password was not correct." => "No fue posible actualizar la contraseña de clave privada. Tal vez la contraseña anterior no es correcta.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "¡Tu clave privada no es válida! Tal vez tu contraseña fue cambiada desde fuera del sistema de ownCloud (por ej. desde tu cuenta de sistema). Podés actualizar tu clave privada en la sección de \"configuración personal\", para recuperar el acceso a tus archivos.", "Missing requirements." => "Requisitos incompletos.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Por favor, asegúrese de que PHP 5.3.3 o una versión más reciente esté instalado y que OpenSSL junto con la extensión PHP esté habilitado y configurado apropiadamente. Por ahora, la aplicación de encriptación ha sido deshabilitada.", "Following users are not set up for encryption:" => "Los siguientes usuarios no fueron configurados para encriptar:", "Saving..." => "Guardando...", -"Your private key is not valid! Maybe the your password was changed from outside." => "¡Tu clave privada no es válida! Tal vez tu contraseña fue cambiada desde afuera.", -"You can unlock your private key in your " => "Podés desbloquear tu clave privada en tu", "personal settings" => "Configuración personal", "Encryption" => "Encriptación", "Enable recovery key (allow to recover users files in case of password loss):" => "Habilitar clave de recuperación (te permite recuperar los archivos de usuario en el caso que pierdas la contraseña):", diff --git a/apps/files_encryption/l10n/es_MX.php b/apps/files_encryption/l10n/es_MX.php new file mode 100644 index 0000000000000000000000000000000000000000..3906e3cacbef7d44d5b981a6bcbe6eae1aa8132a --- /dev/null +++ b/apps/files_encryption/l10n/es_MX.php @@ -0,0 +1,44 @@ + "Se ha habilitado la recuperación de archivos", +"Could not enable recovery key. Please check your recovery key password!" => "No se pudo habilitar la clave de recuperación. Por favor compruebe su contraseña.", +"Recovery key successfully disabled" => "Clave de recuperación deshabilitada", +"Could not disable recovery key. Please check your recovery key password!" => "No se pudo deshabilitar la clave de recuperación. Por favor compruebe su contraseña!", +"Password successfully changed." => "Su contraseña ha sido cambiada", +"Could not change the password. Maybe the old password was not correct." => "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.", +"Private key password successfully updated." => "Contraseña de clave privada actualizada con éxito.", +"Could not update the private key password. Maybe the old password was not correct." => "No se pudo cambiar la contraseña. Puede que la contraseña antigua no sea correcta.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "¡La aplicación de cifrado no ha sido inicializada! Quizá fue restablecida durante tu sesión. Por favor intenta cerrar la sesión y volver a iniciarla para inicializar la aplicación de cifrado.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "¡Su clave privada no es válida! Tal vez su contraseña ha sido cambiada desde fuera. de %s (Ej:Su directorio corporativo). Puede actualizar la contraseña de su clave privada en sus opciones personales para recuperar el acceso a sus archivos.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.", +"Unknown error please check your system settings or contact your administrator" => "Error desconocido. Verifique la configuración de su sistema o póngase en contacto con su administrador", +"Missing requirements." => "Requisitos incompletos.", +"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Por favor, asegúrese de que PHP 5.3.3 o posterior está instalado y que la extensión OpenSSL de PHP está habilitada y configurada correctamente. Por el momento, la aplicación de cifrado ha sido deshabilitada.", +"Following users are not set up for encryption:" => "Los siguientes usuarios no han sido configurados para el cifrado:", +"Initial encryption started... This can take some time. Please wait." => "Encriptación iniciada... Esto puede tomar un tiempo. Por favor espere.", +"Saving..." => "Guardando...", +"Go directly to your " => "Ir directamente a su", +"personal settings" => "opciones personales", +"Encryption" => "Cifrado", +"Enable recovery key (allow to recover users files in case of password loss):" => "Habilitar la clave de recuperación (permite recuperar los archivos del usuario en caso de pérdida de la contraseña);", +"Recovery key password" => "Contraseña de clave de recuperación", +"Repeat Recovery key password" => "Repite la contraseña de clave de recuperación", +"Enabled" => "Habilitar", +"Disabled" => "Deshabilitado", +"Change recovery key password:" => "Cambiar la contraseña de la clave de recuperación", +"Old Recovery key password" => "Antigua clave de recuperación", +"New Recovery key password" => "Nueva clave de recuperación", +"Repeat New Recovery key password" => "Repetir la nueva clave de recuperación", +"Change Password" => "Cambiar contraseña", +"Your private key password no longer match your log-in password:" => "Su contraseña de clave privada ya no coincide con su contraseña de acceso:", +"Set your old private key password to your current log-in password." => "Establecer la contraseña de su antigua clave privada a su contraseña actual de acceso.", +" If you don't remember your old password you can ask your administrator to recover your files." => "Si no recuerda su antigua contraseña puede pedir a su administrador que le recupere sus archivos.", +"Old log-in password" => "Contraseña de acceso antigua", +"Current log-in password" => "Contraseña de acceso actual", +"Update Private Key Password" => "Actualizar Contraseña de Clave Privada", +"Enable password recovery:" => "Habilitar la recuperación de contraseña:", +"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Habilitar esta opción le permitirá volver a tener acceso a sus archivos cifrados en caso de pérdida de contraseña", +"File recovery settings updated" => "Opciones de recuperación de archivos actualizada", +"Could not update file recovery" => "No se pudo actualizar la recuperación de archivos" +); +$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_encryption/l10n/et_EE.php b/apps/files_encryption/l10n/et_EE.php index 3edb7299c201efff6e0c554658d32715d9fd3da0..9182c5ef196182d7792ff9f6efb0868bfbf8a86e 100644 --- a/apps/files_encryption/l10n/et_EE.php +++ b/apps/files_encryption/l10n/et_EE.php @@ -8,22 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Ei suutnud vahetada parooli. Võib-olla on vana parool valesti sisestatud.", "Private key password successfully updated." => "Privaatse võtme parool edukalt uuendatud.", "Could not update the private key password. Maybe the old password was not correct." => "Ei suutnud uuendada privaatse võtme parooli. Võib-olla polnud vana parool õige.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Sinu privaatne võti pole toimiv! Tõenäoliselt on sinu parool muutunud väljaspool ownCloud süsteemi (näiteks ettevõtte keskhaldus). Sa saad uuendada oma privaatse võtme parooli seadete all taastamaks ligipääsu oma krüpteeritud failidele.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Krüpteerimise rakend pole käivitatud. Võib-olla krüpteerimise rakend taaskäivitati sinu sessiooni kestel. Palun proovi logida välja ning uuesti sisse käivitamaks krüpteerimise rakendit.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Sinu provaatne võti pole kehtiv! Tõenäoliselt mudueti parooli väljaspool kausta %s (nt. sinu ettevõtte kaust). Sa saad uuendada oma privaatse võtme parooli oma isiklikes seadetes, et taastada ligipääs sinu krüpteeritud failidele.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Sa ei saa seda faili dekrüpteerida, see on tõenäoliselt jagatud fail. Palun lase omanikul seda faili sinuga uuesti jagada.", +"Unknown error please check your system settings or contact your administrator" => "Tundmatu tõrge. Palun kontrolli süsteemi seadeid või võta ühendust oma süsteemi administraatoriga", "Missing requirements." => "Nõutavad on puudu.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Palun veendu, et on paigaldatud PHP 5.3.3 või uuem ning PHP OpenSSL laiendus on lubatud ning seadistatud korrektselt. Hetkel krüpteerimise rakendus on peatatud.", "Following users are not set up for encryption:" => "Järgmised kasutajad pole seadistatud krüpteeringuks:", +"Initial encryption started... This can take some time. Please wait." => "Algne krüpteerimine käivitati... See võib võtta natuke aega. Palun oota.", "Saving..." => "Salvestamine...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Sinu privaatne võti ei ole õige. Võib-olla on parool vahetatud süsteemi väliselt.", -"You can unlock your private key in your " => "Saad avada oma privaatse võtme oma", +"Go directly to your " => "Liigu otse oma", "personal settings" => "isiklikes seadetes", "Encryption" => "Krüpteerimine", -"Enable recovery key (allow to recover users files in case of password loss):" => "Luba taastevõti (võimada kasutaja failide taastamine parooli kaotuse puhul):", +"Enable recovery key (allow to recover users files in case of password loss):" => "Luba taastevõti (võimalda kasutaja failide taastamine parooli kaotuse puhul):", "Recovery key password" => "Taastevõtme parool", +"Repeat Recovery key password" => "Korda taastevõtme parooli", "Enabled" => "Sisse lülitatud", "Disabled" => "Väljalülitatud", "Change recovery key password:" => "Muuda taastevõtme parooli:", "Old Recovery key password" => "Vana taastevõtme parool", "New Recovery key password" => "Uus taastevõtme parool", +"Repeat New Recovery key password" => "Korda uut taastevõtme parooli", "Change Password" => "Muuda parooli", "Your private key password no longer match your log-in password:" => "Sinu privaatse võtme parool ei ühti enam sinu sisselogimise parooliga:", "Set your old private key password to your current log-in password." => "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.", diff --git a/apps/files_encryption/l10n/eu.php b/apps/files_encryption/l10n/eu.php index e750c850688d190d78d435a60bcc860312f5599c..6b1bafdda1a9d19235d078f6dcd43f07d5b00f39 100644 --- a/apps/files_encryption/l10n/eu.php +++ b/apps/files_encryption/l10n/eu.php @@ -8,20 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Ezin izan da pasahitza aldatu. Agian pasahitz zaharra okerrekoa da.", "Private key password successfully updated." => "Gako pasahitz pribatu behar bezala eguneratu da.", "Could not update the private key password. Maybe the old password was not correct." => "Ezin izan da gako pribatu pasahitza eguneratu. Agian pasahitz zaharra okerrekoa da.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Zure gako pribatua ez da egokia! Seguruaski zure pasahitza ownCloud sistematik kanpo aldatu da (adb. zure direktorio korporatiboa). Zure gako pribatuaren pasahitza eguneratu dezakezu zure ezarpen pertsonaletan zure enkriptatutako fitxategiak berreskuratzeko.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Enkriptazio aplikazioa ez dago hasieratuta! Agian aplikazioa birgaitu egin da zure saioa bitartean. Mesdez atear eta sartu berriz enkriptazio aplikazioa hasierarazteko.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Zure gako pribatua ez da egokia! Seguruaski zure pasahitza %s-tik kanpo aldatu da (adb. zure direktorio korporatiboa). Zure gako pribatuaren pasahitza eguneratu dezakezu zure ezarpen pertsonaletan zure enkriptatutako fitxategiak berreskuratzeko.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Ezin izan da fitxategi hau deszifratu, ziurrenik elkarbanatutako fitxategi bat da. Mesdez, eskatu fitxategiaren jabeari fitxategia zurekin berriz elkarbana dezan.", +"Unknown error please check your system settings or contact your administrator" => "Errore ezezaguna mesedez egiaztatu zure sistemaren ezarpenak edo harremanetan jarri zure administradorearekin", "Missing requirements." => "Eskakizun batzuk ez dira betetzen.", +"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Mesedez ziurtatu PHP 5.3.3 edo berriago bat instalatuta dagoela eta OpenSSL PHP hedapenarekin gaitua eta ongi konfiguratuta dagoela. Oraingoz, enkriptazio aplikazioa desgaituta dago.", +"Following users are not set up for encryption:" => "Hurrengo erabiltzaileak ez daude enktriptatzeko konfiguratutak:", +"Initial encryption started... This can take some time. Please wait." => "Hasierako enkriptazioa hasi da... Honek denbora har dezake. Mesedez itxaron.", "Saving..." => "Gordetzen...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Zure gako pribatua ez da egokia! Agian zure pasahitza kanpotik aldatu da.", -"You can unlock your private key in your " => "Zure gako pribatua desblokeatu dezakezu zure", +"Go directly to your " => "Joan zuzenean zure", "personal settings" => "ezarpen pertsonalak", "Encryption" => "Enkriptazioa", "Enable recovery key (allow to recover users files in case of password loss):" => "Gaitu berreskurapen gakoa (erabiltzaileen fitxategiak berreskuratzea ahalbidetzen du pasahitza galtzen badute ere):", "Recovery key password" => "Berreskuratze gako pasahitza", +"Repeat Recovery key password" => "Errepikatu berreskuratze gakoaren pasahitza", "Enabled" => "Gaitua", "Disabled" => "Ez-gaitua", "Change recovery key password:" => "Aldatu berreskuratze gako pasahitza:", "Old Recovery key password" => "Berreskuratze gako pasahitz zaharra", "New Recovery key password" => "Berreskuratze gako pasahitz berria", +"Repeat New Recovery key password" => "Errepikatu berreskuratze gako berriaren pasahitza", "Change Password" => "Aldatu Pasahitza", "Your private key password no longer match your log-in password:" => "Zure gako pribatuaren pasahitza ez da dagoeneko zure sarrera pasahitza:", "Set your old private key password to your current log-in password." => "Ezarri zure gako pribatu zaharraren pasahitza zure oraingo sarrerako psahitzara.", diff --git a/apps/files_encryption/l10n/fa.php b/apps/files_encryption/l10n/fa.php index 461ec2b92cbaea91ca7e7b8e1b65c1f2d0b2bba4..ed044a4158e23c6337618665c45e6ebf71da68fe 100644 --- a/apps/files_encryption/l10n/fa.php +++ b/apps/files_encryption/l10n/fa.php @@ -8,11 +8,8 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "رمزعبور را نمیتواند تغییر دهد. شاید رمزعبورقدیمی صحیح نمی باشد.", "Private key password successfully updated." => "رمزعبور کلید خصوصی با موفقیت به روز شد.", "Could not update the private key password. Maybe the old password was not correct." => "رمزعبور کلید خصوصی را نمی تواند به روز کند. شاید رمزعبور قدیمی صحیح نمی باشد.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "کلید خصوصی شما معتبر نمی باشد! ظاهرا رمزعبور شما بیرون از سیستم ownCloud تغییر یافته است( به عنوان مثال پوشه سازمان شما ). شما میتوانید رمزعبور کلید خصوصی خود را در تنظیمات شخصیتان به روز کنید تا بتوانید به فایل های رمزگذاری شده خود را دسترسی داشته باشید.", "Missing requirements." => "نیازمندی های گمشده", "Saving..." => "در حال ذخیره سازی...", -"Your private key is not valid! Maybe the your password was changed from outside." => "کلید خصوصی شما معتبر نیست! شاید رمزعبوراز بیرون تغییر یافته است.", -"You can unlock your private key in your " => "شما میتوانید کلید خصوصی خود را باز نمایید.", "personal settings" => "تنظیمات شخصی", "Encryption" => "رمزگذاری", "Enable recovery key (allow to recover users files in case of password loss):" => "فعال کردن کلید بازیابی(اجازه بازیابی فایل های کاربران در صورت از دست دادن رمزعبور):", diff --git a/apps/files_encryption/l10n/fr.php b/apps/files_encryption/l10n/fr.php index 358937441e2c1cf4caef09b746b6b502e179e1f4..dbccbf74dcdaeced9172afb029efee800f4296ff 100644 --- a/apps/files_encryption/l10n/fr.php +++ b/apps/files_encryption/l10n/fr.php @@ -8,22 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Ne peut pas changer le mot de passe. L'ancien mot de passe est peut-être incorrect.", "Private key password successfully updated." => "Mot de passe de la clé privé mis à jour avec succès.", "Could not update the private key password. Maybe the old password was not correct." => "Impossible de mettre à jour le mot de passe de la clé privé. Peut-être que l'ancien mot de passe n'était pas correcte.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Votre clé de sécurité privée n'est pas valide! Il est probable que votre mot de passe ait été changé sans passer par le système ownCloud (par éxemple: le serveur de votre entreprise). Ain d'avoir à nouveau accès à vos fichiers cryptés, vous pouvez mettre à jour votre clé de sécurité privée dans les paramètres personnels de votre compte.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "L'application de chiffrement n'est pas initialisée ! Peut-être que cette application a été réactivée pendant votre session. Veuillez essayer de vous déconnecter et ensuite de vous reconnecter pour initialiser l'application de chiffrement.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Votre clef privée est invalide ! Votre mot de passe a probablement été modifié hors de %s (ex. votre annuaire d'entreprise). Vous pouvez mettre à jour le mot de passe de votre clef privée dans les paramètres personnels pour pouvoir récupérer l'accès à vos fichiers chiffrés.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Impossible de déchiffrer ce fichier, il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire de ce fichier de le repartager avec vous.", +"Unknown error please check your system settings or contact your administrator" => "Erreur inconnue. Veuillez vérifier vos paramètres système ou contacter votre administrateur.", "Missing requirements." => "Système minimum requis non respecté.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Veuillez vous assurer qu'une version de PHP 5.3.3 ou supérieure est installée et qu'OpenSSL et son extension PHP sont activés et configurés correctement. En attendant, l'application de chiffrement été désactivée.", "Following users are not set up for encryption:" => "Les utilisateurs suivants ne sont pas configurés pour le chiffrement :", +"Initial encryption started... This can take some time. Please wait." => "Chiffrement initial démarré... Cela peut prendre un certain temps. Veuillez patienter.", "Saving..." => "Enregistrement...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Votre clef privée est invalide ! Votre mot de passe a peut-être été modifié depuis l'extérieur.", -"You can unlock your private key in your " => "Vous pouvez déverrouiller votre clé privée dans votre", +"Go directly to your " => "Allez directement à votre", "personal settings" => "paramètres personnel", "Encryption" => "Chiffrement", "Enable recovery key (allow to recover users files in case of password loss):" => "Activer la clef de récupération (permet de récupérer les fichiers des utilisateurs en cas de perte de mot de passe).", "Recovery key password" => "Mot de passe de la clef de récupération", +"Repeat Recovery key password" => "Répétez le mot de passe de la clé de récupération", "Enabled" => "Activer", "Disabled" => "Désactiver", "Change recovery key password:" => "Modifier le mot de passe de la clef de récupération :", "Old Recovery key password" => "Ancien mot de passe de la clef de récupération", "New Recovery key password" => "Nouveau mot de passe de la clef de récupération", +"Repeat New Recovery key password" => "Répétez le nouveau mot de passe de la clé de récupération", "Change Password" => "Changer de mot de passe", "Your private key password no longer match your log-in password:" => "Le mot de passe de votre clef privée ne correspond plus à votre mot de passe de connexion :", "Set your old private key password to your current log-in password." => "Configurez le mot de passe de votre ancienne clef privée avec votre mot de passe courant de connexion. ", diff --git a/apps/files_encryption/l10n/gl.php b/apps/files_encryption/l10n/gl.php index abf12d73d577483a05c1c3d55fda81e24cfe9447..7b3c899d1f5f6dc8e27fa0ee5fedaf84bf4b4539 100644 --- a/apps/files_encryption/l10n/gl.php +++ b/apps/files_encryption/l10n/gl.php @@ -8,22 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Non foi posíbel cambiar o contrasinal. Probabelmente o contrasinal antigo non é o correcto.", "Private key password successfully updated." => "A chave privada foi actualizada correctamente.", "Could not update the private key password. Maybe the old password was not correct." => "Non foi posíbel actualizar o contrasinal da chave privada. É probábel que o contrasinal antigo non sexa correcto.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "A chave privada non é correcta! É probábel que o seu contrasinal teña sido cambiado desde o exterior (p.ex. o seu directorio corporativo). Vostede pode actualizar o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Non se iniciou o aplicativo de cifrado! Quizais volva a activarse durante a sesión. Tente pechar a sesión e volver iniciala que tamén se inicie o aplicativo de cifrado.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "A chave privada non é correcta! É probábel que o seu contrasinal teña sido cambiado desde o exterior do %s (p.ex. o seu directorio corporativo). Vostede pode actualizar o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Non foi posíbel descifrar o ficheiro, probabelmente tratase dun ficheiro compartido. Pidalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.", +"Unknown error please check your system settings or contact your administrator" => "Produciuse un erro descoñecido. Comprobe os axustes do sistema ou póñase en contacto co administrador", "Missing requirements." => "Non se cumpren os requisitos.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Asegúrese de que está instalado o PHP 5.3.3 ou posterior e de o OpenSSL xunto coa extensión PHP estean activados e configurados correctamente. Polo de agora foi desactivado o aplicativo de cifrado.", "Following users are not set up for encryption:" => "Os seguintes usuarios non teñen configuración para o cifrado:", +"Initial encryption started... This can take some time. Please wait." => "Comezou o cifrado inicial... Isto pode levar bastante tempo. Agarde.", "Saving..." => "Gardando...", -"Your private key is not valid! Maybe the your password was changed from outside." => "A chave privada non é correcta! É probábel que o seu contrasinal teña sido cambiado desde o exterior. ", -"You can unlock your private key in your " => "Pode desbloquear a chave privada nos seus", +"Go directly to your " => "Vaia directamente ao seu", "personal settings" => "axustes persoais", "Encryption" => "Cifrado", "Enable recovery key (allow to recover users files in case of password loss):" => "Activar a chave de recuperación (permitirá recuperar os ficheiros dos usuarios no caso de perda do contrasinal):", "Recovery key password" => "Contrasinal da chave de recuperación", +"Repeat Recovery key password" => "Repita o contrasinal da chave da recuperación", "Enabled" => "Activado", "Disabled" => "Desactivado", "Change recovery key password:" => "Cambiar o contrasinal da chave de la recuperación:", "Old Recovery key password" => "Antigo contrasinal da chave de recuperación", "New Recovery key password" => "Novo contrasinal da chave de recuperación", +"Repeat New Recovery key password" => "Repita o novo contrasinal da chave da recuperación", "Change Password" => "Cambiar o contrasinal", "Your private key password no longer match your log-in password:" => "O seu contrasinal da chave privada non coincide co seu contrasinal de acceso.", "Set your old private key password to your current log-in password." => "Estabeleza o seu contrasinal antigo da chave de recuperación ao seu contrasinal de acceso actual", diff --git a/apps/files_encryption/l10n/hu_HU.php b/apps/files_encryption/l10n/hu_HU.php index 323291bbfbe9fb7172c381012d315b5d3b51038a..163011ff80b468e422c3956c7efb285ee0c6a01b 100644 --- a/apps/files_encryption/l10n/hu_HU.php +++ b/apps/files_encryption/l10n/hu_HU.php @@ -1,18 +1,44 @@ "Visszaállítási kulcs sikeresen kikapcsolva", -"Password successfully changed." => "Jelszó sikeresen megváltoztatva.", +"Recovery key successfully enabled" => "A helyreállítási kulcs sikeresen bekapcsolva", +"Could not enable recovery key. Please check your recovery key password!" => "A helyreállítási kulcsot nem lehetett engedélyezni. Ellenőrizze a helyreállítási kulcsa jelszavát!", +"Recovery key successfully disabled" => "A helyreállítási kulcs sikeresen kikapcsolva", +"Could not disable recovery key. Please check your recovery key password!" => "A helyreállítási kulcsot nem lehetett kikapcsolni. Ellenőrizze a helyreállítási kulcsa jelszavát!", +"Password successfully changed." => "A jelszót sikeresen megváltoztattuk.", "Could not change the password. Maybe the old password was not correct." => "A jelszót nem lehet megváltoztatni! Lehet, hogy hibás volt a régi jelszó.", -"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Kérlek győződj meg arról, hogy PHP 5.3.3 vagy annál frissebb van telepítve, valamint a PHP-hez tartozó OpenSSL bővítmény be van-e kapcsolva és az helyesen van-e konfigurálva! Ki lett kapcsolva ideiglenesen a titkosító alkalmazás.", +"Private key password successfully updated." => "A személyes kulcsának jelszava frissítésre került.", +"Could not update the private key password. Maybe the old password was not correct." => "A személyes kulcsa jelszavát nem lehetett frissíteni. Lehet, hogy hibás volt a régi jelszó.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "A titkosítási modul nincs elindítva! Talán a munkafolyamat közben került engedélyezésre. Kérjük jelentkezzen ki majd ismét jelentkezzen be, hogy a titkosítási modul megfelelően elinduljon!", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Az állományok titkosításához használt titkos kulcsa érvénytelen. Valószínűleg a %s rendszeren kívül változtatta meg a jelszavát (pl. a munkahelyi címtárban). A személyes beállításoknál frissítheti a titkos kulcsát, hogy ismét elérhesse a titkosított állományait.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Az állományt nem sikerült dekódolni, valószínűleg ez egy megosztott fájl. Kérje meg az állomány tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!", +"Unknown error please check your system settings or contact your administrator" => "Ismeretlen hiba. Ellenőrizze a rendszer beállításait vagy forduljon a rendszergazdához!", +"Missing requirements." => "Hiányzó követelmények.", +"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Kérem gondoskodjon arról, hogy PHP 5.3.3 vagy annál frissebb legyen telepítve, továbbá az OpenSSL a megfelelő PHP-bővítménnyel együtt rendelkezésre álljon és helyesen legyen konfigurálva! A titkosító modul egyelőre kikapcsolásra került.", +"Following users are not set up for encryption:" => "A következő felhasználók nem állították be a titkosítást:", +"Initial encryption started... This can take some time. Please wait." => "A titkosítási folyamat megkezdődött... Ez hosszabb ideig is eltarthat. Kérem várjon.", "Saving..." => "Mentés...", +"Go directly to your " => "Ugrás ide:", "personal settings" => "személyes beállítások", "Encryption" => "Titkosítás", +"Enable recovery key (allow to recover users files in case of password loss):" => "A helyreállítási kulcs beállítása (lehetővé teszi a felhasználók állományainak visszaállítását, ha elfelejtik a jelszavukat):", +"Recovery key password" => "A helyreállítási kulcs jelszava", +"Repeat Recovery key password" => "Ismételje meg a helyreállítási kulcs jelszavát", "Enabled" => "Bekapcsolva", "Disabled" => "Kikapcsolva", +"Change recovery key password:" => "A helyreállítási kulcs jelszavának módosítása:", +"Old Recovery key password" => "Régi Helyreállítási Kulcs Jelszava", +"New Recovery key password" => "Új Helyreállítási kulcs jelszava", +"Repeat New Recovery key password" => "Ismételje meg az új helyreállítási kulcs jelszavát", "Change Password" => "Jelszó megváltoztatása", +"Your private key password no longer match your log-in password:" => "A személyes kulcs jelszava mostantól nem azonos a belépési jelszavával:", +"Set your old private key password to your current log-in password." => "Állítsuk be a személyes kulcs jelszavát a jelenlegi bejelentkezési jelszavunkra.", +" If you don't remember your old password you can ask your administrator to recover your files." => "Ha nem emlékszik a régi jelszavára akkor megkérheti a rendszergazdát, hogy állítsa vissza az állományait.", "Old log-in password" => "Régi bejelentkezési jelszó", "Current log-in password" => "Jelenlegi bejelentkezési jelszó", -"Update Private Key Password" => "Privát kulcs jelszó frissítése", -"Enable password recovery:" => "Jelszó-visszaállítás bekapcsolása" +"Update Private Key Password" => "A személyest kulcs jelszó frissítése", +"Enable password recovery:" => "Jelszó-visszaállítás bekapcsolása", +"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Ez az opció lehetővé teszi, hogy a titkosított állományok tartalmát visszanyerjük abban az esetben, ha elfelejti a jelszavát", +"File recovery settings updated" => "A fájlhelyreállítási beállítások frissültek", +"Could not update file recovery" => "A fájlhelyreállítás nem frissíthető" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_encryption/l10n/id.php b/apps/files_encryption/l10n/id.php index 32c348bd8babe2edf83c80fa86402102fc7a04f7..a719d445820264fe537993828f84d33d340b8119 100644 --- a/apps/files_encryption/l10n/id.php +++ b/apps/files_encryption/l10n/id.php @@ -1,6 +1,41 @@ "Kunci pemulihan berhasil diaktifkan", +"Could not enable recovery key. Please check your recovery key password!" => "Tidak dapat mengaktifkan kunci pemulihan. Silakan periksa sandi kunci pemulihan Anda!", +"Recovery key successfully disabled" => "Kunci pemulihan berhasil dinonaktifkan", +"Could not disable recovery key. Please check your recovery key password!" => "Tidak dapat menonaktifkan kunci pemulihan. Silakan periksa sandi kunci pemulihan Anda!", +"Password successfully changed." => "Sandi berhasil diubah", +"Could not change the password. Maybe the old password was not correct." => "Tidak dapat mengubah sandi. Kemungkinan sandi lama yang dimasukkan salah.", +"Private key password successfully updated." => "Sandi kunci privat berhasil diperbarui.", +"Could not update the private key password. Maybe the old password was not correct." => "Tidak dapat memperbarui sandi kunci privat. Kemungkinan sandi lama yang Anda masukkan salah.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda.", +"Unknown error please check your system settings or contact your administrator" => "Kesalahan tak dikenal, silakan periksa pengaturan sistem Anda atau hubungi admin.", +"Missing requirements." => "Persyaratan yang hilang.", +"Following users are not set up for encryption:" => "Pengguna berikut belum diatur untuk enkripsi:", +"Initial encryption started... This can take some time. Please wait." => "Inisial enskripsi dijalankan... Ini dapat memakan waktu. Silakan tunggu.", "Saving..." => "Menyimpan...", -"Encryption" => "Enkripsi" +"Go directly to your " => "Langsung ke anda", +"personal settings" => "pengaturan pribadi", +"Encryption" => "Enkripsi", +"Enable recovery key (allow to recover users files in case of password loss):" => "Aktifkan kunci pemulihan (memungkinkan pengguna untuk memulihkan berkas dalam kasus kehilangan sandi):", +"Recovery key password" => "Sandi kunci pemulihan", +"Repeat Recovery key password" => "Ulangi sandi kunci Pemulihan", +"Enabled" => "Diaktifkan", +"Disabled" => "Dinonaktifkan", +"Change recovery key password:" => "Ubah sandi kunci pemulihan:", +"Old Recovery key password" => "Sandi kunci Pemulihan Lama", +"New Recovery key password" => "Sandi kunci Pemulihan Baru", +"Repeat New Recovery key password" => "Ulangi sandi kunci Pemulihan baru", +"Change Password" => "Ubah sandi", +"Your private key password no longer match your log-in password:" => "Sandi kunci privat Anda tidak lagi cocok dengan sandi masuk:", +"Set your old private key password to your current log-in password." => "Atur sandi kunci privat lama Anda sebagai sandi masuk Anda saat ini.", +" If you don't remember your old password you can ask your administrator to recover your files." => "Jika Anda tidak ingat sandi lama, Anda dapat meminta administrator Anda untuk memulihkan berkas.", +"Old log-in password" => "Sandi masuk yang lama", +"Current log-in password" => "Sandi masuk saat ini", +"Update Private Key Password" => "Perbarui Sandi Kunci Privat", +"Enable password recovery:" => "Aktifkan sandi pemulihan:", +"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Mengaktifkan opsi ini memungkinkan Anda untuk mendapatkan kembali akses ke berkas terenkripsi Anda dalam kasus kehilangan sandi", +"File recovery settings updated" => "Pengaturan pemulihan berkas diperbarui", +"Could not update file recovery" => "Tidak dapat memperbarui pemulihan berkas" ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files_encryption/l10n/it.php b/apps/files_encryption/l10n/it.php index f9534d7eca3e152823b1cb5c143c6ee82d7bf808..fc1aaffc0250083a528803d9687c8befe187b826 100644 --- a/apps/files_encryption/l10n/it.php +++ b/apps/files_encryption/l10n/it.php @@ -8,22 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Impossibile cambiare la password. Forse la vecchia password non era corretta.", "Private key password successfully updated." => "Password della chiave privata aggiornata correttamente.", "Could not update the private key password. Maybe the old password was not correct." => "Impossibile aggiornare la password della chiave privata. Forse la vecchia password non era corretta.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "La chiave privata non è valida! Forse la password è stata cambiata esternamente al sistema di ownCloud (ad es. la directory aziendale). Puoi aggiornare la password della chiave privata nelle impostazioni personali per ottenere nuovamente l'accesso ai file.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Applicazione di cifratura non inizializzata. Forse l'applicazione è stata riabilitata durante la tua sessione. Prova a disconnetterti e ad effettuare nuovamente l'accesso per inizializzarla.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "La tua chiave privata non è valida! Forse la password è stata cambiata al di fuori di %s (ad es. la directory aziendale). Puoi aggiornare la password della chiave privata nelle impostazioni personali per ottenere nuovamente l'accesso ai file cifrati.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Impossibile decifrare questo file, probabilmente è un file condiviso. Chiedi al proprietario del file di condividere nuovamente il file con te.", +"Unknown error please check your system settings or contact your administrator" => "Errore sconosciuto, controlla le impostazioni di sistema o contatta il tuo amministratore", "Missing requirements." => "Requisiti mancanti.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Assicurati che sia installato PHP 5.3.3 o versioni successive e che l'estensione OpenSSL di PHP sia abilitata e configurata correttamente. Per ora, l'applicazione di cifratura è disabilitata.", "Following users are not set up for encryption:" => "I seguenti utenti non sono configurati per la cifratura:", +"Initial encryption started... This can take some time. Please wait." => "Cifratura iniziale avviata... Potrebbe richiedere del tempo. Attendi.", "Saving..." => "Salvataggio in corso...", -"Your private key is not valid! Maybe the your password was changed from outside." => "La tua chiave privata non è valida! Forse è stata modifica dall'esterno.", -"You can unlock your private key in your " => "Puoi sbloccare la chiave privata nelle tue", +"Go directly to your " => "Passa direttamente a", "personal settings" => "impostazioni personali", "Encryption" => "Cifratura", "Enable recovery key (allow to recover users files in case of password loss):" => "Abilita la chiave di recupero (permette di recuperare i file utenti in caso di perdita della password):", "Recovery key password" => "Password della chiave di recupero", +"Repeat Recovery key password" => "Ripeti la password della chiave di recupero", "Enabled" => "Abilitata", "Disabled" => "Disabilitata", "Change recovery key password:" => "Cambia la password della chiave di recupero:", "Old Recovery key password" => "Vecchia password della chiave di recupero", "New Recovery key password" => "Nuova password della chiave di recupero", +"Repeat New Recovery key password" => "Ripeti la nuova password della chiave di recupero", "Change Password" => "Modifica password", "Your private key password no longer match your log-in password:" => "La password della chiave privata non corrisponde più alla password di accesso:", "Set your old private key password to your current log-in password." => "Imposta la vecchia password della chiave privata sull'attuale password di accesso.", diff --git a/apps/files_encryption/l10n/ja_JP.php b/apps/files_encryption/l10n/ja_JP.php index d1f8303bda741c9a6a5dca5e1f1cb6cce3e781ea..1206969746b689dbc68fe73f0b800f419909091a 100644 --- a/apps/files_encryption/l10n/ja_JP.php +++ b/apps/files_encryption/l10n/ja_JP.php @@ -8,22 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "パスワードを変更できませんでした。古いパスワードが間違っているかもしれません。", "Private key password successfully updated." => "秘密鍵のパスワードが正常に更新されました。", "Could not update the private key password. Maybe the old password was not correct." => "秘密鍵のパスワードを更新できませんでした。古いパスワードが正確でない場合があります。", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "秘密鍵が有効ではありません。パスワードがownCloudシステムの外部(例えば、企業ディレクトリ)から変更された恐れがあります。個人設定で秘密鍵のパスワードを更新して、暗号化されたファイルを回復出来ます。", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "暗号化アプリが初期化されていません。暗号化アプリが接続中に再度有効かされた可能性があります。暗号化アプリを初期化する為に、1回ログアウトしてログインしなおしてください。", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "プライベートキーが有効ではありません!パスワードが%sの外部で変更された(例: 共同ディレクトリ)と思われます。個人設定でプライベートキーのパスワードを更新して、暗号化ファイルへのアクセスを回復することができます。", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "このファイルを復号化できません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。", +"Unknown error please check your system settings or contact your administrator" => "不明なエラーです。システム設定を確認するか、管理者に問い合わせてください。", "Missing requirements." => "必要要件が満たされていません。", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "必ず、PHP 5.3.3もしくはそれ以上をインストールし、同時にOpenSSLのPHP拡張を有効にした上でOpenSSLも同様にインストール、適切に設定してください。現時点では暗号化アプリは無効になっています。", "Following users are not set up for encryption:" => "以下のユーザーは、暗号化設定がされていません:", +"Initial encryption started... This can take some time. Please wait." => "暗号化の初期化作業を開始しました... この処理にはしばらく時間がかかります。今しばらくお待ちください。", "Saving..." => "保存中...", -"Your private key is not valid! Maybe the your password was changed from outside." => "秘密鍵が有効ではありません。パスワードが外部から変更された恐れがあります。", -"You can unlock your private key in your " => "個人設定で", +"Go directly to your " => "あなたのディレクトリへ", "personal settings" => "秘密鍵をアンロックできます", "Encryption" => "暗号化", "Enable recovery key (allow to recover users files in case of password loss):" => "復旧キーを有効化 (万一パスワードを亡くした場合もユーザーのファイルを回復できる):", "Recovery key password" => "復旧キーのパスワード", +"Repeat Recovery key password" => "復旧キーのパスワードをもう一度入力", "Enabled" => "有効", "Disabled" => "無効", "Change recovery key password:" => "復旧キーのパスワードを変更:", "Old Recovery key password" => "古い復旧キーのパスワード", "New Recovery key password" => "新しい復旧キーのパスワード", +"Repeat New Recovery key password" => "新しい復旧キーのパスワードをもう一度入力", "Change Password" => "パスワードを変更", "Your private key password no longer match your log-in password:" => "もはや秘密鍵はログインパスワードと一致しません:", "Set your old private key password to your current log-in password." => "古い秘密鍵のパスワードを現在のログインパスワードに設定する。", diff --git a/apps/files_encryption/l10n/ko.php b/apps/files_encryption/l10n/ko.php index cfe9f99fa194d7a42df1a8349f2b05756a593aef..d91e861ca5deb95e439f1f6427903a4b47bdd4b8 100644 --- a/apps/files_encryption/l10n/ko.php +++ b/apps/files_encryption/l10n/ko.php @@ -1,20 +1,44 @@ "복구 키가 성공적으로 활성화되었습니다", +"Could not enable recovery key. Please check your recovery key password!" => "복구 키를 활성화 할 수 없습니다. 복구 키의 암호를 확인해 주세요!", +"Recovery key successfully disabled" => "복구 키가 성공적으로 비활성화 되었습니다", +"Could not disable recovery key. Please check your recovery key password!" => "복구 키를 비활성화 할 수 없습니다. 복구 키의 암호를 확인해주세요!", "Password successfully changed." => "암호가 성공적으로 변경되었습니다", -"Could not change the password. Maybe the old password was not correct." => "암호를 변경할수 없습니다. 아마도 예전 암호가 정확하지 않은것 같습니다.", -"Private key password successfully updated." => "개인키 암호가 성공적으로 업데이트 됨.", +"Could not change the password. Maybe the old password was not correct." => "암호를 변경할 수 없습니다. 예전 암호가 정확하지 않은 것 같습니다.", +"Private key password successfully updated." => "개인 키 암호가 성공적으로 업데이트 됨.", +"Could not update the private key password. Maybe the old password was not correct." => "개인 키 암호를 업데이트할 수 없습니다. 이전 암호가 올바르지 않은 것 같습니다.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "암호화 앱이 초기화되지 않았습니다! 암호화 앱이 다시 활성화된 것 같습니다. 암호화 앱을 초기화하려면 로그아웃했다 다시 로그인하십시오.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "개인 키가 올바르지 않습니다! 암호가 %s(예: 회사 디렉터리) 외부에서 변경된 것 같습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 수정하십시오.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "이 파일을 복호화할 수 없습니다. 공유된 파일일 수도 있습니다. 파일 소유자에게 공유를 다시 요청하십시오.", +"Unknown error please check your system settings or contact your administrator" => "알 수 없는 오류. 시스템 설정을 확인하거나 관리자에게 문의하십시오.", +"Missing requirements." => "요구 사항이 부족합니다.", +"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "PHP 5.3.3 이상 설치 여부, PHP의 OpenSSL 확장 기능 활성화 및 설정 여부를 확인하십시오. 암호화 앱이 비활성화 되었습니다.", +"Following users are not set up for encryption:" => "다음 사용자는 암호화를 사용할 수 없습니다:", +"Initial encryption started... This can take some time. Please wait." => "초기 암호화가 시작되었습니다... 시간이 걸릴 수도 있으니 기다려 주십시오.", "Saving..." => "저장 중...", +"Go directly to your " => "다음으로 바로 가기: ", "personal settings" => "개인 설정", "Encryption" => "암호화", -"Recovery key password" => "키 비밀번호 복구", -"Change recovery key password:" => "복구 키 비밀번호 변경", -"Old Recovery key password" => "예전 복구 키 비밀번호", -"New Recovery key password" => "새 복구 키 비밀번호", +"Enable recovery key (allow to recover users files in case of password loss):" => "복구 키 사용 (암호를 잊었을 때 파일을 복구할 수 있도록 함):", +"Recovery key password" => "복구 키 암호", +"Repeat Recovery key password" => "복구 키 암호 재입력", +"Enabled" => "활성화", +"Disabled" => "비활성화", +"Change recovery key password:" => "복구 키 암호 변경:", +"Old Recovery key password" => "이전 복구 키 암호", +"New Recovery key password" => "새 복구 키 암호", +"Repeat New Recovery key password" => "새 복구 키 암호 재입력", "Change Password" => "암호 변경", -"Old log-in password" => "예전 로그인 암호", +"Your private key password no longer match your log-in password:" => "개인 키 암호와 로그인 암호가 일치하지 않습니다:", +"Set your old private key password to your current log-in password." => "이전 개인 키 암호를 현재 로그인 암호로 설정하십시오.", +" If you don't remember your old password you can ask your administrator to recover your files." => " 이전 암호가 기억나지 않으면 시스템 관리자에게 파일 복구를 요청하십시오.", +"Old log-in password" => "이전 로그인 암호", "Current log-in password" => "현재 로그인 암호", "Update Private Key Password" => "개인 키 암호 업데이트", +"Enable password recovery:" => "암호 복구 사용:", +"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "이 옵션을 사용하면 암호를 잊었을 때 암호화된 파일에 다시 접근할 수 있습니다", "File recovery settings updated" => "파일 복구 설정 업데이트됨", -"Could not update file recovery" => "파일 복구를 업데이트 할수 없습니다" +"Could not update file recovery" => "파일 복구를 업데이트할 수 없습니다" ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files_encryption/l10n/lt_LT.php b/apps/files_encryption/l10n/lt_LT.php index 4ededb716f4e16badeef5a02d1ff36ba341bcc79..993e03388d9a91d041313b755bee0f62a1270a26 100644 --- a/apps/files_encryption/l10n/lt_LT.php +++ b/apps/files_encryption/l10n/lt_LT.php @@ -8,22 +8,25 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Slaptažodis nebuvo pakeistas. Gali būti, kad buvo neteisingai suvestas senasis.", "Private key password successfully updated." => "Privataus rakto slaptažodis buvo sėkmingai atnaujintas.", "Could not update the private key password. Maybe the old password was not correct." => "Nepavyko atnaujinti privataus rakto slaptažodžio. Gali būti, kad buvo neteisingai suvestas senasis.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Jūsų privatus raktas yra netinkamas! Panašu, kad Jūsų slaptažodis buvo pakeistas išorėje ownCloud sistemos (pvz. Jūsų organizacijos kataloge). Galite atnaujinti savo privataus rakto slaptažodį savo asmeniniuose nustatymuose, kad atkurti prieigą prie savo šifruotų failų.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Šifravimo programa nepaleista! Galbūt šifravimo programa buvo įjungta dar kartą Jūsų sesijos metu. Prašome atsijungti ir vėl prisijungti, kad paleisti šifravimo programą.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Failo iššifruoti nepavyko, gali būti jog jis yra pasidalintas su jumis. Paprašykite failo savininko, kad jums iš naujo pateiktų šį failą.", +"Unknown error please check your system settings or contact your administrator" => "Neatpažinta klaida, patikrinkite sistemos nustatymus arba kreipkitės į savo sistemos aministratorių", "Missing requirements." => "Trūkstami laukai.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Prašome įsitikinti, kad PHP 5.3.3 ar naujesnė yra įdiegta ir kad OpenSSL kartu su PHP plėtiniu yra šjungti ir teisingai sukonfigūruoti. Kol kas šifravimo programa bus išjungta.", "Following users are not set up for encryption:" => "Sekantys naudotojai nenustatyti šifravimui:", "Saving..." => "Saugoma...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Jūsų privatus raktas yra netinkamas! Galbūt Jūsų slaptažodis buvo pakeistas iš išorės?", -"You can unlock your private key in your " => "Galite atrakinti savo privatų raktą savo", +"Go directly to your " => "Eiti tiesiai į Jūsų", "personal settings" => "asmeniniai nustatymai", "Encryption" => "Šifravimas", "Enable recovery key (allow to recover users files in case of password loss):" => "Įjunkite atkūrimo raktą, (leisti atkurti naudotojų failus praradus slaptažodį):", "Recovery key password" => "Atkūrimo rakto slaptažodis", +"Repeat Recovery key password" => "Pakartokite atkūrimo rakto slaptažodį", "Enabled" => "Įjungta", "Disabled" => "Išjungta", "Change recovery key password:" => "Pakeisti atkūrimo rakto slaptažodį:", "Old Recovery key password" => "Senas atkūrimo rakto slaptažodis", "New Recovery key password" => "Naujas atkūrimo rakto slaptažodis", +"Repeat New Recovery key password" => "Pakartokite naują atkūrimo rakto slaptažodį", "Change Password" => "Pakeisti slaptažodį", "Your private key password no longer match your log-in password:" => "Privatus rakto slaptažodis daugiau neatitinka Jūsų prisijungimo slaptažodžio:", "Set your old private key password to your current log-in password." => "Nustatyti Jūsų privataus rakto slaptažodį į Jūsų dabartinį prisijungimo.", diff --git a/apps/files_encryption/l10n/mk.php b/apps/files_encryption/l10n/mk.php index fd8dd4e51c1cb71fd4dc35897f1d393efc7029d7..098f4d635ba34c8e8ae991501d874bac49b5d052 100644 --- a/apps/files_encryption/l10n/mk.php +++ b/apps/files_encryption/l10n/mk.php @@ -1,6 +1,20 @@ "Лозинката е успешно променета.", +"Could not change the password. Maybe the old password was not correct." => "Лозинката не можеше да се промени. Можеби старата лозинка не беше исправна.", +"Missing requirements." => "Барања кои недостасуваат.", "Saving..." => "Снимам...", -"Encryption" => "Енкрипција" +"Go directly to your " => "Одете директно на вашиот", +"personal settings" => "лични подесувања", +"Encryption" => "Енкрипција", +"Repeat Recovery key password" => "Повтори ја лозинката за клучот на обновување", +"Enabled" => "Овозможен", +"Disabled" => "Оневозможен", +"Old Recovery key password" => "Старата лозинка за клучот на обновување ", +"Repeat New Recovery key password" => "Повтори ја лозинката за клучот на обновувањето", +"Change Password" => "Смени лозинка", +"Old log-in password" => "Старата лозинка за најавување", +"Current log-in password" => "Тековната лозинка за најавување", +"Enable password recovery:" => "Овозможи го обновувањето на лозинката:" ); $PLURAL_FORMS = "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"; diff --git a/apps/files_encryption/l10n/nl.php b/apps/files_encryption/l10n/nl.php index e37ccf54d6dc375d46f155af464789ca4f9bf3cb..081e46a785cee8caea5a26993a469fcf78d60c4e 100644 --- a/apps/files_encryption/l10n/nl.php +++ b/apps/files_encryption/l10n/nl.php @@ -8,22 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Kon wachtwoord niet wijzigen. Wellicht oude wachtwoord niet juist ingevoerd.", "Private key password successfully updated." => "Privésleutel succesvol bijgewerkt.", "Could not update the private key password. Maybe the old password was not correct." => "Kon het wachtwoord van de privésleutel niet wijzigen. Misschien was het oude wachtwoord onjuist.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Uw privésleutel is niet geldig! Misschien was uw wachtwoord van buitenaf gewijzigd. U kunt het wachtwoord van uw privésleutel aanpassen in uw persoonlijke instellingen om toegang tot uw versleutelde bestanden te vergaren.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Crypto app niet geïnitialiseerd. Misschien werd de crypto app geheractiveerd tijdens de sessie. Log uit en log daarna opnieuw in om de crypto app te initialiseren.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Uw privésleutel is niet geldig! Waarschijnlijk is uw wachtwoord gewijzigd buiten %s (bijv. uw corporate directory). U kunt uw privésleutel wachtwoord in uw persoonlijke instellingen bijwerken om toegang te krijgen tot uw versleutelde bestanden.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Kan dit bestand niet ontcijferen, waarschijnlijk is het een gedeeld bestand, Vraag de eigenaar om het bestand opnieuw met u te delen.", +"Unknown error please check your system settings or contact your administrator" => "Onbekende fout, Controleer uw systeeminstellingen of neem contact op met uw systeembeheerder", "Missing requirements." => "Missende benodigdheden.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Wees er zeker van dat PHP5.3.3 of nieuwer is geïstalleerd en dat de OpenSSL PHP extensie is ingeschakeld en correct geconfigureerd. De versleutel-app is voorlopig uitgeschakeld.", "Following users are not set up for encryption:" => "De volgende gebruikers hebben geen configuratie voor encryptie:", +"Initial encryption started... This can take some time. Please wait." => "initiële versleuteling gestart... Dit kan even duren, geduld a.u.b.", "Saving..." => "Opslaan", -"Your private key is not valid! Maybe the your password was changed from outside." => "Uw privésleutel is niet geldig. Misschien was uw wachtwoord van buitenaf gewijzigd.", -"You can unlock your private key in your " => "U kunt uw privésleutel deblokkeren in uw", +"Go directly to your " => "Ga meteen naar uw", "personal settings" => "persoonlijke instellingen", "Encryption" => "Versleuteling", "Enable recovery key (allow to recover users files in case of password loss):" => "Activeren herstelsleutel (maakt het mogelijk om gebruikersbestanden terug te halen in geval van verlies van het wachtwoord):", "Recovery key password" => "Wachtwoord herstelsleulel", +"Repeat Recovery key password" => "Herhaal het herstelsleutel wachtwoord", "Enabled" => "Geactiveerd", "Disabled" => "Gedeactiveerd", "Change recovery key password:" => "Wijzig wachtwoord herstelsleutel:", "Old Recovery key password" => "Oude wachtwoord herstelsleutel", "New Recovery key password" => "Nieuwe wachtwoord herstelsleutel", +"Repeat New Recovery key password" => "Herhaal het nieuwe herstelsleutel wachtwoord", "Change Password" => "Wijzigen wachtwoord", "Your private key password no longer match your log-in password:" => "Het wachtwoord van uw privésleutel komt niet meer overeen met uw inlogwachtwoord:", "Set your old private key password to your current log-in password." => "Stel het wachtwoord van uw oude privésleutel in op uw huidige inlogwachtwoord.", diff --git a/apps/files_encryption/l10n/pl.php b/apps/files_encryption/l10n/pl.php index ca4502ff6aa0219e7466657c0b41ba623770d07b..b768bd46f8cfb07bb1219530676abfa2723f798b 100644 --- a/apps/files_encryption/l10n/pl.php +++ b/apps/files_encryption/l10n/pl.php @@ -8,22 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Nie można zmienić hasła. Może stare hasło nie było poprawne.", "Private key password successfully updated." => "Pomyślnie zaktualizowano hasło klucza prywatnego.", "Could not update the private key password. Maybe the old password was not correct." => "Nie można zmienić prywatnego hasła. Może stare hasło nie było poprawne.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Klucz prywatny nie jest ważny! Prawdopodobnie Twoje hasło zostało zmienione poza systemem ownCloud (np. w katalogu firmy). Aby odzyskać dostęp do zaszyfrowanych plików można zaktualizować hasło klucza prywatnego w ustawieniach osobistych.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Szyfrowanie aplikacja nie została zainicjowane! Może szyfrowanie aplikacji zostało ponownie włączone podczas tej sesji. Spróbuj się wylogować i zalogować ponownie aby zainicjować szyfrowanie aplikacji.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Klucz prywatny nie jest poprawny! Prawdopodobnie Twoje hasło zostało zmienione poza %s (np. w katalogu firmy). Aby odzyskać dostęp do zaszyfrowanych plików można zaktualizować hasło klucza prywatnego w ustawieniach osobistych.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Nie można odszyfrować tego pliku, prawdopodobnie jest to plik udostępniony. Poproś właściciela pliku o ponowne udostępnianie pliku Tobie.", +"Unknown error please check your system settings or contact your administrator" => "Nieznany błąd proszę sprawdzić ustawienia systemu lub skontaktuj się z administratorem", "Missing requirements." => "Brak wymagań.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Proszę upewnić się, że PHP 5.3.3 lub nowszy jest zainstalowany i że OpenSSL oraz rozszerzenie PHP jest włączone i poprawnie skonfigurowane. Obecnie szyfrowanie aplikacji zostało wyłączone.", "Following users are not set up for encryption:" => "Następujący użytkownicy nie mają skonfigurowanego szyfrowania:", +"Initial encryption started... This can take some time. Please wait." => "Rozpoczęto szyfrowanie... To może chwilę potrwać. Proszę czekać.", "Saving..." => "Zapisywanie...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz.", -"You can unlock your private key in your " => "Możesz odblokować swój klucz prywatny w swojej", +"Go directly to your " => "Przejdź bezpośrednio do", "personal settings" => "Ustawienia osobiste", "Encryption" => "Szyfrowanie", "Enable recovery key (allow to recover users files in case of password loss):" => "Włączhasło klucza odzyskiwania (pozwala odzyskać pliki użytkowników w przypadku utraty hasła):", "Recovery key password" => "Hasło klucza odzyskiwania", +"Repeat Recovery key password" => "Powtórz hasło klucza odzyskiwania", "Enabled" => "Włączone", "Disabled" => "Wyłączone", "Change recovery key password:" => "Zmień hasło klucza odzyskiwania", "Old Recovery key password" => "Stare hasło klucza odzyskiwania", "New Recovery key password" => "Nowe hasło klucza odzyskiwania", +"Repeat New Recovery key password" => "Powtórz nowe hasło klucza odzyskiwania", "Change Password" => "Zmień hasło", "Your private key password no longer match your log-in password:" => "Hasło klucza prywatnego nie pasuje do hasła logowania:", "Set your old private key password to your current log-in password." => "Podaj swoje stare prywatne hasło aby ustawić nowe", diff --git a/apps/files_encryption/l10n/pt_BR.php b/apps/files_encryption/l10n/pt_BR.php index 5b8a68657b78d2a5d88c174b9925048b864db970..2fce7fd13a5994dc1ffa2767c25867d4d2d36ada 100644 --- a/apps/files_encryption/l10n/pt_BR.php +++ b/apps/files_encryption/l10n/pt_BR.php @@ -8,22 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Não foi possível alterar a senha. Talvez a senha antiga não estava correta.", "Private key password successfully updated." => "Senha de chave privada atualizada com sucesso.", "Could not update the private key password. Maybe the old password was not correct." => "Não foi possível atualizar a senha de chave privada. Talvez a senha antiga esteja incorreta.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Sua chave privada não é válida! Provavelmente sua senha foi alterada fora do sistema ownCloud (por exemplo, seu diretório corporativo). Você pode atualizar sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Aplicativo de criptografia não foi inicializado! Talvez o aplicativo de criptografia tenha sido reativado durante essa sessão. Por favor, tente fazer logoff e login novamente para inicializar o aplicativo de criptografia.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Sua chave privada não é válida! Provavelmente sua senha foi alterada fora de %s (por exemplo, seu diretório corporativo). Você pode atualizar sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Este arquivo não pode ser decriptado, provavelmente este é um arquivo compartilhado. Poe favoe peça ao dono do arquivo para compartilha-lo com você.", +"Unknown error please check your system settings or contact your administrator" => "Erro desconhecido, por favor verifique suas configurações ou faça contato com o administrador", "Missing requirements." => "Requisitos não encontrados.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Por favor, certifique-se que o PHP 5.3.3 ou mais recente está instalado e que a extensão PHP OpenSSL está habilitado e configurado corretamente. Por enquanto, o aplicativo de criptografia foi desativado.", "Following users are not set up for encryption:" => "Seguintes usuários não estão configurados para criptografia:", +"Initial encryption started... This can take some time. Please wait." => "Criptografia inicial inicializada... Isto pode tomar algum tempo. Por favor espere.", "Saving..." => "Salvando...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Sua chave privada não é válida! Talvez sua senha tenha sido mudada.", -"You can unlock your private key in your " => "Você pode desbloquear sua chave privada nas suas", +"Go directly to your " => "Ir diretamente para o seu", "personal settings" => "configurações pessoais.", "Encryption" => "Criptografia", "Enable recovery key (allow to recover users files in case of password loss):" => "Habilitar chave de recuperação (permite recuperar arquivos de usuários em caso de perda de senha):", "Recovery key password" => "Senha da chave de recuperação", +"Repeat Recovery key password" => "Repita Recuperação de senha da chave", "Enabled" => "Habilitado", "Disabled" => "Desabilitado", "Change recovery key password:" => "Mudar a senha da chave de recuperação:", "Old Recovery key password" => "Senha antiga da chave de recuperação", "New Recovery key password" => "Nova senha da chave de recuperação", +"Repeat New Recovery key password" => "Repita Nova senha da chave de recuperação", "Change Password" => "Trocar Senha", "Your private key password no longer match your log-in password:" => "Sua senha de chave privada não coincide mais com sua senha de login:", "Set your old private key password to your current log-in password." => "Configure sua antiga senha de chave privada para sua atual senha de login.", diff --git a/apps/files_encryption/l10n/pt_PT.php b/apps/files_encryption/l10n/pt_PT.php index 53335ab7297e70e608593396f0a6899ca4cb1293..77424005c3e2d23caae4d310262014216b5fe26b 100644 --- a/apps/files_encryption/l10n/pt_PT.php +++ b/apps/files_encryption/l10n/pt_PT.php @@ -7,8 +7,8 @@ $TRANSLATIONS = array( "Password successfully changed." => "Password alterada com sucesso.", "Could not change the password. Maybe the old password was not correct." => "Não foi possivel alterar a password. Possivelmente a password antiga não está correcta.", "Could not update the private key password. Maybe the old password was not correct." => "Não foi possível alterar a chave. Possivelmente a password antiga não está correcta.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Chave privada não é válida! Provavelmente senha foi alterada fora do sistema ownCloud (exemplo, o diretório corporativo). Pode atualizar password da chave privada em configurações personalizadas para recuperar o acesso aos seus arquivos encriptados.", "Missing requirements." => "Faltam alguns requisitos.", +"Following users are not set up for encryption:" => "Os utilizadores seguintes não estão marcados para cifragem:", "Saving..." => "A guardar...", "personal settings" => "configurações personalizadas ", "Encryption" => "Encriptação", diff --git a/apps/files_encryption/l10n/ru.php b/apps/files_encryption/l10n/ru.php index e0d52399c738d6ccdbc5ae625fb7fde03bec469c..e9744b3db4dfdcc90fd3b14a67c7ba5759be70a4 100644 --- a/apps/files_encryption/l10n/ru.php +++ b/apps/files_encryption/l10n/ru.php @@ -8,22 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Невозможно изменить пароль. Возможно старый пароль не был верен.", "Private key password successfully updated." => "Пароль секретного ключа успешно обновлён.", "Could not update the private key password. Maybe the old password was not correct." => "Невозможно обновить пароль от секретного ключа. Возможно, старый пароль указан неверно.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Ваш секретный ключ не действителен! Вероятно, ваш пароль был изменен вне системы OwnCloud (например, корпоративный каталог). Вы можете обновить секретный ключ в личных настройках на странице восстановления доступа к зашифрованным файлам. ", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Приложение шифрации не инициализированно! Возможно приложение шифрации было реактивировано во время вашей сессии. Пожалуйста, попробуйте выйти и войти снова чтобы проинициализировать приложение шифрации.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Ваш секретный ключ не действителен! Вероятно, ваш пароль был изменен вне %s (например, корпоративный каталог). Вы можете обновить секретный ключ в личных настройках на странице восстановления доступа к зашифрованным файлам. ", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Не могу расшифровать файл, возможно это опубликованный файл. Пожалуйста, попросите владельца файла поделиться им с вами еще раз.", +"Unknown error please check your system settings or contact your administrator" => "Неизвестная ошибка, пожалуйста, проверьте системные настройки или свяжитесь с администратором", "Missing requirements." => "Требования отсутствуют.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Пожалуйста, убедитесь, что версия PHP 5.3.3 или новее, а также, что OpenSSL и соответствующее расширение PHP включены и правильно настроены. На данный момент приложение шифрования отключено.", "Following users are not set up for encryption:" => "Для следующих пользователей шифрование не настроено:", +"Initial encryption started... This can take some time. Please wait." => "Начато начальное шифрование... Это может занять какое-то время. Пожалуйста, подождите.", "Saving..." => "Сохранение...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Секретный ключ недействителен! Возможно, Ваш пароль был изменён в другой программе.", -"You can unlock your private key in your " => "Вы можете разблокировать закрытый ключ в своём ", +"Go directly to your " => "Перейти прямо в", "personal settings" => "персональные настройки", "Encryption" => "Шифрование", "Enable recovery key (allow to recover users files in case of password loss):" => "Включить ключ восстановления (позволяет пользователям восстановить файлы при потере пароля):", "Recovery key password" => "Пароль для ключа восстановления", +"Repeat Recovery key password" => "Повторите пароль восстановления ключа", "Enabled" => "Включено", "Disabled" => "Отключено", "Change recovery key password:" => "Сменить пароль для ключа восстановления:", "Old Recovery key password" => "Старый пароль для ключа восстановления", "New Recovery key password" => "Новый пароль для ключа восстановления", +"Repeat New Recovery key password" => "Повторите новый пароль восстановления ключа", "Change Password" => "Изменить пароль", "Your private key password no longer match your log-in password:" => "Пароль от секретного ключа больше не соответствует паролю входа:", "Set your old private key password to your current log-in password." => "Замените старый пароль от секретного ключа на новый пароль входа.", diff --git a/apps/files_encryption/l10n/sk_SK.php b/apps/files_encryption/l10n/sk_SK.php index a80eb3e65214a8bbbc4d70dff8a801be95cababc..9e2c01eba335dbf9d4e8c27718f4147d6f7189d8 100644 --- a/apps/files_encryption/l10n/sk_SK.php +++ b/apps/files_encryption/l10n/sk_SK.php @@ -8,22 +8,27 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "Nemožno zmeniť heslo. Pravdepodobne nebolo staré heslo zadané správne.", "Private key password successfully updated." => "Heslo súkromného kľúča je úspešne aktualizované.", "Could not update the private key password. Maybe the old password was not correct." => "Nemožno aktualizovať heslo súkromného kľúča. Možno nebolo staré heslo správne.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Váš privátny kľúč je nesprávny! Pravdepodobne bolo zmenené vaše heslo mimo systému ownCloud (napr. váš korporátny adresár). Môžte aktualizovať vaše heslo privátneho kľúča v osobných nastaveniach za účelom obnovenia prístupu k zašifrovaným súborom.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Šifrovacia aplikácia nie je inicializovaná. Je možné, že aplikácia bola znova aktivovaná počas vášho prihlasovania. Pokúste sa odhlásiť a znova prihlásiť pre inicializáciu šifrovania.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Váš súkromný kľúč nie je platný! Možno bolo vaše heslo zmenené mimo %s (napr. firemný priečinok). Môžete si aktualizovať heslo svojho ​​súkromného kľúča vo vašom osobnom nastavení, ak si chcete obnoviť prístup k šifrovaným súborom.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Tento súbor sa nepodarilo dešifrovať, pravdepodobne je zdieľaný. Požiadajte majiteľa súboru, aby ho s vami znovu vyzdieľal.", +"Unknown error please check your system settings or contact your administrator" => "Neznáma chyba, skontrolujte si vaše systémové nastavenia alebo kontaktujte administrátora", "Missing requirements." => "Chýbajúce požiadavky.", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Prosím uistite sa, že PHP verzie 5.3.3 alebo novšej je nainštalované a tiež, že OpenSSL knižnica spolu z PHP rozšírením je povolená a konfigurovaná správne. Nateraz bola aplikácia šifrovania zablokovaná.", "Following users are not set up for encryption:" => "Nasledujúci používatelia nie sú nastavení pre šifrovanie:", +"Initial encryption started... This can take some time. Please wait." => "Počiatočné šifrovanie započalo ... To môže nejakú dobu trvať. Čakajte prosím.", "Saving..." => "Ukladám...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Váš súkromný kľúč je neplatný. Možno bolo Vaše heslo zmenené z vonku.", -"You can unlock your private key in your " => "Môžte odomknúť váš privátny kľúč v", +"Go directly to your " => "Choďte priamo do vášho", "personal settings" => "osobné nastavenia", "Encryption" => "Šifrovanie", "Enable recovery key (allow to recover users files in case of password loss):" => "Povoliť obnovovací kľúč (umožňuje obnoviť používateľské súbory v prípade straty hesla):", "Recovery key password" => "Heslo obnovovacieho kľúča", +"Repeat Recovery key password" => "Zopakujte heslo kľúča pre obnovu", "Enabled" => "Povolené", "Disabled" => "Zakázané", "Change recovery key password:" => "Zmeniť heslo obnovovacieho kľúča:", "Old Recovery key password" => "Staré heslo obnovovacieho kľúča", "New Recovery key password" => "Nové heslo obnovovacieho kľúča", +"Repeat New Recovery key password" => "Zopakujte nové heslo kľúča pre obnovu", "Change Password" => "Zmeniť heslo", "Your private key password no longer match your log-in password:" => "Vaše heslo súkromného kľúča je rovnaké ako Vaše prihlasovacie heslo:", "Set your old private key password to your current log-in password." => "Nastavte si staré heslo súkromného kľúča k Vášmu súčasnému prihlasovaciemu heslu.", diff --git a/apps/files_encryption/l10n/sl.php b/apps/files_encryption/l10n/sl.php index 8b2f264c62e92935d58e1150b49b193cb1806d2e..60faf34cf88c5527d5079ac11f2608609e247ba4 100644 --- a/apps/files_encryption/l10n/sl.php +++ b/apps/files_encryption/l10n/sl.php @@ -1,39 +1,44 @@ "Ključ za obnovitev gesla je bil uspešno nastavljen", -"Could not enable recovery key. Please check your recovery key password!" => "Ključa za obnovitev gesla ni bilo mogoče nastaviti. Preverite ključ!", -"Recovery key successfully disabled" => "Ključ za obnovitev gesla je bil uspešno onemogočen", -"Could not disable recovery key. Please check your recovery key password!" => "Ključa za obnovitev gesla ni bilo mogoče onemogočiti. Preverite ključ!", -"Password successfully changed." => "Geslo je bilo uspešno spremenjeno.", -"Could not change the password. Maybe the old password was not correct." => "Gesla ni bilo mogoče spremeniti. Morda vnos starega gesla ni bil pravilen.", -"Private key password successfully updated." => "Zasebni ključ za geslo je bil uspešno posodobljen.", -"Could not update the private key password. Maybe the old password was not correct." => "Zasebnega ključa za geslo ni bilo mogoče posodobiti. Morda vnos starega gesla ni bil pravilen.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Vaš zasebni ključ ni veljaven. Morda je bilo vaše geslo spremenjeno zunaj sistema ownCloud (npr. v skupnem imeniku). Svoj zasebni ključ, ki vam bo omogočil dostop do šifriranih dokumentov, lahko posodobite v osebnih nastavitvah.", +"Recovery key successfully enabled" => "Ključ za obnovitev gesla je uspešno nastavljen", +"Could not enable recovery key. Please check your recovery key password!" => "Ključa za obnovitev gesla ni mogoče nastaviti. Preverite ključ!", +"Recovery key successfully disabled" => "Ključ za obnovitev gesla je uspešno onemogočen", +"Could not disable recovery key. Please check your recovery key password!" => "Ključa za obnovitev gesla ni mogoče onemogočiti. Preverite ključ!", +"Password successfully changed." => "Geslo je uspešno spremenjeno.", +"Could not change the password. Maybe the old password was not correct." => "Gesla ni mogoče spremeniti. Morda vnos starega gesla ni pravilen.", +"Private key password successfully updated." => "Zasebni ključ za geslo je uspešno posodobljen.", +"Could not update the private key password. Maybe the old password was not correct." => "Zasebnega ključa za geslo ni mogoče posodobiti. Morda vnos starega gesla ni bil pravilen.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Program za šifriranje ni začet. Morda je bil program ponovno omogočen šele med zagonom trenutne seje. Odjavite se in se nato prijavite nazaj. S tem morda razrešite napako.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Zasebni ključ ni veljaven. Najverjetneje je bilo geslo spremenjeno izven %s (najverjetneje je to poslovna mapa). Geslo lahko posodobite med osebnimi nastavitvami in s tem obnovite dostop do šifriranih datotek.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Te datoteke ni mogoče šifrirati, ker je to najverjetneje datoteka v souporabi. Prosite lastnika datoteke, da jo da ponovno v souporabo.", +"Unknown error please check your system settings or contact your administrator" => "Prišlo je do neznane napake. Preverite nastavitve sistema ali pa stopite v stik s skrbnikom sistema.", "Missing requirements." => "Manjkajoče zahteve", -"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Preverite, da imate na strežniku nameščen paket PHP 5.3.3 ali novejši in da je omogočen in pravilno nastavljen PHP OpenSSL . Zaenkrat je šifriranje onemogočeno.", -"Following users are not set up for encryption:" => "Naslednji uporabniki še nimajo nastavljenega šifriranja:", +"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Preverite, ali je na strežniku nameščen paket PHP 5.3.3 ali novejši, da je omogočen in pravilno nastavljen PHP OpenSSL. Z obstoječimi možnostmi šifriranje ni mogoče.", +"Following users are not set up for encryption:" => "Navedeni uporabniki še nimajo nastavljenega šifriranja:", +"Initial encryption started... This can take some time. Please wait." => "Začetno šifriranje je začeto ... Opravilo je lahko dolgotrajno.", "Saving..." => "Poteka shranjevanje ...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Vaš zasebni ključ ni veljaven. Morda je bilo vaše geslo spremenjeno.", -"You can unlock your private key in your " => "Svoj zasebni ključ lahko odklenite v", +"Go directly to your " => "Skočite neposredno na", "personal settings" => "osebne nastavitve", "Encryption" => "Šifriranje", -"Enable recovery key (allow to recover users files in case of password loss):" => "Omogoči ključ za obnovitev datotek (v primeru izgube gesla)", +"Enable recovery key (allow to recover users files in case of password loss):" => "Omogoči ključ za obnovitev datotek (v primeru izgube gesla):", "Recovery key password" => "Ključ za obnovitev gesla", +"Repeat Recovery key password" => "Ponovi ključ za obnovitev gesla", "Enabled" => "Omogočeno", "Disabled" => "Onemogočeno", "Change recovery key password:" => "Spremeni ključ za obnovitev gesla:", "Old Recovery key password" => "Stari ključ za obnovitev gesla", -"New Recovery key password" => "Nov ključ za obnovitev gesla", +"New Recovery key password" => "Novi ključ za obnovitev gesla", +"Repeat New Recovery key password" => "Ponovi novi ključ za obnovitev gesla", "Change Password" => "Spremeni geslo", -"Your private key password no longer match your log-in password:" => "Vaš zasebni ključ za geslo se ne ujema z vnešenim geslom ob prijavi:", -"Set your old private key password to your current log-in password." => "Nastavite svoj star zasebni ključ v geslo, vnešeno ob prijavi.", -" If you don't remember your old password you can ask your administrator to recover your files." => "Če ste svoje geslo pozabili, lahko vaše datoteke obnovi skrbnik sistema.", +"Your private key password no longer match your log-in password:" => "Vaš zasebni ključ za geslo se ne ujema z geslom, vnesenim ob prijavi:", +"Set your old private key password to your current log-in password." => "Nastavite svoj star zasebni ključ v geslo, vneseno ob prijavi.", +" If you don't remember your old password you can ask your administrator to recover your files." => "Če ste pozabili svoje geslo, lahko vaše datoteke obnovi le skrbnik sistema.", "Old log-in password" => "Staro geslo", "Current log-in password" => "Trenutno geslo", "Update Private Key Password" => "Posodobi zasebni ključ", "Enable password recovery:" => "Omogoči obnovitev gesla:", -"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Nastavitev te možnosti omogoča ponovno pridobitev dostopa do šifriranih datotek, v primeru da boste geslo pozabili.", -"File recovery settings updated" => "Nastavitve obnavljanja dokumentov so bile posodobljene", -"Could not update file recovery" => "Nastavitev za obnavljanje dokumentov ni bilo mogoče posodobiti" +"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Nastavitev te možnosti omogoča ponovno pridobitev dostopa do šifriranih datotek, v primeru, da boste geslo pozabili.", +"File recovery settings updated" => "Nastavitve obnavljanja dokumentov so posodobljene", +"Could not update file recovery" => "Nastavitev za obnavljanje dokumentov ni mogoče posodobiti" ); $PLURAL_FORMS = "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"; diff --git a/apps/files_encryption/l10n/sq.php b/apps/files_encryption/l10n/sq.php new file mode 100644 index 0000000000000000000000000000000000000000..dc156ff3bf0d6bff16f761097a6d5bcf2d608d36 --- /dev/null +++ b/apps/files_encryption/l10n/sq.php @@ -0,0 +1,5 @@ + "Duke ruajtur..." +); +$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_encryption/l10n/sv.php b/apps/files_encryption/l10n/sv.php index 88ba6b471597312f046379199e75f53ea096e868..1e509ea08e7a3eb889aef80fcb9f7812b0490660 100644 --- a/apps/files_encryption/l10n/sv.php +++ b/apps/files_encryption/l10n/sv.php @@ -6,31 +6,35 @@ $TRANSLATIONS = array( "Could not disable recovery key. Please check your recovery key password!" => "Kunde inte inaktivera återställningsnyckeln. Vänligen kontrollera ditt lösenord för återställningsnyckeln!", "Password successfully changed." => "Ändringen av lösenordet lyckades.", "Could not change the password. Maybe the old password was not correct." => "Kunde inte ändra lösenordet. Kanske det gamla lösenordet inte var rätt.", -"Private key password successfully updated." => "Den privata lösenordsnyckeln uppdaterades utan problem.", -"Could not update the private key password. Maybe the old password was not correct." => "Kunde inte uppdatera den privata lösenordsnyckeln. Kanske var det gamla lösenordet fel.", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Din privata lösenordsnyckel är inte giltig! Troligen har ditt lösenord ändrats utanför ownCloud (t.ex. i företagets katalogtjänst). Du kan uppdatera den privata lösenordsnyckeln under dina personliga inställningar för att återfå tillgång till dina filer.", +"Private key password successfully updated." => "Den privata nyckelns lösenord uppdaterades utan problem.", +"Could not update the private key password. Maybe the old password was not correct." => "Kunde inte uppdatera lösenordet för den privata nyckeln. Kanske var det gamla lösenordet fel.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Krypteringsprogrammet kunde inte initieras! Möjligen blev krypteringsprogrammet återaktiverad under din session. Försök med att logga ut och in igen för att initiera krypteringsprogrammet.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Din privata lösenordsnyckel är inte giltig! Troligen har ditt lösenord ändrats utanför %s (t.ex. i företagets katalogtjänst). Du kan uppdatera den privata lösenordsnyckeln under dina personliga inställningar för att återfå tillgång till dina filer.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Kan ej dekryptera denna fil, förmodligen är det en delad fil. Be ägaren av filen att dela den med dig.", +"Unknown error please check your system settings or contact your administrator" => "Oväntat fel, kolla dina system inställningar eller kontakta din administratör", "Missing requirements." => "Krav som saknas", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Kontrollera att PHP 5.3.3 eller senare är installerad och att tillägget OpenSSL PHP är aktiverad och korrekt konfigurerad. Kryptering är tillsvidare inaktiverad.", "Following users are not set up for encryption:" => "Följande användare har inte aktiverat kryptering:", "Saving..." => "Sparar...", -"Your private key is not valid! Maybe the your password was changed from outside." => "Din privata lösenordsnyckel är inte giltig! Kanske byttes ditt lösenord från utsidan.", -"You can unlock your private key in your " => "Du kan låsa upp din privata nyckel i dina", +"Go directly to your " => "Gå direkt till din", "personal settings" => "personliga inställningar", "Encryption" => "Kryptering", -"Enable recovery key (allow to recover users files in case of password loss):" => "Aktivera lösenordsnyckel (för att kunna återfå användarens filer vid glömt eller förlorat lösenord):", -"Recovery key password" => "Lösenordsnyckel", +"Enable recovery key (allow to recover users files in case of password loss):" => "Aktivera återställningsnyckel (för att kunna återfå användarens filer vid glömt eller förlorat lösenord):", +"Recovery key password" => "Lösenord för återställningsnyckel", +"Repeat Recovery key password" => "Upprepa återställningsnyckelns lösenord", "Enabled" => "Aktiverad", "Disabled" => "Inaktiverad", -"Change recovery key password:" => "Ändra lösenordsnyckel:", -"Old Recovery key password" => "Gammal lösenordsnyckel", -"New Recovery key password" => "Ny lösenordsnyckel", +"Change recovery key password:" => "Ändra lösenord för återställningsnyckel:", +"Old Recovery key password" => "Gammalt lösenord för återställningsnyckel", +"New Recovery key password" => "Nytt lösenord för återställningsnyckel", +"Repeat New Recovery key password" => "Upprepa lösenord för ny återställningsnyckel", "Change Password" => "Byt lösenord", -"Your private key password no longer match your log-in password:" => "Din privata lösenordsnyckel stämmer inte längre överrens med ditt inloggningslösenord:", -"Set your old private key password to your current log-in password." => "Ställ in din gamla privata lösenordsnyckel till ditt aktuella inloggningslösenord.", +"Your private key password no longer match your log-in password:" => "Lösenordet till din privata nyckel stämmer inte längre överens med ditt inloggningslösenord:", +"Set your old private key password to your current log-in password." => "Använd din gamla privata nyckels lösenord som ditt aktuella inloggningslösenord.", " If you don't remember your old password you can ask your administrator to recover your files." => "Om du inte kommer ihåg ditt gamla lösenord kan du be din administratör att återställa dina filer.", "Old log-in password" => "Gammalt inloggningslösenord", "Current log-in password" => "Nuvarande inloggningslösenord", -"Update Private Key Password" => "Uppdatera den privata lösenordsnyckeln", +"Update Private Key Password" => "Uppdatera lösenordet för din privata nyckel", "Enable password recovery:" => "Aktivera lösenordsåterställning", "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Genom att aktivera detta alternativ kommer du kunna återfå tillgång till dina krypterade filer om du skulle förlora/glömma ditt lösenord", "File recovery settings updated" => "Inställningarna för filåterställning har uppdaterats", diff --git a/apps/files_encryption/l10n/tr.php b/apps/files_encryption/l10n/tr.php index 7fdda1a5bf6e6b0d6aa6cd721bbcd1f4b0ef5c66..b8289ab71f9b696e9e6e47301d6dfafcac1ccefc 100644 --- a/apps/files_encryption/l10n/tr.php +++ b/apps/files_encryption/l10n/tr.php @@ -4,13 +4,40 @@ $TRANSLATIONS = array( "Could not enable recovery key. Please check your recovery key password!" => "Kurtarma anahtarı etkinleştirilemedi. Lütfen kurtarma anahtarı parolanızı kontrol edin!", "Recovery key successfully disabled" => "Kurtarma anahtarı başarıyla devre dışı bırakıldı", "Could not disable recovery key. Please check your recovery key password!" => "Kurtarma anahtarı devre dışı bırakılamadı. Lütfen kurtarma anahtarı parolanızı kontrol edin!", -"Password successfully changed." => "Şifreniz başarıyla değiştirildi.", -"Could not change the password. Maybe the old password was not correct." => "Parola değiştirilemedi. Eski parolanız doğru olmayabilir", +"Password successfully changed." => "Parola başarıyla değiştirildi.", +"Could not change the password. Maybe the old password was not correct." => "Parola değiştirilemedi. Eski parolanız doğru olmayabilir.", +"Private key password successfully updated." => "Gizli anahtar parolası başarıyla güncellendi", +"Could not update the private key password. Maybe the old password was not correct." => "Gizli anahtar parolası güncellenemedi. Eski parola hatalı olabilir.", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Şifreleme uygulaması başlatılamadı! Oturumunuz sırasında şifreleme uygulaması tekrar etkinleştirilmiş olabilir. Lütfen şifreleme uygulamasını başlatmak için oturumu kapatıp yeniden oturum açmayı deneyin.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Gizli anahtarınız geçerli değil! Muhtemelen parolanız ownCloud sistemi %s dışarısında değiştirildi (örn. şirket dizininde). Gizli anahtar parolanızı kişisel ayarlarınızda güncelleyerek şifreli dosyalarınıza erişimi kurtarabilirsiniz.", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Bu dosya muhtemelen bir paylaşılan dosya olduğundan şifresi çözülemiyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.", +"Unknown error please check your system settings or contact your administrator" => "Bilinmeyen hata. Lütfen sistem ayarlarınızı denetleyin veya yöneticiniz ile iletişime geçin", +"Missing requirements." => "Gereklilikler eksik.", +"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "PHP 5.3.3 veya daha sürümü ile birlikte OpenSSL ve OpenSSL PHP uzantısının birlikte etkin olduğunu ve doğru bir şekilde yapılandırıldığından emin olun. Şimdilik şifreleme uygulaması devre dışı bırakıldı", +"Following users are not set up for encryption:" => "Aşağıdaki kullanıcılar şifreleme için ayarlanmadılar:", +"Initial encryption started... This can take some time. Please wait." => "İlk şifreleme başladı... Bu biraz zaman alabilir. Lütfen bekleyin.", "Saving..." => "Kaydediliyor...", +"Go directly to your " => "Doğrudan şuraya gidin:", +"personal settings" => "kişisel ayarlar", "Encryption" => "Şifreleme", +"Enable recovery key (allow to recover users files in case of password loss):" => "Kurtarma anahtarını etkinleştir (parola kaybı durumunda kullanıcı dosyalarının kurtarılmasına izin verir):", +"Recovery key password" => "Kurtarma anahtarı parolası", +"Repeat Recovery key password" => "Kurtarma anahtarı parolasını yenileyin", "Enabled" => "Etkinleştirildi", "Disabled" => "Devre dışı", -"Change Password" => "Parola değiştir", +"Change recovery key password:" => "Kurtarma anahtarı parolasını değiştir:", +"Old Recovery key password" => "Eski Kurtarma anahtar parolası", +"New Recovery key password" => "Yeni Kurtarma anahtar parolası", +"Repeat New Recovery key password" => "Yeni Kurtarma anahtarı parolasını yenileyin", +"Change Password" => "Parola Değiştir", +"Your private key password no longer match your log-in password:" => "Özel anahtar parolanız artık oturum açma parolanızla eşleşmiyor:", +"Set your old private key password to your current log-in password." => "Eski özel anahtar parolanızı geçerli oturum açma parolanız olarak ayarlayın.", +" If you don't remember your old password you can ask your administrator to recover your files." => "Eğer eski parolanızı hatırlamıyorsanız, yöneticinizden dosyalarınızı kurtarmasını talep edebilirsiniz.", +"Old log-in password" => "Eski oturum açma parolası", +"Current log-in password" => "Geçerli oturum açma parolası", +"Update Private Key Password" => "Özel Anahtar Parolasını Güncelle", +"Enable password recovery:" => "Parola kurtarmayı etkinleştir:", +"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Bu seçeneği etkinleştirmek, parola kaybı durumunda şifrelenmiş dosyalarınıza erişimi yeniden kazanmanızı sağlayacaktır", "File recovery settings updated" => "Dosya kurtarma ayarları güncellendi", "Could not update file recovery" => "Dosya kurtarma güncellenemedi" ); diff --git a/apps/files_encryption/l10n/zh_CN.php b/apps/files_encryption/l10n/zh_CN.php index c4c52f4ac2e72e46112e739e5cdc90d345175528..a51856aec94eca7c82ec0a16f30c5c967bcda352 100644 --- a/apps/files_encryption/l10n/zh_CN.php +++ b/apps/files_encryption/l10n/zh_CN.php @@ -8,10 +8,7 @@ $TRANSLATIONS = array( "Could not change the password. Maybe the old password was not correct." => "不能修改密码。旧密码可能不正确。", "Private key password successfully updated." => "私钥密码成功更新。", "Could not update the private key password. Maybe the old password was not correct." => "无法更新私钥密码。可能旧密码不正确。", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "您的私有密钥无效!也许是您在 ownCloud 系统外更改了密码 (比如,在您的公司目录)。您可以在个人设置里更新您的私钥密码来恢复访问你的加密文件。", "Saving..." => "保存中", -"Your private key is not valid! Maybe the your password was changed from outside." => "您的私钥不正确!可能您在别处更改了密码。", -"You can unlock your private key in your " => "您可以在这里解锁您的私钥:", "personal settings" => "个人设置", "Encryption" => "加密", "Enable recovery key (allow to recover users files in case of password loss):" => "启用恢复密钥(允许你在密码丢失后恢复文件):", diff --git a/apps/files_encryption/l10n/zh_TW.php b/apps/files_encryption/l10n/zh_TW.php index 02dc49cc3d944f70f54b84dfaa8636a80610dd97..8972490ea5a4e1f0e16c410eea20303146d49548 100644 --- a/apps/files_encryption/l10n/zh_TW.php +++ b/apps/files_encryption/l10n/zh_TW.php @@ -1,16 +1,42 @@ "還原金鑰已成功開啟", +"Could not enable recovery key. Please check your recovery key password!" => "無法啟用還原金鑰。請檢查您的還原金鑰密碼!", +"Recovery key successfully disabled" => "還原金鑰已成功停用", +"Could not disable recovery key. Please check your recovery key password!" => "無法停用還原金鑰。請檢查您的還原金鑰密碼!", "Password successfully changed." => "成功變更密碼。", "Could not change the password. Maybe the old password was not correct." => "無法變更密碼,或許是輸入的舊密碼不正確。", -"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "您的私鑰不正確! 感覺像是密碼在 ownCloud 系統之外被改變(例:您的目錄)。 您可以在個人設定中更新私鑰密碼取回已加密的檔案。", +"Private key password successfully updated." => "私人金鑰密碼已成功更新。", +"Could not update the private key password. Maybe the old password was not correct." => "無法更新私人金鑰密碼。可能舊的密碼不正確。", +"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "加密功能未初始化!可能加密功能需要重新啟用在現在的連線上。請試著登出再登入來初始化加密功能。", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "您的私人金鑰不正確!可能您的密碼已經變更在外部的 %s (例如:您的企業目錄)。您可以在您的個人設定中更新私人金鑰密碼來還原存取您的加密檔案。", +"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "無法解密這個檔案,也許這是分享的檔案。請詢問檔案所有人重新分享檔案給您。", +"Unknown error please check your system settings or contact your administrator" => "未知錯誤請檢查您的系統設定或是聯絡您的管理員", +"Missing requirements." => "遺失必要條件。", +"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "請確認已安裝 PHP 5.3.3 或是更新的版本以及 OpenSSL 也一併安裝在 PHP extension 裡面並啟用及設置完成。現在,加密功能是停用的。", +"Following users are not set up for encryption:" => "以下的使用者無法設定加密:", "Saving..." => "儲存中...", +"Go directly to your " => "直接到您的", +"personal settings" => "個人設定", "Encryption" => "加密", +"Enable recovery key (allow to recover users files in case of password loss):" => "啟用還原金鑰 (因忘記密碼仍允許還原使用者檔案):", +"Recovery key password" => "還原金鑰密碼", +"Repeat Recovery key password" => "再輸入還原金鑰密碼一次", "Enabled" => "已啓用", "Disabled" => "已停用", +"Change recovery key password:" => "變更還原金鑰密碼:", +"Old Recovery key password" => "舊的還原金鑰密碼", +"New Recovery key password" => "新的還原金鑰密碼", +"Repeat New Recovery key password" => "再輸入新的還原金鑰密碼一次", "Change Password" => "變更密碼", +"Your private key password no longer match your log-in password:" => "您的私人金鑰密碼不符合您的登入密碼:", +"Set your old private key password to your current log-in password." => "設定您的舊私人金鑰密碼到您現在的登入密碼。", " If you don't remember your old password you can ask your administrator to recover your files." => "如果您忘記舊密碼,可以請求管理員協助取回檔案。", "Old log-in password" => "舊登入密碼", "Current log-in password" => "目前的登入密碼", +"Update Private Key Password" => "更新私人金鑰密碼", +"Enable password recovery:" => "啟用密碼還原:", +"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "啟用這個選項將會允許您因忘記密碼但需要存取您的加密檔案", "File recovery settings updated" => "檔案還原設定已更新", "Could not update file recovery" => "無法更新檔案還原設定" ); diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php index c009718160ae360d47b4abce3822d9c9fea6fcde..9155d238c771f0afab2ec56008ac42abd83cb14b 100755 --- a/apps/files_encryption/lib/crypt.php +++ b/apps/files_encryption/lib/crypt.php @@ -33,6 +33,12 @@ require_once __DIR__ . '/../3rdparty/Crypt_Blowfish/Blowfish.php'; class Crypt { + const ENCRYPTION_UNKNOWN_ERROR = -1; + const ENCRYPTION_NOT_INITIALIZED_ERROR = 1; + const ENCRYPTION_PRIVATE_KEY_NOT_VALID_ERROR = 2; + const ENCRYPTION_NO_SHARE_KEY_FOUND = 3; + + /** * @brief return encryption mode client or server side encryption * @param string $user name (use system wide setting if name=null) @@ -183,8 +189,8 @@ class Crypt { // 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 + // 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']) && $metadata['encrypted'] === true @@ -388,7 +394,7 @@ class Crypt { */ public static function multiKeyEncrypt($plainContent, array $publicKeys) { - // openssl_seal returns false without errors if $plainContent + // openssl_seal returns false without errors if $plainContent // is empty, so trigger our own error if (empty($plainContent)) { @@ -405,7 +411,7 @@ class Crypt { $i = 0; - // Ensure each shareKey is labelled with its + // Ensure each shareKey is labelled with its // corresponding userId foreach ($publicKeys as $userId => $publicKey) { @@ -476,7 +482,7 @@ class Crypt { } - // We encode the iv purely for string manipulation + // We encode the iv purely for string manipulation // purposes - it gets decoded before use $iv = base64_encode($random); diff --git a/apps/files_encryption/lib/helper.php b/apps/files_encryption/lib/helper.php index 445d7ff8ca796ed911833df22685935578d2b316..bb06a57c7143191ee801175a13617abe5df4b8c7 100755 --- a/apps/files_encryption/lib/helper.php +++ b/apps/files_encryption/lib/helper.php @@ -29,6 +29,8 @@ namespace OCA\Encryption; */ class Helper { + private static $tmpFileMapping; // Map tmp files to files in data/user/files + /** * @brief register share related hooks * @@ -59,7 +61,10 @@ class Helper { */ public static function registerFilesystemHooks() { + \OCP\Util::connectHook('OC_Filesystem', 'rename', 'OCA\Encryption\Hooks', 'preRename'); \OCP\Util::connectHook('OC_Filesystem', 'post_rename', 'OCA\Encryption\Hooks', 'postRename'); + \OCP\Util::connectHook('OC_Filesystem', 'post_delete', 'OCA\Encryption\Hooks', 'postDelete'); + \OCP\Util::connectHook('OC_Filesystem', 'delete', 'OCA\Encryption\Hooks', 'preDelete'); } /** @@ -69,6 +74,7 @@ class Helper { public static function registerAppHooks() { \OCP\Util::connectHook('OC_App', 'pre_disable', 'OCA\Encryption\Hooks', 'preDisable'); + \OCP\Util::connectHook('OC_App', 'post_disable', 'OCA\Encryption\Hooks', 'postEnable'); } /** @@ -156,6 +162,49 @@ class Helper { return $return; } + /** + * @brief Check if a path is a .part file + * @param string $path Path that may identify a .part file + * @return bool + */ + public static function isPartialFilePath($path) { + + $extension = pathinfo($path, PATHINFO_EXTENSION); + if ( $extension === 'part') { + return true; + } else { + return false; + } + + } + + + /** + * @brief Remove .path extension from a file path + * @param string $path Path that may identify a .part file + * @return string File path without .part extension + * @note this is needed for reusing keys + */ + public static function stripPartialFileExtension($path) { + $extension = pathinfo($path, PATHINFO_EXTENSION); + + if ( $extension === 'part') { + + $newLength = strlen($path) - 5; // 5 = strlen(".part") = strlen(".etmp") + $fPath = substr($path, 0, $newLength); + + // if path also contains a transaction id, we remove it too + $extension = pathinfo($fPath, PATHINFO_EXTENSION); + if(substr($extension, 0, 12) === 'ocTransferId') { // 12 = strlen("ocTransferId") + $newLength = strlen($fPath) - strlen($extension) -1; + $fPath = substr($fPath, 0, $newLength); + } + return $fPath; + + } else { + return $path; + } + } /** * @brief disable recovery @@ -181,10 +230,7 @@ class Helper { * @return bool */ public static function isPublicAccess() { - if (\OCP\USER::getUser() === false - || (isset($_GET['service']) && $_GET['service'] == 'files' - && isset($_GET['t'])) - ) { + if (\OCP\User::getUser() === false) { return true; } else { return false; @@ -199,12 +245,12 @@ class Helper { public static function stripUserFilesPath($path) { $trimmed = ltrim($path, '/'); $split = explode('/', $trimmed); - + // it is not a file relative to data/user/files if (count($split) < 3 || $split[1] !== 'files') { return false; } - + $sliced = array_slice($split, 2); $relPath = implode('/', $sliced); @@ -212,37 +258,116 @@ class Helper { } /** - * @brief get path to the correspondig file in data/user/files + * @brief try to get the user from the path if no user is logged in + * @param string $path + * @return mixed user or false if we couldn't determine a user + */ + public static function getUser($path) { + + $user = \OCP\User::getUser(); + + + // if we are logged in, then we return the userid + if ($user) { + return $user; + } + + // if no user is logged in we try to access a publicly shared files. + // In this case we need to try to get the user from the path + + $trimmed = ltrim($path, '/'); + $split = explode('/', $trimmed); + + // it is not a file relative to data/user/files + if (count($split) < 2 || ($split[1] !== 'files' && $split[1] !== 'cache')) { + return false; + } + + $user = $split[0]; + + if (\OCP\User::userExists($user)) { + return $user; + } + + return false; + } + + /** + * @brief get path to the corresponding file in data/user/files if path points + * to a version or to a file in cache * @param string $path path to a version or a file in the trash - * @return string path to correspondig file relative to data/user/files + * @return string path to corresponding file relative to data/user/files */ public static function getPathToRealFile($path) { $trimmed = ltrim($path, '/'); $split = explode('/', $trimmed); - - if (count($split) < 3 || $split[1] !== "files_versions") { - return false; + $result = false; + + if (count($split) >= 3 && ($split[1] === "files_versions" || $split[1] === 'cache')) { + $sliced = array_slice($split, 2); + $result = implode('/', $sliced); + if ($split[1] === "files_versions") { + // we skip user/files + $sliced = array_slice($split, 2); + $relPath = implode('/', $sliced); + //remove the last .v + $result = substr($relPath, 0, strrpos($relPath, '.v')); + } + if ($split[1] === "cache") { + // we skip /user/cache/transactionId + $sliced = array_slice($split, 3); + $result = implode('/', $sliced); + //prepare the folders + self::mkdirr($path, new \OC\Files\View('/')); + } } - - $sliced = array_slice($split, 2); - $realPath = implode('/', $sliced); - //remove the last .v - $realPath = substr($realPath, 0, strrpos($realPath, '.v')); - return $realPath; - } - + return $result; + } + + /** + * @brief create directory recursively + * @param string $path + * @param \OC\Files\View $view + */ + public static function mkdirr($path, $view) { + $dirname = \OC_Filesystem::normalizePath(dirname($path)); + $dirParts = explode('/', $dirname); + $dir = ""; + foreach ($dirParts as $part) { + $dir = $dir . '/' . $part; + if (!$view->file_exists($dir)) { + $view->mkdir($dir); + } + } + } + /** * @brief redirect to a error page */ - public static function redirectToErrorPage() { + public static function redirectToErrorPage($session, $errorCode = null) { + + if ($errorCode === null) { + $init = $session->getInitialized(); + switch ($init) { + case \OCA\Encryption\Session::INIT_EXECUTED: + $errorCode = \OCA\Encryption\Crypt::ENCRYPTION_PRIVATE_KEY_NOT_VALID_ERROR; + break; + case \OCA\Encryption\Session::NOT_INITIALIZED: + $errorCode = \OCA\Encryption\Crypt::ENCRYPTION_NOT_INITIALIZED_ERROR; + break; + default: + $errorCode = \OCA\Encryption\Crypt::ENCRYPTION_UNKNOWN_ERROR; + } + } + $location = \OC_Helper::linkToAbsolute('apps/files_encryption/files', 'error.php'); $post = 0; if(count($_POST) > 0) { $post = 1; - } - header('Location: ' . $location . '?p=' . $post); - exit(); + } + header('Location: ' . $location . '?p=' . $post . '&errorCode=' . $errorCode); + exit(); } /** @@ -259,7 +384,7 @@ class Helper { return (bool) $result; } - + /** * check some common errors if the server isn't configured properly for encryption * @return bool true if configuration seems to be OK @@ -303,5 +428,27 @@ class Helper { public static function escapeGlobPattern($path) { return preg_replace('/(\*|\?|\[)/', '[$1]', $path); } + + /** + * @brief remember from which file the tmp file (getLocalFile() call) was created + * @param string $tmpFile path of tmp file + * @param string $originalFile path of the original file relative to data/ + */ + public static function addTmpFileToMapper($tmpFile, $originalFile) { + self::$tmpFileMapping[$tmpFile] = $originalFile; + } + + /** + * @brief get the path of the original file + * @param string $tmpFile path of the tmp file + * @return mixed path of the original file or false + */ + public static function getPathFromTmpFile($tmpFile) { + if (isset(self::$tmpFileMapping[$tmpFile])) { + return self::$tmpFileMapping[$tmpFile]; + } + + return false; + } } diff --git a/apps/files_encryption/lib/keymanager.php b/apps/files_encryption/lib/keymanager.php index 7143fcff0f63b7719849abc40f2450ed90179494..7abc565f60901e59d3b5d65bc7eb608830c4fb0c 100755 --- a/apps/files_encryption/lib/keymanager.php +++ b/apps/files_encryption/lib/keymanager.php @@ -112,21 +112,18 @@ class Keymanager { * @brief store file encryption key * * @param \OC_FilesystemView $view + * @param \OCA\Encryption\Util $util * @param string $path relative path of the file, including filename - * @param $userId - * @param $catfile - * @internal param string $key + * @param string $catfile keyfile content * @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 setFileKey(\OC_FilesystemView $view, $path, $userId, $catfile) { + public static function setFileKey(\OC_FilesystemView $view, $util, $path, $catfile) { $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; - //here we need the currently logged in user, while userId can be a different user - $util = new Util($view, \OCP\User::getUser()); list($owner, $filename) = $util->getUidAndFilename($path); // in case of system wide mount points the keys are stored directly in the data directory @@ -152,10 +149,10 @@ class Keymanager { } // try reusing key file if part file - if (self::isPartialFilePath($targetPath)) { + if (Helper::isPartialFilePath($targetPath)) { $result = $view->file_put_contents( - $basePath . '/' . self::fixPartialFilePath($targetPath) . '.key', $catfile); + $basePath . '/' . Helper::stripPartialFileExtension($targetPath) . '.key', $catfile); } else { @@ -169,64 +166,21 @@ class Keymanager { } - /** - * @brief Remove .path extension from a file path - * @param string $path Path that may identify a .part file - * @return string File path without .part extension - * @note this is needed for reusing keys - */ - public static function fixPartialFilePath($path) { - - if (preg_match('/\.part$/', $path) || preg_match('/\.etmp$/', $path)) { - - $newLength = strlen($path) - 5; - $fPath = substr($path, 0, $newLength); - - return $fPath; - - } else { - - return $path; - - } - - } - - /** - * @brief Check if a path is a .part file - * @param string $path Path that may identify a .part file - * @return bool - */ - public static function isPartialFilePath($path) { - - if (preg_match('/\.part$/', $path) || preg_match('/\.etmp$/', $path)) { - - return true; - - } else { - - return false; - - } - - } - /** * @brief retrieve keyfile for an encrypted file * @param \OC_FilesystemView $view - * @param $userId + * @param \OCA\Encryption\Util $util * @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 */ - public static function getFileKey(\OC_FilesystemView $view, $userId, $filePath) { + public static function getFileKey($view, $util, $filePath) { - $util = new Util($view, \OCP\User::getUser()); list($owner, $filename) = $util->getUidAndFilename($filePath); - $filename = self::fixPartialFilePath($filename); + $filename = Helper::stripPartialFileExtension($filename); $filePath_f = ltrim($filename, '/'); // in case of system wide mount points the keys are stored directly in the data directory @@ -259,17 +213,26 @@ 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 + * @param string $userId the user to whom the file belongs * @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) { + public static function deleteFileKey($view, $path, $userId=null) { $trimmed = ltrim($path, '/'); - $util = new Util($view, \OCP\User::getUser()); + if ($trimmed === '') { + \OCP\Util::writeLog('Encryption library', + 'Can\'t delete file-key empty path given!', \OCP\Util::ERROR); + return false; + } + + if ($userId === null) { + $userId = Helper::getUser($path); + } + $util = new Util($view, $userId); if($util->isSystemWideMountPoint($path)) { $keyPath = '/files_encryption/keyfiles/' . $trimmed; @@ -358,16 +321,15 @@ class Keymanager { /** * @brief store multiple share keys for a single file * @param \OC_FilesystemView $view - * @param $path + * @param \OCA\Encryption\Util $util + * @param string $path * @param array $shareKeys * @return bool */ - public static function setShareKeys(\OC_FilesystemView $view, $path, array $shareKeys) { + public static function setShareKeys(\OC_FilesystemView $view, $util, $path, array $shareKeys) { // $shareKeys must be an array with the following format: // [userId] => [encrypted key] - // Here we need the currently logged in user, while userId can be a different user - $util = new Util($view, \OCP\User::getUser()); list($owner, $filename) = $util->getUidAndFilename($path); @@ -385,8 +347,8 @@ class Keymanager { foreach ($shareKeys as $userId => $shareKey) { // try reusing key file if part file - if (self::isPartialFilePath($shareKeyPath)) { - $writePath = $basePath . '/' . self::fixPartialFilePath($shareKeyPath) . '.' . $userId . '.shareKey'; + if (Helper::isPartialFilePath($shareKeyPath)) { + $writePath = $basePath . '/' . Helper::stripPartialFileExtension($shareKeyPath) . '.' . $userId . '.shareKey'; } else { $writePath = $basePath . '/' . $shareKeyPath . '.' . $userId . '.shareKey'; } @@ -406,23 +368,20 @@ class Keymanager { * @brief retrieve shareKey for an encrypted file * @param \OC_FilesystemView $view * @param string $userId + * @param \OCA\Encryption\Util $util * @param string $filePath - * @internal param \OCA\Encryption\file $string name * @return string file key or false * @note The sharekey returned is encrypted. Decryption * of the keyfile must be performed by client code */ - public static function getShareKey(\OC_FilesystemView $view, $userId, $filePath) { + public static function getShareKey(\OC_FilesystemView $view, $userId, $util, $filePath) { // try reusing key file if part file $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; - //here we need the currently logged in user, while userId can be a different user - $util = new Util($view, \OCP\User::getUser()); - list($owner, $filename) = $util->getUidAndFilename($filePath); - $filename = self::fixPartialFilePath($filename); + $filename = Helper::stripPartialFileExtension($filename); // in case of system wide mount points the keys are stored directly in the data directory if ($util->isSystemWideMountPoint($filename)) { $shareKeyPath = '/files_encryption/share-keys/' . $filename . '.' . $userId . '.shareKey'; @@ -452,7 +411,15 @@ class Keymanager { * @param string $userId owner of the file * @param string $filePath path to the file, relative to the owners file dir */ - public static function delAllShareKeys(\OC_FilesystemView $view, $userId, $filePath) { + public static function delAllShareKeys($view, $userId, $filePath) { + + $filePath = ltrim($filePath, '/'); + + if ($filePath === '') { + \OCP\Util::writeLog('Encryption library', + 'Can\'t delete share-keys empty path given!', \OCP\Util::ERROR); + return false; + } $util = new util($view, $userId); @@ -463,17 +430,15 @@ class Keymanager { } - if ($view->is_dir($userId . '/files/' . $filePath)) { + if ($view->is_dir($baseDir . $filePath)) { $view->unlink($baseDir . $filePath); } else { - $localKeyPath = $view->getLocalFile($baseDir . $filePath); - $escapedPath = Helper::escapeGlobPattern($localKeyPath); - $matches = glob($escapedPath . '*.shareKey'); - foreach ($matches as $ma) { - $result = unlink($ma); - if (!$result) { - \OCP\Util::writeLog('Encryption library', - 'Keyfile or shareKey could not be deleted for file "' . $filePath . '"', \OCP\Util::ERROR); + $parentDir = dirname($baseDir . $filePath); + $filename = pathinfo($filePath, PATHINFO_BASENAME); + foreach($view->getDirectoryContent($parentDir) as $content) { + $path = $content['path']; + if (self::getFilenameFromShareKey($content['name']) === $filename) { + $view->unlink('/' . $userId . '/' . $path); } } } @@ -487,8 +452,9 @@ class Keymanager { $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; - //here we need the currently logged in user, while userId can be a different user - $util = new Util($view, \OCP\User::getUser()); + $userId = Helper::getUser($filePath); + + $util = new Util($view, $userId); list($owner, $filename) = $util->getUidAndFilename($filePath); @@ -572,4 +538,20 @@ class Keymanager { return $targetPath; } + + /** + * @brief extract filename from share key name + * @param string $shareKey (filename.userid.sharekey) + * @return mixed filename or false + */ + protected static function getFilenameFromShareKey($shareKey) { + $parts = explode('.', $shareKey); + + $filename = false; + if(count($parts) > 2) { + $filename = implode('.', array_slice($parts, 0, count($parts)-2)); + } + + return $filename; + } } diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php index 4ec810a51996e817cca39324e8a9bbf0ec4fe6c5..1104800596972c49f9809890072caad5d26fad98 100644 --- a/apps/files_encryption/lib/proxy.php +++ b/apps/files_encryption/lib/proxy.php @@ -37,8 +37,7 @@ namespace OCA\Encryption; class Proxy extends \OC_FileProxy { private static $blackList = null; //mimetypes blacklisted from encryption - - private static $enableEncryption = null; + private static $unencryptedSizes = array(); // remember unencrypted size /** * Check if a file requires encryption @@ -49,46 +48,25 @@ class Proxy extends \OC_FileProxy { */ private static function shouldEncrypt($path) { - if (is_null(self::$enableEncryption)) { - if ( - \OCP\App::isEnabled('files_encryption') === true - && Crypt::mode() === 'server' - ) { - - self::$enableEncryption = true; - - } else { - - self::$enableEncryption = false; - - } - - } - - if (!self::$enableEncryption) { + $userId = Helper::getUser($path); + if (\OCP\App::isEnabled('files_encryption') === false || Crypt::mode() !== 'server' || + strpos($path, '/' . $userId . '/files') !== 0) { return false; - } if (is_null(self::$blackList)) { - self::$blackList = explode(',', \OCP\Config::getAppValue('files_encryption', 'type_blacklist', '')); - } if (Crypt::isCatfileContent($path)) { - return true; - } $extension = substr($path, strrpos($path, '.') + 1); if (array_search($extension, self::$blackList) === false) { - return true; - } return false; @@ -115,7 +93,13 @@ class Proxy extends \OC_FileProxy { return true; } - $handle = fopen('crypt://' . $path . '.etmp', 'w'); + // create random cache folder + $cacheFolder = rand(); + $path_slices = explode('/', \OC_Filesystem::normalizePath($path)); + $path_slices[2] = "cache/".$cacheFolder; + $tmpPath = implode('/', $path_slices); + + $handle = fopen('crypt://' . $tmpPath, 'w'); if (is_resource($handle)) { // write data to stream @@ -129,10 +113,17 @@ class Proxy extends \OC_FileProxy { \OC_FileProxy::$enabled = false; // get encrypted content - $data = $view->file_get_contents($path . '.etmp'); + $data = $view->file_get_contents($tmpPath); + + // store new unenecrypted size so that it can be updated + // in the post proxy + $tmpFileInfo = $view->getFileInfo($tmpPath); + if ( isset($tmpFileInfo['size']) ) { + self::$unencryptedSizes[\OC_Filesystem::normalizePath($path)] = $tmpFileInfo['size']; + } // remove our temp file - $view->unlink($path . '.etmp'); + $view->deleteAll('/' . \OCP\User::getUser() . '/cache/' . $cacheFolder); // re-enable proxy - our work is done \OC_FileProxy::$enabled = $proxyStatus; @@ -144,6 +135,24 @@ class Proxy extends \OC_FileProxy { } + /** + * @brief update file cache with the new unencrypted size after file was written + * @param string $path + * @param mixed $result + * @return mixed + */ + public function postFile_put_contents($path, $result) { + $normalizedPath = \OC_Filesystem::normalizePath($path); + if ( isset(self::$unencryptedSizes[$normalizedPath]) ) { + $view = new \OC_FilesystemView('/'); + $view->putFileInfo($normalizedPath, + array('encrypted' => true, 'encrypted_size' => self::$unencryptedSizes[$normalizedPath])); + unset(self::$unencryptedSizes[$normalizedPath]); + } + + return $result; + } + /** * @param string $path Path of file from which has been read * @param string $data Data that has been read from file @@ -194,47 +203,6 @@ class Proxy extends \OC_FileProxy { } - /** - * @brief When a file is deleted, remove its keyfile also - */ - public function preUnlink($path) { - - // let the trashbin handle this - if (\OCP\App::isEnabled('files_trashbin')) { - return true; - } - - // Disable encryption proxy to prevent recursive calls - $proxyStatus = \OC_FileProxy::$enabled; - \OC_FileProxy::$enabled = false; - - $view = new \OC_FilesystemView('/'); - - $userId = \OCP\USER::getUser(); - - $util = new Util($view, $userId); - - // get relative path - $relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path); - - list($owner, $ownerPath) = $util->getUidAndFilename($relativePath); - - // Delete keyfile & shareKey so it isn't orphaned - if (!Keymanager::deleteFileKey($view, $owner, $ownerPath)) { - \OCP\Util::writeLog('Encryption library', - 'Keyfile or shareKey could not be deleted for file "' . $ownerPath . '"', \OCP\Util::ERROR); - } - - Keymanager::delAllShareKeys($view, $owner, $ownerPath); - - \OC_FileProxy::$enabled = $proxyStatus; - - // If we don't return true then file delete will fail; better - // to leave orphaned keyfiles than to disallow file deletion - return true; - - } - /** * @param $path * @return bool @@ -263,11 +231,8 @@ class Proxy extends \OC_FileProxy { // split the path parts $pathParts = explode('/', $path); - // get relative path - $relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path); - - // FIXME: handling for /userId/cache used by webdav for chunking. The cache chunks are NOT encrypted - if (isset($pathParts[2]) && $pathParts[2] === 'cache') { + // don't try to encrypt/decrypt cache chunks or files in the trash bin + if (isset($pathParts[2]) && ($pathParts[2] === 'cache' || $pathParts[2] === 'files_trashbin')) { return $result; } @@ -279,7 +244,8 @@ class Proxy extends \OC_FileProxy { $view = new \OC_FilesystemView(''); - $util = new Util($view, \OCP\USER::getUser()); + $userId = Helper::getUser($path); + $util = new Util($view, $userId); // If file is already encrypted, decrypt using crypto protocol if ( @@ -317,7 +283,7 @@ class Proxy extends \OC_FileProxy { public function postGetFileInfo($path, $data) { // if path is a folder do nothing - if (is_array($data) && array_key_exists('size', $data)) { + if (\OCP\App::isEnabled('files_encryption') && is_array($data) && array_key_exists('size', $data)) { // Disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; @@ -342,6 +308,16 @@ class Proxy extends \OC_FileProxy { $view = new \OC_FilesystemView('/'); + $userId = Helper::getUser($path); + $util = new Util($view, $userId); + + // if encryption is no longer enabled or if the files aren't migrated yet + // we return the default file size + if(!\OCP\App::isEnabled('files_encryption') || + $util->getMigrationStatus() !== Util::MIGRATION_COMPLETED) { + return $size; + } + // if path is a folder do nothing if ($view->is_dir($path)) { return $size; @@ -357,12 +333,24 @@ class Proxy extends \OC_FileProxy { $fileInfo = false; // get file info from database/cache if not .part file - if (!Keymanager::isPartialFilePath($path)) { + if (!Helper::isPartialFilePath($path)) { + $proxyState = \OC_FileProxy::$enabled; + \OC_FileProxy::$enabled = false; $fileInfo = $view->getFileInfo($path); + \OC_FileProxy::$enabled = $proxyState; } // if file is encrypted return real file size if (is_array($fileInfo) && $fileInfo['encrypted'] === true) { + // try to fix unencrypted file size if it doesn't look plausible + if ((int)$fileInfo['size'] > 0 && (int)$fileInfo['unencrypted_size'] === 0 ) { + $fixSize = $util->getFileSize($path); + $fileInfo['unencrypted_size'] = $fixSize; + // put file info if not .part file + if (!Helper::isPartialFilePath($relativePath)) { + $view->putFileInfo($path, $fileInfo); + } + } $size = $fileInfo['unencrypted_size']; } else { // self healing if file was removed from file cache @@ -370,8 +358,6 @@ class Proxy extends \OC_FileProxy { $fileInfo = array(); } - $userId = \OCP\User::getUser(); - $util = new Util($view, $userId); $fixSize = $util->getFileSize($path); if ($fixSize > 0) { $size = $fixSize; @@ -380,7 +366,7 @@ class Proxy extends \OC_FileProxy { $fileInfo['unencrypted_size'] = $size; // put file info if not .part file - if (!Keymanager::isPartialFilePath($relativePath)) { + if (!Helper::isPartialFilePath($relativePath)) { $view->putFileInfo($path, $fileInfo); } } @@ -400,7 +386,7 @@ class Proxy extends \OC_FileProxy { $view = new \OC_FilesystemView('/'); $session = new \OCA\Encryption\Session($view); - $userId = \OCP\User::getUser(); + $userId = Helper::getUser($path); $util = new Util($view, $userId); // split the path parts diff --git a/apps/files_encryption/lib/session.php b/apps/files_encryption/lib/session.php index 1911386cd12f06832d2406071a4092942191c7d7..25f2198181f3db0baddd7924db9c5806da10179e 100644 --- a/apps/files_encryption/lib/session.php +++ b/apps/files_encryption/lib/session.php @@ -30,6 +30,11 @@ class Session { private $view; + const NOT_INITIALIZED = '0'; + const INIT_EXECUTED = '1'; + const INIT_SUCCESSFUL = '2'; + + /** * @brief if session is started, check if ownCloud key pair is set up, if not create it * @param \OC_FilesystemView $view @@ -112,6 +117,36 @@ class Session { } + /** + * @brief Sets status of encryption app + * @param string $init INIT_SUCCESSFUL, INIT_EXECUTED, NOT_INOITIALIZED + * @return bool + * + * @note this doesn not indicate of the init was successful, we just remeber the try! + */ + public function setInitialized($init) { + + \OC::$session->set('encryptionInitialized', $init); + + return true; + + } + + + /** + * @brief Gets status if we already tried to initialize the encryption app + * @returns init status INIT_SUCCESSFUL, INIT_EXECUTED, NOT_INOITIALIZED + * + * @note this doesn not indicate of the init was successful, we just remeber the try! + */ + public function getInitialized() { + if (!is_null(\OC::$session->get('encryptionInitialized'))) { + return \OC::$session->get('encryptionInitialized'); + } else { + return self::NOT_INITIALIZED; + } + } + /** * @brief Gets user or public share private key from session * @returns string $privateKey The user's plaintext private key diff --git a/apps/files_encryption/lib/stream.php b/apps/files_encryption/lib/stream.php index 083b33c03cbf2be40e674a8e509c3d5743975fb7..b3bf34ddb827b6e509a172b96059e60e3b1f418b 100644 --- a/apps/files_encryption/lib/stream.php +++ b/apps/files_encryption/lib/stream.php @@ -55,6 +55,7 @@ class Stream { private $rawPath; // The raw path relative to the data dir private $relPath; // rel path to users file dir private $userId; + private $keyId; private $handle; // Resource returned by fopen private $meta = array(); // Header / meta for source stream private $writeCache; @@ -63,10 +64,14 @@ class Stream { private $publicKey; private $encKeyfile; private $newFile; // helper var, we only need to write the keyfile for new files + private $isLocalTmpFile = false; // do we operate on a local tmp file + private $localTmpFile; // path of local tmp file + /** * @var \OC\Files\View */ private $rootView; // a fsview object set to '/' + /** * @var \OCA\Encryption\Session */ @@ -91,14 +96,24 @@ class Stream { $this->session = new \OCA\Encryption\Session($this->rootView); - $this->privateKey = $this->session->getPrivateKey($this->userId); + $this->privateKey = $this->session->getPrivateKey(); + + $normalizedPath = \OC\Files\Filesystem::normalizePath(str_replace('crypt://', '', $path)); + if ($originalFile = Helper::getPathFromTmpFile($normalizedPath)) { + $this->rawPath = $originalFile; + $this->isLocalTmpFile = true; + $this->localTmpFile = $normalizedPath; + } else { + $this->rawPath = $normalizedPath; + } - $util = new Util($this->rootView, \OCP\USER::getUser()); + $this->userId = Helper::getUser($this->rawPath); - $this->userId = $util->getUserId(); + $util = new Util($this->rootView, $this->userId); - // rawPath is relative to the data directory - $this->rawPath = \OC\Files\Filesystem::normalizePath(str_replace('crypt://', '', $path)); + // get the key ID which we want to use, can be the users key or the + // public share key + $this->keyId = $util->getKeyId(); // Strip identifier text from path, this gives us the path relative to data//files $this->relPath = Helper::stripUserFilesPath($this->rawPath); @@ -108,7 +123,7 @@ class Stream { } if($this->relPath === false) { - \OCP\Util::writeLog('Encryption library', 'failed to open file "' . $this->rawPath . '" expecting a path to user/files or to user/files_versions', \OCP\Util::ERROR); + \OCP\Util::writeLog('Encryption library', 'failed to open file "' . $this->rawPath . '" expecting a path to "files", "files_versions" or "cache"', \OCP\Util::ERROR); return false; } @@ -131,13 +146,17 @@ class Stream { if($this->privateKey === false) { // if private key is not valid redirect user to a error page - \OCA\Encryption\Helper::redirectToErrorPage(); + \OCA\Encryption\Helper::redirectToErrorPage($this->session); } - $this->size = $this->rootView->filesize($this->rawPath, $mode); + $this->size = $this->rootView->filesize($this->rawPath); } - $this->handle = $this->rootView->fopen($this->rawPath, $mode); + if ($this->isLocalTmpFile) { + $this->handle = fopen($this->localTmpFile, $mode); + } else { + $this->handle = $this->rootView->fopen($this->rawPath, $mode); + } \OC_FileProxy::$enabled = $proxyStatus; @@ -156,15 +175,26 @@ class Stream { } + /** + * @brief Returns the current position of the file pointer + * @return int position of the file pointer + */ + public function stream_tell() { + return ftell($this->handle); + } + /** * @param $offset * @param int $whence + * @return bool true if fseek was successful, otherwise false */ public function stream_seek($offset, $whence = SEEK_SET) { $this->flush(); - fseek($this->handle, $offset, $whence); + // this wrapper needs to return "true" for success. + // the fseek call itself returns 0 on succeess + return !fseek($this->handle, $offset, $whence); } @@ -249,21 +279,26 @@ class Stream { // Fetch and decrypt keyfile // Fetch existing keyfile - $this->encKeyfile = Keymanager::getFileKey($this->rootView, $this->userId, $this->relPath); + $util = new \OCA\Encryption\Util($this->rootView, $this->userId); + $this->encKeyfile = Keymanager::getFileKey($this->rootView, $util, $this->relPath); // If a keyfile already exists if ($this->encKeyfile) { + $shareKey = Keymanager::getShareKey($this->rootView, $this->keyId, $util, $this->relPath); + // if there is no valid private key return false if ($this->privateKey === false) { - // if private key is not valid redirect user to a error page - \OCA\Encryption\Helper::redirectToErrorPage(); - + \OCA\Encryption\Helper::redirectToErrorPage($this->session); return false; } - $shareKey = Keymanager::getShareKey($this->rootView, $this->userId, $this->relPath); + if ($shareKey === false) { + // if no share key is available redirect user to a error page + \OCA\Encryption\Helper::redirectToErrorPage($this->session, \OCA\Encryption\Crypt::ENCRYPTION_NO_SHARE_KEY_FOUND); + return false; + } $this->plainKey = Crypt::multiKeyDecrypt($this->encKeyfile, $shareKey, $this->privateKey); @@ -465,7 +500,7 @@ class Stream { if ($this->privateKey === false) { // cleanup - if ($this->meta['mode'] !== 'r' && $this->meta['mode'] !== 'rb') { + if ($this->meta['mode'] !== 'r' && $this->meta['mode'] !== 'rb' && !$this->isLocalTmpFile) { // Disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; @@ -480,13 +515,15 @@ class Stream { } // if private key is not valid redirect user to a error page - \OCA\Encryption\Helper::redirectToErrorPage(); + \OCA\Encryption\Helper::redirectToErrorPage($this->session); } if ( $this->meta['mode'] !== 'r' && $this->meta['mode'] !== 'rb' && - $this->size > 0 + $this->isLocalTmpFile === false && + $this->size > 0 && + $this->unencryptedSize > 0 ) { // only write keyfiles if it was a new file @@ -497,7 +534,7 @@ class Stream { \OC_FileProxy::$enabled = false; // Fetch user's public key - $this->publicKey = Keymanager::getPublicKey($this->rootView, $this->userId); + $this->publicKey = Keymanager::getPublicKey($this->rootView, $this->keyId); // Check if OC sharing api is enabled $sharingEnabled = \OCP\Share::isEnabled(); @@ -506,37 +543,40 @@ class Stream { // Get all users sharing the file includes current user $uniqueUserIds = $util->getSharingUsersArray($sharingEnabled, $this->relPath, $this->userId); + $checkedUserIds = $util->filterShareReadyUsers($uniqueUserIds); // Fetch public keys for all sharing users - $publicKeys = Keymanager::getPublicKeys($this->rootView, $uniqueUserIds); + $publicKeys = Keymanager::getPublicKeys($this->rootView, $checkedUserIds['ready']); // Encrypt enc key for all sharing users $this->encKeyfiles = Crypt::multiKeyEncrypt($this->plainKey, $publicKeys); // Save the new encrypted file key - Keymanager::setFileKey($this->rootView, $this->relPath, $this->userId, $this->encKeyfiles['data']); + Keymanager::setFileKey($this->rootView, $util, $this->relPath, $this->encKeyfiles['data']); // Save the sharekeys - Keymanager::setShareKeys($this->rootView, $this->relPath, $this->encKeyfiles['keys']); + Keymanager::setShareKeys($this->rootView, $util, $this->relPath, $this->encKeyfiles['keys']); // Re-enable proxy - our work is done \OC_FileProxy::$enabled = $proxyStatus; } + // we need to update the file info for the real file, not for the + // part file. + $path = Helper::stripPartialFileExtension($this->rawPath); + // get file info - $fileInfo = $this->rootView->getFileInfo($this->rawPath); - if (!is_array($fileInfo)) { - $fileInfo = array(); + $fileInfo = $this->rootView->getFileInfo($path); + if (is_array($fileInfo)) { + // set encryption data + $fileInfo['encrypted'] = true; + $fileInfo['size'] = $this->size; + $fileInfo['unencrypted_size'] = $this->unencryptedSize; + + // set fileinfo + $this->rootView->putFileInfo($path, $fileInfo); } - // set encryption data - $fileInfo['encrypted'] = true; - $fileInfo['size'] = $this->size; - $fileInfo['unencrypted_size'] = $this->unencryptedSize; - - // set fileinfo - $this->rootView->putFileInfo($this->rawPath, $fileInfo); - } return fclose($this->handle); diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php index df4d35cab0b42076108403b380e0249425f13e33..ae3e2a2e15a529d31d3a765fa96487cf30810eb0 100644 --- a/apps/files_encryption/lib/util.php +++ b/apps/files_encryption/lib/util.php @@ -2,9 +2,10 @@ /** * ownCloud * - * @author Sam Tuke, Frank Karlitschek + * @author Sam Tuke, Frank Karlitschek, Bjoern Schiessle * @copyright 2012 Sam Tuke , - * Frank Karlitschek + * Frank Karlitschek , + * Bjoern Schiessle * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE @@ -37,9 +38,9 @@ class Util { const MIGRATION_IN_PROGRESS = -1; // migration is running const MIGRATION_OPEN = 0; // user still needs to be migrated - private $view; // OC_FilesystemView object for filesystem operations - private $userId; // ID of the currently logged-in user + private $userId; // ID of the user we use to encrypt/decrypt files + private $keyId; // ID of the key we want to manipulate private $client; // Client side encryption mode flag private $publicKeyDir; // Dir containing all public user keys private $encryptionDir; // Dir containing user's files_encryption @@ -56,50 +57,36 @@ class Util { * @param $userId * @param bool $client */ - public function __construct(\OC_FilesystemView $view, $userId, $client = false) { + public function __construct($view, $userId, $client = false) { $this->view = $view; - $this->userId = $userId; $this->client = $client; - $this->isPublic = false; + $this->userId = $userId; $this->publicShareKeyId = \OC_Appconfig::getValue('files_encryption', 'publicShareKeyId'); $this->recoveryKeyId = \OC_Appconfig::getValue('files_encryption', 'recoveryKeyId'); - // if we are anonymous/public - if (\OCA\Encryption\Helper::isPublicAccess()) { - $this->userId = $this->publicShareKeyId; - - // only handle for files_sharing app - if (isset($GLOBALS['app']) && $GLOBALS['app'] === 'files_sharing') { - $this->userDir = '/' . $GLOBALS['fileOwner']; - $this->fileFolderName = 'files'; - $this->userFilesDir = '/' . $GLOBALS['fileOwner'] . '/' - . $this->fileFolderName; // TODO: Does this need to be user configurable? - $this->publicKeyDir = '/' . 'public-keys'; - $this->encryptionDir = '/' . $GLOBALS['fileOwner'] . '/' . 'files_encryption'; - $this->keyfilesPath = $this->encryptionDir . '/' . 'keyfiles'; - $this->shareKeysPath = $this->encryptionDir . '/' . 'share-keys'; - $this->publicKeyPath = - $this->publicKeyDir . '/' . $this->userId . '.public.key'; // e.g. data/public-keys/admin.public.key - $this->privateKeyPath = - '/owncloud_private_key/' . $this->userId . '.private.key'; // e.g. data/admin/admin.private.key - $this->isPublic = true; - } - - } else { - $this->userDir = '/' . $this->userId; - $this->fileFolderName = 'files'; - $this->userFilesDir = - '/' . $this->userId . '/' . $this->fileFolderName; // TODO: Does this need to be user configurable? - $this->publicKeyDir = '/' . 'public-keys'; - $this->encryptionDir = '/' . $this->userId . '/' . 'files_encryption'; - $this->keyfilesPath = $this->encryptionDir . '/' . 'keyfiles'; - $this->shareKeysPath = $this->encryptionDir . '/' . 'share-keys'; - $this->publicKeyPath = + $this->userDir = '/' . $this->userId; + $this->fileFolderName = 'files'; + $this->userFilesDir = + '/' . $userId . '/' . $this->fileFolderName; // TODO: Does this need to be user configurable? + $this->publicKeyDir = '/' . 'public-keys'; + $this->encryptionDir = '/' . $this->userId . '/' . 'files_encryption'; + $this->keyfilesPath = $this->encryptionDir . '/' . 'keyfiles'; + $this->shareKeysPath = $this->encryptionDir . '/' . 'share-keys'; + $this->publicKeyPath = $this->publicKeyDir . '/' . $this->userId . '.public.key'; // e.g. data/public-keys/admin.public.key - $this->privateKeyPath = + $this->privateKeyPath = $this->encryptionDir . '/' . $this->userId . '.private.key'; // e.g. data/admin/admin.private.key + // make sure that the owners home is mounted + \OC\Files\Filesystem::initMountPoints($userId); + + if (\OCA\Encryption\Helper::isPublicAccess()) { + $this->keyId = $this->publicShareKeyId; + $this->isPublic = true; + } else { + $this->keyId = $this->userId; + $this->isPublic = false; } } @@ -115,15 +102,24 @@ class Util { or !$this->view->file_exists($this->publicKeyPath) or !$this->view->file_exists($this->privateKeyPath) ) { - return false; - } else { - return true; - } + } + /** + * @brief check if the users private & public key exists + * @return boolean + */ + public function userKeysExists() { + if ( + $this->view->file_exists($this->privateKeyPath) && + $this->view->file_exists($this->publicKeyPath)) { + return true; + } else { + return false; + } } /** @@ -185,13 +181,13 @@ class Util { // check if public-key exists but private-key is missing if ($this->view->file_exists($this->publicKeyPath) && !$this->view->file_exists($this->privateKeyPath)) { \OCP\Util::writeLog('Encryption library', - 'public key exists but private key is missing for "' . $this->userId . '"', \OCP\Util::FATAL); + 'public key exists but private key is missing for "' . $this->keyId . '"', \OCP\Util::FATAL); return false; } else { if (!$this->view->file_exists($this->publicKeyPath) && $this->view->file_exists($this->privateKeyPath) ) { \OCP\Util::writeLog('Encryption library', - 'private key exists but public key is missing for "' . $this->userId . '"', \OCP\Util::FATAL); + 'private key exists but public key is missing for "' . $this->keyId . '"', \OCP\Util::FATAL); return false; } } @@ -206,7 +202,7 @@ class Util { $this->userId, 'server-side', 0, - 0 + self::MIGRATION_OPEN ); $query = \OCP\DB::prepare($sql); $query->execute($args); @@ -246,11 +242,9 @@ class Util { if (\OCP\DB::isError($result)) { \OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR); } else { - if ($result->numRows() > 0) { - $row = $result->fetchRow(); - if (isset($row['recovery_enabled'])) { - $recoveryEnabled[] = $row['recovery_enabled']; - } + $row = $result->fetchRow(); + if ($row && isset($row['recovery_enabled'])) { + $recoveryEnabled[] = $row['recovery_enabled']; } } @@ -294,7 +288,7 @@ class Util { $sql = 'UPDATE `*PREFIX*encryption` SET `recovery_enabled` = ? WHERE `uid` = ?'; $args = array( - $enabled, + $enabled ? '1' : '0', $this->userId ); @@ -364,7 +358,7 @@ class Util { // scanning every file like this // will eat server resources :( if ( - Keymanager::getFileKey($this->view, $this->userId, $relPath) + Keymanager::getFileKey($this->view, $this, $relPath) && $isEncryptedPath ) { @@ -419,49 +413,6 @@ class Util { } - /** - * @brief Fetch the last lines of a file efficiently - * @note Safe to use on large files; does not read entire file to memory - * @note Derivative of http://tekkie.flashbit.net/php/tail-functionality-in-php - */ - public function tail($filename, $numLines) { - - \OC_FileProxy::$enabled = false; - - $text = ''; - $pos = -1; - $handle = $this->view->fopen($filename, 'r'); - - while ($numLines > 0) { - - --$pos; - - if (fseek($handle, $pos, SEEK_END) !== 0) { - - rewind($handle); - $numLines = 0; - - } elseif (fgetc($handle) === "\n") { - - --$numLines; - - } - - $block_size = (-$pos) % 8192; - if ($block_size === 0 || $numLines === 0) { - - $text = fread($handle, ($block_size === 0 ? 8192 : $block_size)) . $text; - - } - } - - fclose($handle); - - \OC_FileProxy::$enabled = true; - - return $text; - } - /** * @brief Check if a given path identifies an encrypted file * @param string $path @@ -477,15 +428,28 @@ class Util { // we only need 24 byte from the last chunk $data = ''; $handle = $this->view->fopen($path, 'r'); - if (is_resource($handle) && !fseek($handle, -24, SEEK_END)) { - $data = fgets($handle); + if (is_resource($handle)) { + // suppress fseek warining, we handle the case that fseek doesn't + // work in the else branch + if (@fseek($handle, -24, SEEK_END) === 0) { + $data = fgets($handle); + } else { + // if fseek failed on the storage we create a local copy from the file + // and read this one + fclose($handle); + $localFile = $this->view->getLocalFile($path); + $handle = fopen($localFile, 'r'); + if (is_resource($handle) && fseek($handle, -24, SEEK_END) === 0) { + $data = fgets($handle); + } + } + fclose($handle); } // re-enable proxy \OC_FileProxy::$enabled = $proxyStatus; return Crypt::isCatfileContent($data); - } /** @@ -509,11 +473,18 @@ class Util { ) { // get the size from filesystem - $fullPath = $this->view->getLocalFile($path); $size = $this->view->filesize($path); + // fast path, else the calculation for $lastChunkNr is bogus + if ($size === 0) { + \OC_FileProxy::$enabled = $proxyStatus; + return 0; + } + // calculate last chunk nr - $lastChunkNr = floor($size / 8192); + // next highest is end of chunks, one subtracted is last one + // we have to read the last chunk, we can't just calculate it (because of padding etc) + $lastChunkNr = ceil($size/ 8192) - 1; $lastChunkSize = $size - ($lastChunkNr * 8192); // open stream @@ -524,7 +495,20 @@ class Util { $lastChunckPos = ($lastChunkNr * 8192); // seek to end - fseek($stream, $lastChunckPos); + if (@fseek($stream, $lastChunckPos) === -1) { + // storage doesn't support fseek, we need a local copy + fclose($stream); + $localFile = $this->view->getLocalFile($path); + Helper::addTmpFileToMapper($localFile, $path); + $stream = fopen('crypt://' . $localFile, "r"); + if (fseek($stream, $lastChunckPos) === -1) { + // if fseek also fails on the local storage, than + // there is nothing we can do + fclose($stream); + \OCP\Util::writeLog('Encryption library', 'couldn\'t determine size of "' . $path, \OCP\Util::ERROR); + return $result; + } + } // get the content of the last chunk $lastChunkContent = fread($stream, $lastChunkSize); @@ -711,17 +695,17 @@ class Util { // Encrypt unencrypted files foreach ($found['encrypted'] as $encryptedFile) { - //get file info - $fileInfo = \OC\Files\Filesystem::getFileInfo($encryptedFile['path']); - //relative to data//file $relPath = Helper::stripUserFilesPath($encryptedFile['path']); + //get file info + $fileInfo = \OC\Files\Filesystem::getFileInfo($relPath); + //relative to /data $rawPath = $encryptedFile['path']; //get timestamp - $timestamp = $this->view->filemtime($rawPath); + $timestamp = $fileInfo['mtime']; //enable proxy to use OC\Files\View to access the original file \OC_FileProxy::$enabled = true; @@ -762,16 +746,16 @@ class Util { $this->view->rename($relPath . '.part', $relPath); - $this->view->chroot($fakeRoot); - //set timestamp - $this->view->touch($rawPath, $timestamp); + $this->view->touch($relPath, $timestamp); + + $this->view->chroot($fakeRoot); // Add the file to the cache \OC\Files\Filesystem::putFileInfo($relPath, array( 'encrypted' => false, 'size' => $size, - 'unencrypted_size' => $size, + 'unencrypted_size' => 0, 'etag' => $fileInfo['etag'] )); @@ -833,7 +817,7 @@ class Util { $rawPath = '/' . $this->userId . '/files/' . $plainFile['path']; // keep timestamp - $timestamp = $this->view->filemtime($rawPath); + $timestamp = $fileInfo['mtime']; // Open plain file handle for binary reading $plainHandle = $this->view->fopen($rawPath, 'rb'); @@ -841,32 +825,35 @@ class Util { // Open enc file handle for binary writing, with same filename as original plain file $encHandle = fopen('crypt://' . $rawPath . '.part', 'wb'); - // Move plain file to a temporary location - $size = stream_copy_to_stream($plainHandle, $encHandle); + if (is_resource($encHandle)) { + // Move plain file to a temporary location + $size = stream_copy_to_stream($plainHandle, $encHandle); - fclose($encHandle); - fclose($plainHandle); + fclose($encHandle); + fclose($plainHandle); - $fakeRoot = $this->view->getRoot(); - $this->view->chroot('/' . $this->userId . '/files'); + $fakeRoot = $this->view->getRoot(); + $this->view->chroot('/' . $this->userId . '/files'); - $this->view->rename($relPath . '.part', $relPath); + $this->view->rename($relPath . '.part', $relPath); - $this->view->chroot($fakeRoot); + // set timestamp + $this->view->touch($relPath, $timestamp); - // set timestamp - $this->view->touch($rawPath, $timestamp); + $encSize = $this->view->filesize($relPath); - // Add the file to the cache - \OC\Files\Filesystem::putFileInfo($relPath, array( - 'encrypted' => true, - 'size' => $size, - 'unencrypted_size' => $size, - 'etag' => $fileInfo['etag'] - )); + $this->view->chroot($fakeRoot); - $encryptedFiles[] = $relPath; + // Add the file to the cache + \OC\Files\Filesystem::putFileInfo($relPath, array( + 'encrypted' => true, + 'size' => $encSize, + 'unencrypted_size' => $size, + 'etag' => $fileInfo['etag'] + )); + $encryptedFiles[] = $relPath; + } } // Encrypt legacy encrypted files @@ -983,8 +970,8 @@ class Util { if (\OCP\DB::isError($result)) { \OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR); } else { - if ($result->numRows() > 0) { - $row = $result->fetchRow(); + $row = $result->fetchRow(); + if ($row) { $path = substr($row['path'], strlen('files')); } } @@ -1049,10 +1036,10 @@ class Util { private function decryptKeyfile($filePath, $privateKey) { // Get the encrypted keyfile - $encKeyfile = Keymanager::getFileKey($this->view, $this->userId, $filePath); + $encKeyfile = Keymanager::getFileKey($this->view, $this, $filePath); // The file has a shareKey and must use it for decryption - $shareKey = Keymanager::getShareKey($this->view, $this->userId, $filePath); + $shareKey = Keymanager::getShareKey($this->view, $this->keyId, $this, $filePath); $plainKeyfile = Crypt::multiKeyDecrypt($encKeyfile, $shareKey, $privateKey); @@ -1103,8 +1090,8 @@ class Util { // Save the recrypted key to it's owner's keyfiles directory // Save new sharekeys to all necessary user directory if ( - !Keymanager::setFileKey($this->view, $filePath, $fileOwner, $multiEncKey['data']) - || !Keymanager::setShareKeys($this->view, $filePath, $multiEncKey['keys']) + !Keymanager::setFileKey($this->view, $this, $filePath, $multiEncKey['data']) + || !Keymanager::setShareKeys($this->view, $this, $filePath, $multiEncKey['keys']) ) { \OCP\Util::writeLog('Encryption library', @@ -1139,10 +1126,7 @@ class Util { // Make sure that a share key is generated for the owner too list($owner, $ownerPath) = $this->getUidAndFilename($filePath); - $pathinfo = pathinfo($ownerPath); - if(array_key_exists('extension', $pathinfo) && $pathinfo['extension'] === 'part') { - $ownerPath = $pathinfo['dirname'] . '/' . $pathinfo['filename']; - } + $ownerPath = \OCA\Encryption\Helper::stripPartialFileExtension($ownerPath); $userIds = array(); if ($sharingEnabled) { @@ -1258,7 +1242,6 @@ class Util { $sql = 'SELECT `migration_status` FROM `*PREFIX*encryption` WHERE `uid` = ?'; $args = array($this->userId); - $query = \OCP\DB::prepare($sql); $result = $query->execute($args); @@ -1268,20 +1251,32 @@ class Util { if (\OCP\DB::isError($result)) { \OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR); } else { - if ($result->numRows() > 0) { - $row = $result->fetchRow(); - if (isset($row['migration_status'])) { - $migrationStatus[] = $row['migration_status']; - } + $row = $result->fetchRow(); + if ($row && isset($row['migration_status'])) { + $migrationStatus[] = $row['migration_status']; } } // If no record is found if (empty($migrationStatus)) { \OCP\Util::writeLog('Encryption library', "Could not get migration status for " . $this->userId . ", no record found", \OCP\Util::ERROR); - return false; - // If a record is found - } else { + // insert missing entry in DB with status open if the user exists + if (\OCP\User::userExists($this->userId)) { + $sql = 'INSERT INTO `*PREFIX*encryption` (`uid`,`mode`,`recovery_enabled`,`migration_status`) VALUES (?,?,?,?)'; + $args = array( + $this->userId, + 'server-side', + 0, + self::MIGRATION_OPEN + ); + $query = \OCP\DB::prepare($sql); + $query->execute($args); + + return self::MIGRATION_OPEN; + } else { + return false; + } + } else { // If a record is found return (int)$migrationStatus[0]; } @@ -1320,7 +1315,7 @@ class Util { // handle public access if ($this->isPublic) { $filename = $path; - $fileOwnerUid = $GLOBALS['fileOwner']; + $fileOwnerUid = $this->userId; return array( $fileOwnerUid, @@ -1366,59 +1361,32 @@ class Util { } } - /** * @brief go recursively through a dir and collect all files and sub files. * @param string $dir relative to the users files folder * @return array with list of files relative to the users files folder */ public function getAllFiles($dir) { - $result = array(); + $dirList = array($dir); - $content = $this->view->getDirectoryContent(\OC\Files\Filesystem::normalizePath( - $this->userFilesDir . '/' . $dir)); - - // handling for re shared folders - $pathSplit = explode('/', $dir); - - foreach ($content as $c) { - - $sharedPart = $pathSplit[sizeof($pathSplit) - 1]; - $targetPathSplit = array_reverse(explode('/', $c['path'])); - - $path = ''; - - // rebuild path - foreach ($targetPathSplit as $pathPart) { - - if ($pathPart !== $sharedPart) { - - $path = '/' . $pathPart . $path; + while ($dirList) { + $dir = array_pop($dirList); + $content = $this->view->getDirectoryContent(\OC\Files\Filesystem::normalizePath( + $this->userFilesDir . '/' . $dir)); + foreach ($content as $c) { + $usersPath = isset($c['usersPath']) ? $c['usersPath'] : $c['path']; + if ($c['type'] === 'dir') { + $dirList[] = substr($usersPath, strlen("files")); } else { - - break; - + $result[] = substr($usersPath, strlen("files")); } - } - $path = $dir . $path; - - if ($c['type'] === 'dir') { - - $result = array_merge($result, $this->getAllFiles($path)); - - } else { - - $result[] = $path; - - } } return $result; - } /** @@ -1438,9 +1406,7 @@ class Util { if (\OCP\DB::isError($result)) { \OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR); } else { - if ($result->numRows() > 0) { - $row = $result->fetchRow(); - } + $row = $result->fetchRow(); } return $row; @@ -1464,9 +1430,7 @@ class Util { if (\OCP\DB::isError($result)) { \OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR); } else { - if ($result->numRows() > 0) { - $row = $result->fetchRow(); - } + $row = $result->fetchRow(); } return $row; @@ -1485,18 +1449,16 @@ class Util { $result = $query->execute(array($id)); - $source = array(); + $source = null; if (\OCP\DB::isError($result)) { \OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR); } else { - if ($result->numRows() > 0) { - $source = $result->fetchRow(); - } + $source = $result->fetchRow(); } $fileOwner = false; - if (isset($source['parent'])) { + if ($source && isset($source['parent'])) { $parent = $source['parent']; @@ -1506,16 +1468,14 @@ class Util { $result = $query->execute(array($parent)); - $item = array(); + $item = null; if (\OCP\DB::isError($result)) { \OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR); } else { - if ($result->numRows() > 0) { - $item = $result->fetchRow(); - } + $item = $result->fetchRow(); } - if (isset($item['parent'])) { + if ($item && isset($item['parent'])) { $parent = $item['parent']; @@ -1545,6 +1505,13 @@ class Util { return $this->userId; } + /** + * @return string + */ + public function getKeyId() { + return $this->keyId; + } + /** * @return string */ @@ -1752,6 +1719,11 @@ class Util { */ public function initEncryption($params) { + $session = new \OCA\Encryption\Session($this->view); + + // we tried to initialize the encryption app for this session + $session->setInitialized(\OCA\Encryption\Session::INIT_EXECUTED); + $encryptedKey = Keymanager::getPrivateKey($this->view, $params['uid']); $privateKey = Crypt::decryptPrivateKey($encryptedKey, $params['password']); @@ -1762,9 +1734,8 @@ class Util { return false; } - $session = new \OCA\Encryption\Session($this->view); - $session->setPrivateKey($privateKey); + $session->setInitialized(\OCA\Encryption\Session::INIT_SUCCESSFUL); return $session; } diff --git a/apps/files_encryption/settings-admin.php b/apps/files_encryption/settings-admin.php index 5367605898262f3d66b0e83a5aa9c06859fa8182..9ad9bfb88770a2fe00953bbaf27fdf5bf9223aeb 100644 --- a/apps/files_encryption/settings-admin.php +++ b/apps/files_encryption/settings-admin.php @@ -11,9 +11,7 @@ $tmpl = new OCP\Template('files_encryption', 'settings-admin'); // Check if an adminRecovery account is enabled for recovering files after lost pwd -$view = new OC_FilesystemView(''); - -$recoveryAdminEnabled = OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled'); +$recoveryAdminEnabled = OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled', '0'); $tmpl->assign('recoveryEnabled', $recoveryAdminEnabled); diff --git a/apps/files_encryption/settings-personal.php b/apps/files_encryption/settings-personal.php index 589219f32ada5c05fcc112140861fe535ae62ce9..ffcb99602e2f6350affd7523a8b46d0d432572fa 100644 --- a/apps/files_encryption/settings-personal.php +++ b/apps/files_encryption/settings-personal.php @@ -16,7 +16,9 @@ $view = new \OC_FilesystemView('/'); $util = new \OCA\Encryption\Util($view, $user); $session = new \OCA\Encryption\Session($view); -$privateKeySet = $session->getPrivateKey() !== false; +$privateKeySet = $session->getPrivateKey() !== false; +// did we tried to initialize the keys for this session? +$initialized = $session->getInitialized(); $recoveryAdminEnabled = OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled'); $recoveryEnabledForUser = $util->recoveryEnabledForUser(); @@ -31,6 +33,7 @@ if ($recoveryAdminEnabled || !$privateKeySet) { $tmpl->assign('recoveryEnabled', $recoveryAdminEnabled); $tmpl->assign('recoveryEnabledForUser', $recoveryEnabledForUser); $tmpl->assign('privateKeySet', $privateKeySet); + $tmpl->assign('initialized', $initialized); $result = $tmpl->fetchPage(); } diff --git a/apps/files_encryption/templates/invalid_private_key.php b/apps/files_encryption/templates/invalid_private_key.php index 5c086d6514c1297fb80d5aaea13b9cf90ff3a5ba..a3cae60b1da5656ec542323586b6bfce84b982a4 100644 --- a/apps/files_encryption/templates/invalid_private_key.php +++ b/apps/files_encryption/templates/invalid_private_key.php @@ -2,9 +2,11 @@
  • - t('Your private key is not valid! Maybe the your password was changed from outside.')); ?> +
    - t('You can unlock your private key in your ')); ?> t('personal settings')); ?>. + + p($l->t('Go directly to your ')); ?> t('personal settings')); ?>. +
  • diff --git a/apps/files_encryption/templates/settings-admin.php b/apps/files_encryption/templates/settings-admin.php index f5f7582c2a69d141e49232f76e49e9fc14c708ac..231a68b6a587d51ed097593b60407da2d55426a1 100644 --- a/apps/files_encryption/templates/settings-admin.php +++ b/apps/files_encryption/templates/settings-admin.php @@ -1,23 +1,23 @@
    -

    - t('Encryption')); ?> -
    -

    +

    t('Encryption')); ?>

    t("Enable recovery key (allow to recover users files in case of password loss):")); ?>

    - +
    + + +
    /> + /> t("Enabled")); ?>
    @@ -25,27 +25,32 @@ type='radio' name='adminEnableRecovery' value='0' - /> + /> t("Disabled")); ?>



    -

    +

    > t("Change recovery key password:")); ?>

    /> - + id="oldEncryptionRecoveryPassword" + +
    +
    + t("New Recovery key password")); ?>
    /> - + id="repeatedNewEncryptionRecoveryPassword" +

    diff --git a/apps/files_trashbin/appinfo/info.xml b/apps/files_trashbin/appinfo/info.xml index e9cbdafc1cdc2738dced01293e85313e21dc2c1c..2cc7d9a7ac3a0fc2779f0ca32811260df2a72888 100644 --- a/apps/files_trashbin/appinfo/info.xml +++ b/apps/files_trashbin/appinfo/info.xml @@ -6,7 +6,7 @@ ownCloud keeps a copy of your deleted files in case you need them again. To make sure that the user doesn't run out of memory the deleted files app manages the size of the deleted files for the user. By default deleted files - stay in the trash bin for 180 days. ownCloud checks the age of the files + stay in the trash bin for 90 days. ownCloud checks the age of the files every time a new files gets moved to the deleted files and remove all files older than 180 days. The user can adjust this value in the config.php by setting the "trashbin_retention_obligation" value. diff --git a/apps/files_trashbin/appinfo/version b/apps/files_trashbin/appinfo/version index bd73f47072b1fe4b9914ec14a7f6d47fcc8f816a..2eb3c4fe4eebcdea3da0790cc0ba74cb286ec4f4 100644 --- a/apps/files_trashbin/appinfo/version +++ b/apps/files_trashbin/appinfo/version @@ -1 +1 @@ -0.4 +0.5 diff --git a/apps/files_trashbin/css/trash.css b/apps/files_trashbin/css/trash.css new file mode 100644 index 0000000000000000000000000000000000000000..97819f4e80b5b15fcd4e31077821075aa907af7c --- /dev/null +++ b/apps/files_trashbin/css/trash.css @@ -0,0 +1,3 @@ +#fileList td a.file, #fileList td a.file span { + cursor: default; +} diff --git a/apps/files_trashbin/download.php b/apps/files_trashbin/download.php deleted file mode 100644 index 60328e1dddbef395f01567cf0b21cc157125b951..0000000000000000000000000000000000000000 --- a/apps/files_trashbin/download.php +++ /dev/null @@ -1,51 +0,0 @@ -. -* -*/ - -// Check if we are a user -OCP\User::checkLoggedIn(); - -$filename = $_GET["file"]; - -$view = new OC_FilesystemView('/'.\OCP\User::getUser().'/files_trashbin/files'); - -if(!$view->file_exists($filename)) { - header("HTTP/1.0 404 Not Found"); - $tmpl = new OCP\Template( '', '404', 'guest' ); - $tmpl->assign('file', $filename); - $tmpl->printPage(); - exit; -} - -$ftype=$view->getMimeType( $filename ); - -header('Content-Type:'.$ftype);if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) { - header( 'Content-Disposition: attachment; filename="' . rawurlencode( basename($filename) ) . '"' ); -} else { - header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode( basename($filename) ) - . '; filename="' . rawurlencode( basename($filename) ) . '"' ); -} -OCP\Response::disableCaching(); -header('Content-Length: '. $view->filesize($filename)); - -OC_Util::obEnd(); -$view->readfile( $filename ); diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php index d8661e170a58cd69ebde886cb0fa92192969916f..93f385dd30b57054767f9fd448a85642bf881f14 100644 --- a/apps/files_trashbin/index.php +++ b/apps/files_trashbin/index.php @@ -5,16 +5,17 @@ OCP\User::checkLoggedIn(); OCP\App::setActiveNavigationEntry('files_index'); -OCP\Util::addScript('files_trashbin', 'trash'); OCP\Util::addScript('files_trashbin', 'disableDefaultActions'); OCP\Util::addScript('files', 'fileactions'); $tmpl = new OCP\Template('files_trashbin', 'index', 'user'); OCP\Util::addStyle('files', 'files'); +OCP\Util::addStyle('files_trashbin', 'trash'); OCP\Util::addScript('files', 'filelist'); // filelist overrides OCP\Util::addScript('files_trashbin', 'filelist'); OCP\Util::addscript('files', 'files'); +OCP\Util::addScript('files_trashbin', 'trash'); $dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : ''; diff --git a/apps/files_trashbin/js/filelist.js b/apps/files_trashbin/js/filelist.js index cd5a67ddfe002d502d013074b1baf496a948cbbf..f42abb6d029dc9a526713754ae89e7d8a44ccaf7 100644 --- a/apps/files_trashbin/js/filelist.js +++ b/apps/files_trashbin/js/filelist.js @@ -22,3 +22,10 @@ FileList.reload = function(){ FileList.linkTo = function(dir){ return OC.linkTo('files_trashbin', 'index.php')+"?dir="+ encodeURIComponent(dir).replace(/%2F/g, '/'); } + +FileList.updateEmptyContent = function(){ + var $fileList = $('#fileList'); + var exists = $fileList.find('tr:first').exists(); + $('#emptycontent').toggleClass('hidden', exists); + $('#filestable th').toggleClass('hidden', !exists); +} diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js index d73eadb6011d40ac73797b617e4e26bb493e5c45..46d8b56308c8dfe82b1a346dbb5c6318be54b44f 100644 --- a/apps/files_trashbin/js/trash.js +++ b/apps/files_trashbin/js/trash.js @@ -3,15 +3,40 @@ $(document).ready(function() { if (typeof FileActions !== 'undefined') { FileActions.register('all', 'Restore', OC.PERMISSION_READ, OC.imagePath('core', 'actions/history'), function(filename) { - 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; + var tr = FileList.findFileEl(filename); + var deleteAction = tr.children("td.date").children(".action.delete"); + deleteAction.removeClass('delete-icon').addClass('progress-icon'); disableActions(); - $.post(OC.filePath('files_trashbin','ajax','undelete.php'), - {files:JSON.stringify([files]), dirlisting:tr.attr('data-dirlisting') }, - function(result){ + $.post(OC.filePath('files_trashbin', 'ajax', 'undelete.php'), + {files: JSON.stringify([$('#dir').val() + '/' + filename]), 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); + row.parentNode.removeChild(row); + } + if (result.status !== 'success') { + OC.dialogs.alert(result.data.message, t('core', 'Error')); + } + enableActions(); + FileList.updateFileSummary(); + FileList.updateEmptyContent(); + } + ); + + }); + }; + + FileActions.register('all', 'Delete', OC.PERMISSION_READ, function() { + return OC.imagePath('core', 'actions/delete'); + }, function(filename) { + $('.tipsy').remove(); + var tr = FileList.findFileEl(filename); + var deleteAction = tr.children("td.date").children(".action.delete"); + deleteAction.removeClass('delete-icon').addClass('progress-icon'); + disableActions(); + $.post(OC.filePath('files_trashbin', 'ajax', 'delete.php'), + {files: JSON.stringify([$('#dir').val() + '/' +filename]), 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); row.parentNode.removeChild(row); @@ -21,26 +46,40 @@ $(document).ready(function() { } enableActions(); FileList.updateFileSummary(); - }); + FileList.updateEmptyContent(); + } + ); - }); - }; + }); + + // Sets the select_all checkbox behaviour : + $('#select_all').click(function() { + if ($(this).attr('checked')) { + // Check all + $('td.filename input:checkbox').attr('checked', true); + $('td.filename input:checkbox').parent().parent().addClass('selected'); + } else { + // Uncheck all + $('td.filename input:checkbox').attr('checked', false); + $('td.filename input:checkbox').parent().parent().removeClass('selected'); + } + procesSelection(); + }); - FileActions.register('all', 'Delete', OC.PERMISSION_READ, function () { - return OC.imagePath('core', 'actions/delete'); - }, function (filename) { - $('.tipsy').remove(); + $('.undelete').click('click', function(event) { + event.preventDefault(); + var files = getSelectedFiles('file'); + var fileslist = JSON.stringify(files); + var dirlisting = getSelectedFiles('dirlisting')[0]; + disableActions(); + for (var i = 0; i < files.length; i++) { + var deleteAction = FileList.findFileEl(files[i]).children("td.date").children(".action.delete"); + deleteAction.removeClass('delete-icon').addClass('progress-icon'); + } - var tr=$('tr').filterAttr('data-file', filename); - 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; - disableActions(); - $.post(OC.filePath('files_trashbin','ajax','delete.php'), - {files:JSON.stringify([files]), dirlisting:tr.attr('data-dirlisting') }, - function(result){ + $.post(OC.filePath('files_trashbin', 'ajax', 'undelete.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); @@ -50,106 +89,79 @@ $(document).ready(function() { } enableActions(); FileList.updateFileSummary(); - }); - - }); - - // Sets the select_all checkbox behaviour : - $('#select_all').click(function() { - if($(this).attr('checked')){ - // Check all - $('td.filename input:checkbox').attr('checked', true); - $('td.filename input:checkbox').parent().parent().addClass('selected'); - }else{ - // Uncheck all - $('td.filename input:checkbox').attr('checked', false); - $('td.filename input:checkbox').parent().parent().removeClass('selected'); - } - processSelection(); - }); - - $('td.filename input:checkbox').live('change',function(event) { - if (event.shiftKey) { - var last = $(lastChecked).parent().parent().prevAll().length; - var first = $(this).parent().parent().prevAll().length; - var start = Math.min(first, last); - var end = Math.max(first, last); - var rows = $(this).parent().parent().parent().children('tr'); - for (var i = start; i < end; i++) { - $(rows).each(function(index) { - if (index === i) { - var checkbox = $(this).children().children('input:checkbox'); - $(checkbox).attr('checked', 'checked'); - $(checkbox).parent().parent().addClass('selected'); - } - }); + FileList.updateEmptyContent(); } - } - var selectedCount=$('td.filename input:checkbox:checked').length; - $(this).parent().parent().toggleClass('selected'); - if(!$(this).attr('checked')){ - $('#select_all').attr('checked',false); - }else{ - if(selectedCount==$('td.filename input:checkbox').length){ - $('#select_all').attr('checked',true); - } - } - processSelection(); - }); + ); + }); - $('.undelete').click('click',function(event) { - event.preventDefault(); - var spinner = ''; - var files=getSelectedFiles('file'); - var fileslist = JSON.stringify(files); - var dirlisting=getSelectedFiles('dirlisting')[0]; - disableActions(); - for (var i=0; i'; - var files=getSelectedFiles('file'); - var fileslist = JSON.stringify(files); - var dirlisting=getSelectedFiles('dirlisting')[0]; + }); - disableActions(); - for (var i=0; ispan.name').text(t('files','Name')); - $('#modified').text(t('files','Deleted')); - $('table').removeClass('multiselect'); - $('.selectedActions').hide(); - } - else { - $('.selectedActions').show(); - var selection=''; - if(selectedFolders.length>0){ - selection += n('files', '%n folder', '%n folders', selectedFolders.length); - if(selectedFiles.length>0){ - selection+=' & '; - } - } - if(selectedFiles.length>0){ - selection += n('files', '%n file', '%n files', selectedFiles.length); - } - $('#headerName>span.name').text(selection); - $('#modified').text(''); - $('table').addClass('multiselect'); - } -} - /** * @brief get a list of selected files * @param string property (option) the property of the file requested @@ -225,7 +209,7 @@ function getSelectedFiles(property){ elements.each(function(i,element){ var file={ name:$(element).attr('data-filename'), - file:$(element).attr('data-file'), + file:$('#dir').val() + "/" + $(element).attr('data-file'), timestamp:$(element).attr('data-timestamp'), type:$(element).attr('data-type'), dirlisting:$(element).attr('data-dirlisting') @@ -252,9 +236,4 @@ function disableActions() { $(".action").css("display", "none"); $(":input:checkbox").css("display", "none"); } -function onClickBreadcrumb(e){ - var $el = $(e.target).closest('.crumb'); - e.preventDefault(); - FileList.changeDirectory(decodeURIComponent($el.data('dir'))); -} diff --git a/apps/files_trashbin/l10n/ady.php b/apps/files_trashbin/l10n/ady.php new file mode 100644 index 0000000000000000000000000000000000000000..0acad00e8b58f9aeba594f70d8957213bf899c9a --- /dev/null +++ b/apps/files_trashbin/l10n/ady.php @@ -0,0 +1,6 @@ + array("",""), +"_%n file_::_%n files_" => array("","") +); +$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/ar.php b/apps/files_trashbin/l10n/ar.php index 710a9d14196ee4704c5265c2239fd03b76f35f38..9733e6b100e35e8a0a73f71b26a7e9155f7c0cb2 100644 --- a/apps/files_trashbin/l10n/ar.php +++ b/apps/files_trashbin/l10n/ar.php @@ -2,16 +2,11 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "تعذّر حذف%s بشكل دائم", "Couldn't restore %s" => "تعذّر استرجاع %s ", -"perform restore operation" => "إبدء عملية الإستعادة", "Error" => "خطأ", -"delete file permanently" => "حذف بشكل دائم", -"Delete permanently" => "حذف بشكل دائم", -"Name" => "اسم", -"Deleted" => "تم الحذف", -"_%n folder_::_%n folders_" => array("","","","","",""), -"_%n file_::_%n files_" => array("","","","","",""), "Nothing in here. Your trash bin is empty!" => "لا يوجد شيء هنا. سلة المهملات خاليه.", +"Name" => "اسم", "Restore" => "استعيد", +"Deleted" => "تم الحذف", "Delete" => "إلغاء", "Deleted Files" => "الملفات المحذوفه" ); diff --git a/apps/files_trashbin/l10n/be.php b/apps/files_trashbin/l10n/be.php index 50df7ff5a972ed321c03533ed72e520d7d3a496c..6a34f1fe246d28fe871ac9f85b0be7e2ea75723c 100644 --- a/apps/files_trashbin/l10n/be.php +++ b/apps/files_trashbin/l10n/be.php @@ -1,6 +1,5 @@ array("","","",""), -"_%n file_::_%n files_" => array("","","","") +"Error" => "Памылка" ); $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);"; diff --git a/apps/files_trashbin/l10n/bg_BG.php b/apps/files_trashbin/l10n/bg_BG.php index 3c12e6906ed661ef08bed666f120de9f40bc3d0d..2f1521feaa51f7e413ecb2d62881aa749712bb8b 100644 --- a/apps/files_trashbin/l10n/bg_BG.php +++ b/apps/files_trashbin/l10n/bg_BG.php @@ -2,16 +2,11 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Невъзможно перманентното изтриване на %s", "Couldn't restore %s" => "Невъзможно възтановяване на %s", -"perform restore operation" => "извършване на действие по възстановяване", "Error" => "Грешка", -"delete file permanently" => "изтриване на файла завинаги", -"Delete permanently" => "Изтриване завинаги", -"Name" => "Име", -"Deleted" => "Изтрито", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("",""), "Nothing in here. Your trash bin is empty!" => "Няма нищо. Кофата е празна!", +"Name" => "Име", "Restore" => "Възтановяване", +"Deleted" => "Изтрито", "Delete" => "Изтриване", "Deleted Files" => "Изтрити файлове" ); diff --git a/apps/files_trashbin/l10n/bn_BD.php b/apps/files_trashbin/l10n/bn_BD.php index c3741dbd1dba4bf49cc903babc1217403cde6c30..d3a9f23b3777e7644fb22df44626bde1189d4ebe 100644 --- a/apps/files_trashbin/l10n/bn_BD.php +++ b/apps/files_trashbin/l10n/bn_BD.php @@ -2,8 +2,6 @@ $TRANSLATIONS = array( "Error" => "সমস্যা", "Name" => "রাম", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("",""), "Delete" => "মুছে" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/bs.php b/apps/files_trashbin/l10n/bs.php index af7033bd1832e7243ab3e19486a21727eeedb32d..08ef9b4fdbbfb656ce8171918b0b73644c6c66d4 100644 --- a/apps/files_trashbin/l10n/bs.php +++ b/apps/files_trashbin/l10n/bs.php @@ -1,7 +1,5 @@ "Ime", -"_%n folder_::_%n folders_" => array("","",""), -"_%n file_::_%n files_" => array("","","") +"Name" => "Ime" ); $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);"; diff --git a/apps/files_trashbin/l10n/ca.php b/apps/files_trashbin/l10n/ca.php index eb57aa16aa51a955e5c7985d92c54a44c822023e..fa3f63ddb2237c3a6a8327c2bb97f430cae1baa9 100644 --- a/apps/files_trashbin/l10n/ca.php +++ b/apps/files_trashbin/l10n/ca.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "No s'ha pogut esborrar permanentment %s", "Couldn't restore %s" => "No s'ha pogut restaurar %s", -"perform restore operation" => "executa l'operació de restauració", "Error" => "Error", -"delete file permanently" => "esborra el fitxer permanentment", -"Delete permanently" => "Esborra permanentment", -"Name" => "Nom", -"Deleted" => "Eliminat", -"_%n folder_::_%n folders_" => array("","%n carpetes"), -"_%n file_::_%n files_" => array("","%n fitxers"), "restored" => "restaurat", "Nothing in here. Your trash bin is empty!" => "La paperera està buida!", +"Name" => "Nom", "Restore" => "Recupera", +"Deleted" => "Eliminat", "Delete" => "Esborra", "Deleted Files" => "Fitxers eliminats" ); diff --git a/apps/files_trashbin/l10n/cs_CZ.php b/apps/files_trashbin/l10n/cs_CZ.php index f0bebee742f48de5f4475d3ca9158c71d47101b9..ff0a69572f56ee475949e8c97869d6e0098306ae 100644 --- a/apps/files_trashbin/l10n/cs_CZ.php +++ b/apps/files_trashbin/l10n/cs_CZ.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Nelze trvale odstranit %s", "Couldn't restore %s" => "Nelze obnovit %s", -"perform restore operation" => "provést obnovu", "Error" => "Chyba", -"delete file permanently" => "trvale odstranit soubor", -"Delete permanently" => "Trvale odstranit", -"Name" => "Název", -"Deleted" => "Smazáno", -"_%n folder_::_%n folders_" => array("%n adresář","%n adresáře","%n adresářů"), -"_%n file_::_%n files_" => array("%n soubor","%n soubory","%n souborů"), "restored" => "obnoveno", "Nothing in here. Your trash bin is empty!" => "Žádný obsah. Váš koš je prázdný.", +"Name" => "Název", "Restore" => "Obnovit", +"Deleted" => "Smazáno", "Delete" => "Smazat", "Deleted Files" => "Smazané soubory" ); diff --git a/apps/files_trashbin/l10n/cy_GB.php b/apps/files_trashbin/l10n/cy_GB.php index 123a445c2c1d0697a615d2043f0e31b75c12c37f..f2eb81d67d2abba05ea74c439ba57601084de237 100644 --- a/apps/files_trashbin/l10n/cy_GB.php +++ b/apps/files_trashbin/l10n/cy_GB.php @@ -2,16 +2,11 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Methwyd dileu %s yn barhaol", "Couldn't restore %s" => "Methwyd adfer %s", -"perform restore operation" => "gweithrediad adfer", "Error" => "Gwall", -"delete file permanently" => "dileu ffeil yn barhaol", -"Delete permanently" => "Dileu'n barhaol", -"Name" => "Enw", -"Deleted" => "Wedi dileu", -"_%n folder_::_%n folders_" => array("","","",""), -"_%n file_::_%n files_" => array("","","",""), "Nothing in here. Your trash bin is empty!" => "Does dim byd yma. Mae eich bin sbwriel yn wag!", +"Name" => "Enw", "Restore" => "Adfer", +"Deleted" => "Wedi dileu", "Delete" => "Dileu", "Deleted Files" => "Ffeiliau Ddilewyd" ); diff --git a/apps/files_trashbin/l10n/da.php b/apps/files_trashbin/l10n/da.php index 2fbc08938789690676e04c6c8e4e196d586bdb2d..c396706d1525badae3efcd674dd2eb7f50d7b5bf 100644 --- a/apps/files_trashbin/l10n/da.php +++ b/apps/files_trashbin/l10n/da.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Kunne ikke slette %s permanent", "Couldn't restore %s" => "Kunne ikke gendanne %s", -"perform restore operation" => "udfør gendannelsesoperation", "Error" => "Fejl", -"delete file permanently" => "slet fil permanent", -"Delete permanently" => "Slet permanent", -"Name" => "Navn", -"Deleted" => "Slettet", -"_%n folder_::_%n folders_" => array("%n mappe","%n mapper"), -"_%n file_::_%n files_" => array("%n fil","%n filer"), "restored" => "Gendannet", "Nothing in here. Your trash bin is empty!" => "Intet at se her. Din papirkurv er tom!", +"Name" => "Navn", "Restore" => "Gendan", +"Deleted" => "Slettet", "Delete" => "Slet", "Deleted Files" => "Slettede filer" ); diff --git a/apps/files_trashbin/l10n/de.php b/apps/files_trashbin/l10n/de.php index ad6e0839bd61481f401842dbeacb0ef3158faf84..2b6703dd058180421c3ff09a5be13713a4ded32e 100644 --- a/apps/files_trashbin/l10n/de.php +++ b/apps/files_trashbin/l10n/de.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "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", "Error" => "Fehler", -"delete file permanently" => "Datei dauerhaft löschen", -"Delete permanently" => "Endgültig löschen", -"Name" => "Name", -"Deleted" => "gelöscht", -"_%n folder_::_%n folders_" => array("","%n Ordner"), -"_%n file_::_%n files_" => array("","%n Dateien"), "restored" => "Wiederhergestellt", "Nothing in here. Your trash bin is empty!" => "Nichts zu löschen, der Papierkorb ist leer!", +"Name" => "Name", "Restore" => "Wiederherstellen", +"Deleted" => "gelöscht", "Delete" => "Löschen", "Deleted Files" => "Gelöschte Dateien" ); diff --git a/apps/files_trashbin/l10n/de_CH.php b/apps/files_trashbin/l10n/de_CH.php index 92290a0de50f438389d010a038c8e65392bb1ede..ec9f0b5309d4392f866773370408c1ff52209b4c 100644 --- a/apps/files_trashbin/l10n/de_CH.php +++ b/apps/files_trashbin/l10n/de_CH.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "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", "Error" => "Fehler", -"delete file permanently" => "Datei dauerhaft löschen", -"Delete permanently" => "Endgültig löschen", -"Name" => "Name", -"Deleted" => "Gelöscht", -"_%n folder_::_%n folders_" => array("%n Ordner","%n Ordner"), -"_%n file_::_%n files_" => array("%n Datei","%n Dateien"), "restored" => "Wiederhergestellt", "Nothing in here. Your trash bin is empty!" => "Nichts zu löschen, Ihr Papierkorb ist leer!", +"Name" => "Name", "Restore" => "Wiederherstellen", +"Deleted" => "Gelöscht", "Delete" => "Löschen", "Deleted Files" => "Gelöschte Dateien" ); diff --git a/apps/files_trashbin/l10n/de_DE.php b/apps/files_trashbin/l10n/de_DE.php index 0df6941280109e1d617e421447a21aa0e5e4aa35..ec9f0b5309d4392f866773370408c1ff52209b4c 100644 --- a/apps/files_trashbin/l10n/de_DE.php +++ b/apps/files_trashbin/l10n/de_DE.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "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", "Error" => "Fehler", -"delete file permanently" => "Datei dauerhaft löschen", -"Delete permanently" => "Endgültig löschen", -"Name" => "Name", -"Deleted" => "Gelöscht", -"_%n folder_::_%n folders_" => array("%n Ordner","%n Ordner"), -"_%n file_::_%n files_" => array("%n Dateien","%n Dateien"), "restored" => "Wiederhergestellt", "Nothing in here. Your trash bin is empty!" => "Nichts zu löschen, Ihr Papierkorb ist leer!", +"Name" => "Name", "Restore" => "Wiederherstellen", +"Deleted" => "Gelöscht", "Delete" => "Löschen", "Deleted Files" => "Gelöschte Dateien" ); diff --git a/apps/files_trashbin/l10n/el.php b/apps/files_trashbin/l10n/el.php index 939c7fed6143e7879254bf7f1ec9eece441fd298..b4ee30c578d353b372210dfa97841398a4b25cff 100644 --- a/apps/files_trashbin/l10n/el.php +++ b/apps/files_trashbin/l10n/el.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Αδύνατη η μόνιμη διαγραφή του %s", "Couldn't restore %s" => "Αδυναμία επαναφοράς %s", -"perform restore operation" => "εκτέλεση λειτουργία επαναφοράς", "Error" => "Σφάλμα", -"delete file permanently" => "μόνιμη διαγραφή αρχείου", -"Delete permanently" => "Μόνιμη διαγραφή", -"Name" => "Όνομα", -"Deleted" => "Διαγράφηκε", -"_%n folder_::_%n folders_" => array("","%n φάκελοι"), -"_%n file_::_%n files_" => array("","%n αρχεία"), -"restored" => "έγινε επαναφορά", +"restored" => "επαναφέρθηκαν", "Nothing in here. Your trash bin is empty!" => "Δεν υπάρχει τίποτα εδώ. Ο κάδος σας είναι άδειος!", +"Name" => "Όνομα", "Restore" => "Επαναφορά", +"Deleted" => "Διαγραμμένα", "Delete" => "Διαγραφή", "Deleted Files" => "Διαγραμμένα Αρχεία" ); diff --git a/apps/files_trashbin/l10n/en_GB.php b/apps/files_trashbin/l10n/en_GB.php index be9d8b9f520dca6890f1bcf6f4d2cb94282e8113..6b179c86532bdf631c62e62e02e98d35d422051d 100644 --- a/apps/files_trashbin/l10n/en_GB.php +++ b/apps/files_trashbin/l10n/en_GB.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Couldn't delete %s permanently", "Couldn't restore %s" => "Couldn't restore %s", -"perform restore operation" => "perform restore operation", "Error" => "Error", -"delete file permanently" => "delete file permanently", -"Delete permanently" => "Delete permanently", -"Name" => "Name", -"Deleted" => "Deleted", -"_%n folder_::_%n folders_" => array("%n folder","%n folders"), -"_%n file_::_%n files_" => array("%n file","%n files"), "restored" => "restored", "Nothing in here. Your trash bin is empty!" => "Nothing in here. Your recycle bin is empty!", +"Name" => "Name", "Restore" => "Restore", +"Deleted" => "Deleted", "Delete" => "Delete", "Deleted Files" => "Deleted Files" ); diff --git a/apps/files_trashbin/l10n/eo.php b/apps/files_trashbin/l10n/eo.php index d1e30cba58883a032b8e099d308a9cf8cafaf0e4..b8f999eaafa28484968fc82aac2877fdc83fab4f 100644 --- a/apps/files_trashbin/l10n/eo.php +++ b/apps/files_trashbin/l10n/eo.php @@ -1,11 +1,13 @@ "Ne povis foriĝi %s por ĉiam", +"Couldn't restore %s" => "Ne povis restaŭriĝi %s", "Error" => "Eraro", -"Delete permanently" => "Forigi por ĉiam", +"restored" => "restaŭrita", +"Nothing in here. Your trash bin is empty!" => "Nenio estas ĉi tie. Via rubujo malplenas!", "Name" => "Nomo", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("",""), "Restore" => "Restaŭri", +"Deleted" => "Forigita", "Delete" => "Forigi", "Deleted Files" => "Forigitaj dosieroj" ); diff --git a/apps/files_trashbin/l10n/es.php b/apps/files_trashbin/l10n/es.php index a5639c2c71454d6d1e5aa4210b4b94acec21b7c6..db7a617729b3393dc4439895d21abe0b9689aa94 100644 --- a/apps/files_trashbin/l10n/es.php +++ b/apps/files_trashbin/l10n/es.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "No se puede eliminar %s permanentemente", "Couldn't restore %s" => "No se puede restaurar %s", -"perform restore operation" => "restaurar", "Error" => "Error", -"delete file permanently" => "eliminar archivo permanentemente", -"Delete permanently" => "Eliminar permanentemente", -"Name" => "Nombre", -"Deleted" => "Eliminado", -"_%n folder_::_%n folders_" => array("%n carpeta","%n carpetas"), -"_%n file_::_%n files_" => array("%n archivo","%n archivos"), "restored" => "recuperado", "Nothing in here. Your trash bin is empty!" => "No hay nada aquí. ¡Tu papelera esta vacía!", +"Name" => "Nombre", "Restore" => "Recuperar", +"Deleted" => "Eliminado", "Delete" => "Eliminar", "Deleted Files" => "Archivos Eliminados" ); diff --git a/apps/files_trashbin/l10n/es_AR.php b/apps/files_trashbin/l10n/es_AR.php index 0cb969a3483b4f1ce7c83aabfe6f6867510bacdd..842101d33be6deecb2f56d1a397f77ecde87910b 100644 --- a/apps/files_trashbin/l10n/es_AR.php +++ b/apps/files_trashbin/l10n/es_AR.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "No fue posible borrar %s de manera permanente", "Couldn't restore %s" => "No se pudo restaurar %s", -"perform restore operation" => "Restaurar", "Error" => "Error", -"delete file permanently" => "Borrar archivo de manera permanente", -"Delete permanently" => "Borrar de manera permanente", -"Name" => "Nombre", -"Deleted" => "Borrado", -"_%n folder_::_%n folders_" => array("%n directorio","%n directorios"), -"_%n file_::_%n files_" => array("%n archivo","%n archivos"), "restored" => "recuperado", "Nothing in here. Your trash bin is empty!" => "No hay nada acá. ¡La papelera está vacía!", +"Name" => "Nombre", "Restore" => "Recuperar", +"Deleted" => "Borrado", "Delete" => "Borrar", "Deleted Files" => "Archivos eliminados" ); diff --git a/apps/files_trashbin/l10n/es_MX.php b/apps/files_trashbin/l10n/es_MX.php index 0acad00e8b58f9aeba594f70d8957213bf899c9a..db7a617729b3393dc4439895d21abe0b9689aa94 100644 --- a/apps/files_trashbin/l10n/es_MX.php +++ b/apps/files_trashbin/l10n/es_MX.php @@ -1,6 +1,14 @@ array("",""), -"_%n file_::_%n files_" => array("","") +"Couldn't delete %s permanently" => "No se puede eliminar %s permanentemente", +"Couldn't restore %s" => "No se puede restaurar %s", +"Error" => "Error", +"restored" => "recuperado", +"Nothing in here. Your trash bin is empty!" => "No hay nada aquí. ¡Tu papelera esta vacía!", +"Name" => "Nombre", +"Restore" => "Recuperar", +"Deleted" => "Eliminado", +"Delete" => "Eliminar", +"Deleted Files" => "Archivos Eliminados" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/et_EE.php b/apps/files_trashbin/l10n/et_EE.php index 43c182ea7b38b63422b85fb62fcbac6f7d513734..56eebc79f0b60391f84d932d97b6bd1a7642f77b 100644 --- a/apps/files_trashbin/l10n/et_EE.php +++ b/apps/files_trashbin/l10n/et_EE.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "%s jäädavalt kustutamine ebaõnnestus", "Couldn't restore %s" => "%s ei saa taastada", -"perform restore operation" => "soorita taastamine", "Error" => "Viga", -"delete file permanently" => "kustuta fail jäädavalt", -"Delete permanently" => "Kustuta jäädavalt", -"Name" => "Nimi", -"Deleted" => "Kustutatud", -"_%n folder_::_%n folders_" => array("","%n kataloogi"), -"_%n file_::_%n files_" => array("%n fail","%n faili"), "restored" => "taastatud", "Nothing in here. Your trash bin is empty!" => "Siin pole midagi. Sinu prügikast on tühi!", +"Name" => "Nimi", "Restore" => "Taasta", +"Deleted" => "Kustutatud", "Delete" => "Kustuta", "Deleted Files" => "Kustutatud failid" ); diff --git a/apps/files_trashbin/l10n/eu.php b/apps/files_trashbin/l10n/eu.php index 240582a7ea6c60d57f9e05e76849a509f4f36f26..04d92e01b36d2e1b79783c6859d6a5e47abc0687 100644 --- a/apps/files_trashbin/l10n/eu.php +++ b/apps/files_trashbin/l10n/eu.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Ezin izan da %s betirako ezabatu", "Couldn't restore %s" => "Ezin izan da %s berreskuratu", -"perform restore operation" => "berreskuratu", "Error" => "Errorea", -"delete file permanently" => "ezabatu fitxategia betirako", -"Delete permanently" => "Ezabatu betirako", -"Name" => "Izena", -"Deleted" => "Ezabatuta", -"_%n folder_::_%n folders_" => array("karpeta %n","%n karpeta"), -"_%n file_::_%n files_" => array("fitxategi %n","%n fitxategi"), "restored" => "Berrezarrita", "Nothing in here. Your trash bin is empty!" => "Ez dago ezer ez. Zure zakarrontzia hutsik dago!", +"Name" => "Izena", "Restore" => "Berrezarri", +"Deleted" => "Ezabatuta", "Delete" => "Ezabatu", "Deleted Files" => "Ezabatutako Fitxategiak" ); diff --git a/apps/files_trashbin/l10n/fa.php b/apps/files_trashbin/l10n/fa.php index 654f20a5f1c7418a3cfd073db073a586099f8401..8409987b897fca49efa6226c97fa6da02bba1721 100644 --- a/apps/files_trashbin/l10n/fa.php +++ b/apps/files_trashbin/l10n/fa.php @@ -2,16 +2,11 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "%s را نمی توان برای همیشه حذف کرد", "Couldn't restore %s" => "%s را نمی توان بازگرداند", -"perform restore operation" => "انجام عمل بازگرداندن", "Error" => "خطا", -"delete file permanently" => "حذف فایل برای همیشه", -"Delete permanently" => "حذف قطعی", -"Name" => "نام", -"Deleted" => "حذف شده", -"_%n folder_::_%n folders_" => array(""), -"_%n file_::_%n files_" => array(""), "Nothing in here. Your trash bin is empty!" => "هیچ چیزی اینجا نیست. سطل زباله ی شما خالی است.", +"Name" => "نام", "Restore" => "بازیابی", +"Deleted" => "حذف شده", "Delete" => "حذف", "Deleted Files" => "فایلهای حذف شده" ); diff --git a/apps/files_trashbin/l10n/fi_FI.php b/apps/files_trashbin/l10n/fi_FI.php index f03950981c08c00cbc6036b99ed3d39f16ce4539..b956c1c1e4c555f45219f38b0a7f305c269ce802 100644 --- a/apps/files_trashbin/l10n/fi_FI.php +++ b/apps/files_trashbin/l10n/fi_FI.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Kohdetta %s ei voitu poistaa pysyvästi", "Couldn't restore %s" => "Kohteen %s palautus epäonnistui", -"perform restore operation" => "suorita palautustoiminto", "Error" => "Virhe", -"delete file permanently" => "poista tiedosto pysyvästi", -"Delete permanently" => "Poista pysyvästi", -"Name" => "Nimi", -"Deleted" => "Poistettu", -"_%n folder_::_%n folders_" => array("%n kansio","%n kansiota"), -"_%n file_::_%n files_" => array("%n tiedosto","%n tiedostoa"), "restored" => "palautettu", "Nothing in here. Your trash bin is empty!" => "Tyhjää täynnä! Roskakorissa ei ole mitään.", +"Name" => "Nimi", "Restore" => "Palauta", +"Deleted" => "Poistettu", "Delete" => "Poista", "Deleted Files" => "Poistetut tiedostot" ); diff --git a/apps/files_trashbin/l10n/fr.php b/apps/files_trashbin/l10n/fr.php index 45527805ce1af23c00193da2c838a7cfb3d50f3a..593310e2c3296247b2d88f10a747503672892d51 100644 --- a/apps/files_trashbin/l10n/fr.php +++ b/apps/files_trashbin/l10n/fr.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Impossible d'effacer %s de façon permanente", "Couldn't restore %s" => "Impossible de restaurer %s", -"perform restore operation" => "effectuer l'opération de restauration", "Error" => "Erreur", -"delete file permanently" => "effacer définitivement le fichier", -"Delete permanently" => "Supprimer de façon définitive", -"Name" => "Nom", -"Deleted" => "Effacé", -"_%n folder_::_%n folders_" => array("","%n dossiers"), -"_%n file_::_%n files_" => array("","%n fichiers"), "restored" => "restauré", "Nothing in here. Your trash bin is empty!" => "Il n'y a rien ici. Votre corbeille est vide !", +"Name" => "Nom", "Restore" => "Restaurer", +"Deleted" => "Effacé", "Delete" => "Supprimer", "Deleted Files" => "Fichiers effacés" ); diff --git a/apps/files_trashbin/l10n/gl.php b/apps/files_trashbin/l10n/gl.php index 568c17607fe0eb90554711df084aae6ce981bf21..ae7ef8b319bb3113ee7599ecaa7c3a7765018ba2 100644 --- a/apps/files_trashbin/l10n/gl.php +++ b/apps/files_trashbin/l10n/gl.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "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", "Error" => "Erro", -"delete file permanently" => "eliminar o ficheiro permanentemente", -"Delete permanently" => "Eliminar permanentemente", -"Name" => "Nome", -"Deleted" => "Eliminado", -"_%n folder_::_%n folders_" => array("%n cartafol","%n cartafoles"), -"_%n file_::_%n files_" => array("%n ficheiro","%n ficheiros"), "restored" => "restaurado", "Nothing in here. Your trash bin is empty!" => "Aquí non hai nada. O cesto do lixo está baleiro!", +"Name" => "Nome", "Restore" => "Restablecer", +"Deleted" => "Eliminado", "Delete" => "Eliminar", "Deleted Files" => "Ficheiros eliminados" ); diff --git a/apps/files_trashbin/l10n/he.php b/apps/files_trashbin/l10n/he.php index 6aa6264a315914829450a6a1cc4069de9e12d92e..d0bcb327d4a639634d7c40037b77589e5a4a9334 100644 --- a/apps/files_trashbin/l10n/he.php +++ b/apps/files_trashbin/l10n/he.php @@ -2,16 +2,11 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "לא ניתן למחוק את %s לצמיתות", "Couldn't restore %s" => "לא ניתן לשחזר את %s", -"perform restore operation" => "ביצוע פעולת שחזור", "Error" => "שגיאה", -"delete file permanently" => "מחיקת קובץ לצמיתות", -"Delete permanently" => "מחיקה לצמיתות", -"Name" => "שם", -"Deleted" => "נמחק", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("",""), "Nothing in here. Your trash bin is empty!" => "אין כאן שום דבר. סל המיחזור שלך ריק!", +"Name" => "שם", "Restore" => "שחזור", +"Deleted" => "נמחק", "Delete" => "מחיקה", "Deleted Files" => "קבצים שנמחקו" ); diff --git a/apps/files_trashbin/l10n/hi.php b/apps/files_trashbin/l10n/hi.php index 71711218b14dad40bfa6fafa6987278cdd1b45e0..d4a26011b58cafd50b8a07eef17308d779f69eb1 100644 --- a/apps/files_trashbin/l10n/hi.php +++ b/apps/files_trashbin/l10n/hi.php @@ -1,7 +1,5 @@ "त्रुटि", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("","") +"Error" => "त्रुटि" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/hr.php b/apps/files_trashbin/l10n/hr.php index d227b4979aadbc0e0929e603a69b682b34c88469..8e8fd22f8ef0280b60f5d8f2f76c85e72755a0ef 100644 --- a/apps/files_trashbin/l10n/hr.php +++ b/apps/files_trashbin/l10n/hr.php @@ -2,8 +2,6 @@ $TRANSLATIONS = array( "Error" => "Greška", "Name" => "Ime", -"_%n folder_::_%n folders_" => array("","",""), -"_%n file_::_%n files_" => array("","",""), "Delete" => "Obriši" ); $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;"; diff --git a/apps/files_trashbin/l10n/hu_HU.php b/apps/files_trashbin/l10n/hu_HU.php index 766ddcbce4de9dd91d471315cd81f663239091b1..aa8b45a7d65c8bd15f469aeeedabb4de39547433 100644 --- a/apps/files_trashbin/l10n/hu_HU.php +++ b/apps/files_trashbin/l10n/hu_HU.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Nem sikerült %s végleges törlése", "Couldn't restore %s" => "Nem sikerült %s visszaállítása", -"perform restore operation" => "a visszaállítás végrehajtása", "Error" => "Hiba", -"delete file permanently" => "az állomány végleges törlése", -"Delete permanently" => "Végleges törlés", -"Name" => "Név", -"Deleted" => "Törölve", -"_%n folder_::_%n folders_" => array("","%n mappa"), -"_%n file_::_%n files_" => array("","%n állomány"), "restored" => "visszaállítva", "Nothing in here. Your trash bin is empty!" => "Itt nincs semmi. Az Ön szemetes mappája üres!", +"Name" => "Név", "Restore" => "Visszaállítás", +"Deleted" => "Törölve", "Delete" => "Törlés", "Deleted Files" => "Törölt fájlok" ); diff --git a/apps/files_trashbin/l10n/hy.php b/apps/files_trashbin/l10n/hy.php index 6ff58b56202081827d5ef70cc85325aa7c0803e0..f933bec8feb91959b1303f8d028dda1c815ccf3e 100644 --- a/apps/files_trashbin/l10n/hy.php +++ b/apps/files_trashbin/l10n/hy.php @@ -1,7 +1,5 @@ array("",""), -"_%n file_::_%n files_" => array("",""), "Delete" => "Ջնջել" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/ia.php b/apps/files_trashbin/l10n/ia.php index c583344a81e1b624563f77b1be7ec8f0654082a2..7709ef030e365faac2c10e44a0abafbc78215736 100644 --- a/apps/files_trashbin/l10n/ia.php +++ b/apps/files_trashbin/l10n/ia.php @@ -2,8 +2,6 @@ $TRANSLATIONS = array( "Error" => "Error", "Name" => "Nomine", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("",""), "Delete" => "Deler" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/id.php b/apps/files_trashbin/l10n/id.php index 6aad1302f43e4442d7c50d3d2f7acbd5877e221a..a55520fc117c8b143ed2ad1aafdfaf2ac806c119 100644 --- a/apps/files_trashbin/l10n/id.php +++ b/apps/files_trashbin/l10n/id.php @@ -2,16 +2,11 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Tidak dapat menghapus permanen %s", "Couldn't restore %s" => "Tidak dapat memulihkan %s", -"perform restore operation" => "jalankan operasi pemulihan", "Error" => "Galat", -"delete file permanently" => "hapus berkas secara permanen", -"Delete permanently" => "Hapus secara permanen", -"Name" => "Nama", -"Deleted" => "Dihapus", -"_%n folder_::_%n folders_" => array(""), -"_%n file_::_%n files_" => array(""), "Nothing in here. Your trash bin is empty!" => "Tempat sampah anda kosong!", +"Name" => "Nama", "Restore" => "Pulihkan", +"Deleted" => "Dihapus", "Delete" => "Hapus", "Deleted Files" => "Berkas yang Dihapus" ); diff --git a/apps/files_trashbin/l10n/is.php b/apps/files_trashbin/l10n/is.php index 55ae433646147d0694d9324c949d3de602173718..8ccf89739fca1dc486d2c5ac98aae71e557c2d7d 100644 --- a/apps/files_trashbin/l10n/is.php +++ b/apps/files_trashbin/l10n/is.php @@ -2,8 +2,6 @@ $TRANSLATIONS = array( "Error" => "Villa", "Name" => "Nafn", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("",""), "Delete" => "Eyða" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/it.php b/apps/files_trashbin/l10n/it.php index e4b39c4a6d59d9becc9bbb1ff070c45caa8f1300..b631e0c9e4ffa80dd419f6219f8b786a0094ea86 100644 --- a/apps/files_trashbin/l10n/it.php +++ b/apps/files_trashbin/l10n/it.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Impossibile eliminare %s definitivamente", "Couldn't restore %s" => "Impossibile ripristinare %s", -"perform restore operation" => "esegui operazione di ripristino", "Error" => "Errore", -"delete file permanently" => "elimina il file definitivamente", -"Delete permanently" => "Elimina definitivamente", -"Name" => "Nome", -"Deleted" => "Eliminati", -"_%n folder_::_%n folders_" => array("%n cartella","%n cartelle"), -"_%n file_::_%n files_" => array("%n file","%n file"), "restored" => "ripristinati", "Nothing in here. Your trash bin is empty!" => "Qui non c'è niente. Il tuo cestino è vuoto.", +"Name" => "Nome", "Restore" => "Ripristina", +"Deleted" => "Eliminati", "Delete" => "Elimina", "Deleted Files" => "File eliminati" ); diff --git a/apps/files_trashbin/l10n/ja_JP.php b/apps/files_trashbin/l10n/ja_JP.php index eb9748d57c04af064215003511089c12b805b199..8d896625b5239acb6f0a22c8157aa2ec7b1fe37b 100644 --- a/apps/files_trashbin/l10n/ja_JP.php +++ b/apps/files_trashbin/l10n/ja_JP.php @@ -2,18 +2,13 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "%s を完全に削除出来ませんでした", "Couldn't restore %s" => "%s を復元出来ませんでした", -"perform restore operation" => "復元操作を実行する", "Error" => "エラー", -"delete file permanently" => "ファイルを完全に削除する", -"Delete permanently" => "完全に削除する", -"Name" => "名前", -"Deleted" => "削除済み", -"_%n folder_::_%n folders_" => array("%n個のフォルダ"), -"_%n file_::_%n files_" => array("%n個のファイル"), "restored" => "復元済", "Nothing in here. Your trash bin is empty!" => "ここには何もありません。ゴミ箱は空です!", +"Name" => "名前", "Restore" => "復元", +"Deleted" => "削除済み", "Delete" => "削除", -"Deleted Files" => "削除されたファイル" +"Deleted Files" => "ゴミ箱" ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files_trashbin/l10n/ka_GE.php b/apps/files_trashbin/l10n/ka_GE.php index 236d8951e9dcf47368d21fab951bbd7b5e0a7967..7440171deef94b7eebdafb0bfab8258251c35cbf 100644 --- a/apps/files_trashbin/l10n/ka_GE.php +++ b/apps/files_trashbin/l10n/ka_GE.php @@ -2,16 +2,11 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "ფაილი %s–ის სრულად წაშლა ვერ მოხერხდა", "Couldn't restore %s" => "%s–ის აღდგენა ვერ მოხერხდა", -"perform restore operation" => "მიმდინარეობს აღდგენის ოპერაცია", "Error" => "შეცდომა", -"delete file permanently" => "ფაილის სრულად წაშლა", -"Delete permanently" => "სრულად წაშლა", -"Name" => "სახელი", -"Deleted" => "წაშლილი", -"_%n folder_::_%n folders_" => array(""), -"_%n file_::_%n files_" => array(""), "Nothing in here. Your trash bin is empty!" => "აქ არაფერი არ არის. სანაგვე ყუთი ცარიელია!", +"Name" => "სახელი", "Restore" => "აღდგენა", +"Deleted" => "წაშლილი", "Delete" => "წაშლა", "Deleted Files" => "წაშლილი ფაილები" ); diff --git a/apps/files_trashbin/l10n/km.php b/apps/files_trashbin/l10n/km.php index 70f10d7c0bf5f12667a902c57aeb1cb8215703ef..f7d9faa38c566877990a5955d661b7cd09218414 100644 --- a/apps/files_trashbin/l10n/km.php +++ b/apps/files_trashbin/l10n/km.php @@ -1,6 +1,5 @@ array(""), -"_%n file_::_%n files_" => array("") +"Delete" => "លុប" ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files_trashbin/l10n/ko.php b/apps/files_trashbin/l10n/ko.php index 9ac5f9802c683671fe3d156e9fb39655fddbcda9..9c3cd2de15f37f392edea4aca73f669bab235cc2 100644 --- a/apps/files_trashbin/l10n/ko.php +++ b/apps/files_trashbin/l10n/ko.php @@ -1,19 +1,14 @@ "%s를 영구적으로 삭제할수 없습니다", -"Couldn't restore %s" => "%s를 복원할수 없습니다", -"perform restore operation" => "복원 작업중", +"Couldn't delete %s permanently" => "%s을(를_ 영구적으로 삭제할 수 없습니다", +"Couldn't restore %s" => "%s을(를) 복원할 수 없습니다", "Error" => "오류", -"delete file permanently" => "영구적으로 파일 삭제하기", -"Delete permanently" => "영원히 삭제", -"Name" => "이름", -"Deleted" => "삭제됨", -"_%n folder_::_%n folders_" => array("폴더 %n개"), -"_%n file_::_%n files_" => array("파일 %n개 "), "restored" => "복원됨", -"Nothing in here. Your trash bin is empty!" => "현재 휴지통은 비어있습니다!", +"Nothing in here. Your trash bin is empty!" => "휴지통이 비어 있습니다!", +"Name" => "이름", "Restore" => "복원", +"Deleted" => "삭제됨", "Delete" => "삭제", -"Deleted Files" => "삭제된 파일들" +"Deleted Files" => "삭제된 파일" ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files_trashbin/l10n/ku_IQ.php b/apps/files_trashbin/l10n/ku_IQ.php index 3f110f06002b4386638af1efde66098d4cd25096..c1962a4075d4c203cca3bd8424ab2cb951c3040a 100644 --- a/apps/files_trashbin/l10n/ku_IQ.php +++ b/apps/files_trashbin/l10n/ku_IQ.php @@ -1,8 +1,6 @@ "هه‌ڵه", -"Name" => "ناو", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("","") +"Name" => "ناو" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/lb.php b/apps/files_trashbin/l10n/lb.php index cbfd515a8b3fd2c335ae318a7eca8af7fe3b554f..b434ae72176e44391d4a0a256d3c3e46a40ccea9 100644 --- a/apps/files_trashbin/l10n/lb.php +++ b/apps/files_trashbin/l10n/lb.php @@ -2,8 +2,6 @@ $TRANSLATIONS = array( "Error" => "Fehler", "Name" => "Numm", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("",""), "Delete" => "Läschen" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/lt_LT.php b/apps/files_trashbin/l10n/lt_LT.php index 0a51290f4d99bf12f2ffea6417eb951179df7efc..c4a8463fd0e9df0a0177ba8ab33fac2282ba43bf 100644 --- a/apps/files_trashbin/l10n/lt_LT.php +++ b/apps/files_trashbin/l10n/lt_LT.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Nepavyko negrįžtamai ištrinti %s", "Couldn't restore %s" => "Nepavyko atkurti %s", -"perform restore operation" => "atkurti", "Error" => "Klaida", -"delete file permanently" => "failą ištrinti negrįžtamai", -"Delete permanently" => "Ištrinti negrįžtamai", -"Name" => "Pavadinimas", -"Deleted" => "Ištrinti", -"_%n folder_::_%n folders_" => array("","","%n aplankų"), -"_%n file_::_%n files_" => array("","","%n failų"), "restored" => "atstatyta", "Nothing in here. Your trash bin is empty!" => "Nieko nėra. Jūsų šiukšliadėžė tuščia!", +"Name" => "Pavadinimas", "Restore" => "Atstatyti", +"Deleted" => "Ištrinti", "Delete" => "Ištrinti", "Deleted Files" => "Ištrinti failai" ); diff --git a/apps/files_trashbin/l10n/lv.php b/apps/files_trashbin/l10n/lv.php index ca833b2420883c15dd69073f6c932344551edb71..5c04a0c97d15948553276bc99a989c620b90e500 100644 --- a/apps/files_trashbin/l10n/lv.php +++ b/apps/files_trashbin/l10n/lv.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Nevarēja pilnībā izdzēst %s", "Couldn't restore %s" => "Nevarēja atjaunot %s", -"perform restore operation" => "veikt atjaunošanu", "Error" => "Kļūda", -"delete file permanently" => "dzēst datni pavisam", -"Delete permanently" => "Dzēst pavisam", -"Name" => "Nosaukums", -"Deleted" => "Dzēsts", -"_%n folder_::_%n folders_" => array("Nekas, %n mapes","%n mape","%n mapes"), -"_%n file_::_%n files_" => array("Neviens! %n faaili","%n fails","%n faili"), "restored" => "atjaunots", "Nothing in here. Your trash bin is empty!" => "Šeit nekā nav. Jūsu miskaste ir tukša!", +"Name" => "Nosaukums", "Restore" => "Atjaunot", +"Deleted" => "Dzēsts", "Delete" => "Dzēst", "Deleted Files" => "Dzēstās datnes" ); diff --git a/apps/files_trashbin/l10n/mk.php b/apps/files_trashbin/l10n/mk.php index 965518dbc86e043c42cb8c7ac0246a9eb9365f54..06a9dcfb2418cd7ead07aec36e53947698acc211 100644 --- a/apps/files_trashbin/l10n/mk.php +++ b/apps/files_trashbin/l10n/mk.php @@ -1,9 +1,14 @@ "Не можеше трајно да се избрише %s", +"Couldn't restore %s" => "Не можеше да се поврати %s", "Error" => "Грешка", +"restored" => "повратени", +"Nothing in here. Your trash bin is empty!" => "Тука нема ништо. Вашата корпа за отпадоци е празна!", "Name" => "Име", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("",""), -"Delete" => "Избриши" +"Restore" => "Поврати", +"Deleted" => "Избришан", +"Delete" => "Избриши", +"Deleted Files" => "Избришани датотеки" ); $PLURAL_FORMS = "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"; diff --git a/apps/files_trashbin/l10n/ms_MY.php b/apps/files_trashbin/l10n/ms_MY.php index 1b5ca07c70cff20792d903193d4cf04b1fa6b19f..e772131391820353ed43f45aaca8b612be17a2de 100644 --- a/apps/files_trashbin/l10n/ms_MY.php +++ b/apps/files_trashbin/l10n/ms_MY.php @@ -1,9 +1,14 @@ "Tidak dapat menghapuskan %s secara kekal", +"Couldn't restore %s" => "Tidak dapat memulihkan %s", "Error" => "Ralat", +"restored" => "dipulihkan", +"Nothing in here. Your trash bin is empty!" => "Tiada apa disini. Tong sampah anda kosong!", "Name" => "Nama", -"_%n folder_::_%n folders_" => array(""), -"_%n file_::_%n files_" => array(""), -"Delete" => "Padam" +"Restore" => "Pulihkan", +"Deleted" => "Dihapuskan", +"Delete" => "Padam", +"Deleted Files" => "Fail Dihapus" ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files_trashbin/l10n/nb_NO.php b/apps/files_trashbin/l10n/nb_NO.php index 8eb3bc1846fbd746fad12313e32ddd32beeba87c..eb917e3dde6af699b68713ab3b74b879bd0ac505 100644 --- a/apps/files_trashbin/l10n/nb_NO.php +++ b/apps/files_trashbin/l10n/nb_NO.php @@ -2,16 +2,11 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Kunne ikke slette %s fullstendig", "Couldn't restore %s" => "Kunne ikke gjenopprette %s", -"perform restore operation" => "utfør gjenopprettings operasjon", "Error" => "Feil", -"delete file permanently" => "slett filer permanent", -"Delete permanently" => "Slett permanent", -"Name" => "Navn", -"Deleted" => "Slettet", -"_%n folder_::_%n folders_" => array("","%n mapper"), -"_%n file_::_%n files_" => array("","%n filer"), "Nothing in here. Your trash bin is empty!" => "Ingenting her. Søppelkassen din er tom!", +"Name" => "Navn", "Restore" => "Gjenopprett", +"Deleted" => "Slettet", "Delete" => "Slett", "Deleted Files" => "Slettet filer" ); diff --git a/apps/files_trashbin/l10n/nl.php b/apps/files_trashbin/l10n/nl.php index b3ae57da56337ddb8bfdf35f140539533b7b6a7e..37a8ca654097a7b9164f62a683e4f93f55282a81 100644 --- a/apps/files_trashbin/l10n/nl.php +++ b/apps/files_trashbin/l10n/nl.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Kon %s niet permanent verwijderen", "Couldn't restore %s" => "Kon %s niet herstellen", -"perform restore operation" => "uitvoeren restore operatie", "Error" => "Fout", -"delete file permanently" => "verwijder bestanden definitief", -"Delete permanently" => "Verwijder definitief", -"Name" => "Naam", -"Deleted" => "Verwijderd", -"_%n folder_::_%n folders_" => array("%n map","%n mappen"), -"_%n file_::_%n files_" => array("%n bestand","%n bestanden"), "restored" => "hersteld", "Nothing in here. Your trash bin is empty!" => "Niets te vinden. Uw prullenbak is leeg!", +"Name" => "Naam", "Restore" => "Herstellen", +"Deleted" => "Verwijderd", "Delete" => "Verwijder", "Deleted Files" => "Verwijderde bestanden" ); diff --git a/apps/files_trashbin/l10n/nn_NO.php b/apps/files_trashbin/l10n/nn_NO.php index 73fe48211c293719e167c1c4c0f7722cfd0cc735..39e2d5cda91a2535cb0464a199b684b142e2411f 100644 --- a/apps/files_trashbin/l10n/nn_NO.php +++ b/apps/files_trashbin/l10n/nn_NO.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Klarte ikkje sletta %s for godt", "Couldn't restore %s" => "Klarte ikkje gjenoppretta %s", -"perform restore operation" => "utfør gjenoppretting", "Error" => "Feil", -"delete file permanently" => "slett fila for godt", -"Delete permanently" => "Slett for godt", -"Name" => "Namn", -"Deleted" => "Sletta", -"_%n folder_::_%n folders_" => array("%n mappe","%n mapper"), -"_%n file_::_%n files_" => array("%n fil","%n filer"), "restored" => "gjenoppretta", "Nothing in here. Your trash bin is empty!" => "Ingenting her. Papirkorga di er tom!", +"Name" => "Namn", "Restore" => "Gjenopprett", +"Deleted" => "Sletta", "Delete" => "Slett", "Deleted Files" => "Sletta filer" ); diff --git a/apps/files_trashbin/l10n/oc.php b/apps/files_trashbin/l10n/oc.php index a62902c3b7e89ca6bc1d54f4a4c3d798d7bfc997..b472683f08d43f63e59e2fd5102af364bee5bf65 100644 --- a/apps/files_trashbin/l10n/oc.php +++ b/apps/files_trashbin/l10n/oc.php @@ -2,8 +2,6 @@ $TRANSLATIONS = array( "Error" => "Error", "Name" => "Nom", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("",""), "Delete" => "Escafa" ); $PLURAL_FORMS = "nplurals=2; plural=(n > 1);"; diff --git a/apps/files_trashbin/l10n/pa.php b/apps/files_trashbin/l10n/pa.php index e53707fd7077c2fdcada3484af32c770f87b841f..825a49aaea4305e771208f3e96a7bb46d2fbc403 100644 --- a/apps/files_trashbin/l10n/pa.php +++ b/apps/files_trashbin/l10n/pa.php @@ -1,8 +1,6 @@ "ਗਲਤੀ", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("",""), "Delete" => "ਹਟਾਓ" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/pl.php b/apps/files_trashbin/l10n/pl.php index c838a6b956c2e583964dcc186fc9d7ebaac6509b..961b77278241eebd23f0ac2042542a9ffe31e79c 100644 --- a/apps/files_trashbin/l10n/pl.php +++ b/apps/files_trashbin/l10n/pl.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Nie można trwale usunąć %s", "Couldn't restore %s" => "Nie można przywrócić %s", -"perform restore operation" => "wykonywanie operacji przywracania", "Error" => "Błąd", -"delete file permanently" => "trwale usuń plik", -"Delete permanently" => "Trwale usuń", -"Name" => "Nazwa", -"Deleted" => "Usunięte", -"_%n folder_::_%n folders_" => array("","","%n katalogów"), -"_%n file_::_%n files_" => array("","","%n plików"), "restored" => "przywrócony", "Nothing in here. Your trash bin is empty!" => "Nic tu nie ma. Twój kosz jest pusty!", +"Name" => "Nazwa", "Restore" => "Przywróć", +"Deleted" => "Usunięte", "Delete" => "Usuń", "Deleted Files" => "Usunięte pliki" ); diff --git a/apps/files_trashbin/l10n/pt_BR.php b/apps/files_trashbin/l10n/pt_BR.php index e0e8c8faec6b7f87f0e62a6e3557474514fac548..c2100efe96e2d955cc9888b8f006d78f3bb12a4a 100644 --- a/apps/files_trashbin/l10n/pt_BR.php +++ b/apps/files_trashbin/l10n/pt_BR.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "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", "Error" => "Erro", -"delete file permanently" => "excluir arquivo permanentemente", -"Delete permanently" => "Excluir permanentemente", -"Name" => "Nome", -"Deleted" => "Excluído", -"_%n folder_::_%n folders_" => array("","%n pastas"), -"_%n file_::_%n files_" => array("%n arquivo","%n arquivos"), "restored" => "restaurado", "Nothing in here. Your trash bin is empty!" => "Nada aqui. Sua lixeira está vazia!", +"Name" => "Nome", "Restore" => "Restaurar", +"Deleted" => "Excluído", "Delete" => "Excluir", "Deleted Files" => "Arquivos Apagados" ); diff --git a/apps/files_trashbin/l10n/pt_PT.php b/apps/files_trashbin/l10n/pt_PT.php index 9dccc773cb1adfcb222cb46cab541f9dc7d3e9b4..89e84a84d283b9c441d6d0862e3e6309c318c8f1 100644 --- a/apps/files_trashbin/l10n/pt_PT.php +++ b/apps/files_trashbin/l10n/pt_PT.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Não foi possível eliminar %s de forma permanente", "Couldn't restore %s" => "Não foi possível restaurar %s", -"perform restore operation" => "executar a operação de restauro", "Error" => "Erro", -"delete file permanently" => "Eliminar permanentemente o(s) ficheiro(s)", -"Delete permanently" => "Eliminar permanentemente", -"Name" => "Nome", -"Deleted" => "Apagado", -"_%n folder_::_%n folders_" => array("%n pasta","%n pastas"), -"_%n file_::_%n files_" => array("%n ficheiro","%n ficheiros"), "restored" => "Restaurado", "Nothing in here. Your trash bin is empty!" => "Não hà ficheiros. O lixo está vazio!", +"Name" => "Nome", "Restore" => "Restaurar", +"Deleted" => "Apagado", "Delete" => "Eliminar", "Deleted Files" => "Ficheiros Apagados" ); diff --git a/apps/files_trashbin/l10n/ro.php b/apps/files_trashbin/l10n/ro.php index 12377bb065249cf371c38a6e7730baf988541877..f285dcc164ed0a990155a1ba01f7f11ed2bbd5f3 100644 --- a/apps/files_trashbin/l10n/ro.php +++ b/apps/files_trashbin/l10n/ro.php @@ -1,10 +1,7 @@ "Eroare", -"Delete permanently" => "Stergere permanenta", "Name" => "Nume", -"_%n folder_::_%n folders_" => array("","","%n directoare"), -"_%n file_::_%n files_" => array("","","%n fișiere"), "Delete" => "Șterge" ); $PLURAL_FORMS = "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"; diff --git a/apps/files_trashbin/l10n/ru.php b/apps/files_trashbin/l10n/ru.php index 5f52263a1185a613625b20d4b6e8a2c90386ce2c..06a4f864c6753f5c7216cde64061c0dd01f45703 100644 --- a/apps/files_trashbin/l10n/ru.php +++ b/apps/files_trashbin/l10n/ru.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "%s не может быть удалён навсегда", "Couldn't restore %s" => "%s не может быть восстановлен", -"perform restore operation" => "выполнить операцию восстановления", "Error" => "Ошибка", -"delete file permanently" => "удалить файл навсегда", -"Delete permanently" => "Удалено навсегда", -"Name" => "Имя", -"Deleted" => "Удалён", -"_%n folder_::_%n folders_" => array("","","%n папок"), -"_%n file_::_%n files_" => array("","","%n файлов"), "restored" => "восстановлен", "Nothing in here. Your trash bin is empty!" => "Здесь ничего нет. Ваша корзина пуста!", +"Name" => "Имя", "Restore" => "Восстановить", +"Deleted" => "Удалён", "Delete" => "Удалить", "Deleted Files" => "Удаленные файлы" ); diff --git a/apps/files_trashbin/l10n/si_LK.php b/apps/files_trashbin/l10n/si_LK.php index 6dad84437cf37981ac08e7593a85c60e3a1d7739..87e928989e40e077720a9364452824d6f63dd293 100644 --- a/apps/files_trashbin/l10n/si_LK.php +++ b/apps/files_trashbin/l10n/si_LK.php @@ -2,8 +2,6 @@ $TRANSLATIONS = array( "Error" => "දෝෂයක්", "Name" => "නම", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("",""), "Delete" => "මකා දමන්න" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/sk.php b/apps/files_trashbin/l10n/sk.php index 94aaf9b3a94937649bf432d87449003038f80c7d..3129cf5c411c867008748908c2c8c614f32d5a4c 100644 --- a/apps/files_trashbin/l10n/sk.php +++ b/apps/files_trashbin/l10n/sk.php @@ -1,6 +1,5 @@ array("","",""), -"_%n file_::_%n files_" => array("","","") +"Delete" => "Odstrániť" ); $PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"; diff --git a/apps/files_trashbin/l10n/sk_SK.php b/apps/files_trashbin/l10n/sk_SK.php index 50fb58a44e267275c800dba706b35d3a3b7e3626..b23383c1214f928e185e998f6997478358b56093 100644 --- a/apps/files_trashbin/l10n/sk_SK.php +++ b/apps/files_trashbin/l10n/sk_SK.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Nemožno zmazať %s navždy", "Couldn't restore %s" => "Nemožno obnoviť %s", -"perform restore operation" => "vykonať obnovu", "Error" => "Chyba", -"delete file permanently" => "trvalo zmazať súbor", -"Delete permanently" => "Zmazať trvalo", -"Name" => "Názov", -"Deleted" => "Zmazané", -"_%n folder_::_%n folders_" => array("%n priečinok","%n priečinky","%n priečinkov"), -"_%n file_::_%n files_" => array("%n súbor","%n súbory","%n súborov"), "restored" => "obnovené", "Nothing in here. Your trash bin is empty!" => "Žiadny obsah. Kôš je prázdny!", +"Name" => "Názov", "Restore" => "Obnoviť", +"Deleted" => "Zmazané", "Delete" => "Zmazať", "Deleted Files" => "Zmazané súbory" ); diff --git a/apps/files_trashbin/l10n/sl.php b/apps/files_trashbin/l10n/sl.php index eb2d42a18ff4d489d722c06fb06f630c10e505ab..9f164ae709c6507b181270225104faa5020df730 100644 --- a/apps/files_trashbin/l10n/sl.php +++ b/apps/files_trashbin/l10n/sl.php @@ -1,17 +1,13 @@ "Datoteke %s ni mogoče dokončno izbrisati.", +"Couldn't delete %s permanently" => "Datoteke %s ni mogoče trajno izbrisati.", "Couldn't restore %s" => "Ni mogoče obnoviti %s", -"perform restore operation" => "izvedi opravilo obnavljanja", "Error" => "Napaka", -"delete file permanently" => "dokončno izbriši datoteko", -"Delete permanently" => "Izbriši dokončno", -"Name" => "Ime", -"Deleted" => "Izbrisano", -"_%n folder_::_%n folders_" => array("","","",""), -"_%n file_::_%n files_" => array("","","",""), +"restored" => "obnovljeno", "Nothing in here. Your trash bin is empty!" => "Mapa smeti je prazna.", +"Name" => "Ime", "Restore" => "Obnovi", +"Deleted" => "Izbrisano", "Delete" => "Izbriši", "Deleted Files" => "Izbrisane datoteke" ); diff --git a/apps/files_trashbin/l10n/sq.php b/apps/files_trashbin/l10n/sq.php index 50ca7d901b598f10dd6502c22e4e24f955d01f97..63957080f375a669f617c1266f6265eba79e14fb 100644 --- a/apps/files_trashbin/l10n/sq.php +++ b/apps/files_trashbin/l10n/sq.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Nuk munda ta eliminoj përfundimisht %s", "Couldn't restore %s" => "Nuk munda ta rivendos %s", -"perform restore operation" => "ekzekuto operacionin e rivendosjes", "Error" => "Veprim i gabuar", -"delete file permanently" => "eliminoje përfundimisht skedarin", -"Delete permanently" => "Elimino përfundimisht", -"Name" => "Emri", -"Deleted" => "Eliminuar", -"_%n folder_::_%n folders_" => array("%n dosje","%n dosje"), -"_%n file_::_%n files_" => array("%n skedar","%n skedarë"), "restored" => "rivendosur", "Nothing in here. Your trash bin is empty!" => "Këtu nuk ka asgjë. Koshi juaj është bosh!", +"Name" => "Emri", "Restore" => "Rivendos", +"Deleted" => "Eliminuar", "Delete" => "Elimino", "Deleted Files" => "Skedarë të eliminuar" ); diff --git a/apps/files_trashbin/l10n/sr.php b/apps/files_trashbin/l10n/sr.php index 7311e759f989ca7747c0a47533d6011c4a2efa82..c893dba118b825efe88acff8e36da639c78eaf3f 100644 --- a/apps/files_trashbin/l10n/sr.php +++ b/apps/files_trashbin/l10n/sr.php @@ -1,14 +1,10 @@ "врати у претходно стање", "Error" => "Грешка", -"Delete permanently" => "Обриши за стално", -"Name" => "Име", -"Deleted" => "Обрисано", -"_%n folder_::_%n folders_" => array("","",""), -"_%n file_::_%n files_" => array("","",""), "Nothing in here. Your trash bin is empty!" => "Овде нема ништа. Корпа за отпатке је празна.", +"Name" => "Име", "Restore" => "Врати", +"Deleted" => "Обрисано", "Delete" => "Обриши" ); $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);"; diff --git a/apps/files_trashbin/l10n/sr@latin.php b/apps/files_trashbin/l10n/sr@latin.php index fa30afcf4bf53d8ca8e5c79382df29212513d315..9f18ac8be7d547f0440c72a28eb15ffcf33840e9 100644 --- a/apps/files_trashbin/l10n/sr@latin.php +++ b/apps/files_trashbin/l10n/sr@latin.php @@ -2,8 +2,6 @@ $TRANSLATIONS = array( "Error" => "Greška", "Name" => "Ime", -"_%n folder_::_%n folders_" => array("","",""), -"_%n file_::_%n files_" => array("","",""), "Delete" => "Obriši" ); $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);"; diff --git a/apps/files_trashbin/l10n/sv.php b/apps/files_trashbin/l10n/sv.php index 47a52f25736459b9078bad87064b56b85d6f9771..21d4d15e9ccbf23dd9a4e751eafec90bd43b1d9d 100644 --- a/apps/files_trashbin/l10n/sv.php +++ b/apps/files_trashbin/l10n/sv.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Kunde inte radera %s permanent", "Couldn't restore %s" => "Kunde inte återställa %s", -"perform restore operation" => "utför återställning", "Error" => "Fel", -"delete file permanently" => "radera filen permanent", -"Delete permanently" => "Radera permanent", -"Name" => "Namn", -"Deleted" => "Raderad", -"_%n folder_::_%n folders_" => array("%n mapp","%n mappar"), -"_%n file_::_%n files_" => array("%n fil","%n filer"), "restored" => "återställd", "Nothing in here. Your trash bin is empty!" => "Ingenting här. Din papperskorg är tom!", +"Name" => "Namn", "Restore" => "Återskapa", +"Deleted" => "Raderad", "Delete" => "Radera", "Deleted Files" => "Raderade filer" ); diff --git a/apps/files_trashbin/l10n/ta_LK.php b/apps/files_trashbin/l10n/ta_LK.php index ed93b459c7db36046316ae7af68f8c9cdd60a7fc..79349919b52eff9277d776bade1f97fc3ca38280 100644 --- a/apps/files_trashbin/l10n/ta_LK.php +++ b/apps/files_trashbin/l10n/ta_LK.php @@ -2,8 +2,6 @@ $TRANSLATIONS = array( "Error" => "வழு", "Name" => "பெயர்", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("",""), "Delete" => "நீக்குக" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/te.php b/apps/files_trashbin/l10n/te.php index 0d803a8e648535a642a395e14e6ea56dee5edc6f..01262b78232920852f3d72ec69257f9d2274155f 100644 --- a/apps/files_trashbin/l10n/te.php +++ b/apps/files_trashbin/l10n/te.php @@ -1,10 +1,7 @@ "పొరపాటు", -"Delete permanently" => "శాశ్వతంగా తొలగించు", "Name" => "పేరు", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("",""), "Delete" => "తొలగించు" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/th_TH.php b/apps/files_trashbin/l10n/th_TH.php index 31caa11aac303bc0226b360145f37404b31858e7..65fd081a952e2226dc8d72966acd1f47cb1b8a11 100644 --- a/apps/files_trashbin/l10n/th_TH.php +++ b/apps/files_trashbin/l10n/th_TH.php @@ -1,13 +1,10 @@ "ดำเนินการคืนค่า", "Error" => "ข้อผิดพลาด", -"Name" => "ชื่อ", -"Deleted" => "ลบแล้ว", -"_%n folder_::_%n folders_" => array(""), -"_%n file_::_%n files_" => array(""), "Nothing in here. Your trash bin is empty!" => "ไม่มีอะไรอยู่ในนี้ ถังขยะของคุณยังว่างอยู่", +"Name" => "ชื่อ", "Restore" => "คืนค่า", +"Deleted" => "ลบแล้ว", "Delete" => "ลบ", "Deleted Files" => "ไฟล์ที่ลบทิ้ง" ); diff --git a/apps/files_trashbin/l10n/tr.php b/apps/files_trashbin/l10n/tr.php index f25b179bc1efbcbc47cb3da9e86f6c77663e64c2..00a3b4d32a54d484a646f456093ed3a89b8eefe3 100644 --- a/apps/files_trashbin/l10n/tr.php +++ b/apps/files_trashbin/l10n/tr.php @@ -1,18 +1,13 @@ "%s Kalıcı olarak silinemedi", -"Couldn't restore %s" => "%s Geri yüklenemedi", -"perform restore operation" => "Geri yükleme işlemini gerçekleştir", +"Couldn't delete %s permanently" => "%s alıcı olarak silinemedi", +"Couldn't restore %s" => "%s eri yüklenemedi", "Error" => "Hata", -"delete file permanently" => "Dosyayı kalıcı olarak sil", -"Delete permanently" => "Kalıcı olarak sil", -"Name" => "İsim", -"Deleted" => "Silindi", -"_%n folder_::_%n folders_" => array("","%n dizin"), -"_%n file_::_%n files_" => array("","%n dosya"), "restored" => "geri yüklendi", -"Nothing in here. Your trash bin is empty!" => "Burası boş. Çöp kutun tamamen boş.", +"Nothing in here. Your trash bin is empty!" => "Burada hiçbir şey yok. Çöp kutunuz tamamen boş!", +"Name" => "İsim", "Restore" => "Geri yükle", +"Deleted" => "Silindi", "Delete" => "Sil", "Deleted Files" => "Silinen Dosyalar" ); diff --git a/apps/files_trashbin/l10n/ug.php b/apps/files_trashbin/l10n/ug.php index ad983aee18b7cc425e530b0e0466355a18b9adfb..54c040c88a7dd935b57e52f5ec4042240bb78374 100644 --- a/apps/files_trashbin/l10n/ug.php +++ b/apps/files_trashbin/l10n/ug.php @@ -1,12 +1,9 @@ "خاتالىق", -"Delete permanently" => "مەڭگۈلۈك ئۆچۈر", +"Nothing in here. Your trash bin is empty!" => "بۇ جايدا ھېچنېمە يوق. Your trash bin is empty!", "Name" => "ئاتى", "Deleted" => "ئۆچۈرۈلدى", -"_%n folder_::_%n folders_" => array(""), -"_%n file_::_%n files_" => array(""), -"Nothing in here. Your trash bin is empty!" => "بۇ جايدا ھېچنېمە يوق. Your trash bin is empty!", "Delete" => "ئۆچۈر" ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files_trashbin/l10n/uk.php b/apps/files_trashbin/l10n/uk.php index aa4b65950323fffba703987029b83c41ccf884d5..c54d45aaa824f78c1478abb410e219c3313d8e9a 100644 --- a/apps/files_trashbin/l10n/uk.php +++ b/apps/files_trashbin/l10n/uk.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "Неможливо видалити %s назавжди", "Couldn't restore %s" => "Неможливо відновити %s", -"perform restore operation" => "виконати операцію відновлення", "Error" => "Помилка", -"delete file permanently" => "видалити файл назавжди", -"Delete permanently" => "Видалити назавжди", -"Name" => "Ім'я", -"Deleted" => "Видалено", -"_%n folder_::_%n folders_" => array("","",""), -"_%n file_::_%n files_" => array("","",""), "restored" => "відновлено", "Nothing in here. Your trash bin is empty!" => "Нічого немає. Ваший кошик для сміття пустий!", +"Name" => "Ім'я", "Restore" => "Відновити", +"Deleted" => "Видалено", "Delete" => "Видалити", "Deleted Files" => "Видалено Файлів" ); diff --git a/apps/files_trashbin/l10n/ur_PK.php b/apps/files_trashbin/l10n/ur_PK.php index f6c6a3da3c84b3f5c08590b20530b8c2e84a5d01..49c82f53872c84830aff3465f8f713e57363bded 100644 --- a/apps/files_trashbin/l10n/ur_PK.php +++ b/apps/files_trashbin/l10n/ur_PK.php @@ -1,7 +1,5 @@ "ایرر", -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("","") +"Error" => "ایرر" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/vi.php b/apps/files_trashbin/l10n/vi.php index 072d799fa6819d0cedd041904f80463b338f9b83..c5e899392bfb2f2d40d045fd7d38b437cf313db4 100644 --- a/apps/files_trashbin/l10n/vi.php +++ b/apps/files_trashbin/l10n/vi.php @@ -2,16 +2,11 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "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", "Error" => "Lỗi", -"delete file permanently" => "xóa file vĩnh viễn", -"Delete permanently" => "Xóa vĩnh vễn", -"Name" => "Tên", -"Deleted" => "Đã xóa", -"_%n folder_::_%n folders_" => array(""), -"_%n file_::_%n files_" => array(""), "Nothing in here. Your trash bin is empty!" => "Không có gì ở đây. Thùng rác của bạn rỗng!", +"Name" => "Tên", "Restore" => "Khôi phục", +"Deleted" => "Đã xóa", "Delete" => "Xóa", "Deleted Files" => "File đã xóa" ); diff --git a/apps/files_trashbin/l10n/zh_CN.php b/apps/files_trashbin/l10n/zh_CN.php index dc2d5b4c00e8d1960d9dc6ec5132811ea3a15864..24d9002adcb224772a18fb0be594d69d4c46c53f 100644 --- a/apps/files_trashbin/l10n/zh_CN.php +++ b/apps/files_trashbin/l10n/zh_CN.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "无法彻底删除文件%s", "Couldn't restore %s" => "无法恢复%s", -"perform restore operation" => "执行恢复操作", "Error" => "错误", -"delete file permanently" => "彻底删除文件", -"Delete permanently" => "永久删除", -"Name" => "名称", -"Deleted" => "已删除", -"_%n folder_::_%n folders_" => array("%n 文件夹"), -"_%n file_::_%n files_" => array("%n个文件"), "restored" => "已恢复", "Nothing in here. Your trash bin is empty!" => "这里没有东西. 你的回收站是空的!", +"Name" => "名称", "Restore" => "恢复", +"Deleted" => "已删除", "Delete" => "删除", "Deleted Files" => "已删除文件" ); diff --git a/apps/files_trashbin/l10n/zh_HK.php b/apps/files_trashbin/l10n/zh_HK.php index 3f0d663baeb10ee308c1ca65edae8e5bbd1a63c6..877912e9c4258c2cad4b24b1b4221fef8f383738 100644 --- a/apps/files_trashbin/l10n/zh_HK.php +++ b/apps/files_trashbin/l10n/zh_HK.php @@ -2,8 +2,6 @@ $TRANSLATIONS = array( "Error" => "錯誤", "Name" => "名稱", -"_%n folder_::_%n folders_" => array(""), -"_%n file_::_%n files_" => array(""), "Delete" => "刪除" ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files_trashbin/l10n/zh_TW.php b/apps/files_trashbin/l10n/zh_TW.php index bfc2fc659de35b74a49a5db6452b28f6004a24ba..1f05a2687b6a33851d5272212d1c0f8876fef4b3 100644 --- a/apps/files_trashbin/l10n/zh_TW.php +++ b/apps/files_trashbin/l10n/zh_TW.php @@ -2,17 +2,12 @@ $TRANSLATIONS = array( "Couldn't delete %s permanently" => "無法永久刪除 %s", "Couldn't restore %s" => "無法還原 %s", -"perform restore operation" => "進行還原動作", "Error" => "錯誤", -"delete file permanently" => "永久刪除檔案", -"Delete permanently" => "永久刪除", -"Name" => "名稱", -"Deleted" => "已刪除", -"_%n folder_::_%n folders_" => array("%n 個資料夾"), -"_%n file_::_%n files_" => array("%n 個檔案"), "restored" => "已還原", "Nothing in here. Your trash bin is empty!" => "您的回收桶是空的!", +"Name" => "名稱", "Restore" => "還原", +"Deleted" => "已刪除", "Delete" => "刪除", "Deleted Files" => "已刪除的檔案" ); diff --git a/apps/files_trashbin/lib/helper.php b/apps/files_trashbin/lib/helper.php index 4f442ee930471cf39023059c071a79cd53376bf8..c454b35a5f2f231bb216836f33be665481ebe549 100644 --- a/apps/files_trashbin/lib/helper.php +++ b/apps/files_trashbin/lib/helper.php @@ -44,8 +44,10 @@ class Helper } $files = array(); + $id = 0; foreach ($result as $r) { $i = array(); + $i['id'] = $id++; $i['name'] = $r['id']; $i['date'] = \OCP\Util::formatDate($r['timestamp']); $i['timestamp'] = $r['timestamp']; diff --git a/apps/files_trashbin/lib/trashbin.php b/apps/files_trashbin/lib/trashbin.php index c79afdc0c2ec91c11a3bd1f968335d0607d77103..7544980e0719ccc39bb2b5aa14178b64c94d8c1d 100644 --- a/apps/files_trashbin/lib/trashbin.php +++ b/apps/files_trashbin/lib/trashbin.php @@ -41,13 +41,7 @@ class Trashbin { return array($uid, $filename); } - /** - * move file to the trash bin - * - * @param $file_path path to the deleted file/directory relative to the files root directory - */ - public static function move2trash($file_path) { - $user = \OCP\User::getUser(); + private static function setUpTrash($user) { $view = new \OC\Files\View('/' . $user); if (!$view->is_dir('files_trashbin')) { $view->mkdir('files_trashbin'); @@ -64,6 +58,48 @@ class Trashbin { if (!$view->is_dir('files_trashbin/share-keys')) { $view->mkdir('files_trashbin/share-keys'); } + } + + + private static function copyFilesToOwner($sourcePath, $owner, $ownerPath, $timestamp, $type, $mime) { + self::setUpTrash($owner); + + $ownerFilename = basename($ownerPath); + $ownerLocation = dirname($ownerPath); + + $sourceFilename = basename($sourcePath); + + $view = new \OC\Files\View('/'); + + $source = \OCP\User::getUser().'/files_trashbin/files/' . $sourceFilename . '.d' . $timestamp; + $target = $owner.'/files_trashbin/files/' . $ownerFilename . '.d' . $timestamp; + self::copy_recursive($source, $target, $view); + + + if ($view->file_exists($target)) { + $query = \OC_DB::prepare("INSERT INTO `*PREFIX*files_trash` (`id`,`timestamp`,`location`,`type`,`mime`,`user`) VALUES (?,?,?,?,?,?)"); + $result = $query->execute(array($ownerFilename, $timestamp, $ownerLocation, $type, $mime, $owner)); + if (!$result) { // if file couldn't be added to the database than also don't store it in the trash bin. + $view->deleteAll($owner.'/files_trashbin/files/' . $ownerFilename . '.d' . $timestamp); + \OC_Log::write('files_trashbin', 'trash bin database couldn\'t be updated for the files owner', \OC_log::ERROR); + return; + } + } + } + + + /** + * move file to the trash bin + * + * @param $file_path path to the deleted file/directory relative to the files root directory + */ + public static function move2trash($file_path) { + $user = \OCP\User::getUser(); + $size = 0; + list($owner, $ownerPath) = self::getUidAndFilename($file_path); + self::setUpTrash($user); + + $view = new \OC\Files\View('/' . $user); $path_parts = pathinfo($file_path); $filename = $path_parts['basename']; @@ -77,19 +113,20 @@ class Trashbin { $type = 'file'; } - $trashbinSize = self::getTrashbinSize($user); - if ($trashbinSize === false || $trashbinSize < 0) { - $trashbinSize = self::calculateSize(new \OC\Files\View('/' . $user . '/files_trashbin')); + $userTrashSize = self::getTrashbinSize($user); + if ($userTrashSize === false || $userTrashSize < 0) { + $userTrashSize = self::calculateSize(new \OC\Files\View('/' . $user . '/files_trashbin')); } // disable proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; - $sizeOfAddedFiles = self::copy_recursive($file_path, 'files_trashbin/files/' . $filename . '.d' . $timestamp, $view); + $trashPath = '/files_trashbin/files/' . $filename . '.d' . $timestamp; + $sizeOfAddedFiles = self::copy_recursive('/files/'.$file_path, $trashPath, $view); \OC_FileProxy::$enabled = $proxyStatus; if ($view->file_exists('files_trashbin/files/' . $filename . '.d' . $timestamp)) { - $trashbinSize += $sizeOfAddedFiles; + $size = $sizeOfAddedFiles; $query = \OC_DB::prepare("INSERT INTO `*PREFIX*files_trash` (`id`,`timestamp`,`location`,`type`,`mime`,`user`) VALUES (?,?,?,?,?,?)"); $result = $query->execute(array($filename, $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. @@ -100,15 +137,31 @@ class Trashbin { \OCP\Util::emitHook('\OCA\Files_Trashbin\Trashbin', 'post_moveToTrash', array('filePath' => \OC\Files\Filesystem::normalizePath($file_path), 'trashPath' => \OC\Files\Filesystem::normalizePath($filename . '.d' . $timestamp))); - $trashbinSize += self::retainVersions($file_path, $filename, $timestamp); - $trashbinSize += self::retainEncryptionKeys($file_path, $filename, $timestamp); + $size += self::retainVersions($file_path, $filename, $timestamp); + $size += self::retainEncryptionKeys($file_path, $filename, $timestamp); + + // if owner !== user we need to also add a copy to the owners trash + if ($user !== $owner) { + self::copyFilesToOwner($file_path, $owner, $ownerPath, $timestamp, $type, $mime); + } } else { \OC_Log::write('files_trashbin', 'Couldn\'t move ' . $file_path . ' to the trash bin', \OC_log::ERROR); } - $trashbinSize -= self::expire($trashbinSize); + $userTrashSize += $size; + $userTrashSize -= self::expire($userTrashSize, $user); + self::setTrashbinSize($user, $userTrashSize); - self::setTrashbinSize($user, $trashbinSize); + // if owner !== user we also need to update the owners trash size + if($owner !== $user) { + $ownerTrashSize = self::getTrashbinSize($owner); + if ($ownerTrashSize === false || $ownerTrashSize < 0) { + $ownerTrashSize = self::calculateSize(new \OC\Files\View('/' . $owner . '/files_trashbin')); + } + $ownerTrashSize += $size; + $ownerTrashSize -= self::expire($ownerTrashSize, $owner); + self::setTrashbinSize($owner, $ownerTrashSize); + } } /** @@ -135,10 +188,16 @@ class Trashbin { if ($rootView->is_dir($owner . '/files_versions/' . $ownerPath)) { $size += self::calculateSize(new \OC\Files\View('/' . $owner . '/files_versions/' . $ownerPath)); + if ($owner !== $user) { + self::copy_recursive($owner . '/files_versions/' . $ownerPath, $owner . '/files_trashbin/versions/' . basename($ownerPath) . '.d' . $timestamp, $rootView); + } $rootView->rename($owner . '/files_versions/' . $ownerPath, $user . '/files_trashbin/versions/' . $filename . '.d' . $timestamp); } else if ($versions = \OCA\Files_Versions\Storage::getVersions($owner, $ownerPath)) { foreach ($versions as $v) { $size += $rootView->filesize($owner . '/files_versions' . $v['path'] . '.v' . $v['version']); + if ($owner !== $user) { + $rootView->copy($owner . '/files_versions' . $v['path'] . '.v' . $v['version'], $owner . '/files_trashbin/versions/' . $v['name'] . '.v' . $v['version'] . '.d' . $timestamp); + } $rootView->rename($owner . '/files_versions' . $v['path'] . '.v' . $v['version'], $user . '/files_trashbin/versions/' . $filename . '.v' . $v['version'] . '.d' . $timestamp); } } @@ -187,9 +246,15 @@ class Trashbin { // move keyfiles if ($rootView->is_dir($keyfile)) { $size += self::calculateSize(new \OC\Files\View($keyfile)); + if ($owner !== $user) { + self::copy_recursive($keyfile, $owner . '/files_trashbin/keyfiles/' . basename($ownerPath) . '.d' . $timestamp, $rootView); + } $rootView->rename($keyfile, $user . '/files_trashbin/keyfiles/' . $filename . '.d' . $timestamp); } else { $size += $rootView->filesize($keyfile . '.key'); + if ($owner !== $user) { + $rootView->copy($keyfile . '.key', $owner . '/files_trashbin/keyfiles/' . basename($ownerPath) . '.key.d' . $timestamp); + } $rootView->rename($keyfile . '.key', $user . '/files_trashbin/keyfiles/' . $filename . '.key.d' . $timestamp); } } @@ -199,6 +264,9 @@ class Trashbin { if ($rootView->is_dir($sharekeys)) { $size += self::calculateSize(new \OC\Files\View($sharekeys)); + if ($owner !== $user) { + self::copy_recursive($sharekeys, $owner . '/files_trashbin/share-keys/' . basename($ownerPath) . '.d' . $timestamp, $rootView); + } $rootView->rename($sharekeys, $user . '/files_trashbin/share-keys/' . $filename . '.d' . $timestamp); } else { // get local path to share-keys @@ -211,22 +279,23 @@ class Trashbin { // get source file parts $pathinfo = pathinfo($src); - // we only want to keep the owners key so we can access the private key - $ownerShareKey = $filename . '.' . $user . '.shareKey'; + // we only want to keep the users key so we can access the private key + $userShareKey = $filename . '.' . $user . '.shareKey'; // if we found the share-key for the owner, we need to move it to files_trashbin - if ($pathinfo['basename'] == $ownerShareKey) { + if ($pathinfo['basename'] == $userShareKey) { // calculate size $size += $rootView->filesize($sharekeys . '.' . $user . '.shareKey'); // move file - $rootView->rename($sharekeys . '.' . $user . '.shareKey', $user . '/files_trashbin/share-keys/' . $ownerShareKey . '.d' . $timestamp); + $rootView->rename($sharekeys . '.' . $user . '.shareKey', $user . '/files_trashbin/share-keys/' . $userShareKey . '.d' . $timestamp); + } elseif ($owner !== $user) { + $ownerShareKey = basename($ownerPath) . '.' . $owner . '.shareKey'; + if ($pathinfo['basename'] == $ownerShareKey) { + $rootView->rename($sharekeys . '.' . $owner . '.shareKey', $owner . '/files_trashbin/share-keys/' . $ownerShareKey . '.d' . $timestamp); + } } else { - - // calculate size - $size += filesize($src); - // don't keep other share-keys unlink($src); } @@ -495,6 +564,21 @@ class Trashbin { return $size; } + /** + * @brief delete all files from the trash + */ + public static function deleteAll() { + $user = \OCP\User::getUser(); + $view = new \OC\Files\View('/' . $user); + $view->deleteAll('files_trashbin'); + self::setTrashbinSize($user, 0); + $query = \OC_DB::prepare('DELETE FROM `*PREFIX*files_trash` WHERE `user`=?'); + $query->execute(array($user)); + + return true; + } + + /** * @brief delete file from trash bin permanently * @@ -530,6 +614,7 @@ class Trashbin { $size += $view->filesize('/files_trashbin/files/' . $file); } $view->unlink('/files_trashbin/files/' . $file); + \OC_Hook::emit('\OCP\Trashbin', 'delete', array('path' => '/files_trashbin/files/' . $file)); $trashbinSize -= $size; self::setTrashbinSize($user, $trashbinSize); @@ -649,7 +734,7 @@ class Trashbin { // calculate available space for trash bin // subtract size of files and current trash bin size from quota if ($softQuota) { - $rootInfo = $view->getFileInfo('/files/'); + $rootInfo = $view->getFileInfo('/files/', false); $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 @@ -678,7 +763,7 @@ class Trashbin { $freeSpace = self::calculateFreeSpace($size); if ($freeSpace < 0) { - $newSize = $size - self::expire($size); + $newSize = $size - self::expire($size, $user); if ($newSize !== $size) { self::setTrashbinSize($user, $newSize); } @@ -687,13 +772,19 @@ class Trashbin { /** * clean up the trash bin - * @param current size of the trash bin - * @return size of expired files + * @param int $trashbinSize current size of the trash bin + * @param string $user + * @return int size of expired files */ - private static function expire($trashbinSize) { + private static function expire($trashbinSize, $user) { + + // let the admin disable auto expire + $autoExpire = \OC_Config::getValue('trashbin_auto_expire', true); + if ($autoExpire === false) { + return 0; + } $user = \OCP\User::getUser(); - $view = new \OC\Files\View('/' . $user); $availableSpace = self::calculateFreeSpace($trashbinSize); $size = 0; @@ -741,23 +832,23 @@ class Trashbin { */ private static function copy_recursive($source, $destination, $view) { $size = 0; - if ($view->is_dir('files' . $source)) { + if ($view->is_dir($source)) { $view->mkdir($destination); - $view->touch($destination, $view->filemtime('files' . $source)); - foreach (\OC_Files::getDirectoryContent($source) as $i) { + $view->touch($destination, $view->filemtime($source)); + foreach ($view->getDirectoryContent($source) as $i) { $pathDir = $source . '/' . $i['name']; - if ($view->is_dir('files' . $pathDir)) { + if ($view->is_dir($pathDir)) { $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)); + $size += $view->filesize($pathDir); + $view->copy($pathDir, $destination . '/' . $i['name']); + $view->touch($destination . '/' . $i['name'], $view->filemtime($pathDir)); } } } else { - $size += $view->filesize('files' . $source); - $view->copy('files' . $source, $destination); - $view->touch($destination, $view->filemtime('files' . $source)); + $size += $view->filesize($source); + $view->copy($source, $destination); + $view->touch($destination, $view->filemtime($source)); } return $size; } diff --git a/apps/files_trashbin/templates/index.php b/apps/files_trashbin/templates/index.php index 82ba0608834c95e6fcdc2632dd694235c90613b7..f9264d4352cca017004e6a3021f304bd5feb5dde 100644 --- a/apps/files_trashbin/templates/index.php +++ b/apps/files_trashbin/templates/index.php @@ -1,13 +1,10 @@ -
    - -
    t('Nothing in here. Your trash bin is empty!'))?>
    - +
    class="hidden">t('Nothing in here. Your trash bin is empty!'))?>
    @@ -17,7 +14,9 @@ + t( 'Deleted' )); ?> diff --git a/apps/files_trashbin/templates/part.breadcrumb.php b/apps/files_trashbin/templates/part.breadcrumb.php index 4acc298adbe3c2cdb65e59eb56148f5335e06608..fdf78c190d0bbe1ed03096dba4768b8203723645 100644 --- a/apps/files_trashbin/templates/part.breadcrumb.php +++ b/apps/files_trashbin/templates/part.breadcrumb.php @@ -3,11 +3,11 @@
    - - + > - + + + + - + - + - + - + diff --git a/apps/files_versions/ajax/getVersions.php b/apps/files_versions/ajax/getVersions.php index 4f48f71d8ca3b756e46c8066133e0b5bbb0130ca..4cc1c4288985760429695e0ecdb5cc725b15c96d 100644 --- a/apps/files_versions/ajax/getVersions.php +++ b/apps/files_versions/ajax/getVersions.php @@ -5,7 +5,8 @@ $source = $_GET['source']; $start = $_GET['start']; list ($uid, $filename) = OCA\Files_Versions\Storage::getUidAndFilename($source); $count = 5; //show the newest revisions -if( ($versions = OCA\Files_Versions\Storage::getVersions($uid, $filename)) ) { +$versions = OCA\Files_Versions\Storage::getVersions($uid, $filename, $source); +if( $versions ) { $endReached = false; if (count($versions) <= $start+$count) { diff --git a/apps/files_versions/ajax/preview.php b/apps/files_versions/ajax/preview.php new file mode 100644 index 0000000000000000000000000000000000000000..bd9b7366ab06b54523b7d5c9ceaa60e25009442a --- /dev/null +++ b/apps/files_versions/ajax/preview.php @@ -0,0 +1,45 @@ +setMimetype($mimetype); + $preview->setMaxX($maxX); + $preview->setMaxY($maxY); + $preview->setScalingUp($scalingUp); + + $preview->showPreview(); +}catch(\Exception $e) { + \OC_Response::setStatus(500); + \OC_Log::write('core', $e->getmessage(), \OC_Log::DEBUG); +} diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php index 5b1e464ba6cadc72f861d86a7ae74f5d3dadb5fb..8f2071dd7b6d35c248a26d22f6b603f4b014584e 100644 --- a/apps/files_versions/appinfo/app.php +++ b/apps/files_versions/appinfo/app.php @@ -12,6 +12,7 @@ OCP\Util::addStyle('files_versions', 'versions'); 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', 'delete', "OCA\Files_Versions\Hooks", "pre_remove_hook"); OCP\Util::connectHook('OC_Filesystem', 'rename', "OCA\Files_Versions\Hooks", "rename_hook"); //Listen to delete user signal OCP\Util::connectHook('OC_User', 'pre_deleteUser', "OCA\Files_Versions\Hooks", "deleteUser_hook"); diff --git a/apps/files_versions/appinfo/routes.php b/apps/files_versions/appinfo/routes.php index 38c288adf9d2a6ecc91970d62820b9dbb6def254..8d2abaa89e5ed80cc8a5585e41394a6774d62f9b 100644 --- a/apps/files_versions/appinfo/routes.php +++ b/apps/files_versions/appinfo/routes.php @@ -7,3 +7,8 @@ // Register with the capabilities API OC_API::register('get', '/cloud/capabilities', array('OCA\Files_Versions\Capabilities', 'getCapabilities'), 'files_versions', OC_API::USER_AUTH); + +$this->create('core_ajax_versions_preview', '/preview.png')->action( +function() { + require_once __DIR__ . '/../ajax/preview.php'; +}); diff --git a/apps/files_versions/css/versions.css b/apps/files_versions/css/versions.css index 6a9b3a95698a8cb8da9f4d3624a934c9980a39a2..16755f35a7688863f1f76adf239e686044ec7522 100644 --- a/apps/files_versions/css/versions.css +++ b/apps/files_versions/css/versions.css @@ -1,11 +1,11 @@ #dropdown.drop-versions { - width:22em; + width:320px; } #found_versions li { width: 100%; cursor: default; - height: 36px; + height: 56px; float: left; border-bottom: 1px solid rgba(100,100,100,.1); } @@ -21,6 +21,12 @@ filter: alpha(opacity=50); opacity: .5; } + +#found_versions li > a, +#found_versions li > span { + padding: 17px 7px; +} + #found_versions li > *:hover, #found_versions li > *:focus { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; @@ -33,6 +39,11 @@ padding-right: 4px; } +#found_versions img.preview { + cursor: default; + opacity: 1; +} + #found_versions .versionDate { min-width: 100px; vertical-align: text-bottom; diff --git a/apps/files_versions/download.php b/apps/files_versions/download.php index 040a662e61bf70511d7fdffa716d462d8d812a4e..2fe56d2e6383e4089729b9d53f3b4409c0ced431 100644 --- a/apps/files_versions/download.php +++ b/apps/files_versions/download.php @@ -36,12 +36,7 @@ $view = new OC\Files\View('/'); $ftype = $view->getMimeType('/'.$uid.'/files/'.$filename); header('Content-Type:'.$ftype); -if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) { - header( 'Content-Disposition: attachment; filename="' . rawurlencode( basename($filename) ) . '"' ); -} else { - header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode( basename($filename) ) - . '; filename="' . rawurlencode( basename($filename) ) . '"' ); -} +OCP\Response::setContentDispositionHeader(basename($filename), 'attachment'); OCP\Response::disableCaching(); header('Content-Length: '.$view->filesize($versionName)); diff --git a/apps/files_versions/js/versions.js b/apps/files_versions/js/versions.js index f57e931bad9aa328dd2d6c504ee86f82567e61bc..4adf14745de06c54fd495e63568ebaa89e882cc7 100644 --- a/apps/files_versions/js/versions.js +++ b/apps/files_versions/js/versions.js @@ -1,5 +1,12 @@ $(document).ready(function(){ + if ($('#isPublic').val()){ + // no versions actions in public mode + // beware of https://github.com/owncloud/core/issues/4545 + // as enabling this might hang Chrome + return; + } + if (typeof FileActions !== 'undefined') { // Add versions button to 'files/index.php' FileActions.register( @@ -14,7 +21,7 @@ $(document).ready(function(){ // Action to perform when clicked if (scanFiles.scanning){return;}//workaround to prevent additional http request block scanning feedback - var file = $('#dir').val()+'/'+filename; + var file = $('#dir').val().replace(/(?!<=\/)$|\/$/, '/' + filename); var createDropDown = true; // Check if drop down is already visible for a different file if (($('#dropdown').length > 0) ) { @@ -70,6 +77,7 @@ function goToVersionPage(url){ function createVersionsDropdown(filename, files) { var start = 0; + var fileEl; var html = '
    -
    + 0): ?> +
    t( 'Advanced' )); ?> +
    + + + 0): ?> +
    " - value="" /> + value="" />
    + + 0): ?>
    t( 'Configure the database' )); ?>
    - - - -

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

    - - - /> - - - - - - - -

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

    - - - /> - - - - - - -

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

    - - - - /> - - - - - -

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

    - + $label): ?> + +

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

    + - - /> - - - - - - -

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

    - - - - /> - + /> + +
    @@ -139,11 +103,11 @@

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

    + value="" /> @@ -151,7 +115,7 @@

    @@ -159,18 +123,19 @@

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

    + value="" />

    + -
    +
    diff --git a/core/templates/layout.base.php b/core/templates/layout.base.php index ea10c3042b592f7f192d9723be89e68493a14e6e..bae52a732344436c5cdec5b4e5efa57561a7c955 100644 --- a/core/templates/layout.base.php +++ b/core/templates/layout.base.php @@ -11,6 +11,7 @@ getTitle()); ?> + diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php index 9c9eb63382fff615bb93777b226c6570f94e9e89..6a96b17b100a03ab84693b6fe8b5b2a05c8bf247 100644 --- a/core/templates/layout.guest.php +++ b/core/templates/layout.guest.php @@ -11,6 +11,7 @@ getTitle()); ?> + diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index 71bec11d219b7bfb342a413f76b729f8a8e3095c..bc1c700402ee1bd25fbdb8a50b2a1d09015e2329 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -8,12 +8,14 @@ - <?php p(!empty($_['application'])?$_['application'].' | ':''); - p($theme->getTitle()); - p(trim($_['user_displayname']) != '' ?' ('.$_['user_displayname'].') ':'') ?> + <?php + p(!empty($_['application'])?$_['application'].' - ':''); + p($theme->getTitle()); + ?> + @@ -35,6 +37,7 @@ +
    @@ -45,15 +48,16 @@ <?php p($theme->getName()); ?> - +