diff options
Diffstat (limited to 'apps/files')
166 files changed, 4198 insertions, 1370 deletions
diff --git a/apps/files/admin.php b/apps/files/admin.php index 70f537d0db9..349c27ff742 100644 --- a/apps/files/admin.php +++ b/apps/files/admin.php @@ -42,9 +42,10 @@ if($_POST && OC_Util::isCallRegistered()) { } $htaccessWritable=is_writable(OC::$SERVERROOT.'/.htaccess'); +$userIniWritable=is_writable(OC::$SERVERROOT.'/.user.ini'); $tmpl = new OCP\Template( 'files', 'admin' ); -$tmpl->assign( 'uploadChangable', $htaccessWorking and $htaccessWritable ); +$tmpl->assign( 'uploadChangable', ($htaccessWorking and $htaccessWritable) or $userIniWritable ); $tmpl->assign( 'uploadMaxFilesize', $maxUploadFilesize); // max possible makes only sense on a 32 bit system $tmpl->assign( 'displayMaxPossibleUploadSize', PHP_INT_SIZE===4); diff --git a/apps/files/ajax/delete.php b/apps/files/ajax/delete.php index 9d4f0b0fcf5..2d02869df14 100644 --- a/apps/files/ajax/delete.php +++ b/apps/files/ajax/delete.php @@ -1,13 +1,11 @@ <?php /** * @author Arthur Schiwon <blizzz@owncloud.com> - * @author Björn Schießle <schiessle@owncloud.com> * @author Frank Karlitschek <frank@owncloud.org> * @author Jakob Sack <mail@jakobsack.de> * @author Joas Schilling <nickvergessen@owncloud.com> * @author Jörn Friedrich Dreyer <jfd@butonic.de> * @author Lukas Reschke <lukas@owncloud.com> - * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <icewind@owncloud.com> * @author Thomas Müller <thomas.mueller@tmit.eu> * @author Vincent Petry <pvince81@owncloud.com> @@ -54,10 +52,15 @@ $success = true; //Now delete foreach ($files as $file) { - if (\OC\Files\Filesystem::file_exists($dir . '/' . $file) && - !(\OC\Files\Filesystem::isDeletable($dir . '/' . $file) && - \OC\Files\Filesystem::unlink($dir . '/' . $file)) - ) { + try { + if (\OC\Files\Filesystem::file_exists($dir . '/' . $file) && + !(\OC\Files\Filesystem::isDeletable($dir . '/' . $file) && + \OC\Files\Filesystem::unlink($dir . '/' . $file)) + ) { + $filesWithError .= $file . "\n"; + $success = false; + } + } catch (\Exception $e) { $filesWithError .= $file . "\n"; $success = false; } diff --git a/apps/files/ajax/download.php b/apps/files/ajax/download.php index e67635ab853..26bab8837b4 100644 --- a/apps/files/ajax/download.php +++ b/apps/files/ajax/download.php @@ -39,4 +39,15 @@ if (!is_array($files_list)) { $files_list = array($files); } +/** + * this sets a cookie to be able to recognize the start of the download + * the content must not be longer than 32 characters and must only contain + * alphanumeric characters + */ +if(isset($_GET['downloadStartSecret']) + && !isset($_GET['downloadStartSecret'][32]) + && preg_match('!^[a-zA-Z0-9]+$!', $_GET['downloadStartSecret']) === 1) { + setcookie('ocDownloadStarted', $_GET['downloadStartSecret'], time() + 20, '/'); +} + OC_Files::get($dir, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD'); diff --git a/apps/files/ajax/getstoragestats.php b/apps/files/ajax/getstoragestats.php index e56e425c1c6..10f8704dded 100644 --- a/apps/files/ajax/getstoragestats.php +++ b/apps/files/ajax/getstoragestats.php @@ -2,7 +2,6 @@ /** * @author Jörn Friedrich Dreyer <jfd@butonic.de> * @author Lukas Reschke <lukas@owncloud.com> - * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <icewind@owncloud.com> * @author Thomas Müller <thomas.mueller@tmit.eu> * @author Vincent Petry <pvince81@owncloud.com> diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php index 8daea6ca3fe..19129e9de11 100644 --- a/apps/files/ajax/list.php +++ b/apps/files/ajax/list.php @@ -45,10 +45,32 @@ try { $sortAttribute = isset($_GET['sort']) ? (string)$_GET['sort'] : 'name'; $sortDirection = isset($_GET['sortdirection']) ? ($_GET['sortdirection'] === 'desc') : false; + $mimetypeFilters = isset($_GET['mimetypes']) ? json_decode($_GET['mimetypes']) : ''; - // make filelist + $files = []; + // Clean up duplicates from array + if (is_array($mimetypeFilters) && count($mimetypeFilters)) { + $mimetypeFilters = array_unique($mimetypeFilters); + + if (!in_array('httpd/unix-directory', $mimetypeFilters)) { + // append folder filter to be able to browse folders + $mimetypeFilters[] = 'httpd/unix-directory'; + } + + // create filelist with mimetype filter - as getFiles only supports on + // mimetype filter at once we will filter this folder for each + // mimetypeFilter + foreach ($mimetypeFilters as $mimetypeFilter) { + $files = array_merge($files, \OCA\Files\Helper::getFiles($dir, $sortAttribute, $sortDirection, $mimetypeFilter)); + } + + // sort the files accordingly + $files = \OCA\Files\Helper::sortFiles($files, $sortAttribute, $sortDirection); + } else { + // create file list without mimetype filter + $files = \OCA\Files\Helper::getFiles($dir, $sortAttribute, $sortDirection); + } - $files = \OCA\Files\Helper::getFiles($dir, $sortAttribute, $sortDirection); $files = \OCA\Files\Helper::populateTags($files); $data['directory'] = $dir; $data['files'] = \OCA\Files\Helper::formatFileInfos($files); diff --git a/apps/files/ajax/mimeicon.php b/apps/files/ajax/mimeicon.php deleted file mode 100644 index 008ad41953e..00000000000 --- a/apps/files/ajax/mimeicon.php +++ /dev/null @@ -1,27 +0,0 @@ -<?php -/** - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Lukas Reschke <lukas@owncloud.com> - * @author Robin Appelman <icewind@owncloud.com> - * - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program 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, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ -\OC::$server->getSession()->close(); - -$mime = isset($_GET['mime']) ? (string)$_GET['mime'] : ''; - -print OC_Helper::mimetypeIcon($mime); diff --git a/apps/files/ajax/move.php b/apps/files/ajax/move.php index ab02f993f82..0961636a116 100644 --- a/apps/files/ajax/move.php +++ b/apps/files/ajax/move.php @@ -5,7 +5,6 @@ * @author Georg Ehrke <georg@owncloud.com> * @author Jörn Friedrich Dreyer <jfd@butonic.de> * @author Lukas Reschke <lukas@owncloud.com> - * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <icewind@owncloud.com> * @author Vincent Petry <pvince81@owncloud.com> * diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php index b4e1e508a3f..be09b288d4b 100644 --- a/apps/files/ajax/newfile.php +++ b/apps/files/ajax/newfile.php @@ -4,7 +4,6 @@ * @author Georg Ehrke <georg@owncloud.com> * @author Jörn Friedrich Dreyer <jfd@butonic.de> * @author Lukas Reschke <lukas@owncloud.com> - * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <icewind@owncloud.com> * @author Thomas Müller <thomas.mueller@tmit.eu> * @author Vincent Petry <pvince81@owncloud.com> @@ -78,10 +77,21 @@ $templateManager = OC_Helper::getFileTemplateManager(); $mimeType = OC_Helper::getMimetypeDetector()->detectPath($target); $content = $templateManager->getTemplate($mimeType); -if($content) { - $success = \OC\Files\Filesystem::file_put_contents($target, $content); -} else { - $success = \OC\Files\Filesystem::touch($target); +try { + if($content) { + $success = \OC\Files\Filesystem::file_put_contents($target, $content); + } else { + $success = \OC\Files\Filesystem::touch($target); + } +} catch (\Exception $e) { + $result = [ + 'success' => false, + 'data' => [ + 'message' => $e->getMessage() + ] + ]; + OCP\JSON::error($result); + exit(); } if($success) { diff --git a/apps/files/ajax/newfolder.php b/apps/files/ajax/newfolder.php index 90bc9ecbb83..a2897dd437a 100644 --- a/apps/files/ajax/newfolder.php +++ b/apps/files/ajax/newfolder.php @@ -6,7 +6,6 @@ * @author Georg Ehrke <georg@owncloud.com> * @author Jörn Friedrich Dreyer <jfd@butonic.de> * @author Lukas Reschke <lukas@owncloud.com> - * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <icewind@owncloud.com> * @author Thomas Müller <thomas.mueller@tmit.eu> * @author Vincent Petry <pvince81@owncloud.com> @@ -74,15 +73,26 @@ if (\OC\Files\Filesystem::file_exists($target)) { exit(); } -if(\OC\Files\Filesystem::mkdir($target)) { - if ( $dir !== '/') { - $path = $dir.'/'.$folderName; - } else { - $path = '/'.$folderName; +try { + if(\OC\Files\Filesystem::mkdir($target)) { + if ( $dir !== '/') { + $path = $dir.'/'.$folderName; + } else { + $path = '/'.$folderName; + } + $meta = \OC\Files\Filesystem::getFileInfo($path); + $meta['type'] = 'dir'; // missing ?! + OCP\JSON::success(array('data' => \OCA\Files\Helper::formatFileInfo($meta))); + exit(); } - $meta = \OC\Files\Filesystem::getFileInfo($path); - $meta['type'] = 'dir'; // missing ?! - OCP\JSON::success(array('data' => \OCA\Files\Helper::formatFileInfo($meta))); +} catch (\Exception $e) { + $result = [ + 'success' => false, + 'data' => [ + 'message' => $e->getMessage() + ] + ]; + OCP\JSON::error($result); exit(); } diff --git a/apps/files/ajax/rename.php b/apps/files/ajax/rename.php index 576902e29e5..a24a57b1046 100644 --- a/apps/files/ajax/rename.php +++ b/apps/files/ajax/rename.php @@ -7,6 +7,7 @@ * @author Lukas Reschke <lukas@owncloud.com> * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <icewind@owncloud.com> + * @author Vincent Petry <pvince81@owncloud.com> * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 @@ -29,15 +30,26 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::callCheck(); \OC::$server->getSession()->close(); +$l10n = \OC::$server->getL10N('files'); + $files = new \OCA\Files\App( \OC\Files\Filesystem::getView(), \OC::$server->getL10N('files') ); -$result = $files->rename( - isset($_GET['dir']) ? (string)$_GET['dir'] : '', - isset($_GET['file']) ? (string)$_GET['file'] : '', - isset($_GET['newname']) ? (string)$_GET['newname'] : '' -); +try { + $result = $files->rename( + isset($_GET['dir']) ? (string)$_GET['dir'] : '', + isset($_GET['file']) ? (string)$_GET['file'] : '', + isset($_GET['newname']) ? (string)$_GET['newname'] : '' + ); +} catch (\Exception $e) { + $result = [ + 'success' => false, + 'data' => [ + 'message' => $e->getMessage() + ] + ]; +} if($result['success'] === true){ OCP\JSON::success(['data' => $result['data']]); diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php index 4d5dc84e9c7..4bc2ce8bdf3 100644 --- a/apps/files/ajax/upload.php +++ b/apps/files/ajax/upload.php @@ -9,7 +9,6 @@ * @author Jörn Friedrich Dreyer <jfd@butonic.de> * @author Lukas Reschke <lukas@owncloud.com> * @author Luke Policinski <lpolicinski@gmail.com> - * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <icewind@owncloud.com> * @author Roman Geber <rgeber@owncloudapps.com> * @author TheSFReader <TheSFReader@gmail.com> @@ -83,6 +82,10 @@ if (empty($_POST['dirToken'])) { // The token defines the target directory (security reasons) $path = \OC\Files\Filesystem::getPath($linkItem['file_source']); + if($path === null) { + OCP\JSON::error(array('data' => array_merge(array('message' => $l->t('Unable to set upload directory.'))))); + die(); + } $dir = sprintf( "/%s/%s", $path, diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php index c483ad31ec5..40b194ab882 100644 --- a/apps/files/appinfo/app.php +++ b/apps/files/appinfo/app.php @@ -3,7 +3,6 @@ * @author Jakob Sack <mail@jakobsack.de> * @author Joas Schilling <nickvergessen@owncloud.com> * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <icewind@owncloud.com> * @author Thomas Müller <thomas.mueller@tmit.eu> * @author Vincent Petry <pvince81@owncloud.com> diff --git a/apps/files/appinfo/application.php b/apps/files/appinfo/application.php index c8aaf375d96..6ba77e09556 100644 --- a/apps/files/appinfo/application.php +++ b/apps/files/appinfo/application.php @@ -1,6 +1,5 @@ <?php /** - * @author Morris Jobke <hey@morrisjobke.de> * @author Roeland Jago Douma <roeland@famdouma.nl> * @author Tobias Kaminsky <tobias@kaminsky.me> * @author Vincent Petry <pvince81@owncloud.com> @@ -21,8 +20,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> * */ - -namespace OCA\Files\Appinfo; +namespace OCA\Files\AppInfo; use OCA\Files\Controller\ApiController; use OCP\AppFramework\App; @@ -68,5 +66,10 @@ class Application extends App { $homeFolder ); }); + + /* + * Register capabilities + */ + $container->registerCapability('OCA\Files\Capabilities'); } } diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php index 1e54fc10efa..36479ae13d0 100644 --- a/apps/files/appinfo/remote.php +++ b/apps/files/appinfo/remote.php @@ -30,51 +30,26 @@ // no php execution timeout for webdav set_time_limit(0); +// Turn off output buffering to prevent memory problems +\OC_Util::obEnd(); + +$serverFactory = new \OC\Connector\Sabre\ServerFactory( + \OC::$server->getConfig(), + \OC::$server->getLogger(), + \OC::$server->getDatabaseConnection(), + \OC::$server->getUserSession(), + \OC::$server->getMountManager(), + \OC::$server->getTagManager() +); // Backends $authBackend = new \OC\Connector\Sabre\Auth(); +$requestUri = \OC::$server->getRequest()->getRequestUri(); -// Fire up server -$objectTree = new \OC\Connector\Sabre\ObjectTree(); -$server = new \OC\Connector\Sabre\Server($objectTree); -// Set URL explicitly due to reverse-proxy situations -$server->httpRequest->setUrl(\OC::$server->getRequest()->getRequestUri()); -$server->setBaseUri($baseuri); - -// Load plugins -$defaults = new OC_Defaults(); -$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, $defaults->getName())); -// FIXME: The following line is a workaround for legacy components relying on being able to send a GET to / -$server->addPlugin(new \OC\Connector\Sabre\DummyGetResponsePlugin()); -$server->addPlugin(new \OC\Connector\Sabre\FilesPlugin($objectTree)); -$server->addPlugin(new \OC\Connector\Sabre\MaintenancePlugin()); -$server->addPlugin(new \OC\Connector\Sabre\ExceptionLoggerPlugin('webdav', \OC::$server->getLogger())); - -// wait with registering these until auth is handled and the filesystem is setup -$server->on('beforeMethod', function () use ($server, $objectTree) { - $view = \OC\Files\Filesystem::getView(); - $rootInfo = $view->getFileInfo(''); - - // Create ownCloud Dir - $mountManager = \OC\Files\Filesystem::getMountManager(); - $rootDir = new \OC\Connector\Sabre\Directory($view, $rootInfo); - $objectTree->init($rootDir, $view, $mountManager); - - $server->addPlugin(new \OC\Connector\Sabre\TagsPlugin($objectTree, \OC::$server->getTagManager())); - $server->addPlugin(new \OC\Connector\Sabre\QuotaPlugin($view)); - - // custom properties plugin must be the last one - $server->addPlugin( - new \Sabre\DAV\PropertyStorage\Plugin( - new \OC\Connector\Sabre\CustomPropertiesBackend( - $objectTree, - \OC::$server->getDatabaseConnection(), - \OC::$server->getUserSession()->getUser() - ) - ) - ); - $server->addPlugin(new \OC\Connector\Sabre\CopyEtagHeaderPlugin()); -}, 30); // priority 30: after auth (10) and acl(20), before lock(50) and handling the request +$server = $serverFactory->createServer($baseuri, $requestUri, $authBackend, function() { + // use the view for the logged in user + return \OC\Files\Filesystem::getView(); +}); // And off we go! $server->exec(); diff --git a/apps/files/appinfo/routes.php b/apps/files/appinfo/routes.php index b6506824a80..d1b8954d5ce 100644 --- a/apps/files/appinfo/routes.php +++ b/apps/files/appinfo/routes.php @@ -3,6 +3,7 @@ * @author Bart Visscher <bartv@thisnet.nl> * @author Lukas Reschke <lukas@owncloud.com> * @author Morris Jobke <hey@morrisjobke.de> + * @author Roeland Jago Douma <roeland@famdouma.nl> * @author Tobias Kaminsky <tobias@kaminsky.me> * @author Tom Needham <tom@owncloud.com> * @author Vincent Petry <pvince81@owncloud.com> @@ -23,8 +24,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> * */ - -namespace OCA\Files\Appinfo; +namespace OCA\Files\AppInfo; $application = new Application(); $application->registerRoutes( @@ -65,8 +65,6 @@ $this->create('files_ajax_getstoragestats', 'ajax/getstoragestats.php') ->actionInclude('files/ajax/getstoragestats.php'); $this->create('files_ajax_list', 'ajax/list.php') ->actionInclude('files/ajax/list.php'); -$this->create('files_ajax_mimeicon', 'ajax/mimeicon.php') - ->actionInclude('files/ajax/mimeicon.php'); $this->create('files_ajax_move', 'ajax/move.php') ->actionInclude('files/ajax/move.php'); $this->create('files_ajax_newfile', 'ajax/newfile.php') @@ -83,6 +81,4 @@ $this->create('files_ajax_upload', 'ajax/upload.php') $this->create('download', 'download{file}') ->requirements(array('file' => '.*')) ->actionInclude('files/download.php'); - -// Register with the capabilities API -\OC_API::register('get', '/cloud/capabilities', array('OCA\Files\Capabilities', 'getCapabilities'), 'files', \OC_API::USER_AUTH); + diff --git a/apps/files/appinfo/update.php b/apps/files/appinfo/update.php new file mode 100644 index 00000000000..2691c05c348 --- /dev/null +++ b/apps/files/appinfo/update.php @@ -0,0 +1,96 @@ +<?php +/** + * @author Björn Schießle <schiessle@owncloud.com> + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +$installedVersion = \OC::$server->getConfig()->getAppValue('files', 'installed_version'); +$ocVersion = explode('.', \OC::$server->getSystemConfig()->getValue('version')); + +/** + * In case encryption was not enabled, we accidently set encrypted = 1 for + * files inside mount points, since 8.1.0. This breaks opening the files in + * 8.1.1 because we fixed the code that checks if a file is encrypted. + * In order to fix the file, we need to reset the flag of the file. However, + * the flag might be set because the file is in fact encrypted because it was + * uploaded at a time where encryption was enabled. + * + * So we can only do this when: + * - Current version of ownCloud before the update is 8.1.0 or 8.2.0.(0-2) + * - Encryption is disabled + * - files_encryption is not known in the app config + * + * If the first two are not the case, we are save. However, if files_encryption + * values exist in the config, we might have a false negative here. + * Now if there is no file with unencrypted size greater 0, that means there are + * no files that are still encrypted with "files_encryption" encryption. So we + * can also safely reset the flag here. + * + * If this is not the case, we go with "better save then sorry" and don't change + * the flag but write a message to the ownCloud log file. + */ + +/** + * @param \OCP\IDBConnection $conn + */ +function owncloud_reset_encrypted_flag(\OCP\IDBConnection $conn) { + $conn->executeUpdate('UPDATE `*PREFIX*filecache` SET `encrypted` = 0 WHERE `encrypted` = 1'); +} + +// Current version of ownCloud before the update is 8.1.0 or 8.2.0.(0-2) +if ($installedVersion === '1.1.9' && ( + // 8.1.0.x + (((int) $ocVersion[0]) === 8 && ((int) $ocVersion[1]) === 1 && ((int) $ocVersion[2]) === 0) + || + // < 8.2.0.3 + (((int) $ocVersion[0]) === 8 && ((int) $ocVersion[1]) === 2 && ((int) $ocVersion[2]) === 0 && ((int) $ocVersion[3]) < 3) + )) { + + // Encryption is not enabled + if (!\OC::$server->getEncryptionManager()->isEnabled()) { + $conn = \OC::$server->getDatabaseConnection(); + + // Old encryption is not known in app config + $oldEncryption = \OC::$server->getConfig()->getAppKeys('files_encryption'); + if (empty($oldEncryption)) { + owncloud_reset_encrypted_flag($conn); + } else { + $query = $conn->prepare('SELECT * FROM `*PREFIX*filecache` WHERE `encrypted` = 1 AND `unencrypted_size` > 0', 1); + $query->execute(); + $empty = $query->fetch(); + + if (empty($empty)) { + owncloud_reset_encrypted_flag($conn); + } else { + /** + * Sorry in case you are a false positive, but we are not 100% that + * you don't have any encrypted files anymore, so we can not reset + * the value safely + */ + \OC::$server->getLogger()->warning( + 'If you have a problem with files not being accessible and ' + . 'you are not using encryption, please have a look at the following' + . 'issue: {issue}', + [ + 'issue' => 'https://github.com/owncloud/core/issues/17846', + ] + ); + } + } + } +} diff --git a/apps/files/appinfo/version b/apps/files/appinfo/version index 512a1faa680..5ed5faa5f16 100644 --- a/apps/files/appinfo/version +++ b/apps/files/appinfo/version @@ -1 +1 @@ -1.1.9 +1.1.10 diff --git a/apps/files/command/scan.php b/apps/files/command/scan.php index 599dc603c7b..99ce64e09cc 100644 --- a/apps/files/command/scan.php +++ b/apps/files/command/scan.php @@ -92,10 +92,10 @@ class Scan extends Command { } protected function execute(InputInterface $input, OutputInterface $output) { - $path = $input->getOption('path'); - if ($path) { - $path = '/'.trim($path, '/'); - list (, $user, ) = explode('/', $path, 3); + $inputPath = $input->getOption('path'); + if ($inputPath) { + $inputPath = '/' . trim($inputPath, '/'); + list (, $user,) = explode('/', $inputPath, 3); $users = array($user); } else if ($input->getOption('all')) { $users = $this->userManager->search(''); @@ -114,6 +114,7 @@ class Scan extends Command { if (is_object($user)) { $user = $user->getUID(); } + $path = $inputPath ? $inputPath : '/' . $user; if ($this->userManager->userExists($user)) { $this->scanFiles($user, $path, $quiet, $output); } else { diff --git a/apps/files/controller/apicontroller.php b/apps/files/controller/apicontroller.php index 072265d86d6..0cc222d7ce9 100644 --- a/apps/files/controller/apicontroller.php +++ b/apps/files/controller/apicontroller.php @@ -31,7 +31,6 @@ use OCP\AppFramework\Controller; use OCP\IRequest; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\DataDisplayResponse; -use OCP\AppFramework\Http\DownloadResponse; use OCA\Files\Service\TagService; use OCP\IPreview; @@ -93,7 +92,6 @@ class ApiController extends Controller { * replace the actual tag selection. * * @NoAdminRequired - * @CORS * * @param string $path path * @param array|string $tags array of tags @@ -127,7 +125,6 @@ class ApiController extends Controller { * Returns a list of all files tagged with the given tag. * * @NoAdminRequired - * @CORS * * @param array|string $tagName tag name to filter by * @return DataResponse diff --git a/apps/files/css/detailsView.css b/apps/files/css/detailsView.css new file mode 100644 index 00000000000..76629cb790f --- /dev/null +++ b/apps/files/css/detailsView.css @@ -0,0 +1,55 @@ +#app-sidebar .detailFileInfoContainer { + min-height: 50px; + padding: 15px; +} + +#app-sidebar .detailFileInfoContainer > div { + clear: both; +} + +#app-sidebar .mainFileInfoView { + margin-right: 20px; /* accomodate for close icon */ +} + +#app-sidebar .thumbnail { + width: 50px; + height: 50px; + float: left; + margin-right: 10px; + background-size: 50px; +} + +#app-sidebar .ellipsis { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +#app-sidebar .fileName { + font-size: 16px; + padding-top: 3px; +} + +#app-sidebar .file-details { + margin-top: 3px; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + opacity: .5; +} +#app-sidebar .action-favorite { + vertical-align: text-bottom; + padding: 10px; + margin: -10px; +} + +#app-sidebar .detailList { + float: left; +} + +#app-sidebar .close { + position: absolute; + top: 0; + right: 0; + padding: 15px; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + opacity: .5; +} diff --git a/apps/files/css/files.css b/apps/files/css/files.css index 455ccae3f96..26ba86b28c8 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -103,6 +103,10 @@ min-height: 100%; } +.app-files #app-content { + overflow-x: hidden; +} + /* icons for sidebar */ .nav-icon-files { background-image: url('../img/folder.svg'); @@ -143,6 +147,7 @@ #filestable tbody tr:active { background-color: rgb(240,240,240); } +#filestable tbody tr.highlighted, #filestable tbody tr.selected { background-color: rgb(230,230,230); } @@ -244,8 +249,8 @@ table th.column-last, table td.column-last { box-sizing: border-box; position: relative; /* this can not be just width, both need to be set … table styling */ - min-width: 176px; - max-width: 176px; + min-width: 130px; + max-width: 130px; } /* Multiselect bar */ @@ -274,7 +279,16 @@ table.multiselect #headerName { position: relative; width: 9999px; /* when we use 100%, the styling breaks on mobile … table styling */ } -table td.selection, table th.selection, table td.fileaction { width:32px; text-align:center; } +table.multiselect #modified { + display: none; +} + +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; @@ -312,14 +326,7 @@ table td.filename .nametext, .uploadtext, .modified, .column-last>span:first-chi position: relative; 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, -#fileList tr:hover .column-last>span:first-child, -#fileList tr:focus .column-last>span:first-child { - width: 75%; + width: 110px; } /* TODO fix usability bug (accidental file/folder selection) */ @@ -358,45 +365,27 @@ table td.filename .nametext .innernametext { @media only screen and (min-width: 1366px) { table td.filename .nametext .innernametext { - max-width: 760px; - } - - table tr:hover td.filename .nametext .innernametext, - table tr:focus td.filename .nametext .innernametext { - max-width: 480px; + max-width: 660px; } } - @media only screen and (min-width: 1200px) and (max-width: 1366px) { table td.filename .nametext .innernametext { - max-width: 600px; - } - - table tr:hover td.filename .nametext .innernametext, - table tr:focus td.filename .nametext .innernametext { - max-width: 320px; + max-width: 500px; } } - -@media only screen and (min-width: 1000px) and (max-width: 1200px) { +@media only screen and (min-width: 1100px) and (max-width: 1200px) { table td.filename .nametext .innernametext { max-width: 400px; } - - table tr:hover td.filename .nametext .innernametext, - table tr:focus td.filename .nametext .innernametext { - max-width: 120px; +} +@media only screen and (min-width: 1000px) and (max-width: 1100px) { + table td.filename .nametext .innernametext { + max-width: 310px; } } - @media only screen and (min-width: 768px) and (max-width: 1000px) { table td.filename .nametext .innernametext { - max-width: 320px; - } - - table tr:hover td.filename .nametext .innernametext, - table tr:focus td.filename .nametext .innernametext { - max-width: 40px; + max-width: 240px; } } @@ -503,6 +492,23 @@ table td.filename .uploadtext { font-size: 11px; } +.busy .fileactions, .busy .action { + visibility: hidden; +} + +/* fix position of bubble pointer for Files app */ +.bubble, +#app-navigation .app-navigation-entry-menu { + border-top-right-radius: 3px; +} +.bubble:after, +#app-navigation .app-navigation-entry-menu:after { + right: 6px; +} +.bubble:before, +#app-navigation .app-navigation-entry-menu:before { + right: 6px; +} /* force show the loading icon, not only on hover */ #fileList .icon-loading-small { @@ -513,21 +519,15 @@ table td.filename .uploadtext { } #fileList img.move2trash { display:inline; margin:-8px 0; padding:16px 8px 16px 8px !important; float:right; } -#fileList a.action.delete { - position: absolute; - right: 15px; - padding: 17px 14px; -} #fileList .action.action-share-notification span, #fileList a.name { cursor: default !important; } -a.action>img { - max-height:16px; - max-width:16px; - vertical-align:text-bottom; - margin-bottom: -1px; +a.action > img { + max-height: 16px; + max-width: 16px; + vertical-align: text-bottom; } /* Actions for selected files */ @@ -564,22 +564,29 @@ a.action>img { display:none; } -#fileList a.action[data-action="Rename"] { - padding: 16px 14px 17px !important; -} - .ie8 #fileList a.action img, #fileList tr:hover a.action, #fileList a.action.permanent, #fileList tr:focus a.action, -#fileList a.action.permanent -/*#fileList .name:focus .action*/ { +#fileList a.action.permanent, +#fileList tr:hover a.action.no-permission:hover, +#fileList tr:focus a.action.no-permission:focus, +/*#fileList .name:focus .action,*/ +/* also enforce the low opacity for disabled links that are hovered/focused */ +.ie8 #fileList a.action.disabled:hover img, +#fileList tr:hover a.action.disabled:hover, +#fileList tr:focus a.action.disabled:focus, +#fileList .name:focus a.action.disabled:focus, +#fileList a.action.disabled img { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; filter: alpha(opacity=50); opacity: .5; display:inline; } .ie8 #fileList a.action:hover img, +#fileList tr a.action.disabled.action-download, +#fileList tr:hover a.action.disabled.action-download:hover, +#fileList tr:focus a.action.disabled.action-download:focus, #fileList tr:hover a.action:hover, #fileList tr:focus a.action:focus, #fileList .name:focus a.action:focus { @@ -588,23 +595,36 @@ a.action>img { opacity: 1; display:inline; } +#fileList tr a.action.disabled { + background: none; +} + +#selectedActionsList a.download.disabled, +#fileList tr a.action.action-download.disabled { + color: #000000; +} + +#fileList tr:hover a.action.disabled:hover * { + cursor: default; +} .summary { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; filter: alpha(opacity=30); opacity: .3; - height: 60px; + /* add whitespace to bottom of files list to correctly show dropdowns */ + height: 300px; } - .summary:hover, .summary:focus, .summary, table tr.summary td { background-color: transparent; } - .summary td { border-bottom: none; + vertical-align: top; + padding-top: 20px; } .summary .info { margin-left: 40px; @@ -655,3 +675,44 @@ table.dragshadow td.size { .mask.transparent{ opacity: 0; } + +.fileActionsMenu { + padding: 4px 12px; +} +.fileActionsMenu li { + padding: 5px 0; +} +#fileList .fileActionsMenu a.action img { + padding: initial; +} +#fileList .fileActionsMenu a.action { + padding: 10px; + margin: -10px; +} + +.fileActionsMenu.hidden { + display: none; +} + +#fileList .fileActionsMenu .action { + display: block; + line-height: 30px; + padding-left: 5px; + color: #000; + padding: 0; +} + +.fileActionsMenu .action img, +.fileActionsMenu .action .no-icon { + display: inline-block; + width: 16px; + margin-right: 5px; +} + +.fileActionsMenu .action { + opacity: 0.5; +} + +.fileActionsMenu li:hover .action { + opacity: 1; +} diff --git a/apps/files/css/mobile.css b/apps/files/css/mobile.css index 4881f7c70e4..dd8244a2913 100644 --- a/apps/files/css/mobile.css +++ b/apps/files/css/mobile.css @@ -5,11 +5,6 @@ min-width: initial !important; } -/* do not show Deleted Files on mobile, not optimized yet and button too long */ -#controls #trash { - display: none; -} - /* hide size and date columns */ table th#headerSize, table td.filesize, @@ -38,7 +33,8 @@ table td.filename .nametext { } /* always show actions on mobile, not only on hover */ -#fileList a.action { +#fileList a.action, +#fileList a.action.action-menu.permanent { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)" !important; filter: alpha(opacity=20) !important; opacity: .2 !important; @@ -50,17 +46,19 @@ table td.filename .nametext { filter: alpha(opacity=70) !important; opacity: .7 !important; } -/* do not show Rename or Versions on mobile */ -#fileList .action.action-rename, -#fileList .action.action-versions { - display: none !important; +#fileList a.action.action-menu img { + padding-left: 2px; +} + +#fileList .fileActionsMenu { + margin-right: 5px; } /* some padding for better clickability */ #fileList a.action img { padding: 0 6px 0 12px; } -/* hide text of the actions on mobile */ -#fileList a.action span { +/* hide text of the share action on mobile */ +#fileList a.action-share span { display: none; } diff --git a/apps/files/download.php b/apps/files/download.php index c85051e0f4e..b0628e394be 100644 --- a/apps/files/download.php +++ b/apps/files/download.php @@ -1,5 +1,6 @@ <?php /** + * @author Andreas Fischer <bantu@owncloud.com> * @author Felix Moeller <mail@felixmoeller.de> * @author Frank Karlitschek <frank@owncloud.org> * @author Jakob Sack <mail@jakobsack.de> diff --git a/apps/files/index.php b/apps/files/index.php index ea0fd0ce2fe..a73caa50fbe 100644 --- a/apps/files/index.php +++ b/apps/files/index.php @@ -8,7 +8,6 @@ * @author Jörn Friedrich Dreyer <jfd@butonic.de> * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <icewind@owncloud.com> - * @author Robin McCorkell <rmccorkell@karoshi.org.uk> * @author Roman Geber <rgeber@owncloudapps.com> * @author Thomas Müller <thomas.mueller@tmit.eu> * @author Vincent Petry <pvince81@owncloud.com> @@ -29,7 +28,6 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> * */ -use OCA\Files\Appinfo\Application; // Check if we are a user OCP\User::checkLoggedIn(); @@ -43,6 +41,7 @@ OCP\Util::addscript('files', 'file-upload'); OCP\Util::addscript('files', 'jquery.iframe-transport'); OCP\Util::addscript('files', 'jquery.fileupload'); OCP\Util::addscript('files', 'jquery-visibility'); +OCP\Util::addscript('files', 'fileinfomodel'); OCP\Util::addscript('files', 'filesummary'); OCP\Util::addscript('files', 'breadcrumb'); OCP\Util::addscript('files', 'filelist'); @@ -52,6 +51,12 @@ OCP\Util::addscript('files', 'search'); \OCP\Util::addScript('files', 'tagsplugin'); \OCP\Util::addScript('files', 'favoritesplugin'); +\OCP\Util::addScript('files', 'detailfileinfoview'); +\OCP\Util::addScript('files', 'detailtabview'); +\OCP\Util::addScript('files', 'mainfileinfodetailview'); +\OCP\Util::addScript('files', 'detailsview'); +\OCP\Util::addStyle('files', 'detailsView'); + \OC_Util::addVendorScript('core', 'handlebars/handlebars'); OCP\App::setActiveNavigationEntry('files_index'); @@ -134,11 +139,17 @@ foreach ($navItems as $item) { } OCP\Util::addscript('files', 'fileactions'); +OCP\Util::addscript('files', 'fileactionsmenu'); OCP\Util::addscript('files', 'files'); OCP\Util::addscript('files', 'navigation'); OCP\Util::addscript('files', 'keyboardshortcuts'); + +\OC::$server->getEventDispatcher()->dispatch('OCA\Files::loadAdditionalScripts'); + $tmpl = new OCP\Template('files', 'index', 'user'); $tmpl->assign('usedSpacePercent', (int)$storageInfo['relative']); +$tmpl->assign('owner', $storageInfo['owner']); +$tmpl->assign('ownerDisplayName', $storageInfo['ownerDisplayName']); $tmpl->assign('isPublic', false); $tmpl->assign("mailNotificationEnabled", $config->getAppValue('core', 'shareapi_allow_mail_notification', 'no')); $tmpl->assign("mailPublicNotificationEnabled", $config->getAppValue('core', 'shareapi_allow_public_notification', 'no')); diff --git a/apps/files/js/detailfileinfoview.js b/apps/files/js/detailfileinfoview.js new file mode 100644 index 00000000000..43595001212 --- /dev/null +++ b/apps/files/js/detailfileinfoview.js @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + /** + * @class OCA.Files.DetailFileInfoView + * @classdesc + * + * Displays a block of details about the file info. + * + */ + var DetailFileInfoView = OC.Backbone.View.extend({ + tagName: 'div', + className: 'detailFileInfoView', + + _template: null, + + /** + * returns the jQuery object for HTML output + * + * @returns {jQuery} + */ + get$: function() { + return this.$el; + }, + + /** + * Sets the file info to be displayed in the view + * + * @param {OCA.Files.FileInfo} fileInfo file info to set + */ + setFileInfo: function(fileInfo) { + this.model = fileInfo; + this.render(); + }, + + /** + * Returns the file info. + * + * @return {OCA.Files.FileInfo} file info + */ + getFileInfo: function() { + return this.model; + } + }); + + OCA.Files.DetailFileInfoView = DetailFileInfoView; +})(); + diff --git a/apps/files/js/detailsview.js b/apps/files/js/detailsview.js new file mode 100644 index 00000000000..a4ebe90cd64 --- /dev/null +++ b/apps/files/js/detailsview.js @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + var TEMPLATE = + '<div>' + + ' <div class="detailFileInfoContainer">' + + ' </div>' + + ' <div>' + + ' {{#if tabHeaders}}' + + ' <ul class="tabHeaders">' + + ' {{#each tabHeaders}}' + + ' <li class="tabHeader" data-tabid="{{tabId}}" data-tabindex="{{tabIndex}}">' + + ' <a href="#">{{label}}</a>' + + ' </li>' + + ' {{/each}}' + + ' </ul>' + + ' {{/if}}' + + ' <div class="tabsContainer">' + + ' </div>' + + ' </div>' + + ' <a class="close icon-close" href="#" alt="{{closeLabel}}"></a>' + + '</div>'; + + /** + * @class OCA.Files.DetailsView + * @classdesc + * + * The details view show details about a selected file. + * + */ + var DetailsView = OC.Backbone.View.extend({ + id: 'app-sidebar', + tabName: 'div', + className: 'detailsView', + + _template: null, + + /** + * List of detail tab views + * + * @type Array<OCA.Files.DetailTabView> + */ + _tabViews: [], + + /** + * List of detail file info views + * + * @type Array<OCA.Files.DetailFileInfoView> + */ + _detailFileInfoViews: [], + + /** + * Id of the currently selected tab + * + * @type string + */ + _currentTabId: null, + + /** + * Dirty flag, whether the view needs to be rerendered + */ + _dirty: false, + + events: { + 'click a.close': '_onClose', + 'click .tabHeaders .tabHeader': '_onClickTab' + }, + + /** + * Initialize the details view + */ + initialize: function() { + this._tabViews = []; + this._detailFileInfoViews = []; + + this._dirty = true; + + // uncomment to add some dummy tabs for testing + //this._addTestTabs(); + }, + + _onClose: function(event) { + OC.Apps.hideAppSidebar(); + event.preventDefault(); + }, + + _onClickTab: function(e) { + var $target = $(e.target); + e.preventDefault(); + if (!$target.hasClass('tabHeader')) { + $target = $target.closest('.tabHeader'); + } + var tabId = $target.attr('data-tabid'); + if (_.isUndefined(tabId)) { + return; + } + + this.selectTab(tabId); + }, + + _addTestTabs: function() { + for (var j = 0; j < 2; j++) { + var testView = new OCA.Files.DetailTabView({id: 'testtab' + j}); + testView.index = j; + testView.getLabel = function() { return 'Test tab ' + this.index; }; + testView.render = function() { + this.$el.empty(); + for (var i = 0; i < 100; i++) { + this.$el.append('<div>Test tab ' + this.index + ' row ' + i + '</div>'); + } + }; + this._tabViews.push(testView); + } + }, + + template: function(vars) { + if (!this._template) { + this._template = Handlebars.compile(TEMPLATE); + } + return this._template(vars); + }, + + /** + * Renders this details view + */ + render: function() { + var templateVars = { + closeLabel: t('files', 'Close') + }; + + if (this._tabViews.length > 1) { + // only render headers if there is more than one available + templateVars.tabHeaders = _.map(this._tabViews, function(tabView, i) { + return { + tabId: tabView.id, + tabIndex: i, + label: tabView.getLabel() + }; + }); + } + + this.$el.html(this.template(templateVars)); + + var $detailsContainer = this.$el.find('.detailFileInfoContainer'); + + // render details + _.each(this._detailFileInfoViews, function(detailView) { + $detailsContainer.append(detailView.get$()); + }); + + if (!this._currentTabId && this._tabViews.length > 0) { + this._currentTabId = this._tabViews[0].id; + } + + this.selectTab(this._currentTabId); + + this._dirty = false; + }, + + /** + * Selects the given tab by id + * + * @param {string} tabId tab id + */ + selectTab: function(tabId) { + if (!tabId) { + return; + } + + var tabView = _.find(this._tabViews, function(tab) { + return tab.id === tabId; + }); + + if (!tabView) { + console.warn('Details view tab with id "' + tabId + '" not found'); + return; + } + + this._currentTabId = tabId; + + var $tabsContainer = this.$el.find('.tabsContainer'); + var $tabEl = $tabsContainer.find('#' + tabId); + + // hide other tabs + $tabsContainer.find('.tab').addClass('hidden'); + + // tab already rendered ? + if (!$tabEl.length) { + // render tab + $tabsContainer.append(tabView.$el); + $tabEl = tabView.$el; + } + + // this should trigger tab rendering + tabView.setFileInfo(this.model); + + $tabEl.removeClass('hidden'); + + // update tab headers + var $tabHeaders = this.$el.find('.tabHeaders li'); + $tabHeaders.removeClass('selected'); + $tabHeaders.filterAttr('data-tabid', tabView.id).addClass('selected'); + }, + + /** + * Sets the file info to be displayed in the view + * + * @param {OCA.Files.FileInfoModel} fileInfo file info to set + */ + setFileInfo: function(fileInfo) { + this.model = fileInfo; + + if (this._dirty) { + this.render(); + } + + if (this._currentTabId) { + // only update current tab, others will be updated on-demand + var tabId = this._currentTabId; + var tabView = _.find(this._tabViews, function(tab) { + return tab.id === tabId; + }); + tabView.setFileInfo(fileInfo); + } + + _.each(this._detailFileInfoViews, function(detailView) { + detailView.setFileInfo(fileInfo); + }); + }, + + /** + * Returns the file info. + * + * @return {OCA.Files.FileInfoModel} file info + */ + getFileInfo: function() { + return this.model; + }, + + /** + * Adds a tab in the tab view + * + * @param {OCA.Files.DetailTabView} tab view + */ + addTabView: function(tabView) { + this._tabViews.push(tabView); + this._dirty = true; + }, + + /** + * Adds a detail view for file info. + * + * @param {OCA.Files.DetailFileInfoView} detail view + */ + addDetailView: function(detailView) { + this._detailFileInfoViews.push(detailView); + this._dirty = true; + } + }); + + OCA.Files.DetailsView = DetailsView; +})(); + diff --git a/apps/files/js/detailtabview.js b/apps/files/js/detailtabview.js new file mode 100644 index 00000000000..67f8b535abd --- /dev/null +++ b/apps/files/js/detailtabview.js @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + + /** + * @class OCA.Files.DetailTabView + * @classdesc + * + * Base class for tab views to display file information. + * + */ + var DetailTabView = OC.Backbone.View.extend({ + tag: 'div', + + className: 'tab', + + /** + * Tab label + */ + _label: null, + + _template: null, + + initialize: function() { + if (!this.id) { + this.id = 'detailTabView' + DetailTabView._TAB_COUNT; + DetailTabView._TAB_COUNT++; + } + }, + + /** + * Returns the tab label + * + * @return {String} label + */ + getLabel: function() { + return 'Tab ' + this.id; + }, + + /** + * returns the jQuery object for HTML output + * + * @returns {jQuery} + */ + get$: function() { + return this.$el; + }, + + /** + * Renders this details view + * + * @abstract + */ + render: function() { + // to be implemented in subclass + // FIXME: code is only for testing + this.$el.html('<div>Hello ' + this.id + '</div>'); + }, + + /** + * Sets the file info to be displayed in the view + * + * @param {OCA.Files.FileInfoModel} fileInfo file info to set + */ + setFileInfo: function(fileInfo) { + if (this.model !== fileInfo) { + this.model = fileInfo; + this.render(); + } + }, + + /** + * Returns the file info. + * + * @return {OCA.Files.FileInfoModel} file info + */ + getFileInfo: function() { + return this.model; + } + }); + DetailTabView._TAB_COUNT = 0; + + OCA.Files.DetailTabView = DetailTabView; +})(); + diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js index ce8127c9887..6b6acdb5e01 100644 --- a/apps/files/js/file-upload.js +++ b/apps/files/js/file-upload.js @@ -611,7 +611,7 @@ OC.Upload = { var lastPos; var checkInput = function () { var filename = input.val(); - if (Files.isFileNameValid(filename)) { + if (!Files.isFileNameValid(filename)) { // Files.isFileNameValid(filename) throws an exception itself } else if (FileList.inList(filename)) { throw t('files', '{new_name} already exists', {new_name: filename}); @@ -651,12 +651,6 @@ OC.Upload = { FileList.lastAction(); } var name = FileList.getUniqueName(newname); - if (newname !== name) { - FileList.checkName(name, newname, true); - var hidden = true; - } else { - var hidden = false; - } switch(type) { case 'file': $.post( @@ -667,7 +661,7 @@ OC.Upload = { }, function(result) { if (result.status === 'success') { - FileList.add(result.data, {hidden: hidden, animate: true, scrollTo: true}); + FileList.add(result.data, {animate: true, scrollTo: true}); } else { OC.dialogs.alert(result.data.message, t('core', 'Could not create file')); } @@ -683,7 +677,7 @@ OC.Upload = { }, function(result) { if (result.status === 'success') { - FileList.add(result.data, {hidden: hidden, animate: true, scrollTo: true}); + FileList.add(result.data, {animate: true, scrollTo: true}); } else { OC.dialogs.alert(result.data.message, t('core', 'Could not create folder')); } diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js index b335f1f6432..f3f137a0537 100644 --- a/apps/files/js/fileactions.js +++ b/apps/files/js/fileactions.js @@ -10,6 +10,12 @@ (function() { + var TEMPLATE_FILE_ACTION_TRIGGER = + '<a class="action action-{{nameLowerCase}}" href="#" data-action="{{name}}">' + + '{{#if icon}}<img class="svg" alt="{{altText}}" src="{{icon}}" />{{/if}}' + + '{{#if displayName}}<span> {{displayName}}</span>{{/if}}' + + '</a>'; + /** * Construct a new FileActions instance * @constructs FileActions @@ -18,11 +24,17 @@ var FileActions = function() { this.initialize(); }; + FileActions.TYPE_DROPDOWN = 0; + FileActions.TYPE_INLINE = 1; FileActions.prototype = { /** @lends FileActions.prototype */ actions: {}, defaults: {}, icons: {}, + + /** + * @deprecated + */ currentFile: null, /** @@ -38,6 +50,8 @@ */ _updateListeners: {}, + _fileActionTriggerTemplate: null, + /** * @private */ @@ -46,6 +60,8 @@ // abusing jquery for events until we get a real event lib this.$el = $('<div class="dummy-fileactions hidden"></div>'); $('body').append(this.$el); + + this._showMenuClosure = _.bind(this._showMenu, this); }, /** @@ -111,6 +127,7 @@ displayName: displayName || name }); }, + /** * Register action * @@ -125,15 +142,14 @@ displayName: action.displayName, mime: mime, icon: action.icon, - permissions: action.permissions + permissions: action.permissions, + type: action.type || FileActions.TYPE_DROPDOWN }; if (_.isUndefined(action.displayName)) { actionSpec.displayName = t('files', name); } if (_.isFunction(action.render)) { actionSpec.render = action.render; - } else { - actionSpec.render = _.bind(this._defaultRenderAction, this); } if (!this.actions[mime]) { this.actions[mime] = {}; @@ -162,6 +178,16 @@ this.defaults[mime] = name; this._notifyUpdateListeners('setDefault', {defaultAction: {mime: mime, name: name}}); }, + + /** + * Returns a map of file actions handlers matching the given conditions + * + * @param {string} mime mime type + * @param {string} type "dir" or "file" + * @param {int} permissions permissions + * + * @return {Object.<string,OCA.Files.FileActions~actionHandler>} map of action name to action spec + */ get: function (mime, type, permissions) { var actions = this.getActions(mime, type, permissions); var filteredActions = {}; @@ -170,6 +196,16 @@ }); return filteredActions; }, + + /** + * Returns an array of file actions matching the given conditions + * + * @param {string} mime mime type + * @param {string} type "dir" or "file" + * @param {int} permissions permissions + * + * @return {Array.<OCA.Files.FileAction>} array of action specs + */ getActions: function (mime, type, permissions) { var actions = {}; if (this.actions.all) { @@ -197,7 +233,37 @@ }); return filteredActions; }, + + /** + * Returns the default file action handler for the given conditions + * + * @param {string} mime mime type + * @param {string} type "dir" or "file" + * @param {int} permissions permissions + * + * @return {OCA.Files.FileActions~actionHandler} action handler + * + * @deprecated use getDefaultFileAction instead + */ getDefault: function (mime, type, permissions) { + var defaultActionSpec = this.getDefaultFileAction(mime, type, permissions); + if (defaultActionSpec) { + return defaultActionSpec.action; + } + return undefined; + }, + + /** + * Returns the default file action handler for the given conditions + * + * @param {string} mime mime type + * @param {string} type "dir" or "file" + * @param {int} permissions permissions + * + * @return {OCA.Files.FileActions~actionHandler} action handler + * @since 8.2 + */ + getDefaultFileAction: function(mime, type, permissions) { var mimePart; if (mime) { mimePart = mime.substr(0, mime.indexOf('/')); @@ -212,9 +278,10 @@ } else { name = this.defaults.all; } - var actions = this.get(mime, type, permissions); + var actions = this.getActions(mime, type, permissions); return actions[name]; }, + /** * Default function to render actions * @@ -224,81 +291,84 @@ * @param {OCA.Files.FileActionContext} context action context */ _defaultRenderAction: function(actionSpec, isDefault, context) { - var name = actionSpec.name; - if (name === 'Download' || !isDefault) { - var $actionLink = this._makeActionLink(actionSpec, context); + if (!isDefault) { + var params = { + name: actionSpec.name, + nameLowerCase: actionSpec.name.toLowerCase(), + displayName: actionSpec.displayName, + icon: actionSpec.icon, + altText: actionSpec.altText, + }; + if (_.isFunction(actionSpec.icon)) { + params.icon = actionSpec.icon(context.$file.attr('data-file')); + } + + var $actionLink = this._makeActionLink(params, context); context.$file.find('a.name>span.fileactions').append($actionLink); + $actionLink.addClass('permanent'); return $actionLink; } }, + /** * Renders the action link element * - * @param {OCA.Files.FileAction} actionSpec action object - * @param {OCA.Files.FileActionContext} context action context + * @param {Object} params action params */ - _makeActionLink: function(actionSpec, context) { - var img = actionSpec.icon; - if (img && img.call) { - img = img(context.$file.attr('data-file')); - } - var html = '<a href="#">'; - if (img) { - html += '<img class="svg" alt="" src="' + img + '" />'; - } - if (actionSpec.displayName) { - html += '<span> ' + actionSpec.displayName + '</span>'; + _makeActionLink: function(params) { + if (!this._fileActionTriggerTemplate) { + this._fileActionTriggerTemplate = Handlebars.compile(TEMPLATE_FILE_ACTION_TRIGGER); } - html += '</a>'; - return $(html); + return $(this._fileActionTriggerTemplate(params)); }, + /** - * Custom renderer for the "Rename" action. - * Displays the rename action as an icon behind the file name. + * Displays the file actions dropdown menu * - * @param {OCA.Files.FileAction} actionSpec file action to render - * @param {boolean} isDefault true if the action is a default action, - * false otherwise - * @param {OCAFiles.FileActionContext} context rendering context + * @param {string} fileName file name + * @param {OCA.Files.FileActionContext} context rendering context */ - _renderRenameAction: function(actionSpec, isDefault, context) { - var $actionEl = this._makeActionLink(actionSpec, context); - var $container = context.$file.find('a.name span.nametext'); - $actionEl.find('img').attr('alt', t('files', 'Rename')); - $container.find('.action-rename').remove(); - $container.append($actionEl); - return $actionEl; + _showMenu: function(fileName, context) { + var menu; + var $trigger = context.$file.closest('tr').find('.fileactions .action-menu'); + $trigger.addClass('open'); + + menu = new OCA.Files.FileActionsMenu(); + + context.$file.find('td.filename').append(menu.$el); + + menu.$el.on('afterHide', function() { + context.$file.removeClass('mouseOver'); + $trigger.removeClass('open'); + menu.remove(); + }); + + context.$file.addClass('mouseOver'); + menu.show(context); }, + /** - * Custom renderer for the "Delete" action. - * Displays the "Delete" action as a trash icon at the end of - * the table row. - * - * @param {OCA.Files.FileAction} actionSpec file action to render - * @param {boolean} isDefault true if the action is a default action, - * false otherwise - * @param {OCAFiles.FileActionContext} context rendering context + * Renders the menu trigger on the given file list row + * + * @param {Object} $tr file list row element + * @param {OCA.Files.FileActionContext} context rendering context */ - _renderDeleteAction: function(actionSpec, isDefault, context) { - var mountType = context.$file.attr('data-mounttype'); - var deleteTitle = t('files', 'Delete'); - if (mountType === 'external-root') { - deleteTitle = t('files', 'Disconnect storage'); - } else if (mountType === 'shared-root') { - deleteTitle = t('files', 'Unshare'); - } - var $actionLink = $('<a href="#" original-title="' + - escapeHTML(deleteTitle) + - '" class="action delete icon-delete">' + - '<span class="hidden-visually">' + escapeHTML(deleteTitle) + '</span>' + - '</a>' - ); - var $container = context.$file.find('td:last'); - $container.find('.delete').remove(); - $container.append($actionLink); - return $actionLink; + _renderMenuTrigger: function($tr, context) { + // remove previous + $tr.find('.action-menu').remove(); + + var $el = this._renderInlineAction({ + name: 'menu', + displayName: '', + icon: OC.imagePath('core', 'actions/more'), + altText: t('files', 'Actions'), + action: this._showMenuClosure + }, false, context); + + $el.addClass('permanent'); }, + /** * Renders the action element by calling actionSpec.render() and * registers the click event to process the action. @@ -306,40 +376,117 @@ * @param {OCA.Files.FileAction} actionSpec file action to render * @param {boolean} isDefault true if the action is a default action, * false otherwise - * @param {OCAFiles.FileActionContext} context rendering context + * @param {OCA.Files.FileActionContext} context rendering context */ - _renderAction: function(actionSpec, isDefault, context) { - var $actionEl = actionSpec.render(actionSpec, isDefault, context); + _renderInlineAction: function(actionSpec, isDefault, context) { + var renderFunc = actionSpec.render || _.bind(this._defaultRenderAction, this); + var $actionEl = renderFunc(actionSpec, isDefault, context); if (!$actionEl || !$actionEl.length) { return; } - $actionEl.addClass('action action-' + actionSpec.name.toLowerCase()); - $actionEl.attr('data-action', actionSpec.name); $actionEl.on( 'click', { a: null }, function(event) { + event.stopPropagation(); + event.preventDefault(); + + if ($actionEl.hasClass('open')) { + return; + } + var $file = $(event.target).closest('tr'); + if ($file.hasClass('busy')) { + return; + } var currentFile = $file.find('td.filename'); var fileName = $file.attr('data-file'); - event.stopPropagation(); - event.preventDefault(); context.fileActions.currentFile = currentFile; // also set on global object for legacy apps window.FileActions.currentFile = currentFile; + var callContext = _.extend({}, context); + + if (!context.dir && context.fileList) { + callContext.dir = $file.attr('data-path') || context.fileList.getCurrentDirectory(); + } + + if (!context.fileInfoModel && context.fileList) { + callContext.fileInfoModel = context.fileList.getModelForFile(fileName); + if (!callContext.fileInfoModel) { + console.warn('No file info model found for file "' + fileName + '"'); + } + } + actionSpec.action( fileName, - _.extend(context, { - dir: $file.attr('data-path') || context.fileList.getCurrentDirectory() - }) + callContext ); } ); + $actionEl.tooltip({placement:'top'}); return $actionEl; }, + + /** + * Trigger the given action on the given file. + * + * @param {string} actionName action name + * @param {OCA.Files.FileInfoModel} fileInfoModel file info model + * @param {OCA.Files.FileList} [fileList] file list, for compatibility with older action handlers [DEPRECATED] + * + * @return {boolean} true if the action handler was called, false otherwise + * + * @since 8.2 + */ + triggerAction: function(actionName, fileInfoModel, fileList) { + var actionFunc; + var actions = this.get( + fileInfoModel.get('mimetype'), + fileInfoModel.isDirectory() ? 'dir' : 'file', + fileInfoModel.get('permissions') + ); + + if (actionName) { + actionFunc = actions[actionName]; + } else { + actionFunc = this.getDefault( + fileInfoModel.get('mimetype'), + fileInfoModel.isDirectory() ? 'dir' : 'file', + fileInfoModel.get('permissions') + ); + } + + if (!actionFunc) { + actionFunc = actions['Download']; + } + + if (!actionFunc) { + return false; + } + + var context = { + fileActions: this, + fileInfoModel: fileInfoModel, + dir: fileInfoModel.get('path') + }; + + var fileName = fileInfoModel.get('name'); + this.currentFile = fileName; + // also set on global object for legacy apps + window.FileActions.currentFile = fileName; + + if (fileList) { + // compatibility with action handlers that expect these + context.fileList = fileList; + context.$file = fileList.findFileEl(fileName); + } + + actionFunc(fileName, context); + }, + /** * Display file actions for the given element * @param parent "td" element of the file for which to display actions @@ -370,36 +517,29 @@ nameLinks = parent.children('a.name'); nameLinks.find('.fileactions, .nametext .action').remove(); nameLinks.append('<span class="fileactions" />'); - var defaultAction = this.getDefault( + var defaultAction = this.getDefaultFileAction( this.getCurrentMimeType(), this.getCurrentType(), this.getCurrentPermissions() ); + var context = { + $file: $tr, + fileActions: this, + fileList: fileList + }; + $.each(actions, function (name, actionSpec) { - if (name !== 'Share') { - self._renderAction( + if (actionSpec.type === FileActions.TYPE_INLINE) { + self._renderInlineAction( actionSpec, - actionSpec.action === defaultAction, { - $file: $tr, - fileActions: this, - fileList : fileList - } + defaultAction && actionSpec.name === defaultAction.name, + context ); } }); - // added here to make sure it's always the last action - var shareActionSpec = actions.Share; - if (shareActionSpec){ - this._renderAction( - shareActionSpec, - shareActionSpec.action === defaultAction, { - $file: $tr, - fileActions: this, - fileList: fileList - } - ); - } + + this._renderMenuTrigger($tr, context); if (triggerEvent){ fileList.$fileList.trigger(jQuery.Event("fileActionsReady", {fileList: fileList, $files: $tr})); @@ -423,30 +563,42 @@ */ registerDefaultActions: function() { this.registerAction({ - name: 'Delete', - displayName: '', + name: 'Download', + displayName: t('files', 'Download'), mime: 'all', - permissions: OC.PERMISSION_DELETE, - icon: function() { - return OC.imagePath('core', 'actions/delete'); + permissions: OC.PERMISSION_READ, + icon: function () { + return OC.imagePath('core', 'actions/download'); }, - render: _.bind(this._renderDeleteAction, this), - actionHandler: function(fileName, context) { - context.fileList.do_delete(fileName, context.dir); - $('.tipsy').remove(); + actionHandler: function (filename, context) { + var dir = context.dir || context.fileList.getCurrentDirectory(); + var url = context.fileList.getDownloadUrl(filename, dir); + + var downloadFileaction = $(context.$file).find('.fileactions .action-download'); + + // don't allow a second click on the download action + if(downloadFileaction.hasClass('disabled')) { + return; + } + + if (url) { + var disableLoadingState = function() { + context.fileList.showFileBusyState(filename, false); + }; + + context.fileList.showFileBusyState(downloadFileaction, true); + OCA.Files.Files.handleDownload(url, disableLoadingState); + } } }); - // t('files', 'Rename') this.registerAction({ name: 'Rename', - displayName: '', mime: 'all', permissions: OC.PERMISSION_UPDATE, icon: function() { return OC.imagePath('core', 'actions/rename'); }, - render: _.bind(this._renderRenameAction, this), actionHandler: function (filename, context) { context.fileList.rename(filename); } @@ -460,23 +612,51 @@ context.fileList.changeDirectory(dir + filename); }); - this.setDefault('dir', 'Open'); - - this.register('all', 'Download', OC.PERMISSION_READ, function () { - return OC.imagePath('core', 'actions/download'); - }, function (filename, context) { - var dir = context.dir || context.fileList.getCurrentDirectory(); - var url = context.fileList.getDownloadUrl(filename, dir); - if (url) { - OC.redirect(url); + this.registerAction({ + name: 'Delete', + mime: 'all', + // permission is READ because we show a hint instead if there is no permission + permissions: OC.PERMISSION_DELETE, + icon: function() { + return OC.imagePath('core', 'actions/delete'); + }, + actionHandler: function(fileName, context) { + // if there is no permission to delete do nothing + if((context.$file.data('permissions') & OC.PERMISSION_DELETE) === 0) { + return; + } + context.fileList.do_delete(fileName, context.dir); + $('.tipsy').remove(); } - }, t('files', 'Download')); + }); + + this.setDefault('dir', 'Open'); } }; OCA.Files.FileActions = FileActions; /** + * Replaces the download icon with a loading spinner and vice versa + * - also adds the class disabled to the passed in element + * + * @param downloadButtonElement download fileaction + * @param {boolean} showIt whether to show the spinner(true) or to hide it(false) + */ + OCA.Files.FileActions.updateFileActionSpinner = function(downloadButtonElement, showIt) { + var icon = downloadButtonElement.find('img'), + sourceImage = icon.attr('src'); + + if(showIt) { + downloadButtonElement.addClass('disabled'); + icon.attr('src', sourceImage.replace('actions/download.svg', 'loading-small.gif')); + } else { + downloadButtonElement.removeClass('disabled'); + icon.attr('src', sourceImage.replace('loading-small.gif', 'actions/download.svg')); + } + }; + + /** * File action attributes. * * @todo make this a real class in the future @@ -521,11 +701,12 @@ * Action handler function for file actions * * @callback OCA.Files.FileActions~actionHandler - * @param {String} fileName name of the clicked file + * @param {String} fileName name of the file on which the action must be performed * @param context context * @param {String} context.dir directory of the file - * @param context.$file jQuery element of the file - * @param {OCA.Files.FileList} context.fileList the FileList instance on which the action occurred + * @param {OCA.Files.FileInfoModel} fileInfoModel file info model + * @param {Object} [context.$file] jQuery element of the file [DEPRECATED] + * @param {OCA.Files.FileList} [context.fileList] the FileList instance on which the action occurred [DEPRECATED] * @param {OCA.Files.FileActions} context.fileActions the FileActions instance on which the action occurred */ diff --git a/apps/files/js/fileactionsmenu.js b/apps/files/js/fileactionsmenu.js new file mode 100644 index 00000000000..623ebde5442 --- /dev/null +++ b/apps/files/js/fileactionsmenu.js @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2014 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + + var TEMPLATE_MENU = + '<ul>' + + '{{#each items}}' + + '<li>' + + '<a href="#" class="action action-{{nameLowerCase}} permanent" data-action="{{name}}">{{#if icon}}<img src="{{icon}}"/>{{else}}<span class="no-icon"></span>{{/if}}<span>{{displayName}}</span></a>' + + '</li>' + + '{{/each}}' + + '</ul>'; + + /** + * Construct a new FileActionsMenu instance + * @constructs FileActionsMenu + * @memberof OCA.Files + */ + var FileActionsMenu = OC.Backbone.View.extend({ + tagName: 'div', + className: 'fileActionsMenu bubble hidden open menu', + + /** + * Current context + * + * @type OCA.Files.FileActionContext + */ + _context: null, + + events: { + 'click a.action': '_onClickAction' + }, + + template: function(data) { + if (!OCA.Files.FileActionsMenu._TEMPLATE) { + OCA.Files.FileActionsMenu._TEMPLATE = Handlebars.compile(TEMPLATE_MENU); + } + return OCA.Files.FileActionsMenu._TEMPLATE(data); + }, + + /** + * Event handler whenever an action has been clicked within the menu + * + * @param {Object} event event object + */ + _onClickAction: function(event) { + var $target = $(event.target); + if (!$target.is('a')) { + $target = $target.closest('a'); + } + var fileActions = this._context.fileActions; + var actionName = $target.attr('data-action'); + var actions = fileActions.getActions( + fileActions.getCurrentMimeType(), + fileActions.getCurrentType(), + fileActions.getCurrentPermissions() + ); + var actionSpec = actions[actionName]; + var fileName = this._context.$file.attr('data-file'); + + event.stopPropagation(); + event.preventDefault(); + + OC.hideMenus(); + + actionSpec.action( + fileName, + this._context + ); + }, + + /** + * Renders the menu with the currently set items + */ + render: function() { + var fileActions = this._context.fileActions; + var actions = fileActions.getActions( + fileActions.getCurrentMimeType(), + fileActions.getCurrentType(), + fileActions.getCurrentPermissions() + ); + + var defaultAction = fileActions.getDefaultFileAction( + fileActions.getCurrentMimeType(), + fileActions.getCurrentType(), + fileActions.getCurrentPermissions() + ); + + var items = _.filter(actions, function(actionSpec) { + return ( + actionSpec.type === OCA.Files.FileActions.TYPE_DROPDOWN && + (!defaultAction || actionSpec.name !== defaultAction.name) + ); + }); + items = _.map(items, function(item) { + item.nameLowerCase = item.name.toLowerCase(); + return item; + }); + + this.$el.html(this.template({ + items: items + })); + }, + + /** + * Displays the menu under the given element + * + * @param {OCA.Files.FileActionContext} context context + * @param {Object} $trigger trigger element + */ + show: function(context) { + this._context = context; + + this.render(); + this.$el.removeClass('hidden'); + + OC.showMenu(null, this.$el); + } + }); + + OCA.Files.FileActionsMenu = FileActionsMenu; + +})(); + diff --git a/apps/files/js/fileinfomodel.js b/apps/files/js/fileinfomodel.js new file mode 100644 index 00000000000..05060854fba --- /dev/null +++ b/apps/files/js/fileinfomodel.js @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function(OC, OCA) { + + /** + * @class OC.Files.FileInfo + * @classdesc File information + * + * @param {Object} attributes file data + * @param {int} attributes.id file id + * @param {string} attributes.name file name + * @param {string} attributes.path path leading to the file, + * without the file name and with a leading slash + * @param {int} attributes.size size + * @param {string} attributes.mimetype mime type + * @param {string} attributes.icon icon URL + * @param {int} attributes.permissions permissions + * @param {Date} attributes.mtime modification time + * @param {string} attributes.etag etag + * @param {string} mountType mount type + * + * @since 8.2 + */ + var FileInfoModel = OC.Backbone.Model.extend({ + + initialize: function(data) { + if (!_.isUndefined(data.id)) { + data.id = parseInt(data.id, 10); + } + + // TODO: normalize path + data.path = data.path || ''; + data.name = data.name; + + data.mimetype = data.mimetype || 'application/octet-stream'; + }, + + /** + * Returns whether this file is a directory + * + * @return {boolean} true if this is a directory, false otherwise + */ + isDirectory: function() { + return this.get('mimetype') === 'httpd/unix-directory'; + }, + + /** + * Returns the full path to this file + * + * @return {string} full path + */ + getFullPath: function() { + return OC.joinPaths(this.get('path'), this.get('name')); + } + }); + + if (!OCA.Files) { + OCA.Files = {}; + } + OCA.Files.FileInfoModel = FileInfoModel; + +})(OC, OCA); + diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 9d60e77b0ac..e7becb01207 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -23,6 +23,7 @@ * @param [options.scrollContainer] scrollable container, defaults to $(window) * @param [options.dragOptions] drag options, disabled by default * @param [options.folderDropOptions] folder drop options, disabled by default + * @param [options.detailsViewEnabled=true] whether to enable details view */ var FileList = function($el, options) { this.initialize($el, options); @@ -65,6 +66,11 @@ fileSummary: null, /** + * @type OCA.Files.DetailsView + */ + _detailsView: null, + + /** * Whether the file list was initialized already. * @type boolean */ @@ -205,6 +211,13 @@ } this.breadcrumb = new OCA.Files.BreadCrumb(breadcrumbOptions); + if (_.isUndefined(options.detailsViewEnabled) || options.detailsViewEnabled) { + this._detailsView = new OCA.Files.DetailsView(); + this._detailsView.addDetailView(new OCA.Files.MainFileInfoDetailView({fileList: this, fileActions: this.fileActions})); + this._detailsView.$el.insertBefore(this.$el); + this._detailsView.$el.addClass('disappear'); + } + this.$el.find('#controls').prepend(this.breadcrumb.$el); this.$el.find('thead th .columntitle').click(_.bind(this._onClickHeader, this)); @@ -216,6 +229,13 @@ this.updateSearch(); + this.$el.on('click', function(event) { + var $target = $(event.target); + // click outside file row ? + if (!$target.closest('tbody').length && !$target.closest('#app-sidebar').length) { + self._updateDetailsView(null); + } + }); this.$fileList.on('click','td.filename>a.name', _.bind(this._onClickFile, this)); this.$fileList.on('change', 'td.filename>.selectCheckBox', _.bind(this._onClickFileCheckbox, this)); this.$el.on('urlChanged', _.bind(this._onUrlChanged, this)); @@ -223,6 +243,8 @@ this.$el.find('.download').click(_.bind(this._onClickDownloadSelected, this)); this.$el.find('.delete-selected').click(_.bind(this._onClickDeleteSelected, this)); + this.$el.find('.selectedActions a').tooltip({placement:'top'}); + this.setupUploadEvents(); this.$container.on('scroll', _.bind(this._onScroll, this)); @@ -263,6 +285,79 @@ }, /** + * Returns a unique model for the given file name. + * + * @param {string|object} fileName file name or jquery row + * @return {OCA.Files.FileInfoModel} file info model + */ + getModelForFile: function(fileName) { + var $tr; + // jQuery object ? + if (fileName.is) { + $tr = fileName; + fileName = $tr.attr('data-file'); + } else { + $tr = this.findFileEl(fileName); + } + + if (!$tr || !$tr.length) { + return null; + } + + // if requesting the selected model, return it + if (this._currentFileModel && this._currentFileModel.get('name') === fileName) { + return this._currentFileModel; + } + + // TODO: note, this is a temporary model required for synchronising + // state between different views. + // In the future the FileList should work with Backbone.Collection + // and contain existing models that can be used. + // This method would in the future simply retrieve the matching model from the collection. + var model = new OCA.Files.FileInfoModel(this.elementToFile($tr)); + if (!model.has('path')) { + model.set('path', this.getCurrentDirectory(), {silent: true}); + } + return model; + }, + + /** + * Update the details view to display the given file + * + * @param {string} fileName file name from the current list + */ + _updateDetailsView: function(fileName) { + if (!this._detailsView) { + return; + } + + var oldFileInfo = this._detailsView.getFileInfo(); + if (oldFileInfo) { + // TODO: use more efficient way, maybe track the highlight + this.$fileList.children().filterAttr('data-id', '' + oldFileInfo.get('id')).removeClass('highlighted'); + oldFileInfo.off('change', this._onSelectedModelChanged, this); + } + + if (!fileName) { + OC.Apps.hideAppSidebar(); + this._detailsView.setFileInfo(null); + this._currentFileModel = null; + return; + } + + var $tr = this.findFileEl(fileName); + var model = this.getModelForFile($tr); + + this._currentFileModel = model; + + $tr.addClass('highlighted'); + + this._detailsView.setFileInfo(model); + this._detailsView.$el.scrollTop(0); + _.defer(OC.Apps.showAppSidebar); + }, + + /** * Event handler for when the window size changed */ _onResize: function() { @@ -315,6 +410,12 @@ delete this._selectedFiles[$tr.data('id')]; this._selectionSummary.remove(data); } + if (this._selectionSummary.getTotal() === 1) { + this._updateDetailsView(_.values(this._selectedFiles)[0].name); + } else { + // show nothing when multiple files are selected + this._updateDetailsView(null); + } this.$el.find('.select-all').prop('checked', this._selectionSummary.getTotal() === this.files.length); }, @@ -350,27 +451,33 @@ this._selectFileEl($tr, !$checkbox.prop('checked')); this.updateSelectionSummary(); } else { - var filename = $tr.attr('data-file'); - var renaming = $tr.data('renaming'); - if (!renaming) { - this.fileActions.currentFile = $tr.find('td'); - var mime = this.fileActions.getCurrentMimeType(); - var type = this.fileActions.getCurrentType(); - var permissions = this.fileActions.getCurrentPermissions(); - var action = this.fileActions.getDefault(mime,type, permissions); - if (action) { - event.preventDefault(); - // also set on global object for legacy apps - window.FileActions.currentFile = this.fileActions.currentFile; - action(filename, { - $file: $tr, - fileList: this, - fileActions: this.fileActions, - dir: $tr.attr('data-path') || this.getCurrentDirectory() - }); + // clicked directly on the name + if (!this._detailsView || $(event.target).is('.nametext') || $(event.target).closest('.nametext').length) { + var filename = $tr.attr('data-file'); + var renaming = $tr.data('renaming'); + if (!renaming) { + this.fileActions.currentFile = $tr.find('td'); + var mime = this.fileActions.getCurrentMimeType(); + var type = this.fileActions.getCurrentType(); + var permissions = this.fileActions.getCurrentPermissions(); + var action = this.fileActions.getDefault(mime,type, permissions); + if (action) { + event.preventDefault(); + // also set on global object for legacy apps + window.FileActions.currentFile = this.fileActions.currentFile; + action(filename, { + $file: $tr, + fileList: this, + fileActions: this.fileActions, + dir: $tr.attr('data-path') || this.getCurrentDirectory() + }); + } + // deselect row + $(event.target).closest('a').blur(); } - // deselect row - $(event.target).closest('a').blur(); + } else { + this._updateDetailsView($tr.attr('data-file')); + event.preventDefault(); } } }, @@ -417,7 +524,21 @@ else { files = _.pluck(this.getSelectedFiles(), 'name'); } - OC.redirect(this.getDownloadUrl(files, dir)); + + var downloadFileaction = $('#selectedActionsList').find('.download'); + + // don't allow a second click on the download action + if(downloadFileaction.hasClass('disabled')) { + event.preventDefault(); + return; + } + + var disableLoadingState = function(){ + OCA.Files.FileActions.updateFileActionSpinner(downloadFileaction, false); + }; + + OCA.Files.FileActions.updateFileActionSpinner(downloadFileaction, true); + OCA.Files.Files.handleDownload(this.getDownloadUrl(files, dir), disableLoadingState); return false; }, @@ -670,7 +791,7 @@ */ _createRow: function(fileData, options) { var td, simpleSize, basename, extension, sizeColor, - icon = OC.Util.replaceSVGIcon(fileData.icon), + icon = OC.MimeType.getIconUrl(fileData.mimetype), name = fileData.name, type = fileData.type || 'file', mtime = parseInt(fileData.mtime, 10), @@ -685,6 +806,10 @@ if (type === 'dir') { mime = mime || 'httpd/unix-directory'; + + if (fileData.mountType && fileData.mountType.indexOf('external') === 0) { + icon = OC.MimeType.getIconUrl('dir-external'); + } } //containing tr @@ -772,6 +897,7 @@ fileData.extraData = fileData.extraData.substr(1); } nameSpan.addClass('extra-data').attr('title', fileData.extraData); + nameSpan.tooltip({placement: 'right'}); } // dirs can show the number of uploaded files if (type === 'dir') { @@ -807,7 +933,7 @@ var formatted; var text; if (mtime > 0) { - formatted = formatDate(mtime); + formatted = OC.Util.formatDate(mtime); text = OC.Util.relativeModifiedDate(mtime); } else { formatted = t('files', 'Unable to determine date'); @@ -818,7 +944,9 @@ "class": "modified", "title": formatted, "style": 'color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')' - }).text(text)); + }).text(text) + .tooltip({placement: 'top'}) + ); tr.find('.filesize').text(simpleSize); tr.append(td); return tr; @@ -950,7 +1078,8 @@ if (fileData.isPreviewAvailable) { var iconDiv = filenameTd.find('.thumbnail'); // lazy load / newly inserted td ? - if (options.animate) { + // the typeof check ensures that the default value of animate is true + if (typeof(options.animate) === 'undefined' || !!options.animate) { this.lazyLoadPreview({ path: path + '/' + fileData.name, mime: mime, @@ -1103,6 +1232,8 @@ sortdirection: this._sortDirection } }); + // close sidebar + this._updateDetailsView(null); var callBack = this.reloadCallback.bind(this); return this._reloadCall.then(callBack, callBack); }, @@ -1122,6 +1253,22 @@ return false; } + // Firewall Blocked request? + if (result.status === 403) { + // Go home + this.changeDirectory('/'); + OC.Notification.show(t('files', 'This operation is forbidden')); + return false; + } + + // Did share service die or something else fail? + if (result.status === 500) { + // Go home + this.changeDirectory('/'); + OC.Notification.show(t('files', 'This directory is unavailable, please check the logs or contact the administrator')); + return false; + } + if (result.status === 404) { // go back home this.changeDirectory('/'); @@ -1172,8 +1319,10 @@ if (!urlSpec.y) { urlSpec.y = this.$table.data('preview-y') || 36; } - urlSpec.y *= window.devicePixelRatio; urlSpec.x *= window.devicePixelRatio; + urlSpec.y *= window.devicePixelRatio; + urlSpec.x = Math.floor(urlSpec.x); + urlSpec.y = Math.floor(urlSpec.y); urlSpec.forceIcon = 0; return OC.generateUrl('/core/preview.png?') + $.param(urlSpec); }, @@ -1194,36 +1343,40 @@ var etag = options.etag; // get mime icon url - OCA.Files.Files.getMimeIcon(mime, function(iconURL) { - var previewURL, - urlSpec = {}; - ready(iconURL); // set mimeicon URL + var iconURL = OC.MimeType.getIconUrl(mime); + var previewURL, + urlSpec = {}; + ready(iconURL); // set mimeicon URL - urlSpec.file = OCA.Files.Files.fixPath(path); + urlSpec.file = OCA.Files.Files.fixPath(path); + if (options.x) { + urlSpec.x = options.x; + } + if (options.y) { + urlSpec.y = options.y; + } - if (etag){ - // use etag as cache buster - urlSpec.c = etag; - } - else { - console.warn('OCA.Files.FileList.lazyLoadPreview(): missing etag argument'); - } + if (etag){ + // use etag as cache buster + urlSpec.c = etag; + } else { + console.warn('OCA.Files.FileList.lazyLoadPreview(): missing etag argument'); + } - previewURL = self.generatePreviewUrl(urlSpec); - 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(){ - // if loading the preview image failed (no preview for the mimetype) then img.width will < 5 - if (img.width > 5) { - ready(previewURL); - } - }; - img.src = previewURL; - }); + previewURL = self.generatePreviewUrl(urlSpec); + 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(){ + // if loading the preview image failed (no preview for the mimetype) then img.width will < 5 + if (img.width > 5) { + ready(previewURL); + } + }; + img.src = previewURL; }, setDirectoryPermissions: function(permissions) { @@ -1337,9 +1490,7 @@ } _.each(fileNames, function(fileName) { var $tr = self.findFileEl(fileName); - var $thumbEl = $tr.find('.thumbnail'); - var oldBackgroundImage = $thumbEl.css('background-image'); - $thumbEl.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')'); + self.showFileBusyState($tr, true); // TODO: improve performance by sending all file names in a single call $.post( OC.filePath('files', 'ajax', 'move.php'), @@ -1381,7 +1532,7 @@ } else { OC.dialogs.alert(t('files', 'Error moving file'), t('files', 'Error')); } - $thumbEl.css('background-image', oldBackgroundImage); + self.showFileBusyState($tr, false); } ); }); @@ -1427,7 +1578,7 @@ }; function restore() { - input.tipsy('hide'); + input.tooltip('hide'); tr.data('renaming',false); form.remove(); td.children('a.name').show(); @@ -1442,14 +1593,13 @@ try { var newName = input.val(); - var $thumbEl = tr.find('.thumbnail'); - input.tipsy('hide'); + input.tooltip('hide'); form.remove(); if (newName !== oldname) { checkInput(); // mark as loading (temp element) - $thumbEl.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')'); + self.showFileBusyState(tr, true); tr.attr('data-file', newName); var basename = newName; if (newName.indexOf('.') > 0 && tr.data('type') !== 'dir') { @@ -1457,7 +1607,6 @@ } td.find('a.name span.nametext').text(basename); td.children('a.name').show(); - tr.find('.fileactions, .action').addClass('hidden'); $.ajax({ url: OC.filePath('files','ajax','rename.php'), @@ -1484,6 +1633,7 @@ tr.remove(); tr = self.add(fileInfo, {updateSummary: false, silent: true}); self.$fileList.trigger($.Event('fileActionsReady', {fileList: self, $files: $(tr)})); + self._updateDetailsView(fileInfo.name); } }); } else { @@ -1495,8 +1645,8 @@ } } catch (error) { input.attr('title', error); - input.tipsy({gravity: 'w', trigger: 'manual'}); - input.tipsy('show'); + input.tooltip({placement: 'left', trigger: 'manual'}); + input.tooltip('show'); input.addClass('error'); } return false; @@ -1505,12 +1655,12 @@ // verify filename on typing try { checkInput(); - input.tipsy('hide'); + input.tooltip('hide'); input.removeClass('error'); } catch (error) { input.attr('title', error); - input.tipsy({gravity: 'w', trigger: 'manual'}); - input.tipsy('show'); + input.tooltip({placement: 'left', trigger: 'manual'}); + input.tooltip('show'); input.addClass('error'); } if (event.keyCode === 27) { @@ -1528,6 +1678,44 @@ inList:function(file) { return this.findFileEl(file).length; }, + + /** + * Shows busy state on a given file row or multiple + * + * @param {string|Array.<string>} files file name or array of file names + * @param {bool} [busy=true] busy state, true for busy, false to remove busy state + * + * @since 8.2 + */ + showFileBusyState: function(files, state) { + var self = this; + if (!_.isArray(files)) { + files = [files]; + } + + if (_.isUndefined(state)) { + state = true; + } + + _.each(files, function($tr) { + // jquery element already ? + if (!$tr.is) { + $tr = self.findFileEl($tr); + } + + var $thumbEl = $tr.find('.thumbnail'); + $tr.toggleClass('busy', state); + + if (state) { + $thumbEl.attr('data-oldimage', $thumbEl.css('background-image')); + $thumbEl.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')'); + } else { + $thumbEl.css('background-image', $thumbEl.attr('data-oldimage')); + $thumbEl.removeAttr('data-oldimage'); + } + }); + }, + /** * Delete the given files from the given dir * @param files file names list (without path) @@ -1541,9 +1729,8 @@ files=[files]; } if (files) { + this.showFileBusyState(files, true); for (var i=0; i<files.length; i++) { - var deleteAction = this.findFileEl(files[i]).children("td.date").children(".action.delete"); - deleteAction.removeClass('icon-delete').addClass('icon-loading-small'); } } // Finish any existing actions @@ -1561,7 +1748,7 @@ // no files passed, delete all in current dir params.allfiles = true; // show spinner for all files - this.$fileList.find('tr>td.date .action.delete').removeClass('icon-delete').addClass('icon-loading-small'); + this.$fileList.find('tr').addClass('busy'); } $.post(OC.filePath('files', 'ajax', 'delete.php'), @@ -1604,8 +1791,7 @@ } else { $.each(files,function(index,file) { - var deleteAction = self.findFileEl(file).find('.action.delete'); - deleteAction.removeClass('icon-loading-small').addClass('icon-delete'); + self.$fileList.find('tr').removeClass('busy'); }); } } @@ -1623,7 +1809,8 @@ updateEmptyContent: function() { var permissions = this.getDirectoryPermissions(); var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0; - this.$el.find('#emptycontent').toggleClass('hidden', !isCreatable || !this.isEmpty); + this.$el.find('#emptycontent').toggleClass('hidden', !this.isEmpty); + this.$el.find('#emptycontent .uploadmessage').toggleClass('hidden', !isCreatable || !this.isEmpty); this.$el.find('#filestable thead th').toggleClass('hidden', this.isEmpty); }, /** @@ -1639,6 +1826,7 @@ } this.$table.addClass('hidden'); + this.$el.find('#emptycontent').addClass('hidden'); $mask = $('<div class="mask transparent"></div>'); @@ -1704,11 +1892,13 @@ if (this._filter && this.fileSummary.summary.totalDirs + this.fileSummary.summary.totalFiles === 0) { this.$el.find('#filestable thead th').addClass('hidden'); this.$el.find('#emptycontent').addClass('hidden'); + $('#searchresults').addClass('filter-empty'); if ( $('#searchresults').length === 0 || $('#searchresults').hasClass('hidden') ) { this.$el.find('.nofilterresults').removeClass('hidden'). find('p').text(t('files', "No entries in this folder match '{filter}'", {filter:this._filter}, null, {'escape': false})); } } else { + $('#searchresults').removeClass('filter-empty'); this.$el.find('#filestable thead th').toggleClass('hidden', this.isEmpty); if (!this.$el.find('.mask').exists()) { this.$el.find('#emptycontent').toggleClass('hidden', !this.isEmpty); @@ -1740,6 +1930,8 @@ updateSelectionSummary: function() { var summary = this._selectionSummary.summary; var canDelete; + var selection; + if (summary.totalFiles === 0 && summary.totalDirs === 0) { this.$el.find('#headerName a.name>span:first').text(t('files','Name')); this.$el.find('#headerSize a>span:first').text(t('files','Size')); @@ -1751,16 +1943,22 @@ canDelete = (this.getDirectoryPermissions() & OC.PERMISSION_DELETE) && this.isSelectedDeletable(); this.$el.find('.selectedActions').removeClass('hidden'); this.$el.find('#headerSize a>span:first').text(OC.Util.humanFileSize(summary.totalSize)); - var selection = ''; - if (summary.totalDirs > 0) { - selection += n('files', '%n folder', '%n folders', summary.totalDirs); - if (summary.totalFiles > 0) { - selection += ' & '; - } - } - if (summary.totalFiles > 0) { - selection += n('files', '%n file', '%n files', summary.totalFiles); + + var directoryInfo = n('files', '%n folder', '%n folders', summary.totalDirs); + var fileInfo = n('files', '%n file', '%n files', summary.totalFiles); + + if (summary.totalDirs > 0 && summary.totalFiles > 0) { + var selectionVars = { + dirs: directoryInfo, + files: fileInfo + }; + selection = t('files', '{dirs} and {files}', selectionVars); + } else if (summary.totalDirs > 0) { + selection = directoryInfo; + } else { + selection = fileInfo; } + this.$el.find('#headerName a.name>span:first').text(selection); this.$el.find('#modified a>span:first').text(''); this.$el.find('table').addClass('multiselect'); @@ -2136,6 +2334,20 @@ } }); + }, + + /** + * Register a tab view to be added to all views + */ + registerTabView: function(tabView) { + this._detailsView.addTabView(tabView); + }, + + /** + * Register a detail view to be added to all views + */ + registerDetailView: function(detailView) { + this._detailsView.addDetailView(detailView); } }; diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 68e9315954f..55fdb96ebda 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -61,8 +61,10 @@ 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); + $('#upload.button').attr('data-original-title', response.data.maxHumanFilesize); $('#usedSpacePercent').val(response.data.usedSpacePercent); + $('#owner').val(response.data.owner); + $('#ownerDisplayName').val(response.data.ownerDisplayName); Files.displayStorageWarnings(); } if (response[0] === undefined) { @@ -70,7 +72,7 @@ } if (response[0].uploadMaxFilesize !== undefined) { $('#max_upload').val(response[0].uploadMaxFilesize); - $('#upload.button').attr('original-title', response[0].maxHumanFilesize); + $('#upload.button').attr('data-original-title', response[0].maxHumanFilesize); $('#usedSpacePercent').val(response[0].usedSpacePercent); Files.displayStorageWarnings(); } @@ -109,12 +111,24 @@ return; } - var usedSpacePercent = $('#usedSpacePercent').val(); + var usedSpacePercent = $('#usedSpacePercent').val(), + owner = $('#owner').val(), + ownerDisplayName = $('#ownerDisplayName').val(); if (usedSpacePercent > 98) { + if (owner !== oc_current_user) { + OC.Notification.showTemporary(t('files', 'Storage of {owner} is full, files can not be updated or synced anymore!', + { owner: ownerDisplayName })); + return; + } OC.Notification.show(t('files', 'Your storage is full, files can not be updated or synced anymore!')); return; } if (usedSpacePercent > 90) { + if (owner !== oc_current_user) { + OC.Notification.showTemporary(t('files', 'Storage of {owner} is almost full ({usedSpacePercent}%)', + { usedSpacePercent: usedSpacePercent, owner: ownerDisplayName })); + return; + } OC.Notification.show(t('files', 'Your storage is almost full ({usedSpacePercent}%)', {usedSpacePercent: usedSpacePercent})); } @@ -149,18 +163,14 @@ return OC.filePath('files', 'ajax', action + '.php') + q; }, + /** + * Fetch the icon url for the mimetype + * @param {string} mime The mimetype + * @param {Files~mimeicon} ready Function to call when mimetype is retrieved + * @deprecated use OC.MimeType.getIconUrl(mime) + */ 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) { - if(OC.Util.hasSVGSupport()){ - path = path.substr(0, path.length-4) + '.svg'; - } - Files.getMimeIcon.cache[mime]=path; - ready(Files.getMimeIcon.cache[mime]); - }); - } + ready(OC.MimeType.getIconUrl(mime)); }, /** @@ -197,7 +207,6 @@ * Initialize the files view */ initialize: function() { - Files.getMimeIcon.cache = {}; Files.bindKeyboardShortcuts(document, $); // TODO: move file list related code (upload) to OCA.Files.FileList @@ -225,7 +234,6 @@ // display storage warnings setTimeout(Files.displayStorageWarnings, 100); - OC.Notification.setDefault(Files.displayStorageWarnings); // only possible at the moment if user is logged in or the files app is loaded if (OC.currentUser && OCA.Files.App) { @@ -256,14 +264,41 @@ $('#webdavurl').select(); }); + $('#upload').tooltip({placement:'right'}); + //FIXME scroll to and highlight preselected file /* if (getURLParameter('scrollto')) { FileList.scrollTo(getURLParameter('scrollto')); } */ + }, + + /** + * Handles the download and calls the callback function once the download has started + * - browser sends download request and adds parameter with a token + * - server notices this token and adds a set cookie to the download response + * - browser now adds this cookie for the domain + * - JS periodically checks for this cookie and then knows when the download has started to call the callback + * + * @param {string} url download URL + * @param {function} callback function to call once the download has started + */ + handleDownload: function(url, callback) { + var randomToken = Math.random().toString(36).substring(2), + checkForDownloadCookie = function() { + if (!OC.Util.isCookieSetToValue('ocDownloadStarted', randomToken)){ + return false; + } else { + callback(); + return true; + } + }; + + OC.redirect(url + '&downloadStartSecret=' + randomToken); + OC.Util.waitFor(checkForDownloadCookie, 500); } - } + }; Files._updateStorageStatisticsDebounced = _.debounce(Files._updateStorageStatistics, 250); OCA.Files.Files = Files; diff --git a/apps/files/js/mainfileinfodetailview.js b/apps/files/js/mainfileinfodetailview.js new file mode 100644 index 00000000000..6910e5f2be5 --- /dev/null +++ b/apps/files/js/mainfileinfodetailview.js @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + var TEMPLATE = + '<a href="#" class="thumbnail action-default"></a><div title="{{name}}" class="fileName ellipsis">{{name}}</div>' + + '<div class="file-details ellipsis">' + + ' <a href="#" ' + + ' alt="{{starAltText}}"' + + ' class="action action-favorite favorite">' + + ' <img class="svg" src="{{starIcon}}" />' + + ' </a>' + + ' <span class="size" title="{{altSize}}">{{size}}</span>, <span class="date" title="{{altDate}}">{{date}}</span>' + + '</div>'; + + /** + * @class OCA.Files.MainFileInfoDetailView + * @classdesc + * + * Displays main details about a file + * + */ + var MainFileInfoDetailView = OCA.Files.DetailFileInfoView.extend( + /** @lends OCA.Files.MainFileInfoDetailView.prototype */ { + + className: 'mainFileInfoView', + + /** + * Associated file list instance, for file actions + * + * @type {OCA.Files.FileList} + */ + _fileList: null, + + /** + * File actions + * + * @type {OCA.Files.FileActions} + */ + _fileActions: null, + + events: { + 'click a.action-favorite': '_onClickFavorite', + 'click a.action-default': '_onClickDefaultAction' + }, + + template: function(data) { + if (!this._template) { + this._template = Handlebars.compile(TEMPLATE); + } + return this._template(data); + }, + + initialize: function(options) { + options = options || {}; + this._fileList = options.fileList; + this._fileActions = options.fileActions; + if (!this._fileList) { + throw 'Missing requird parameter "fileList"'; + } + if (!this._fileActions) { + throw 'Missing requird parameter "fileActions"'; + } + }, + + _onClickFavorite: function(event) { + event.preventDefault(); + this._fileActions.triggerAction('Favorite', this.model, this._fileList); + }, + + _onClickDefaultAction: function(event) { + event.preventDefault(); + this._fileActions.triggerAction(null, this.model, this._fileList); + }, + + _onModelChanged: function() { + // simply re-render + this.render(); + }, + + setFileInfo: function(fileInfo) { + if (this.model) { + this.model.off('change', this._onModelChanged, this); + } + this.model = fileInfo; + if (this.model) { + this.model.on('change', this._onModelChanged, this); + } + this.render(); + }, + + /** + * Renders this details view + */ + render: function() { + if (this.model) { + var isFavorite = (this.model.get('tags') || []).indexOf(OC.TAG_FAVORITE) >= 0; + this.$el.html(this.template({ + nameLabel: t('files', 'Name'), + name: this.model.get('name'), + pathLabel: t('files', 'Path'), + path: this.model.get('path'), + sizeLabel: t('files', 'Size'), + size: OC.Util.humanFileSize(this.model.get('size'), true), + altSize: n('files', '%n byte', '%n bytes', this.model.get('size')), + dateLabel: t('files', 'Modified'), + altDate: OC.Util.formatDate(this.model.get('mtime')), + date: OC.Util.relativeModifiedDate(this.model.get('mtime')), + starAltText: isFavorite ? t('files', 'Favorited') : t('files', 'Favorite'), + starIcon: OC.imagePath('core', isFavorite ? 'actions/starred' : 'actions/star') + })); + + // TODO: we really need OC.Previews + var $iconDiv = this.$el.find('.thumbnail'); + if (!this.model.isDirectory()) { + // TODO: inject utility class? + FileList.lazyLoadPreview({ + path: this.model.getFullPath(), + mime: this.model.get('mimetype'), + etag: this.model.get('etag'), + x: 50, + y: 50, + callback: function(previewUrl) { + $iconDiv.css('background-image', 'url("' + previewUrl + '")'); + } + }); + } else { + // TODO: special icons / shared / external + $iconDiv.css('background-image', 'url("' + OC.MimeType.getIconUrl('dir') + '")'); + } + this.$el.find('[title]').tooltip({placement: 'bottom'}); + } else { + this.$el.empty(); + } + this.delegateEvents(); + } + }); + + OCA.Files.MainFileInfoDetailView = MainFileInfoDetailView; +})(); diff --git a/apps/files/js/navigation.js b/apps/files/js/navigation.js index be385f21f50..83cd556c89a 100644 --- a/apps/files/js/navigation.js +++ b/apps/files/js/navigation.js @@ -124,7 +124,7 @@ var $target = $(ev.target); var itemId = $target.closest('li').attr('data-id'); this.setActiveItem(itemId); - return false; + ev.preventDefault(); } }; diff --git a/apps/files/js/tagsplugin.js b/apps/files/js/tagsplugin.js index 293e25176f3..ed1105a1706 100644 --- a/apps/files/js/tagsplugin.js +++ b/apps/files/js/tagsplugin.js @@ -77,10 +77,11 @@ var self = this; // register "star" action fileActions.registerAction({ - name: 'favorite', + name: 'Favorite', displayName: 'Favorite', mime: 'all', permissions: OC.PERMISSION_READ, + type: OCA.Files.FileActions.TYPE_INLINE, render: function(actionSpec, isDefault, context) { var $file = context.$file; var isFavorite = $file.data('favorite') === true; @@ -107,6 +108,8 @@ } toggleStar($actionEl, !isFavorite); + context.fileInfoModel.set('tags', tags); + self.applyFileTags( dir + '/' + fileName, tags, @@ -144,6 +147,12 @@ $tr.find('td:first').prepend('<div class="favorite"></div>'); return $tr; }; + var oldElementToFile = fileList.elementToFile; + fileList.elementToFile = function($el) { + var fileInfo = oldElementToFile.apply(this, arguments); + fileInfo.tags = $el.attr('data-tags') || []; + return fileInfo; + }; }, attach: function(fileList) { diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js index 72f82795ea2..412f339a4b3 100644 --- a/apps/files/l10n/ar.js +++ b/apps/files/l10n/ar.js @@ -42,9 +42,6 @@ OC.L10N.register( "File name cannot be empty." : "اسم الملف لا يجوز أن يكون فارغا", "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." : "تم تعطيل التشفير لكن ملفاتك لا تزال مشفرة. فضلا اذهب إلى الإعدادات الشخصية لإزالة التشفير عن ملفاتك.", "{dirs} and {files}" : "{dirs} و {files}", "Favorite" : "المفضلة", "A new file or folder has been <strong>created</strong>" : "تم <strong> إنشاء</strong> ملف جديد أو مجلد ", diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json index c1f448e7a88..812769a4fb2 100644 --- a/apps/files/l10n/ar.json +++ b/apps/files/l10n/ar.json @@ -40,9 +40,6 @@ "File name cannot be empty." : "اسم الملف لا يجوز أن يكون فارغا", "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." : "تم تعطيل التشفير لكن ملفاتك لا تزال مشفرة. فضلا اذهب إلى الإعدادات الشخصية لإزالة التشفير عن ملفاتك.", "{dirs} and {files}" : "{dirs} و {files}", "Favorite" : "المفضلة", "A new file or folder has been <strong>created</strong>" : "تم <strong> إنشاء</strong> ملف جديد أو مجلد ", diff --git a/apps/files/l10n/ast.js b/apps/files/l10n/ast.js index 980e1275ffd..297ebd60484 100644 --- a/apps/files/l10n/ast.js +++ b/apps/files/l10n/ast.js @@ -42,8 +42,12 @@ OC.L10N.register( "Delete" : "Desaniciar", "Disconnect storage" : "Desconeutar almacenamientu", "Unshare" : "Dexar de compartir", + "No permission to delete" : "Ensin permisos pa desaniciar", "Download" : "Descargar", + "Select" : "Esbillar", "Pending" : "Pendiente", + "Unable to determine date" : "Imposible determinar la fecha", + "This operation is forbidden" : "La operación ta prohibida", "Error moving file." : "Fallu moviendo'l ficheru.", "Error moving file" : "Fallu moviendo'l ficheru", "Error" : "Fallu", @@ -60,9 +64,6 @@ OC.L10N.register( "File name cannot be empty." : "El nome de ficheru nun pue quedar baleru.", "Your storage is full, files can not be updated or synced anymore!" : "L'almacenamientu ta completu, ¡yá nun se pueden anovar o sincronizar ficheros!", "Your storage is almost full ({usedSpacePercent}%)" : "L'almacenamientu ta casi completu ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicación Encryption ta habilitada pero les tos claves nun s'aniciaron, por favor zarra sesión y aníciala de nueves", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Clave privada non válida pa Encryption. Por favor, anueva la to contraseña de clave nos tos axustes personales pa recuperar l'accesu a los tos ficheros cifraos.", - "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Deshabilitose'l cifráu pero los tos ficheros tovía tán cifraos. Por favor, vete a los axustes personales pa descrifrar los tos ficheros.", "{dirs} and {files}" : "{dirs} y {files}", "Favorite" : "Favoritu", "A new file or folder has been <strong>created</strong>" : "<strong>Creóse</strong> un ficheru o carpeta nuevos", diff --git a/apps/files/l10n/ast.json b/apps/files/l10n/ast.json index afc7963cee3..b242d62a521 100644 --- a/apps/files/l10n/ast.json +++ b/apps/files/l10n/ast.json @@ -40,8 +40,12 @@ "Delete" : "Desaniciar", "Disconnect storage" : "Desconeutar almacenamientu", "Unshare" : "Dexar de compartir", + "No permission to delete" : "Ensin permisos pa desaniciar", "Download" : "Descargar", + "Select" : "Esbillar", "Pending" : "Pendiente", + "Unable to determine date" : "Imposible determinar la fecha", + "This operation is forbidden" : "La operación ta prohibida", "Error moving file." : "Fallu moviendo'l ficheru.", "Error moving file" : "Fallu moviendo'l ficheru", "Error" : "Fallu", @@ -58,9 +62,6 @@ "File name cannot be empty." : "El nome de ficheru nun pue quedar baleru.", "Your storage is full, files can not be updated or synced anymore!" : "L'almacenamientu ta completu, ¡yá nun se pueden anovar o sincronizar ficheros!", "Your storage is almost full ({usedSpacePercent}%)" : "L'almacenamientu ta casi completu ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicación Encryption ta habilitada pero les tos claves nun s'aniciaron, por favor zarra sesión y aníciala de nueves", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Clave privada non válida pa Encryption. Por favor, anueva la to contraseña de clave nos tos axustes personales pa recuperar l'accesu a los tos ficheros cifraos.", - "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Deshabilitose'l cifráu pero los tos ficheros tovía tán cifraos. Por favor, vete a los axustes personales pa descrifrar los tos ficheros.", "{dirs} and {files}" : "{dirs} y {files}", "Favorite" : "Favoritu", "A new file or folder has been <strong>created</strong>" : "<strong>Creóse</strong> un ficheru o carpeta nuevos", diff --git a/apps/files/l10n/az.js b/apps/files/l10n/az.js index 60f4a8d0f87..3f76fd9a328 100644 --- a/apps/files/l10n/az.js +++ b/apps/files/l10n/az.js @@ -42,6 +42,7 @@ OC.L10N.register( "Delete" : "Sil", "Disconnect storage" : "Daşıyıcını ayır", "Unshare" : "Paylaşımı durdur", + "No permission to delete" : "Silmək üçün yetki yoxdur", "Download" : "Yüklə", "Select" : "Seç", "Pending" : "Gözləmə", @@ -63,9 +64,6 @@ OC.L10N.register( "File name cannot be empty." : "Faylın adı boş ola bilməz.", "Your storage is full, files can not be updated or synced anymore!" : "Sizin deponuz doludur, fayllar artıq yenilənə və sinxronizasiya edilə bilməz!", "Your storage is almost full ({usedSpacePercent}%)" : "Sizin depo depo demək olar ki, doludur ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Proqram şifrələnməsi işə salınıb ancaq, sizin açarlar inisializasiya edilməyib. Xahiş edilir çıxıb yenidən daxil olasınız", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifrələnmə proqramı üçün yalnış şəxsi açar. Xahiş olunur öz şəxsi quraşdırmalarınızda şəxsi açarınızı yeniləyəsiniz ki, şifrələnmiş fayllara yetki ala biləsiniz. ", - "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Şifrələnmə söndürülüb ancaq, sizin fayllar hələdə şifrələnmiş vəziyyətdədir. Deşifrə etmək üçün xahiş olunur, şəxsi quraşdırılmalarınıza baxasınız.", "_matches '{filter}'_::_match '{filter}'_" : ["uyğun '{filter}'","uyğun '{filter}'"], "{dirs} and {files}" : "{dirs} və {files}", "Favorited" : "İstəkləndi", @@ -73,6 +71,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Qeydlərin yenilənməsi müddətində səhv baş verdi ", "A new file or folder has been <strong>created</strong>" : "Yeni fayl və ya direktoriya <strong>yaradılmışdır</strong>", "A file or folder has been <strong>changed</strong>" : "Fayl və ya direktoriya <strong>dəyişdirilib</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>sevimli faylların</strong> yaradılması və silinməsi haqqında olan xəbərdarlıqları limitlə <em>(Yalnız axınlar)</em>", "A file or folder has been <strong>deleted</strong>" : "Fayl və ya direktoriya <strong>silinib</strong>", "A file or folder has been <strong>restored</strong>" : "Fayl yada qovluq geriyə <strong>qaytarıldı</strong>", "You created %1$s" : "Siz yaratdınız %1$s", diff --git a/apps/files/l10n/az.json b/apps/files/l10n/az.json index d6bac687732..ec7c41a00f9 100644 --- a/apps/files/l10n/az.json +++ b/apps/files/l10n/az.json @@ -40,6 +40,7 @@ "Delete" : "Sil", "Disconnect storage" : "Daşıyıcını ayır", "Unshare" : "Paylaşımı durdur", + "No permission to delete" : "Silmək üçün yetki yoxdur", "Download" : "Yüklə", "Select" : "Seç", "Pending" : "Gözləmə", @@ -61,9 +62,6 @@ "File name cannot be empty." : "Faylın adı boş ola bilməz.", "Your storage is full, files can not be updated or synced anymore!" : "Sizin deponuz doludur, fayllar artıq yenilənə və sinxronizasiya edilə bilməz!", "Your storage is almost full ({usedSpacePercent}%)" : "Sizin depo depo demək olar ki, doludur ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Proqram şifrələnməsi işə salınıb ancaq, sizin açarlar inisializasiya edilməyib. Xahiş edilir çıxıb yenidən daxil olasınız", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifrələnmə proqramı üçün yalnış şəxsi açar. Xahiş olunur öz şəxsi quraşdırmalarınızda şəxsi açarınızı yeniləyəsiniz ki, şifrələnmiş fayllara yetki ala biləsiniz. ", - "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Şifrələnmə söndürülüb ancaq, sizin fayllar hələdə şifrələnmiş vəziyyətdədir. Deşifrə etmək üçün xahiş olunur, şəxsi quraşdırılmalarınıza baxasınız.", "_matches '{filter}'_::_match '{filter}'_" : ["uyğun '{filter}'","uyğun '{filter}'"], "{dirs} and {files}" : "{dirs} və {files}", "Favorited" : "İstəkləndi", @@ -71,6 +69,7 @@ "An error occurred while trying to update the tags" : "Qeydlərin yenilənməsi müddətində səhv baş verdi ", "A new file or folder has been <strong>created</strong>" : "Yeni fayl və ya direktoriya <strong>yaradılmışdır</strong>", "A file or folder has been <strong>changed</strong>" : "Fayl və ya direktoriya <strong>dəyişdirilib</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>sevimli faylların</strong> yaradılması və silinməsi haqqında olan xəbərdarlıqları limitlə <em>(Yalnız axınlar)</em>", "A file or folder has been <strong>deleted</strong>" : "Fayl və ya direktoriya <strong>silinib</strong>", "A file or folder has been <strong>restored</strong>" : "Fayl yada qovluq geriyə <strong>qaytarıldı</strong>", "You created %1$s" : "Siz yaratdınız %1$s", diff --git a/apps/files/l10n/be.js b/apps/files/l10n/be.js index aa9352c2f18..77e9a4d6071 100644 --- a/apps/files/l10n/be.js +++ b/apps/files/l10n/be.js @@ -4,4 +4,4 @@ OC.L10N.register( "Error" : "Памылка", "Settings" : "Налады" }, -"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); +"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/apps/files/l10n/be.json b/apps/files/l10n/be.json index 27397b9da24..27c2988b703 100644 --- a/apps/files/l10n/be.json +++ b/apps/files/l10n/be.json @@ -1,5 +1,5 @@ { "translations": { "Error" : "Памылка", "Settings" : "Налады" -},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" +},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" }
\ No newline at end of file diff --git a/apps/files/l10n/bg_BG.js b/apps/files/l10n/bg_BG.js index ea6adc66004..b43dced5cf8 100644 --- a/apps/files/l10n/bg_BG.js +++ b/apps/files/l10n/bg_BG.js @@ -63,9 +63,6 @@ OC.L10N.register( "File name cannot be empty." : "Името на файла не може да бъде оставено празно.", "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." : "Криптирането е изключено, но файлове ти са все още защитени. Моля, отиди на лични найстройки, за да разшфроваш файловете.", "_matches '{filter}'_::_match '{filter}'_" : ["пасва на '{filter}'","пасват на '{filter}'\n "], "{dirs} and {files}" : "{dirs} и {files}", "Favorited" : "Отбелязано в любими", diff --git a/apps/files/l10n/bg_BG.json b/apps/files/l10n/bg_BG.json index d8f205bea6d..266f4f08cdf 100644 --- a/apps/files/l10n/bg_BG.json +++ b/apps/files/l10n/bg_BG.json @@ -61,9 +61,6 @@ "File name cannot be empty." : "Името на файла не може да бъде оставено празно.", "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." : "Криптирането е изключено, но файлове ти са все още защитени. Моля, отиди на лични найстройки, за да разшфроваш файловете.", "_matches '{filter}'_::_match '{filter}'_" : ["пасва на '{filter}'","пасват на '{filter}'\n "], "{dirs} and {files}" : "{dirs} и {files}", "Favorited" : "Отбелязано в любими", diff --git a/apps/files/l10n/bs.js b/apps/files/l10n/bs.js index 4063e10f41e..8856725072c 100644 --- a/apps/files/l10n/bs.js +++ b/apps/files/l10n/bs.js @@ -62,9 +62,6 @@ OC.L10N.register( "File name cannot be empty." : "Naziv datoteke ne može biti prazan", "Your storage is full, files can not be updated or synced anymore!" : "Vaša pohrana je puna, datoteke više nije moguće ažurirati niti sinhronizirati!", "Your storage is almost full ({usedSpacePercent}%)" : "Vaš prostor za pohranu je skoro pun ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je uključena, ali vaši ključevi nisu inicializirani, molim odjavite se i 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." : "Neispravan privatni ključ za šifriranje. Molim ažurirajte lozinku svoga privatnog ključa u svojim osobnim postavkama da biste obnovili pristup svojim šifriranim datotekama.", - "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogućeno, ali vaše su datoteke još uvijek šifrirane. Molimo, odite u osobne postavke da biste dešifrirali svoje datoteke.", "{dirs} and {files}" : "{dirs} i {files}", "Favorited" : "Favorizovano", "Favorite" : "Favorit", diff --git a/apps/files/l10n/bs.json b/apps/files/l10n/bs.json index d4bf9ea3721..30a38102a69 100644 --- a/apps/files/l10n/bs.json +++ b/apps/files/l10n/bs.json @@ -60,9 +60,6 @@ "File name cannot be empty." : "Naziv datoteke ne može biti prazan", "Your storage is full, files can not be updated or synced anymore!" : "Vaša pohrana je puna, datoteke više nije moguće ažurirati niti sinhronizirati!", "Your storage is almost full ({usedSpacePercent}%)" : "Vaš prostor za pohranu je skoro pun ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je uključena, ali vaši ključevi nisu inicializirani, molim odjavite se i 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." : "Neispravan privatni ključ za šifriranje. Molim ažurirajte lozinku svoga privatnog ključa u svojim osobnim postavkama da biste obnovili pristup svojim šifriranim datotekama.", - "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogućeno, ali vaše su datoteke još uvijek šifrirane. Molimo, odite u osobne postavke da biste dešifrirali svoje datoteke.", "{dirs} and {files}" : "{dirs} i {files}", "Favorited" : "Favorizovano", "Favorite" : "Favorit", diff --git a/apps/files/l10n/ca.js b/apps/files/l10n/ca.js index 4f9bb23032e..fc207dd6bb2 100644 --- a/apps/files/l10n/ca.js +++ b/apps/files/l10n/ca.js @@ -42,14 +42,17 @@ OC.L10N.register( "Delete" : "Esborra", "Disconnect storage" : "Desonnecta l'emmagatzematge", "Unshare" : "Deixa de compartir", + "No permission to delete" : "Sense permís per esborrar", "Download" : "Baixa", "Select" : "Selecciona", "Pending" : "Pendent", + "Unable to determine date" : "No s'ha pogut determinar la data", "Error moving file." : "Error en moure el fitxer.", "Error moving file" : "Error en moure el fitxer", "Error" : "Error", "Could not rename file" : "No es pot canviar el nom de fitxer", "Error deleting file." : "Error en esborrar el fitxer.", + "No entries in this folder match '{filter}'" : "No hi ha resultats que coincideixin amb '{filter}'", "Name" : "Nom", "Size" : "Mida", "Modified" : "Modificat", @@ -59,15 +62,18 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Pujant %n fitxer","Pujant %n fitxers"], "\"{name}\" is an invalid file name." : "\"{name}\" no es un fitxer vàlid.", "File name cannot be empty." : "El nom del fitxer no pot ser buit.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'emmagatzematge de {owner} està ple, els arxius no es poden actualitzar o sincronitzar més!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Emmagatzematge de {owner} està gairebé ple ({usedSpacePercent}%)", "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.", + "_matches '{filter}'_::_match '{filter}'_" : ["coincidències '{filter}'","coincidència '{filter}'"], "{dirs} and {files}" : "{dirs} i {files}", + "Favorited" : "Agregat a favorits", "Favorite" : "Preferits", + "An error occurred while trying to update the tags" : "S'ha produït un error en tractar d'actualitzar les etiquetes", "A new file or folder has been <strong>created</strong>" : "S'ha <strong>creat</strong> un nou fitxer o una nova carpeta", "A file or folder has been <strong>changed</strong>" : "S'ha <strong>canviat</strong> un fitxer o una carpeta", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar les notificacions sobre la creació i canvis dels seus <strong>arxius favorits</strong><em>(solament Stream)</em>", "A file or folder has been <strong>deleted</strong>" : "S'ha <strong>elminiat</strong> un fitxer o una carpeta", "A file or folder has been <strong>restored</strong>" : "S'ha <strong>restaurat</strong> un fitxer o una carpeta", "You created %1$s" : "Has creat %1$s", @@ -86,6 +92,7 @@ OC.L10N.register( "Maximum upload size" : "Mida màxima de pujada", "max. possible: " : "màxim possible:", "Save" : "Desa", + "Can not be edited from here due to insufficient permissions." : "No es pot editar des d'aquí per permisos insuficients.", "Settings" : "Arranjament", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Useu aquesta adreça per <a href=\"%s\" target=\"_blank\">accedir als fitxers via WebDAV</a>", @@ -96,9 +103,15 @@ OC.L10N.register( "Folder" : "Carpeta", "Upload" : "Puja", "Cancel upload" : "Cancel·la la pujada", + "No files in here" : "No hi ha arxius", + "Upload some content or sync with your devices!" : "Pugi continguts o sincronitzi els seus dispositius.", + "No entries found in this folder" : "No hi ha entrades en aquesta carpeta", + "Select all" : "Seleccionar tot", "Upload too large" : "La pujada és massa gran", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor", "Files are being scanned, please wait." : "S'estan escanejant els fitxers, espereu", - "Currently scanning" : "Actualment escanejant" + "Currently scanning" : "Actualment escanejant", + "No favorites" : "No hi ha favorits", + "Files and folders you mark as favorite will show up here" : "Aquí apareixeran els arxius i carpetes que vostè marqui com favorits" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json index 24b7321f118..052e9ecb21b 100644 --- a/apps/files/l10n/ca.json +++ b/apps/files/l10n/ca.json @@ -40,14 +40,17 @@ "Delete" : "Esborra", "Disconnect storage" : "Desonnecta l'emmagatzematge", "Unshare" : "Deixa de compartir", + "No permission to delete" : "Sense permís per esborrar", "Download" : "Baixa", "Select" : "Selecciona", "Pending" : "Pendent", + "Unable to determine date" : "No s'ha pogut determinar la data", "Error moving file." : "Error en moure el fitxer.", "Error moving file" : "Error en moure el fitxer", "Error" : "Error", "Could not rename file" : "No es pot canviar el nom de fitxer", "Error deleting file." : "Error en esborrar el fitxer.", + "No entries in this folder match '{filter}'" : "No hi ha resultats que coincideixin amb '{filter}'", "Name" : "Nom", "Size" : "Mida", "Modified" : "Modificat", @@ -57,15 +60,18 @@ "_Uploading %n file_::_Uploading %n files_" : ["Pujant %n fitxer","Pujant %n fitxers"], "\"{name}\" is an invalid file name." : "\"{name}\" no es un fitxer vàlid.", "File name cannot be empty." : "El nom del fitxer no pot ser buit.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'emmagatzematge de {owner} està ple, els arxius no es poden actualitzar o sincronitzar més!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Emmagatzematge de {owner} està gairebé ple ({usedSpacePercent}%)", "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.", + "_matches '{filter}'_::_match '{filter}'_" : ["coincidències '{filter}'","coincidència '{filter}'"], "{dirs} and {files}" : "{dirs} i {files}", + "Favorited" : "Agregat a favorits", "Favorite" : "Preferits", + "An error occurred while trying to update the tags" : "S'ha produït un error en tractar d'actualitzar les etiquetes", "A new file or folder has been <strong>created</strong>" : "S'ha <strong>creat</strong> un nou fitxer o una nova carpeta", "A file or folder has been <strong>changed</strong>" : "S'ha <strong>canviat</strong> un fitxer o una carpeta", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar les notificacions sobre la creació i canvis dels seus <strong>arxius favorits</strong><em>(solament Stream)</em>", "A file or folder has been <strong>deleted</strong>" : "S'ha <strong>elminiat</strong> un fitxer o una carpeta", "A file or folder has been <strong>restored</strong>" : "S'ha <strong>restaurat</strong> un fitxer o una carpeta", "You created %1$s" : "Has creat %1$s", @@ -84,6 +90,7 @@ "Maximum upload size" : "Mida màxima de pujada", "max. possible: " : "màxim possible:", "Save" : "Desa", + "Can not be edited from here due to insufficient permissions." : "No es pot editar des d'aquí per permisos insuficients.", "Settings" : "Arranjament", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Useu aquesta adreça per <a href=\"%s\" target=\"_blank\">accedir als fitxers via WebDAV</a>", @@ -94,9 +101,15 @@ "Folder" : "Carpeta", "Upload" : "Puja", "Cancel upload" : "Cancel·la la pujada", + "No files in here" : "No hi ha arxius", + "Upload some content or sync with your devices!" : "Pugi continguts o sincronitzi els seus dispositius.", + "No entries found in this folder" : "No hi ha entrades en aquesta carpeta", + "Select all" : "Seleccionar tot", "Upload too large" : "La pujada és massa gran", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor", "Files are being scanned, please wait." : "S'estan escanejant els fitxers, espereu", - "Currently scanning" : "Actualment escanejant" + "Currently scanning" : "Actualment escanejant", + "No favorites" : "No hi ha favorits", + "Files and folders you mark as favorite will show up here" : "Aquí apareixeran els arxius i carpetes que vostè marqui com favorits" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/cs_CZ.js b/apps/files/l10n/cs_CZ.js index 7eab30b25e4..39f0a9e6958 100644 --- a/apps/files/l10n/cs_CZ.js +++ b/apps/files/l10n/cs_CZ.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Smazat", "Disconnect storage" : "Odpojit úložiště", "Unshare" : "Zrušit sdílení", + "No permission to delete" : "Chybí oprávnění mazat", "Download" : "Stáhnout", "Select" : "Vybrat", "Pending" : "Nevyřízené", "Unable to determine date" : "Nelze určit datum", + "This operation is forbidden" : "Tato operace je zakázána", + "This directory is unavailable, please check the logs or contact the administrator" : "Tento adresář není dostupný, zkontrolujte prosím logy nebo kontaktujte svého správce systému", "Error moving file." : "Chyba při přesunu souboru.", "Error moving file" : "Chyba při přesunu souboru", "Error" : "Chyba", @@ -61,11 +64,10 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Nahrávám %n soubor","Nahrávám %n soubory","Nahrávám %n souborů"], "\"{name}\" is an invalid file name." : "\"{name}\" je neplatným názvem souboru.", "File name cannot be empty." : "Název souboru nemůže být prázdný řetězec.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Úložiště uživatele {owner} je zaplněné, soubory nelze aktualizovat a synchronizovat!", "Your storage is full, files can not be updated or synced anymore!" : "Vaše úložiště je plné, nelze aktualizovat ani synchronizovat soubory.", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Úložiště uživatele {owner} je téměř plné ({usedSpacePercent}%)", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["odpovídá '{filter}'","odpovídá '{filter}'","odpovídá '{filter}'"], "{dirs} and {files}" : "{dirs} a {files}", "Favorited" : "Přidáno k oblíbeným", @@ -73,6 +75,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Při pokusu o úpravu tagů nastala chyba", "A new file or folder has been <strong>created</strong>" : "Byl <strong>vytvořen</strong> nový soubor nebo složka", "A file or folder has been <strong>changed</strong>" : "Soubor nebo složka byla <strong>změněna</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limit oznámení o tvorbě a změnách vašich <strong>oblíbených souborů</strong> <em>(Pouze streamovat)</em>", "A file or folder has been <strong>deleted</strong>" : "Soubor nebo složka byla <strong>smazána</strong>", "A file or folder has been <strong>restored</strong>" : "Soubor nebo složka byla <strong>obnovena</strong>", "You created %1$s" : "Vytvořili jste %1$s", diff --git a/apps/files/l10n/cs_CZ.json b/apps/files/l10n/cs_CZ.json index 2458195469b..8742662c1da 100644 --- a/apps/files/l10n/cs_CZ.json +++ b/apps/files/l10n/cs_CZ.json @@ -40,10 +40,13 @@ "Delete" : "Smazat", "Disconnect storage" : "Odpojit úložiště", "Unshare" : "Zrušit sdílení", + "No permission to delete" : "Chybí oprávnění mazat", "Download" : "Stáhnout", "Select" : "Vybrat", "Pending" : "Nevyřízené", "Unable to determine date" : "Nelze určit datum", + "This operation is forbidden" : "Tato operace je zakázána", + "This directory is unavailable, please check the logs or contact the administrator" : "Tento adresář není dostupný, zkontrolujte prosím logy nebo kontaktujte svého správce systému", "Error moving file." : "Chyba při přesunu souboru.", "Error moving file" : "Chyba při přesunu souboru", "Error" : "Chyba", @@ -59,11 +62,10 @@ "_Uploading %n file_::_Uploading %n files_" : ["Nahrávám %n soubor","Nahrávám %n soubory","Nahrávám %n souborů"], "\"{name}\" is an invalid file name." : "\"{name}\" je neplatným názvem souboru.", "File name cannot be empty." : "Název souboru nemůže být prázdný řetězec.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Úložiště uživatele {owner} je zaplněné, soubory nelze aktualizovat a synchronizovat!", "Your storage is full, files can not be updated or synced anymore!" : "Vaše úložiště je plné, nelze aktualizovat ani synchronizovat soubory.", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Úložiště uživatele {owner} je téměř plné ({usedSpacePercent}%)", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["odpovídá '{filter}'","odpovídá '{filter}'","odpovídá '{filter}'"], "{dirs} and {files}" : "{dirs} a {files}", "Favorited" : "Přidáno k oblíbeným", @@ -71,6 +73,7 @@ "An error occurred while trying to update the tags" : "Při pokusu o úpravu tagů nastala chyba", "A new file or folder has been <strong>created</strong>" : "Byl <strong>vytvořen</strong> nový soubor nebo složka", "A file or folder has been <strong>changed</strong>" : "Soubor nebo složka byla <strong>změněna</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limit oznámení o tvorbě a změnách vašich <strong>oblíbených souborů</strong> <em>(Pouze streamovat)</em>", "A file or folder has been <strong>deleted</strong>" : "Soubor nebo složka byla <strong>smazána</strong>", "A file or folder has been <strong>restored</strong>" : "Soubor nebo složka byla <strong>obnovena</strong>", "You created %1$s" : "Vytvořili jste %1$s", diff --git a/apps/files/l10n/da.js b/apps/files/l10n/da.js index b9dfbe23ab2..e039bddf6a7 100644 --- a/apps/files/l10n/da.js +++ b/apps/files/l10n/da.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Slet", "Disconnect storage" : "Frakobl lager", "Unshare" : "Fjern deling", + "No permission to delete" : "Ingen rettigheder at slette", "Download" : "Download", "Select" : "Vælg", "Pending" : "Afventer", "Unable to determine date" : "Kan ikke fastslå datoen", + "This operation is forbidden" : "Denne operation er forbudt", + "This directory is unavailable, please check the logs or contact the administrator" : "Denne mappe er utilgængelig - tjek venligst loggene eller kontakt administratoren", "Error moving file." : "Fejl ved flytning af fil", "Error moving file" : "Fejl ved flytning af fil", "Error" : "Fejl", @@ -61,11 +64,10 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Uploader %n fil","Uploader %n filer"], "\"{name}\" is an invalid file name." : "'{name}' er et ugyldigt filnavn.", "File name cannot be empty." : "Filnavnet kan ikke stå tomt.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Opbevaringspladsen tilhørende {owner} er fyldt op - filer kan ikke længere opdateres eller synkroniseres!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Opbevaringspladsen tilhørende {owner} er næsten fyldt op ({usedSpacePercent}%)", "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. ", "_matches '{filter}'_::_match '{filter}'_" : ["match '{filter}'","match '{filter}'"], "{dirs} and {files}" : "{dirs} og {files}", "Favorited" : "Gjort til foretrukken", @@ -73,6 +75,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Der opstod en fejl under forsøg på at opdatere mærkerne", "A new file or folder has been <strong>created</strong>" : "En ny fil eller mapper er blevet <strong>oprettet</strong>", "A file or folder has been <strong>changed</strong>" : "En fil eller mappe er blevet <strong>ændret</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Begræns noter om oprettelse og ændringer af dine <strong>favorit filer</strong> <em>(Kun streaming)</em>", "A file or folder has been <strong>deleted</strong>" : "En fil eller mappe er blevet <strong>slettet</strong>", "A file or folder has been <strong>restored</strong>" : "En fil eller mappe er blevet <strong>gendannet</strong>", "You created %1$s" : "Du oprettede %1$s ", diff --git a/apps/files/l10n/da.json b/apps/files/l10n/da.json index 3ba0f9abbd8..f8e5b4af457 100644 --- a/apps/files/l10n/da.json +++ b/apps/files/l10n/da.json @@ -40,10 +40,13 @@ "Delete" : "Slet", "Disconnect storage" : "Frakobl lager", "Unshare" : "Fjern deling", + "No permission to delete" : "Ingen rettigheder at slette", "Download" : "Download", "Select" : "Vælg", "Pending" : "Afventer", "Unable to determine date" : "Kan ikke fastslå datoen", + "This operation is forbidden" : "Denne operation er forbudt", + "This directory is unavailable, please check the logs or contact the administrator" : "Denne mappe er utilgængelig - tjek venligst loggene eller kontakt administratoren", "Error moving file." : "Fejl ved flytning af fil", "Error moving file" : "Fejl ved flytning af fil", "Error" : "Fejl", @@ -59,11 +62,10 @@ "_Uploading %n file_::_Uploading %n files_" : ["Uploader %n fil","Uploader %n filer"], "\"{name}\" is an invalid file name." : "'{name}' er et ugyldigt filnavn.", "File name cannot be empty." : "Filnavnet kan ikke stå tomt.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Opbevaringspladsen tilhørende {owner} er fyldt op - filer kan ikke længere opdateres eller synkroniseres!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Opbevaringspladsen tilhørende {owner} er næsten fyldt op ({usedSpacePercent}%)", "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. ", "_matches '{filter}'_::_match '{filter}'_" : ["match '{filter}'","match '{filter}'"], "{dirs} and {files}" : "{dirs} og {files}", "Favorited" : "Gjort til foretrukken", @@ -71,6 +73,7 @@ "An error occurred while trying to update the tags" : "Der opstod en fejl under forsøg på at opdatere mærkerne", "A new file or folder has been <strong>created</strong>" : "En ny fil eller mapper er blevet <strong>oprettet</strong>", "A file or folder has been <strong>changed</strong>" : "En fil eller mappe er blevet <strong>ændret</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Begræns noter om oprettelse og ændringer af dine <strong>favorit filer</strong> <em>(Kun streaming)</em>", "A file or folder has been <strong>deleted</strong>" : "En fil eller mappe er blevet <strong>slettet</strong>", "A file or folder has been <strong>restored</strong>" : "En fil eller mappe er blevet <strong>gendannet</strong>", "You created %1$s" : "Du oprettede %1$s ", diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js index 9d49c783e62..00d88d52918 100644 --- a/apps/files/l10n/de.js +++ b/apps/files/l10n/de.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Löschen", "Disconnect storage" : "Speicher trennen", "Unshare" : "Freigabe aufheben", + "No permission to delete" : "Keine Berechtigung zum Löschen", "Download" : "Herunterladen", "Select" : "Auswählen", "Pending" : "Ausstehend", "Unable to determine date" : "Datum konnte nicht ermittelt werden", + "This operation is forbidden" : "Diese Operation ist nicht erlaubt", + "This directory is unavailable, please check the logs or contact the administrator" : "Dieses Verzeichnis ist nicht verfügbar, bitte überprüfe die Logdateien oder kontaktiere den Administrator", "Error moving file." : "Fehler beim Verschieben der Datei.", "Error moving file" : "Fehler beim Verschieben der Datei", "Error" : "Fehler", @@ -61,11 +64,10 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["%n Datei wird hochgeladen","%n Dateien werden hochgeladen"], "\"{name}\" is an invalid file name." : "»{name}« ist kein gültiger Dateiname.", "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Der Speicher von {owner} ist beinahe voll ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Dein Speicher ist fast voll ({usedSpacePercent}%)", - "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.", "_matches '{filter}'_::_match '{filter}'_" : ["stimmt mit '{filter}' überein","stimmen mit '{filter}' überein"], "{dirs} and {files}" : "{dirs} und {files}", "Favorited" : "Favorisiert", @@ -73,6 +75,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten", "A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf Deine <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Eine Datei oder ein Ordner wurde <strong>gelöscht</strong>", "A file or folder has been <strong>restored</strong>" : "Eine Datei oder ein Ordner wurde <strong>wiederhergestellt</strong>", "You created %1$s" : "Du hast %1$s erstellt", diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json index 2ff4fae237b..7d75fb70ead 100644 --- a/apps/files/l10n/de.json +++ b/apps/files/l10n/de.json @@ -40,10 +40,13 @@ "Delete" : "Löschen", "Disconnect storage" : "Speicher trennen", "Unshare" : "Freigabe aufheben", + "No permission to delete" : "Keine Berechtigung zum Löschen", "Download" : "Herunterladen", "Select" : "Auswählen", "Pending" : "Ausstehend", "Unable to determine date" : "Datum konnte nicht ermittelt werden", + "This operation is forbidden" : "Diese Operation ist nicht erlaubt", + "This directory is unavailable, please check the logs or contact the administrator" : "Dieses Verzeichnis ist nicht verfügbar, bitte überprüfe die Logdateien oder kontaktiere den Administrator", "Error moving file." : "Fehler beim Verschieben der Datei.", "Error moving file" : "Fehler beim Verschieben der Datei", "Error" : "Fehler", @@ -59,11 +62,10 @@ "_Uploading %n file_::_Uploading %n files_" : ["%n Datei wird hochgeladen","%n Dateien werden hochgeladen"], "\"{name}\" is an invalid file name." : "»{name}« ist kein gültiger Dateiname.", "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Der Speicher von {owner} ist beinahe voll ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Dein Speicher ist fast voll ({usedSpacePercent}%)", - "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.", "_matches '{filter}'_::_match '{filter}'_" : ["stimmt mit '{filter}' überein","stimmen mit '{filter}' überein"], "{dirs} and {files}" : "{dirs} und {files}", "Favorited" : "Favorisiert", @@ -71,6 +73,7 @@ "An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten", "A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf Deine <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Eine Datei oder ein Ordner wurde <strong>gelöscht</strong>", "A file or folder has been <strong>restored</strong>" : "Eine Datei oder ein Ordner wurde <strong>wiederhergestellt</strong>", "You created %1$s" : "Du hast %1$s erstellt", diff --git a/apps/files/l10n/de_AT.js b/apps/files/l10n/de_AT.js index a94d0486f4b..046e993f7f6 100644 --- a/apps/files/l10n/de_AT.js +++ b/apps/files/l10n/de_AT.js @@ -1,6 +1,7 @@ OC.L10N.register( "files", { + "Unknown error" : "Unbekannter Fehler", "Files" : "Dateien", "Delete" : "Löschen", "Unshare" : "Teilung zurücknehmen", @@ -16,6 +17,9 @@ OC.L10N.register( "You deleted %1$s" : "Du hast %1$s gelöscht", "%2$s deleted %1$s" : "%2$s löschte %1$s", "Save" : "Speichern", - "Settings" : "Einstellungen" + "Settings" : "Einstellungen", + "New folder" : "Neuer Ordner", + "Upload" : "Hochladen", + "Cancel upload" : "Hochladen abbrechen" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/de_AT.json b/apps/files/l10n/de_AT.json index 89b99b5d001..b31eb12c490 100644 --- a/apps/files/l10n/de_AT.json +++ b/apps/files/l10n/de_AT.json @@ -1,4 +1,5 @@ { "translations": { + "Unknown error" : "Unbekannter Fehler", "Files" : "Dateien", "Delete" : "Löschen", "Unshare" : "Teilung zurücknehmen", @@ -14,6 +15,9 @@ "You deleted %1$s" : "Du hast %1$s gelöscht", "%2$s deleted %1$s" : "%2$s löschte %1$s", "Save" : "Speichern", - "Settings" : "Einstellungen" + "Settings" : "Einstellungen", + "New folder" : "Neuer Ordner", + "Upload" : "Hochladen", + "Cancel upload" : "Hochladen abbrechen" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index 0dab592ae92..69699135b8f 100644 --- a/apps/files/l10n/de_DE.js +++ b/apps/files/l10n/de_DE.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Löschen", "Disconnect storage" : "Speicher trennen", "Unshare" : "Freigabe aufheben", + "No permission to delete" : "Keine Berechtigung zum Löschen", "Download" : "Herunterladen", "Select" : "Auswählen", "Pending" : "Ausstehend", "Unable to determine date" : "Datum konnte nicht ermittelt werden", + "This operation is forbidden" : "Diese Operation ist nicht erlaubt", + "This directory is unavailable, please check the logs or contact the administrator" : "Dieses Verzeichnis ist nicht verfügbar, bitte überprüfen Sie die Logdateien oder kontaktieren Sie den Administrator", "Error moving file." : "Fehler beim Verschieben der Datei.", "Error moving file" : "Fehler beim Verschieben der Datei", "Error" : "Fehler", @@ -61,11 +64,10 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["%n Datei wird hoch geladen","%n Dateien werden hoch geladen"], "\"{name}\" is an invalid file name." : "„{name}“ ist kein gültiger Dateiname.", "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Der Speicher von {owner} ist beinahe voll ({usedSpacePercent}%)", "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üsselungs-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte melden Sie 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üsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, 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.", "_matches '{filter}'_::_match '{filter}'_" : ["stimmt mit '{filter}' überein","stimmen mit '{filter}' überein"], "{dirs} and {files}" : "{dirs} und {files}", "Favorited" : "Favorisiert", @@ -73,6 +75,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten", "A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf Ihre <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Eine Datei oder ein Ordner wurde <strong>gelöscht</strong>", "A file or folder has been <strong>restored</strong>" : "Eine Datei oder ein Ordner wurde <strong>wiederhergestellt</strong>", "You created %1$s" : "Sie haben %1$s erstellt", diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index cad25b15f5c..2a1e548ec5f 100644 --- a/apps/files/l10n/de_DE.json +++ b/apps/files/l10n/de_DE.json @@ -40,10 +40,13 @@ "Delete" : "Löschen", "Disconnect storage" : "Speicher trennen", "Unshare" : "Freigabe aufheben", + "No permission to delete" : "Keine Berechtigung zum Löschen", "Download" : "Herunterladen", "Select" : "Auswählen", "Pending" : "Ausstehend", "Unable to determine date" : "Datum konnte nicht ermittelt werden", + "This operation is forbidden" : "Diese Operation ist nicht erlaubt", + "This directory is unavailable, please check the logs or contact the administrator" : "Dieses Verzeichnis ist nicht verfügbar, bitte überprüfen Sie die Logdateien oder kontaktieren Sie den Administrator", "Error moving file." : "Fehler beim Verschieben der Datei.", "Error moving file" : "Fehler beim Verschieben der Datei", "Error" : "Fehler", @@ -59,11 +62,10 @@ "_Uploading %n file_::_Uploading %n files_" : ["%n Datei wird hoch geladen","%n Dateien werden hoch geladen"], "\"{name}\" is an invalid file name." : "„{name}“ ist kein gültiger Dateiname.", "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Der Speicher von {owner} ist beinahe voll ({usedSpacePercent}%)", "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üsselungs-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte melden Sie 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üsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, 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.", "_matches '{filter}'_::_match '{filter}'_" : ["stimmt mit '{filter}' überein","stimmen mit '{filter}' überein"], "{dirs} and {files}" : "{dirs} und {files}", "Favorited" : "Favorisiert", @@ -71,6 +73,7 @@ "An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten", "A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf Ihre <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Eine Datei oder ein Ordner wurde <strong>gelöscht</strong>", "A file or folder has been <strong>restored</strong>" : "Eine Datei oder ein Ordner wurde <strong>wiederhergestellt</strong>", "You created %1$s" : "Sie haben %1$s erstellt", diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js index f86e86fcc84..255f70f29e5 100644 --- a/apps/files/l10n/el.js +++ b/apps/files/l10n/el.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Διαγραφή", "Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος", "Unshare" : "Διακοπή διαμοιρασμού", + "No permission to delete" : "Δεν έχετε άδεια να το διαγράψετε", "Download" : "Λήψη", "Select" : "Επιλογή", "Pending" : "Εκκρεμεί", "Unable to determine date" : "Αδυναμία προσδιορισμού ημερομηνίας ", + "This operation is forbidden" : "Αυτή η ενέργεια απαγορεύεται", + "This directory is unavailable, please check the logs or contact the administrator" : "Ο κατάλογος δεν είναι διαθέσιμος, παρακαλώ ελέγξτε τα αρχεία καταγραφής ή επικοινωνήστε με το διαχειριστή", "Error moving file." : "Σφάλμα κατά τη μετακίνηση του αρχείου.", "Error moving file" : "Σφάλμα κατά τη μετακίνηση του αρχείου", "Error" : "Σφάλμα", @@ -61,11 +64,10 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Ανέβασμα %n αρχείου","Ανέβασμα %n αρχείων"], "\"{name}\" is an invalid file name." : "Το \"{name}\" είναι μη έγκυρο όνομα αρχείου.", "File name cannot be empty." : "Το όνομα αρχείου δεν μπορεί να είναι κενό.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Ο αποθηκευτικός χώρος του {owner} είναι πλήρης, τα αρχεία δεν δύναται να ενημερωθούν ή να συγχρονίσουν!", "Your storage is full, files can not be updated or synced anymore!" : "Ο αποθηκευτικός σας χώρος είναι γεμάτος, τα αρχεία δεν μπορούν να ενημερωθούν ή να συγχρονιστούν πια!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Ο αποθηκευτικός χώρος του {owner} είναι σχεδόν πλήρης ({usedSpacePercent}%)", "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." : "Η κρυπτογράφηση απενεργοποιήθηκε, αλλά τα αρχεία σας είναι ακόμα κρυπτογραφημένα. Παρακαλούμε απενεργοποιήσετε την κρυπτογράφηση αρχείων από τις προσωπικές σας ρυθμίσεις", "_matches '{filter}'_::_match '{filter}'_" : ["ταιριάζουν '{filter}' ","ταιριάζουν '{filter}'"], "{dirs} and {files}" : "{Κατάλογοι αρχείων} και {αρχεία}", "Favorited" : "Προτιμώμενα", @@ -73,6 +75,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Ένα σφάλμα προέκυψε κατά τη διάρκεια ενημέρωσης των ετικετών", "A new file or folder has been <strong>created</strong>" : "Ένα νέο αρχείο ή κατάλογος έχουν <strong>δημιουργηθεί</strong>", "A file or folder has been <strong>changed</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>αλλάξει</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Βάλτε όριο στις ειδοποιήσεις για τη δημιουργία και αλλαγές στα <strong>αγαπημένα σας αρχεία</strong> <em>(Μόνο Stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>διαγραφεί</strong>", "A file or folder has been <strong>restored</strong>" : "Ένα αρχείο ή φάκελος <strong>επαναφέρθηκε</ strong>", "You created %1$s" : "Δημιουργήσατε %1$s", diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json index b864d5e3276..2b72213e533 100644 --- a/apps/files/l10n/el.json +++ b/apps/files/l10n/el.json @@ -40,10 +40,13 @@ "Delete" : "Διαγραφή", "Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος", "Unshare" : "Διακοπή διαμοιρασμού", + "No permission to delete" : "Δεν έχετε άδεια να το διαγράψετε", "Download" : "Λήψη", "Select" : "Επιλογή", "Pending" : "Εκκρεμεί", "Unable to determine date" : "Αδυναμία προσδιορισμού ημερομηνίας ", + "This operation is forbidden" : "Αυτή η ενέργεια απαγορεύεται", + "This directory is unavailable, please check the logs or contact the administrator" : "Ο κατάλογος δεν είναι διαθέσιμος, παρακαλώ ελέγξτε τα αρχεία καταγραφής ή επικοινωνήστε με το διαχειριστή", "Error moving file." : "Σφάλμα κατά τη μετακίνηση του αρχείου.", "Error moving file" : "Σφάλμα κατά τη μετακίνηση του αρχείου", "Error" : "Σφάλμα", @@ -59,11 +62,10 @@ "_Uploading %n file_::_Uploading %n files_" : ["Ανέβασμα %n αρχείου","Ανέβασμα %n αρχείων"], "\"{name}\" is an invalid file name." : "Το \"{name}\" είναι μη έγκυρο όνομα αρχείου.", "File name cannot be empty." : "Το όνομα αρχείου δεν μπορεί να είναι κενό.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Ο αποθηκευτικός χώρος του {owner} είναι πλήρης, τα αρχεία δεν δύναται να ενημερωθούν ή να συγχρονίσουν!", "Your storage is full, files can not be updated or synced anymore!" : "Ο αποθηκευτικός σας χώρος είναι γεμάτος, τα αρχεία δεν μπορούν να ενημερωθούν ή να συγχρονιστούν πια!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Ο αποθηκευτικός χώρος του {owner} είναι σχεδόν πλήρης ({usedSpacePercent}%)", "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." : "Η κρυπτογράφηση απενεργοποιήθηκε, αλλά τα αρχεία σας είναι ακόμα κρυπτογραφημένα. Παρακαλούμε απενεργοποιήσετε την κρυπτογράφηση αρχείων από τις προσωπικές σας ρυθμίσεις", "_matches '{filter}'_::_match '{filter}'_" : ["ταιριάζουν '{filter}' ","ταιριάζουν '{filter}'"], "{dirs} and {files}" : "{Κατάλογοι αρχείων} και {αρχεία}", "Favorited" : "Προτιμώμενα", @@ -71,6 +73,7 @@ "An error occurred while trying to update the tags" : "Ένα σφάλμα προέκυψε κατά τη διάρκεια ενημέρωσης των ετικετών", "A new file or folder has been <strong>created</strong>" : "Ένα νέο αρχείο ή κατάλογος έχουν <strong>δημιουργηθεί</strong>", "A file or folder has been <strong>changed</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>αλλάξει</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Βάλτε όριο στις ειδοποιήσεις για τη δημιουργία και αλλαγές στα <strong>αγαπημένα σας αρχεία</strong> <em>(Μόνο Stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>διαγραφεί</strong>", "A file or folder has been <strong>restored</strong>" : "Ένα αρχείο ή φάκελος <strong>επαναφέρθηκε</ strong>", "You created %1$s" : "Δημιουργήσατε %1$s", diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js index d2f563d1568..4fa680b5c7f 100644 --- a/apps/files/l10n/en_GB.js +++ b/apps/files/l10n/en_GB.js @@ -42,6 +42,7 @@ OC.L10N.register( "Delete" : "Delete", "Disconnect storage" : "Disconnect storage", "Unshare" : "Unshare", + "No permission to delete" : "No permission to delete", "Download" : "Download", "Select" : "Select", "Pending" : "Pending", @@ -63,9 +64,6 @@ OC.L10N.register( "File name cannot be empty." : "File name cannot be empty.", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["matches '{filter}'","match '{filter}'"], "{dirs} and {files}" : "{dirs} and {files}", "Favorited" : "Favourited", @@ -73,6 +71,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "An error occurred whilst trying to update the tags", "A new file or folder has been <strong>created</strong>" : "A new file or folder has been <strong>created</strong>", "A file or folder has been <strong>changed</strong>" : "A file or folder has been <strong>changed</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limit notifications about creation and changes to your <strong>favourite files</strong> <em>(Stream only)</em>", "A file or folder has been <strong>deleted</strong>" : "A file or folder has been <strong>deleted</strong>", "A file or folder has been <strong>restored</strong>" : "A file or folder has been <strong>restored</strong>", "You created %1$s" : "You created %1$s", @@ -102,6 +101,7 @@ OC.L10N.register( "Folder" : "Folder", "Upload" : "Upload", "Cancel upload" : "Cancel upload", + "No files in here" : "No files in here", "Upload some content or sync with your devices!" : "Upload some content or sync with your devices!", "No entries found in this folder" : "No entries found in this folder", "Select all" : "Select all", diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json index 7ee7b36d2e5..417272a5cdb 100644 --- a/apps/files/l10n/en_GB.json +++ b/apps/files/l10n/en_GB.json @@ -40,6 +40,7 @@ "Delete" : "Delete", "Disconnect storage" : "Disconnect storage", "Unshare" : "Unshare", + "No permission to delete" : "No permission to delete", "Download" : "Download", "Select" : "Select", "Pending" : "Pending", @@ -61,9 +62,6 @@ "File name cannot be empty." : "File name cannot be empty.", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["matches '{filter}'","match '{filter}'"], "{dirs} and {files}" : "{dirs} and {files}", "Favorited" : "Favourited", @@ -71,6 +69,7 @@ "An error occurred while trying to update the tags" : "An error occurred whilst trying to update the tags", "A new file or folder has been <strong>created</strong>" : "A new file or folder has been <strong>created</strong>", "A file or folder has been <strong>changed</strong>" : "A file or folder has been <strong>changed</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limit notifications about creation and changes to your <strong>favourite files</strong> <em>(Stream only)</em>", "A file or folder has been <strong>deleted</strong>" : "A file or folder has been <strong>deleted</strong>", "A file or folder has been <strong>restored</strong>" : "A file or folder has been <strong>restored</strong>", "You created %1$s" : "You created %1$s", @@ -100,6 +99,7 @@ "Folder" : "Folder", "Upload" : "Upload", "Cancel upload" : "Cancel upload", + "No files in here" : "No files in here", "Upload some content or sync with your devices!" : "Upload some content or sync with your devices!", "No entries found in this folder" : "No entries found in this folder", "Select all" : "Select all", diff --git a/apps/files/l10n/eo.js b/apps/files/l10n/eo.js index a7523c14ced..56c4d23d903 100644 --- a/apps/files/l10n/eo.js +++ b/apps/files/l10n/eo.js @@ -21,6 +21,7 @@ OC.L10N.register( "Upload failed. Could not get file info." : "La alŝuto malsukcesis. Ne povis ekhaviĝi informo pri dosiero.", "Invalid directory." : "Nevalida dosierujo.", "Files" : "Dosieroj", + "All files" : "Ĉiuj dosieroj", "Favorites" : "Favoratoj", "Home" : "Hejmo", "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", @@ -53,10 +54,12 @@ OC.L10N.register( "Favorite" : "Favorato", "You created %1$s" : "Vi kreis %1$s", "%2$s created %1$s" : "%2$s kreis %1$s", + "%1$s was created in a public folder" : "%1$s kreiĝis en publika dosierujo", "You changed %1$s" : "Vi ŝanĝis %1$s", "%2$s changed %1$s" : "%2$s ŝanĝis %1$s", "You deleted %1$s" : "Vi forigis %1$s", "%2$s deleted %1$s" : "%2$s forigis %1$s", + "%s could not be renamed as it has been deleted" : "%s ne povis alinomiĝi ĉar ĝi forigitis", "%s could not be renamed" : "%s ne povis alinomiĝi", "Upload (max. %s)" : "Alŝuti (maks. %s)", "File handling" : "Dosieradministro", @@ -65,12 +68,16 @@ OC.L10N.register( "Save" : "Konservi", "Settings" : "Agordo", "WebDAV" : "WebDAV", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Uzu ĉi tiun adreson por <a href=\"%s\" target=\"_blank\">aliri viajn Dosierojn per WebDAV</a>", "New" : "Nova", + "New text file" : "Nova tekstodosiero", "Text file" : "Tekstodosiero", "New folder" : "Nova dosierujo", "Folder" : "Dosierujo", "Upload" : "Alŝuti", "Cancel upload" : "Nuligi alŝuton", + "No files in here" : "Neniu dosiero estas ĉi tie", + "Select all" : "Elekti ĉion", "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.", "Files are being scanned, please wait." : "Dosieroj estas skanataj, bonvolu atendi." diff --git a/apps/files/l10n/eo.json b/apps/files/l10n/eo.json index ccde2ad6be1..e3cebced2f1 100644 --- a/apps/files/l10n/eo.json +++ b/apps/files/l10n/eo.json @@ -19,6 +19,7 @@ "Upload failed. Could not get file info." : "La alŝuto malsukcesis. Ne povis ekhaviĝi informo pri dosiero.", "Invalid directory." : "Nevalida dosierujo.", "Files" : "Dosieroj", + "All files" : "Ĉiuj dosieroj", "Favorites" : "Favoratoj", "Home" : "Hejmo", "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", @@ -51,10 +52,12 @@ "Favorite" : "Favorato", "You created %1$s" : "Vi kreis %1$s", "%2$s created %1$s" : "%2$s kreis %1$s", + "%1$s was created in a public folder" : "%1$s kreiĝis en publika dosierujo", "You changed %1$s" : "Vi ŝanĝis %1$s", "%2$s changed %1$s" : "%2$s ŝanĝis %1$s", "You deleted %1$s" : "Vi forigis %1$s", "%2$s deleted %1$s" : "%2$s forigis %1$s", + "%s could not be renamed as it has been deleted" : "%s ne povis alinomiĝi ĉar ĝi forigitis", "%s could not be renamed" : "%s ne povis alinomiĝi", "Upload (max. %s)" : "Alŝuti (maks. %s)", "File handling" : "Dosieradministro", @@ -63,12 +66,16 @@ "Save" : "Konservi", "Settings" : "Agordo", "WebDAV" : "WebDAV", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Uzu ĉi tiun adreson por <a href=\"%s\" target=\"_blank\">aliri viajn Dosierojn per WebDAV</a>", "New" : "Nova", + "New text file" : "Nova tekstodosiero", "Text file" : "Tekstodosiero", "New folder" : "Nova dosierujo", "Folder" : "Dosierujo", "Upload" : "Alŝuti", "Cancel upload" : "Nuligi alŝuton", + "No files in here" : "Neniu dosiero estas ĉi tie", + "Select all" : "Elekti ĉion", "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.", "Files are being scanned, please wait." : "Dosieroj estas skanataj, bonvolu atendi." diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js index 37e523529f5..c7409a25df4 100644 --- a/apps/files/l10n/es.js +++ b/apps/files/l10n/es.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Eliminar", "Disconnect storage" : "Desconectar almacenamiento", "Unshare" : "Dejar de compartir", + "No permission to delete" : "Permisos insuficientes para borrar", "Download" : "Descargar", "Select" : "Seleccionar", "Pending" : "Pendiente", "Unable to determine date" : "No se pudo determinar la fecha", + "This operation is forbidden" : "Esta operación está prohibida", + "This directory is unavailable, please check the logs or contact the administrator" : "Esta carpeta no está disponible, por favor verifique los registros o contáctese con el administrador", "Error moving file." : "Error al mover el archivo.", "Error moving file" : "Error moviendo archivo", "Error" : "Error", @@ -61,18 +64,18 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Subiendo %n archivos"], "\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido.", "File name cannot be empty." : "El nombre de archivo no puede estar vacío.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "El almacén de {owner} está repleto, ¡los archivos no se actualizarán ni sincronizarán más!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "El almacén de {owner} está casi lleno en un ({usedSpacePercent}%)", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["coincidencias '{filter}'","coincidencia '{filter}'"], "{dirs} and {files}" : "{dirs} y {files}", - "Favorited" : "Agregado a favoritos", + "Favorited" : "Agregado a Favoritos", "Favorite" : "Favorito", "An error occurred while trying to update the tags" : "Se produjo un error al tratar de actualizar las etiquetas", "A new file or folder has been <strong>created</strong>" : "Se ha <strong>creado</strong> un nuevo archivo o carpeta", "A file or folder has been <strong>changed</strong>" : "Se ha <strong>modificado</strong> un archivo o carpeta", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar las notificaiones acerca de la creación y cambios de sus <strong>archivos favoritos</strong><em>(Stream only)</em>", "A file or folder has been <strong>deleted</strong>" : "Se ha <strong>eliminado</strong> un archivo o carpeta", "A file or folder has been <strong>restored</strong>" : "Se ha <strong>restaurado</strong> un archivo o carpeta", "You created %1$s" : "Ha creado %1$s", diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json index 76226b54948..fc7a12fdf04 100644 --- a/apps/files/l10n/es.json +++ b/apps/files/l10n/es.json @@ -40,10 +40,13 @@ "Delete" : "Eliminar", "Disconnect storage" : "Desconectar almacenamiento", "Unshare" : "Dejar de compartir", + "No permission to delete" : "Permisos insuficientes para borrar", "Download" : "Descargar", "Select" : "Seleccionar", "Pending" : "Pendiente", "Unable to determine date" : "No se pudo determinar la fecha", + "This operation is forbidden" : "Esta operación está prohibida", + "This directory is unavailable, please check the logs or contact the administrator" : "Esta carpeta no está disponible, por favor verifique los registros o contáctese con el administrador", "Error moving file." : "Error al mover el archivo.", "Error moving file" : "Error moviendo archivo", "Error" : "Error", @@ -59,18 +62,18 @@ "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Subiendo %n archivos"], "\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido.", "File name cannot be empty." : "El nombre de archivo no puede estar vacío.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "El almacén de {owner} está repleto, ¡los archivos no se actualizarán ni sincronizarán más!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "El almacén de {owner} está casi lleno en un ({usedSpacePercent}%)", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["coincidencias '{filter}'","coincidencia '{filter}'"], "{dirs} and {files}" : "{dirs} y {files}", - "Favorited" : "Agregado a favoritos", + "Favorited" : "Agregado a Favoritos", "Favorite" : "Favorito", "An error occurred while trying to update the tags" : "Se produjo un error al tratar de actualizar las etiquetas", "A new file or folder has been <strong>created</strong>" : "Se ha <strong>creado</strong> un nuevo archivo o carpeta", "A file or folder has been <strong>changed</strong>" : "Se ha <strong>modificado</strong> un archivo o carpeta", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar las notificaiones acerca de la creación y cambios de sus <strong>archivos favoritos</strong><em>(Stream only)</em>", "A file or folder has been <strong>deleted</strong>" : "Se ha <strong>eliminado</strong> un archivo o carpeta", "A file or folder has been <strong>restored</strong>" : "Se ha <strong>restaurado</strong> un archivo o carpeta", "You created %1$s" : "Ha creado %1$s", diff --git a/apps/files/l10n/es_AR.js b/apps/files/l10n/es_AR.js index ea56123f11d..f4d74e553ae 100644 --- a/apps/files/l10n/es_AR.js +++ b/apps/files/l10n/es_AR.js @@ -51,9 +51,6 @@ OC.L10N.register( "File name cannot be empty." : "El nombre del archivo no puede quedar vacío.", "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 App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encriptación está habilitada pero las llaves no fueron inicializadas, por favor termine y vuelva a iniciar la sesión", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Llave privada inválida para la aplicación de encriptación. Por favor actualice la clave de la llave privada en las configuraciones personales para recobrar el acceso a sus archivos encriptados.", - "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.", "{dirs} and {files}" : "{carpetas} y {archivos}", "Favorite" : "Favorito", "A new file or folder has been <strong>created</strong>" : "Un archivo o carpeta ha sido <strong>creado</strong>", diff --git a/apps/files/l10n/es_AR.json b/apps/files/l10n/es_AR.json index 33df652d756..376f24e3636 100644 --- a/apps/files/l10n/es_AR.json +++ b/apps/files/l10n/es_AR.json @@ -49,9 +49,6 @@ "File name cannot be empty." : "El nombre del archivo no puede quedar vacío.", "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 App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encriptación está habilitada pero las llaves no fueron inicializadas, por favor termine y vuelva a iniciar la sesión", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Llave privada inválida para la aplicación de encriptación. Por favor actualice la clave de la llave privada en las configuraciones personales para recobrar el acceso a sus archivos encriptados.", - "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.", "{dirs} and {files}" : "{carpetas} y {archivos}", "Favorite" : "Favorito", "A new file or folder has been <strong>created</strong>" : "Un archivo o carpeta ha sido <strong>creado</strong>", diff --git a/apps/files/l10n/es_MX.js b/apps/files/l10n/es_MX.js index 4ada37134ab..c621aa33290 100644 --- a/apps/files/l10n/es_MX.js +++ b/apps/files/l10n/es_MX.js @@ -50,9 +50,6 @@ OC.L10N.register( "File name cannot be empty." : "El nombre de archivo no puede estar vacío.", "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.", "{dirs} and {files}" : "{dirs} y {files}", "Favorite" : "Favorito", "%s could not be renamed" : "%s no pudo ser renombrado", diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json index 760fc042998..ae5c152af2d 100644 --- a/apps/files/l10n/es_MX.json +++ b/apps/files/l10n/es_MX.json @@ -48,9 +48,6 @@ "File name cannot be empty." : "El nombre de archivo no puede estar vacío.", "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.", "{dirs} and {files}" : "{dirs} y {files}", "Favorite" : "Favorito", "%s could not be renamed" : "%s no pudo ser renombrado", diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js index 895b3812f0e..bf9e8574c28 100644 --- a/apps/files/l10n/et_EE.js +++ b/apps/files/l10n/et_EE.js @@ -42,9 +42,13 @@ OC.L10N.register( "Delete" : "Kustuta", "Disconnect storage" : "Ühenda andmehoidla lahti.", "Unshare" : "Lõpeta jagamine", + "No permission to delete" : "Kustutamiseks pole õigusi", "Download" : "Lae alla", "Select" : "Vali", "Pending" : "Ootel", + "Unable to determine date" : "Kuupäeva tuvastamine ei õnnestunud", + "This operation is forbidden" : "See toiming on keelatud", + "This directory is unavailable, please check the logs or contact the administrator" : "See kaust pole saadaval. Palun kontrolli logifaile või võta ühendust administraatoriga", "Error moving file." : "Viga faili liigutamisel.", "Error moving file" : "Viga faili eemaldamisel", "Error" : "Viga", @@ -59,13 +63,13 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Laadin üles %n faili","Laadin üles %n faili"], "\"{name}\" is an invalid file name." : "\"{name}\" on vigane failinimi.", "File name cannot be empty." : "Faili nimi ei saa olla tühi.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} andmemaht on täis! Faile ei uuendata ega sünkroniseerita!", "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.", "{dirs} and {files}" : "{dirs} ja {files}", + "Favorited" : "Lemmikud", "Favorite" : "Lemmik", + "An error occurred while trying to update the tags" : "Siltide uuendamisel tekkis tõrge", "A new file or folder has been <strong>created</strong>" : "Uus fail või kataloog on <strong>loodud</strong>", "A file or folder has been <strong>changed</strong>" : "Fail või kataloog on <strong>muudetud</strong>", "A file or folder has been <strong>deleted</strong>" : "Fail või kataloog on <strong>kustutatud</strong>", @@ -86,6 +90,7 @@ OC.L10N.register( "Maximum upload size" : "Maksimaalne üleslaadimise suurus", "max. possible: " : "maks. võimalik: ", "Save" : "Salvesta", + "Can not be edited from here due to insufficient permissions." : "Ei saa õiguste puudumise tõttu muuta.", "Settings" : "Seaded", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Kasuta seda aadressi <a href=\"%s\" target=\"_blank\">oma failidele ligipääsuks WebDAV kaudu</a>", @@ -96,9 +101,15 @@ OC.L10N.register( "Folder" : "Kaust", "Upload" : "Lae üles", "Cancel upload" : "Tühista üleslaadimine", + "No files in here" : "Siin ei ole faile", + "Upload some content or sync with your devices!" : "Laadi sisu üles või süngi oma seadmetega!", + "No entries found in this folder" : "Selles kaustas ei leitud kirjeid", + "Select all" : "Vali kõik", "Upload too large" : "Üleslaadimine on liiga suur", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse.", "Files are being scanned, please wait." : "Faile skannitakse, palun oota.", - "Currently scanning" : "Praegu skännimisel" + "Currently scanning" : "Praegu skännimisel", + "No favorites" : "Lemmikuid pole", + "Files and folders you mark as favorite will show up here" : "Siin kuvatakse faile ja kaustasid, mille oled märkinud lemmikuteks" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json index 3ff409f1f72..40fa7efca6b 100644 --- a/apps/files/l10n/et_EE.json +++ b/apps/files/l10n/et_EE.json @@ -40,9 +40,13 @@ "Delete" : "Kustuta", "Disconnect storage" : "Ühenda andmehoidla lahti.", "Unshare" : "Lõpeta jagamine", + "No permission to delete" : "Kustutamiseks pole õigusi", "Download" : "Lae alla", "Select" : "Vali", "Pending" : "Ootel", + "Unable to determine date" : "Kuupäeva tuvastamine ei õnnestunud", + "This operation is forbidden" : "See toiming on keelatud", + "This directory is unavailable, please check the logs or contact the administrator" : "See kaust pole saadaval. Palun kontrolli logifaile või võta ühendust administraatoriga", "Error moving file." : "Viga faili liigutamisel.", "Error moving file" : "Viga faili eemaldamisel", "Error" : "Viga", @@ -57,13 +61,13 @@ "_Uploading %n file_::_Uploading %n files_" : ["Laadin üles %n faili","Laadin üles %n faili"], "\"{name}\" is an invalid file name." : "\"{name}\" on vigane failinimi.", "File name cannot be empty." : "Faili nimi ei saa olla tühi.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} andmemaht on täis! Faile ei uuendata ega sünkroniseerita!", "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.", "{dirs} and {files}" : "{dirs} ja {files}", + "Favorited" : "Lemmikud", "Favorite" : "Lemmik", + "An error occurred while trying to update the tags" : "Siltide uuendamisel tekkis tõrge", "A new file or folder has been <strong>created</strong>" : "Uus fail või kataloog on <strong>loodud</strong>", "A file or folder has been <strong>changed</strong>" : "Fail või kataloog on <strong>muudetud</strong>", "A file or folder has been <strong>deleted</strong>" : "Fail või kataloog on <strong>kustutatud</strong>", @@ -84,6 +88,7 @@ "Maximum upload size" : "Maksimaalne üleslaadimise suurus", "max. possible: " : "maks. võimalik: ", "Save" : "Salvesta", + "Can not be edited from here due to insufficient permissions." : "Ei saa õiguste puudumise tõttu muuta.", "Settings" : "Seaded", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Kasuta seda aadressi <a href=\"%s\" target=\"_blank\">oma failidele ligipääsuks WebDAV kaudu</a>", @@ -94,9 +99,15 @@ "Folder" : "Kaust", "Upload" : "Lae üles", "Cancel upload" : "Tühista üleslaadimine", + "No files in here" : "Siin ei ole faile", + "Upload some content or sync with your devices!" : "Laadi sisu üles või süngi oma seadmetega!", + "No entries found in this folder" : "Selles kaustas ei leitud kirjeid", + "Select all" : "Vali kõik", "Upload too large" : "Üleslaadimine on liiga suur", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse.", "Files are being scanned, please wait." : "Faile skannitakse, palun oota.", - "Currently scanning" : "Praegu skännimisel" + "Currently scanning" : "Praegu skännimisel", + "No favorites" : "Lemmikuid pole", + "Files and folders you mark as favorite will show up here" : "Siin kuvatakse faile ja kaustasid, mille oled märkinud lemmikuteks" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js index 899f4f604f5..f54385bd3c6 100644 --- a/apps/files/l10n/eu.js +++ b/apps/files/l10n/eu.js @@ -63,9 +63,6 @@ OC.L10N.register( "File name cannot be empty." : "Fitxategi izena ezin da hutsa izan.", "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.", "{dirs} and {files}" : "{dirs} eta {files}", "Favorited" : "Gogokoa", "Favorite" : "Gogokoa", diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json index b798e9032a8..5eb3ede3e1f 100644 --- a/apps/files/l10n/eu.json +++ b/apps/files/l10n/eu.json @@ -61,9 +61,6 @@ "File name cannot be empty." : "Fitxategi izena ezin da hutsa izan.", "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.", "{dirs} and {files}" : "{dirs} eta {files}", "Favorited" : "Gogokoa", "Favorite" : "Gogokoa", diff --git a/apps/files/l10n/fi_FI.js b/apps/files/l10n/fi_FI.js index 66c0f37ab65..abeb0b26b23 100644 --- a/apps/files/l10n/fi_FI.js +++ b/apps/files/l10n/fi_FI.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Poista", "Disconnect storage" : "Katkaise yhteys tallennustilaan", "Unshare" : "Peru jakaminen", + "No permission to delete" : "Ei oikeutta poistaa", "Download" : "Lataa", "Select" : "Valitse", "Pending" : "Odottaa", "Unable to determine date" : "Päivämäärän määrittäminen epäonnistui", + "This operation is forbidden" : "Tämä toiminto on kielletty", + "This directory is unavailable, please check the logs or contact the administrator" : "Hakemisto ei ole käytettävissä. Tarkista lokit tai ole yhteydessä ylläpitoon.", "Error moving file." : "Virhe tiedostoa siirrettäessä.", "Error moving file" : "Virhe tiedostoa siirrettäessä", "Error" : "Virhe", @@ -61,11 +64,10 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Lähetetään %n tiedosto","Lähetetään %n tiedostoa"], "\"{name}\" is an invalid file name." : "\"{name}\" on virheellinen tiedostonimi.", "File name cannot be empty." : "Tiedoston nimi ei voi olla tyhjä.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Käyttäjän {owner} tallennustila on täynnä, tiedostoja ei voi enää päivittää tai synkronoida!", "Your storage is full, files can not be updated or synced anymore!" : "Tallennustila on loppu, tiedostoja ei voi enää päivittää tai synkronoida!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Käyttäjän {owner} tallennustila on melkein täynnä ({usedSpacePercent} %)", "Your storage is almost full ({usedSpacePercent}%)" : "Tallennustila on melkein loppu ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on käytössä, mutta salausavaimia ei ole alustettu. Ole hyvä ja kirjaudu sisään uudelleen.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Salaussovelluksen salausavain on virheellinen. Ole hyvä ja päivitä salausavain henkilökohtaisissa asetuksissasi jotta voit taas avata salatuskirjoitetut tiedostosi.", - "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.", "_matches '{filter}'_::_match '{filter}'_" : ["vastaa '{filter}'","vastaa '{filter}'"], "{dirs} and {files}" : "{dirs} ja {files}", "Favorited" : "Lisätty suosikkeihin", @@ -73,6 +75,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Tunnisteiden päivitystä yrittäessä tapahtui virhe", "A new file or folder has been <strong>created</strong>" : "Uusi tiedosto tai kansio on <strong>luotu</strong>", "A file or folder has been <strong>changed</strong>" : "Tiedostoa tai kansiota on <strong>muutettu</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Rajoita luomis- ja muutosilmoitukset <strong>omiin suosikkitiedostoihin</strong> <em>(Vain listaus)</em>", "A file or folder has been <strong>deleted</strong>" : "Tiedosto tai kansio on <strong>poistettu</strong>", "A file or folder has been <strong>restored</strong>" : "Tiedosto tai kansio on <strong>palautettu</strong>", "You created %1$s" : "Loit kohteen %1$s", diff --git a/apps/files/l10n/fi_FI.json b/apps/files/l10n/fi_FI.json index 1f7c353c7e8..f67505268c7 100644 --- a/apps/files/l10n/fi_FI.json +++ b/apps/files/l10n/fi_FI.json @@ -40,10 +40,13 @@ "Delete" : "Poista", "Disconnect storage" : "Katkaise yhteys tallennustilaan", "Unshare" : "Peru jakaminen", + "No permission to delete" : "Ei oikeutta poistaa", "Download" : "Lataa", "Select" : "Valitse", "Pending" : "Odottaa", "Unable to determine date" : "Päivämäärän määrittäminen epäonnistui", + "This operation is forbidden" : "Tämä toiminto on kielletty", + "This directory is unavailable, please check the logs or contact the administrator" : "Hakemisto ei ole käytettävissä. Tarkista lokit tai ole yhteydessä ylläpitoon.", "Error moving file." : "Virhe tiedostoa siirrettäessä.", "Error moving file" : "Virhe tiedostoa siirrettäessä", "Error" : "Virhe", @@ -59,11 +62,10 @@ "_Uploading %n file_::_Uploading %n files_" : ["Lähetetään %n tiedosto","Lähetetään %n tiedostoa"], "\"{name}\" is an invalid file name." : "\"{name}\" on virheellinen tiedostonimi.", "File name cannot be empty." : "Tiedoston nimi ei voi olla tyhjä.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Käyttäjän {owner} tallennustila on täynnä, tiedostoja ei voi enää päivittää tai synkronoida!", "Your storage is full, files can not be updated or synced anymore!" : "Tallennustila on loppu, tiedostoja ei voi enää päivittää tai synkronoida!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Käyttäjän {owner} tallennustila on melkein täynnä ({usedSpacePercent} %)", "Your storage is almost full ({usedSpacePercent}%)" : "Tallennustila on melkein loppu ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on käytössä, mutta salausavaimia ei ole alustettu. Ole hyvä ja kirjaudu sisään uudelleen.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Salaussovelluksen salausavain on virheellinen. Ole hyvä ja päivitä salausavain henkilökohtaisissa asetuksissasi jotta voit taas avata salatuskirjoitetut tiedostosi.", - "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.", "_matches '{filter}'_::_match '{filter}'_" : ["vastaa '{filter}'","vastaa '{filter}'"], "{dirs} and {files}" : "{dirs} ja {files}", "Favorited" : "Lisätty suosikkeihin", @@ -71,6 +73,7 @@ "An error occurred while trying to update the tags" : "Tunnisteiden päivitystä yrittäessä tapahtui virhe", "A new file or folder has been <strong>created</strong>" : "Uusi tiedosto tai kansio on <strong>luotu</strong>", "A file or folder has been <strong>changed</strong>" : "Tiedostoa tai kansiota on <strong>muutettu</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Rajoita luomis- ja muutosilmoitukset <strong>omiin suosikkitiedostoihin</strong> <em>(Vain listaus)</em>", "A file or folder has been <strong>deleted</strong>" : "Tiedosto tai kansio on <strong>poistettu</strong>", "A file or folder has been <strong>restored</strong>" : "Tiedosto tai kansio on <strong>palautettu</strong>", "You created %1$s" : "Loit kohteen %1$s", diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js index 242f2ad4d76..1d57bb79d07 100644 --- a/apps/files/l10n/fr.js +++ b/apps/files/l10n/fr.js @@ -16,7 +16,7 @@ OC.L10N.register( "No file was uploaded. Unknown error" : "Aucun fichier n'a été envoyé. Erreur inconnue", "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Le fichier envoyé dépasse l'instruction upload_max_filesize située dans le fichier php.ini :", - "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui est spécifiée dans le formulaire HTML.", + "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui était spécifiée dans le formulaire HTML.", "The uploaded file was only partially uploaded" : "Le fichier n'a été que partiellement envoyé.", "No file was uploaded" : "Pas de fichier envoyé.", "Missing a temporary folder" : "Absence de dossier temporaire", @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Supprimer", "Disconnect storage" : "Déconnecter ce support de stockage", "Unshare" : "Ne plus partager", + "No permission to delete" : "Pas de permission de suppression", "Download" : "Télécharger", "Select" : "Sélectionner", "Pending" : "En attente", "Unable to determine date" : "Impossible de déterminer la date", + "This operation is forbidden" : "Cette opération est interdite", + "This directory is unavailable, please check the logs or contact the administrator" : "Ce répertoire n'est pas disponible. Consultez les logs ou contactez votre administrateur", "Error moving file." : "Erreur lors du déplacement du fichier.", "Error moving file" : "Erreur lors du déplacement du fichier", "Error" : "Erreur", @@ -61,20 +64,20 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"], "\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.", "File name cannot be empty." : "Le nom de fichier ne peut être vide.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ou synchronisé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 ajoutés ou synchronisés !", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "L'espace de stockage de {owner} est presque plein ({usedSpacePercent}%)", "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" : "Le chiffrement est activé, 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 le chiffrement n'est pas valide ! 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 a été désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos paramètres personnels pour déchiffrer vos fichiers.", "_matches '{filter}'_::_match '{filter}'_" : ["correspond à '{filter}'","correspondent à '{filter}'"], "{dirs} and {files}" : "{dirs} et {files}", "Favorited" : "Marqué comme favori", "Favorite" : "Favoris", - "An error occurred while trying to update the tags" : "Une erreur est survenue lors de la tentative de mise à jour des étiquettes", + "An error occurred while trying to update the tags" : "Une erreur est survenue lors de la mise à jour des étiquettes", "A new file or folder has been <strong>created</strong>" : "Un nouveau fichier ou répertoire a été <strong>créé</strong>", "A file or folder has been <strong>changed</strong>" : "Un fichier ou un répertoire a été <strong>modifié</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limiter les notifications à ce qui concerne la création et la modification de vos <strong>fichiers favoris</strong> <em>(Flux uniquement)</em>", "A file or folder has been <strong>deleted</strong>" : "Un fichier ou un répertoire a été <strong>supprimé</strong>", - "A file or folder has been <strong>restored</strong>" : "Un fichier ou répertoire a été <strong>restauré</strong>", + "A file or folder has been <strong>restored</strong>" : "Un fichier ou un répertoire a été <strong>restauré</strong>", "You created %1$s" : "Vous avez créé %1$s", "%2$s created %1$s" : "%2$s a créé %1$s", "%1$s was created in a public folder" : "%1$s a été créé dans un dossier public", @@ -91,7 +94,7 @@ OC.L10N.register( "Maximum upload size" : "Taille max. d'envoi", "max. possible: " : "Max. possible :", "Save" : "Sauvegarder", - "Can not be edited from here due to insufficient permissions." : "Ne peut être modifié ici à cause de permissions insufisantes.", + "Can not be edited from here due to insufficient permissions." : "Ne peut être modifié ici à cause de permissions insuffisantes.", "Settings" : "Paramètres", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\">accéder à vos fichiers par WebDAV</a>", @@ -102,7 +105,7 @@ OC.L10N.register( "Folder" : "Dossier", "Upload" : "Chargement", "Cancel upload" : "Annuler l'envoi", - "No files in here" : "Pas de fichier ici", + "No files in here" : "Aucun fichier ici", "Upload some content or sync with your devices!" : "Déposez du contenu ou synchronisez vos appareils !", "No entries found in this folder" : "Aucune entrée trouvée dans ce dossier", "Select all" : "Tout sélectionner", diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json index 76136495968..2b578466faa 100644 --- a/apps/files/l10n/fr.json +++ b/apps/files/l10n/fr.json @@ -14,7 +14,7 @@ "No file was uploaded. Unknown error" : "Aucun fichier n'a été envoyé. Erreur inconnue", "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Le fichier envoyé dépasse l'instruction upload_max_filesize située dans le fichier php.ini :", - "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui est spécifiée dans le formulaire HTML.", + "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui était spécifiée dans le formulaire HTML.", "The uploaded file was only partially uploaded" : "Le fichier n'a été que partiellement envoyé.", "No file was uploaded" : "Pas de fichier envoyé.", "Missing a temporary folder" : "Absence de dossier temporaire", @@ -40,10 +40,13 @@ "Delete" : "Supprimer", "Disconnect storage" : "Déconnecter ce support de stockage", "Unshare" : "Ne plus partager", + "No permission to delete" : "Pas de permission de suppression", "Download" : "Télécharger", "Select" : "Sélectionner", "Pending" : "En attente", "Unable to determine date" : "Impossible de déterminer la date", + "This operation is forbidden" : "Cette opération est interdite", + "This directory is unavailable, please check the logs or contact the administrator" : "Ce répertoire n'est pas disponible. Consultez les logs ou contactez votre administrateur", "Error moving file." : "Erreur lors du déplacement du fichier.", "Error moving file" : "Erreur lors du déplacement du fichier", "Error" : "Erreur", @@ -59,20 +62,20 @@ "_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"], "\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.", "File name cannot be empty." : "Le nom de fichier ne peut être vide.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ou synchronisé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 ajoutés ou synchronisés !", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "L'espace de stockage de {owner} est presque plein ({usedSpacePercent}%)", "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" : "Le chiffrement est activé, 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 le chiffrement n'est pas valide ! 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 a été désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos paramètres personnels pour déchiffrer vos fichiers.", "_matches '{filter}'_::_match '{filter}'_" : ["correspond à '{filter}'","correspondent à '{filter}'"], "{dirs} and {files}" : "{dirs} et {files}", "Favorited" : "Marqué comme favori", "Favorite" : "Favoris", - "An error occurred while trying to update the tags" : "Une erreur est survenue lors de la tentative de mise à jour des étiquettes", + "An error occurred while trying to update the tags" : "Une erreur est survenue lors de la mise à jour des étiquettes", "A new file or folder has been <strong>created</strong>" : "Un nouveau fichier ou répertoire a été <strong>créé</strong>", "A file or folder has been <strong>changed</strong>" : "Un fichier ou un répertoire a été <strong>modifié</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limiter les notifications à ce qui concerne la création et la modification de vos <strong>fichiers favoris</strong> <em>(Flux uniquement)</em>", "A file or folder has been <strong>deleted</strong>" : "Un fichier ou un répertoire a été <strong>supprimé</strong>", - "A file or folder has been <strong>restored</strong>" : "Un fichier ou répertoire a été <strong>restauré</strong>", + "A file or folder has been <strong>restored</strong>" : "Un fichier ou un répertoire a été <strong>restauré</strong>", "You created %1$s" : "Vous avez créé %1$s", "%2$s created %1$s" : "%2$s a créé %1$s", "%1$s was created in a public folder" : "%1$s a été créé dans un dossier public", @@ -89,7 +92,7 @@ "Maximum upload size" : "Taille max. d'envoi", "max. possible: " : "Max. possible :", "Save" : "Sauvegarder", - "Can not be edited from here due to insufficient permissions." : "Ne peut être modifié ici à cause de permissions insufisantes.", + "Can not be edited from here due to insufficient permissions." : "Ne peut être modifié ici à cause de permissions insuffisantes.", "Settings" : "Paramètres", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\">accéder à vos fichiers par WebDAV</a>", @@ -100,7 +103,7 @@ "Folder" : "Dossier", "Upload" : "Chargement", "Cancel upload" : "Annuler l'envoi", - "No files in here" : "Pas de fichier ici", + "No files in here" : "Aucun fichier ici", "Upload some content or sync with your devices!" : "Déposez du contenu ou synchronisez vos appareils !", "No entries found in this folder" : "Aucune entrée trouvée dans ce dossier", "Select all" : "Tout sélectionner", diff --git a/apps/files/l10n/gl.js b/apps/files/l10n/gl.js index e23212fe504..2ab8c9f94ab 100644 --- a/apps/files/l10n/gl.js +++ b/apps/files/l10n/gl.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Eliminar", "Disconnect storage" : "Desconectar o almacenamento", "Unshare" : "Deixar de compartir", + "No permission to delete" : "Non ten permisos para eliminar", "Download" : "Descargar", "Select" : "Seleccionar", "Pending" : "Pendentes", "Unable to determine date" : "Non é posíbel determinar a data", + "This operation is forbidden" : "Esta operación está prohibida", + "This directory is unavailable, please check the logs or contact the administrator" : "Este directorio non está dispoñíbel, comprobe os rexistros ou póñase en contacto co administrador", "Error moving file." : "Produciuse un erro ao mover o ficheiro.", "Error moving file" : "Produciuse un erro ao mover o ficheiro", "Error" : "Erro", @@ -61,11 +64,10 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Cargando %n ficheiro","Cargando %n ficheiros"], "\"{name}\" is an invalid file name." : "«{name}» é un nome incorrecto de ficheiro.", "File name cannot be empty." : "O nome de ficheiro non pode estar baleiro", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "O espazo de almacenamento de {owner} está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "O espazo de almacenamento de {owner} está case cheo ({usedSpacePercent}%)", "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" : "A aplicación de cifrado está activada, mais as chaves non foron preparadas, 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 a aplicación 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.", "_matches '{filter}'_::_match '{filter}'_" : ["coincidente con «{filter}»","coincidentes con «{filter}»"], "{dirs} and {files}" : "{dirs} e {files}", "Favorited" : "Marcado como favorito", @@ -73,6 +75,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Produciuse un erro ao tentar actualizar as etiquetas", "A new file or folder has been <strong>created</strong>" : "<strong>Creouse</strong> un novo ficheiro ou cartafol", "A file or folder has been <strong>changed</strong>" : "<strong>Cambiouse</strong> un ficheiro ou cartafol", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limita as notificacións sobre a creación e modificación dos seus <strong>ficheiros favoritos</strong> <em>(só os fluxos)</em>", "A file or folder has been <strong>deleted</strong>" : "<strong>Eliminouse</strong> un ficheiro ou cartafol", "A file or folder has been <strong>restored</strong>" : "Foi <strong>restaurado</strong> satisfactoriamente un ficheiro ou cartafol", "You created %1$s" : "Creou %1$s", diff --git a/apps/files/l10n/gl.json b/apps/files/l10n/gl.json index f5ffd326b89..0668c535aee 100644 --- a/apps/files/l10n/gl.json +++ b/apps/files/l10n/gl.json @@ -40,10 +40,13 @@ "Delete" : "Eliminar", "Disconnect storage" : "Desconectar o almacenamento", "Unshare" : "Deixar de compartir", + "No permission to delete" : "Non ten permisos para eliminar", "Download" : "Descargar", "Select" : "Seleccionar", "Pending" : "Pendentes", "Unable to determine date" : "Non é posíbel determinar a data", + "This operation is forbidden" : "Esta operación está prohibida", + "This directory is unavailable, please check the logs or contact the administrator" : "Este directorio non está dispoñíbel, comprobe os rexistros ou póñase en contacto co administrador", "Error moving file." : "Produciuse un erro ao mover o ficheiro.", "Error moving file" : "Produciuse un erro ao mover o ficheiro", "Error" : "Erro", @@ -59,11 +62,10 @@ "_Uploading %n file_::_Uploading %n files_" : ["Cargando %n ficheiro","Cargando %n ficheiros"], "\"{name}\" is an invalid file name." : "«{name}» é un nome incorrecto de ficheiro.", "File name cannot be empty." : "O nome de ficheiro non pode estar baleiro", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "O espazo de almacenamento de {owner} está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "O espazo de almacenamento de {owner} está case cheo ({usedSpacePercent}%)", "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" : "A aplicación de cifrado está activada, mais as chaves non foron preparadas, 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 a aplicación 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.", "_matches '{filter}'_::_match '{filter}'_" : ["coincidente con «{filter}»","coincidentes con «{filter}»"], "{dirs} and {files}" : "{dirs} e {files}", "Favorited" : "Marcado como favorito", @@ -71,6 +73,7 @@ "An error occurred while trying to update the tags" : "Produciuse un erro ao tentar actualizar as etiquetas", "A new file or folder has been <strong>created</strong>" : "<strong>Creouse</strong> un novo ficheiro ou cartafol", "A file or folder has been <strong>changed</strong>" : "<strong>Cambiouse</strong> un ficheiro ou cartafol", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limita as notificacións sobre a creación e modificación dos seus <strong>ficheiros favoritos</strong> <em>(só os fluxos)</em>", "A file or folder has been <strong>deleted</strong>" : "<strong>Eliminouse</strong> un ficheiro ou cartafol", "A file or folder has been <strong>restored</strong>" : "Foi <strong>restaurado</strong> satisfactoriamente un ficheiro ou cartafol", "You created %1$s" : "Creou %1$s", diff --git a/apps/files/l10n/hr.js b/apps/files/l10n/hr.js index a1d08bea51d..f62fe8d6c64 100644 --- a/apps/files/l10n/hr.js +++ b/apps/files/l10n/hr.js @@ -63,9 +63,6 @@ OC.L10N.register( "File name cannot be empty." : "Naziv datoteke ne može biti prazan.", "Your storage is full, files can not be updated or synced anymore!" : "Vaša je pohrana puna, datoteke više nije moguće ažurirati niti sinkronizirati!", "Your storage is almost full ({usedSpacePercent}%)" : "Vaš prostor za pohranu je skoro pun ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je onemogućena, ali vaši ključevi nisu inicijalizirani, molimo odjavite se i 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." : "Neispravan privatni ključ za šifriranje. Molimo ažurirajte lozinku svoga privatnog ključa u svojim osobnimpostavkama da biste obnovili pristup svojim šifriranim datotekama.", - "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogućeno, ali vaše su datoteke još uvijek šifrirane. Molimo, otiđite u svojeosobne postavke da biste dešifrirali svoje datoteke.", "{dirs} and {files}" : "{dirs} i {files}", "Favorited" : "Favoritovan", "Favorite" : "Favorit", diff --git a/apps/files/l10n/hr.json b/apps/files/l10n/hr.json index 80a0faec727..9a83a301dd9 100644 --- a/apps/files/l10n/hr.json +++ b/apps/files/l10n/hr.json @@ -61,9 +61,6 @@ "File name cannot be empty." : "Naziv datoteke ne može biti prazan.", "Your storage is full, files can not be updated or synced anymore!" : "Vaša je pohrana puna, datoteke više nije moguće ažurirati niti sinkronizirati!", "Your storage is almost full ({usedSpacePercent}%)" : "Vaš prostor za pohranu je skoro pun ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je onemogućena, ali vaši ključevi nisu inicijalizirani, molimo odjavite se i 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." : "Neispravan privatni ključ za šifriranje. Molimo ažurirajte lozinku svoga privatnog ključa u svojim osobnimpostavkama da biste obnovili pristup svojim šifriranim datotekama.", - "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogućeno, ali vaše su datoteke još uvijek šifrirane. Molimo, otiđite u svojeosobne postavke da biste dešifrirali svoje datoteke.", "{dirs} and {files}" : "{dirs} i {files}", "Favorited" : "Favoritovan", "Favorite" : "Favorit", diff --git a/apps/files/l10n/hu_HU.js b/apps/files/l10n/hu_HU.js index 3365195d258..0f7d09bc123 100644 --- a/apps/files/l10n/hu_HU.js +++ b/apps/files/l10n/hu_HU.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Törlés", "Disconnect storage" : "Tároló leválasztása", "Unshare" : "A megosztás visszavonása", + "No permission to delete" : "Nincs törlési jogosultsága", "Download" : "Letöltés", "Select" : "Kiválaszt", "Pending" : "Folyamatban", "Unable to determine date" : "Nem lehet meghatározni a dátumot", + "This operation is forbidden" : "Tiltott művelet", + "This directory is unavailable, please check the logs or contact the administrator" : "Ez a könyvtár nem elérhető, kérem nézze meg a naplófájlokat vagy keresse az adminisztrátort", "Error moving file." : "Hiba történt a fájl áthelyezése közben.", "Error moving file" : "Az állomány áthelyezése nem sikerült.", "Error" : "Hiba", @@ -61,11 +64,10 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["%n állomány feltöltése","%n állomány feltöltése"], "\"{name}\" is an invalid file name." : "\"{name}\" érvénytelen, mint fájlnév.", "File name cannot be empty." : "A fájlnév nem lehet semmi.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "A {owner} felhasználó tárolója betelt, a fájlok nem frissíthetők és szinkronizálhatók többet!", "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.", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "A {owner} felhasználó tárolója majdnem betelt ({usedSpacePercent}%)", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["egyezések '{filter}'","egyezés '{filter}'"], "{dirs} and {files}" : "{dirs} és {files}", "Favorited" : "Kedvenc", @@ -73,6 +75,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Hiba történt, miközben megpróbálta frissíteni a címkéket", "A new file or folder has been <strong>created</strong>" : "Új fájl vagy könyvtár <strong>létrehozása</strong>", "A file or folder has been <strong>changed</strong>" : "Fájl vagy könyvtár <strong>módosítása</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Szűkítse le az értesítéseket a létrehozásról és a változásokról a <strong>kedvenc fájlok</strong> <em>(Stream only)</em> -ra", "A file or folder has been <strong>deleted</strong>" : "Fájl vagy könyvtár <strong>törlése</strong>", "A file or folder has been <strong>restored</strong>" : "Fájl vagy könyvtár <strong>visszatöltése</strong>", "You created %1$s" : "Létrehoztam: %1$s", @@ -102,6 +105,7 @@ OC.L10N.register( "Folder" : "Mappa", "Upload" : "Feltöltés", "Cancel upload" : "A feltöltés megszakítása", + "No files in here" : "Itt nincsenek fájlok", "Upload some content or sync with your devices!" : "Tölts fel néhány tartalmat, vagy szinkronizálj az eszközöddel!", "No entries found in this folder" : "Nincsenek bejegyzések ebben a könyvtárban", "Select all" : "Összes kijelölése", diff --git a/apps/files/l10n/hu_HU.json b/apps/files/l10n/hu_HU.json index e5c3ab973d8..bf98eef627b 100644 --- a/apps/files/l10n/hu_HU.json +++ b/apps/files/l10n/hu_HU.json @@ -40,10 +40,13 @@ "Delete" : "Törlés", "Disconnect storage" : "Tároló leválasztása", "Unshare" : "A megosztás visszavonása", + "No permission to delete" : "Nincs törlési jogosultsága", "Download" : "Letöltés", "Select" : "Kiválaszt", "Pending" : "Folyamatban", "Unable to determine date" : "Nem lehet meghatározni a dátumot", + "This operation is forbidden" : "Tiltott művelet", + "This directory is unavailable, please check the logs or contact the administrator" : "Ez a könyvtár nem elérhető, kérem nézze meg a naplófájlokat vagy keresse az adminisztrátort", "Error moving file." : "Hiba történt a fájl áthelyezése közben.", "Error moving file" : "Az állomány áthelyezése nem sikerült.", "Error" : "Hiba", @@ -59,11 +62,10 @@ "_Uploading %n file_::_Uploading %n files_" : ["%n állomány feltöltése","%n állomány feltöltése"], "\"{name}\" is an invalid file name." : "\"{name}\" érvénytelen, mint fájlnév.", "File name cannot be empty." : "A fájlnév nem lehet semmi.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "A {owner} felhasználó tárolója betelt, a fájlok nem frissíthetők és szinkronizálhatók többet!", "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.", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "A {owner} felhasználó tárolója majdnem betelt ({usedSpacePercent}%)", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["egyezések '{filter}'","egyezés '{filter}'"], "{dirs} and {files}" : "{dirs} és {files}", "Favorited" : "Kedvenc", @@ -71,6 +73,7 @@ "An error occurred while trying to update the tags" : "Hiba történt, miközben megpróbálta frissíteni a címkéket", "A new file or folder has been <strong>created</strong>" : "Új fájl vagy könyvtár <strong>létrehozása</strong>", "A file or folder has been <strong>changed</strong>" : "Fájl vagy könyvtár <strong>módosítása</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Szűkítse le az értesítéseket a létrehozásról és a változásokról a <strong>kedvenc fájlok</strong> <em>(Stream only)</em> -ra", "A file or folder has been <strong>deleted</strong>" : "Fájl vagy könyvtár <strong>törlése</strong>", "A file or folder has been <strong>restored</strong>" : "Fájl vagy könyvtár <strong>visszatöltése</strong>", "You created %1$s" : "Létrehoztam: %1$s", @@ -100,6 +103,7 @@ "Folder" : "Mappa", "Upload" : "Feltöltés", "Cancel upload" : "A feltöltés megszakítása", + "No files in here" : "Itt nincsenek fájlok", "Upload some content or sync with your devices!" : "Tölts fel néhány tartalmat, vagy szinkronizálj az eszközöddel!", "No entries found in this folder" : "Nincsenek bejegyzések ebben a könyvtárban", "Select all" : "Összes kijelölése", diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js index d5bf00e01f3..d11e9b7a4f6 100644 --- a/apps/files/l10n/id.js +++ b/apps/files/l10n/id.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Hapus", "Disconnect storage" : "Memutuskan penyimpaan", "Unshare" : "Batalkan berbagi", + "No permission to delete" : "Tidak memiliki hak untuk menghapus", "Download" : "Unduh", "Select" : "Pilih", - "Pending" : "Menunggu", + "Pending" : "Tertunda", "Unable to determine date" : "Tidak dapat menentukan tanggal", + "This operation is forbidden" : "Operasi ini dilarang", + "This directory is unavailable, please check the logs or contact the administrator" : "Direktori ini tidak tersedia, silakan periksa log atau hubungi kontak", "Error moving file." : "Kesalahan saat memindahkan berkas.", "Error moving file" : "Kesalahan saat memindahkan berkas", "Error" : "Kesalahan ", @@ -61,17 +64,18 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Mengunggah %n berkas"], "\"{name}\" is an invalid file name." : "\"{name}\" adalah nama berkas yang tidak sah.", "File name cannot be empty." : "Nama berkas tidak boleh kosong.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Penyimpanan {owner} penuh, berkas tidak dapat diperbarui atau disinkronisasikan lagi!", "Your storage is full, files can not be updated or synced anymore!" : "Ruang penyimpanan Anda penuh, berkas tidak dapat diperbarui atau disinkronkan lagi!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Penyimpanan {owner} hampir penuh ({usedSpacePercent}%)", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["cocok dengan '{filter}'"], "{dirs} and {files}" : "{dirs} dan {files}", "Favorited" : "Difavoritkan", "Favorite" : "Favorit", + "An error occurred while trying to update the tags" : "Terjadi kesalahan saat mencoba untuk memperbarui label", "A new file or folder has been <strong>created</strong>" : "Sebuah berkas atau folder baru telah <strong>dibuat</strong>", "A file or folder has been <strong>changed</strong>" : "Sebuah berkas atau folder telah <strong>diubah</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Batas notifikasi tentang pembuatan dan perubahan <strong>berkas favorit</strong> Anda <em>(Hanya stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Sebuah berkas atau folder telah <strong>dihapus</strong>", "A file or folder has been <strong>restored</strong>" : "Sebuah berkas atau folder telah <strong>dipulihkan</strong>", "You created %1$s" : "Anda membuat %1$s", @@ -90,6 +94,7 @@ OC.L10N.register( "Maximum upload size" : "Ukuran pengunggahan maksimum", "max. possible: " : "Kemungkinan maks.:", "Save" : "Simpan", + "Can not be edited from here due to insufficient permissions." : "Tidak dapat diidit dari sini karena tidak memiliki izin.", "Settings" : "Pengaturan", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\">mengakses Berkas via WebDAV</a>", @@ -100,6 +105,7 @@ OC.L10N.register( "Folder" : "Folder", "Upload" : "Unggah", "Cancel upload" : "Batal unggah", + "No files in here" : "Tidak ada berkas disini", "Upload some content or sync with your devices!" : "Unggah beberapa konten dan sinkronisasikan dengan perangkat Anda!", "No entries found in this folder" : "Tidak ada entri yang ditemukan dalam folder ini", "Select all" : "Pilih Semua", diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json index 52b1426a6f7..f2b557205b7 100644 --- a/apps/files/l10n/id.json +++ b/apps/files/l10n/id.json @@ -40,10 +40,13 @@ "Delete" : "Hapus", "Disconnect storage" : "Memutuskan penyimpaan", "Unshare" : "Batalkan berbagi", + "No permission to delete" : "Tidak memiliki hak untuk menghapus", "Download" : "Unduh", "Select" : "Pilih", - "Pending" : "Menunggu", + "Pending" : "Tertunda", "Unable to determine date" : "Tidak dapat menentukan tanggal", + "This operation is forbidden" : "Operasi ini dilarang", + "This directory is unavailable, please check the logs or contact the administrator" : "Direktori ini tidak tersedia, silakan periksa log atau hubungi kontak", "Error moving file." : "Kesalahan saat memindahkan berkas.", "Error moving file" : "Kesalahan saat memindahkan berkas", "Error" : "Kesalahan ", @@ -59,17 +62,18 @@ "_Uploading %n file_::_Uploading %n files_" : ["Mengunggah %n berkas"], "\"{name}\" is an invalid file name." : "\"{name}\" adalah nama berkas yang tidak sah.", "File name cannot be empty." : "Nama berkas tidak boleh kosong.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Penyimpanan {owner} penuh, berkas tidak dapat diperbarui atau disinkronisasikan lagi!", "Your storage is full, files can not be updated or synced anymore!" : "Ruang penyimpanan Anda penuh, berkas tidak dapat diperbarui atau disinkronkan lagi!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Penyimpanan {owner} hampir penuh ({usedSpacePercent}%)", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["cocok dengan '{filter}'"], "{dirs} and {files}" : "{dirs} dan {files}", "Favorited" : "Difavoritkan", "Favorite" : "Favorit", + "An error occurred while trying to update the tags" : "Terjadi kesalahan saat mencoba untuk memperbarui label", "A new file or folder has been <strong>created</strong>" : "Sebuah berkas atau folder baru telah <strong>dibuat</strong>", "A file or folder has been <strong>changed</strong>" : "Sebuah berkas atau folder telah <strong>diubah</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Batas notifikasi tentang pembuatan dan perubahan <strong>berkas favorit</strong> Anda <em>(Hanya stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Sebuah berkas atau folder telah <strong>dihapus</strong>", "A file or folder has been <strong>restored</strong>" : "Sebuah berkas atau folder telah <strong>dipulihkan</strong>", "You created %1$s" : "Anda membuat %1$s", @@ -88,6 +92,7 @@ "Maximum upload size" : "Ukuran pengunggahan maksimum", "max. possible: " : "Kemungkinan maks.:", "Save" : "Simpan", + "Can not be edited from here due to insufficient permissions." : "Tidak dapat diidit dari sini karena tidak memiliki izin.", "Settings" : "Pengaturan", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\">mengakses Berkas via WebDAV</a>", @@ -98,6 +103,7 @@ "Folder" : "Folder", "Upload" : "Unggah", "Cancel upload" : "Batal unggah", + "No files in here" : "Tidak ada berkas disini", "Upload some content or sync with your devices!" : "Unggah beberapa konten dan sinkronisasikan dengan perangkat Anda!", "No entries found in this folder" : "Tidak ada entri yang ditemukan dalam folder ini", "Select all" : "Pilih Semua", diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js index 00507bf43d9..6fea601bdfc 100644 --- a/apps/files/l10n/is.js +++ b/apps/files/l10n/is.js @@ -42,4 +42,4 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni.", "Files are being scanned, please wait." : "Verið er að skima skrár, vinsamlegast hinkraðu." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=2; plural=(n % 10 == 1 || n % 100 != 11);"); diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json index e63dd585d17..1fe2dd93e2f 100644 --- a/apps/files/l10n/is.json +++ b/apps/files/l10n/is.json @@ -39,5 +39,5 @@ "Upload too large" : "Innsend skrá er of stór", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni.", "Files are being scanned, please wait." : "Verið er að skima skrár, vinsamlegast hinkraðu." -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 || n % 100 != 11);" }
\ No newline at end of file diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js index 52f1d0a728d..2c57c0e5ac5 100644 --- a/apps/files/l10n/it.js +++ b/apps/files/l10n/it.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Elimina", "Disconnect storage" : "Disconnetti archiviazione", "Unshare" : "Rimuovi condivisione", + "No permission to delete" : "Nessun permesso per eliminare", "Download" : "Scarica", "Select" : "Seleziona", "Pending" : "In corso", "Unable to determine date" : "Impossibile determinare la data", + "This operation is forbidden" : "Questa operazione è vietata", + "This directory is unavailable, please check the logs or contact the administrator" : "Questa cartella non è disponibile, controlla i log o contatta l'amministratore", "Error moving file." : "Errore durante lo spostamento del file.", "Error moving file" : "Errore durante lo spostamento del file", "Error" : "Errore", @@ -61,11 +64,10 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Caricamento di %n file in corso","Caricamento di %n file in corso"], "\"{name}\" is an invalid file name." : "\"{name}\" non è un nome file valido.", "File name cannot be empty." : "Il nome del file non può essere vuoto.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lo spazio di archiviazione di {owner} è pieno, i file non possono essere più aggiornati o sincronizzati!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lo spazio di archiviazione di {owner} è quasi pieno ({usedSpacePercent}%)", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["corrispondono a '{filter}'","corrisponde a '{filter}'"], "{dirs} and {files}" : "{dirs} e {files}", "Favorited" : "Preferiti", @@ -73,6 +75,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Si è verificato un errore durante il tentativo di aggiornare le etichette", "A new file or folder has been <strong>created</strong>" : "Un nuovo file o cartella è stato <strong>creato</strong>", "A file or folder has been <strong>changed</strong>" : "Un file o una cartella è stato <strong>modificato</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limita le notifiche relative alla creazione e alla modifica dei tuoi <strong>file preferiti</strong> <em>(Solo flusso)</em>", "A file or folder has been <strong>deleted</strong>" : "Un file o una cartella è stato <strong>eliminato</strong>", "A file or folder has been <strong>restored</strong>" : "Un file o una cartella è stato <strong>ripristinato</strong>", "You created %1$s" : "Hai creato %1$s", diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json index ce73465ce73..4ebb6a360b5 100644 --- a/apps/files/l10n/it.json +++ b/apps/files/l10n/it.json @@ -40,10 +40,13 @@ "Delete" : "Elimina", "Disconnect storage" : "Disconnetti archiviazione", "Unshare" : "Rimuovi condivisione", + "No permission to delete" : "Nessun permesso per eliminare", "Download" : "Scarica", "Select" : "Seleziona", "Pending" : "In corso", "Unable to determine date" : "Impossibile determinare la data", + "This operation is forbidden" : "Questa operazione è vietata", + "This directory is unavailable, please check the logs or contact the administrator" : "Questa cartella non è disponibile, controlla i log o contatta l'amministratore", "Error moving file." : "Errore durante lo spostamento del file.", "Error moving file" : "Errore durante lo spostamento del file", "Error" : "Errore", @@ -59,11 +62,10 @@ "_Uploading %n file_::_Uploading %n files_" : ["Caricamento di %n file in corso","Caricamento di %n file in corso"], "\"{name}\" is an invalid file name." : "\"{name}\" non è un nome file valido.", "File name cannot be empty." : "Il nome del file non può essere vuoto.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lo spazio di archiviazione di {owner} è pieno, i file non possono essere più aggiornati o sincronizzati!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lo spazio di archiviazione di {owner} è quasi pieno ({usedSpacePercent}%)", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["corrispondono a '{filter}'","corrisponde a '{filter}'"], "{dirs} and {files}" : "{dirs} e {files}", "Favorited" : "Preferiti", @@ -71,6 +73,7 @@ "An error occurred while trying to update the tags" : "Si è verificato un errore durante il tentativo di aggiornare le etichette", "A new file or folder has been <strong>created</strong>" : "Un nuovo file o cartella è stato <strong>creato</strong>", "A file or folder has been <strong>changed</strong>" : "Un file o una cartella è stato <strong>modificato</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limita le notifiche relative alla creazione e alla modifica dei tuoi <strong>file preferiti</strong> <em>(Solo flusso)</em>", "A file or folder has been <strong>deleted</strong>" : "Un file o una cartella è stato <strong>eliminato</strong>", "A file or folder has been <strong>restored</strong>" : "Un file o una cartella è stato <strong>ripristinato</strong>", "You created %1$s" : "Hai creato %1$s", diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js index 7b4ccb0c6bc..5a0b4247e93 100644 --- a/apps/files/l10n/ja.js +++ b/apps/files/l10n/ja.js @@ -42,16 +42,19 @@ OC.L10N.register( "Delete" : "削除", "Disconnect storage" : "ストレージを切断する", "Unshare" : "共有解除", + "No permission to delete" : "削除する権限がありません", "Download" : "ダウンロード", "Select" : "選択", "Pending" : "中断", "Unable to determine date" : "更新日不明", + "This operation is forbidden" : "この操作は禁止されています", + "This directory is unavailable, please check the logs or contact the administrator" : "このディレクトリは利用できません。ログを確認するか管理者に問い合わせてください。", "Error moving file." : "ファイル移動でエラー", "Error moving file" : "ファイルの移動エラー", "Error" : "エラー", "Could not rename file" : "ファイルの名前変更ができませんでした", "Error deleting file." : "ファイルの削除エラー。", - "No entries in this folder match '{filter}'" : "このフォルダで '{filter}' にマッチするものはありません", + "No entries in this folder match '{filter}'" : "このフォルダー内で '{filter}' にマッチするものはありません", "Name" : "名前", "Size" : "サイズ", "Modified" : "更新日時", @@ -61,11 +64,10 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["%n 個のファイルをアップロード中"], "\"{name}\" is an invalid file name." : "\"{name}\" は無効なファイル名です。", "File name cannot be empty." : "ファイル名を空にすることはできません。", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} のストレージは一杯です。ファイルの更新と同期はもうできません!", "Your storage is full, files can not be updated or synced anymore!" : "あなたのストレージは一杯です。ファイルの更新と同期はもうできません!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} のストレージはほぼ一杯です。({usedSpacePercent}%)", "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." : "暗号化の機能は無効化されましたが、ファイルはすでに暗号化されています。個人設定からファイルを複合を行ってください。", "_matches '{filter}'_::_match '{filter}'_" : [" '{filter}' にマッチ"], "{dirs} and {files}" : "{dirs} と {files}", "Favorited" : "お気に入り済", @@ -73,6 +75,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "タグを更新する際にエラーが発生しました", "A new file or folder has been <strong>created</strong>" : "新しいファイルまたはフォルダーを<strong>作成</strong>したとき", "A file or folder has been <strong>changed</strong>" : "ファイルまたはフォルダーを<strong>変更</strong>したとき", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>お気に入りファイル</strong>に対する作成と変更の通知は制限されています。<em>(表示のみ)</em>", "A file or folder has been <strong>deleted</strong>" : "ファイルまたはフォルダーを<strong>削除</strong>したとき", "A file or folder has been <strong>restored</strong>" : "ファイルまたはフォルダーを<strong>復元</strong>したとき", "You created %1$s" : "あなたは %1$s を作成しました", diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json index 1ec47b409db..bcc9c1c77a1 100644 --- a/apps/files/l10n/ja.json +++ b/apps/files/l10n/ja.json @@ -40,16 +40,19 @@ "Delete" : "削除", "Disconnect storage" : "ストレージを切断する", "Unshare" : "共有解除", + "No permission to delete" : "削除する権限がありません", "Download" : "ダウンロード", "Select" : "選択", "Pending" : "中断", "Unable to determine date" : "更新日不明", + "This operation is forbidden" : "この操作は禁止されています", + "This directory is unavailable, please check the logs or contact the administrator" : "このディレクトリは利用できません。ログを確認するか管理者に問い合わせてください。", "Error moving file." : "ファイル移動でエラー", "Error moving file" : "ファイルの移動エラー", "Error" : "エラー", "Could not rename file" : "ファイルの名前変更ができませんでした", "Error deleting file." : "ファイルの削除エラー。", - "No entries in this folder match '{filter}'" : "このフォルダで '{filter}' にマッチするものはありません", + "No entries in this folder match '{filter}'" : "このフォルダー内で '{filter}' にマッチするものはありません", "Name" : "名前", "Size" : "サイズ", "Modified" : "更新日時", @@ -59,11 +62,10 @@ "_Uploading %n file_::_Uploading %n files_" : ["%n 個のファイルをアップロード中"], "\"{name}\" is an invalid file name." : "\"{name}\" は無効なファイル名です。", "File name cannot be empty." : "ファイル名を空にすることはできません。", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} のストレージは一杯です。ファイルの更新と同期はもうできません!", "Your storage is full, files can not be updated or synced anymore!" : "あなたのストレージは一杯です。ファイルの更新と同期はもうできません!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} のストレージはほぼ一杯です。({usedSpacePercent}%)", "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." : "暗号化の機能は無効化されましたが、ファイルはすでに暗号化されています。個人設定からファイルを複合を行ってください。", "_matches '{filter}'_::_match '{filter}'_" : [" '{filter}' にマッチ"], "{dirs} and {files}" : "{dirs} と {files}", "Favorited" : "お気に入り済", @@ -71,6 +73,7 @@ "An error occurred while trying to update the tags" : "タグを更新する際にエラーが発生しました", "A new file or folder has been <strong>created</strong>" : "新しいファイルまたはフォルダーを<strong>作成</strong>したとき", "A file or folder has been <strong>changed</strong>" : "ファイルまたはフォルダーを<strong>変更</strong>したとき", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>お気に入りファイル</strong>に対する作成と変更の通知は制限されています。<em>(表示のみ)</em>", "A file or folder has been <strong>deleted</strong>" : "ファイルまたはフォルダーを<strong>削除</strong>したとき", "A file or folder has been <strong>restored</strong>" : "ファイルまたはフォルダーを<strong>復元</strong>したとき", "You created %1$s" : "あなたは %1$s を作成しました", diff --git a/apps/files/l10n/ko.js b/apps/files/l10n/ko.js index c98403c77ee..a29ef613da3 100644 --- a/apps/files/l10n/ko.js +++ b/apps/files/l10n/ko.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "삭제", "Disconnect storage" : "저장소 연결 해제", "Unshare" : "공유 해제", + "No permission to delete" : "삭제할 권한 없음", "Download" : "다운로드", "Select" : "선택", "Pending" : "대기 중", "Unable to determine date" : "날짜를 결정할 수 없음", + "This operation is forbidden" : "이 작업이 금지됨", + "This directory is unavailable, please check the logs or contact the administrator" : "디렉터리를 사용할 수 없습니다. 로그를 확인하거나 관리자에게 연락하십시오", "Error moving file." : "파일 이동 오류.", "Error moving file" : "파일 이동 오류", "Error" : "오류", @@ -61,11 +64,10 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["파일 %n개 업로드 중"], "\"{name}\" is an invalid file name." : "\"{name}\"은(는) 잘못된 파일 이름입니다.", "File name cannot be empty." : "파일 이름이 비어 있을 수 없습니다.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner}의 저장소가 가득 찼습니다. 파일을 더 이상 업데이트하거나 동기화할 수 없습니다!", "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." : "암호화는 해제되어 있지만, 파일은 아직 암호화되어 있습니다. 개인 설정에서 파일을 복호화하십시오.", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner}의 저장 공간이 거의 가득 찼습니다({usedSpacePercent}%)", + "Your storage is almost full ({usedSpacePercent}%)" : "저장 공간이 거의 가득 찼습니다({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["'{filter}'와(과) 일치"], "{dirs} and {files}" : "{dirs} 그리고 {files}", "Favorited" : "책갈피에 추가됨", @@ -73,6 +75,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "태그를 업데이트하는 중 오류 발생", "A new file or folder has been <strong>created</strong>" : "새 파일이나 폴더가 <strong>생성됨</strong>", "A file or folder has been <strong>changed</strong>" : "파일이나 폴더가 <strong>변경됨</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>즐겨찾는 파일</strong>의 생성 및 변경 사항에 대한 알림을 줄일 수 있습니다<em>(스트림에서만)</em>", "A file or folder has been <strong>deleted</strong>" : "파일이나 폴더가 <strong>삭제됨</strong>", "A file or folder has been <strong>restored</strong>" : "파일이나 폴더가 <strong>복원됨</strong>", "You created %1$s" : "내가 %1$s을(를) 생성함", @@ -91,6 +94,7 @@ OC.L10N.register( "Maximum upload size" : "최대 업로드 크기", "max. possible: " : "최대 가능:", "Save" : "저장", + "Can not be edited from here due to insufficient permissions." : "권한이 부족하므로 여기에서 편집할 수 없습니다.", "Settings" : "설정", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "WebDAV로 파일에 접근하려면 <a href=\"%s\" target=\"_blank\">이 주소를 사용하십시오</a>", @@ -101,6 +105,7 @@ OC.L10N.register( "Folder" : "폴더", "Upload" : "업로드", "Cancel upload" : "업로드 취소", + "No files in here" : "여기에 파일 없음", "Upload some content or sync with your devices!" : "파일을 업로드하거나 장치와 동기화하십시오!", "No entries found in this folder" : "이 폴더에 항목 없음", "Select all" : "모두 선택", diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json index 4c77124d80f..fd001630161 100644 --- a/apps/files/l10n/ko.json +++ b/apps/files/l10n/ko.json @@ -40,10 +40,13 @@ "Delete" : "삭제", "Disconnect storage" : "저장소 연결 해제", "Unshare" : "공유 해제", + "No permission to delete" : "삭제할 권한 없음", "Download" : "다운로드", "Select" : "선택", "Pending" : "대기 중", "Unable to determine date" : "날짜를 결정할 수 없음", + "This operation is forbidden" : "이 작업이 금지됨", + "This directory is unavailable, please check the logs or contact the administrator" : "디렉터리를 사용할 수 없습니다. 로그를 확인하거나 관리자에게 연락하십시오", "Error moving file." : "파일 이동 오류.", "Error moving file" : "파일 이동 오류", "Error" : "오류", @@ -59,11 +62,10 @@ "_Uploading %n file_::_Uploading %n files_" : ["파일 %n개 업로드 중"], "\"{name}\" is an invalid file name." : "\"{name}\"은(는) 잘못된 파일 이름입니다.", "File name cannot be empty." : "파일 이름이 비어 있을 수 없습니다.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner}의 저장소가 가득 찼습니다. 파일을 더 이상 업데이트하거나 동기화할 수 없습니다!", "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." : "암호화는 해제되어 있지만, 파일은 아직 암호화되어 있습니다. 개인 설정에서 파일을 복호화하십시오.", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner}의 저장 공간이 거의 가득 찼습니다({usedSpacePercent}%)", + "Your storage is almost full ({usedSpacePercent}%)" : "저장 공간이 거의 가득 찼습니다({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["'{filter}'와(과) 일치"], "{dirs} and {files}" : "{dirs} 그리고 {files}", "Favorited" : "책갈피에 추가됨", @@ -71,6 +73,7 @@ "An error occurred while trying to update the tags" : "태그를 업데이트하는 중 오류 발생", "A new file or folder has been <strong>created</strong>" : "새 파일이나 폴더가 <strong>생성됨</strong>", "A file or folder has been <strong>changed</strong>" : "파일이나 폴더가 <strong>변경됨</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>즐겨찾는 파일</strong>의 생성 및 변경 사항에 대한 알림을 줄일 수 있습니다<em>(스트림에서만)</em>", "A file or folder has been <strong>deleted</strong>" : "파일이나 폴더가 <strong>삭제됨</strong>", "A file or folder has been <strong>restored</strong>" : "파일이나 폴더가 <strong>복원됨</strong>", "You created %1$s" : "내가 %1$s을(를) 생성함", @@ -89,6 +92,7 @@ "Maximum upload size" : "최대 업로드 크기", "max. possible: " : "최대 가능:", "Save" : "저장", + "Can not be edited from here due to insufficient permissions." : "권한이 부족하므로 여기에서 편집할 수 없습니다.", "Settings" : "설정", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "WebDAV로 파일에 접근하려면 <a href=\"%s\" target=\"_blank\">이 주소를 사용하십시오</a>", @@ -99,6 +103,7 @@ "Folder" : "폴더", "Upload" : "업로드", "Cancel upload" : "업로드 취소", + "No files in here" : "여기에 파일 없음", "Upload some content or sync with your devices!" : "파일을 업로드하거나 장치와 동기화하십시오!", "No entries found in this folder" : "이 폴더에 항목 없음", "Select all" : "모두 선택", diff --git a/apps/files/l10n/lb.js b/apps/files/l10n/lb.js index 8dc8269c0cc..8d4cf072cf6 100644 --- a/apps/files/l10n/lb.js +++ b/apps/files/l10n/lb.js @@ -29,9 +29,12 @@ OC.L10N.register( "Settings" : "Astellungen", "New" : "Nei", "Text file" : "Text Fichier", + "New folder" : "Neien Dossier", "Folder" : "Dossier", "Upload" : "Eroplueden", "Cancel upload" : "Upload ofbriechen", + "No entries found in this folder" : "Keng Elementer an dësem Dossier fonnt", + "Select all" : "All auswielen", "Upload too large" : "Upload ze grouss", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass.", "Files are being scanned, please wait." : "Fichieren gi gescannt, war weg." diff --git a/apps/files/l10n/lb.json b/apps/files/l10n/lb.json index 524bd0c1cc9..b3b6ff1f632 100644 --- a/apps/files/l10n/lb.json +++ b/apps/files/l10n/lb.json @@ -27,9 +27,12 @@ "Settings" : "Astellungen", "New" : "Nei", "Text file" : "Text Fichier", + "New folder" : "Neien Dossier", "Folder" : "Dossier", "Upload" : "Eroplueden", "Cancel upload" : "Upload ofbriechen", + "No entries found in this folder" : "Keng Elementer an dësem Dossier fonnt", + "Select all" : "All auswielen", "Upload too large" : "Upload ze grouss", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass.", "Files are being scanned, please wait." : "Fichieren gi gescannt, war weg." diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js index 38848c41f07..2106a985350 100644 --- a/apps/files/l10n/lt_LT.js +++ b/apps/files/l10n/lt_LT.js @@ -42,15 +42,19 @@ OC.L10N.register( "Delete" : "Ištrinti", "Disconnect storage" : "Atjungti saugyklą", "Unshare" : "Nebesidalinti", + "No permission to delete" : "Neturite leidimų ištrinti", "Download" : "Atsisiųsti", "Select" : "Pasirinkiti", "Pending" : "Laukiantis", "Unable to determine date" : "Nepavyksta nustatyti datos", + "This operation is forbidden" : "Ši operacija yra uždrausta", + "This directory is unavailable, please check the logs or contact the administrator" : "Katalogas nepasiekiamas, prašome peržiūrėti žurnalo įrašus arba susisiekti su administratoriumi", "Error moving file." : "Klaida perkeliant failą.", "Error moving file" : "Klaida perkeliant failą", "Error" : "Klaida", "Could not rename file" : "Neįmanoma pervadinti failo", "Error deleting file." : "Klaida trinant failą.", + "No entries in this folder match '{filter}'" : "Nėra įrašų šiame aplanko atitikmeniui „{filter}“", "Name" : "Pavadinimas", "Size" : "Dydis", "Modified" : "Pakeista", @@ -60,16 +64,18 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Įkeliamas %n failas","Įkeliami %n failai","Įkeliama %n failų"], "\"{name}\" is an invalid file name." : "„{name}“ yra netinkamas failo pavadinime.", "File name cannot be empty." : "Failo pavadinimas negali būti tuščias.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} saugykla yra pilna, failai daugiau nebegali būti atnaujinti arba sinchronizuojami!", "Your storage is full, files can not be updated or synced anymore!" : "Jūsų visa vieta serveryje užimta", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} saugykla yra beveik pilna ({usedSpacePercent}%)", "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.", + "_matches '{filter}'_::_match '{filter}'_" : ["atitikmuo „{filter}“","atitikmenys „{filter}“","atitikmenų „{filter}“"], "{dirs} and {files}" : "{dirs} ir {files}", "Favorited" : "Pažymėta mėgstamu", "Favorite" : "Mėgiamas", + "An error occurred while trying to update the tags" : "Bandant atnaujinti žymes įvyko klaida", "A new file or folder has been <strong>created</strong>" : "Naujas failas ar aplankas buvo <strong>sukurtas</strong>", "A file or folder has been <strong>changed</strong>" : "Failas ar aplankas buvo <strong>pakeistas</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Riboti pranešimus apie sukūrimą ir pokyčius jūsų <strong>mėgiamuose failuose</strong> <em>(Tik srautas)</em>", "A file or folder has been <strong>deleted</strong>" : "Failas ar aplankas buvo <strong>ištrintas</strong>", "A file or folder has been <strong>restored</strong>" : "Failas ar aplankas buvo <strong>atkurtas</strong>", "You created %1$s" : "Jūs sukūrėte %1$s", @@ -88,6 +94,7 @@ OC.L10N.register( "Maximum upload size" : "Maksimalus įkeliamo failo dydis", "max. possible: " : "maks. galima:", "Save" : "Išsaugoti", + "Can not be edited from here due to insufficient permissions." : "Negali būti redaguojamas iš čia dėl leidimų trūkumo.", "Settings" : "Nustatymai", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Naudokite šį adresą, kad <a href=\"%s\" target=\"_blank\">pasiektumėte savo failus per WebDAV</a>", @@ -98,7 +105,9 @@ OC.L10N.register( "Folder" : "Katalogas", "Upload" : "Įkelti", "Cancel upload" : "Atšaukti siuntimą", + "No files in here" : "Čia nėra failų", "Upload some content or sync with your devices!" : "Įkelkite kokį nors turinį, arba sinchronizuokite su savo įrenginiais!", + "No entries found in this folder" : "Nerasta įrašų šiame aplanke", "Select all" : "Pažymėti viską", "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/lt_LT.json b/apps/files/l10n/lt_LT.json index d57121d8aba..b4758b4a9bb 100644 --- a/apps/files/l10n/lt_LT.json +++ b/apps/files/l10n/lt_LT.json @@ -40,15 +40,19 @@ "Delete" : "Ištrinti", "Disconnect storage" : "Atjungti saugyklą", "Unshare" : "Nebesidalinti", + "No permission to delete" : "Neturite leidimų ištrinti", "Download" : "Atsisiųsti", "Select" : "Pasirinkiti", "Pending" : "Laukiantis", "Unable to determine date" : "Nepavyksta nustatyti datos", + "This operation is forbidden" : "Ši operacija yra uždrausta", + "This directory is unavailable, please check the logs or contact the administrator" : "Katalogas nepasiekiamas, prašome peržiūrėti žurnalo įrašus arba susisiekti su administratoriumi", "Error moving file." : "Klaida perkeliant failą.", "Error moving file" : "Klaida perkeliant failą", "Error" : "Klaida", "Could not rename file" : "Neįmanoma pervadinti failo", "Error deleting file." : "Klaida trinant failą.", + "No entries in this folder match '{filter}'" : "Nėra įrašų šiame aplanko atitikmeniui „{filter}“", "Name" : "Pavadinimas", "Size" : "Dydis", "Modified" : "Pakeista", @@ -58,16 +62,18 @@ "_Uploading %n file_::_Uploading %n files_" : ["Įkeliamas %n failas","Įkeliami %n failai","Įkeliama %n failų"], "\"{name}\" is an invalid file name." : "„{name}“ yra netinkamas failo pavadinime.", "File name cannot be empty." : "Failo pavadinimas negali būti tuščias.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} saugykla yra pilna, failai daugiau nebegali būti atnaujinti arba sinchronizuojami!", "Your storage is full, files can not be updated or synced anymore!" : "Jūsų visa vieta serveryje užimta", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} saugykla yra beveik pilna ({usedSpacePercent}%)", "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.", + "_matches '{filter}'_::_match '{filter}'_" : ["atitikmuo „{filter}“","atitikmenys „{filter}“","atitikmenų „{filter}“"], "{dirs} and {files}" : "{dirs} ir {files}", "Favorited" : "Pažymėta mėgstamu", "Favorite" : "Mėgiamas", + "An error occurred while trying to update the tags" : "Bandant atnaujinti žymes įvyko klaida", "A new file or folder has been <strong>created</strong>" : "Naujas failas ar aplankas buvo <strong>sukurtas</strong>", "A file or folder has been <strong>changed</strong>" : "Failas ar aplankas buvo <strong>pakeistas</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Riboti pranešimus apie sukūrimą ir pokyčius jūsų <strong>mėgiamuose failuose</strong> <em>(Tik srautas)</em>", "A file or folder has been <strong>deleted</strong>" : "Failas ar aplankas buvo <strong>ištrintas</strong>", "A file or folder has been <strong>restored</strong>" : "Failas ar aplankas buvo <strong>atkurtas</strong>", "You created %1$s" : "Jūs sukūrėte %1$s", @@ -86,6 +92,7 @@ "Maximum upload size" : "Maksimalus įkeliamo failo dydis", "max. possible: " : "maks. galima:", "Save" : "Išsaugoti", + "Can not be edited from here due to insufficient permissions." : "Negali būti redaguojamas iš čia dėl leidimų trūkumo.", "Settings" : "Nustatymai", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Naudokite šį adresą, kad <a href=\"%s\" target=\"_blank\">pasiektumėte savo failus per WebDAV</a>", @@ -96,7 +103,9 @@ "Folder" : "Katalogas", "Upload" : "Įkelti", "Cancel upload" : "Atšaukti siuntimą", + "No files in here" : "Čia nėra failų", "Upload some content or sync with your devices!" : "Įkelkite kokį nors turinį, arba sinchronizuokite su savo įrenginiais!", + "No entries found in this folder" : "Nerasta įrašų šiame aplanke", "Select all" : "Pažymėti viską", "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.js b/apps/files/l10n/lv.js index fb0b4907ff4..8454fe48faa 100644 --- a/apps/files/l10n/lv.js +++ b/apps/files/l10n/lv.js @@ -63,9 +63,6 @@ OC.L10N.register( "File name cannot be empty." : "Datnes nosaukums nevar būt tukšs.", "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 App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifrēšanas lietotnes ir pieslēgta, bet šifrēšanas atslēgas nav uzstādītas. Lūdzu izejiet no sistēmas un ieejiet sistēmā atpakaļ.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Šifrēšanas lietotnei nepareiza privātā atslēga. Lūdzu atjaunojiet savu privāto atslēgu personīgo uzstādījumu sadaļā, lai atjaunot pieeju šifrētajiem failiem.", - "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.", "_matches '{filter}'_::_match '{filter}'_" : ["atrasts pēc '{filter}'","atrasts pēc '{filter}'","atrasti pēc '{filter}'"], "{dirs} and {files}" : "{dirs} un {files}", "Favorited" : "Favorīti", diff --git a/apps/files/l10n/lv.json b/apps/files/l10n/lv.json index 7146e1b423e..59220478b65 100644 --- a/apps/files/l10n/lv.json +++ b/apps/files/l10n/lv.json @@ -61,9 +61,6 @@ "File name cannot be empty." : "Datnes nosaukums nevar būt tukšs.", "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 App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifrēšanas lietotnes ir pieslēgta, bet šifrēšanas atslēgas nav uzstādītas. Lūdzu izejiet no sistēmas un ieejiet sistēmā atpakaļ.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Šifrēšanas lietotnei nepareiza privātā atslēga. Lūdzu atjaunojiet savu privāto atslēgu personīgo uzstādījumu sadaļā, lai atjaunot pieeju šifrētajiem failiem.", - "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.", "_matches '{filter}'_::_match '{filter}'_" : ["atrasts pēc '{filter}'","atrasts pēc '{filter}'","atrasti pēc '{filter}'"], "{dirs} and {files}" : "{dirs} un {files}", "Favorited" : "Favorīti", diff --git a/apps/files/l10n/mk.js b/apps/files/l10n/mk.js index 13e21643c97..fbda6b4d1fb 100644 --- a/apps/files/l10n/mk.js +++ b/apps/files/l10n/mk.js @@ -51,6 +51,7 @@ OC.L10N.register( "You deleted %1$s" : "Вие избришавте %1$s", "%2$s deleted %1$s" : "%2$s избришани %1$s", "%s could not be renamed" : "%s не може да биде преименуван", + "Upload (max. %s)" : "Префрлање (макс. %s)", "File handling" : "Ракување со датотеки", "Maximum upload size" : "Максимална големина за подигање", "max. possible: " : "макс. можно:", diff --git a/apps/files/l10n/mk.json b/apps/files/l10n/mk.json index 12c4edc25c5..7eb9488916f 100644 --- a/apps/files/l10n/mk.json +++ b/apps/files/l10n/mk.json @@ -49,6 +49,7 @@ "You deleted %1$s" : "Вие избришавте %1$s", "%2$s deleted %1$s" : "%2$s избришани %1$s", "%s could not be renamed" : "%s не може да биде преименуван", + "Upload (max. %s)" : "Префрлање (макс. %s)", "File handling" : "Ракување со датотеки", "Maximum upload size" : "Максимална големина за подигање", "max. possible: " : "макс. можно:", diff --git a/apps/files/l10n/nb_NO.js b/apps/files/l10n/nb_NO.js index bc9893c708a..b7741835c0f 100644 --- a/apps/files/l10n/nb_NO.js +++ b/apps/files/l10n/nb_NO.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Slett", "Disconnect storage" : "Koble fra lagring", "Unshare" : "Avslutt deling", + "No permission to delete" : "Ikke tillatelse til å slette", "Download" : "Last ned", "Select" : "Velg", "Pending" : "Ventende", "Unable to determine date" : "Kan ikke fastslå datoen", + "This operation is forbidden" : "Operasjonen er forbudt", + "This directory is unavailable, please check the logs or contact the administrator" : "Denne mappen er utilgjengelig. Sjekk loggene eller kontakt administrator", "Error moving file." : "Feil ved flytting av fil.", "Error moving file" : "Feil ved flytting av fil", "Error" : "Feil", @@ -61,11 +64,10 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Laster opp %n fil","Laster opp %n filer"], "\"{name}\" is an invalid file name." : "\"{name}\" er et uglydig filnavn.", "File name cannot be empty." : "Filnavn kan ikke være tomt.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lagringsplass for {owner} er full, filer kan ikke oppdateres eller synkroniseres lenger!", "Your storage is full, files can not be updated or synced anymore!" : "Lagringsplass er oppbrukt, filer kan ikke lenger oppdateres eller synkroniseres!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lagringsplass for {owner} er nesten full ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Lagringsplass er nesten brukt opp ([usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.", - "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økkel for Krypterings-app. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.", - "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kryptering ble slått av men filene dine er fremdeles kryptert. Gå til dine personlige innstillinger for å dekryptere filene dine.", "_matches '{filter}'_::_match '{filter}'_" : [" stemmer med '{filter}'"," stemmer med '{filter}'"], "{dirs} and {files}" : "{dirs} og {files}", "Favorited" : "Er favoritt", @@ -73,6 +75,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "En feil oppstod under oppdatering av taggene", "A new file or folder has been <strong>created</strong>" : "En ny fil eller mappe ble <strong>opprettet</strong>", "A file or folder has been <strong>changed</strong>" : "En fil eller mappe ble <strong>endret</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Begrens varsling om oppretting og endringer til <strong>favorittfilene</strong> dine <em>(Kun strøm)</em>", "A file or folder has been <strong>deleted</strong>" : "En fil eller mappe ble <strong>slettet</strong>", "A file or folder has been <strong>restored</strong>" : "En fil eller mappe ble <strong>gjenopprettet</strong>", "You created %1$s" : "Du opprettet %1$s", @@ -88,10 +91,10 @@ OC.L10N.register( "%s could not be renamed" : "Kunne ikke gi nytt navn til %s", "Upload (max. %s)" : "Opplasting (maks. %s)", "File handling" : "Filhåndtering", - "Maximum upload size" : "Maksimum opplastingsstørrelse", + "Maximum upload size" : "Største opplastingsstørrelse", "max. possible: " : "max. mulige:", "Save" : "Lagre", - "Can not be edited from here due to insufficient permissions." : "Kan ikke redigeres her pga. utilstrekkelige rettigheter.", + "Can not be edited from here due to insufficient permissions." : "Kan ikke redigeres her pga. manglende rettigheter.", "Settings" : "Innstillinger", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bruk denne adressen for å <a href=\"%s\" target=\"_blank\">få tilgang til filene dine via WebDAV</a>", @@ -107,7 +110,7 @@ OC.L10N.register( "No entries found in this folder" : "Ingen oppføringer funnet i denne mappen", "Select all" : "Velg alle", "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.", + "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 til å laste opp til denne serveren.", "Files are being scanned, please wait." : "Skanner filer, vennligst vent.", "Currently scanning" : "Skanner nå", "No favorites" : "Ingen favoritter", diff --git a/apps/files/l10n/nb_NO.json b/apps/files/l10n/nb_NO.json index 2c12b3ad0c5..662d8433c21 100644 --- a/apps/files/l10n/nb_NO.json +++ b/apps/files/l10n/nb_NO.json @@ -40,10 +40,13 @@ "Delete" : "Slett", "Disconnect storage" : "Koble fra lagring", "Unshare" : "Avslutt deling", + "No permission to delete" : "Ikke tillatelse til å slette", "Download" : "Last ned", "Select" : "Velg", "Pending" : "Ventende", "Unable to determine date" : "Kan ikke fastslå datoen", + "This operation is forbidden" : "Operasjonen er forbudt", + "This directory is unavailable, please check the logs or contact the administrator" : "Denne mappen er utilgjengelig. Sjekk loggene eller kontakt administrator", "Error moving file." : "Feil ved flytting av fil.", "Error moving file" : "Feil ved flytting av fil", "Error" : "Feil", @@ -59,11 +62,10 @@ "_Uploading %n file_::_Uploading %n files_" : ["Laster opp %n fil","Laster opp %n filer"], "\"{name}\" is an invalid file name." : "\"{name}\" er et uglydig filnavn.", "File name cannot be empty." : "Filnavn kan ikke være tomt.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lagringsplass for {owner} er full, filer kan ikke oppdateres eller synkroniseres lenger!", "Your storage is full, files can not be updated or synced anymore!" : "Lagringsplass er oppbrukt, filer kan ikke lenger oppdateres eller synkroniseres!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lagringsplass for {owner} er nesten full ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Lagringsplass er nesten brukt opp ([usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.", - "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økkel for Krypterings-app. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.", - "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kryptering ble slått av men filene dine er fremdeles kryptert. Gå til dine personlige innstillinger for å dekryptere filene dine.", "_matches '{filter}'_::_match '{filter}'_" : [" stemmer med '{filter}'"," stemmer med '{filter}'"], "{dirs} and {files}" : "{dirs} og {files}", "Favorited" : "Er favoritt", @@ -71,6 +73,7 @@ "An error occurred while trying to update the tags" : "En feil oppstod under oppdatering av taggene", "A new file or folder has been <strong>created</strong>" : "En ny fil eller mappe ble <strong>opprettet</strong>", "A file or folder has been <strong>changed</strong>" : "En fil eller mappe ble <strong>endret</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Begrens varsling om oppretting og endringer til <strong>favorittfilene</strong> dine <em>(Kun strøm)</em>", "A file or folder has been <strong>deleted</strong>" : "En fil eller mappe ble <strong>slettet</strong>", "A file or folder has been <strong>restored</strong>" : "En fil eller mappe ble <strong>gjenopprettet</strong>", "You created %1$s" : "Du opprettet %1$s", @@ -86,10 +89,10 @@ "%s could not be renamed" : "Kunne ikke gi nytt navn til %s", "Upload (max. %s)" : "Opplasting (maks. %s)", "File handling" : "Filhåndtering", - "Maximum upload size" : "Maksimum opplastingsstørrelse", + "Maximum upload size" : "Største opplastingsstørrelse", "max. possible: " : "max. mulige:", "Save" : "Lagre", - "Can not be edited from here due to insufficient permissions." : "Kan ikke redigeres her pga. utilstrekkelige rettigheter.", + "Can not be edited from here due to insufficient permissions." : "Kan ikke redigeres her pga. manglende rettigheter.", "Settings" : "Innstillinger", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bruk denne adressen for å <a href=\"%s\" target=\"_blank\">få tilgang til filene dine via WebDAV</a>", @@ -105,7 +108,7 @@ "No entries found in this folder" : "Ingen oppføringer funnet i denne mappen", "Select all" : "Velg alle", "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.", + "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 til å laste opp til denne serveren.", "Files are being scanned, please wait." : "Skanner filer, vennligst vent.", "Currently scanning" : "Skanner nå", "No favorites" : "Ingen favoritter", diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js index 92be41a4c47..85bebde9c3e 100644 --- a/apps/files/l10n/nl.js +++ b/apps/files/l10n/nl.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Verwijderen", "Disconnect storage" : "Verbinding met opslag verbreken", "Unshare" : "Stop met delen", + "No permission to delete" : "Geen permissie om te verwijderen", "Download" : "Downloaden", "Select" : "Selecteer", "Pending" : "In behandeling", "Unable to determine date" : "Kon datum niet vaststellen", + "This operation is forbidden" : "Deze taak is verboden", + "This directory is unavailable, please check the logs or contact the administrator" : "Deze map is niet beschikbaar. Verifieer de logs of neem contact op met de beheerder", "Error moving file." : "Fout bij verplaatsen bestand.", "Error moving file" : "Fout bij verplaatsen bestand", "Error" : "Fout", @@ -60,11 +63,10 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["%n bestand aan het uploaden","%n bestanden aan het uploaden"], "\"{name}\" is an invalid file name." : "\"{name}\" is een ongeldige bestandsnaam.", "File name cannot be empty." : "Bestandsnaam kan niet leeg zijn.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Opslagruimte van {owner} zit vol, bestanden kunnen niet meer worden ge-upload of gesynchroniseerd!", "Your storage is full, files can not be updated or synced anymore!" : "Uw opslagruimte zit vol. Bestanden kunnen niet meer worden gewijzigd of gesynchroniseerd!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Opslagruimte van {owner} zit bijna vol ({usedSpacePercent}%)", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["komt overeen met '{filter}'","komen overeen met '{filter}'"], "{dirs} and {files}" : "{dirs} en {files}", "Favorited" : "Favoriet", @@ -72,6 +74,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Er trad een fout op bij uw poging de tags bij te werken", "A new file or folder has been <strong>created</strong>" : "Een nieuw bestand of map is <strong>aangemaakt</strong>", "A file or folder has been <strong>changed</strong>" : "Een bestand of map is <strong>gewijzigd</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Beperk meldingen over aanmaken en wijzigen aan uw <strong>favoriete bestanden</strong> <em>(Alleen stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Een bestand of map is <strong>verwijderd</strong>", "A file or folder has been <strong>restored</strong>" : "Een bestand of een mmaps is <strong>hersteld</strong>", "You created %1$s" : "U creëerde %1$s", diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json index 154f8c835a7..9094ed1b031 100644 --- a/apps/files/l10n/nl.json +++ b/apps/files/l10n/nl.json @@ -40,10 +40,13 @@ "Delete" : "Verwijderen", "Disconnect storage" : "Verbinding met opslag verbreken", "Unshare" : "Stop met delen", + "No permission to delete" : "Geen permissie om te verwijderen", "Download" : "Downloaden", "Select" : "Selecteer", "Pending" : "In behandeling", "Unable to determine date" : "Kon datum niet vaststellen", + "This operation is forbidden" : "Deze taak is verboden", + "This directory is unavailable, please check the logs or contact the administrator" : "Deze map is niet beschikbaar. Verifieer de logs of neem contact op met de beheerder", "Error moving file." : "Fout bij verplaatsen bestand.", "Error moving file" : "Fout bij verplaatsen bestand", "Error" : "Fout", @@ -58,11 +61,10 @@ "_Uploading %n file_::_Uploading %n files_" : ["%n bestand aan het uploaden","%n bestanden aan het uploaden"], "\"{name}\" is an invalid file name." : "\"{name}\" is een ongeldige bestandsnaam.", "File name cannot be empty." : "Bestandsnaam kan niet leeg zijn.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Opslagruimte van {owner} zit vol, bestanden kunnen niet meer worden ge-upload of gesynchroniseerd!", "Your storage is full, files can not be updated or synced anymore!" : "Uw opslagruimte zit vol. Bestanden kunnen niet meer worden gewijzigd of gesynchroniseerd!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Opslagruimte van {owner} zit bijna vol ({usedSpacePercent}%)", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["komt overeen met '{filter}'","komen overeen met '{filter}'"], "{dirs} and {files}" : "{dirs} en {files}", "Favorited" : "Favoriet", @@ -70,6 +72,7 @@ "An error occurred while trying to update the tags" : "Er trad een fout op bij uw poging de tags bij te werken", "A new file or folder has been <strong>created</strong>" : "Een nieuw bestand of map is <strong>aangemaakt</strong>", "A file or folder has been <strong>changed</strong>" : "Een bestand of map is <strong>gewijzigd</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Beperk meldingen over aanmaken en wijzigen aan uw <strong>favoriete bestanden</strong> <em>(Alleen stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Een bestand of map is <strong>verwijderd</strong>", "A file or folder has been <strong>restored</strong>" : "Een bestand of een mmaps is <strong>hersteld</strong>", "You created %1$s" : "U creëerde %1$s", diff --git a/apps/files/l10n/nn_NO.js b/apps/files/l10n/nn_NO.js index fd378eeb606..af4ec92771c 100644 --- a/apps/files/l10n/nn_NO.js +++ b/apps/files/l10n/nn_NO.js @@ -42,7 +42,6 @@ OC.L10N.register( "File name cannot be empty." : "Filnamnet kan ikkje vera tomt.", "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.", "{dirs} and {files}" : "{dirs} og {files}", "Favorite" : "Favoritt", "A new file or folder has been <strong>created</strong>" : "Ei ny fil eller mappe er <strong>oppretta</strong>", diff --git a/apps/files/l10n/nn_NO.json b/apps/files/l10n/nn_NO.json index a03cb799eae..8e0e297220f 100644 --- a/apps/files/l10n/nn_NO.json +++ b/apps/files/l10n/nn_NO.json @@ -40,7 +40,6 @@ "File name cannot be empty." : "Filnamnet kan ikkje vera tomt.", "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.", "{dirs} and {files}" : "{dirs} og {files}", "Favorite" : "Favoritt", "A new file or folder has been <strong>created</strong>" : "Ei ny fil eller mappe er <strong>oppretta</strong>", diff --git a/apps/files/l10n/oc.js b/apps/files/l10n/oc.js index ba100451061..a3beb77ef2a 100644 --- a/apps/files/l10n/oc.js +++ b/apps/files/l10n/oc.js @@ -1,36 +1,115 @@ OC.L10N.register( "files", { - "There is no error, the file uploaded with success" : "Amontcargament capitat, pas d'errors", - "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Lo fichièr amontcargat es mai gròs que la directiva «MAX_FILE_SIZE» especifiada dins lo formulari HTML", - "The uploaded file was only partially uploaded" : "Lo fichièr foguèt pas completament amontcargat", - "No file was uploaded" : "Cap de fichièrs son estats amontcargats", - "Missing a temporary folder" : "Un dorsièr temporari manca", - "Failed to write to disk" : "L'escriptura sul disc a fracassat", + "Storage not available" : "Supòrt d'emmagazinatge pas disponible", + "Storage invalid" : "Supòrt d'emmagazinatge pas valable", + "Unknown error" : "Error Desconeguda ", + "Could not move %s - File with this name already exists" : "Impossible de desplaçar %s - Un fichièr que pòrta aqueste nom existís ja", + "Could not move %s" : "Impossible de desplaçar %s", + "Permission denied" : "Permission refusada", + "The target folder has been moved or deleted." : "Lo dorsièr cibla es estat desplaçat o suprimit.", + "The name %s is already used in the folder %s. Please choose a different name." : "Lo nom %s es ja utilizat dins lo dorsièr %s. Mercé de causir un nom diferent.", + "Error when creating the file" : "Error pendent la creacion del fichièr", + "Error when creating the folder" : "Error pendent la creacion del dorsièr", + "Unable to set upload directory." : "Impossible de definir lo dorsièr de destinacion.", + "Invalid Token" : "Geton invalid", + "No file was uploaded. Unknown error" : "Cap de fichièr es pas estat mandat. Error desconeguda", + "There is no error, the file uploaded with success" : "Pas cap d'error, lo fichièr es estat mandat amb succès.", + "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Lo fichièr mandat depassa l'instruccion upload_max_filesize situada dins lo fichièr php.ini :", + "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Lo fichièr mandat depassa la valor MAX_FILE_SIZE qu'èra especificada dins lo formulari HTML.", + "The uploaded file was only partially uploaded" : "Lo fichièr es estat mandat sonque parcialament.", + "No file was uploaded" : "Pas de fichièr mandat.", + "Missing a temporary folder" : "Abséncia de dorsièr temporari", + "Failed to write to disk" : "Error d'escritura sul disc", + "Not enough storage available" : "Pas pro d'espaci d'emmagazinatge de disponible", + "Upload failed. Could not find uploaded file" : "Lo mandadís a fracassat. Impossible de trobar lo fichièr mandat.", + "Upload failed. Could not get file info." : "Lo mandadís a fracassat. Impossible d'obténer las informacions del fichièr.", + "Invalid directory." : "Dorsièr invalid.", "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. ", - "Rename" : "Torna nomenar", - "Delete" : "Escafa", - "Unshare" : "Pas partejador", - "Download" : "Avalcarga", - "Pending" : "Al esperar", + "All files" : "Totes los fichièrs", + "Favorites" : "Favorits", + "Home" : "Mos fichièrs", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossible de mandar {filename} perque s'agís d'un repertòri o d'un fichièr de talha nulla", + "Total file size {size1} exceeds upload limit {size2}" : "La talha totala del fichièr {size1} excedís la talha maximala de mandadís {size2}", + "Not enough free space, you are uploading {size1} but only {size2} is left" : "Espaci liure insufisent : ensajatz de mandar {size1} mas solament {size2} son disponibles", + "Upload cancelled." : "Mandadís anullat.", + "Could not get result from server." : "Pòt pas recebre los resultats del servidor.", + "File upload is in progress. Leaving the page now will cancel the upload." : "Lo mandadís del fichièr es en cors. Quitar aquesta pagina ara anullarà lo mandadís del fichièr.", + "{new_name} already exists" : "{new_name} existís ja", + "Could not create file" : "Impossible de crear lo fichièr", + "Could not create folder" : "Impossible de crear lo dorsièr", + "Rename" : "Renomenar", + "Delete" : "Suprimir", + "Disconnect storage" : "Desconnectar aqueste supòrt d'emmagazinatge", + "Unshare" : "Partejar pas mai", + "No permission to delete" : "Pas de permission de supression", + "Download" : "Telecargar", + "Select" : "Seleccionar", + "Pending" : "En espèra", + "Unable to determine date" : "Impossible de determinar la data", + "Error moving file." : "Error al moment del desplaçament del fichièr.", + "Error moving file" : "Error al moment del desplaçament del fichièr", "Error" : "Error", + "Could not rename file" : "Impossible de renomenar lo fichièr", + "Error deleting file." : "Error pendent la supression del fichièr.", + "No entries in this folder match '{filter}'" : "Cap d'entrada d'aqueste dorsièr correspond pas a '{filter}'", "Name" : "Nom", "Size" : "Talha", "Modified" : "Modificat", - "File handling" : "Manejament de fichièr", - "Maximum upload size" : "Talha maximum d'amontcargament", - "max. possible: " : "max. possible: ", - "Save" : "Enregistra", + "_%n folder_::_%n folders_" : ["%n dorsièr","%n dorsièrs"], + "_%n file_::_%n files_" : ["%n fichièr","%n fichièrs"], + "You don’t have permission to upload or create files here" : "Avètz pas la permission d'apondre de fichièrs aicí", + "_Uploading %n file_::_Uploading %n files_" : ["Mandadís de %n fichièr","Mandadís de %n fichièrs"], + "\"{name}\" is an invalid file name." : "\"{name}\" es pas un nom de fichièr valid.", + "File name cannot be empty." : "Lo nom de fichièr pòt pas èsser void.", + "Your storage is full, files can not be updated or synced anymore!" : "Vòstre espaci d'emmagazinatge es plen, los fichièrs pòdon pas mai èsser aponduts o sincronizats !", + "Your storage is almost full ({usedSpacePercent}%)" : "Vòstre espace d'emmagazinatge es gaireben plen ({usedSpacePercent}%)", + "_matches '{filter}'_::_match '{filter}'_" : ["correspond a '{filter}'","correspondon a '{filter}'"], + "{dirs} and {files}" : "{dirs} e {files}", + "Favorited" : "Marcat coma favorit", + "Favorite" : "Favorit", + "An error occurred while trying to update the tags" : "Una error s'es produsida al moment de la mesa a jorn de las etiquetas", + "A new file or folder has been <strong>created</strong>" : "Un novèl fichièr o repertòri es estat <strong>creat</strong>", + "A file or folder has been <strong>changed</strong>" : "Un fichièr o un repertòri es estat <strong>modificat</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar las notifications a çò que concernís la creacion e la modificacion de vòstres <strong>fichièrs favorits</strong> <em>(Flux unicament)</em>", + "A file or folder has been <strong>deleted</strong>" : "Un fichièr o un repertòri es estat <strong>suprimit</strong>", + "A file or folder has been <strong>restored</strong>" : "Un fichièr o un repertòri es estat <strong>restablit</strong>", + "You created %1$s" : "Avètz creat %1$s", + "%2$s created %1$s" : "%2$s a creat %1$s", + "%1$s was created in a public folder" : "%1$s es estat creat dins un dorsièr public", + "You changed %1$s" : "Avètz modificat %1$s", + "%2$s changed %1$s" : "%2$s a modificat %1$s", + "You deleted %1$s" : "Avètz suprimit %1$s", + "%2$s deleted %1$s" : "%2$s a suprimit %1$s", + "You restored %1$s" : "Avètz restablit %1$s", + "%2$s restored %1$s" : "%2$s a restablit %1$s", + "%s could not be renamed as it has been deleted" : "%s pòt pas èsser renomenat perque es estat suprimit ", + "%s could not be renamed" : "%s pòt pas èsser renomenat", + "Upload (max. %s)" : "Mandadís (max. %s)", + "File handling" : "Gestion de fichièrs", + "Maximum upload size" : "Talha max. de mandadís", + "max. possible: " : "Max. possible :", + "Save" : "Salvar", + "Can not be edited from here due to insufficient permissions." : "Pòt pas èsser modificat aicí a causa de permissions insufisentas.", "Settings" : "Paramètres", - "New" : "Nòu", - "Text file" : "Fichièr de tèxte", + "WebDAV" : "WebDAV", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizatz aquesta adreça per <a href=\"%s\" target=\"_blank\">accedir a vòstres fichièrs per WebDAV</a>", + "New" : "Novèl", + "New text file" : "Novèl fichièr tèxte", + "Text file" : "Fichièr tèxte", + "New folder" : "Novèl dorsièr", "Folder" : "Dorsièr", - "Upload" : "Amontcarga", - "Cancel upload" : " Anulla l'amontcargar", - "Upload too large" : "Amontcargament tròp gròs", - "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los fichièrs que sias a amontcargar son tròp pesucs per la talha maxi pel servidor.", - "Files are being scanned, please wait." : "Los fiichièrs son a èsser explorats, " + "Upload" : "Cargament", + "Cancel upload" : "Anullar lo mandadís", + "No files in here" : "Pas cap de fichièr aicí", + "Upload some content or sync with your devices!" : "Depausatz de contengut o sincronizatz vòstres aparelhs !", + "No entries found in this folder" : "Cap d'entrada pas trobada dins aqueste dorsièr", + "Select all" : "Seleccionar tot", + "Upload too large" : "Mandadís tròp voluminós", + "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los fichièrs qu'ensajatz de mandar depassan la talha maximala de mandadís permesa per aqueste servidor.", + "Files are being scanned, please wait." : "Los fichièrs son en cors d'analisi, pacientatz.", + "Currently scanning" : "Analisi en cors", + "No favorites" : "Pas cap de favorit", + "Files and folders you mark as favorite will show up here" : "Los fichièrs e dorsièrs aponduts a vòstres favorits apareisseràn aicí" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files/l10n/oc.json b/apps/files/l10n/oc.json index f06365c6b0b..1a904502025 100644 --- a/apps/files/l10n/oc.json +++ b/apps/files/l10n/oc.json @@ -1,34 +1,113 @@ { "translations": { - "There is no error, the file uploaded with success" : "Amontcargament capitat, pas d'errors", - "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Lo fichièr amontcargat es mai gròs que la directiva «MAX_FILE_SIZE» especifiada dins lo formulari HTML", - "The uploaded file was only partially uploaded" : "Lo fichièr foguèt pas completament amontcargat", - "No file was uploaded" : "Cap de fichièrs son estats amontcargats", - "Missing a temporary folder" : "Un dorsièr temporari manca", - "Failed to write to disk" : "L'escriptura sul disc a fracassat", + "Storage not available" : "Supòrt d'emmagazinatge pas disponible", + "Storage invalid" : "Supòrt d'emmagazinatge pas valable", + "Unknown error" : "Error Desconeguda ", + "Could not move %s - File with this name already exists" : "Impossible de desplaçar %s - Un fichièr que pòrta aqueste nom existís ja", + "Could not move %s" : "Impossible de desplaçar %s", + "Permission denied" : "Permission refusada", + "The target folder has been moved or deleted." : "Lo dorsièr cibla es estat desplaçat o suprimit.", + "The name %s is already used in the folder %s. Please choose a different name." : "Lo nom %s es ja utilizat dins lo dorsièr %s. Mercé de causir un nom diferent.", + "Error when creating the file" : "Error pendent la creacion del fichièr", + "Error when creating the folder" : "Error pendent la creacion del dorsièr", + "Unable to set upload directory." : "Impossible de definir lo dorsièr de destinacion.", + "Invalid Token" : "Geton invalid", + "No file was uploaded. Unknown error" : "Cap de fichièr es pas estat mandat. Error desconeguda", + "There is no error, the file uploaded with success" : "Pas cap d'error, lo fichièr es estat mandat amb succès.", + "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Lo fichièr mandat depassa l'instruccion upload_max_filesize situada dins lo fichièr php.ini :", + "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Lo fichièr mandat depassa la valor MAX_FILE_SIZE qu'èra especificada dins lo formulari HTML.", + "The uploaded file was only partially uploaded" : "Lo fichièr es estat mandat sonque parcialament.", + "No file was uploaded" : "Pas de fichièr mandat.", + "Missing a temporary folder" : "Abséncia de dorsièr temporari", + "Failed to write to disk" : "Error d'escritura sul disc", + "Not enough storage available" : "Pas pro d'espaci d'emmagazinatge de disponible", + "Upload failed. Could not find uploaded file" : "Lo mandadís a fracassat. Impossible de trobar lo fichièr mandat.", + "Upload failed. Could not get file info." : "Lo mandadís a fracassat. Impossible d'obténer las informacions del fichièr.", + "Invalid directory." : "Dorsièr invalid.", "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. ", - "Rename" : "Torna nomenar", - "Delete" : "Escafa", - "Unshare" : "Pas partejador", - "Download" : "Avalcarga", - "Pending" : "Al esperar", + "All files" : "Totes los fichièrs", + "Favorites" : "Favorits", + "Home" : "Mos fichièrs", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossible de mandar {filename} perque s'agís d'un repertòri o d'un fichièr de talha nulla", + "Total file size {size1} exceeds upload limit {size2}" : "La talha totala del fichièr {size1} excedís la talha maximala de mandadís {size2}", + "Not enough free space, you are uploading {size1} but only {size2} is left" : "Espaci liure insufisent : ensajatz de mandar {size1} mas solament {size2} son disponibles", + "Upload cancelled." : "Mandadís anullat.", + "Could not get result from server." : "Pòt pas recebre los resultats del servidor.", + "File upload is in progress. Leaving the page now will cancel the upload." : "Lo mandadís del fichièr es en cors. Quitar aquesta pagina ara anullarà lo mandadís del fichièr.", + "{new_name} already exists" : "{new_name} existís ja", + "Could not create file" : "Impossible de crear lo fichièr", + "Could not create folder" : "Impossible de crear lo dorsièr", + "Rename" : "Renomenar", + "Delete" : "Suprimir", + "Disconnect storage" : "Desconnectar aqueste supòrt d'emmagazinatge", + "Unshare" : "Partejar pas mai", + "No permission to delete" : "Pas de permission de supression", + "Download" : "Telecargar", + "Select" : "Seleccionar", + "Pending" : "En espèra", + "Unable to determine date" : "Impossible de determinar la data", + "Error moving file." : "Error al moment del desplaçament del fichièr.", + "Error moving file" : "Error al moment del desplaçament del fichièr", "Error" : "Error", + "Could not rename file" : "Impossible de renomenar lo fichièr", + "Error deleting file." : "Error pendent la supression del fichièr.", + "No entries in this folder match '{filter}'" : "Cap d'entrada d'aqueste dorsièr correspond pas a '{filter}'", "Name" : "Nom", "Size" : "Talha", "Modified" : "Modificat", - "File handling" : "Manejament de fichièr", - "Maximum upload size" : "Talha maximum d'amontcargament", - "max. possible: " : "max. possible: ", - "Save" : "Enregistra", + "_%n folder_::_%n folders_" : ["%n dorsièr","%n dorsièrs"], + "_%n file_::_%n files_" : ["%n fichièr","%n fichièrs"], + "You don’t have permission to upload or create files here" : "Avètz pas la permission d'apondre de fichièrs aicí", + "_Uploading %n file_::_Uploading %n files_" : ["Mandadís de %n fichièr","Mandadís de %n fichièrs"], + "\"{name}\" is an invalid file name." : "\"{name}\" es pas un nom de fichièr valid.", + "File name cannot be empty." : "Lo nom de fichièr pòt pas èsser void.", + "Your storage is full, files can not be updated or synced anymore!" : "Vòstre espaci d'emmagazinatge es plen, los fichièrs pòdon pas mai èsser aponduts o sincronizats !", + "Your storage is almost full ({usedSpacePercent}%)" : "Vòstre espace d'emmagazinatge es gaireben plen ({usedSpacePercent}%)", + "_matches '{filter}'_::_match '{filter}'_" : ["correspond a '{filter}'","correspondon a '{filter}'"], + "{dirs} and {files}" : "{dirs} e {files}", + "Favorited" : "Marcat coma favorit", + "Favorite" : "Favorit", + "An error occurred while trying to update the tags" : "Una error s'es produsida al moment de la mesa a jorn de las etiquetas", + "A new file or folder has been <strong>created</strong>" : "Un novèl fichièr o repertòri es estat <strong>creat</strong>", + "A file or folder has been <strong>changed</strong>" : "Un fichièr o un repertòri es estat <strong>modificat</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar las notifications a çò que concernís la creacion e la modificacion de vòstres <strong>fichièrs favorits</strong> <em>(Flux unicament)</em>", + "A file or folder has been <strong>deleted</strong>" : "Un fichièr o un repertòri es estat <strong>suprimit</strong>", + "A file or folder has been <strong>restored</strong>" : "Un fichièr o un repertòri es estat <strong>restablit</strong>", + "You created %1$s" : "Avètz creat %1$s", + "%2$s created %1$s" : "%2$s a creat %1$s", + "%1$s was created in a public folder" : "%1$s es estat creat dins un dorsièr public", + "You changed %1$s" : "Avètz modificat %1$s", + "%2$s changed %1$s" : "%2$s a modificat %1$s", + "You deleted %1$s" : "Avètz suprimit %1$s", + "%2$s deleted %1$s" : "%2$s a suprimit %1$s", + "You restored %1$s" : "Avètz restablit %1$s", + "%2$s restored %1$s" : "%2$s a restablit %1$s", + "%s could not be renamed as it has been deleted" : "%s pòt pas èsser renomenat perque es estat suprimit ", + "%s could not be renamed" : "%s pòt pas èsser renomenat", + "Upload (max. %s)" : "Mandadís (max. %s)", + "File handling" : "Gestion de fichièrs", + "Maximum upload size" : "Talha max. de mandadís", + "max. possible: " : "Max. possible :", + "Save" : "Salvar", + "Can not be edited from here due to insufficient permissions." : "Pòt pas èsser modificat aicí a causa de permissions insufisentas.", "Settings" : "Paramètres", - "New" : "Nòu", - "Text file" : "Fichièr de tèxte", + "WebDAV" : "WebDAV", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizatz aquesta adreça per <a href=\"%s\" target=\"_blank\">accedir a vòstres fichièrs per WebDAV</a>", + "New" : "Novèl", + "New text file" : "Novèl fichièr tèxte", + "Text file" : "Fichièr tèxte", + "New folder" : "Novèl dorsièr", "Folder" : "Dorsièr", - "Upload" : "Amontcarga", - "Cancel upload" : " Anulla l'amontcargar", - "Upload too large" : "Amontcargament tròp gròs", - "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los fichièrs que sias a amontcargar son tròp pesucs per la talha maxi pel servidor.", - "Files are being scanned, please wait." : "Los fiichièrs son a èsser explorats, " + "Upload" : "Cargament", + "Cancel upload" : "Anullar lo mandadís", + "No files in here" : "Pas cap de fichièr aicí", + "Upload some content or sync with your devices!" : "Depausatz de contengut o sincronizatz vòstres aparelhs !", + "No entries found in this folder" : "Cap d'entrada pas trobada dins aqueste dorsièr", + "Select all" : "Seleccionar tot", + "Upload too large" : "Mandadís tròp voluminós", + "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los fichièrs qu'ensajatz de mandar depassan la talha maximala de mandadís permesa per aqueste servidor.", + "Files are being scanned, please wait." : "Los fichièrs son en cors d'analisi, pacientatz.", + "Currently scanning" : "Analisi en cors", + "No favorites" : "Pas cap de favorit", + "Files and folders you mark as favorite will show up here" : "Los fichièrs e dorsièrs aponduts a vòstres favorits apareisseràn aicí" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js index 635780e8876..daa623d3cde 100644 --- a/apps/files/l10n/pl.js +++ b/apps/files/l10n/pl.js @@ -42,14 +42,17 @@ OC.L10N.register( "Delete" : "Usuń", "Disconnect storage" : "Odłącz magazyn", "Unshare" : "Zatrzymaj współdzielenie", + "No permission to delete" : "Brak uprawnień do usunięcia", "Download" : "Pobierz", "Select" : "Wybierz", "Pending" : "Oczekujące", + "Unable to determine date" : "Nie można ustalić daty", "Error moving file." : "Błąd podczas przenoszenia pliku.", "Error moving file" : "Błąd prz przenoszeniu pliku", "Error" : "Błąd", "Could not rename file" : "Nie można zmienić nazwy pliku", "Error deleting file." : "Błąd podczas usuwania pliku", + "No entries in this folder match '{filter}'" : "Brak wyników pasujących do '{filter}'", "Name" : "Nazwa", "Size" : "Rozmiar", "Modified" : "Modyfikacja", @@ -59,12 +62,12 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Wysyłanie %n pliku","Wysyłanie %n plików","Wysyłanie %n plików"], "\"{name}\" is an invalid file name." : "\"{name}\" jest nieprawidłową nazwą pliku.", "File name cannot be empty." : "Nazwa pliku nie może być pusta.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Brak wolnego miejsca {owner}, pliki nie mogą zostać zaktualizowane lub synchronizowane! ", "Your storage is full, files can not be updated or synced anymore!" : "Magazyn jest pełny. Pliki nie mogą zostać zaktualizowane lub zsynchronizowane!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Miejsce dla {owner} jest na wyczerpaniu ({usedSpacePercent}%)", "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.", "{dirs} and {files}" : "{dirs} i {files}", + "Favorited" : "Ulubione", "Favorite" : "Ulubione", "A new file or folder has been <strong>created</strong>" : "Nowy plik lub folder został <strong>utworzony</strong>", "A file or folder has been <strong>changed</strong>" : "Plik lub folder został <strong>zmieniony</strong>", diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json index 6ecce8ddca2..a46afbcc9f0 100644 --- a/apps/files/l10n/pl.json +++ b/apps/files/l10n/pl.json @@ -40,14 +40,17 @@ "Delete" : "Usuń", "Disconnect storage" : "Odłącz magazyn", "Unshare" : "Zatrzymaj współdzielenie", + "No permission to delete" : "Brak uprawnień do usunięcia", "Download" : "Pobierz", "Select" : "Wybierz", "Pending" : "Oczekujące", + "Unable to determine date" : "Nie można ustalić daty", "Error moving file." : "Błąd podczas przenoszenia pliku.", "Error moving file" : "Błąd prz przenoszeniu pliku", "Error" : "Błąd", "Could not rename file" : "Nie można zmienić nazwy pliku", "Error deleting file." : "Błąd podczas usuwania pliku", + "No entries in this folder match '{filter}'" : "Brak wyników pasujących do '{filter}'", "Name" : "Nazwa", "Size" : "Rozmiar", "Modified" : "Modyfikacja", @@ -57,12 +60,12 @@ "_Uploading %n file_::_Uploading %n files_" : ["Wysyłanie %n pliku","Wysyłanie %n plików","Wysyłanie %n plików"], "\"{name}\" is an invalid file name." : "\"{name}\" jest nieprawidłową nazwą pliku.", "File name cannot be empty." : "Nazwa pliku nie może być pusta.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Brak wolnego miejsca {owner}, pliki nie mogą zostać zaktualizowane lub synchronizowane! ", "Your storage is full, files can not be updated or synced anymore!" : "Magazyn jest pełny. Pliki nie mogą zostać zaktualizowane lub zsynchronizowane!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Miejsce dla {owner} jest na wyczerpaniu ({usedSpacePercent}%)", "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.", "{dirs} and {files}" : "{dirs} i {files}", + "Favorited" : "Ulubione", "Favorite" : "Ulubione", "A new file or folder has been <strong>created</strong>" : "Nowy plik lub folder został <strong>utworzony</strong>", "A file or folder has been <strong>changed</strong>" : "Plik lub folder został <strong>zmieniony</strong>", diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index 7d23e67422b..583123252f9 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Excluir", "Disconnect storage" : "Desconectar armazenagem", "Unshare" : "Descompartilhar", + "No permission to delete" : "Sem permissão para excluir", "Download" : "Baixar", "Select" : "Selecionar", "Pending" : "Pendente", "Unable to determine date" : "Impossível determinar a data", + "This operation is forbidden" : "Esta operação é proibida", + "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador", "Error moving file." : "Erro movendo o arquivo.", "Error moving file" : "Erro movendo o arquivo", "Error" : "Erro", @@ -61,17 +64,18 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Enviando %n arquivo","Enviando %n arquivos"], "\"{name}\" is an invalid file name." : "\"{name}\" é um nome de arquivo inválido.", "File name cannot be empty." : "O nome do arquivo não pode estar vazio.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Armazenamento do {owner} está cheio, os arquivos não podem ser mais atualizados ou sincronizados!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Armazenamento do {owner} está quase cheio ({usedSpacePercent}%)", "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 criptografia 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 Criptografia é 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." : "Criptografia foi desabilitada mas seus arquivos continuam criptografados. Por favor vá a suas configurações pessoais para descriptar seus arquivos.", + "_matches '{filter}'_::_match '{filter}'_" : ["coincide com '{filter}'","coincide com '{filter}'"], "{dirs} and {files}" : "{dirs} e {files}", "Favorited" : "Favorito", "Favorite" : "Favorito", "An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas", "A new file or folder has been <strong>created</strong>" : "Um novo arquivo ou pasta foi <strong>criado</strong>", "A file or folder has been <strong>changed</strong>" : "Um arquivo ou pasta foi <strong>modificado</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite de notificações sobre a criação e alterações em seus <strong>arquivos favoritos</strong> <em>(Stream apenas)</em>", "A file or folder has been <strong>deleted</strong>" : "Um arquivo ou pasta foi <strong>excluído</strong>", "A file or folder has been <strong>restored</strong>" : "Um arquivo ou pasta foi <strong>restautado</strong>", "You created %1$s" : "Você criou %1$s", diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index 17c69e0607d..31227d66f82 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -40,10 +40,13 @@ "Delete" : "Excluir", "Disconnect storage" : "Desconectar armazenagem", "Unshare" : "Descompartilhar", + "No permission to delete" : "Sem permissão para excluir", "Download" : "Baixar", "Select" : "Selecionar", "Pending" : "Pendente", "Unable to determine date" : "Impossível determinar a data", + "This operation is forbidden" : "Esta operação é proibida", + "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador", "Error moving file." : "Erro movendo o arquivo.", "Error moving file" : "Erro movendo o arquivo", "Error" : "Erro", @@ -59,17 +62,18 @@ "_Uploading %n file_::_Uploading %n files_" : ["Enviando %n arquivo","Enviando %n arquivos"], "\"{name}\" is an invalid file name." : "\"{name}\" é um nome de arquivo inválido.", "File name cannot be empty." : "O nome do arquivo não pode estar vazio.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Armazenamento do {owner} está cheio, os arquivos não podem ser mais atualizados ou sincronizados!", "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!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Armazenamento do {owner} está quase cheio ({usedSpacePercent}%)", "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 criptografia 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 Criptografia é 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." : "Criptografia foi desabilitada mas seus arquivos continuam criptografados. Por favor vá a suas configurações pessoais para descriptar seus arquivos.", + "_matches '{filter}'_::_match '{filter}'_" : ["coincide com '{filter}'","coincide com '{filter}'"], "{dirs} and {files}" : "{dirs} e {files}", "Favorited" : "Favorito", "Favorite" : "Favorito", "An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas", "A new file or folder has been <strong>created</strong>" : "Um novo arquivo ou pasta foi <strong>criado</strong>", "A file or folder has been <strong>changed</strong>" : "Um arquivo ou pasta foi <strong>modificado</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite de notificações sobre a criação e alterações em seus <strong>arquivos favoritos</strong> <em>(Stream apenas)</em>", "A file or folder has been <strong>deleted</strong>" : "Um arquivo ou pasta foi <strong>excluído</strong>", "A file or folder has been <strong>restored</strong>" : "Um arquivo ou pasta foi <strong>restautado</strong>", "You created %1$s" : "Você criou %1$s", diff --git a/apps/files/l10n/pt_PT.js b/apps/files/l10n/pt_PT.js index b37996b5073..d1830fefd99 100644 --- a/apps/files/l10n/pt_PT.js +++ b/apps/files/l10n/pt_PT.js @@ -42,7 +42,8 @@ OC.L10N.register( "Delete" : "Apagar", "Disconnect storage" : "Desconete o armazenamento", "Unshare" : "Deixar de partilhar", - "Download" : "Transferir", + "No permission to delete" : "Não tem permissão para apagar", + "Download" : "Descarregar", "Select" : "Selecionar", "Pending" : "Pendente", "Unable to determine date" : "Impossível determinar a data", @@ -63,9 +64,6 @@ OC.L10N.register( "File name cannot be empty." : "O nome do ficheiro não pode estar em branco.", "Your storage is full, files can not be updated or synced anymore!" : "O seu armazenamento está cheio, os ficheiros já não podem ser atualizados ou sincronizados.", "Your storage is almost full ({usedSpacePercent}%)" : "O seu armazenamento está quase cheiro ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A Aplicação de Encriptação está ativada, mas as suas chaves não inicializaram. Por favor termine e inicie a sessão 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 privada inválida da Aplicação de Encriptação. Por favor atualize a sua senha de chave privada nas definições pessoais, para recuperar o acesso aos seus ficheiros encriptados.", - "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.", "_matches '{filter}'_::_match '{filter}'_" : ["corresponde a '{filter}'","correspondem a '{filter}'"], "{dirs} and {files}" : "{dirs} e {files}", "Favorited" : "Assinalado como Favorito", @@ -73,6 +71,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Ocorreu um erro ao tentar atualizar as tags", "A new file or folder has been <strong>created</strong>" : "Foi <strong>criado</strong> um novo ficheiro ou pasta", "A file or folder has been <strong>changed</strong>" : "Foi <strong>alterado</strong> um ficheiro ou pasta", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite notificações sobre a criação e modificações nos seus <strong>ficheiros favoritos</strong> <em>(apenas Stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Foi <strong>apagado</strong> um ficheiro ou pasta", "A file or folder has been <strong>restored</strong>" : "Foi <strong>restaurado(a)</strong> um ficheiro ou pasta", "You created %1$s" : "Criou %1$s", diff --git a/apps/files/l10n/pt_PT.json b/apps/files/l10n/pt_PT.json index c0ab202a86d..f0d2d6b74de 100644 --- a/apps/files/l10n/pt_PT.json +++ b/apps/files/l10n/pt_PT.json @@ -40,7 +40,8 @@ "Delete" : "Apagar", "Disconnect storage" : "Desconete o armazenamento", "Unshare" : "Deixar de partilhar", - "Download" : "Transferir", + "No permission to delete" : "Não tem permissão para apagar", + "Download" : "Descarregar", "Select" : "Selecionar", "Pending" : "Pendente", "Unable to determine date" : "Impossível determinar a data", @@ -61,9 +62,6 @@ "File name cannot be empty." : "O nome do ficheiro não pode estar em branco.", "Your storage is full, files can not be updated or synced anymore!" : "O seu armazenamento está cheio, os ficheiros já não podem ser atualizados ou sincronizados.", "Your storage is almost full ({usedSpacePercent}%)" : "O seu armazenamento está quase cheiro ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A Aplicação de Encriptação está ativada, mas as suas chaves não inicializaram. Por favor termine e inicie a sessão 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 privada inválida da Aplicação de Encriptação. Por favor atualize a sua senha de chave privada nas definições pessoais, para recuperar o acesso aos seus ficheiros encriptados.", - "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.", "_matches '{filter}'_::_match '{filter}'_" : ["corresponde a '{filter}'","correspondem a '{filter}'"], "{dirs} and {files}" : "{dirs} e {files}", "Favorited" : "Assinalado como Favorito", @@ -71,6 +69,7 @@ "An error occurred while trying to update the tags" : "Ocorreu um erro ao tentar atualizar as tags", "A new file or folder has been <strong>created</strong>" : "Foi <strong>criado</strong> um novo ficheiro ou pasta", "A file or folder has been <strong>changed</strong>" : "Foi <strong>alterado</strong> um ficheiro ou pasta", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite notificações sobre a criação e modificações nos seus <strong>ficheiros favoritos</strong> <em>(apenas Stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Foi <strong>apagado</strong> um ficheiro ou pasta", "A file or folder has been <strong>restored</strong>" : "Foi <strong>restaurado(a)</strong> um ficheiro ou pasta", "You created %1$s" : "Criou %1$s", diff --git a/apps/files/l10n/ro.js b/apps/files/l10n/ro.js index 6831754b1b5..541ff6e444a 100644 --- a/apps/files/l10n/ro.js +++ b/apps/files/l10n/ro.js @@ -30,7 +30,7 @@ OC.L10N.register( "Favorites" : "Favorite", "Home" : "Acasă", "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nu se poate încărca {filename} deoarece este un director sau are mărimea de 0 octeți", - "Total file size {size1} exceeds upload limit {size2}" : "Mărimea fișierului este {size1} ce depășește limita de incarcare de {size2}", + "Total file size {size1} exceeds upload limit {size2}" : "Mărimea fișierului este {size1} ce depășește limita de încărcare de {size2}", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Spațiu liber insuficient, încărcați {size1} însă doar {size2} disponibil rămas", "Upload cancelled." : "Încărcare anulată.", "Could not get result from server." : "Nu se poate obține rezultatul de la server.", @@ -55,15 +55,12 @@ OC.L10N.register( "Modified" : "Modificat", "_%n folder_::_%n folders_" : ["%n director","%n directoare","%n directoare"], "_%n file_::_%n files_" : ["%n fișier","%n fișiere","%n fișiere"], - "You don’t have permission to upload or create files here" : "Nu aveti permisiunea de a incarca sau crea fisiere aici", + "You don’t have permission to upload or create files here" : "Nu aveți permisiunea de a încărca sau crea fișiere aici", "_Uploading %n file_::_Uploading %n files_" : ["Se încarcă %n fișier.","Se încarcă %n fișiere.","Se încarcă %n fișiere."], "\"{name}\" is an invalid file name." : "\"{name}\" este un nume de fișier nevalid.", "File name cannot be empty." : "Numele fișierului nu poate rămâne gol.", "Your storage is full, files can not be updated or synced anymore!" : "Spațiul de stocare este plin, fișierele nu mai pot fi actualizate sau sincronizate!", "Your storage is almost full ({usedSpacePercent}%)" : "Spațiul de stocare este aproape plin ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplicatia de criptare este activata dar tastatura nu este initializata , va rugam deconectati-va si reconectati-va", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Cheie privată nevalidă pentru aplicația Încriptare. Te rog, actualizează-ți parola cheii private folosind setările personale pentru a reaccesa fișierele tale încriptate.", - "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", "{dirs} and {files}" : "{dirs} și {files}", "Favorite" : "Favorit", "A new file or folder has been <strong>created</strong>" : "Un nou fișier sau dosar a fost <strong>creat</strong>", @@ -96,6 +93,7 @@ OC.L10N.register( "Folder" : "Dosar", "Upload" : "Încărcă", "Cancel upload" : "Anulează încărcarea", + "Select all" : "Selectează tot", "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șierele pe care încerci să le încarci depășesc limita de încărcare maximă admisă pe acest server.", "Files are being scanned, please wait." : "Fișierele sunt scanate, te rog așteaptă.", diff --git a/apps/files/l10n/ro.json b/apps/files/l10n/ro.json index 206bb7e7e6c..6c4536d5357 100644 --- a/apps/files/l10n/ro.json +++ b/apps/files/l10n/ro.json @@ -28,7 +28,7 @@ "Favorites" : "Favorite", "Home" : "Acasă", "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nu se poate încărca {filename} deoarece este un director sau are mărimea de 0 octeți", - "Total file size {size1} exceeds upload limit {size2}" : "Mărimea fișierului este {size1} ce depășește limita de incarcare de {size2}", + "Total file size {size1} exceeds upload limit {size2}" : "Mărimea fișierului este {size1} ce depășește limita de încărcare de {size2}", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Spațiu liber insuficient, încărcați {size1} însă doar {size2} disponibil rămas", "Upload cancelled." : "Încărcare anulată.", "Could not get result from server." : "Nu se poate obține rezultatul de la server.", @@ -53,15 +53,12 @@ "Modified" : "Modificat", "_%n folder_::_%n folders_" : ["%n director","%n directoare","%n directoare"], "_%n file_::_%n files_" : ["%n fișier","%n fișiere","%n fișiere"], - "You don’t have permission to upload or create files here" : "Nu aveti permisiunea de a incarca sau crea fisiere aici", + "You don’t have permission to upload or create files here" : "Nu aveți permisiunea de a încărca sau crea fișiere aici", "_Uploading %n file_::_Uploading %n files_" : ["Se încarcă %n fișier.","Se încarcă %n fișiere.","Se încarcă %n fișiere."], "\"{name}\" is an invalid file name." : "\"{name}\" este un nume de fișier nevalid.", "File name cannot be empty." : "Numele fișierului nu poate rămâne gol.", "Your storage is full, files can not be updated or synced anymore!" : "Spațiul de stocare este plin, fișierele nu mai pot fi actualizate sau sincronizate!", "Your storage is almost full ({usedSpacePercent}%)" : "Spațiul de stocare este aproape plin ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplicatia de criptare este activata dar tastatura nu este initializata , va rugam deconectati-va si reconectati-va", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Cheie privată nevalidă pentru aplicația Încriptare. Te rog, actualizează-ți parola cheii private folosind setările personale pentru a reaccesa fișierele tale încriptate.", - "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", "{dirs} and {files}" : "{dirs} și {files}", "Favorite" : "Favorit", "A new file or folder has been <strong>created</strong>" : "Un nou fișier sau dosar a fost <strong>creat</strong>", @@ -94,6 +91,7 @@ "Folder" : "Dosar", "Upload" : "Încărcă", "Cancel upload" : "Anulează încărcarea", + "Select all" : "Selectează tot", "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șierele pe care încerci să le încarci depășesc limita de încărcare maximă admisă pe acest server.", "Files are being scanned, please wait." : "Fișierele sunt scanate, te rog așteaptă.", diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js index f93ac884971..a2a7bc69c96 100644 --- a/apps/files/l10n/ru.js +++ b/apps/files/l10n/ru.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Удалить", "Disconnect storage" : "Отсоединить хранилище", "Unshare" : "Закрыть доступ", + "No permission to delete" : "Недостаточно прав для удаления", "Download" : "Скачать", "Select" : "Выбрать", "Pending" : "Ожидание", "Unable to determine date" : "Невозможно определить дату", + "This operation is forbidden" : "Операция запрещена", + "This directory is unavailable, please check the logs or contact the administrator" : "Директория недоступна, пожалуйста проверьте журнал сообщений или свяжитесь с администратором", "Error moving file." : "Ошибка при перемещении файла.", "Error moving file" : "Ошибка при перемещении файла", "Error" : "Ошибка", @@ -55,28 +58,28 @@ OC.L10N.register( "Name" : "Имя", "Size" : "Размер", "Modified" : "Изменён", - "_%n folder_::_%n folders_" : ["%n каталог","%n каталога","%n каталогов"], - "_%n file_::_%n files_" : ["%n файл","%n файла","%n файлов"], + "_%n folder_::_%n folders_" : ["%n каталог","%n каталога","%n каталогов","%n каталогов"], + "_%n file_::_%n files_" : ["%n файл","%n файла","%n файлов","%n файлов"], "You don’t have permission to upload or create files here" : "У вас нет прав для загрузки или создания файлов здесь.", - "_Uploading %n file_::_Uploading %n files_" : ["Закачка %n файла","Закачка %n файлов","Закачка %n файлов"], + "_Uploading %n file_::_Uploading %n files_" : ["Закачка %n файла","Закачка %n файлов","Закачка %n файлов","Закачка %n файлов"], "\"{name}\" is an invalid file name." : "\"{name}\" это неправильное имя файла.", "File name cannot be empty." : "Имя файла не может быть пустым.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Хранилище {owner} переполнено, файлы больше не могут быть обновлены или синхронизированы!", "Your storage is full, files can not be updated or synced anymore!" : "Ваше хранилище заполнено, произведите очистку перед загрузкой новых файлов.", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Хранилище {owner} практически заполнено ({usedSpacePercent}%)", "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." : "Шифрование было отключено, но ваши файлы остались зашифрованными. Зайдите на страницу личных настроек для того, чтобы расшифровать их.", - "_matches '{filter}'_::_match '{filter}'_" : ["соответствует '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'"], + "_matches '{filter}'_::_match '{filter}'_" : ["соответствует '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'"], "{dirs} and {files}" : "{dirs} и {files}", "Favorited" : "Избранное", "Favorite" : "Избранное", "An error occurred while trying to update the tags" : "Во время обновления тегов возникла ошибка", "A new file or folder has been <strong>created</strong>" : "<strong>Создан</strong> новый файл или каталог", "A file or folder has been <strong>changed</strong>" : "<strong>Изменён</strong> файл или каталог", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ограничить уведомления о создании и изменении ваших <strong>избранных файлов</strong> <em>(отображать только в приложении события)</em>", "A file or folder has been <strong>deleted</strong>" : "<strong>Удален</strong> файл или каталог", "A file or folder has been <strong>restored</strong>" : "<strong>Восстановлен</strong> файл или каталог", "You created %1$s" : "Вы создали %1$s", - "%2$s created %1$s" : "%2$s создано %1$s", + "%2$s created %1$s" : "%2$s создал %1$s", "%1$s was created in a public folder" : "%1$s создан в общем каталоге", "You changed %1$s" : "Вы изменили %1$s", "%2$s changed %1$s" : "%2$s изменил %1$s", @@ -113,4 +116,4 @@ OC.L10N.register( "No favorites" : "Нет избранного", "Files and folders you mark as favorite will show up here" : "Здесь появятся файлы и каталоги, отмеченные как избранные" }, -"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); +"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json index eee5d0957fc..80487e989fb 100644 --- a/apps/files/l10n/ru.json +++ b/apps/files/l10n/ru.json @@ -40,10 +40,13 @@ "Delete" : "Удалить", "Disconnect storage" : "Отсоединить хранилище", "Unshare" : "Закрыть доступ", + "No permission to delete" : "Недостаточно прав для удаления", "Download" : "Скачать", "Select" : "Выбрать", "Pending" : "Ожидание", "Unable to determine date" : "Невозможно определить дату", + "This operation is forbidden" : "Операция запрещена", + "This directory is unavailable, please check the logs or contact the administrator" : "Директория недоступна, пожалуйста проверьте журнал сообщений или свяжитесь с администратором", "Error moving file." : "Ошибка при перемещении файла.", "Error moving file" : "Ошибка при перемещении файла", "Error" : "Ошибка", @@ -53,28 +56,28 @@ "Name" : "Имя", "Size" : "Размер", "Modified" : "Изменён", - "_%n folder_::_%n folders_" : ["%n каталог","%n каталога","%n каталогов"], - "_%n file_::_%n files_" : ["%n файл","%n файла","%n файлов"], + "_%n folder_::_%n folders_" : ["%n каталог","%n каталога","%n каталогов","%n каталогов"], + "_%n file_::_%n files_" : ["%n файл","%n файла","%n файлов","%n файлов"], "You don’t have permission to upload or create files here" : "У вас нет прав для загрузки или создания файлов здесь.", - "_Uploading %n file_::_Uploading %n files_" : ["Закачка %n файла","Закачка %n файлов","Закачка %n файлов"], + "_Uploading %n file_::_Uploading %n files_" : ["Закачка %n файла","Закачка %n файлов","Закачка %n файлов","Закачка %n файлов"], "\"{name}\" is an invalid file name." : "\"{name}\" это неправильное имя файла.", "File name cannot be empty." : "Имя файла не может быть пустым.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Хранилище {owner} переполнено, файлы больше не могут быть обновлены или синхронизированы!", "Your storage is full, files can not be updated or synced anymore!" : "Ваше хранилище заполнено, произведите очистку перед загрузкой новых файлов.", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Хранилище {owner} практически заполнено ({usedSpacePercent}%)", "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." : "Шифрование было отключено, но ваши файлы остались зашифрованными. Зайдите на страницу личных настроек для того, чтобы расшифровать их.", - "_matches '{filter}'_::_match '{filter}'_" : ["соответствует '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'"], + "_matches '{filter}'_::_match '{filter}'_" : ["соответствует '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'"], "{dirs} and {files}" : "{dirs} и {files}", "Favorited" : "Избранное", "Favorite" : "Избранное", "An error occurred while trying to update the tags" : "Во время обновления тегов возникла ошибка", "A new file or folder has been <strong>created</strong>" : "<strong>Создан</strong> новый файл или каталог", "A file or folder has been <strong>changed</strong>" : "<strong>Изменён</strong> файл или каталог", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ограничить уведомления о создании и изменении ваших <strong>избранных файлов</strong> <em>(отображать только в приложении события)</em>", "A file or folder has been <strong>deleted</strong>" : "<strong>Удален</strong> файл или каталог", "A file or folder has been <strong>restored</strong>" : "<strong>Восстановлен</strong> файл или каталог", "You created %1$s" : "Вы создали %1$s", - "%2$s created %1$s" : "%2$s создано %1$s", + "%2$s created %1$s" : "%2$s создал %1$s", "%1$s was created in a public folder" : "%1$s создан в общем каталоге", "You changed %1$s" : "Вы изменили %1$s", "%2$s changed %1$s" : "%2$s изменил %1$s", @@ -110,5 +113,5 @@ "Currently scanning" : "В настоящее время сканируется", "No favorites" : "Нет избранного", "Files and folders you mark as favorite will show up here" : "Здесь появятся файлы и каталоги, отмеченные как избранные" -},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" +},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" }
\ No newline at end of file diff --git a/apps/files/l10n/sk_SK.js b/apps/files/l10n/sk_SK.js index 3b426f7b026..809e9567b95 100644 --- a/apps/files/l10n/sk_SK.js +++ b/apps/files/l10n/sk_SK.js @@ -42,10 +42,12 @@ OC.L10N.register( "Delete" : "Zmazať", "Disconnect storage" : "Odpojiť úložisko", "Unshare" : "Zrušiť zdieľanie", + "No permission to delete" : "Žiadne povolenie na odstránenie", "Download" : "Sťahovanie", "Select" : "Vybrať", "Pending" : "Čaká", "Unable to determine date" : "Nemožno určiť dátum", + "This operation is forbidden" : "Táto operácia je zakázaná", "Error moving file." : "Chyba pri presune súboru.", "Error moving file" : "Chyba pri presúvaní súboru", "Error" : "Chyba", @@ -63,9 +65,6 @@ OC.L10N.register( "File name cannot be empty." : "Meno súboru nemôže byť prázdne", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["zodpovedá '{filter}'","zodpovedá '{filter}'","zodpovedá '{filter}'"], "{dirs} and {files}" : "{dirs} a {files}", "Favorited" : "Pridané k obľúbeným", @@ -101,6 +100,7 @@ OC.L10N.register( "Folder" : "Priečinok", "Upload" : "Nahrať", "Cancel upload" : "Zrušiť nahrávanie", + "No files in here" : "Nie sú tu žiadne súbory", "Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte zo svojimi zariadeniami!", "No entries found in this folder" : "V tomto priečinku nebolo nič nájdené", "Select all" : "Vybrať všetko", diff --git a/apps/files/l10n/sk_SK.json b/apps/files/l10n/sk_SK.json index 673d16788a6..2702076b234 100644 --- a/apps/files/l10n/sk_SK.json +++ b/apps/files/l10n/sk_SK.json @@ -40,10 +40,12 @@ "Delete" : "Zmazať", "Disconnect storage" : "Odpojiť úložisko", "Unshare" : "Zrušiť zdieľanie", + "No permission to delete" : "Žiadne povolenie na odstránenie", "Download" : "Sťahovanie", "Select" : "Vybrať", "Pending" : "Čaká", "Unable to determine date" : "Nemožno určiť dátum", + "This operation is forbidden" : "Táto operácia je zakázaná", "Error moving file." : "Chyba pri presune súboru.", "Error moving file" : "Chyba pri presúvaní súboru", "Error" : "Chyba", @@ -61,9 +63,6 @@ "File name cannot be empty." : "Meno súboru nemôže byť prázdne", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["zodpovedá '{filter}'","zodpovedá '{filter}'","zodpovedá '{filter}'"], "{dirs} and {files}" : "{dirs} a {files}", "Favorited" : "Pridané k obľúbeným", @@ -99,6 +98,7 @@ "Folder" : "Priečinok", "Upload" : "Nahrať", "Cancel upload" : "Zrušiť nahrávanie", + "No files in here" : "Nie sú tu žiadne súbory", "Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte zo svojimi zariadeniami!", "No entries found in this folder" : "V tomto priečinku nebolo nič nájdené", "Select all" : "Vybrať všetko", diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js index 9abf025473b..299bce880f5 100644 --- a/apps/files/l10n/sl.js +++ b/apps/files/l10n/sl.js @@ -42,6 +42,7 @@ OC.L10N.register( "Delete" : "Izbriši", "Disconnect storage" : "Odklopi shrambo", "Unshare" : "Prekini souporabo", + "No permission to delete" : "Ni ustreznih dovoljenj za brisanje tega stika", "Download" : "Prejmi", "Select" : "Izberi", "Pending" : "V čakanju ...", @@ -61,11 +62,10 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Posodabljanje %n datoteke","Posodabljanje %n datotek","Posodabljanje %n datotek","Posodabljanje %n datotek"], "\"{name}\" is an invalid file name." : "\"{name}\" je neveljavno ime datoteke.", "File name cannot be empty." : "Ime datoteke ne sme biti prazno polje.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Shramba uporabnika {owner} je polna, zato datotek ni več mogoče posodabljati in usklajevati!", "Your storage is full, files can not be updated or synced anymore!" : "Shramba je povsem napolnjena. Datotek ni več mogoče posodabljati in usklajevati!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Shramba uporabnika {owner} je polna ({usedSpacePercent}%).", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["se sklada s filtrom '{filter}'","se skladata s filtrom '{filter}'","se skladajo s filtrom '{filter}'","se skladajo s filtrom '{filter}'"], "{dirs} and {files}" : "{dirs} in {files}", "Favorited" : "Označeno kot priljubljeno", @@ -73,6 +73,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Prišlo je do napake med posodabljanjem oznak", "A new file or folder has been <strong>created</strong>" : "Nova datoteka ali mapa je <strong>ustvarjena</strong>", "A file or folder has been <strong>changed</strong>" : "Datoteka ali mapa je <strong>spremenjena</strong>.", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Omeji obvestila o ustvarjanju in spreminjanju <strong>najpogosteje uporabljenih </strong> datotek <em>(omogoči pretok)</em>", "A file or folder has been <strong>deleted</strong>" : "Datoteka ali mapa je <strong>izbrisana</strong>.", "A file or folder has been <strong>restored</strong>" : "Datoteka ali mapa je <strong>obnovljena</strong>.", "You created %1$s" : "Ustvarili ste %1$s", diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json index ce8a63f6376..7e684c04efe 100644 --- a/apps/files/l10n/sl.json +++ b/apps/files/l10n/sl.json @@ -40,6 +40,7 @@ "Delete" : "Izbriši", "Disconnect storage" : "Odklopi shrambo", "Unshare" : "Prekini souporabo", + "No permission to delete" : "Ni ustreznih dovoljenj za brisanje tega stika", "Download" : "Prejmi", "Select" : "Izberi", "Pending" : "V čakanju ...", @@ -59,11 +60,10 @@ "_Uploading %n file_::_Uploading %n files_" : ["Posodabljanje %n datoteke","Posodabljanje %n datotek","Posodabljanje %n datotek","Posodabljanje %n datotek"], "\"{name}\" is an invalid file name." : "\"{name}\" je neveljavno ime datoteke.", "File name cannot be empty." : "Ime datoteke ne sme biti prazno polje.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Shramba uporabnika {owner} je polna, zato datotek ni več mogoče posodabljati in usklajevati!", "Your storage is full, files can not be updated or synced anymore!" : "Shramba je povsem napolnjena. Datotek ni več mogoče posodabljati in usklajevati!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Shramba uporabnika {owner} je polna ({usedSpacePercent}%).", "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.", "_matches '{filter}'_::_match '{filter}'_" : ["se sklada s filtrom '{filter}'","se skladata s filtrom '{filter}'","se skladajo s filtrom '{filter}'","se skladajo s filtrom '{filter}'"], "{dirs} and {files}" : "{dirs} in {files}", "Favorited" : "Označeno kot priljubljeno", @@ -71,6 +71,7 @@ "An error occurred while trying to update the tags" : "Prišlo je do napake med posodabljanjem oznak", "A new file or folder has been <strong>created</strong>" : "Nova datoteka ali mapa je <strong>ustvarjena</strong>", "A file or folder has been <strong>changed</strong>" : "Datoteka ali mapa je <strong>spremenjena</strong>.", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Omeji obvestila o ustvarjanju in spreminjanju <strong>najpogosteje uporabljenih </strong> datotek <em>(omogoči pretok)</em>", "A file or folder has been <strong>deleted</strong>" : "Datoteka ali mapa je <strong>izbrisana</strong>.", "A file or folder has been <strong>restored</strong>" : "Datoteka ali mapa je <strong>obnovljena</strong>.", "You created %1$s" : "Ustvarili ste %1$s", diff --git a/apps/files/l10n/sq.js b/apps/files/l10n/sq.js index 73476b286b0..e171d3d1e9b 100644 --- a/apps/files/l10n/sq.js +++ b/apps/files/l10n/sq.js @@ -59,9 +59,6 @@ OC.L10N.register( "File name cannot be empty." : "Emri i skedarit nuk mund të jetë bosh.", "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 App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacioni i Shifrimit është i aktivizuar por çelësat tuaj nuk janë aktivizuar, ju lutem dilni dhe ri-hyni përseri në sistem", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Çelësi privat për Aplikacionin e Shifrimit është i pavlefshëm. Ju lutem përditësoni fjalëkalimin e çelësit tuaj privat në parametrat tuaj për të rimarrë qasje në skedarët tuaj të shifruar.", - "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.", "{dirs} and {files}" : "{dirs} dhe {files}", "A new file or folder has been <strong>created</strong>" : "Një skedar ose një dosje e re është <strong>krijuar</strong>", "A file or folder has been <strong>changed</strong>" : "Një skedar ose një dosje ka <strong>ndryshuar</strong>", diff --git a/apps/files/l10n/sq.json b/apps/files/l10n/sq.json index 2f8b64a24b1..624f85bf0c8 100644 --- a/apps/files/l10n/sq.json +++ b/apps/files/l10n/sq.json @@ -57,9 +57,6 @@ "File name cannot be empty." : "Emri i skedarit nuk mund të jetë bosh.", "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 App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacioni i Shifrimit është i aktivizuar por çelësat tuaj nuk janë aktivizuar, ju lutem dilni dhe ri-hyni përseri në sistem", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Çelësi privat për Aplikacionin e Shifrimit është i pavlefshëm. Ju lutem përditësoni fjalëkalimin e çelësit tuaj privat në parametrat tuaj për të rimarrë qasje në skedarët tuaj të shifruar.", - "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.", "{dirs} and {files}" : "{dirs} dhe {files}", "A new file or folder has been <strong>created</strong>" : "Një skedar ose një dosje e re është <strong>krijuar</strong>", "A file or folder has been <strong>changed</strong>" : "Një skedar ose një dosje ka <strong>ndryshuar</strong>", diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js index 75a1ad3b1c6..060ac4d506e 100644 --- a/apps/files/l10n/sr.js +++ b/apps/files/l10n/sr.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Обриши", "Disconnect storage" : "Искључи складиште", "Unshare" : "Не дели", + "No permission to delete" : "Без дозволе за брисање", "Download" : "Преузми", "Select" : "Изабери", "Pending" : "На чекању", "Unable to determine date" : "Не могу да одредим датум", + "This operation is forbidden" : "Ова радња је забрањена", + "This directory is unavailable, please check the logs or contact the administrator" : "Овај директоријум није доступан, проверите записе или контактирајте администратора", "Error moving file." : "Грешка при премештању фајла.", "Error moving file" : "Грешка при премештању фајла", "Error" : "Грешка", @@ -61,11 +64,10 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["Отпремам %n фајл","Отпремам %n фајла","Отпремам %n фајлова"], "\"{name}\" is an invalid file name." : "\"{name}\" није исправан назив фајла.", "File name cannot be empty." : "Назив фајла не може бити празан.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Складиште корисника {owner} је пуно. Фајлови се не могу ажурирати нити синхронизовати!", "Your storage is full, files can not be updated or synced anymore!" : "Ваше складиште је пуно. Фајлови више не могу бити ажурирани ни синхронизовани!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Складиште корисника {owner} је скоро пуно ({usedSpacePercent}%)", "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." : "Шифровање је искључено али ваши фајлови су и даље шифровани. Идите у личне поставке и дешифрујте ваше фајлове.", "_matches '{filter}'_::_match '{filter}'_" : ["се поклапа са '{filter}'","се поклапају са '{filter}'","се поклапа са '{filter}'"], "{dirs} and {files}" : "{dirs} и {files}", "Favorited" : "Омиљено", @@ -73,6 +75,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Дошло је до грешке при покушају ажурирања ознака", "A new file or folder has been <strong>created</strong>" : "Нови фајл или фасцикла су <strong>направљени</strong>", "A file or folder has been <strong>changed</strong>" : "Фајл или фасцикла су <strong>измењени</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ограничи обавештења о стварању и изменама на <strong>омиљене фајлове</strong> <em>(само у записнику)</em>", "A file or folder has been <strong>deleted</strong>" : "Фајл или фасцикла су <strong>обрисани</strong>", "A file or folder has been <strong>restored</strong>" : "Фајл или фасцикла су <strong>враћени</strong>", "You created %1$s" : "Направили сте %1$s", diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json index 1384a2598dc..69fefcaf2b2 100644 --- a/apps/files/l10n/sr.json +++ b/apps/files/l10n/sr.json @@ -40,10 +40,13 @@ "Delete" : "Обриши", "Disconnect storage" : "Искључи складиште", "Unshare" : "Не дели", + "No permission to delete" : "Без дозволе за брисање", "Download" : "Преузми", "Select" : "Изабери", "Pending" : "На чекању", "Unable to determine date" : "Не могу да одредим датум", + "This operation is forbidden" : "Ова радња је забрањена", + "This directory is unavailable, please check the logs or contact the administrator" : "Овај директоријум није доступан, проверите записе или контактирајте администратора", "Error moving file." : "Грешка при премештању фајла.", "Error moving file" : "Грешка при премештању фајла", "Error" : "Грешка", @@ -59,11 +62,10 @@ "_Uploading %n file_::_Uploading %n files_" : ["Отпремам %n фајл","Отпремам %n фајла","Отпремам %n фајлова"], "\"{name}\" is an invalid file name." : "\"{name}\" није исправан назив фајла.", "File name cannot be empty." : "Назив фајла не може бити празан.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "Складиште корисника {owner} је пуно. Фајлови се не могу ажурирати нити синхронизовати!", "Your storage is full, files can not be updated or synced anymore!" : "Ваше складиште је пуно. Фајлови више не могу бити ажурирани ни синхронизовани!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Складиште корисника {owner} је скоро пуно ({usedSpacePercent}%)", "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." : "Шифровање је искључено али ваши фајлови су и даље шифровани. Идите у личне поставке и дешифрујте ваше фајлове.", "_matches '{filter}'_::_match '{filter}'_" : ["се поклапа са '{filter}'","се поклапају са '{filter}'","се поклапа са '{filter}'"], "{dirs} and {files}" : "{dirs} и {files}", "Favorited" : "Омиљено", @@ -71,6 +73,7 @@ "An error occurred while trying to update the tags" : "Дошло је до грешке при покушају ажурирања ознака", "A new file or folder has been <strong>created</strong>" : "Нови фајл или фасцикла су <strong>направљени</strong>", "A file or folder has been <strong>changed</strong>" : "Фајл или фасцикла су <strong>измењени</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ограничи обавештења о стварању и изменама на <strong>омиљене фајлове</strong> <em>(само у записнику)</em>", "A file or folder has been <strong>deleted</strong>" : "Фајл или фасцикла су <strong>обрисани</strong>", "A file or folder has been <strong>restored</strong>" : "Фајл или фасцикла су <strong>враћени</strong>", "You created %1$s" : "Направили сте %1$s", diff --git a/apps/files/l10n/sr@latin.js b/apps/files/l10n/sr@latin.js index ba2c2072551..acd0a988ec6 100644 --- a/apps/files/l10n/sr@latin.js +++ b/apps/files/l10n/sr@latin.js @@ -4,110 +4,111 @@ OC.L10N.register( "Storage not available" : "Skladište nije dostupno", "Storage invalid" : "Neispravno skladište", "Unknown error" : "Nepoznata greška", - "Could not move %s - File with this name already exists" : "Nemoguće premeštanje %s - fajl sa ovim imenom već postoji", - "Could not move %s" : "Nemoguće premeštanje %s", + "Could not move %s - File with this name already exists" : "Ne mogu da premestim %s – fajl sa ovim nazivom već postoji", + "Could not move %s" : "Ne mogu da premestim %s", "Permission denied" : "Pristup odbijen", - "The target folder has been moved or deleted." : "Ciljani direktorijum je premešten ili izbrisan.", - "The name %s is already used in the folder %s. Please choose a different name." : "Ime %s je već u upotrebi u direktorijumu %s. Molimo izaberite drugo ime.", - "Error when creating the file" : "Greška pri kreiranju fajla", - "Error when creating the folder" : "Greška pri kreiranju direktorijuma", - "Unable to set upload directory." : "Nemoguće postaviti direktorijum za otpremanje.", - "Invalid Token" : "Neispravan simbol", - "No file was uploaded. Unknown error" : "Fajl nije otpremeljen. Nepoznata greška", - "There is no error, the file uploaded with success" : "Nema greške, fajl je uspešno poslat", - "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Otpremljeni fajl prevazilazi upload_max_filesize direktivu u php.ini:", - "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Poslati fajl prevazilazi direktivu MAX_FILE_SIZE koja je navedena u HTML formi", - "The uploaded file was only partially uploaded" : "Poslati fajl je samo delimično otpremljen!", - "No file was uploaded" : "Nijedan fajl nije poslat", + "The target folder has been moved or deleted." : "Odredišna fascikla je premeštena ili obrisana.", + "The name %s is already used in the folder %s. Please choose a different name." : "Naziv %s se već koristi u fascikli %s. Odredite drugi naziv.", + "Error when creating the file" : "Greška pri stvaranju fajla", + "Error when creating the folder" : "Greška pri stvaranju fajla", + "Unable to set upload directory." : "Ne mogu da postavim direktorijum za otpremanje.", + "Invalid Token" : "Neispravan token", + "No file was uploaded. Unknown error" : "Nijedan fajl nije otpremljen. Nepoznata greška", + "There is no error, the file uploaded with success" : "Nema greške, fajl je uspešno otpremljen", + "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Otpremani fajl prevazilazi smernicu upload_max_filesize u fajlu php.ini:", + "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Otpremani fajl prevazilazi smernicu MAX_FILE_SIZE koja je navedena u HTML obrascu", + "The uploaded file was only partially uploaded" : "Otpremani fajl je samo delimično otpremljen", + "No file was uploaded" : "Ništa nije otpremljeno", "Missing a temporary folder" : "Nedostaje privremena fascikla", - "Failed to write to disk" : "Neuspelo pisanje na disk", - "Not enough storage available" : "Nema dovoljno skladišnog prostora na raspolaganju", - "Upload failed. Could not find uploaded file" : "Otpremanje nije uspelo. Nije pronađen otpremljeni fajl", - "Upload failed. Could not get file info." : "Otpremanje nije uspelo. Nije moguće pronaći informacije o fajlu.", - "Invalid directory." : "Neispravan direktorijum", + "Failed to write to disk" : "Ne mogu da pišem na disk", + "Not enough storage available" : "Nema dovoljno prostora", + "Upload failed. Could not find uploaded file" : "Neuspešno otpremanje. Ne mogu da nađem otpremljeni fajl", + "Upload failed. Could not get file info." : "Neuspešno otpremanje. Ne mogu da dobijem podatke o fajlu.", + "Invalid directory." : "Neispravna fascikla.", "Files" : "Fajlovi", "All files" : "Svi fajlovi", "Favorites" : "Omiljeni", - "Home" : "Kuća", - "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nije moguće otpremiti {filename} zato što je u pitanju direktorijum ili ima 0 bajtova.", - "Total file size {size1} exceeds upload limit {size2}" : "Ukupna veličina fajla {size1} prevazilazi limit za otpremanje {size2}", - "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nema dovoljno slobodnog prostora, otpremate {size1} ali samo je {size2} preostalo", - "Upload cancelled." : "Otpremanje otkazano.", - "Could not get result from server." : "Nije bilo moguće dobiti rezultat sa servera.", - "File upload is in progress. Leaving the page now will cancel the upload." : "Otpremanje fajla je u toku. Ako sada napustite stranicu, prekinućete otpremanje.", + "Home" : "Početna", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "Ne mogu da otpremim {filename} jer je to direktorijum ili ima 0 bajtova", + "Total file size {size1} exceeds upload limit {size2}" : "Veličina {size1} prevazilazi ograničenje za otpremanje od {size2}", + "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nema prostora. Otpremate {size1} ali samo {size2} je preostalo", + "Upload cancelled." : "Otpremanje je otkazano.", + "Could not get result from server." : "Ne mogu da dobijem rezultat sa servera.", + "File upload is in progress. Leaving the page now will cancel the upload." : "Otpremanje fajla je u toku. Ako sada napustite stranicu, otkazaćete otpremanje.", "{new_name} already exists" : "{new_name} već postoji", - "Could not create file" : "Nije bilo moguće kreirati fajl", - "Could not create folder" : "Nije bilo moguće kreirati direktorijum", - "Rename" : "Preimenij", + "Could not create file" : "Ne mogu da stvorim fajl", + "Could not create folder" : "Ne mogu da stvorim fasciklu", + "Rename" : "Preimenuj", "Delete" : "Obriši", - "Disconnect storage" : "Nepovezano skladište", - "Unshare" : "Ukljoni deljenje", + "Disconnect storage" : "Isključi skladište", + "Unshare" : "Ne deli", "Download" : "Preuzmi", - "Select" : "Odaberi", - "Pending" : "U toku", - "Unable to determine date" : "Nemoguće ustanoviti datum", + "Select" : "Izaberi", + "Pending" : "Na čekanju", + "Unable to determine date" : "Ne mogu da odredim datum", "Error moving file." : "Greška pri premeštanju fajla.", "Error moving file" : "Greška pri premeštanju fajla", "Error" : "Greška", - "Could not rename file" : "Nemoguća promena imena fajla", + "Could not rename file" : "Ne mogu da preimenujem fajl", "Error deleting file." : "Greška pri brisanju fajla.", - "No entries in this folder match '{filter}'" : "Nijedan unos u ovom direktorijumu se ne poklapa sa '{filter}'", - "Name" : "Ime", + "No entries in this folder match '{filter}'" : "U ovoj fascikli ništa se ne poklapa sa '{filter}'", + "Name" : "Naziv", "Size" : "Veličina", - "Modified" : "Zadnja izmena", - "_%n folder_::_%n folders_" : ["%n direktorijum","%n direktorijuma","%n direktorijuma"], - "_%n file_::_%n files_" : ["%n fajl","%n fajlova","%n fajlova"], - "You don’t have permission to upload or create files here" : "Nemate dozvolu da otpremate ili kreirate fajlove ovde", - "_Uploading %n file_::_Uploading %n files_" : ["Otpremam %n fajl","Otpremam %n fajlova","Otpremam %n fajlova"], - "\"{name}\" is an invalid file name." : "\"{name}\" je neispravno ime fajla.", - "File name cannot be empty." : "Ime fajla ne može biti prazno.", - "Your storage is full, files can not be updated or synced anymore!" : "Vaše skladište je puno, fajlovi se ne mogu više otpremati ili sinhronizovati.", + "Modified" : "Izmenjen", + "_%n folder_::_%n folders_" : ["%n fascikla","%n fascikle","%n fascikli"], + "_%n file_::_%n files_" : ["%n fajl","%n fajla","%n fajlova"], + "You don’t have permission to upload or create files here" : "Nemate dozvole da ovde otpremate ili stvarate fajlove", + "_Uploading %n file_::_Uploading %n files_" : ["Otpremam %n fajl","Otpremam %n fajla","Otpremam %n fajlova"], + "\"{name}\" is an invalid file name." : "\"{name}\" nije ispravan naziv fajla.", + "File name cannot be empty." : "Naziv fajla ne može biti prazan.", + "Your storage is full, files can not be updated or synced anymore!" : "Vaše skladište je puno. Fajlovi više ne mogu biti ažurirani ni sinhronizovani!", "Your storage is almost full ({usedSpacePercent}%)" : "Vaše skladište je skoro puno ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija za šifrovanje je omogućena ali Vaši ključevi nisu inicijalizovani, molimo Vas da se izlogujete i ulogujete ponovo.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za Aplikaciju za šifrovanje. Molimo da osvežite vašu lozinku privatnog ključa u ličnim podešavanjima kako bi dobili pristup šifrovanim fajlovima.", - "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrovanje je isključeno, ali Vaši fajlovi su i dalje šifrovani. Molimo Vas da odete u lična podešavanja da dešifrujete svoje fajlove.", - "_matches '{filter}'_::_match '{filter}'_" : ["poklapa se sa '{filter}'","poklapaju se sa '{filter}'","poklapaju se sa '{filter}'"], + "_matches '{filter}'_::_match '{filter}'_" : ["se poklapa sa '{filter}'","se poklapaju sa '{filter}'","se poklapa sa '{filter}'"], "{dirs} and {files}" : "{dirs} i {files}", - "Favorited" : "Omiljeni", - "Favorite" : "Omiljen", - "A new file or folder has been <strong>created</strong>" : "Novi fajl ili direktorijum je <strong>kreiran</strong>", - "A file or folder has been <strong>changed</strong>" : "Faj ili direktorijum je <strong>promenjen</strong>", - "A file or folder has been <strong>deleted</strong>" : "Fajl ili direktorijum je <strong>uklonjen</strong>", - "A file or folder has been <strong>restored</strong>" : "Fajl ili direktorijum je <strong>povraćen</strong>", - "You created %1$s" : "Kreirali ste %1$s", - "%2$s created %1$s" : "%2$s je kreirao %1$s", - "%1$s was created in a public folder" : "%1$s je kreiran u javnom direktorijumu", + "Favorited" : "Omiljeno", + "Favorite" : "Omiljeni", + "An error occurred while trying to update the tags" : "Došlo je do greške pri pokušaju ažuriranja oznaka", + "A new file or folder has been <strong>created</strong>" : "Novi fajl ili fascikla su <strong>napravljeni</strong>", + "A file or folder has been <strong>changed</strong>" : "Fajl ili fascikla su <strong>izmenjeni</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ograniči obaveštenja o stvaranju i izmenama na <strong>omiljene fajlove</strong> <em>(samo u zapisniku)</em>", + "A file or folder has been <strong>deleted</strong>" : "Fajl ili fascikla su <strong>obrisani</strong>", + "A file or folder has been <strong>restored</strong>" : "Fajl ili fascikla su <strong>vraćeni</strong>", + "You created %1$s" : "Napravili ste %1$s", + "%2$s created %1$s" : "%2$s napravi %1$s", + "%1$s was created in a public folder" : "%1$s je napravljen u javnoj fascikli", "You changed %1$s" : "Izmenili ste %1$s", - "%2$s changed %1$s" : "%2$s je izmenio %1$s", + "%2$s changed %1$s" : "%2$s izmeni %1$s", "You deleted %1$s" : "Obrisali ste %1$s", - "%2$s deleted %1$s" : "%2$s je obrisao %1$s", - "You restored %1$s" : "Povratili ste %1$s", - "%2$s restored %1$s" : "%2$s je povratio %1$s", - "%s could not be renamed as it has been deleted" : "%s nije mogao biti preimenovan jer je obrisan.", - "%s could not be renamed" : "%s nije mogao biti preimenovan", - "Upload (max. %s)" : "Otpremanje (maksimalno %s)", - "File handling" : "Upravljanje fajlovima", - "Maximum upload size" : "Maksimalna veličina pošiljke", + "%2$s deleted %1$s" : "%2$s obrisa %1$s", + "You restored %1$s" : "Vratili ste %1$s", + "%2$s restored %1$s" : "%2$s povrati %1$s", + "%s could not be renamed as it has been deleted" : "%s se ne može preimenovati jer je obrisan", + "%s could not be renamed" : "%s se ne može preimenovati", + "Upload (max. %s)" : "Otpremanje (maks. %s)", + "File handling" : "Rukovanje fajlovima", + "Maximum upload size" : "Najveća veličina otpremanja", "max. possible: " : "najviše moguće:", - "Save" : "Snimi", - "Settings" : "Podešavanja", + "Save" : "Sačuvaj", + "Can not be edited from here due to insufficient permissions." : "Ne može da se menja odavde zbog nedostatka dozvola.", + "Settings" : "Postavke", "WebDAV" : "WebDAV", - "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Upotrebite ovu adresu da <a href=\"%s\" target=\"_blank\">pristupite svojim fajlovima putem WebDAV-a</a>", - "New" : "Novi", - "New text file" : "Novi tekstualni fajl", - "Text file" : "Tekstualni fajl", - "New folder" : "Novi direktorijum", - "Folder" : "Direktorijum", - "Upload" : "Pošalji", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Koristite ovu adresu da <a href=\"%s\" target=\"_blank\"> pristupite fajlovima preko WebDAV-a</a>", + "New" : "Novo", + "New text file" : "Nov tekstualni fajl", + "Text file" : "tekstualni fajl", + "New folder" : "Nova fascikla", + "Folder" : "fascikla", + "Upload" : "Otpremi", "Cancel upload" : "Otkaži otpremanje", - "Upload some content or sync with your devices!" : "Otpremite neki sadržaj ili sinhronizujte sa svojim uređajima!", - "No entries found in this folder" : "Nema pronađenih unosa u ovom direktorijumu", - "Select all" : "Odaberi sve", - "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.", - "Files are being scanned, please wait." : "Fajlovi se skeniraju, molimo sačekajte.", + "No files in here" : "Ovde nema fajlova", + "Upload some content or sync with your devices!" : "Otpremite neki sadržaj ili sinhronizujte sa vašim uređajima!", + "No entries found in this folder" : "Nema ničega u ovoj fascikli", + "Select all" : "Označi sve", + "Upload too large" : "Otpremanje je preveliko", + "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fajlovi koje želite da otpremite prevazilaze ograničenje otpremanja na ovom serveru.", + "Files are being scanned, please wait." : "Skeniram fajlove, sačekajte.", "Currently scanning" : "Trenutno skeniram", "No favorites" : "Nema omiljenih", - "Files and folders you mark as favorite will show up here" : "Fajlovi i direktorijumi koje ste obeležili kao omiljene će biti prikazani ovde" + "Files and folders you mark as favorite will show up here" : "Fajlovi i fascikle koje obeležite kao omiljene pojaviće se ovde" }, "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/sr@latin.json b/apps/files/l10n/sr@latin.json index be17fd7bed9..cb6882c5c5c 100644 --- a/apps/files/l10n/sr@latin.json +++ b/apps/files/l10n/sr@latin.json @@ -2,110 +2,111 @@ "Storage not available" : "Skladište nije dostupno", "Storage invalid" : "Neispravno skladište", "Unknown error" : "Nepoznata greška", - "Could not move %s - File with this name already exists" : "Nemoguće premeštanje %s - fajl sa ovim imenom već postoji", - "Could not move %s" : "Nemoguće premeštanje %s", + "Could not move %s - File with this name already exists" : "Ne mogu da premestim %s – fajl sa ovim nazivom već postoji", + "Could not move %s" : "Ne mogu da premestim %s", "Permission denied" : "Pristup odbijen", - "The target folder has been moved or deleted." : "Ciljani direktorijum je premešten ili izbrisan.", - "The name %s is already used in the folder %s. Please choose a different name." : "Ime %s je već u upotrebi u direktorijumu %s. Molimo izaberite drugo ime.", - "Error when creating the file" : "Greška pri kreiranju fajla", - "Error when creating the folder" : "Greška pri kreiranju direktorijuma", - "Unable to set upload directory." : "Nemoguće postaviti direktorijum za otpremanje.", - "Invalid Token" : "Neispravan simbol", - "No file was uploaded. Unknown error" : "Fajl nije otpremeljen. Nepoznata greška", - "There is no error, the file uploaded with success" : "Nema greške, fajl je uspešno poslat", - "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Otpremljeni fajl prevazilazi upload_max_filesize direktivu u php.ini:", - "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Poslati fajl prevazilazi direktivu MAX_FILE_SIZE koja je navedena u HTML formi", - "The uploaded file was only partially uploaded" : "Poslati fajl je samo delimično otpremljen!", - "No file was uploaded" : "Nijedan fajl nije poslat", + "The target folder has been moved or deleted." : "Odredišna fascikla je premeštena ili obrisana.", + "The name %s is already used in the folder %s. Please choose a different name." : "Naziv %s se već koristi u fascikli %s. Odredite drugi naziv.", + "Error when creating the file" : "Greška pri stvaranju fajla", + "Error when creating the folder" : "Greška pri stvaranju fajla", + "Unable to set upload directory." : "Ne mogu da postavim direktorijum za otpremanje.", + "Invalid Token" : "Neispravan token", + "No file was uploaded. Unknown error" : "Nijedan fajl nije otpremljen. Nepoznata greška", + "There is no error, the file uploaded with success" : "Nema greške, fajl je uspešno otpremljen", + "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Otpremani fajl prevazilazi smernicu upload_max_filesize u fajlu php.ini:", + "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Otpremani fajl prevazilazi smernicu MAX_FILE_SIZE koja je navedena u HTML obrascu", + "The uploaded file was only partially uploaded" : "Otpremani fajl je samo delimično otpremljen", + "No file was uploaded" : "Ništa nije otpremljeno", "Missing a temporary folder" : "Nedostaje privremena fascikla", - "Failed to write to disk" : "Neuspelo pisanje na disk", - "Not enough storage available" : "Nema dovoljno skladišnog prostora na raspolaganju", - "Upload failed. Could not find uploaded file" : "Otpremanje nije uspelo. Nije pronađen otpremljeni fajl", - "Upload failed. Could not get file info." : "Otpremanje nije uspelo. Nije moguće pronaći informacije o fajlu.", - "Invalid directory." : "Neispravan direktorijum", + "Failed to write to disk" : "Ne mogu da pišem na disk", + "Not enough storage available" : "Nema dovoljno prostora", + "Upload failed. Could not find uploaded file" : "Neuspešno otpremanje. Ne mogu da nađem otpremljeni fajl", + "Upload failed. Could not get file info." : "Neuspešno otpremanje. Ne mogu da dobijem podatke o fajlu.", + "Invalid directory." : "Neispravna fascikla.", "Files" : "Fajlovi", "All files" : "Svi fajlovi", "Favorites" : "Omiljeni", - "Home" : "Kuća", - "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nije moguće otpremiti {filename} zato što je u pitanju direktorijum ili ima 0 bajtova.", - "Total file size {size1} exceeds upload limit {size2}" : "Ukupna veličina fajla {size1} prevazilazi limit za otpremanje {size2}", - "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nema dovoljno slobodnog prostora, otpremate {size1} ali samo je {size2} preostalo", - "Upload cancelled." : "Otpremanje otkazano.", - "Could not get result from server." : "Nije bilo moguće dobiti rezultat sa servera.", - "File upload is in progress. Leaving the page now will cancel the upload." : "Otpremanje fajla je u toku. Ako sada napustite stranicu, prekinućete otpremanje.", + "Home" : "Početna", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "Ne mogu da otpremim {filename} jer je to direktorijum ili ima 0 bajtova", + "Total file size {size1} exceeds upload limit {size2}" : "Veličina {size1} prevazilazi ograničenje za otpremanje od {size2}", + "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nema prostora. Otpremate {size1} ali samo {size2} je preostalo", + "Upload cancelled." : "Otpremanje je otkazano.", + "Could not get result from server." : "Ne mogu da dobijem rezultat sa servera.", + "File upload is in progress. Leaving the page now will cancel the upload." : "Otpremanje fajla je u toku. Ako sada napustite stranicu, otkazaćete otpremanje.", "{new_name} already exists" : "{new_name} već postoji", - "Could not create file" : "Nije bilo moguće kreirati fajl", - "Could not create folder" : "Nije bilo moguće kreirati direktorijum", - "Rename" : "Preimenij", + "Could not create file" : "Ne mogu da stvorim fajl", + "Could not create folder" : "Ne mogu da stvorim fasciklu", + "Rename" : "Preimenuj", "Delete" : "Obriši", - "Disconnect storage" : "Nepovezano skladište", - "Unshare" : "Ukljoni deljenje", + "Disconnect storage" : "Isključi skladište", + "Unshare" : "Ne deli", "Download" : "Preuzmi", - "Select" : "Odaberi", - "Pending" : "U toku", - "Unable to determine date" : "Nemoguće ustanoviti datum", + "Select" : "Izaberi", + "Pending" : "Na čekanju", + "Unable to determine date" : "Ne mogu da odredim datum", "Error moving file." : "Greška pri premeštanju fajla.", "Error moving file" : "Greška pri premeštanju fajla", "Error" : "Greška", - "Could not rename file" : "Nemoguća promena imena fajla", + "Could not rename file" : "Ne mogu da preimenujem fajl", "Error deleting file." : "Greška pri brisanju fajla.", - "No entries in this folder match '{filter}'" : "Nijedan unos u ovom direktorijumu se ne poklapa sa '{filter}'", - "Name" : "Ime", + "No entries in this folder match '{filter}'" : "U ovoj fascikli ništa se ne poklapa sa '{filter}'", + "Name" : "Naziv", "Size" : "Veličina", - "Modified" : "Zadnja izmena", - "_%n folder_::_%n folders_" : ["%n direktorijum","%n direktorijuma","%n direktorijuma"], - "_%n file_::_%n files_" : ["%n fajl","%n fajlova","%n fajlova"], - "You don’t have permission to upload or create files here" : "Nemate dozvolu da otpremate ili kreirate fajlove ovde", - "_Uploading %n file_::_Uploading %n files_" : ["Otpremam %n fajl","Otpremam %n fajlova","Otpremam %n fajlova"], - "\"{name}\" is an invalid file name." : "\"{name}\" je neispravno ime fajla.", - "File name cannot be empty." : "Ime fajla ne može biti prazno.", - "Your storage is full, files can not be updated or synced anymore!" : "Vaše skladište je puno, fajlovi se ne mogu više otpremati ili sinhronizovati.", + "Modified" : "Izmenjen", + "_%n folder_::_%n folders_" : ["%n fascikla","%n fascikle","%n fascikli"], + "_%n file_::_%n files_" : ["%n fajl","%n fajla","%n fajlova"], + "You don’t have permission to upload or create files here" : "Nemate dozvole da ovde otpremate ili stvarate fajlove", + "_Uploading %n file_::_Uploading %n files_" : ["Otpremam %n fajl","Otpremam %n fajla","Otpremam %n fajlova"], + "\"{name}\" is an invalid file name." : "\"{name}\" nije ispravan naziv fajla.", + "File name cannot be empty." : "Naziv fajla ne može biti prazan.", + "Your storage is full, files can not be updated or synced anymore!" : "Vaše skladište je puno. Fajlovi više ne mogu biti ažurirani ni sinhronizovani!", "Your storage is almost full ({usedSpacePercent}%)" : "Vaše skladište je skoro puno ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija za šifrovanje je omogućena ali Vaši ključevi nisu inicijalizovani, molimo Vas da se izlogujete i ulogujete ponovo.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za Aplikaciju za šifrovanje. Molimo da osvežite vašu lozinku privatnog ključa u ličnim podešavanjima kako bi dobili pristup šifrovanim fajlovima.", - "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrovanje je isključeno, ali Vaši fajlovi su i dalje šifrovani. Molimo Vas da odete u lična podešavanja da dešifrujete svoje fajlove.", - "_matches '{filter}'_::_match '{filter}'_" : ["poklapa se sa '{filter}'","poklapaju se sa '{filter}'","poklapaju se sa '{filter}'"], + "_matches '{filter}'_::_match '{filter}'_" : ["se poklapa sa '{filter}'","se poklapaju sa '{filter}'","se poklapa sa '{filter}'"], "{dirs} and {files}" : "{dirs} i {files}", - "Favorited" : "Omiljeni", - "Favorite" : "Omiljen", - "A new file or folder has been <strong>created</strong>" : "Novi fajl ili direktorijum je <strong>kreiran</strong>", - "A file or folder has been <strong>changed</strong>" : "Faj ili direktorijum je <strong>promenjen</strong>", - "A file or folder has been <strong>deleted</strong>" : "Fajl ili direktorijum je <strong>uklonjen</strong>", - "A file or folder has been <strong>restored</strong>" : "Fajl ili direktorijum je <strong>povraćen</strong>", - "You created %1$s" : "Kreirali ste %1$s", - "%2$s created %1$s" : "%2$s je kreirao %1$s", - "%1$s was created in a public folder" : "%1$s je kreiran u javnom direktorijumu", + "Favorited" : "Omiljeno", + "Favorite" : "Omiljeni", + "An error occurred while trying to update the tags" : "Došlo je do greške pri pokušaju ažuriranja oznaka", + "A new file or folder has been <strong>created</strong>" : "Novi fajl ili fascikla su <strong>napravljeni</strong>", + "A file or folder has been <strong>changed</strong>" : "Fajl ili fascikla su <strong>izmenjeni</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ograniči obaveštenja o stvaranju i izmenama na <strong>omiljene fajlove</strong> <em>(samo u zapisniku)</em>", + "A file or folder has been <strong>deleted</strong>" : "Fajl ili fascikla su <strong>obrisani</strong>", + "A file or folder has been <strong>restored</strong>" : "Fajl ili fascikla su <strong>vraćeni</strong>", + "You created %1$s" : "Napravili ste %1$s", + "%2$s created %1$s" : "%2$s napravi %1$s", + "%1$s was created in a public folder" : "%1$s je napravljen u javnoj fascikli", "You changed %1$s" : "Izmenili ste %1$s", - "%2$s changed %1$s" : "%2$s je izmenio %1$s", + "%2$s changed %1$s" : "%2$s izmeni %1$s", "You deleted %1$s" : "Obrisali ste %1$s", - "%2$s deleted %1$s" : "%2$s je obrisao %1$s", - "You restored %1$s" : "Povratili ste %1$s", - "%2$s restored %1$s" : "%2$s je povratio %1$s", - "%s could not be renamed as it has been deleted" : "%s nije mogao biti preimenovan jer je obrisan.", - "%s could not be renamed" : "%s nije mogao biti preimenovan", - "Upload (max. %s)" : "Otpremanje (maksimalno %s)", - "File handling" : "Upravljanje fajlovima", - "Maximum upload size" : "Maksimalna veličina pošiljke", + "%2$s deleted %1$s" : "%2$s obrisa %1$s", + "You restored %1$s" : "Vratili ste %1$s", + "%2$s restored %1$s" : "%2$s povrati %1$s", + "%s could not be renamed as it has been deleted" : "%s se ne može preimenovati jer je obrisan", + "%s could not be renamed" : "%s se ne može preimenovati", + "Upload (max. %s)" : "Otpremanje (maks. %s)", + "File handling" : "Rukovanje fajlovima", + "Maximum upload size" : "Najveća veličina otpremanja", "max. possible: " : "najviše moguće:", - "Save" : "Snimi", - "Settings" : "Podešavanja", + "Save" : "Sačuvaj", + "Can not be edited from here due to insufficient permissions." : "Ne može da se menja odavde zbog nedostatka dozvola.", + "Settings" : "Postavke", "WebDAV" : "WebDAV", - "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Upotrebite ovu adresu da <a href=\"%s\" target=\"_blank\">pristupite svojim fajlovima putem WebDAV-a</a>", - "New" : "Novi", - "New text file" : "Novi tekstualni fajl", - "Text file" : "Tekstualni fajl", - "New folder" : "Novi direktorijum", - "Folder" : "Direktorijum", - "Upload" : "Pošalji", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Koristite ovu adresu da <a href=\"%s\" target=\"_blank\"> pristupite fajlovima preko WebDAV-a</a>", + "New" : "Novo", + "New text file" : "Nov tekstualni fajl", + "Text file" : "tekstualni fajl", + "New folder" : "Nova fascikla", + "Folder" : "fascikla", + "Upload" : "Otpremi", "Cancel upload" : "Otkaži otpremanje", - "Upload some content or sync with your devices!" : "Otpremite neki sadržaj ili sinhronizujte sa svojim uređajima!", - "No entries found in this folder" : "Nema pronađenih unosa u ovom direktorijumu", - "Select all" : "Odaberi sve", - "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.", - "Files are being scanned, please wait." : "Fajlovi se skeniraju, molimo sačekajte.", + "No files in here" : "Ovde nema fajlova", + "Upload some content or sync with your devices!" : "Otpremite neki sadržaj ili sinhronizujte sa vašim uređajima!", + "No entries found in this folder" : "Nema ničega u ovoj fascikli", + "Select all" : "Označi sve", + "Upload too large" : "Otpremanje je preveliko", + "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fajlovi koje želite da otpremite prevazilaze ograničenje otpremanja na ovom serveru.", + "Files are being scanned, please wait." : "Skeniram fajlove, sačekajte.", "Currently scanning" : "Trenutno skeniram", "No favorites" : "Nema omiljenih", - "Files and folders you mark as favorite will show up here" : "Fajlovi i direktorijumi koje ste obeležili kao omiljene će biti prikazani ovde" + "Files and folders you mark as favorite will show up here" : "Fajlovi i fascikle koje obeležite kao omiljene pojaviće se ovde" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js index 4bf977e1e77..9af440dcbce 100644 --- a/apps/files/l10n/sv.js +++ b/apps/files/l10n/sv.js @@ -62,9 +62,6 @@ OC.L10N.register( "File name cannot be empty." : "Filnamn kan inte vara tomt.", "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.", "{dirs} and {files}" : "{dirs} och {files}", "Favorited" : "Favoritiserad", "Favorite" : "Favorit", diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json index 95a1978a0a5..0da4cbe5f50 100644 --- a/apps/files/l10n/sv.json +++ b/apps/files/l10n/sv.json @@ -60,9 +60,6 @@ "File name cannot be empty." : "Filnamn kan inte vara tomt.", "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.", "{dirs} and {files}" : "{dirs} och {files}", "Favorited" : "Favoritiserad", "Favorite" : "Favorit", diff --git a/apps/files/l10n/th_TH.js b/apps/files/l10n/th_TH.js index e0c43462094..40af2bb490d 100644 --- a/apps/files/l10n/th_TH.js +++ b/apps/files/l10n/th_TH.js @@ -1,9 +1,18 @@ OC.L10N.register( "files", { + "Storage not available" : "ไม่สามารถใช้พื้นที่จัดเก็บข้อมูลได้", + "Storage invalid" : "การจัดเก็บข้อมูลไม่ถูกต้อง", "Unknown error" : "ข้อผิดพลาดที่ไม่ทราบสาเหตุ", "Could not move %s - File with this name already exists" : "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่แล้ว", "Could not move %s" : "ไม่สามารถย้าย %s ได้", + "Permission denied" : "ไม่อนุญาต", + "The target folder has been moved or deleted." : "โฟลเดอร์ปลายทางถูกย้ายหรือลบ", + "The name %s is already used in the folder %s. Please choose a different name." : "ชื่อ %s ถูกใช้ไปแล้วในโฟลเดอร์ %s โปรดเลือกชื่ออื่นที่แตกต่างกัน", + "Error when creating the file" : "เกิดข้อผิดพลาดเมื่อมีการสร้างไฟล์", + "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", @@ -13,41 +22,98 @@ OC.L10N.register( "Missing a temporary folder" : "โฟลเดอร์ชั่วคราวเกิดการสูญหาย", "Failed to write to disk" : "เขียนข้อมูลลงแผ่นดิสก์ล้มเหลว", "Not enough storage available" : "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน", + "Upload failed. Could not find uploaded file" : "อัปโหลดล้มเหลว ไม่สามารถหาไฟล์ที่จะอัพโหลด", + "Upload failed. Could not get file info." : "อัพโหลดล้มเหลว ไม่สามารถรับข้อมูลไฟล์", "Invalid directory." : "ไดเร็กทอรี่ไม่ถูกต้อง", "Files" : "ไฟล์", + "All files" : "ไฟล์ทั้งหมด", "Favorites" : "รายการโปรด", "Home" : "บ้าน", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "ไม่สามารถอัพโหลด {filename} มันเป็นไดเรกทอรีหรือมี 0 ไบต์", + "Total file size {size1} exceeds upload limit {size2}" : "ขนาดไฟล์ {size1} ทั้งหมดเกินขีดจำกัด ของการอัพโหลด {size2}", + "Not enough free space, you are uploading {size1} but only {size2} is left" : "พื้นที่ว่างไม่เพียงพอคุณจะอัพโหลด {size1} แต่มีพืนที่แค่ {size2}", "Upload cancelled." : "การอัพโหลดถูกยกเลิก", + "Could not get result from server." : "ไม่สามารถรับผลลัพธ์จากเซิร์ฟเวอร์", "File upload is in progress. Leaving the page now will cancel the upload." : "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก", "{new_name} already exists" : "{new_name} มีอยู่แล้วในระบบ", + "Could not create file" : "ไม่สามารถสร้างไฟล์", + "Could not create folder" : "ไม่สามารถสร้างโฟลเดอร์", "Rename" : "เปลี่ยนชื่อ", "Delete" : "ลบ", + "Disconnect storage" : "ยกเลิกการเชื่อมต่อการจัดเก็บข้อมูล", "Unshare" : "ยกเลิกการแชร์", + "No permission to delete" : "ไม่อนุญาตให้ลบ", "Download" : "ดาวน์โหลด", "Select" : "เลือก", "Pending" : "อยู่ระหว่างดำเนินการ", + "Unable to determine date" : "ไม่สามารถกำหนดวัน", + "This operation is forbidden" : "การดำเนินการนี้ถูกห้าม", + "This directory is unavailable, please check the logs or contact the administrator" : "ไม่สามารถใช้งานไดเรกทอรีนี้โปรดตรวจสอบบันทึกหรือติดต่อผู้ดูแลระบบ", + "Error moving file." : "ข้อผิดพลาดในการเคลื่อนย้ายไฟล์", + "Error moving file" : "ข้อผิดพลาดในการเคลื่อนย้ายไฟล์", "Error" : "ข้อผิดพลาด", + "Could not rename file" : "ไม่สามารถเปลี่ยนชื่อไฟล์", + "Error deleting file." : "เกิดข้อผิดพลาดในการลบไฟล์", + "No entries in this folder match '{filter}'" : "ไม่มีรายการในโฟลเดอร์นี้ที่ตรงกับ '{filter}'", "Name" : "ชื่อ", "Size" : "ขนาด", "Modified" : "แก้ไขแล้ว", + "_%n folder_::_%n folders_" : ["%n โฟลเดอร์"], + "_%n file_::_%n files_" : ["%n ไฟล์"], + "You don’t have permission to upload or create files here" : "คุณไม่ได้รับอนุญาตให้อัพโหลดหรือสร้างไฟล์ที่นี่", + "_Uploading %n file_::_Uploading %n files_" : ["อัพโหลด %n ไฟล์"], + "\"{name}\" is an invalid file name." : "\"{name}\" เป็นชื่อไฟล์ที่ไม่ถูกต้อง", "File name cannot be empty." : "ชื่อไฟล์ไม่สามารถเว้นว่างได้", - "Your storage is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานไฟล์ต่างๆได้อีกต่อไป", - "Your storage is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว ({usedSpacePercent}%)", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของ {owner} เต็มแล้ว ไฟล์ไม่สามารถอัพเดทหรือผสานข้อมูลได้อีก!", + "Your storage is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานข้อมูลได้อีก!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของ {owner} ใกล้เต็มแล้ว\nใช้พื้นที่ไปแล้ว: ({usedSpacePercent}%)", + "Your storage is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว \nใช้พื้นที่ไปแล้ว: ({usedSpacePercent}%)", + "_matches '{filter}'_::_match '{filter}'_" : ["ตรงกับ '{filter}'"], + "{dirs} and {files}" : "{dirs} และ {files}", + "Favorited" : "รายการโปรด", "Favorite" : "รายการโปรด", - "File handling" : "การจัดกาไฟล์", + "An error occurred while trying to update the tags" : "เกิดข้อผิดพลาดขณะที่พยายามจะปรับปรุงแท็ก", + "A new file or folder has been <strong>created</strong>" : "มีไฟล์ใหม่หรือโฟลเดอร์ได้ถูก <strong>สร้างขึ้น!</strong>", + "A file or folder has been <strong>changed</strong>" : "มีไฟล์หรือโฟลเดอร์ได้ถูก <strong>เปลี่ยน!</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "จำกัดการแจ้งเตือนเกี่ยวกับการสร้างและการเปลี่ยนแปลงของคุณ <strong>ไฟล์ที่ชื่นชอบ</strong> <em>(สตรีมเท่านั้น)</em>", + "A file or folder has been <strong>deleted</strong>" : "ไฟล์หรือโฟลเดอร์ถูก <strong>ลบ</strong>", + "A file or folder has been <strong>restored</strong>" : "ไฟล์หรือโฟลเดอร์ถูก <strong>กู้คืน</strong>", + "You created %1$s" : "คุณสร้าง %1$s", + "%2$s created %1$s" : "%2$s สร้าง %1$s", + "%1$s was created in a public folder" : "%1$s ถูกสร้างขึ้นในโฟลเดอร์สาธารณะ", + "You changed %1$s" : "คุณทำการเปลี่ยนแปลง %1$s", + "%2$s changed %1$s" : "%2$s ได้เปลี่ยนแปลง %1$s", + "You deleted %1$s" : "คุณลบ %1$s ออก", + "%2$s deleted %1$s" : "%2$s ลบ %1$s ออก", + "You restored %1$s" : "คุณกู้คืน %1$s", + "%2$s restored %1$s" : "%2$s ได้กู้คืน %1$s", + "%s could not be renamed as it has been deleted" : "%s ไม่สามารถเปลี่ยนชื่อเนื่องจากถูกลบไปแล้ว", + "%s could not be renamed" : "%s ไม่สามารถเปลี่ยนชื่อ", + "Upload (max. %s)" : "อัพโหลด (สูงสุด %s)", + "File handling" : "การจัดการไฟล์", "Maximum upload size" : "ขนาดไฟล์สูงสุดที่อัพโหลดได้", "max. possible: " : "จำนวนสูงสุดที่สามารถทำได้: ", "Save" : "บันทึก", + "Can not be edited from here due to insufficient permissions." : "ไม่สามารถแก้ไขได้จากที่นี่เนื่องจากสิทธิ์ไม่เพียงพอ", "Settings" : "ตั้งค่า", "WebDAV" : "WebDAV", - "New" : "อัพโหลดไฟล์ใหม่", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "ใช้ที่อยู่นี้เพื่อ <a href=\"%s\" target=\"_blank\">เข้าถึงไฟล์ของคุณผ่าน WebDAV</a>", + "New" : "ใหม่", + "New text file" : "ไฟล์ข้อความใหม่", "Text file" : "ไฟล์ข้อความ", "New folder" : "โฟลเดอร์ใหม่", "Folder" : "แฟ้มเอกสาร", "Upload" : "อัพโหลด", "Cancel upload" : "ยกเลิกการอัพโหลด", + "No files in here" : "ไม่มีไฟล์ที่นี่", + "Upload some content or sync with your devices!" : "อัพโหลดเนื้อหาบางส่วนหรือผสานข้อมูลกับอุปกรณ์ของคุณ! อีกครั้ง", + "No entries found in this folder" : "ไม่พบรายการในโฟลเดอร์นี้", + "Select all" : "เลือกทั้งหมด", "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." : "ไฟล์กำลังอยู่ระหว่างการสแกน, กรุณารอสักครู่." + "Files are being scanned, please wait." : "ไฟล์กำลังอยู่ระหว่างการสแกน, กรุณารอสักครู่.", + "Currently scanning" : "ปัจจุบันกำลังสแกน", + "No favorites" : "ไม่มีรายการโปรด", + "Files and folders you mark as favorite will show up here" : "ไฟล์และโฟลเดอร์ที่คุณทำเครื่องหมายเป็นรายการโปรดจะปรากฏขึ้นที่นี่" }, "nplurals=1; plural=0;"); diff --git a/apps/files/l10n/th_TH.json b/apps/files/l10n/th_TH.json index 03d43e9b516..a6febf6fadf 100644 --- a/apps/files/l10n/th_TH.json +++ b/apps/files/l10n/th_TH.json @@ -1,7 +1,16 @@ { "translations": { + "Storage not available" : "ไม่สามารถใช้พื้นที่จัดเก็บข้อมูลได้", + "Storage invalid" : "การจัดเก็บข้อมูลไม่ถูกต้อง", "Unknown error" : "ข้อผิดพลาดที่ไม่ทราบสาเหตุ", "Could not move %s - File with this name already exists" : "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่แล้ว", "Could not move %s" : "ไม่สามารถย้าย %s ได้", + "Permission denied" : "ไม่อนุญาต", + "The target folder has been moved or deleted." : "โฟลเดอร์ปลายทางถูกย้ายหรือลบ", + "The name %s is already used in the folder %s. Please choose a different name." : "ชื่อ %s ถูกใช้ไปแล้วในโฟลเดอร์ %s โปรดเลือกชื่ออื่นที่แตกต่างกัน", + "Error when creating the file" : "เกิดข้อผิดพลาดเมื่อมีการสร้างไฟล์", + "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", @@ -11,41 +20,98 @@ "Missing a temporary folder" : "โฟลเดอร์ชั่วคราวเกิดการสูญหาย", "Failed to write to disk" : "เขียนข้อมูลลงแผ่นดิสก์ล้มเหลว", "Not enough storage available" : "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน", + "Upload failed. Could not find uploaded file" : "อัปโหลดล้มเหลว ไม่สามารถหาไฟล์ที่จะอัพโหลด", + "Upload failed. Could not get file info." : "อัพโหลดล้มเหลว ไม่สามารถรับข้อมูลไฟล์", "Invalid directory." : "ไดเร็กทอรี่ไม่ถูกต้อง", "Files" : "ไฟล์", + "All files" : "ไฟล์ทั้งหมด", "Favorites" : "รายการโปรด", "Home" : "บ้าน", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "ไม่สามารถอัพโหลด {filename} มันเป็นไดเรกทอรีหรือมี 0 ไบต์", + "Total file size {size1} exceeds upload limit {size2}" : "ขนาดไฟล์ {size1} ทั้งหมดเกินขีดจำกัด ของการอัพโหลด {size2}", + "Not enough free space, you are uploading {size1} but only {size2} is left" : "พื้นที่ว่างไม่เพียงพอคุณจะอัพโหลด {size1} แต่มีพืนที่แค่ {size2}", "Upload cancelled." : "การอัพโหลดถูกยกเลิก", + "Could not get result from server." : "ไม่สามารถรับผลลัพธ์จากเซิร์ฟเวอร์", "File upload is in progress. Leaving the page now will cancel the upload." : "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก", "{new_name} already exists" : "{new_name} มีอยู่แล้วในระบบ", + "Could not create file" : "ไม่สามารถสร้างไฟล์", + "Could not create folder" : "ไม่สามารถสร้างโฟลเดอร์", "Rename" : "เปลี่ยนชื่อ", "Delete" : "ลบ", + "Disconnect storage" : "ยกเลิกการเชื่อมต่อการจัดเก็บข้อมูล", "Unshare" : "ยกเลิกการแชร์", + "No permission to delete" : "ไม่อนุญาตให้ลบ", "Download" : "ดาวน์โหลด", "Select" : "เลือก", "Pending" : "อยู่ระหว่างดำเนินการ", + "Unable to determine date" : "ไม่สามารถกำหนดวัน", + "This operation is forbidden" : "การดำเนินการนี้ถูกห้าม", + "This directory is unavailable, please check the logs or contact the administrator" : "ไม่สามารถใช้งานไดเรกทอรีนี้โปรดตรวจสอบบันทึกหรือติดต่อผู้ดูแลระบบ", + "Error moving file." : "ข้อผิดพลาดในการเคลื่อนย้ายไฟล์", + "Error moving file" : "ข้อผิดพลาดในการเคลื่อนย้ายไฟล์", "Error" : "ข้อผิดพลาด", + "Could not rename file" : "ไม่สามารถเปลี่ยนชื่อไฟล์", + "Error deleting file." : "เกิดข้อผิดพลาดในการลบไฟล์", + "No entries in this folder match '{filter}'" : "ไม่มีรายการในโฟลเดอร์นี้ที่ตรงกับ '{filter}'", "Name" : "ชื่อ", "Size" : "ขนาด", "Modified" : "แก้ไขแล้ว", + "_%n folder_::_%n folders_" : ["%n โฟลเดอร์"], + "_%n file_::_%n files_" : ["%n ไฟล์"], + "You don’t have permission to upload or create files here" : "คุณไม่ได้รับอนุญาตให้อัพโหลดหรือสร้างไฟล์ที่นี่", + "_Uploading %n file_::_Uploading %n files_" : ["อัพโหลด %n ไฟล์"], + "\"{name}\" is an invalid file name." : "\"{name}\" เป็นชื่อไฟล์ที่ไม่ถูกต้อง", "File name cannot be empty." : "ชื่อไฟล์ไม่สามารถเว้นว่างได้", - "Your storage is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานไฟล์ต่างๆได้อีกต่อไป", - "Your storage is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว ({usedSpacePercent}%)", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของ {owner} เต็มแล้ว ไฟล์ไม่สามารถอัพเดทหรือผสานข้อมูลได้อีก!", + "Your storage is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานข้อมูลได้อีก!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของ {owner} ใกล้เต็มแล้ว\nใช้พื้นที่ไปแล้ว: ({usedSpacePercent}%)", + "Your storage is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว \nใช้พื้นที่ไปแล้ว: ({usedSpacePercent}%)", + "_matches '{filter}'_::_match '{filter}'_" : ["ตรงกับ '{filter}'"], + "{dirs} and {files}" : "{dirs} และ {files}", + "Favorited" : "รายการโปรด", "Favorite" : "รายการโปรด", - "File handling" : "การจัดกาไฟล์", + "An error occurred while trying to update the tags" : "เกิดข้อผิดพลาดขณะที่พยายามจะปรับปรุงแท็ก", + "A new file or folder has been <strong>created</strong>" : "มีไฟล์ใหม่หรือโฟลเดอร์ได้ถูก <strong>สร้างขึ้น!</strong>", + "A file or folder has been <strong>changed</strong>" : "มีไฟล์หรือโฟลเดอร์ได้ถูก <strong>เปลี่ยน!</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "จำกัดการแจ้งเตือนเกี่ยวกับการสร้างและการเปลี่ยนแปลงของคุณ <strong>ไฟล์ที่ชื่นชอบ</strong> <em>(สตรีมเท่านั้น)</em>", + "A file or folder has been <strong>deleted</strong>" : "ไฟล์หรือโฟลเดอร์ถูก <strong>ลบ</strong>", + "A file or folder has been <strong>restored</strong>" : "ไฟล์หรือโฟลเดอร์ถูก <strong>กู้คืน</strong>", + "You created %1$s" : "คุณสร้าง %1$s", + "%2$s created %1$s" : "%2$s สร้าง %1$s", + "%1$s was created in a public folder" : "%1$s ถูกสร้างขึ้นในโฟลเดอร์สาธารณะ", + "You changed %1$s" : "คุณทำการเปลี่ยนแปลง %1$s", + "%2$s changed %1$s" : "%2$s ได้เปลี่ยนแปลง %1$s", + "You deleted %1$s" : "คุณลบ %1$s ออก", + "%2$s deleted %1$s" : "%2$s ลบ %1$s ออก", + "You restored %1$s" : "คุณกู้คืน %1$s", + "%2$s restored %1$s" : "%2$s ได้กู้คืน %1$s", + "%s could not be renamed as it has been deleted" : "%s ไม่สามารถเปลี่ยนชื่อเนื่องจากถูกลบไปแล้ว", + "%s could not be renamed" : "%s ไม่สามารถเปลี่ยนชื่อ", + "Upload (max. %s)" : "อัพโหลด (สูงสุด %s)", + "File handling" : "การจัดการไฟล์", "Maximum upload size" : "ขนาดไฟล์สูงสุดที่อัพโหลดได้", "max. possible: " : "จำนวนสูงสุดที่สามารถทำได้: ", "Save" : "บันทึก", + "Can not be edited from here due to insufficient permissions." : "ไม่สามารถแก้ไขได้จากที่นี่เนื่องจากสิทธิ์ไม่เพียงพอ", "Settings" : "ตั้งค่า", "WebDAV" : "WebDAV", - "New" : "อัพโหลดไฟล์ใหม่", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "ใช้ที่อยู่นี้เพื่อ <a href=\"%s\" target=\"_blank\">เข้าถึงไฟล์ของคุณผ่าน WebDAV</a>", + "New" : "ใหม่", + "New text file" : "ไฟล์ข้อความใหม่", "Text file" : "ไฟล์ข้อความ", "New folder" : "โฟลเดอร์ใหม่", "Folder" : "แฟ้มเอกสาร", "Upload" : "อัพโหลด", "Cancel upload" : "ยกเลิกการอัพโหลด", + "No files in here" : "ไม่มีไฟล์ที่นี่", + "Upload some content or sync with your devices!" : "อัพโหลดเนื้อหาบางส่วนหรือผสานข้อมูลกับอุปกรณ์ของคุณ! อีกครั้ง", + "No entries found in this folder" : "ไม่พบรายการในโฟลเดอร์นี้", + "Select all" : "เลือกทั้งหมด", "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." : "ไฟล์กำลังอยู่ระหว่างการสแกน, กรุณารอสักครู่." + "Files are being scanned, please wait." : "ไฟล์กำลังอยู่ระหว่างการสแกน, กรุณารอสักครู่.", + "Currently scanning" : "ปัจจุบันกำลังสแกน", + "No favorites" : "ไม่มีรายการโปรด", + "Files and folders you mark as favorite will show up here" : "ไฟล์และโฟลเดอร์ที่คุณทำเครื่องหมายเป็นรายการโปรดจะปรากฏขึ้นที่นี่" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js index add6d671a84..dbc91ba15dc 100644 --- a/apps/files/l10n/tr.js +++ b/apps/files/l10n/tr.js @@ -42,10 +42,13 @@ OC.L10N.register( "Delete" : "Sil", "Disconnect storage" : "Depolama bağlantısını kes", "Unshare" : "Paylaşmayı Kaldır", + "No permission to delete" : "Silmeye izin yok", "Download" : "İndir", "Select" : "Seç", "Pending" : "Bekliyor", "Unable to determine date" : "Tarih tespit edilemedi", + "This operation is forbidden" : "Bu işlem yasak", + "This directory is unavailable, please check the logs or contact the administrator" : "Bu dizine yazılamıyor, lütfen günlüğü kontrol edin veya yönetici ile iletişime geçin", "Error moving file." : "Dosya taşıma hatası.", "Error moving file" : "Dosya taşıma hatası", "Error" : "Hata", @@ -55,17 +58,16 @@ OC.L10N.register( "Name" : "İsim", "Size" : "Boyut", "Modified" : "Değiştirilme", - "_%n folder_::_%n folders_" : ["%n dizin","%n dizin"], + "_%n folder_::_%n folders_" : ["%n klasör","%n klasör"], "_%n file_::_%n files_" : ["%n dosya","%n dosya"], "You don’t have permission to upload or create files here" : "Buraya dosya yükleme veya oluşturma izniniz yok", "_Uploading %n file_::_Uploading %n files_" : ["%n dosya yükleniyor","%n dosya yükleniyor"], "\"{name}\" is an invalid file name." : "\"{name}\" geçersiz bir dosya adı.", "File name cannot be empty." : "Dosya adı boş olamaz.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} depolama alanı dolu, artık dosyalar güncellenmeyecek yada eşitlenmeyecek.", "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.", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : " {owner} depolama alanı neredeyse dolu ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Depolama alanınız neredeyse dolu (%{usedSpacePercent})", - "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 hala şifreli. Dosyalarınızın şifrelemesini kaldırmak için lütfen kişisel ayarlar kısmına geçin.", "_matches '{filter}'_::_match '{filter}'_" : ["'{filter}' ile eşleşiyor","'{filter}' ile eşleşiyor"], "{dirs} and {files}" : "{dirs} ve {files}", "Favorited" : "Sık kullanılanlara eklendi", @@ -73,6 +75,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Etiketler güncellenmeye çalışılırken bir hata oluştu", "A new file or folder has been <strong>created</strong>" : "Yeni bir dosya veya klasör <strong>oluşturuldu</strong>", "A file or folder has been <strong>changed</strong>" : "Bir dosya veya klasör <strong>değiştirildi</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>Sık kullanılan dosyalarınızın</strong> oluşturulma ve değiştirilme hakkındaki bildirimlerini sınırla <em>(Sadece akışta)</em>", "A file or folder has been <strong>deleted</strong>" : "Bir dosya veya klasör <strong>silindi</strong>", "A file or folder has been <strong>restored</strong>" : "Bir dosya veya klasör <strong>geri alındı</strong>", "You created %1$s" : "%1$s dosyasını oluşturdunuz", diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json index 9f16990140f..eb967e2e3ec 100644 --- a/apps/files/l10n/tr.json +++ b/apps/files/l10n/tr.json @@ -40,10 +40,13 @@ "Delete" : "Sil", "Disconnect storage" : "Depolama bağlantısını kes", "Unshare" : "Paylaşmayı Kaldır", + "No permission to delete" : "Silmeye izin yok", "Download" : "İndir", "Select" : "Seç", "Pending" : "Bekliyor", "Unable to determine date" : "Tarih tespit edilemedi", + "This operation is forbidden" : "Bu işlem yasak", + "This directory is unavailable, please check the logs or contact the administrator" : "Bu dizine yazılamıyor, lütfen günlüğü kontrol edin veya yönetici ile iletişime geçin", "Error moving file." : "Dosya taşıma hatası.", "Error moving file" : "Dosya taşıma hatası", "Error" : "Hata", @@ -53,17 +56,16 @@ "Name" : "İsim", "Size" : "Boyut", "Modified" : "Değiştirilme", - "_%n folder_::_%n folders_" : ["%n dizin","%n dizin"], + "_%n folder_::_%n folders_" : ["%n klasör","%n klasör"], "_%n file_::_%n files_" : ["%n dosya","%n dosya"], "You don’t have permission to upload or create files here" : "Buraya dosya yükleme veya oluşturma izniniz yok", "_Uploading %n file_::_Uploading %n files_" : ["%n dosya yükleniyor","%n dosya yükleniyor"], "\"{name}\" is an invalid file name." : "\"{name}\" geçersiz bir dosya adı.", "File name cannot be empty." : "Dosya adı boş olamaz.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} depolama alanı dolu, artık dosyalar güncellenmeyecek yada eşitlenmeyecek.", "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.", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : " {owner} depolama alanı neredeyse dolu ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Depolama alanınız neredeyse dolu (%{usedSpacePercent})", - "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 hala şifreli. Dosyalarınızın şifrelemesini kaldırmak için lütfen kişisel ayarlar kısmına geçin.", "_matches '{filter}'_::_match '{filter}'_" : ["'{filter}' ile eşleşiyor","'{filter}' ile eşleşiyor"], "{dirs} and {files}" : "{dirs} ve {files}", "Favorited" : "Sık kullanılanlara eklendi", @@ -71,6 +73,7 @@ "An error occurred while trying to update the tags" : "Etiketler güncellenmeye çalışılırken bir hata oluştu", "A new file or folder has been <strong>created</strong>" : "Yeni bir dosya veya klasör <strong>oluşturuldu</strong>", "A file or folder has been <strong>changed</strong>" : "Bir dosya veya klasör <strong>değiştirildi</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>Sık kullanılan dosyalarınızın</strong> oluşturulma ve değiştirilme hakkındaki bildirimlerini sınırla <em>(Sadece akışta)</em>", "A file or folder has been <strong>deleted</strong>" : "Bir dosya veya klasör <strong>silindi</strong>", "A file or folder has been <strong>restored</strong>" : "Bir dosya veya klasör <strong>geri alındı</strong>", "You created %1$s" : "%1$s dosyasını oluşturdunuz", diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js index a72e4ce3972..167897b57e5 100644 --- a/apps/files/l10n/uk.js +++ b/apps/files/l10n/uk.js @@ -11,41 +11,43 @@ OC.L10N.register( "The name %s is already used in the folder %s. Please choose a different name." : "Файл з ім'ям %s вже є у теці %s. Оберіть інше ім'я.", "Error when creating the file" : "Помилка створення файлу", "Error when creating the folder" : "Помилка створення теки", - "Unable to set upload directory." : "Не вдалося встановити каталог завантаження.", + "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: ", - "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Розмір відвантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі", - "The uploaded file was only partially uploaded" : "Файл завантажений лише частково", - "No file was uploaded" : "Не завантажено жодного файлу", + "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: ", + "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Розмір вивантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі", + "The uploaded file was only partially uploaded" : "Файл вивантажений лише частково", + "No file was uploaded" : "Не вивантажено жодного файлу", "Missing a temporary folder" : "Відсутній тимчасовий каталог", "Failed to write to disk" : "Помилка запису на диск", "Not enough storage available" : "Місця більше немає", - "Upload failed. Could not find uploaded file" : "Завантаження не вдалося. Неможливо знайти завантажений файл.", - "Upload failed. Could not get file info." : "Завантаження не вдалося. Неможливо отримати інформацію про файл.", + "Upload failed. Could not find uploaded file" : "Вивантаження не вдалося. Неможливо знайти вивантажений файл.", + "Upload failed. Could not get file info." : "Вивантаження не вдалося. Неможливо отримати інформацію про файл.", "Invalid directory." : "Невірний каталог.", "Files" : "Файли", "All files" : "Усі файли", "Favorites" : "Улюблені", "Home" : "Домашня адреса", - "Unable to upload {filename} as it is a directory or has 0 bytes" : "Неможливо завантажити {filename}, оскільки це каталог або має нульовий розмір.", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "Неможливо вивантажити {filename}, оскільки це каталог або файл має розмір 0 байт.", "Total file size {size1} exceeds upload limit {size2}" : "Розмір файлу {size1} перевищує обмеження {size2}", - "Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостатньо вільного місця, ви завантажуєте {size1}, а залишилося лише {size2}", - "Upload cancelled." : "Завантаження перервано.", + "Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостатньо вільного місця, ви вивантажуєте {size1}, а залишилося лише {size2}", + "Upload cancelled." : "Вивантаження скасовано.", "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." : "Виконується вивантаження файлу. Закриття цієї сторінки приведе до скасування вивантаження.", "{new_name} already exists" : "{new_name} вже існує", "Could not create file" : "Не вдалося створити файл", "Could not create folder" : "Не вдалося створити теку", "Rename" : "Перейменувати", "Delete" : "Видалити", "Disconnect storage" : "Від’єднати сховище", - "Unshare" : "Закрити доступ", + "Unshare" : "Закрити спільний доступ", + "No permission to delete" : "Недостатньо прав для видалення", "Download" : "Завантажити", "Select" : "Оберіть", "Pending" : "Очікування", "Unable to determine date" : "Неможливо визначити дату", + "This operation is forbidden" : "Ця операція заборонена", "Error moving file." : "Помилка переміщення файлу.", "Error moving file" : "Помилка переміщення файлу", "Error" : "Помилка", @@ -57,15 +59,12 @@ OC.L10N.register( "Modified" : "Змінено", "_%n folder_::_%n folders_" : ["%n тека ","теки : %n ","теки : %n "], "_%n file_::_%n files_" : ["%n файл ","файли : %n ","файли : %n "], - "You don’t have permission to upload or create files here" : "У вас недостатньо прав для завантаження або створення файлів тут", - "_Uploading %n file_::_Uploading %n files_" : ["Завантаження %n файлу","Завантаження %n файлів","Завантаження %n файлів"], + "You don’t have permission to upload or create files here" : "У вас недостатньо прав для вивантаження або створення тут файлів", + "_Uploading %n file_::_Uploading %n files_" : ["Вивантаження %n файлу","Вивантаження %n файлів","Вивантаження %n файлів"], "\"{name}\" is an invalid file name." : "\"{name}\" - некоректне ім'я файлу.", "File name cannot be empty." : " Ім'я файлу не може бути порожнім.", "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." : "Шифрування було вимкнено, але ваші файли все ще зашифровано. Для розшифрування перейдіть до персональних налаштувань.", "_matches '{filter}'_::_match '{filter}'_" : ["знайдено '{filter}'","знайдено '{filter}'","знайдено '{filter}'"], "{dirs} and {files}" : "{dirs} і {files}", "Favorited" : "Улюблений", @@ -73,6 +72,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Виникла помилка при спробі оновити мітки", "A new file or folder has been <strong>created</strong>" : "Новий файл або теку було <strong>створено</strong>", "A file or folder has been <strong>changed</strong>" : "Файл або теку було <strong> змінено </strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Обмежити повідомлення про створення та зміни в ваших <strong>улюблених файлах</strong>\n<em>(Тількі потік)</em>", "A file or folder has been <strong>deleted</strong>" : "Файл або теку було <strong> видалено </strong>", "A file or folder has been <strong>restored</strong>" : "Файл або теку було <strong> відновлено </strong>", "You created %1$s" : "Вами створено %1$s", @@ -80,15 +80,15 @@ OC.L10N.register( "%1$s was created in a public folder" : "%1$s створено у публічній теці", "You changed %1$s" : "Вами змінено %1$s", "%2$s changed %1$s" : "%2$s змінено %1$s", - "You deleted %1$s" : "Вами видалене %1$s", - "%2$s deleted %1$s" : "%2$s видалене %1$s", + "You deleted %1$s" : "Вами видалено %1$s", + "%2$s deleted %1$s" : "%2$s видалено %1$s", "You restored %1$s" : "Вами відновлено %1$s", "%2$s restored %1$s" : "%2$s відновлено %1$s", - "%s could not be renamed as it has been deleted" : "%s не може бути перейменований, оскільки він видалений", - "%s could not be renamed" : "%s не може бути перейменований", - "Upload (max. %s)" : "Завантаження (макс. %s)", + "%s could not be renamed as it has been deleted" : "%s не можна перейменувати, оскільки його видалено", + "%s could not be renamed" : "%s не можна перейменувати", + "Upload (max. %s)" : "Вивантаження (макс. %s)", "File handling" : "Робота з файлами", - "Maximum upload size" : "Максимальний розмір відвантажень", + "Maximum upload size" : "Максимальний розмір вивантажень", "max. possible: " : "макс. можливе:", "Save" : "Зберегти", "Can not be edited from here due to insufficient permissions." : "Неможливо відредагувати тут через брак повноважень.", @@ -101,15 +101,16 @@ OC.L10N.register( "New folder" : "Нова тека", "Folder" : "Тека", "Upload" : "Вивантажити", - "Cancel upload" : "Перервати завантаження", - "Upload some content or sync with your devices!" : "Завантажте вміст або синхронізуйте з пристроями!", - "No entries found in this folder" : "Записів не знайдено в цій папці", + "Cancel upload" : "Скасувати вивантаження", + "No files in here" : "Тут немає файлів", + "Upload some content or sync with your devices!" : "Вивантажте щось або синхронізуйте з пристроями!", + "No entries found in this folder" : "В цій теці нічого немає", "Select all" : "Вибрати всі", "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." : "Файли скануються, зачекайте, будь-ласка.", + "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файли,що ви намагаєтесь вивантажити перевищують максимальний дозволений розмір файлів на цьому сервері.", + "Files are being scanned, please wait." : "Файли перевіряються, зачекайте, будь-ласка.", "Currently scanning" : "Триває перевірка", - "No favorites" : "Немає обраних", - "Files and folders you mark as favorite will show up here" : "Файли і папки, які ви помітили як улюблені з’являться тут" + "No favorites" : "Немає улюблених", + "Files and folders you mark as favorite will show up here" : "Файли і теки, які ви позначили як улюблені, з’являться тут" }, "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/uk.json b/apps/files/l10n/uk.json index e104cbbd721..803d9887627 100644 --- a/apps/files/l10n/uk.json +++ b/apps/files/l10n/uk.json @@ -9,41 +9,43 @@ "The name %s is already used in the folder %s. Please choose a different name." : "Файл з ім'ям %s вже є у теці %s. Оберіть інше ім'я.", "Error when creating the file" : "Помилка створення файлу", "Error when creating the folder" : "Помилка створення теки", - "Unable to set upload directory." : "Не вдалося встановити каталог завантаження.", + "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: ", - "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Розмір відвантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі", - "The uploaded file was only partially uploaded" : "Файл завантажений лише частково", - "No file was uploaded" : "Не завантажено жодного файлу", + "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: ", + "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Розмір вивантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі", + "The uploaded file was only partially uploaded" : "Файл вивантажений лише частково", + "No file was uploaded" : "Не вивантажено жодного файлу", "Missing a temporary folder" : "Відсутній тимчасовий каталог", "Failed to write to disk" : "Помилка запису на диск", "Not enough storage available" : "Місця більше немає", - "Upload failed. Could not find uploaded file" : "Завантаження не вдалося. Неможливо знайти завантажений файл.", - "Upload failed. Could not get file info." : "Завантаження не вдалося. Неможливо отримати інформацію про файл.", + "Upload failed. Could not find uploaded file" : "Вивантаження не вдалося. Неможливо знайти вивантажений файл.", + "Upload failed. Could not get file info." : "Вивантаження не вдалося. Неможливо отримати інформацію про файл.", "Invalid directory." : "Невірний каталог.", "Files" : "Файли", "All files" : "Усі файли", "Favorites" : "Улюблені", "Home" : "Домашня адреса", - "Unable to upload {filename} as it is a directory or has 0 bytes" : "Неможливо завантажити {filename}, оскільки це каталог або має нульовий розмір.", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "Неможливо вивантажити {filename}, оскільки це каталог або файл має розмір 0 байт.", "Total file size {size1} exceeds upload limit {size2}" : "Розмір файлу {size1} перевищує обмеження {size2}", - "Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостатньо вільного місця, ви завантажуєте {size1}, а залишилося лише {size2}", - "Upload cancelled." : "Завантаження перервано.", + "Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостатньо вільного місця, ви вивантажуєте {size1}, а залишилося лише {size2}", + "Upload cancelled." : "Вивантаження скасовано.", "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." : "Виконується вивантаження файлу. Закриття цієї сторінки приведе до скасування вивантаження.", "{new_name} already exists" : "{new_name} вже існує", "Could not create file" : "Не вдалося створити файл", "Could not create folder" : "Не вдалося створити теку", "Rename" : "Перейменувати", "Delete" : "Видалити", "Disconnect storage" : "Від’єднати сховище", - "Unshare" : "Закрити доступ", + "Unshare" : "Закрити спільний доступ", + "No permission to delete" : "Недостатньо прав для видалення", "Download" : "Завантажити", "Select" : "Оберіть", "Pending" : "Очікування", "Unable to determine date" : "Неможливо визначити дату", + "This operation is forbidden" : "Ця операція заборонена", "Error moving file." : "Помилка переміщення файлу.", "Error moving file" : "Помилка переміщення файлу", "Error" : "Помилка", @@ -55,15 +57,12 @@ "Modified" : "Змінено", "_%n folder_::_%n folders_" : ["%n тека ","теки : %n ","теки : %n "], "_%n file_::_%n files_" : ["%n файл ","файли : %n ","файли : %n "], - "You don’t have permission to upload or create files here" : "У вас недостатньо прав для завантаження або створення файлів тут", - "_Uploading %n file_::_Uploading %n files_" : ["Завантаження %n файлу","Завантаження %n файлів","Завантаження %n файлів"], + "You don’t have permission to upload or create files here" : "У вас недостатньо прав для вивантаження або створення тут файлів", + "_Uploading %n file_::_Uploading %n files_" : ["Вивантаження %n файлу","Вивантаження %n файлів","Вивантаження %n файлів"], "\"{name}\" is an invalid file name." : "\"{name}\" - некоректне ім'я файлу.", "File name cannot be empty." : " Ім'я файлу не може бути порожнім.", "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." : "Шифрування було вимкнено, але ваші файли все ще зашифровано. Для розшифрування перейдіть до персональних налаштувань.", "_matches '{filter}'_::_match '{filter}'_" : ["знайдено '{filter}'","знайдено '{filter}'","знайдено '{filter}'"], "{dirs} and {files}" : "{dirs} і {files}", "Favorited" : "Улюблений", @@ -71,6 +70,7 @@ "An error occurred while trying to update the tags" : "Виникла помилка при спробі оновити мітки", "A new file or folder has been <strong>created</strong>" : "Новий файл або теку було <strong>створено</strong>", "A file or folder has been <strong>changed</strong>" : "Файл або теку було <strong> змінено </strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Обмежити повідомлення про створення та зміни в ваших <strong>улюблених файлах</strong>\n<em>(Тількі потік)</em>", "A file or folder has been <strong>deleted</strong>" : "Файл або теку було <strong> видалено </strong>", "A file or folder has been <strong>restored</strong>" : "Файл або теку було <strong> відновлено </strong>", "You created %1$s" : "Вами створено %1$s", @@ -78,15 +78,15 @@ "%1$s was created in a public folder" : "%1$s створено у публічній теці", "You changed %1$s" : "Вами змінено %1$s", "%2$s changed %1$s" : "%2$s змінено %1$s", - "You deleted %1$s" : "Вами видалене %1$s", - "%2$s deleted %1$s" : "%2$s видалене %1$s", + "You deleted %1$s" : "Вами видалено %1$s", + "%2$s deleted %1$s" : "%2$s видалено %1$s", "You restored %1$s" : "Вами відновлено %1$s", "%2$s restored %1$s" : "%2$s відновлено %1$s", - "%s could not be renamed as it has been deleted" : "%s не може бути перейменований, оскільки він видалений", - "%s could not be renamed" : "%s не може бути перейменований", - "Upload (max. %s)" : "Завантаження (макс. %s)", + "%s could not be renamed as it has been deleted" : "%s не можна перейменувати, оскільки його видалено", + "%s could not be renamed" : "%s не можна перейменувати", + "Upload (max. %s)" : "Вивантаження (макс. %s)", "File handling" : "Робота з файлами", - "Maximum upload size" : "Максимальний розмір відвантажень", + "Maximum upload size" : "Максимальний розмір вивантажень", "max. possible: " : "макс. можливе:", "Save" : "Зберегти", "Can not be edited from here due to insufficient permissions." : "Неможливо відредагувати тут через брак повноважень.", @@ -99,15 +99,16 @@ "New folder" : "Нова тека", "Folder" : "Тека", "Upload" : "Вивантажити", - "Cancel upload" : "Перервати завантаження", - "Upload some content or sync with your devices!" : "Завантажте вміст або синхронізуйте з пристроями!", - "No entries found in this folder" : "Записів не знайдено в цій папці", + "Cancel upload" : "Скасувати вивантаження", + "No files in here" : "Тут немає файлів", + "Upload some content or sync with your devices!" : "Вивантажте щось або синхронізуйте з пристроями!", + "No entries found in this folder" : "В цій теці нічого немає", "Select all" : "Вибрати всі", "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." : "Файли скануються, зачекайте, будь-ласка.", + "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файли,що ви намагаєтесь вивантажити перевищують максимальний дозволений розмір файлів на цьому сервері.", + "Files are being scanned, please wait." : "Файли перевіряються, зачекайте, будь-ласка.", "Currently scanning" : "Триває перевірка", - "No favorites" : "Немає обраних", - "Files and folders you mark as favorite will show up here" : "Файли і папки, які ви помітили як улюблені з’являться тут" + "No favorites" : "Немає улюблених", + "Files and folders you mark as favorite will show up here" : "Файли і теки, які ви позначили як улюблені, з’являться тут" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files/l10n/vi.js b/apps/files/l10n/vi.js index df4d2e7a1ca..c724f5f73ea 100644 --- a/apps/files/l10n/vi.js +++ b/apps/files/l10n/vi.js @@ -1,6 +1,8 @@ OC.L10N.register( "files", { + "Storage not available" : "Lưu trữ không có sẵn", + "Storage invalid" : "Lưu trữ không hợp lệ", "Unknown error" : "Lỗi chưa biết", "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", @@ -51,8 +53,6 @@ OC.L10N.register( "File name cannot be empty." : "Tên file không được rỗ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}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Ứng dụng mã hóa đã được kích hoạt nhưng bạn chưa khởi tạo khóa. Vui lòng đăng xuất ra và đăng nhập lại", - "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Mã hóa đã bị vô hiệu nhưng những tập tin của bạn vẫn được mã hóa. Vui lòng vào phần thiết lập cá nhân để giải mã chúng.", "{dirs} and {files}" : "{dirs} và {files}", "Favorite" : "Ưu thích", "%s could not be renamed" : "%s không thể đổi tên", @@ -70,6 +70,7 @@ OC.L10N.register( "Upload" : "Tải lên", "Cancel upload" : "Hủy upload", "No entries found in this folder" : "Chưa có mục nào trong thư mục", + "Select all" : "Chọn tất cả", "Upload too large" : "Tập tin tải lên quá lớn", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ .", "Files are being scanned, please wait." : "Tập tin đang được quét ,vui lòng chờ." diff --git a/apps/files/l10n/vi.json b/apps/files/l10n/vi.json index eee5928ab63..5a4519cf84b 100644 --- a/apps/files/l10n/vi.json +++ b/apps/files/l10n/vi.json @@ -1,4 +1,6 @@ { "translations": { + "Storage not available" : "Lưu trữ không có sẵn", + "Storage invalid" : "Lưu trữ không hợp lệ", "Unknown error" : "Lỗi chưa biết", "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", @@ -49,8 +51,6 @@ "File name cannot be empty." : "Tên file không được rỗ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}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Ứng dụng mã hóa đã được kích hoạt nhưng bạn chưa khởi tạo khóa. Vui lòng đăng xuất ra và đăng nhập lại", - "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Mã hóa đã bị vô hiệu nhưng những tập tin của bạn vẫn được mã hóa. Vui lòng vào phần thiết lập cá nhân để giải mã chúng.", "{dirs} and {files}" : "{dirs} và {files}", "Favorite" : "Ưu thích", "%s could not be renamed" : "%s không thể đổi tên", @@ -68,6 +68,7 @@ "Upload" : "Tải lên", "Cancel upload" : "Hủy upload", "No entries found in this folder" : "Chưa có mục nào trong thư mục", + "Select all" : "Chọn tất cả", "Upload too large" : "Tập tin tải lên quá lớn", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ .", "Files are being scanned, please wait." : "Tập tin đang được quét ,vui lòng chờ." diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js index 40f1a591dda..76cbe4110a8 100644 --- a/apps/files/l10n/zh_CN.js +++ b/apps/files/l10n/zh_CN.js @@ -42,15 +42,19 @@ OC.L10N.register( "Delete" : "删除", "Disconnect storage" : "断开储存连接", "Unshare" : "取消共享", + "No permission to delete" : "无权删除", "Download" : "下载", "Select" : "选择", "Pending" : "等待", "Unable to determine date" : "无法确定日期", + "This operation is forbidden" : "操作被禁止", + "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用,请检查日志或联系管理员", "Error moving file." : "移动文件出错。", "Error moving file" : "移动文件错误", "Error" : "错误", "Could not rename file" : "不能重命名文件", "Error deleting file." : "删除文件出错。", + "No entries in this folder match '{filter}'" : "此文件夹中无项目匹配“{filter}”", "Name" : "名称", "Size" : "大小", "Modified" : "修改日期", @@ -60,16 +64,18 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : ["上传 %n 个文件"], "\"{name}\" is an invalid file name." : "“{name}”是一个无效的文件名。", "File name cannot be empty." : "文件名不能为空。", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满,文件将无法更新或同步!", "Your storage is full, files can not be updated or synced anymore!" : "您的存储空间已满,文件将无法更新或同步!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的存储空间即将用完 ({usedSpacePercent}%)", "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." : "加密是被禁用的,但是您的文件还是被加密了。请到您的个人配置里设置文件加密选项。", + "_matches '{filter}'_::_match '{filter}'_" : ["匹配“{filter}”"], "{dirs} and {files}" : "{dirs} 和 {files}", "Favorited" : "已收藏", "Favorite" : "收藏", + "An error occurred while trying to update the tags" : "更新标签时出错", "A new file or folder has been <strong>created</strong>" : "一个新的文件或文件夹已被<strong>创建</strong>", "A file or folder has been <strong>changed</strong>" : "一个文件或文件夹已被<strong>修改</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "针对<strong>已收藏文件</strong>的新建和修改发送有限的通知 <em>(仅流)</em>", "A file or folder has been <strong>deleted</strong>" : "一个文件或文件夹已被<strong>删除</strong>", "A file or folder has been <strong>restored</strong>" : "一个文件或文件夹已经被 <strong>恢复</strong>", "You created %1$s" : "您创建了%1$s", @@ -88,6 +94,7 @@ OC.L10N.register( "Maximum upload size" : "最大上传大小", "max. possible: " : "最大允许: ", "Save" : "保存", + "Can not be edited from here due to insufficient permissions." : "由于权限不足无法在此编辑。", "Settings" : "设置", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用这个地址 <a href=\"%s\" target=\"_blank\">通过 WebDAV 访问您的文件</a>", @@ -98,7 +105,9 @@ OC.L10N.register( "Folder" : "文件夹", "Upload" : "上传", "Cancel upload" : "取消上传", + "No files in here" : "无文件", "Upload some content or sync with your devices!" : "上传一些内容或者与设备同步!", + "No entries found in this folder" : "此文件夹中无项目", "Select all" : "全部选择", "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_CN.json b/apps/files/l10n/zh_CN.json index e2e62b93959..44e763a42fd 100644 --- a/apps/files/l10n/zh_CN.json +++ b/apps/files/l10n/zh_CN.json @@ -40,15 +40,19 @@ "Delete" : "删除", "Disconnect storage" : "断开储存连接", "Unshare" : "取消共享", + "No permission to delete" : "无权删除", "Download" : "下载", "Select" : "选择", "Pending" : "等待", "Unable to determine date" : "无法确定日期", + "This operation is forbidden" : "操作被禁止", + "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用,请检查日志或联系管理员", "Error moving file." : "移动文件出错。", "Error moving file" : "移动文件错误", "Error" : "错误", "Could not rename file" : "不能重命名文件", "Error deleting file." : "删除文件出错。", + "No entries in this folder match '{filter}'" : "此文件夹中无项目匹配“{filter}”", "Name" : "名称", "Size" : "大小", "Modified" : "修改日期", @@ -58,16 +62,18 @@ "_Uploading %n file_::_Uploading %n files_" : ["上传 %n 个文件"], "\"{name}\" is an invalid file name." : "“{name}”是一个无效的文件名。", "File name cannot be empty." : "文件名不能为空。", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满,文件将无法更新或同步!", "Your storage is full, files can not be updated or synced anymore!" : "您的存储空间已满,文件将无法更新或同步!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的存储空间即将用完 ({usedSpacePercent}%)", "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." : "加密是被禁用的,但是您的文件还是被加密了。请到您的个人配置里设置文件加密选项。", + "_matches '{filter}'_::_match '{filter}'_" : ["匹配“{filter}”"], "{dirs} and {files}" : "{dirs} 和 {files}", "Favorited" : "已收藏", "Favorite" : "收藏", + "An error occurred while trying to update the tags" : "更新标签时出错", "A new file or folder has been <strong>created</strong>" : "一个新的文件或文件夹已被<strong>创建</strong>", "A file or folder has been <strong>changed</strong>" : "一个文件或文件夹已被<strong>修改</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "针对<strong>已收藏文件</strong>的新建和修改发送有限的通知 <em>(仅流)</em>", "A file or folder has been <strong>deleted</strong>" : "一个文件或文件夹已被<strong>删除</strong>", "A file or folder has been <strong>restored</strong>" : "一个文件或文件夹已经被 <strong>恢复</strong>", "You created %1$s" : "您创建了%1$s", @@ -86,6 +92,7 @@ "Maximum upload size" : "最大上传大小", "max. possible: " : "最大允许: ", "Save" : "保存", + "Can not be edited from here due to insufficient permissions." : "由于权限不足无法在此编辑。", "Settings" : "设置", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用这个地址 <a href=\"%s\" target=\"_blank\">通过 WebDAV 访问您的文件</a>", @@ -96,7 +103,9 @@ "Folder" : "文件夹", "Upload" : "上传", "Cancel upload" : "取消上传", + "No files in here" : "无文件", "Upload some content or sync with your devices!" : "上传一些内容或者与设备同步!", + "No entries found in this folder" : "此文件夹中无项目", "Select all" : "全部选择", "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_TW.js b/apps/files/l10n/zh_TW.js index 4360aeaa9f2..194020ef9b7 100644 --- a/apps/files/l10n/zh_TW.js +++ b/apps/files/l10n/zh_TW.js @@ -61,9 +61,6 @@ OC.L10N.register( "File name cannot be empty." : "檔名不能為空", "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." : "加密已經被停用,但是您的舊檔案還是處於已加密的狀態,請前往個人設定以解密這些檔案。", "{dirs} and {files}" : "{dirs} 和 {files}", "Favorite" : "我的最愛", "A new file or folder has been <strong>created</strong>" : "新的檔案或目錄已被 <strong>建立</strong>", diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json index d5bc48c0030..1a0b187498a 100644 --- a/apps/files/l10n/zh_TW.json +++ b/apps/files/l10n/zh_TW.json @@ -59,9 +59,6 @@ "File name cannot be empty." : "檔名不能為空", "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." : "加密已經被停用,但是您的舊檔案還是處於已加密的狀態,請前往個人設定以解密這些檔案。", "{dirs} and {files}" : "{dirs} 和 {files}", "Favorite" : "我的最愛", "A new file or folder has been <strong>created</strong>" : "新的檔案或目錄已被 <strong>建立</strong>", diff --git a/apps/files/lib/activity.php b/apps/files/lib/activity.php index fff49ea4ea5..bf80d0cfd7c 100644 --- a/apps/files/lib/activity.php +++ b/apps/files/lib/activity.php @@ -30,6 +30,7 @@ use OCP\IL10N; use OCP\IURLGenerator; class Activity implements IExtension { + const APP_FILES = 'files'; const FILTER_FILES = 'files'; const FILTER_FAVORITES = 'files_favorites'; @@ -78,7 +79,7 @@ class Activity implements IExtension { * @return IL10N */ protected function getL10N($languageCode = null) { - return $this->languageFactory->get('files', $languageCode); + return $this->languageFactory->get(self::APP_FILES, $languageCode); } /** @@ -86,14 +87,21 @@ class Activity implements IExtension { * If no additional types are to be added false is to be returned * * @param string $languageCode - * @return array|false + * @return array|false Array "stringID of the type" => "translated string description for the setting" + * or Array "stringID of the type" => [ + * 'desc' => "translated string description for the setting" + * 'methods' => [self::METHOD_*], + * ] */ public function getNotificationTypes($languageCode) { $l = $this->getL10N($languageCode); return [ self::TYPE_SHARE_CREATED => (string) $l->t('A new file or folder has been <strong>created</strong>'), self::TYPE_SHARE_CHANGED => (string) $l->t('A file or folder has been <strong>changed</strong>'), - self::TYPE_FAVORITES => (string) $l->t('Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>'), + self::TYPE_FAVORITES => [ + 'desc' => (string) $l->t('Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>'), + 'methods' => [self::METHOD_STREAM], + ], self::TYPE_SHARE_DELETED => (string) $l->t('A file or folder has been <strong>deleted</strong>'), self::TYPE_SHARE_RESTORED => (string) $l->t('A file or folder has been <strong>restored</strong>'), ]; @@ -107,7 +115,7 @@ class Activity implements IExtension { * @return array|false */ public function getDefaultTypes($method) { - if ($method === 'stream') { + if ($method === self::METHOD_STREAM) { $settings = array(); $settings[] = self::TYPE_SHARE_CREATED; $settings[] = self::TYPE_SHARE_CHANGED; @@ -132,29 +140,30 @@ class Activity implements IExtension { * @return string|false */ public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode) { - if ($app !== 'files') { + if ($app !== self::APP_FILES) { return false; } + $l = $this->getL10N($languageCode); switch ($text) { case 'created_self': - return (string) $this->l->t('You created %1$s', $params); + return (string) $l->t('You created %1$s', $params); case 'created_by': - return (string) $this->l->t('%2$s created %1$s', $params); + return (string) $l->t('%2$s created %1$s', $params); case 'created_public': - return (string) $this->l->t('%1$s was created in a public folder', $params); + return (string) $l->t('%1$s was created in a public folder', $params); case 'changed_self': - return (string) $this->l->t('You changed %1$s', $params); + return (string) $l->t('You changed %1$s', $params); case 'changed_by': - return (string) $this->l->t('%2$s changed %1$s', $params); + return (string) $l->t('%2$s changed %1$s', $params); case 'deleted_self': - return (string) $this->l->t('You deleted %1$s', $params); + return (string) $l->t('You deleted %1$s', $params); case 'deleted_by': - return (string) $this->l->t('%2$s deleted %1$s', $params); + return (string) $l->t('%2$s deleted %1$s', $params); case 'restored_self': - return (string) $this->l->t('You restored %1$s', $params); + return (string) $l->t('You restored %1$s', $params); case 'restored_by': - return (string) $this->l->t('%2$s restored %1$s', $params); + return (string) $l->t('%2$s restored %1$s', $params); default: return false; @@ -173,7 +182,7 @@ class Activity implements IExtension { * @return array|false */ function getSpecialParameterList($app, $text) { - if ($app === 'files') { + if ($app === self::APP_FILES) { switch ($text) { case 'created_self': case 'created_by': @@ -223,7 +232,7 @@ class Activity implements IExtension { * @return integer|false */ public function getGroupParameter($activity) { - if ($activity['app'] === 'files') { + if ($activity['app'] === self::APP_FILES) { switch ($activity['subject']) { case 'created_self': case 'created_by': @@ -309,7 +318,7 @@ class Activity implements IExtension { $user = $this->activityManager->getCurrentUserId(); // Display actions from all files if ($filter === self::FILTER_FILES) { - return ['`app` = ?', ['files']]; + return ['`app` = ?', [self::APP_FILES]]; } if (!$user) { @@ -323,7 +332,7 @@ class Activity implements IExtension { $favorites = $this->helper->getFavoriteFilePaths($user); } catch (\RuntimeException $e) { // Too many favorites, can not put them into one query anymore... - return ['`app` = ?', ['files']]; + return ['`app` = ?', [self::APP_FILES]]; } /* @@ -331,7 +340,7 @@ class Activity implements IExtension { * or `file` is a favorite or in a favorite folder */ $parameters = $fileQueryList = []; - $parameters[] = 'files'; + $parameters[] = self::APP_FILES; $fileQueryList[] = '(`type` <> ? AND `type` <> ?)'; $parameters[] = self::TYPE_SHARE_CREATED; @@ -346,7 +355,7 @@ class Activity implements IExtension { $parameters[] = $favorite . '/%'; } - $parameters[] = 'files'; + $parameters[] = self::APP_FILES; return [ ' CASE WHEN `app` = ? THEN (' . implode(' OR ', $fileQueryList) . ') ELSE `app` <> ? END ', @@ -363,6 +372,6 @@ class Activity implements IExtension { * @return bool */ protected function userSettingFavoritesOnly($user) { - return (bool) $this->config->getUserValue($user, 'activity', 'notify_stream_' . self::TYPE_FAVORITES, false); + return (bool) $this->config->getUserValue($user, 'activity', 'notify_' . self::METHOD_STREAM . '_' . self::TYPE_FAVORITES, false); } } diff --git a/apps/files/lib/app.php b/apps/files/lib/app.php index d80024f2470..5bd8c127586 100644 --- a/apps/files/lib/app.php +++ b/apps/files/lib/app.php @@ -74,6 +74,17 @@ class App { 'data' => NULL ); + try { + // check if the new name is conform to file name restrictions + $this->view->verifyPath($dir, $newname); + } catch (\OCP\Files\InvalidPathException $ex) { + $result['data'] = array( + 'message' => $this->l10n->t($ex->getMessage()), + 'code' => 'invalidname', + ); + return $result; + } + $normalizedOldPath = \OC\Files\Filesystem::normalizePath($dir . '/' . $oldname); $normalizedNewPath = \OC\Files\Filesystem::normalizePath($dir . '/' . $newname); diff --git a/apps/files/lib/capabilities.php b/apps/files/lib/capabilities.php index 05d12864dca..2e19283e4d6 100644 --- a/apps/files/lib/capabilities.php +++ b/apps/files/lib/capabilities.php @@ -1,7 +1,7 @@ <?php /** * @author Christopher Schäpers <kondou@ts.unde.re> - * @author Morris Jobke <hey@morrisjobke.de> + * @author Roeland Jago Douma <roeland@famdouma.nl> * @author Tom Needham <tom@owncloud.com> * * @copyright Copyright (c) 2015, ownCloud, Inc. @@ -20,19 +20,28 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> * */ - -namespace OCA\Files; -class Capabilities { - - public static function getCapabilities() { - return new \OC_OCS_Result(array( - 'capabilities' => array( - 'files' => array( - 'bigfilechunking' => true, - ), - ), - )); +namespace OCA\Files; + +use OCP\Capabilities\ICapability; + +/** + * Class Capabilities + * + * @package OCA\Files + */ +class Capabilities implements ICapability { + + /** + * Return this classes capabilities + * + * @return array + */ + public function getCapabilities() { + return [ + 'files' => [ + 'bigfilechunking' => true, + ], + ]; } - } diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php index cc1b2d3cfbe..6bfdc0a095c 100644 --- a/apps/files/lib/helper.php +++ b/apps/files/lib/helper.php @@ -52,7 +52,9 @@ class Helper { 'uploadMaxFilesize' => $maxUploadFileSize, 'maxHumanFilesize' => $maxHumanFileSize, 'freeSpace' => $storageInfo['free'], - 'usedSpacePercent' => (int)$storageInfo['relative'] + 'usedSpacePercent' => (int)$storageInfo['relative'], + 'owner' => $storageInfo['owner'], + 'ownerDisplayName' => $storageInfo['ownerDisplayName'], ]; } @@ -196,10 +198,11 @@ class Helper { * @param string $dir path to the directory * @param string $sortAttribute attribute to sort on * @param bool $sortDescending true for descending sort, false otherwise + * @param string $mimetypeFilter limit returned content to this mimetype or mimepart * @return \OCP\Files\FileInfo[] files */ - public static function getFiles($dir, $sortAttribute = 'name', $sortDescending = false) { - $content = \OC\Files\Filesystem::getDirectoryContent($dir); + public static function getFiles($dir, $sortAttribute = 'name', $sortDescending = false, $mimetypeFilter = '') { + $content = \OC\Files\Filesystem::getDirectoryContent($dir, $mimetypeFilter); return self::sortFiles($content, $sortAttribute, $sortDescending); } diff --git a/apps/files/templates/admin.php b/apps/files/templates/admin.php index adf756a12be..822fc779bd3 100644 --- a/apps/files/templates/admin.php +++ b/apps/files/templates/admin.php @@ -10,6 +10,8 @@ <br/> <input type="hidden" value="<?php p($_['requesttoken']); ?>" name="requesttoken" /> <?php if($_['uploadChangable']): ?> + <?php p($l->t('With PHP-FPM this value may take up to 5 minutes to take effect after saving.')); ?> + <br/> <input type="submit" name="submitFilesAdminSettings" id="submitFilesAdminSettings" value="<?php p($l->t( 'Save' )); ?>"/> <?php else: ?> diff --git a/apps/files/templates/appnavigation.php b/apps/files/templates/appnavigation.php index f586b0ecb28..512300e3a58 100644 --- a/apps/files/templates/appnavigation.php +++ b/apps/files/templates/appnavigation.php @@ -3,7 +3,7 @@ <?php foreach ($_['navigationItems'] as $item) { ?> <li data-id="<?php p($item['id']) ?>" class="nav-<?php p($item['id']) ?>"> <a href="<?php p(isset($item['href']) ? $item['href'] : '#') ?>" - class="nav-icon-<?php p($item['id']) ?> svg"> + class="nav-icon-<?php p($item['icon'] !== '' ? $item['icon'] : $item['id']) ?> svg"> <?php p($item['name']);?> </a> </li> @@ -12,7 +12,7 @@ <div id="app-settings"> <div id="app-settings-header"> <button class="settings-button" data-apps-slide-toggle="#app-settings-content"> - <span><?php p($l->t('Settings'));?></span> + <?php p($l->t('Settings'));?> </button> </div> <div id="app-settings-content"> diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php index 77f80bc346d..e825c300d31 100644 --- a/apps/files/templates/index.php +++ b/apps/files/templates/index.php @@ -6,11 +6,14 @@ <?php print_unescaped($content['content']) ?> </div> <?php } ?> + <div id="searchresults" class="hidden"></div> </div><!-- closing app-content --> <!-- config hints for javascript --> <input type="hidden" name="filesApp" id="filesApp" value="1" /> <input type="hidden" name="usedSpacePercent" id="usedSpacePercent" value="<?php p($_['usedSpacePercent']); ?>" /> +<input type="hidden" name="owner" id="owner" value="<?php p($_['owner']); ?>" /> +<input type="hidden" name="ownerDisplayName" id="ownerDisplayName" value="<?php p($_['ownerDisplayName']); ?>" /> <?php if (!$_['isPublic']) :?> <input type="hidden" name="mailNotificationEnabled" id="mailNotificationEnabled" value="<?php p($_['mailNotificationEnabled']) ?>" /> <input type="hidden" name="mailPublicNotificationEnabled" id="mailPublicNotificationEnabled" value="<?php p($_['mailPublicNotificationEnabled']) ?>" /> diff --git a/apps/files/templates/list.php b/apps/files/templates/list.php index 02137c7e446..32651b261da 100644 --- a/apps/files/templates/list.php +++ b/apps/files/templates/list.php @@ -54,7 +54,7 @@ <div id="emptycontent" class="hidden"> <div class="icon-folder"></div> <h2><?php p($l->t('No files in here')); ?></h2> - <p><?php p($l->t('Upload some content or sync with your devices!')); ?></p> + <p class="uploadmessage hidden"><?php p($l->t('Upload some content or sync with your devices!')); ?></p> </div> <div class="nofilterresults emptycontent hidden"> diff --git a/apps/files/templates/test.png b/apps/files/templates/test.png Binary files differnew file mode 100644 index 00000000000..2b90216f797 --- /dev/null +++ b/apps/files/templates/test.png diff --git a/apps/files/tests/activitytest.php b/apps/files/tests/activitytest.php index 1f8d6330e51..cdb1d21bcd8 100644 --- a/apps/files/tests/activitytest.php +++ b/apps/files/tests/activitytest.php @@ -1,11 +1,24 @@ <?php /** - * Copyright (c) 2015 Joas Schilling <nickvergessen@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> * -*/ + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ namespace OCA\Files\Tests; @@ -29,6 +42,9 @@ class ActivityTest extends TestCase { /** @var \PHPUnit_Framework_MockObject_MockObject */ protected $activityHelper; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $l10nFactory; + /** @var \OCA\Files\Activity */ protected $activityExtension; @@ -54,8 +70,28 @@ class ActivityTest extends TestCase { $this->config ); + $this->l10nFactory = $this->getMockBuilder('OC\L10N\Factory') + ->disableOriginalConstructor() + ->getMock(); + $deL10n = $this->getMockBuilder('OC_L10N') + ->disableOriginalConstructor() + ->getMock(); + $deL10n->expects($this->any()) + ->method('t') + ->willReturnCallback(function ($argument) { + return 'translate(' . $argument . ')'; + }); + + $this->l10nFactory->expects($this->any()) + ->method('get') + ->willReturnMap([ + ['files', null, new \OC_L10N('files', 'en')], + ['files', 'en', new \OC_L10N('files', 'en')], + ['files', 'de', $deL10n], + ]); + $this->activityExtension = $activityExtension = new Activity( - new \OC\L10N\Factory(), + $this->l10nFactory, $this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock(), $this->activityManager, $this->activityHelper, @@ -98,6 +134,26 @@ class ActivityTest extends TestCase { $this->activityExtension->translate('files_sharing', '', [], false, false, 'en'), 'Asserting that no translations are set for files_sharing' ); + + // Test english + $this->assertNotFalse( + $this->activityExtension->translate('files', 'deleted_self', ['file'], false, false, 'en'), + 'Asserting that translations are set for files.deleted_self' + ); + $this->assertStringStartsWith( + 'You deleted ', + $this->activityExtension->translate('files', 'deleted_self', ['file'], false, false, 'en') + ); + + // Test translation + $this->assertNotFalse( + $this->activityExtension->translate('files', 'deleted_self', ['file'], false, false, 'de'), + 'Asserting that translations are set for files.deleted_self' + ); + $this->assertStringStartsWith( + 'translate(You deleted ', + $this->activityExtension->translate('files', 'deleted_self', ['file'], false, false, 'de') + ); } public function testGetSpecialParameterList() { diff --git a/apps/files/tests/ajax_rename.php b/apps/files/tests/ajax_rename.php index 34e7f5085dd..a690c7dcb0c 100644 --- a/apps/files/tests/ajax_rename.php +++ b/apps/files/tests/ajax_rename.php @@ -222,36 +222,17 @@ class Test_OC_Files_App_Rename extends \Test\TestCase { } /** - * Test move to a folder that doesn't exist any more + * Test move to invalid name */ - function testRenameToNonExistingFolder() { + function testRenameToInvalidName() { $dir = '/'; $oldname = 'oldname'; - $newname = '/unexist/newname'; - - $this->viewMock->expects($this->any()) - ->method('file_exists') - ->with($this->anything()) - ->will($this->returnValueMap(array( - array('/oldname', true), - array('/unexist', 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', - ))); + $newname = 'abc\\'; $result = $this->files->rename($dir, $oldname, $newname); $this->assertFalse($result['success']); - $this->assertEquals('targetnotfound', $result['data']['code']); + $this->assertEquals('File name contains at least one invalid character', $result['data']['message']); + $this->assertEquals('invalidname', $result['data']['code']); } } diff --git a/apps/files/tests/controller/apicontrollertest.php b/apps/files/tests/controller/apicontrollertest.php index bbab711310c..35d00af75ba 100644 --- a/apps/files/tests/controller/apicontrollertest.php +++ b/apps/files/tests/controller/apicontrollertest.php @@ -1,5 +1,6 @@ <?php /** + * @author Joas Schilling <nickvergessen@owncloud.com> * @author Lukas Reschke <lukas@owncloud.com> * @author Morris Jobke <hey@morrisjobke.de> * @author Roeland Jago Douma <roeland@famdouma.nl> @@ -25,7 +26,6 @@ namespace OCA\Files\Controller; use OC\Files\FileInfo; use OCP\AppFramework\Http; -use OC\Preview; use OCP\Files\NotFoundException; use OCP\Files\StorageNotAvailableException; use Test\TestCase; diff --git a/apps/files/tests/js/detailsviewSpec.js b/apps/files/tests/js/detailsviewSpec.js new file mode 100644 index 00000000000..852f8b04293 --- /dev/null +++ b/apps/files/tests/js/detailsviewSpec.js @@ -0,0 +1,157 @@ +/** +* ownCloud +* +* @author Vincent Petry +* @copyright 2015 Vincent Petry <pvince81@owncloud.com> +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +describe('OCA.Files.DetailsView tests', function() { + var detailsView; + + beforeEach(function() { + detailsView = new OCA.Files.DetailsView(); + }); + afterEach(function() { + detailsView.remove(); + detailsView = undefined; + }); + it('renders itself empty when nothing registered', function() { + detailsView.render(); + expect(detailsView.$el.find('.detailFileInfoContainer').length).toEqual(1); + expect(detailsView.$el.find('.tabsContainer').length).toEqual(1); + }); + describe('file info detail view', function() { + it('renders registered view', function() { + var testView = new OCA.Files.DetailFileInfoView(); + var testView2 = new OCA.Files.DetailFileInfoView(); + detailsView.addDetailView(testView); + detailsView.addDetailView(testView2); + detailsView.render(); + + expect(detailsView.$el.find('.detailFileInfoContainer .detailFileInfoView').length).toEqual(2); + }); + it('updates registered tabs when fileinfo is updated', function() { + var viewRenderStub = sinon.stub(OCA.Files.DetailFileInfoView.prototype, 'render'); + var testView = new OCA.Files.DetailFileInfoView(); + var testView2 = new OCA.Files.DetailFileInfoView(); + detailsView.addDetailView(testView); + detailsView.addDetailView(testView2); + detailsView.render(); + + var fileInfo = {id: 5, name: 'test.txt'}; + viewRenderStub.reset(); + detailsView.setFileInfo(fileInfo); + + expect(testView.getFileInfo()).toEqual(fileInfo); + expect(testView2.getFileInfo()).toEqual(fileInfo); + + expect(viewRenderStub.callCount).toEqual(2); + viewRenderStub.restore(); + }); + }); + describe('tabs', function() { + var testView, testView2; + + beforeEach(function() { + testView = new OCA.Files.DetailTabView({id: 'test1'}); + testView2 = new OCA.Files.DetailTabView({id: 'test2'}); + detailsView.addTabView(testView); + detailsView.addTabView(testView2); + detailsView.render(); + }); + it('initially renders only the selected tab', function() { + expect(detailsView.$el.find('.tab').length).toEqual(1); + expect(detailsView.$el.find('.tab').attr('id')).toEqual('test1'); + }); + it('updates tab model and rerenders on-demand as soon as it gets selected', function() { + var tab1RenderStub = sinon.stub(testView, 'render'); + var tab2RenderStub = sinon.stub(testView2, 'render'); + var fileInfo1 = new OCA.Files.FileInfoModel({id: 5, name: 'test.txt'}); + var fileInfo2 = new OCA.Files.FileInfoModel({id: 8, name: 'test2.txt'}); + + detailsView.setFileInfo(fileInfo1); + + // first tab renders, not the second one + expect(tab1RenderStub.calledOnce).toEqual(true); + expect(tab2RenderStub.notCalled).toEqual(true); + + // info got set only to the first visible tab + expect(testView.getFileInfo()).toEqual(fileInfo1); + expect(testView2.getFileInfo()).toBeUndefined(); + + // select second tab for first render + detailsView.$el.find('.tabHeader').eq(1).click(); + + // second tab got rendered + expect(tab2RenderStub.calledOnce).toEqual(true); + expect(testView2.getFileInfo()).toEqual(fileInfo1); + + // select the first tab again + detailsView.$el.find('.tabHeader').eq(0).click(); + + // no re-render + expect(tab1RenderStub.calledOnce).toEqual(true); + expect(tab2RenderStub.calledOnce).toEqual(true); + + tab1RenderStub.reset(); + tab2RenderStub.reset(); + + // switch to another file + detailsView.setFileInfo(fileInfo2); + + // only the visible tab was updated and rerendered + expect(tab1RenderStub.calledOnce).toEqual(true); + expect(testView.getFileInfo()).toEqual(fileInfo2); + + // second/invisible tab still has old info, not rerendered + expect(tab2RenderStub.notCalled).toEqual(true); + expect(testView2.getFileInfo()).toEqual(fileInfo1); + + // reselect the second one + detailsView.$el.find('.tabHeader').eq(1).click(); + + // second tab becomes visible, updated and rendered + expect(testView2.getFileInfo()).toEqual(fileInfo2); + expect(tab2RenderStub.calledOnce).toEqual(true); + + tab1RenderStub.restore(); + tab2RenderStub.restore(); + }); + it('selects the first tab by default', function() { + expect(detailsView.$el.find('.tabHeader').eq(0).hasClass('selected')).toEqual(true); + expect(detailsView.$el.find('.tabHeader').eq(1).hasClass('selected')).toEqual(false); + expect(detailsView.$el.find('.tab').eq(0).hasClass('hidden')).toEqual(false); + expect(detailsView.$el.find('.tab').eq(1).length).toEqual(0); + }); + it('switches the current tab when clicking on tab header', function() { + detailsView.$el.find('.tabHeader').eq(1).click(); + expect(detailsView.$el.find('.tabHeader').eq(0).hasClass('selected')).toEqual(false); + expect(detailsView.$el.find('.tabHeader').eq(1).hasClass('selected')).toEqual(true); + expect(detailsView.$el.find('.tab').eq(0).hasClass('hidden')).toEqual(true); + expect(detailsView.$el.find('.tab').eq(1).hasClass('hidden')).toEqual(false); + }); + it('does not render tab headers when only one tab exists', function() { + detailsView.remove(); + detailsView = new OCA.Files.DetailsView(); + testView = new OCA.Files.DetailTabView({id: 'test1'}); + detailsView.addTabView(testView); + detailsView.render(); + + expect(detailsView.$el.find('.tabHeader').length).toEqual(0); + }); + }); +}); diff --git a/apps/files/tests/js/favoritespluginspec.js b/apps/files/tests/js/favoritespluginspec.js index 90b40ede74b..1b144c28707 100644 --- a/apps/files/tests/js/favoritespluginspec.js +++ b/apps/files/tests/js/favoritespluginspec.js @@ -113,7 +113,7 @@ describe('OCA.Files.FavoritesPlugin tests', function() { shareOwner: 'user2' }]); - fileList.findFileEl('testdir').find('td a.name').click(); + fileList.findFileEl('testdir').find('td .nametext').click(); expect(OCA.Files.App.fileList.getCurrentDirectory()).toEqual('/somewhere/inside/subdir/testdir'); diff --git a/apps/files/tests/js/fileUploadSpec.js b/apps/files/tests/js/fileUploadSpec.js index 49b7265ced1..817654c4fa9 100644 --- a/apps/files/tests/js/fileUploadSpec.js +++ b/apps/files/tests/js/fileUploadSpec.js @@ -35,7 +35,14 @@ describe('OC.Upload tests', function() { $('#testArea').append( '<input type="file" id="file_upload_start" name="files[]" multiple="multiple">' + '<input type="hidden" id="upload_limit" name="upload_limit" value="10000000">' + // 10 MB - '<input type="hidden" id="free_space" name="free_space" value="50000000">' // 50 MB + '<input type="hidden" id="free_space" name="free_space" value="50000000">' + // 50 MB + // TODO: handlebars! + '<div id="new">' + + '<a>New</a>' + + '<ul>' + + '<li data-type="file" data-newname="New text file.txt"><p>Text file</p></li>' + + '</ul>' + + '</div>' ); $dummyUploader = $('#file_upload_start'); }); @@ -111,4 +118,54 @@ describe('OC.Upload tests', function() { ); }); }); + describe('New file', function() { + var $input; + var currentDirStub; + + beforeEach(function() { + OC.Upload.init(); + $('#new>a').click(); + $('#new li[data-type=file]').click(); + $input = $('#new input[type=text]'); + + currentDirStub = sinon.stub(FileList, 'getCurrentDirectory'); + currentDirStub.returns('testdir'); + }); + afterEach(function() { + currentDirStub.restore(); + }); + it('sets default text in field', function() { + expect($input.length).toEqual(1); + expect($input.val()).toEqual('New text file.txt'); + }); + it('creates file when enter is pressed', function() { + $input.val('somefile.txt'); + $input.trigger(new $.Event('keyup', {keyCode: 13})); + $input.parent('form').submit(); + expect(fakeServer.requests.length).toEqual(2); + + var request = fakeServer.requests[1]; + expect(request.method).toEqual('POST'); + expect(request.url).toEqual(OC.webroot + '/index.php/apps/files/ajax/newfile.php'); + var query = OC.parseQueryString(request.requestBody); + expect(query).toEqual({ + dir: 'testdir', + filename: 'somefile.txt' + }); + }); + it('prevents entering invalid file names', function() { + $input.val('..'); + $input.trigger(new $.Event('keyup', {keyCode: 13})); + $input.parent('form').submit(); + expect(fakeServer.requests.length).toEqual(1); + }); + it('prevents entering file names that already exist', function() { + var inListStub = sinon.stub(FileList, 'inList').returns(true); + $input.val('existing.txt'); + $input.trigger(new $.Event('keyup', {keyCode: 13})); + $input.parent('form').submit(); + expect(fakeServer.requests.length).toEqual(1); + inListStub.restore(); + }); + }); }); diff --git a/apps/files/tests/js/fileactionsSpec.js b/apps/files/tests/js/fileactionsSpec.js index 828aec9b6b9..1254843e66a 100644 --- a/apps/files/tests/js/fileactionsSpec.js +++ b/apps/files/tests/js/fileactionsSpec.js @@ -20,178 +20,225 @@ */ describe('OCA.Files.FileActions tests', function() { - var $filesTable, fileList; - var FileActions; + var fileList, fileActions; beforeEach(function() { // init horrible parameters var $body = $('#testArea'); $body.append('<input type="hidden" id="dir" value="/subdir"></input>'); $body.append('<input type="hidden" id="permissions" value="31"></input>'); + $body.append('<table id="filestable"><tbody id="fileList"></tbody></table>'); // dummy files table - $filesTable = $body.append('<table id="filestable"></table>'); - fileList = new OCA.Files.FileList($('#testArea')); - FileActions = new OCA.Files.FileActions(); - FileActions.registerDefaultActions(); + fileActions = new OCA.Files.FileActions(); + fileActions.registerAction({ + name: 'Testdropdown', + displayName: 'Testdropdowndisplay', + mime: 'all', + permissions: OC.PERMISSION_READ, + icon: function () { + return OC.imagePath('core', 'actions/download'); + } + }); + + fileActions.registerAction({ + name: 'Testinline', + displayName: 'Testinlinedisplay', + type: OCA.Files.FileActions.TYPE_INLINE, + mime: 'all', + permissions: OC.PERMISSION_READ + }); + + fileActions.registerAction({ + name: 'Testdefault', + displayName: 'Testdefaultdisplay', + mime: 'all', + permissions: OC.PERMISSION_READ + }); + fileActions.setDefault('all', 'Testdefault'); + fileList = new OCA.Files.FileList($body, { + fileActions: fileActions + }); }); afterEach(function() { - FileActions = null; + fileActions = null; fileList.destroy(); fileList = undefined; $('#dir, #permissions, #filestable').remove(); }); it('calling clear() clears file actions', function() { - FileActions.clear(); - expect(FileActions.actions).toEqual({}); - expect(FileActions.defaults).toEqual({}); - expect(FileActions.icons).toEqual({}); - expect(FileActions.currentFile).toBe(null); - }); - it('calling display() sets file actions', function() { - var fileData = { - id: 18, - type: 'file', - name: 'testName.txt', - mimetype: 'text/plain', - size: '1234', - etag: 'a01234c', - mtime: '123456' - }; - - // note: FileActions.display() is called implicitly - var $tr = fileList.add(fileData); - - // actions defined after call - expect($tr.find('.action.action-download').length).toEqual(1); - expect($tr.find('.action.action-download').attr('data-action')).toEqual('Download'); - expect($tr.find('.nametext .action.action-rename').length).toEqual(1); - expect($tr.find('.nametext .action.action-rename').attr('data-action')).toEqual('Rename'); - expect($tr.find('.action.delete').length).toEqual(1); - }); - it('calling display() twice correctly replaces file actions', function() { - var fileData = { - id: 18, - type: 'file', - name: 'testName.txt', - mimetype: 'text/plain', - size: '1234', - etag: 'a01234c', - mtime: '123456' - }; - var $tr = fileList.add(fileData); - - FileActions.display($tr.find('td.filename'), true, fileList); - FileActions.display($tr.find('td.filename'), true, fileList); - - // actions defined after cal - expect($tr.find('.action.action-download').length).toEqual(1); - expect($tr.find('.nametext .action.action-rename').length).toEqual(1); - expect($tr.find('.action.delete').length).toEqual(1); + fileActions.clear(); + expect(fileActions.actions).toEqual({}); + expect(fileActions.defaults).toEqual({}); + expect(fileActions.icons).toEqual({}); + expect(fileActions.currentFile).toBe(null); }); - it('redirects to download URL when clicking download', function() { - var redirectStub = sinon.stub(OC, 'redirect'); - var fileData = { - id: 18, - type: 'file', - name: 'testName.txt', - mimetype: 'text/plain', - size: '1234', - etag: 'a01234c', - mtime: '123456' - }; - var $tr = fileList.add(fileData); - FileActions.display($tr.find('td.filename'), true, fileList); - - $tr.find('.action-download').click(); - - expect(redirectStub.calledOnce).toEqual(true); - expect(redirectStub.getCall(0).args[0]).toEqual( - OC.webroot + - '/index.php/apps/files/ajax/download.php' + - '?dir=%2Fsubdir&files=testName.txt'); - redirectStub.restore(); - }); - it('takes the file\'s path into account when clicking download', function() { - var redirectStub = sinon.stub(OC, 'redirect'); - var fileData = { - id: 18, - type: 'file', - name: 'testName.txt', - path: '/anotherpath/there', - mimetype: 'text/plain', - size: '1234', - etag: 'a01234c', - mtime: '123456' - }; - var $tr = fileList.add(fileData); - FileActions.display($tr.find('td.filename'), true, fileList); - - $tr.find('.action-download').click(); - - expect(redirectStub.calledOnce).toEqual(true); - expect(redirectStub.getCall(0).args[0]).toEqual( - OC.webroot + '/index.php/apps/files/ajax/download.php' + - '?dir=%2Fanotherpath%2Fthere&files=testName.txt' - ); - redirectStub.restore(); - }); - it('deletes file when clicking delete', function() { - var deleteStub = sinon.stub(fileList, 'do_delete'); - var fileData = { - id: 18, - type: 'file', - name: 'testName.txt', - path: '/somepath/dir', - mimetype: 'text/plain', - size: '1234', - etag: 'a01234c', - mtime: '123456' - }; - var $tr = fileList.add(fileData); - FileActions.display($tr.find('td.filename'), true, fileList); - - $tr.find('.action.delete').click(); - - expect(deleteStub.calledOnce).toEqual(true); - expect(deleteStub.getCall(0).args[0]).toEqual('testName.txt'); - expect(deleteStub.getCall(0).args[1]).toEqual('/somepath/dir'); - deleteStub.restore(); + describe('displaying actions', function() { + var $tr; + + beforeEach(function() { + var fileData = { + id: 18, + type: 'file', + name: 'testName.txt', + mimetype: 'text/plain', + size: '1234', + etag: 'a01234c', + mtime: '123456', + permissions: OC.PERMISSION_READ | OC.PERMISSION_UPDATE + }; + + // note: FileActions.display() is called implicitly + $tr = fileList.add(fileData); + }); + it('renders inline file actions', function() { + // actions defined after call + expect($tr.find('.action.action-testinline').length).toEqual(1); + expect($tr.find('.action.action-testinline').attr('data-action')).toEqual('Testinline'); + }); + it('does not render dropdown actions', function() { + expect($tr.find('.action.action-testdropdown').length).toEqual(0); + }); + it('does not render default action', function() { + expect($tr.find('.action.action-testdefault').length).toEqual(0); + }); + it('replaces file actions when displayed twice', function() { + fileActions.display($tr.find('td.filename'), true, fileList); + fileActions.display($tr.find('td.filename'), true, fileList); + + expect($tr.find('.action.action-testinline').length).toEqual(1); + }); + it('renders actions menu trigger', function() { + expect($tr.find('.action.action-menu').length).toEqual(1); + expect($tr.find('.action.action-menu').attr('data-action')).toEqual('menu'); + }); + it('only renders actions relevant to the mime type', function() { + fileActions.registerAction({ + name: 'Match', + displayName: 'MatchDisplay', + type: OCA.Files.FileActions.TYPE_INLINE, + mime: 'text/plain', + permissions: OC.PERMISSION_READ + }); + fileActions.registerAction({ + name: 'Nomatch', + displayName: 'NoMatchDisplay', + type: OCA.Files.FileActions.TYPE_INLINE, + mime: 'application/octet-stream', + permissions: OC.PERMISSION_READ + }); + + fileActions.display($tr.find('td.filename'), true, fileList); + expect($tr.find('.action.action-match').length).toEqual(1); + expect($tr.find('.action.action-nomatch').length).toEqual(0); + }); + it('only renders actions relevant to the permissions', function() { + fileActions.registerAction({ + name: 'Match', + displayName: 'MatchDisplay', + type: OCA.Files.FileActions.TYPE_INLINE, + mime: 'text/plain', + permissions: OC.PERMISSION_UPDATE + }); + fileActions.registerAction({ + name: 'Nomatch', + displayName: 'NoMatchDisplay', + type: OCA.Files.FileActions.TYPE_INLINE, + mime: 'text/plain', + permissions: OC.PERMISSION_DELETE + }); + + fileActions.display($tr.find('td.filename'), true, fileList); + expect($tr.find('.action.action-match').length).toEqual(1); + expect($tr.find('.action.action-nomatch').length).toEqual(0); + }); }); - it('passes context to action handler', function() { - var actionStub = sinon.stub(); - var fileData = { - id: 18, - type: 'file', - name: 'testName.txt', - mimetype: 'text/plain', - size: '1234', - etag: 'a01234c', - mtime: '123456' - }; - var $tr = fileList.add(fileData); - FileActions.register( - 'all', - 'Test', - OC.PERMISSION_READ, - OC.imagePath('core', 'actions/test'), - actionStub - ); - FileActions.display($tr.find('td.filename'), true, fileList); - $tr.find('.action-test').click(); - expect(actionStub.calledOnce).toEqual(true); - expect(actionStub.getCall(0).args[0]).toEqual('testName.txt'); - var context = actionStub.getCall(0).args[1]; - expect(context.$file.is($tr)).toEqual(true); - expect(context.fileList).toBeDefined(); - expect(context.fileActions).toBeDefined(); - expect(context.dir).toEqual('/subdir'); - - // when data-path is defined - actionStub.reset(); - $tr.attr('data-path', '/somepath'); - $tr.find('.action-test').click(); - context = actionStub.getCall(0).args[1]; - expect(context.dir).toEqual('/somepath'); + describe('action handler', function() { + var actionStub, $tr, clock; + + beforeEach(function() { + clock = sinon.useFakeTimers(); + var fileData = { + id: 18, + type: 'file', + name: 'testName.txt', + mimetype: 'text/plain', + size: '1234', + etag: 'a01234c', + mtime: '123456' + }; + actionStub = sinon.stub(); + fileActions.registerAction({ + name: 'Test', + type: OCA.Files.FileActions.TYPE_INLINE, + mime: 'all', + icon: OC.imagePath('core', 'actions/test'), + permissions: OC.PERMISSION_READ, + actionHandler: actionStub + }); + $tr = fileList.add(fileData); + }); + afterEach(function() { + OC.hideMenus(); + // jump past animations + clock.tick(1000); + clock.restore(); + }); + it('passes context to action handler', function() { + $tr.find('.action-test').click(); + expect(actionStub.calledOnce).toEqual(true); + expect(actionStub.getCall(0).args[0]).toEqual('testName.txt'); + var context = actionStub.getCall(0).args[1]; + expect(context.$file.is($tr)).toEqual(true); + expect(context.fileList).toBeDefined(); + expect(context.fileActions).toBeDefined(); + expect(context.dir).toEqual('/subdir'); + expect(context.fileInfoModel.get('name')).toEqual('testName.txt'); + + // when data-path is defined + actionStub.reset(); + $tr.attr('data-path', '/somepath'); + $tr.find('.action-test').click(); + context = actionStub.getCall(0).args[1]; + expect(context.dir).toEqual('/somepath'); + }); + it('also triggers action handler when calling triggerAction()', function() { + var model = new OCA.Files.FileInfoModel({ + id: 1, + name: 'Test.txt', + path: '/subdir', + mime: 'text/plain', + permissions: 31 + }); + fileActions.triggerAction('Test', model, fileList); + + expect(actionStub.calledOnce).toEqual(true); + expect(actionStub.getCall(0).args[0]).toEqual('Test.txt'); + expect(actionStub.getCall(0).args[1].fileList).toEqual(fileList); + expect(actionStub.getCall(0).args[1].fileActions).toEqual(fileActions); + expect(actionStub.getCall(0).args[1].fileInfoModel).toEqual(model); + }); + describe('actions menu', function() { + it('shows actions menu inside row when clicking the menu trigger', function() { + expect($tr.find('td.filename .fileActionsMenu').length).toEqual(0); + $tr.find('.action-menu').click(); + expect($tr.find('td.filename .fileActionsMenu').length).toEqual(1); + }); + it('shows highlight on current row', function() { + $tr.find('.action-menu').click(); + expect($tr.hasClass('mouseOver')).toEqual(true); + }); + it('cleans up after hiding', function() { + var slideUpStub = sinon.stub($.fn, 'slideUp'); + $tr.find('.action-menu').click(); + expect($tr.find('.fileActionsMenu').length).toEqual(1); + OC.hideMenus(); + // sliding animation + expect(slideUpStub.calledOnce).toEqual(true); + slideUpStub.getCall(0).args[1](); + expect($tr.hasClass('mouseOver')).toEqual(false); + expect($tr.find('.fileActionsMenu').length).toEqual(0); + }); + }); }); describe('custom rendering', function() { var $tr; @@ -209,10 +256,11 @@ describe('OCA.Files.FileActions tests', function() { }); it('regular function', function() { var actionStub = sinon.stub(); - FileActions.registerAction({ + fileActions.registerAction({ name: 'Test', displayName: '', mime: 'all', + type: OCA.Files.FileActions.TYPE_INLINE, permissions: OC.PERMISSION_READ, render: function(actionSpec, isDefault, context) { expect(actionSpec.name).toEqual('Test'); @@ -224,13 +272,13 @@ describe('OCA.Files.FileActions tests', function() { expect(context.fileList).toEqual(fileList); expect(context.$file[0]).toEqual($tr[0]); - var $customEl = $('<a href="#"><span>blabli</span><span>blabla</span></a>'); + var $customEl = $('<a class="action action-test" href="#"><span>blabli</span><span>blabla</span></a>'); $tr.find('td:first').append($customEl); return $customEl; }, actionHandler: actionStub }); - FileActions.display($tr.find('td.filename'), true, fileList); + fileActions.display($tr.find('td.filename'), true, fileList); var $actionEl = $tr.find('td:first .action-test'); expect($actionEl.length).toEqual(1); @@ -264,20 +312,22 @@ describe('OCA.Files.FileActions tests', function() { var actions2 = new OCA.Files.FileActions(); var actionStub1 = sinon.stub(); var actionStub2 = sinon.stub(); - actions1.register( - 'all', - 'Test', - OC.PERMISSION_READ, - OC.imagePath('core', 'actions/test'), - actionStub1 - ); - actions2.register( - 'all', - 'Test2', - OC.PERMISSION_READ, - OC.imagePath('core', 'actions/test'), - actionStub2 - ); + actions1.registerAction({ + name: 'Test', + type: OCA.Files.FileActions.TYPE_INLINE, + mime: 'all', + permissions: OC.PERMISSION_READ, + icon: OC.imagePath('core', 'actions/test'), + actionHandler: actionStub1 + }); + actions2.registerAction({ + name: 'Test2', + type: OCA.Files.FileActions.TYPE_INLINE, + mime: 'all', + permissions: OC.PERMISSION_READ, + icon: OC.imagePath('core', 'actions/test'), + actionHandler: actionStub2 + }); actions2.merge(actions1); actions2.display($tr.find('td.filename'), true, fileList); @@ -300,20 +350,22 @@ describe('OCA.Files.FileActions tests', function() { var actions2 = new OCA.Files.FileActions(); var actionStub1 = sinon.stub(); var actionStub2 = sinon.stub(); - actions1.register( - 'all', - 'Test', - OC.PERMISSION_READ, - OC.imagePath('core', 'actions/test'), - actionStub1 - ); - actions2.register( - 'all', - 'Test', // override - OC.PERMISSION_READ, - OC.imagePath('core', 'actions/test'), - actionStub2 - ); + actions1.registerAction({ + name: 'Test', + type: OCA.Files.FileActions.TYPE_INLINE, + mime: 'all', + permissions: OC.PERMISSION_READ, + icon: OC.imagePath('core', 'actions/test'), + actionHandler: actionStub1 + }); + actions2.registerAction({ + name: 'Test', // override + mime: 'all', + type: OCA.Files.FileActions.TYPE_INLINE, + permissions: OC.PERMISSION_READ, + icon: OC.imagePath('core', 'actions/test'), + actionHandler: actionStub2 + }); actions1.merge(actions2); actions1.display($tr.find('td.filename'), true, fileList); @@ -329,24 +381,26 @@ describe('OCA.Files.FileActions tests', function() { var actions2 = new OCA.Files.FileActions(); var actionStub1 = sinon.stub(); var actionStub2 = sinon.stub(); - actions1.register( - 'all', - 'Test', - OC.PERMISSION_READ, - OC.imagePath('core', 'actions/test'), - actionStub1 - ); + actions1.registerAction({ + mime: 'all', + name: 'Test', + type: OCA.Files.FileActions.TYPE_INLINE, + permissions: OC.PERMISSION_READ, + icon: OC.imagePath('core', 'actions/test'), + actionHandler: actionStub1 + }); actions1.merge(actions2); // late override - actions1.register( - 'all', - 'Test', // override - OC.PERMISSION_READ, - OC.imagePath('core', 'actions/test'), - actionStub2 - ); + actions1.registerAction({ + mime: 'all', + name: 'Test', // override + type: OCA.Files.FileActions.TYPE_INLINE, + permissions: OC.PERMISSION_READ, + icon: OC.imagePath('core', 'actions/test'), + actionHandler: actionStub2 + }); actions1.display($tr.find('td.filename'), true, fileList); @@ -361,25 +415,27 @@ describe('OCA.Files.FileActions tests', function() { var actions2 = new OCA.Files.FileActions(); var actionStub1 = sinon.stub(); var actionStub2 = sinon.stub(); - actions1.register( - 'all', - 'Test', - OC.PERMISSION_READ, - OC.imagePath('core', 'actions/test'), - actionStub1 - ); + actions1.registerAction({ + mime: 'all', + name: 'Test', + type: OCA.Files.FileActions.TYPE_INLINE, + permissions: OC.PERMISSION_READ, + icon: OC.imagePath('core', 'actions/test'), + actionHandler: actionStub1 + }); // copy the Test action to actions2 actions2.merge(actions1); // late override - actions2.register( - 'all', - 'Test', // override - OC.PERMISSION_READ, - OC.imagePath('core', 'actions/test'), - actionStub2 - ); + actions2.registerAction({ + mime: 'all', + name: 'Test', // override + type: OCA.Files.FileActions.TYPE_INLINE, + permissions: OC.PERMISSION_READ, + icon: OC.imagePath('core', 'actions/test'), + actionHandler: actionStub2 + }); // check if original actions still call the correct handler actions1.display($tr.find('td.filename'), true, fileList); @@ -402,42 +458,45 @@ describe('OCA.Files.FileActions tests', function() { it('notifies update event handlers once after multiple changes', function() { var actionStub = sinon.stub(); var handler = sinon.stub(); - FileActions.on('registerAction', handler); - FileActions.register( - 'all', - 'Test', - OC.PERMISSION_READ, - OC.imagePath('core', 'actions/test'), - actionStub - ); - FileActions.register( - 'all', - 'Test2', - OC.PERMISSION_READ, - OC.imagePath('core', 'actions/test'), - actionStub - ); + fileActions.on('registerAction', handler); + fileActions.registerAction({ + mime: 'all', + name: 'Test', + type: OCA.Files.FileActions.TYPE_INLINE, + permissions: OC.PERMISSION_READ, + icon: OC.imagePath('core', 'actions/test'), + actionHandler: actionStub + }); + fileActions.registerAction({ + mime: 'all', + name: 'Test2', + permissions: OC.PERMISSION_READ, + icon: OC.imagePath('core', 'actions/test'), + actionHandler: actionStub + }); expect(handler.calledTwice).toEqual(true); }); it('does not notifies update event handlers after unregistering', function() { var actionStub = sinon.stub(); var handler = sinon.stub(); - FileActions.on('registerAction', handler); - FileActions.off('registerAction', handler); - FileActions.register( - 'all', - 'Test', - OC.PERMISSION_READ, - OC.imagePath('core', 'actions/test'), - actionStub - ); - FileActions.register( - 'all', - 'Test2', - OC.PERMISSION_READ, - OC.imagePath('core', 'actions/test'), - actionStub - ); + fileActions.on('registerAction', handler); + fileActions.off('registerAction', handler); + fileActions.registerAction({ + mime: 'all', + name: 'Test', + type: OCA.Files.FileActions.TYPE_INLINE, + permissions: OC.PERMISSION_READ, + icon: OC.imagePath('core', 'actions/test'), + actionHandler: actionStub + }); + fileActions.registerAction({ + mime: 'all', + name: 'Test2', + type: OCA.Files.FileActions.TYPE_INLINE, + permissions: OC.PERMISSION_READ, + icon: OC.imagePath('core', 'actions/test'), + actionHandler: actionStub + }); expect(handler.notCalled).toEqual(true); }); }); diff --git a/apps/files/tests/js/fileactionsmenuSpec.js b/apps/files/tests/js/fileactionsmenuSpec.js new file mode 100644 index 00000000000..0cfd12a2d04 --- /dev/null +++ b/apps/files/tests/js/fileactionsmenuSpec.js @@ -0,0 +1,273 @@ +/** +* ownCloud +* +* @author Vincent Petry +* @copyright 2015 Vincent Petry <pvince81@owncloud.com> +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +describe('OCA.Files.FileActionsMenu tests', function() { + var fileList, fileActions, menu, actionStub, $tr; + + beforeEach(function() { + // init horrible parameters + var $body = $('#testArea'); + $body.append('<input type="hidden" id="dir" value="/subdir"></input>'); + $body.append('<input type="hidden" id="permissions" value="31"></input>'); + // dummy files table + actionStub = sinon.stub(); + fileActions = new OCA.Files.FileActions(); + fileList = new OCA.Files.FileList($body, { + fileActions: fileActions + }); + + fileActions.registerAction({ + name: 'Testdropdown', + displayName: 'Testdropdowndisplay', + mime: 'all', + permissions: OC.PERMISSION_READ, + icon: function () { + return OC.imagePath('core', 'actions/download'); + }, + actionHandler: actionStub + }); + + fileActions.registerAction({ + name: 'Testdropdownnoicon', + displayName: 'Testdropdowndisplaynoicon', + mime: 'all', + permissions: OC.PERMISSION_READ, + actionHandler: actionStub + }); + + fileActions.registerAction({ + name: 'Testinline', + displayName: 'Testinlinedisplay', + type: OCA.Files.FileActions.TYPE_INLINE, + mime: 'all', + permissions: OC.PERMISSION_READ + }); + + fileActions.registerAction({ + name: 'Testdefault', + displayName: 'Testdefaultdisplay', + mime: 'all', + permissions: OC.PERMISSION_READ + }); + fileActions.setDefault('all', 'Testdefault'); + + var fileData = { + id: 18, + type: 'file', + name: 'testName.txt', + mimetype: 'text/plain', + size: '1234', + etag: 'a01234c', + mtime: '123456' + }; + $tr = fileList.add(fileData); + + var menuContext = { + $file: $tr, + fileList: fileList, + fileActions: fileActions, + dir: fileList.getCurrentDirectory() + }; + menu = new OCA.Files.FileActionsMenu(); + menu.show(menuContext); + }); + afterEach(function() { + fileActions = null; + fileList.destroy(); + fileList = undefined; + menu.remove(); + $('#dir, #permissions, #filestable').remove(); + }); + + describe('rendering', function() { + it('renders dropdown actions in menu', function() { + var $action = menu.$el.find('a[data-action=Testdropdown]'); + expect($action.length).toEqual(1); + expect($action.find('img').attr('src')) + .toEqual(OC.imagePath('core', 'actions/download')); + expect($action.find('.no-icon').length).toEqual(0); + + $action = menu.$el.find('a[data-action=Testdropdownnoicon]'); + expect($action.length).toEqual(1); + expect($action.find('img').length).toEqual(0); + expect($action.find('.no-icon').length).toEqual(1); + }); + it('does not render default actions', function() { + expect(menu.$el.find('a[data-action=Testdefault]').length).toEqual(0); + }); + it('does not render inline actions', function() { + expect(menu.$el.find('a[data-action=Testinline]').length).toEqual(0); + }); + it('only renders actions relevant to the mime type', function() { + fileActions.registerAction({ + name: 'Match', + displayName: 'MatchDisplay', + mime: 'text/plain', + permissions: OC.PERMISSION_READ + }); + fileActions.registerAction({ + name: 'Nomatch', + displayName: 'NoMatchDisplay', + mime: 'application/octet-stream', + permissions: OC.PERMISSION_READ + }); + + menu.render(); + expect(menu.$el.find('a[data-action=Match]').length).toEqual(1); + expect(menu.$el.find('a[data-action=NoMatch]').length).toEqual(0); + }); + it('only renders actions relevant to the permissions', function() { + fileActions.registerAction({ + name: 'Match', + displayName: 'MatchDisplay', + mime: 'text/plain', + permissions: OC.PERMISSION_UPDATE + }); + fileActions.registerAction({ + name: 'Nomatch', + displayName: 'NoMatchDisplay', + mime: 'text/plain', + permissions: OC.PERMISSION_DELETE + }); + + menu.render(); + expect(menu.$el.find('a[data-action=Match]').length).toEqual(1); + expect(menu.$el.find('a[data-action=NoMatch]').length).toEqual(0); + }); + }); + + describe('action handler', function() { + it('calls action handler when clicking menu item', function() { + var $action = menu.$el.find('a[data-action=Testdropdown]'); + $action.click(); + + expect(actionStub.calledOnce).toEqual(true); + expect(actionStub.getCall(0).args[0]).toEqual('testName.txt'); + expect(actionStub.getCall(0).args[1].$file[0]).toEqual($tr[0]); + expect(actionStub.getCall(0).args[1].fileList).toEqual(fileList); + expect(actionStub.getCall(0).args[1].fileActions).toEqual(fileActions); + expect(actionStub.getCall(0).args[1].dir).toEqual('/subdir'); + }); + }); + describe('default actions from registerDefaultActions', function() { + beforeEach(function() { + fileActions.clear(); + fileActions.registerDefaultActions(); + }); + it('redirects to download URL when clicking download', function() { + var redirectStub = sinon.stub(OC, 'redirect'); + var fileData = { + id: 18, + type: 'file', + name: 'testName.txt', + mimetype: 'text/plain', + size: '1234', + etag: 'a01234c', + mtime: '123456' + }; + var $tr = fileList.add(fileData); + fileActions.display($tr.find('td.filename'), true, fileList); + + var menuContext = { + $file: $tr, + fileList: fileList, + fileActions: fileActions, + dir: fileList.getCurrentDirectory() + }; + menu = new OCA.Files.FileActionsMenu(); + menu.show(menuContext); + + menu.$el.find('.action-download').click(); + + expect(redirectStub.calledOnce).toEqual(true); + expect(redirectStub.getCall(0).args[0]).toContain( + OC.webroot + + '/index.php/apps/files/ajax/download.php' + + '?dir=%2Fsubdir&files=testName.txt'); + redirectStub.restore(); + }); + it('takes the file\'s path into account when clicking download', function() { + var redirectStub = sinon.stub(OC, 'redirect'); + var fileData = { + id: 18, + type: 'file', + name: 'testName.txt', + path: '/anotherpath/there', + mimetype: 'text/plain', + size: '1234', + etag: 'a01234c', + mtime: '123456' + }; + var $tr = fileList.add(fileData); + fileActions.display($tr.find('td.filename'), true, fileList); + + var menuContext = { + $file: $tr, + fileList: fileList, + fileActions: fileActions, + dir: '/anotherpath/there' + }; + menu = new OCA.Files.FileActionsMenu(); + menu.show(menuContext); + + menu.$el.find('.action-download').click(); + + expect(redirectStub.calledOnce).toEqual(true); + expect(redirectStub.getCall(0).args[0]).toContain( + OC.webroot + '/index.php/apps/files/ajax/download.php' + + '?dir=%2Fanotherpath%2Fthere&files=testName.txt' + ); + redirectStub.restore(); + }); + it('deletes file when clicking delete', function() { + var deleteStub = sinon.stub(fileList, 'do_delete'); + var fileData = { + id: 18, + type: 'file', + name: 'testName.txt', + path: '/somepath/dir', + mimetype: 'text/plain', + size: '1234', + etag: 'a01234c', + mtime: '123456' + }; + var $tr = fileList.add(fileData); + fileActions.display($tr.find('td.filename'), true, fileList); + + var menuContext = { + $file: $tr, + fileList: fileList, + fileActions: fileActions, + dir: '/somepath/dir' + }; + menu = new OCA.Files.FileActionsMenu(); + menu.show(menuContext); + + menu.$el.find('.action-delete').click(); + + expect(deleteStub.calledOnce).toEqual(true); + expect(deleteStub.getCall(0).args[0]).toEqual('testName.txt'); + expect(deleteStub.getCall(0).args[1]).toEqual('/somepath/dir'); + deleteStub.restore(); + }); + }); +}); + diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index 153cbe52c10..7ed60084fa9 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -77,8 +77,8 @@ describe('OCA.Files.FileList tests', function() { '<th id="headerName" class="hidden column-name">' + '<input type="checkbox" id="select_all_files" class="select-all">' + '<a class="name columntitle" data-sort="name"><span>Name</span><span class="sort-indicator"></span></a>' + - '<span class="selectedActions hidden">' + - '<a href class="download">Download</a>' + + '<span id="selectedActionsList" class="selectedActions hidden">' + + '<a href class="download"><img src="actions/download.svg">Download</a>' + '<a href class="delete-selected">Delete</a></span>' + '</th>' + '<th class="hidden column-size"><a class="columntitle" data-sort="size"><span class="sort-indicator"></span></a></th>' + @@ -87,7 +87,8 @@ describe('OCA.Files.FileList tests', function() { '<tbody id="fileList"></tbody>' + '<tfoot></tfoot>' + '</table>' + - '<div id="emptycontent">Empty content message</div>' + + // TODO: move to handlebars template + '<div id="emptycontent"><h2>Empty content message</h2><p class="uploadmessage">Upload message</p></div>' + '<div class="nofilterresults hidden"></div>' + '</div>' ); @@ -455,19 +456,19 @@ describe('OCA.Files.FileList tests', function() { expect(notificationStub.notCalled).toEqual(true); }); - it('shows spinner on files to be deleted', function() { + it('shows busy state on files to be deleted', function() { fileList.setFiles(testFiles); doDelete(); - expect(fileList.findFileEl('One.txt').find('.icon-loading-small:not(.icon-delete)').length).toEqual(1); - expect(fileList.findFileEl('Three.pdf').find('.icon-delete:not(.icon-loading-small)').length).toEqual(1); + expect(fileList.findFileEl('One.txt').hasClass('busy')).toEqual(true); + expect(fileList.findFileEl('Three.pdf').hasClass('busy')).toEqual(false); }); - it('shows spinner on all files when deleting all', function() { + it('shows busy state on all files when deleting all', function() { fileList.setFiles(testFiles); fileList.do_delete(); - expect(fileList.$fileList.find('tr .icon-loading-small:not(.icon-delete)').length).toEqual(4); + expect(fileList.$fileList.find('tr.busy').length).toEqual(4); }); it('updates summary when deleting last file', function() { var $summary; @@ -624,7 +625,7 @@ describe('OCA.Files.FileList tests', function() { doCancelRename(); expect($summary.find('.info').text()).toEqual('1 folder and 3 files'); }); - it('Hides actions while rename in progress', function() { + it('Shows busy state while rename in progress', function() { var $tr; doRename(); @@ -633,8 +634,7 @@ describe('OCA.Files.FileList tests', function() { expect($tr.length).toEqual(1); expect(fileList.findFileEl('One.txt').length).toEqual(0); // file actions are hidden - expect($tr.find('.action').hasClass('hidden')).toEqual(true); - expect($tr.find('.fileactions').hasClass('hidden')).toEqual(true); + expect($tr.hasClass('busy')).toEqual(true); // input and form are gone expect(fileList.$fileList.find('input.filename').length).toEqual(0); @@ -696,7 +696,7 @@ describe('OCA.Files.FileList tests', function() { expect(fileList.findFileEl('One.txt').length).toEqual(1); expect(OC.TestUtil.getImageUrl(fileList.findFileEl('One.txt').find('.thumbnail'))) - .toEqual(OC.imagePath('core', 'filetypes/file.svg')); + .toEqual(OC.imagePath('core', 'filetypes/text.svg')); }); }); describe('Moving files', function() { @@ -815,7 +815,7 @@ describe('OCA.Files.FileList tests', function() { expect(notificationStub.getCall(0).args[0]).toEqual('Error while moving file'); expect(OC.TestUtil.getImageUrl(fileList.findFileEl('One.txt').find('.thumbnail'))) - .toEqual(OC.imagePath('core', 'filetypes/file.svg')); + .toEqual(OC.imagePath('core', 'filetypes/text.svg')); }); }); describe('List rendering', function() { @@ -845,13 +845,15 @@ describe('OCA.Files.FileList tests', function() { fileList.setFiles([]); expect($('#filestable thead th').hasClass('hidden')).toEqual(true); expect($('#emptycontent').hasClass('hidden')).toEqual(false); + expect($('#emptycontent .uploadmessage').hasClass('hidden')).toEqual(false); expect(fileList.$el.find('.summary').hasClass('hidden')).toEqual(true); }); - it('hides headers, empty content message, and summary when list is empty and user has no creation permission', function(){ + it('hides headers, upload message, and summary when list is empty and user has no creation permission', function(){ $('#permissions').val(0); fileList.setFiles([]); expect($('#filestable thead th').hasClass('hidden')).toEqual(true); - expect($('#emptycontent').hasClass('hidden')).toEqual(true); + expect($('#emptycontent').hasClass('hidden')).toEqual(false); + expect($('#emptycontent .uploadmessage').hasClass('hidden')).toEqual(true); expect(fileList.$el.find('.summary').hasClass('hidden')).toEqual(true); }); it('calling findFileEl() can find existing file element', function() { @@ -1158,7 +1160,8 @@ describe('OCA.Files.FileList tests', function() { var fileData = { type: 'file', name: 'test dir', - icon: OC.webroot + '/core/img/filetypes/application-pdf.svg' + icon: OC.webroot + '/core/img/filetypes/application-pdf.svg', + mimetype: 'application/pdf' }; var $tr = fileList.add(fileData); var $imgDiv = $tr.find('td.filename .thumbnail'); @@ -1276,6 +1279,28 @@ describe('OCA.Files.FileList tests', function() { fakeServer.respond(); expect(fileList.getCurrentDirectory()).toEqual('/'); }); + it('switches to root dir when current directory is forbidden', function() { + fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2funexist/, [ + 403, { + "Content-Type": "application/json" + }, + '' + ]); + fileList.changeDirectory('/unexist'); + fakeServer.respond(); + expect(fileList.getCurrentDirectory()).toEqual('/'); + }); + it('switches to root dir when current directory is unavailable', function() { + fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2funexist/, [ + 500, { + "Content-Type": "application/json" + }, + '' + ]); + fileList.changeDirectory('/unexist'); + fakeServer.respond(); + expect(fileList.getCurrentDirectory()).toEqual('/'); + }); it('shows mask before loading file list then hides it at the end', function() { var showMaskStub = sinon.stub(fileList, 'showMask'); var hideMaskStub = sinon.stub(fileList, 'hideMask'); @@ -1581,7 +1606,7 @@ describe('OCA.Files.FileList tests', function() { fileList.findFileEl('One.txt').find('input:checkbox').click(); fileList.findFileEl('Three.pdf').find('input:checkbox').click(); fileList.findFileEl('somedir').find('input:checkbox').click(); - expect($summary.text()).toEqual('1 folder & 2 files'); + expect($summary.text()).toEqual('1 folder and 2 files'); }); it('Unselecting files hides selection summary', function() { var $summary = $('#headerName a.name>span:first'); @@ -1749,7 +1774,7 @@ describe('OCA.Files.FileList tests', function() { var redirectStub = sinon.stub(OC, 'redirect'); $('.selectedActions .download').click(); expect(redirectStub.calledOnce).toEqual(true); - expect(redirectStub.getCall(0).args[0]).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=%5B%22One.txt%22%2C%22Three.pdf%22%2C%22somedir%22%5D'); + expect(redirectStub.getCall(0).args[0]).toContain(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=%5B%22One.txt%22%2C%22Three.pdf%22%2C%22somedir%22%5D'); redirectStub.restore(); }); it('Downloads root folder when all selected in root folder', function() { @@ -1758,7 +1783,7 @@ describe('OCA.Files.FileList tests', function() { var redirectStub = sinon.stub(OC, 'redirect'); $('.selectedActions .download').click(); expect(redirectStub.calledOnce).toEqual(true); - expect(redirectStub.getCall(0).args[0]).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2F&files='); + expect(redirectStub.getCall(0).args[0]).toContain(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2F&files='); redirectStub.restore(); }); it('Downloads parent folder when all selected in subfolder', function() { @@ -1766,7 +1791,7 @@ describe('OCA.Files.FileList tests', function() { var redirectStub = sinon.stub(OC, 'redirect'); $('.selectedActions .download').click(); expect(redirectStub.calledOnce).toEqual(true); - expect(redirectStub.getCall(0).args[0]).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2F&files=subdir'); + expect(redirectStub.getCall(0).args[0]).toContain(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2F&files=subdir'); redirectStub.restore(); }); }); @@ -1844,8 +1869,13 @@ describe('OCA.Files.FileList tests', function() { }); }) }); - describe('File actions', function() { - it('Clicking on a file name will trigger default action', function() { + describe('Details sidebar', function() { + beforeEach(function() { + fileList.setFiles(testFiles); + }); + it('Clicking on a file row will trigger file action if no details view configured', function() { + fileList._detailsView = null; + var updateDetailsViewStub = sinon.stub(fileList, '_updateDetailsView'); var actionStub = sinon.stub(); fileList.setFiles(testFiles); fileList.fileActions.register( @@ -1862,6 +1892,60 @@ describe('OCA.Files.FileList tests', function() { var $tr = fileList.findFileEl('One.txt'); $tr.find('td.filename>a.name').click(); expect(actionStub.calledOnce).toEqual(true); + expect(updateDetailsViewStub.notCalled).toEqual(true); + updateDetailsViewStub.restore(); + }); + it('Clicking on a file row will trigger details sidebar', function() { + fileList.fileActions.setDefault('text/plain', 'Test'); + var $tr = fileList.findFileEl('One.txt'); + $tr.find('td.filename>a.name').click(); + expect($tr.hasClass('highlighted')).toEqual(true); + + expect(fileList._detailsView.getFileInfo().id).toEqual(1); + }); + it('Clicking outside to deselect a file row will trigger details sidebar', function() { + var $tr = fileList.findFileEl('One.txt'); + $tr.find('td.filename>a.name').click(); + + fileList.$el.find('tfoot').click(); + + expect($tr.hasClass('highlighted')).toEqual(false); + expect(fileList._detailsView.getFileInfo()).toEqual(null); + }); + it('returns the currently selected model instance when calling getModelForFile', function() { + var $tr = fileList.findFileEl('One.txt'); + $tr.find('td.filename>a.name').click(); + + var model1 = fileList.getModelForFile('One.txt'); + var model2 = fileList.getModelForFile('One.txt'); + model1.set('test', true); + + // it's the same model + expect(model2).toEqual(model1); + + var model3 = fileList.getModelForFile($tr); + expect(model3).toEqual(model1); + }); + }); + describe('File actions', function() { + it('Clicking on a file name will trigger default action', function() { + var actionStub = sinon.stub(); + fileList.setFiles(testFiles); + fileList.fileActions.registerAction({ + mime: 'text/plain', + name: 'Test', + type: OCA.Files.FileActions.TYPE_INLINE, + permissions: OC.PERMISSION_ALL, + icon: function() { + // Specify icon for hitory button + return OC.imagePath('core','actions/history'); + }, + actionHandler: actionStub + }); + fileList.fileActions.setDefault('text/plain', 'Test'); + var $tr = fileList.findFileEl('One.txt'); + $tr.find('td.filename .nametext').click(); + expect(actionStub.calledOnce).toEqual(true); expect(actionStub.getCall(0).args[0]).toEqual('One.txt'); var context = actionStub.getCall(0).args[1]; expect(context.$file.is($tr)).toEqual(true); @@ -1888,16 +1972,17 @@ describe('OCA.Files.FileList tests', function() { fileList.$fileList.on('fileActionsReady', readyHandler); - fileList.fileActions.register( - 'text/plain', - 'Test', - OC.PERMISSION_ALL, - function() { + fileList.fileActions.registerAction({ + mime: 'text/plain', + name: 'Test', + type: OCA.Files.FileActions.TYPE_INLINE, + permissions: OC.PERMISSION_ALL, + icon: function() { // Specify icon for hitory button return OC.imagePath('core','actions/history'); }, - actionStub - ); + actionHandler: actionStub + }); var $tr = fileList.findFileEl('One.txt'); expect($tr.find('.action-test').length).toEqual(0); expect(readyHandler.notCalled).toEqual(true); @@ -2186,6 +2271,8 @@ describe('OCA.Files.FileList tests', function() { }); }); describe('Handeling errors', function () { + var redirectStub; + beforeEach(function () { redirectStub = sinon.stub(OC, 'redirect'); @@ -2211,4 +2298,36 @@ describe('OCA.Files.FileList tests', function() { expect(redirectStub.calledWith(OC.generateUrl('apps/files'))).toEqual(true); }); }); + describe('showFileBusyState', function() { + var $tr; + + beforeEach(function() { + fileList.setFiles(testFiles); + $tr = fileList.findFileEl('Two.jpg'); + }); + it('shows spinner on busy rows', function() { + fileList.showFileBusyState('Two.jpg', true); + expect($tr.hasClass('busy')).toEqual(true); + expect(OC.TestUtil.getImageUrl($tr.find('.thumbnail'))) + .toEqual(OC.imagePath('core', 'loading.gif')); + + fileList.showFileBusyState('Two.jpg', false); + expect($tr.hasClass('busy')).toEqual(false); + expect(OC.TestUtil.getImageUrl($tr.find('.thumbnail'))) + .toEqual(OC.imagePath('core', 'filetypes/image.svg')); + }); + it('accepts multiple input formats', function() { + _.each([ + 'Two.jpg', + ['Two.jpg'], + $tr, + [$tr] + ], function(testCase) { + fileList.showFileBusyState(testCase, true); + expect($tr.hasClass('busy')).toEqual(true); + fileList.showFileBusyState(testCase, false); + expect($tr.hasClass('busy')).toEqual(false); + }); + }); + }); }); diff --git a/apps/files/tests/js/mainfileinfodetailviewSpec.js b/apps/files/tests/js/mainfileinfodetailviewSpec.js new file mode 100644 index 00000000000..ca7384f6207 --- /dev/null +++ b/apps/files/tests/js/mainfileinfodetailviewSpec.js @@ -0,0 +1,175 @@ +/** +* ownCloud +* +* @author Vincent Petry +* @copyright 2015 Vincent Petry <pvince81@owncloud.com> +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +describe('OCA.Files.MainFileInfoDetailView tests', function() { + var view, tooltipStub, fileListMock, fileActions, fileList, testFileInfo; + + beforeEach(function() { + tooltipStub = sinon.stub($.fn, 'tooltip'); + fileListMock = sinon.mock(OCA.Files.FileList.prototype); + fileActions = new OCA.Files.FileActions(); + fileList = new OCA.Files.FileList($('<table></table>'), { + fileActions: fileActions + }); + view = new OCA.Files.MainFileInfoDetailView({ + fileList: fileList, + fileActions: fileActions + }); + testFileInfo = new OCA.Files.FileInfoModel({ + id: 5, + name: 'One.txt', + mimetype: 'text/plain', + permissions: 31, + path: '/subdir', + size: 123456789, + mtime: Date.UTC(2015, 6, 17, 1, 2, 0, 0) + }); + }); + afterEach(function() { + view.remove(); + view = undefined; + tooltipStub.restore(); + fileListMock.restore(); + + }); + describe('rendering', function() { + it('displays basic info', function() { + var clock = sinon.useFakeTimers(Date.UTC(2015, 6, 17, 1, 2, 0, 3)); + var dateExpected = OC.Util.formatDate(Date(Date.UTC(2015, 6, 17, 1, 2, 0, 0))); + view.setFileInfo(testFileInfo); + expect(view.$el.find('.fileName').text()).toEqual('One.txt'); + expect(view.$el.find('.fileName').attr('title')).toEqual('One.txt'); + expect(view.$el.find('.size').text()).toEqual('117.7 MB'); + expect(view.$el.find('.size').attr('title')).toEqual('123456789 bytes'); + expect(view.$el.find('.date').text()).toEqual('a few seconds ago'); + expect(view.$el.find('.date').attr('title')).toEqual(dateExpected); + clock.restore(); + }); + it('displays favorite icon', function() { + testFileInfo.set('tags', [OC.TAG_FAVORITE]); + view.setFileInfo(testFileInfo); + expect(view.$el.find('.favorite img').attr('src')) + .toEqual(OC.imagePath('core', 'actions/starred')); + + testFileInfo.set('tags', []); + view.setFileInfo(testFileInfo); + expect(view.$el.find('.favorite img').attr('src')) + .toEqual(OC.imagePath('core', 'actions/star')); + }); + it('displays mime icon', function() { + // File + testFileInfo.set('mimetype', 'text/calendar'); + view.setFileInfo(testFileInfo); + + expect(view.$el.find('.thumbnail').css('background-image')) + .toContain('filetypes/text-calendar.svg'); + + // Folder + testFileInfo.set('mimetype', 'httpd/unix-directory'); + view.setFileInfo(testFileInfo); + + expect(view.$el.find('.thumbnail').css('background-image')) + .toContain('filetypes/folder.svg'); + }); + it('displays thumbnail', function() { + testFileInfo.set('mimetype', 'test/plain'); + view.setFileInfo(testFileInfo); + + var expectation = fileListMock.expects('lazyLoadPreview'); + expectation.once(); + + view.setFileInfo(testFileInfo); + + fileListMock.verify(); + }); + it('rerenders when changes are made on the model', function() { + view.setFileInfo(testFileInfo); + + testFileInfo.set('tags', [OC.TAG_FAVORITE]); + + expect(view.$el.find('.favorite img').attr('src')) + .toEqual(OC.imagePath('core', 'actions/starred')); + + testFileInfo.set('tags', []); + + expect(view.$el.find('.favorite img').attr('src')) + .toEqual(OC.imagePath('core', 'actions/star')); + }); + it('unbinds change listener from model', function() { + view.setFileInfo(testFileInfo); + view.setFileInfo(new OCA.Files.FileInfoModel({ + id: 999, + name: 'test.txt', + path: '/' + })); + + // set value on old model + testFileInfo.set('tags', [OC.TAG_FAVORITE]); + + // no change + expect(view.$el.find('.favorite img').attr('src')) + .toEqual(OC.imagePath('core', 'actions/star')); + }); + }); + describe('events', function() { + it('triggers default action when clicking on the thumbnail', function() { + var actionHandler = sinon.stub(); + + fileActions.registerAction({ + name: 'Something', + mime: 'all', + permissions: OC.PERMISSION_READ, + actionHandler: actionHandler + }); + fileActions.setDefault('text/plain', 'Something'); + + view.setFileInfo(testFileInfo); + + view.$el.find('.thumbnail').click(); + + expect(actionHandler.calledOnce).toEqual(true); + expect(actionHandler.getCall(0).args[0]).toEqual('One.txt'); + expect(actionHandler.getCall(0).args[1].fileList).toEqual(fileList); + expect(actionHandler.getCall(0).args[1].fileActions).toEqual(fileActions); + expect(actionHandler.getCall(0).args[1].fileInfoModel).toEqual(testFileInfo); + }); + it('triggers "Favorite" action when clicking on the star', function() { + var actionHandler = sinon.stub(); + + fileActions.registerAction({ + name: 'Favorite', + mime: 'all', + permissions: OC.PERMISSION_READ, + actionHandler: actionHandler + }); + + view.setFileInfo(testFileInfo); + + view.$el.find('.action-favorite').click(); + + expect(actionHandler.calledOnce).toEqual(true); + expect(actionHandler.getCall(0).args[0]).toEqual('One.txt'); + expect(actionHandler.getCall(0).args[1].fileList).toEqual(fileList); + expect(actionHandler.getCall(0).args[1].fileActions).toEqual(fileActions); + expect(actionHandler.getCall(0).args[1].fileInfoModel).toEqual(testFileInfo); + }); + }); +}); diff --git a/apps/files/tests/service/tagservice.php b/apps/files/tests/service/tagservice.php index 2b5d1e5ec34..147e698aaaa 100644 --- a/apps/files/tests/service/tagservice.php +++ b/apps/files/tests/service/tagservice.php @@ -1,6 +1,5 @@ <?php /** - * @author Morris Jobke <hey@morrisjobke.de> * @author Vincent Petry <pvince81@owncloud.com> * * @copyright Copyright (c) 2015, ownCloud, Inc. |